
Si yo:
[user@notebook ~] sudo echo 123456uu
123456uu
[user@notebook ~]
Entonces puedo ver eso en los registros:
[root@notebook /var/log] grep 123456uu *
auth.log:Jan 9 17:01:51 notebook sudo: user : TTY=pts/3 ; PWD=/home/user ; USER=root ; COMMAND=/bin/echo 123456uu
[root@notebook /var/log]
pero si yo:
[user@notebook ~] sudo su -
[root@notebook ~] echo 1234567zz
1234567zz
[root@notebook ~]
No puedo verlo en los registros:
[root@notebook /var/log] grep 1234567zz *
[root@notebook /var/log] echo $?
1
[root@notebook /var/log]
Mi pregunta: ¿Cómo puedo activar el inicio de sesión para los comandos dentro de "sudo su -"?
El sistema operativo es Ubuntu 12.04 pero la pregunta es en general.
ACTUALIZACIÓN#1:
[user@notebook ~] sudo su -
[sudo] password for user:
[root@notebook ~] echo zizizi
zizizi
[root@notebook ~] cd /var/log
[root@notebook /var/log] grep -iIR 'zizizi' *
[root@notebook /var/log] grep 'COMMAND=/bin/su -' *
auth.log:Jan 10 15:42:42 notebook sudo: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/su -
[root@notebook /var/log]
Respuesta1
Ya que estás en Ubuntu 12.04, echa un vistazo a las capacidades de registro de E/S activadas a través de las opciones log_input
y log_output
.
log_input
Si está configurado,
sudo
ejecutará el comando en un pseudo tty y registrará todas las entradas del usuario. Si la entrada estándar no está conectada al tty del usuario, debido a la redirección de E/S o porque el comando es parte de una canalización, esa entrada también se captura y almacena en un archivo de registro separado.La entrada se registra en el directorio especificado por la
iolog_dir
opción (/var/log/sudo-io
de forma predeterminada) utilizando un ID de sesión único que se incluye en la línea de registro sudo normal, con el prefijoTSID=
. Laiolog_file
opción se puede utilizar para controlar el formato del ID de sesión.Tenga en cuenta que la entrada del usuario puede contener información confidencial, como contraseñas (incluso si no se reflejan en la pantalla), que se almacenarán en el archivo de registro sin cifrar. En la mayoría de los casos, todo lo que se requiere es registrar la salida del comando a través de log_output.
log_output
Si está configurado,
sudo
ejecutará el comando en un pseudo tty y registrará todos los resultados que se envían a la pantalla, similar al comando script(1). Si la salida estándar o el error estándar no está conectado al tty del usuario, debido a la redirección de E/S o porque el comando es parte de una canalización, esa salida también se captura y almacena en archivos de registro separados.La salida se registra en el directorio especificado por la
iolog_dir
opción (/var/log/sudo-io
de forma predeterminada) utilizando un ID de sesión único que se incluye en la línea de registro sudo normal, con el prefijoTSID=
. Laiolog_file
opción se puede utilizar para controlar el formato del ID de sesión.Los registros de salida se pueden ver con la utilidad sudoreplay(8), que también se puede utilizar para enumerar o buscar los registros disponibles.
IMPLEMENTACIÓN: Versión Sudo al menos: se necesita 1.7.4p4.
/etc/sudoers
Modificación: todo lo que necesita hacer es agregar dos etiquetas a todas las entradas sudoers requeridas (donde se especifica "su", ya sea con comando o alias). LOG_INPUT y LOG_OUTPUT.
Ejemplo:
%admins ALL=(ALL) NOPASSWD: LOG_INPUT: LOG_OUTPUT: ALL
Agregue la siguiente estructura de directorio de registro predeterminada a sudoers
:
Defaults iolog_dir=/var/log/sudo-io/%{user}
Respuesta2
Tu grep
proceso sudo su -
falla porque no estás ejecutando echo 1234567zz
, estás ejecutando su -
, lo que inicia un shell. Luego, el shell ejecuta su echo
.
Esto es deliberado, y registrar cada ejecución de comando inundaría su syslog con información inútil (generalmente hay toneladas de programas que se ejecutan detrás de escena que normalmente no ve).
Si cambias tu grep a grep 'COMMAND=/bin/su -' *
lo verás.
sudo su -
También es un uso inútil de su
. sudo -i
hace lo mismo.
Respuesta3
En complejidad creciente, aquí hay tres formas de registrar los comandos emitidos dentro de "sudo su -":
- Confíe en el historial de comandos de bash
- Instalar un contenedor de registro ejecutivo
- Utilice la auditoría de SELinux
En cuanto a cuál es adecuado, realmente depende de lo que intente lograr con el registro.
1) Historial de comandos Bash
Le recomendamos configurar la función de historial para garantizar que se mantengan suficientes líneas, no sobrescribir desde diferentes sesiones, no ignorar comandos y marcas de tiempo apropiadas. (Consulte las variables HIST* en lamanual de bash). Se subvierte fácilmente editando el archivo histórico, manipulando el entorno o ejecutando otro shell.
2) contenedor ejecutivo
Registrador Snoopyes uno. Agregue una verificación /etc/profile
para que la biblioteca del registrador esté en el mapa de memoria del proceso ( /proc/<pid>/maps
), y si no, configúrela LD_PRELOAD
y reinicie (con exec $SHELL --login "$@"
). Alternativamente, puede agregar una entrada a /etc/ld.so.preload con $LIB/snoopy.so
ocamino(s) equivalente(s)a sus versiones de 32/64 bits de snoopy.so.
Aunque es más difícil, la LD_PRELOAD
versión de variable de entorno de lo anterior aún podría subvertirse manipulando el entorno de ejecución para que el código espía ya no se ejecute.
Syslog debe enviarse fuera de la caja para que el contenido sea confiable.
3) auditado
Ligeramente más sencillo de configurar que el contenedor execve, pero más difícil de extraer la información. Esta es la respuesta a la pregunta que probablemente te estés haciendo: "¿Existe alguna manera de registrar el efecto que el usuario ha tenido en un sistema después de emitir sudo su -
?". Syslog debe enviarse fuera de la caja para que el contenido sea confiable.
EsteRespuesta de error del servidorParece ser una configuración bastante completa para usar con auditd.
Hay algunas otras sugerencias parapregunta similar sobre serverfault.
Respuesta4
Como han dicho otros, sudo
no puedo hacer esto.
En su lugar, utilice auditd
. Si quieres iniciar sesióntodohecho por root (incluyendo, por ejemplo, cosas hechas por crontab), use esto:
sudo auditctl -a exit,always -F euid=0
ETA: tenga en cuenta que registrar todo afectará el rendimiento, por lo que probablemente desee limitarlo un poco. Ver man auditctl
ejemplos.
Si solo desea registrar llamadas al sistema donde el uid de inicio de sesión original no es root, use esto en su lugar:
sudo auditctl -a exit,always -F euid=0 -F auid!=0
Los registros normalmente terminarán en /var/log/audit/audit.log. Puedes buscarlos con ausearch
.
Hay más información en las páginas de manual auditctl
de audit.rules
y ausearch
.