Es política de la compañía que los administradores inicien sesión en los servidores a través de un nombre de usuario personal y luego se ejecuten sudo -i
para convertirse en root. Al ejecutarse sudo -i
, sudo creará una variable de entorno llamada SUDO_USER
, que contiene el nombre de usuario del usuario original.
¿Hay alguna manera de registrar TODOS los comandos dentro de syslog con algo similar a la siguiente sintaxis:
${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}
Una entrada de ejemplo sería:
Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg
Obviamente, no tiene que ser exactamente la sintaxis anterior, solo tiene que incluir un mínimo del usuario real (por ejemplo, root), el usuario de sudo (por ejemplo, ksoviero) y el comando completo que se ejecutó (por ejemplo, yum instalar random-pkg).
Ya lo intenté snoopy
, pero no incluyó la SUDO_USER
variable.
auditd
.auditd
, y aunque logré registrar todos los comandos que se ejecutan, no incluye laSUDO_USER
variable (o información equivalente), y no puedo encontrar una manera de incluirla. Cualquier ayuda sería muy apreciada!Respuestas:
Actualización : 2 cosas más que han aparecido en los comentarios y en las preguntas de seguimiento:
auditd
esta manera aumentará drásticamente su volumen de registro, especialmente si el sistema se usa mucho a través de la línea de comandos. Ajuste su política de retención de registros.Auditd
Los registros en el host donde se crean son tan seguros como otros archivos en el mismo cuadro. Reenvíe sus registros a un servidor de recopilación de registros remoto como ELK o Graylog para preservar la integridad de sus registros. Además, agregando al punto anterior, permite eliminar de manera más agresiva los registros antiguos.Como sugirió Michael Hampton,
auditd
es la herramienta correcta para el trabajo aquí.Probé esto en una instalación de Ubuntu 12.10, por lo que su kilometraje puede variar en otros sistemas.
Instalar
auditd
:apt-get install auditd
Agregue estas 2 líneas a
/etc/audit/audit.rules
:Estos rastrearán todos los comandos ejecutados por root (
euid=0
). ¿Por qué dos reglas? Laexecve
syscall debe rastrearse en código de 32 y 64 bits.Para deshacerse de los
auid=4294967295
mensajes en los registros, agréguelosaudit=1
al cmdline del núcleo (editando/etc/default/grub
)Coloca la línea
session required pam_loginuid.so
en todos los archivos de configuración de PAM que son relevantes para login (
/etc/pam.d/{login,kdm,sshd}
), pero no en los archivos que son relevantes parasu
osudo
. Esto permitiráauditd
obtener el usuario que llamauid
correctamente al llamarsudo
osu
.Reinicie su sistema ahora.
Iniciemos sesión y ejecutemos algunos comandos:
Esto producirá algo como esto en
/var/log/audit/auditd.log
:La
auid
columna contiene el usuario llamanteuid
, que le permite filtrar los comandos ejecutados por este usuario conEsto incluso enumerará los comandos que el usuario ejecutó como root.
Fuentes:
fuente
Recuerde que sudo en sí registra todos los comandos de sudo en el syslog, por lo que todos los usuarios deben ser educados para que no solo sudo obtenga un shell raíz sino que:
El problema con este o cualquier otro enfoque que he pensado es que, como
root
usuario, es bastante difícil evitar que un usuario evada cualquier tipo específico de registro. Por lo tanto, cualquier cosa que intente será <100%, siento decirlo.Educación, documentación, aplicación y sobre todo confianza es lo que se necesita.
fuente
Una vez me enfrenté al mismo problema y tuve que encontrar una solución rápida y sucia: cada usuario de sudo tendrá su propio archivo de historial una vez que ejecute el comando
sudo -i
En
/root/.bashrc
agregué la siguiente línea:Por lo tanto, cada usuario que sudos a la raíz tendrá un archivo de historial .bash_history-username.
Otro método -
Agregue el siguiente código
/root/.bashrc
y agregará el nombre de usuario, sudo-user y el comando al archivo de registro, donde se establezca el nivel de notificación, muy probablemente / var / log / messages.Crédito a - http://backdrift.org/logging-bash-history-to-syslog-using-traps
fuente
/bin/sh
,unset HISTFILE
o/bin/bash --norc
.Varios establecimientos prohíben el uso de auditado porque consume muchos recursos y puede dar lugar a la posibilidad de ataques de denegación de servicio.
Una solución es configurar el último shell Korn (ksh-93, consulte http://kornshell.com/ para más detalles) para registrar todos los comandos ejecutados como root en un servidor remoto de syslog, y luego exigir por política que, excepto en casos de emergencia situaciones, los administradores del sistema inician sesión con cuentas personales y ejecutan el shell Korn mejorado a través de sudo. El examen de los registros puede detectar cuando un administrador lanza otro shell desde el shell aprobado para cubrir sus huellas, y la SA puede ser educada según sea necesario.
fuente
Sudo tiene algo llamado sudoreplay cuando las sesiones habilitadas se registran y se pueden reproducir más tarde, funciona de manera similar al
script
comando que crea un mecanografiado de sesión terminal que luego se puede reproducir con elscriptreplay
comando.fuente
No es que haya nada malo con ninguna de las otras respuestas hasta el momento, pero si decide que
sudo
el inicio de sesiónsyslog
es satisfactorio, ¿puedo sugerir una arruga?Eso evita el problema de "ahora que me he convertido en root, puedo eliminar cualquier rastro de mi malversación de los registros". Ahora puede ser root en el cuadro local, pero no puede recuperar ese paquete de registro desde la red y (presumiblemente) no tiene privilegios de root en el host de auditoría remota.
He estado haciendo esto con algunas de las redes que administro durante años, y tiene otras dos ventajas de señal:
En primer lugar, hay un lugar en la red para revisar todos los syslogs, lo que permite una correlación mucho más fácil de los incidentes, y también lo es una ventanilla única para investigaciones como "Cuando alguien
juno
se quejaba de que el servidor NFShera
no respondía, alguien más se quejaba de ¿Es lo mismo al mismo tiempo? Si es así,hera
es probable que sea el problema, veamos qué ha registrado; si no,juno
la conexión de red es más sospechosa, veamos qué másjuno
ha registrado en ese momento ".En segundo lugar, la rotación de registros de syslog se vuelve más fácil: no guarda copias de registros en hosts locales durante más de unos pocos días, pero se asegura de que el servidor de auditoría tenga una gran cantidad de espacio en disco y mantenga todos los registros de syslog allí durante varios años. Además, si, por ejemplo, desea escribirlos en medios WORM para, por ejemplo, fines de auditoría forense, solo tiene que comprar una unidad WORM.
fuente
Desde la versión 2.0.0, snoopy puede registrar variables ambientales arbitrarias.
Sin embargo, una contribución reciente señaló que el propietario del registro de tty es una respuesta bastante efectiva y elegante a la pregunta "¿Quién ejecutó ese comando, como root?".
Divulgación: soy el mantenedor de Snoopy.
fuente