Każdy nowy użytkownik łączący się spawnuje nową sshd
sesję z określonym PID. Możesz użyć pstree
do wydrukowania, które polecenia są dziedziczone z której sshd
sesji, 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 -p
pokazuje, że watch
polecenie jest dziedziczone sshd
z PID 15243. grep
ing dla tego PID w /var/auth/auth.log
pokazuje, ż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 history
konkretnego 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ć cp
polecenia i spojrzeć wstecz w pliku, ale jeśli go nie ma, nie ma wiele do zrobienia.
grep: /var/log/auth.log: No such file or directory
:-(/var/log/secure
./var/log/auth.log.1
itp. Istnieją, wypróbuj je, aby zobaczyć, czy zawierają informacje. Następnie uruchom ponowniersyslog
(sudo service rsyslog restart
) i sprawdź, czy zacznie się zapełniaćauth.log
, co powinno już być zrobione. SSHD loguje się/var/log/auth.log
domyślnie w Ubuntu , więc jeśli jawnie nie zmieniłeś celów rejestrowania za pomocą/etc/ssh/ssd_config
lub/etc/syslog.conf
(możesz sprawdzić, do którego plikuauth
logowany jest poziom tutaj), powinien tam być. Jeśli nie: coś jest nie tak :-).Możesz dodać te dwa wiersze do / etc / profile lub / etc / bashrc w celu zarejestrowania wszystkich poleceń wykonanych przez bash:
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:
Dodatkowo możesz dodać poniższy wiersz do konfiguracji syslog (/etc/syslog.conf), aby przekierować wiadomości local3 do określonego pliku.
źródło
syslog-ng
poprawa, a plik konfiguracyjny jest/etc/syslog-ng/syslog-ng.conf
.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.
źródło
Zakładając, że używasz bash,
history
pokaże tylko Twoją historię wiersza poleceń. Domyślnie czyta~/.bash_history
historię. Zauważ, że można to zmienić (choć bardzo mało prawdopodobne), wykonując coś takiegoHISTFILE=/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.
źródło
ps -aux | grep "cp file1.sh file2.sh"