Aby dowiedzieć się, który adres IP wykonał określone polecenie w systemie Linux przy użyciu ssh

10

Istnieje serwer, do którego dostęp ma wielu użytkowników korzystających z ssh. Próbuję dowiedzieć się, który użytkownik wykonał określone polecenie.

Zna listę użytkowników, którzy aktualnie uzyskują dostęp do serwera za pomocą. who Poznam również listę poleceń wykonanych za pomocą history.

Ale skąd wiedzieć, który użytkownik wykonał polecenie jak cp file1.sh file2.shna serwerze? Użytkownik wykonał już polecenie i wylogował się

Manu K. Mohan
źródło

Odpowiedzi:

4

Każdy nowy użytkownik łączący się spawnuje nową sshdsesję z określonym PID. Możesz użyć pstreedo wydrukowania, które polecenia są dziedziczone z której sshdsesji, a następnie sprawdzić krzyżowo ten PID w /var/log/auth.log.

Przykład (anonimowy): zalogowałem się na zdalnym serwerze z 3 równoczesnymi sesjami, z tym samym zdalnym użytkownikiem. Chcę teraz dowiedzieć się, z którego adresu IP przyszedł klient, który uruchomił polecenie 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 -ppokazuje, że watchpolecenie jest dziedziczone sshdz PID 15243. greping dla tego PID w /var/auth/auth.logpokazuje, że to IP 12.34.56.78 rozpoczął tę sesję. Dlatego jest to także użytkownik, który zaczął watch.

Jeśli chodzi o wyszukiwanie historykonkretnego użytkownika, nie można tego zrobić z tego, co widzę, gdy wszyscy zdalni użytkownicy używają tego samego lokalnego użytkownika SSH. Ponadto można go łatwo sfałszować / dezaktywować itp., Więc nie jest tak naprawdę niezawodny. Jeśli jest zapisany w pliku historii, możesz po prostu poszukać cppolecenia i spojrzeć wstecz w pliku, ale jeśli go nie ma, nie ma wiele do zrobienia.

Daniel Andersson
źródło
Mówi ten błąd grep: /var/log/auth.log: No such file or directory:-(
Manu K Mohan
@ManuKMohan: Nie określiłeś systemu, na którym jesteś. W RHEL / Fedora / Scientific Linux / itp. Odpowiednim plikiem jest /var/log/secure.
Daniel Andersson,
Anderson Używam Ubuntu
Manu K Mohan
@ManuKMohan: Jeśli /var/log/auth.log.1itp. Istnieją, wypróbuj je, aby zobaczyć, czy zawierają informacje. Następnie uruchom ponownie rsyslog( sudo service rsyslog restart) i sprawdź, czy zacznie się zapełniać auth.log, co powinno już być zrobione. SSHD loguje się /var/log/auth.logdomyślnie w Ubuntu , więc jeśli jawnie nie zmieniłeś celów rejestrowania za pomocą /etc/ssh/ssd_configlub /etc/syslog.conf(możesz sprawdzić, do którego pliku authlogowany jest poziom tutaj), powinien tam być. Jeśli nie: coś jest nie tak :-).
Daniel Andersson
1

Możesz dodać te dwa wiersze do / etc / profile lub / etc / bashrc w celu zarejestrowania wszystkich poleceń wykonanych przez 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]"'

Użyje syslog do zarejestrowania każdego wykonanego polecenia wraz z użytkownikiem, który to zrobił, i jego adresem IP w formacie takim jak ten:

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

Dodatkowo możesz dodać poniższy wiersz do konfiguracji syslog (/etc/syslog.conf), aby przekierować wiadomości local3 do określonego pliku.

local3.*                                                /var/log/prompt.log
Filipe
źródło
Teraz jest to syslog-ngpoprawa, a plik konfiguracyjny jest /etc/syslog-ng/syslog-ng.conf .
Timo
1

Możesz użyć do tego snoopy .

Trzeba go skonfigurować do rejestrowania niestandardowej zmiennej środowiskowej (SSH_CLIENT), określając IP =% {env: SSH_CLIENT} w definicji formatu komunikatu dziennika (flaga ./configure lub konfigurowalna w snoopy.ini od wersji 2.x).

Ujawnienie: Opiekun Snoopy tutaj.

Bostjan Skufca
źródło
0

Zakładając, że używasz bash, historypokaże tylko Twoją historię wiersza poleceń. Domyślnie czyta ~/.bash_historyhistorię. Zauważ, że można to zmienić (choć bardzo mało prawdopodobne), wykonując coś takiego HISTFILE=/home/userFoo/.my_alt_history.

Zakładając, że jesteś rootem na urządzeniu, możesz skanować wszystkie katalogi użytkownika i czytać ich historie, aby zobaczyć, kto uruchamia to polecenie.

użytkownik1146334
źródło
Aha, a jeśli są nikczemni, mogliby z łatwością usunąć to polecenie z ich historii. Jeśli aktywnie korzystają z komendy uruchamiającej polecenie, można to zobaczyć za pomocąps -aux | grep "cp file1.sh file2.sh"
Wszyscy użytkownicy mają zdalny dostęp do tej samej nazwy użytkownika serwera za pomocą ssh. Chcę wiedzieć, który adres IP uzyskał dostęp do tego użytkownika i wykonał polecenie.
Manu K Mohan
Nie jest dobrą polityką, aby wielu użytkowników dzieliło nazwę użytkownika i hasło.
pjc50,