GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo registrar cada comando escrito en Bash y cada operación de archivo?

Me gustaría registrar cada comando escrito en bash (ya sea por root o por el usuario), así como cada operación de archivo.

La idea es que podría escribir herramientas que pudieran interrogar este archivo de registro y brindar información muy útil.

Por ejemplo, sería genial enumerar todos los comandos que se hayan escrito, uno por línea, con “- – -” para un intervalo de tiempo de 8 a 24 horas y “===p. 24 de junio de 2014 ===” para intervalo de>24 h. Si además elimina los duplicados dentro de una sesión “===…” ¡aún mejor!

Eso significaría que cada vez que realizo alguna tarea como "actualizar matraz/mod_wsgi/apache a Python 3.x" queda un registro, un rastro que puedo seguir si tengo que hacer lo mismo seis meses después.

Con el mismo fin, sería muy bueno ver qué cambios en el sistema de archivos ocurrieron después de instalar un paquete en particular. Eso me permitiría saber dónde se colocaron los archivos de configuración.

PD Estoy en Ubuntu 14.04

Respuesta aceptada:

Esto no es tan completo como la contabilidad real, y un usuario puede deshacerlo fácilmente, pero asumiendo que no tiene que ser un sistema de contabilidad real y que tanto BASH como rsyslog están en uso, edite el archivo BASH RC de todo el sistema. :

sudo -e /etc/bash.bashrc

Añadir al final de ese archivo:

export PROMPT_COMMAND='RET_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]+[ ]*//" ) [$RET_VAL]"'

Arriba, logger registra la hora, el usuario, el comando y el valor de retorno del comando. Configure el registro para "local6" con un nuevo archivo:

sudo -e /etc/rsyslog.d/bash.conf

Y el contenido...

local6.*    /var/log/bash_commands.log

Reiniciar rsyslog:

sudo service rsyslog restart

Cerrar sesión. Inicie sesión. Rotación de registros:

sudo -e /etc/logrotate.d/rsyslog

Hay una lista de archivos de registro para rotar de la misma manera...

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

Agregue el nuevo archivo de registro de comandos bash en esa lista:

/var/log/bash_commands.log

Guarde y reinicie/recargue rsyslog. (La rotación eventualmente sobrescribirá los archivos de registro, por lo que es posible que se necesite más reflexión o configuración).

Para ver todos los archivos que tiene instalado un paquete:

dpkg-query -L [package_name]

Así que podrías ejecutar algo así cuando instales el software.

dpkg-query -L abc-package > /var/log/files_abc-package.log

Linux
  1. Importe funciones y variables a Bash con el comando fuente

  2. Cómo cambiar permisos y propietarios a través de la línea de comandos

  3. Cómo dividir y combinar archivos desde la línea de comandos en Linux

  4. ¿Cómo registrar cada comando escrito?

  5. ¿Cómo guardar + cerrar archivo al editar en bash?

Cómo usar Sudo y el archivo Sudoers

Cómo leer un archivo línea por línea en Bash

Cómo mover archivos y directorios en Linux (comando mv)

Comando de fuente Bash

Comando de salida de Bash y códigos de salida

Cómo hacer eco en un archivo