Para saber qué IP ejecutó cierto comando en Linux usando ssh


10

Hay un servidor al que acceden muchos usuarios que usan ssh. Estoy tratando de averiguar qué usuario ejecutó un determinado comando.

Puedo conocer la lista de usuarios que actualmente acceden al servidor usando who También sabré la lista de comandos ejecutados usando history.

Pero, ¿cómo saber qué usuario ejecutó un comando como cp file1.sh file2.shen el servidor? El usuario ya ha ejecutado el comando y ha cerrado la sesión.

Respuestas:


4

Cada nuevo usuario que se conecta genera una nueva sshdsesión con un PID específico. Puede usar pstreepara imprimir qué comandos se heredan de qué sshdsesión y luego hacer una verificación cruzada de este PID /var/log/auth.log.

Ejemplo (anónimo): inicié sesión en un servidor remoto con 3 sesiones simultáneas, con el mismo usuario remoto. Ahora quiero averiguar de qué IP vino el cliente que ejecutó el comando watch date.

$ pstree -p | grep watch
        |           |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar  7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log

pstree -pmuestra que el watchcomando se hereda de sshdcon PID 15243. El uso grepde este PID en /var/auth/auth.logmuestra que fue IP 12.34.56.78 que inició esta sesión. Por lo tanto, este también es el usuario que comenzó watch.

En cuanto a encontrar historyespecíficamente a este usuario, no se puede hacer por lo que puedo ver cuando todos los usuarios remotos están usando el mismo usuario SSH local. Además, se puede falsificar / desactivar fácilmente, etc., por lo que no es realmente confiable. Si se guarda en el archivo de historial, puede buscar el cpcomando y mirar hacia atrás en el archivo, pero si no está allí, entonces no hay mucho que hacer.


Dice este error grep: /var/log/auth.log: No such file or directory:-(
Manu K Mohan

@ManuKMohan: No has indicado en qué sistema estás. Bajo RHEL / Fedora / Scientific Linux / etc., el archivo relevante es /var/log/secure.
Daniel Andersson

Anderson Estoy usando Ubuntu
Manu K Mohan

@ManuKMohan: Si /var/log/auth.log.1, etc., existen, entonces pruébelos para ver si contienen la información. Luego, reinicie rsyslog( sudo service rsyslog restart) y vea si comienza a llenarse auth.log, lo que ya debería estar haciendo. SSHD se registra /var/log/auth.logde manera predeterminada en Ubuntu , por lo que, a menos que haya cambiado explícitamente los objetivos de registro a través de /etc/ssh/ssd_configo /etc/syslog.conf(puede verificar en qué archivo authse registra el nivel aquí), debería estar allí. Si no: algo pasa :-).
Daniel Andersson

1

Puede agregar estas dos líneas a / etc / profile o / etc / bashrc para registrar todos los comandos ejecutados por bash:

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"                                                                                                  
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Esto usará syslog para registrar cada comando ejecutado junto con el usuario que lo hizo y su dirección IP en un formato como este:

Jan  8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]

Además, puede agregar la siguiente línea a su configuración de syslog (/etc/syslog.conf) para redirigir los mensajes local3 a un archivo específico.

local3.*                                                /var/log/prompt.log

Ahora es syslog-ngcomo una mejora y el archivo de configuración es /etc/syslog-ng/syslog-ng.conf .
Timo

1

Podrías usar snoopy para esto.

Debería configurarlo para registrar una variable ambiental personalizada (SSH_CLIENT) especificando IP =% {env: SSH_CLIENT} en la definición del formato del mensaje de registro (./configure flag o configurable en snoopy.ini desde la versión 2.x).

Divulgación: Snoopy mantenedor aquí.


0

Asumiendo que está usando bash, historysolo le mostrará SU historial de línea de comando. Por defecto, se lee ~/.bash_historypara el historial. Tenga en cuenta que esto se puede cambiar (aunque es poco probable) haciendo algo como HISTFILE=/home/userFoo/.my_alt_history.

Suponiendo que es root en el cuadro, puede escanear todos los directorios del usuario y leer sus historiales para ver quién ejecuta ese comando.


Ah, y si están siendo nefastos, podrían borrar fácilmente este comando de su historia. Si están activamente en el cuadro que ejecuta el comando, puede verlo conps -aux | grep "cp file1.sh file2.sh"

Todos los usuarios acceden de forma remota al mismo nombre de usuario del servidor mediante ssh. Quiero saber qué IP ha accedido a este usuario y ejecuté el comando.
Manu K Mohan

No es una buena política tener muchos usuarios compartiendo un nombre de usuario y contraseña.
pjc50
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.