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 un 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]
sudo su -
, también tiene la capacidad de eliminar todas las entradas de registro que pueda hacer de sus acciones. Si desea 100% de certeza en su registro, debe restringir ensudo
gran medida y no permitir porsudo su
completo.Respuestas:
Como está en Ubuntu 12.04, eche un vistazo a las capacidades de registro de E / S activadas a través de las opciones
log_input
ylog_output
.IMPLEMENTACIÓN: Sudo versión al menos: 1.7.4p4 necesario.
/etc/sudoers
Modificación: todo lo que necesita hacer es agregar dos etiquetas a todas las entradas de sudoers requeridas (donde se especifica "su", ya sea con comando o alias). LOG_INPUT y LOG_OUTPUT.Ejemplo:
Agregue la siguiente estructura de directorio de registro predeterminada a
sudoers
:fuente
Tu
grep
cuando hacessudo su -
falla porque no estás corriendoecho 1234567zz
, estás corriendosu -
, lo que lanza un shell. El shell está ejecutando suecho
.Esto es deliberado, y el registro de 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 se ven).
Si cambias tu grep a
grep 'COMMAND=/bin/su -' *
lo verás.sudo su -
También es un uso inútil desu
.sudo -i
hace lo mismofuente
grep 'COMMAND=/bin/su -' *
(o sin comodín:)grep 'COMMAND=/bin/su -' /var/log/auth.log
?sudo -
) se registra y su salida actualizada lo muestra. Eso es todo de lo que estamos hablando aquí. Los otros comandos, comoecho
después de cambiar de usuariosudo -
, no son comandos sudo y , por lo tanto, según mi respuesta, no están conectadosauth.log
. Solosudo
se registrarán los comandos individuales precedidos explícitamente por . Porsudo echo
lo tanto, se registra, pero simplementeecho
no lo es, independientemente del hecho de que haya cambiado al superusuario.Para aumentar la complejidad, aquí hay tres formas de registrar los comandos emitidos dentro del "sudo su -":
En cuanto a cuál es adecuado, realmente depende de lo que intente lograr con el registro.
1) Historial de comandos de Bash
Desea configurar la facilidad del historial para garantizar mantener suficientes líneas, no sobrescribir desde diferentes sesiones, no ignorar comandos y marcas de tiempo apropiadas. (Ver HIST * variables en el manual bash ). Se subvierte fácilmente editando el archivo de historial, manipulando el entorno o ejecutando otro shell.
2) envoltorio execve
snoopylogger es uno. Agregue una comprobación de
/etc/profile
que la biblioteca del registrador se encuentra en el mapa de memoria del proceso (/proc/<pid>/maps
) y, si no, configureLD_PRELOAD
y reinicie (conexec $SHELL --login "$@"
). Alternativamente, puede agregar una entrada a /etc/ld.so.preload con$LIB/snoopy.so
o rutas equivalentes a sus versiones de 32/64-bit 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 de snoopy ya no se ejecute.Syslog debe enviarse fuera de la caja para que los contenidos sean confiables.
3) auditado
Un poco 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: "¿Hay alguna forma de registrar qué efecto ha tenido el usuario en un sistema después de emitirlo
sudo su -
". Syslog debe enviarse fuera de la caja para que los contenidos sean confiables.Esta respuesta de Serverfault parece ser una configuración bastante completa para usar con auditado.
Hay algunas otras sugerencias para una pregunta similar sobre serverfault .
fuente
Porque es lo
sudo
que está haciendo el registro; registra comandos sudo. En el primer caso,sudo echo
se registra. En el segundo caso,sudo su
se registra (búscalo en/var/log/auth.log
).su
es "cambiar usuario", por defecto a root. Cualquier cosa que hagas después de eso no pasasudo
. Es lo mismo que si hubiera iniciado sesión como root; el inicio de sesión en sí está registrado, pero no todos y cada uno de los comandos.fuente
Como han dicho otros,
sudo
no puedo hacer esto.En cambio, use
auditd
. Si desea registrar todo lo hecho por root (incluyendo, por ejemplo, cosas hechas por crontab), use esto:ETA: tenga en cuenta que registrar todo afectará el rendimiento, por lo que probablemente desee limitarlo un poco. Ver
man auditctl
para ejemplos.Si solo desea registrar syscalls donde el uid de inicio de sesión original no es root, use esto en su lugar:
Los registros generalmente terminarán en /var/log/audit/audit.log. Puedes buscarlos con
ausearch
.Hay más información en las páginas de manual para
auditctl
,audit.rules
yausearch
.fuente
sudo su -
así que estás de vuelta en el punto de partidasudo su -
estará dentro~/.bash_history
si su shell es bash.echo 1234567zz
estará adentro/root/.bash_history
si el shell de root es bash.La explicación de esto ya fue publicada por goldilocks.
fuente
¿Desea iniciar sesión porque cree que es una falla de seguridad? ¿Has pensado en este comando?
sudo bash
igual de malo, en mi humilde opinión.Si le preocupa lo que la gente puede hacer con sudo, deberá restringir su uso. Puede restringir los comandos que pueden ejecutar también. Restrinja el acceso a / bin / su si le preocupa.
fuente
¿Qué hay de esto?
o
o larga línea:
sudo -E conserva el entorno PROMPT_COMMAND se ejecuta antes de cada solicitud
fuente
Si esto ayuda, puede usar la opción "NOEXEC" de sudoers.
Necesitas definirlo como
Esto evitará fugas de shell y el usuario no podrá usar sudo -i o sudo -s o sudo su -
Esto viene con una desventaja, sin embargo, se deshabilitará cualquier escape de shell. para la ejecución de un script desde dentro de un script también será denegado.
fuente
No hagamos esto complicado: cada vez que
sudo
se llama, informa este hecho en algún archivo/var/log
(en su sistemaauth.log
, en mi cuadro OS X essystem.log
).sudo
informa sus argumentos de línea de comandos, pero no tiene conocimiento de lo que podría suceder dentro de un comando interactivo comosu
.Esto no significa que no haya un registro de lo que sucede en un subshell raíz: los comandos de Shell se guardan en el historial del shell. En mi sistema, el guardado del historial de root está habilitado de manera predeterminada, por lo que todo lo que tengo que hacer es buscar
~root/.sh_history
un registro de lo que se hizo (a menos que alguien lo haya manipulado, por supuesto, pero también podrían manipularlo/var/log
).Creo que esta es la mejor solución para ti. Si no, ve a la ciudad con
auditd
, como sugirió @Jenny.PD. Si el historial de la raíz aún no está habilitado, habilitarlo depende del shell que utilice. Para
bash
, establecerHISTORY
yHISTFILESIZE
en un número lo suficientemente grande (el valor predeterminado es 500, dice mi manual). Si lo desea, puede especificar dónde se guarda el historial configurandoHISTFILE
una ruta (predeterminado$HOME/.sh_history
)fuente
Es posible que desee crear un mecanografiado de su sesión usando
script(1)
:Ahora puede
grep
(tenga en cuenta que las#
indicaciones se registran en realidad/tmp/my_typescript
):Alternativamente, incluso puede ver toda la sesión nuevamente con
scriptreplay(1)
:El archivo
/tmp/my_typescript.timing
contiene información cuando se ha invocado cada comando. Hay otras herramientas comottyrec
oshelr
que tienen aún más campanas y silbatos.fuente