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