Per sapere quale IP ha eseguito un determinato comando in linux usando ssh


10

C'è un server a cui accedono molti utenti usando ssh. Sto cercando di capire quale utente ha eseguito un determinato comando.

Sono in grado di conoscere l'elenco degli utenti che attualmente accedono al server utilizzando who Inoltre conoscerò l'elenco dei comandi eseguiti utilizzando history.

Ma come sapere quale utente ha eseguito un comando come cp file1.sh file2.shnel server? L'utente ha già eseguito il comando e si è disconnesso

Risposte:


4

Ogni nuovo utente che si connette genera una nuova sshdsessione con un PID specifico. È possibile utilizzare pstreeper stampare quali comandi sono ereditati da quale sshdsessione, quindi eseguire un controllo incrociato di questo PID /var/log/auth.log.

Esempio (anonimo): ho effettuato l'accesso a un server remoto con 3 sessioni simultanee, con lo stesso utente remoto. Ora voglio scoprire da quale IP proviene il client che ha eseguito il 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 -pmostra che il watchcomando è ereditato da sshdPID 15243. greping per questo PID in /var/auth/auth.logmostra che è stato IP 12.34.56.78 ad avviare questa sessione. Pertanto, questo è anche l'utente che ha avviato watch.

Per quanto riguarda la ricerca historyspecifica di questo utente, non è possibile fare ciò che posso vedere quando tutti gli utenti remoti utilizzano lo stesso utente SSH locale. Inoltre, può essere facilmente falsificato / inattivato / ecc., Quindi non è veramente affidabile. Se viene salvato nel file della cronologia, puoi semplicemente cercare il cpcomando e guardare indietro nel file, ma se non è presente, non c'è molto da fare.


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

@ManuKMohan: Non hai dichiarato su quale sistema ti trovi. Sotto RHEL / Fedora / Scientific Linux / ecc., Il file pertinente è /var/log/secure.
Daniel Andersson

Anderson Sto usando Ubuntu
Manu K Mohan il

@ManuKMohan: Se /var/log/auth.log.1, ecc., Esistono, quindi provali per vedere se contengono le informazioni. Successivamente, riavvia rsyslog( sudo service rsyslog restart) e verifica se inizia a popolare auth.log, cosa che dovrebbe già fare. SSHD accede per /var/log/auth.logimpostazione predefinita in Ubuntu , quindi a meno che tu non abbia modificato esplicitamente le destinazioni di registrazione tramite /etc/ssh/ssd_configo /etc/syslog.conf(puoi controllare su quale file authè registrato il livello qui), dovrebbe essere lì. In caso contrario: qualcosa è successo :-).
Daniel Andersson,

1

Puoi aggiungere queste due righe a / etc / profile o / etc / bashrc per registrare tutti i comandi eseguiti da 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]"'

Questo utilizzerà syslog per registrare ogni comando eseguito insieme all'utente che lo ha fatto e il suo indirizzo IP in un formato come questo:

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

Inoltre è possibile aggiungere la riga seguente alla configurazione di syslog (/etc/syslog.conf) per reindirizzare i messaggi local3 su un file specifico.

local3.*                                                /var/log/prompt.log

Ora è syslog-ngcome miglioramento e il file di configurazione è /etc/syslog-ng/syslog-ng.conf .
Timo

1

Puoi usare snoopy per questo.

Dovresti configurarlo per registrare la variabile ambientale personalizzata (SSH_CLIENT) specificando IP =% {env: SSH_CLIENT} nella definizione del formato del messaggio di registro (flag ./configure o configurabile in snoopy.ini dalla versione 2.x).

Divulgazione: manutentore Snoopy qui.


0

Supponendo che stai usando bash, historyti mostrerà solo la TUA cronologia della riga di comando. Per impostazione predefinita, legge ~/.bash_historyper la cronologia. Si noti che questo può essere modificato (anche se altamente improbabile) facendo qualcosa di simile HISTFILE=/home/userFoo/.my_alt_history.

Supponendo che tu sia root sulla scatola, puoi scansionare tutte le directory dell'utente e leggere le loro storie per vedere chi sta eseguendo quel comando.


Oh, e se fossero nefasti, potrebbero facilmente cancellare questo comando dalla loro storia. Se sono attivamente sul riquadro che esegue il comando, potresti vederlo conps -aux | grep "cp file1.sh file2.sh"

Tutti gli utenti accedono in remoto allo stesso nome utente del server usando ssh. Voglio sapere quale IP ha avuto accesso a questo utente ed eseguito il comando.
Manu K Mohan

Non è una buona politica avere molti utenti che condividono un nome utente e una password.
pjc50,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.