Cada nuevo usuario que se conecta genera una nueva sshd
sesión con un PID específico. Puede usar pstree
para imprimir qué comandos se heredan de qué sshd
sesió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 -p
muestra que el watch
comando se hereda de sshd
con PID 15243. El uso grep
de este PID en /var/auth/auth.log
muestra 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 history
especí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 cp
comando y mirar hacia atrás en el archivo, pero si no está allí, entonces no hay mucho que hacer.
grep: /var/log/auth.log: No such file or directory
:-(/var/log/secure
./var/log/auth.log.1
, etc., existen, entonces pruébelos para ver si contienen la información. Luego, reiniciersyslog
(sudo service rsyslog restart
) y vea si comienza a llenarseauth.log
, lo que ya debería estar haciendo. SSHD se registra/var/log/auth.log
de 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_config
o/etc/syslog.conf
(puede verificar en qué archivoauth
se registra el nivel aquí), debería estar allí. Si no: algo pasa :-).Puede agregar estas dos líneas a / etc / profile o / etc / bashrc para registrar todos los comandos ejecutados por bash:
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:
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.
fuente
syslog-ng
como una mejora y el archivo de configuración es/etc/syslog-ng/syslog-ng.conf
.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í.
fuente
Asumiendo que está usando bash,
history
solo le mostrará SU historial de línea de comando. Por defecto, se lee~/.bash_history
para el historial. Tenga en cuenta que esto se puede cambiar (aunque es poco probable) haciendo algo comoHISTFILE=/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.
fuente
ps -aux | grep "cp file1.sh file2.sh"