¿Cómo registrar todos los comandos de Bash por todos los usuarios en un servidor?

19

Nuestra pequeña empresa ejecuta Ubuntu Server 11.10, a la que un par de personas tienen acceso SSH. Los terminales reales también se usan a veces. ¿Cómo podemos registrar localmente todos los comandos de Bash, junto con el usuario y la marca de tiempo?

Podemos suponer que nadie es infame e intenta activamente evitar el registro, pero preferiríamos que los usuarios no tengan acceso directo de escritura a sus archivos de registro. Las sesiones simultáneas deben manejarse correctamente.

    
pregunta Tin 07.01.2012 - 15:19

7 respuestas

28

Para las shells BASH, edite el archivo BASH de configuración de tiempo de ejecución de BASH:

sudo -e /etc/bash.bashrc

Añadir al final de ese archivo:

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

Configure el registro para "local6" con un nuevo archivo:

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

Y los contenidos ...

local6.*    /var/log/commands.log

Reiniciar rsyslog:

sudo service rsyslog restart

Cerrar sesión. Inicia sesión. ¡Voila!

Pero olvidé la 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

Así que agrega el nuevo archivo de registro bash-commands en esa lista:

/var/log/commands.log

Guardar.

    
respondido por el user8290 07.01.2012 - 15:45
4

Un sistema de contabilidad de procesos puede ser útil a este respecto, particularmente el paquete acct que proporciona los comandos lastcomm y ac.

Los comandos de CA imprimen estadísticas sobre el tiempo de conexión de los usuarios, en horas. Esta es la cantidad de tiempo que el usuario ha estado conectado al sistema, ya sea de forma remota a través de SSH o un terminal serie, o mientras está en la consola.

El comando lastcomm muestra información sobre los comandos ejecutados previamente. Las entradas más recientes se encuentran en la parte superior de la lista. También se muestra la cantidad total de tiempo de CPU que utilizó cada proceso.

Un viejo tutorial que puede ser útil está aquí:

enlace

Otros comandos de contabilidad como el último y así sucesivamente se pueden encontrar en este tutorial:

enlace

    
respondido por el Sabacon 07.01.2012 - 17:17
3

Puede encontrar aquí un script para registrar todo bash comandos / integradas en un archivo de texto o en un servidor syslog sin utilizar un parche o una herramienta ejecutable especial.

Muy fácil de implementar, ya que es un simple script de shell que necesita ser llamado una vez en la inicialización del bash .

Es gratis y espero que se ajuste a tus necesidades.

    
respondido por el Francois Scheurer 13.09.2012 - 11:35
2

Puedes usar snoopy .

Snoopy logger puede adaptarse a su propósito. No pretende ser una solución de registro inevitable, sino una herramienta útil para administradores diligentes que prefieren hacer un seguimiento de sus propias acciones.

Divulgación: soy un mantenedor astuto.

    
respondido por el Bostjan Skufca 05.11.2014 - 23:15
0

Para ocuparse de varias sesiones sin sobreescribir el archivo del historial, deberá colocar "shopt -s histappend" en un archivo de inicio de Bash. Consulte también esta pregunta sobre el mismo problema.

    
respondido por el pdp 05.03.2014 - 15:28
0

prueba esto (las soluciones anteriores no funcionarán al 100% con bash 4.3):

export HISTTIMEFORMAT="%Y-%m-%d %T "
export PROMPT_COMMAND='trap "" 1 2 15; history -a >(tee -a ~/.bash_history | while read line; do if [[ $line =~ ^#[0-9]*$ ]]; then continue; fi; logger -p user.info -t "bash[$$]" "($USER) $line"; done); trap 1 2 15;'

esto hace el registro E impide el registro de las marcas de tiempo que se utilizan para el archivo de historial de bash. la trampa es necesaria, ya que bash enviará las señales al "subjob" después de presionar strg + c varias veces (probado con bash 4.3). esto forzará el cierre de sesión del usuario actual (por ejemplo, inició sesión con sudo)

    
respondido por el Hans-Joachim Kliemeck 12.10.2014 - 21:26
0

También puedes intentar instalar acct. Acct mantiene una pista de auditoría detallada de lo que se está haciendo en sus sistemas Linux.

sudo apt-get install acct
    
respondido por el user571354 08.08.2016 - 00:01

Lea otras preguntas en las etiquetas