¿Cómo registro todos los comandos de shell de UNIX enviados por todos los usuarios?


8

¿Hay una manera elegante de registrar cada comando enviado en todos los shells en una máquina? Esto está en el contexto de un servidor Ubuntu poco utilizado, del cual soy el único usuario humano. (Los sistemas automatizados utilizan varias cuentas de usuario).

Me gustaría que esto sea discreto y de bajo costo, por lo que me encantaría si hubiera un método simple que implique algo así script.

Respuestas:


9

Desde los albores de los tiempos (en realidad se remonta a la época en que las personas tenían que pagar dinero real por ciclo de computadora que usaban) Unix y sus clones han incorporado un sistema llamado Process Accounting ( acct). Esto permitió a los administradores del sistema saber exactamente qué estaban haciendo sus usuarios y, por lo tanto, podrían facturarles en consecuencia.

Las acctinstalaciones todavía existen en la mayoría de los sistemas Unix y Linux hasta el día de hoy.

Este sitio: http://www.cyberciti.biz/tips/howto-log-user-activity-using-process-accounting.html le indica cómo habilitarlo.


¿Se puede usar esto también para registrar qué usuario realiza sudo y su, y cuál de los comandos de root después?
Daniel Beck

Creo que registra cada ejecución de comando, tecleada por usuario, tty, etc. Puede hacer coincidir los comandos en un tty con el usuario que inició sesión en ese tty para rastrear a través de los usuarios a los que ingresaron.
Majenko

Gracias, desconocía totalmente esta característica. Una lectura rápida de las páginas del manual sugiere que el registro continúa hasta que se alcanza una condición de poco espacio en el disco, de ahí tal vez la necesidad de un script logrotate.
jl6

pensé que la contabilidad de procesos acaba de registrar qué programa se ejecutó, ¿no el comando con todos sus argumentos?
Sirex

2

Aquí hay una manera muy agradable y rápida de registrar todos los comandos de shell :

Paso 1:

Use su editor de texto favorito para abrir / etc / bashrc y agregue la siguiente línea al final:

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

Paso 2:

Configure el syslogger para capturar local6 en un archivo de registro agregando esta línea en el archivo /etc/syslog.conf:

local6.*                /var/log/cmdlog.log

[Vea la publicación completa del blog aquí]


Alerto al usuario que podría deshabilitar esto restableciendo la variable y debido a que se ejecuta "antes de emitir cada solicitud principal", este hecho no se registrará.
dmckee --- ex-gatito moderador

2

Podrías usar snoopy .

Es muy sencillo de instalar y eliminar (no se requiere módulo de kernel ni parcheo). Tenga en cuenta que esta no es una solución de auditoría adecuada y puede eludirse fácilmente.

Divulgación: Soy actual mantenedor de snoopy.


Bostjan Skufca también ha proporcionado instrucciones adicionales para instalar snoopy en Ubuntu aquí y también en un comentario adicional en el mismo hilo aquí .
karel

+1 para snoopy; proporciona un buen registro de comandos y argumentos en /var/log/auth.log
David Goodwin

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.