Jeder neue Benutzer, der eine Verbindung herstellt, erzeugt eine neue sshd
Sitzung mit einer bestimmten PID. Sie können pstree
drucken, welche Befehle von welcher sshd
Sitzung geerbt werden , und diese PID dann überprüfen /var/log/auth.log
.
Beispiel (anonymisiert): Ich habe mich mit 3 gleichzeitigen Sitzungen bei einem Remote-Server mit demselben Remote-Benutzer angemeldet. Ich möchte jetzt herausfinden, von welcher IP der Client kam, der den Befehl ausgeführt hat 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
zeigt, dass der watch
Befehl von sshd
PID 15243 geerbt wurde. Wenn grep
für diese PID in /var/auth/auth.log
gezeigt wird, dass IP 12.34.56.78 diese Sitzung gestartet hat. Daher ist dies auch der Benutzer, der gestartet hat watch
.
Das Finden history
für speziell diesen Benutzer kann nicht anhand dessen erfolgen, was ich sehen kann, wenn alle Remotebenutzer denselben lokalen SSH-Benutzer verwenden. Außerdem kann es leicht gefälscht / inaktiviert / usw. werden, so dass es nicht wirklich zuverlässig ist. Wenn es in der Verlaufsdatei gespeichert ist, können Sie einfach nach dem cp
Befehl suchen und in der Datei rückwärts schauen. Wenn er jedoch nicht vorhanden ist, gibt es nicht viel zu tun.
grep: /var/log/auth.log: No such file or directory
:-(/var/log/secure
./var/log/auth.log.1
usw. vorhanden sind, versuchen Sie es, um festzustellen , ob sie die Informationen enthalten. Starten Sie anschließend neursyslog
(sudo service rsyslog restart
) und prüfen Sie, ob es mit dem Auffüllen beginntauth.log
, was bereits geschehen sollte. SSHD meldet sich/var/log/auth.log
standardmäßig in Ubuntu an . Wenn Sie also die Protokollierungsziele nicht explizit über/etc/ssh/ssd_config
oder geändert haben/etc/syslog.conf
(Sie können hier überprüfen, in welcher Datei dieauth
Ebene protokolliert wird), sollte sie dort vorhanden sein. Wenn nicht: etwas ist los :-).Sie können diese beiden Zeilen zu / etc / profile oder / etc / bashrc hinzufügen, um alle von bash ausgeführten Befehle zu protokollieren:
Dabei wird syslog verwendet, um jeden ausgeführten Befehl zusammen mit dem Benutzer und seiner IP-Adresse in einem Format wie dem folgenden aufzuzeichnen:
Zusätzlich können Sie die folgende Zeile zu Ihrer Syslog-Konfiguration (/etc/syslog.conf) hinzufügen, um die local3-Nachrichten in eine bestimmte Datei umzuleiten.
quelle
syslog-ng
als Verbesserung und die Konfigurationsdatei ist/etc/syslog-ng/syslog-ng.conf
.Sie könnten dafür snoopy verwenden .
Sie müssten es so konfigurieren, dass eine benutzerdefinierte Umgebungsvariable (SSH_CLIENT) protokolliert wird, indem Sie IP =% {env: SSH_CLIENT} in der Definition des Protokollnachrichtenformats angeben (Flag ./configure oder konfigurierbar in snoopy.ini seit Version 2.x).
Offenlegung: Snoopy Betreuer hier.
quelle
Angenommen, Sie verwenden bash,
history
wird nur IHR Befehlszeilenverlauf angezeigt . Standardmäßig wird der Verlauf gelesen~/.bash_history
. Beachten Sie, dass dies geändert werden kann (obwohl dies höchst unwahrscheinlich ist), indem Sie so etwas tunHISTFILE=/home/userFoo/.my_alt_history
.Angenommen, Sie befinden sich im Stammverzeichnis der Box, können Sie alle Verzeichnisse des Benutzers durchsuchen und deren Verlauf lesen, um festzustellen, wer diesen Befehl ausführt.
quelle
ps -aux | grep "cp file1.sh file2.sh"