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 -ipara 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_USERvariable.

auditd.auditd, y aunque logré registrar todos los comandos que se ejecutan, no incluye laSUDO_USERvariable (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:
auditdesta 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.AuditdLos 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,
auditdes 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 auditdAgregue estas 2 líneas a
/etc/audit/audit.rules:Estos rastrearán todos los comandos ejecutados por root (
euid=0). ¿Por qué dos reglas? Laexecvesyscall debe rastrearse en código de 32 y 64 bits.Para deshacerse de los
auid=4294967295mensajes en los registros, agréguelosaudit=1al cmdline del núcleo (editando/etc/default/grub)Coloca la línea
session required pam_loginuid.soen 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 parasuosudo. Esto permitiráauditdobtener el usuario que llamauidcorrectamente al llamarsudoosu.Reinicie su sistema ahora.
Iniciemos sesión y ejecutemos algunos comandos:
$ id -u 1000 $ sudo ls / bin boot data dev etc inicio initrd.img initrd.img.old lib lib32 lib64 perdido + encontrado medios mnt opt proc root run sbin scratch selinux srv sys tmp usr var vmlinuz vmlinuz.old $ sudo su - # ls / etc [...]Esto producirá algo como esto en
/var/log/audit/auditd.log:La
auidcolumna 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
rootusuario, 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 -iEn
/root/.bashrcagregué 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/.bashrcy 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 HISTFILEo/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
scriptcomando que crea un mecanografiado de sesión terminal que luego se puede reproducir con elscriptreplaycomando.fuente
No es que haya nada malo con ninguna de las otras respuestas hasta el momento, pero si decide que
sudoel inicio de sesiónsysloges 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
junose quejaba de que el servidor NFSherano respondía, alguien más se quejaba de ¿Es lo mismo al mismo tiempo? Si es así,heraes probable que sea el problema, veamos qué ha registrado; si no,junola conexión de red es más sospechosa, veamos qué másjunoha 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