¿Vista en vivo de los comandos de shell de Linux ejecutados por otro usuario?

27

¿Es posible que el usuario root en Linux tenga una vista en tiempo real (o casi en tiempo real) de los comandos de shell que ejecuta otro usuario conectado a través de un terminal o SSH? Obviamente están almacenados en .bash_history, pero eso solo se guarda cuando el usuario cierra la sesión y también se puede deshabilitar.

Editar: idealmente, algo que se pueda encender y apagar fácilmente.

EMP
fuente
ttyrpldluce bien. recomendado en esta pregunta. serverfault.com/questions/40011/…
hayalci el

Respuestas:

16

como root, puede reemplazar su shell con un simple script de contenedor que registra sus comandos antes de pasarlos al shell real. Esto solo funcionaría antes de que inicien sesión.

Tim Howland
fuente
20
Hicimos esto para monitorear una cuenta pirateada en un empleador anterior. Creó "/ bin / bash" (observe el espacio) que era un contenedor alrededor del comando de script. Funcionó como un encanto :)
Comandante Keen
¡Muy inteligente! +1
EMP
9

Use sniffy si desea entrar en la sesión del usuario o screen -xsi tiene cooperación.

Sin embargo, tenga en cuenta que espiar a sus usuarios puede estar sujeto a regulaciones o incluso completamente ilegal dependiendo de su legislación local.

David Schmitt
fuente
7

Cambiar el caparazón es muy trivial para eludir, parchar el caparazón en sí es mejor, pero debe parchear todos los caparazones. Nuestro cracker favorito usa esto, como un bono que no se molesta en deshabilitar bash_history.

ssh host /bin/sh -i  

Snoopy es un contenedor alrededor de las funciones ejecutivas, y registra cualquier binario externo que se ejecute (no shell incorporado)

La sugerencia de @David Schmitt sniffy usa un método mejor, toca el pseudoterminal.

ttysnoop usa el mismo método, pero no se mantiene. (Probablemente tuve problemas para registrar conexiones ssh, no puedo recordar)

Puede intentar parchar ssh para registrar una sesión, pero ese parche es antiguo .

pseudopod y rootsh pueden usarse para registrar sudos legítimos. Y shwatcr es otra cosa para monitorear los inicios de sesión.

hayalci
fuente
¿Qué se ssh host /bin/sh -isupone que debe hacer exactamente ?
Mike Pennington
+1 para snoopy, no perfecto, pero hizo lo que necesitábamos que hiciera.
skinp
4

Si está cooperando, puede usar la pantalla GNU entre dos usuarios: haga que uno establezca la sesión de pantalla y luego que el otro se una usando screen -x.

Si desea que el root "espíe" a otros usuarios sin su conocimiento, la solución mejor y más eficiente podría ser el software / hardware keylogger.

Tim
fuente
4

Sysdig es una poderosa herramienta de exploración a nivel de sistema: esto es lo que quieres;)

ejemplo:

sysdig -i spy_users

Categoría: Seguridad

spy_users Muestra la actividad interactiva del usuario

enumera todos los comandos que los usuarios inician interactivamente (por ejemplo, desde bash) y cada directorio que visitan los usuarios

Andrzej Chabierski
fuente
2

Puedes probar el parche bash-BOFH. Busca el parche.

squillman
fuente
1

Escribí un método para registrar todos los comandos / bash 'bash' en un archivo de texto o un servidor 'syslog' sin usar un parche o una herramienta ejecutable especial.

Es muy fácil de implementar, ya que es un simple shellscript que debe llamarse una vez en la inicialización de 'bash'.

Vea el método aquí: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger

Francois Scheurer
fuente
¡Bienvenido a Server Fault! Realmente preferimos que las respuestas tengan contenido, no indicadores al contenido. Esto asegura que la respuesta permanecerá disponible incluso si el enlace se corta. Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
user9517 es compatible con GoFundMonica el
¡Bienvenido a Server Fault! Lea nuestras preguntas frecuentes en particular ¿ Puedo promocionar productos o sitios web con los que estoy afiliado aquí? .
user9517 es compatible con GoFundMonica el
1
function spy() { 
   ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ; 
   /usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \
        | grep -Poi 'write\(...\"[[:print:]]{1,2}\"[.][.][.][,]..\)' ; 
}

[436] klikevil@epiphany ~ $ w<br>
 09:36:43 up 12:06,  6 users,  load average: 0.46, 0.29, 0.20<br>
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT<br>
klikevil pts/0    75.125.126.8     23:05    2:19m 10:33   0.18s cmd                                      <br>
klikevil pts/1    75.125.126.8     00:18    6:50m  0.06s  0.04s sshd: klikevil [priv]<br>
klikevil tty7     :0               09:02   17:07m  2:02   0.32s x-session-manager<br>
klikevil pts/2    :0.0             09:03    3:30   0.08s  0.08s bash<br>
klikevil pts/3    :0.0             09:03    0.00s  0.76s  0.00s w<br>
klikevil pts/4    :0.0             09:06    3:13   0.46s  0.00s /bin/sh /usr/bin/thunder<br>
[437] klikevil@epiphany ~ $ spy 2<br>
write(2, "e"..., 1)<br>
write(2, "c"..., 1)<br>
write(2, "h"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "s"..., 1)<br>
write(2, "u"..., 1)<br>
write(2, "p"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "d"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, "g"..., 1)<br>
write(2, "\n"..., 1)<br>
^C<br>

Parece funcionar bastante bien si no te importa clasificar un montón de saltos de línea.

Jessica Parker
fuente
1

Snoopy está diseñado para el registro de comandos ligero.

Si desea ver en vivo los comandos ejecutados en su sistema, puede ser este. Advertencia: snoopy no es una solución de auditoría adecuada y puede eludirse fácilmente.

Sin embargo, si desea ver todos los caracteres escritos en la terminal, tendrá que usar otra herramienta.

Divulgación: Soy actual mantenedor de snoopy.

Bostjan Skufca
fuente
-3

intente esta exportación HISTTIMEFORMAT = "% T" ejecute un par de comandos e "historial" después ...

masber
fuente