Ich sehe zwei gute Möglichkeiten, diese Art von Informationen zu erhalten. Zum einen wird die Protokollierung von sshd selbst erhöht, zum anderen wird das Git-Repository auf der Festplatte genauer überwacht. Da keiner der beiden die gewünschten Informationen einzeln angibt, möchten Sie möglicherweise beides tun und die Protokolldaten mithilfe einer externen Protokollanalyse-Engine oder bei Bedarf mithilfe menschlicher Augen und Zeitstempel korrelieren.
sshd Modifikationen
Wie Sie zweifellos gesehen haben, können Sie standardmäßig mithilfe der ssh-Authentifizierungsprotokolle sehen, wann und von wo aus sich ein Benutzer angemeldet hat. Was Sie tun möchten, ist die Ebene zu ändern, auf der Sie sich von sshd abmelden. So bearbeiten Sie Ihre /etc/ssh/sshd_config
und finden Sie die Linie, die aussieht
#LogLevel INFO
und ändern Sie das zu
LogLevel VERBOSE
Starten Sie dann den sshd-Dienst neu. Dies erhöht die Protokollierungsstufe von sshd um 1 Schritt, was viel mehr Informationen liefert. Schauen Sie sich diesen Protokollausschnitt meines Fernzugriffs an, nachdem Sie diese Änderung vorgenommen haben.
Nov 2 08:37:09 node1 sshd[4859]: Connection from 10.10.10.5 port 50445
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4860]: Postponed publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: Found matching RSA key: f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06
Nov 2 08:37:10 node1 sshd[4859]: Accepted publickey for scott from 10.10.10.5 port 50445 ssh2
Nov 2 08:37:10 node1 sshd[4859]: pam_unix(sshd:session): session opened for user scott by (uid=0)
Nov 2 08:37:10 node1 sshd[4859]: User child is on pid 4862
Nov 2 08:40:27 node1 sshd[4862]: Connection closed by 10.10.10.5
Nov 2 08:40:27 node1 sshd[4862]: Transferred: sent 30632, received 7024 bytes
Nov 2 08:40:27 node1 sshd[4862]: Closing connection to 10.10.10.5 port 50445
Nov 2 08:40:27 node1 sshd[4859]: pam_unix(sshd:session): session closed for user scott
Hier sind zwei wichtige Dinge zu beachten
- Wir sehen den Fingerabdruck des öffentlichen Schlüssels, der zur Authentifizierung verwendet wird
- Wir sehen den Zeitstempel meiner Abmeldung
Mit der Standardeinstellung LogLevel (INFO) protokolliert sshd keines dieser Elemente. Der Fingerabdruck eines Schlüssels ist ein zusätzlicher Schritt. Sie müssen die entsprechende authorized_keys
Datei mit ssh-keygen als solche verarbeiten.
[root@node1 ssh]# ssh-keygen -l -f /home/scott/.ssh/authorized_keys
4096 f2:9e:a1:ca:0c:33:02:37:9b:de:e7:63:d5:f4:25:06 /home/scott/.ssh/authorized_keys (RSA)
Nun kennen Sie also die folgenden Informationen:
- Benutzername, der angemeldet ist
- Uhrzeit, zu der sich der Benutzer angemeldet hat
- Welcher öffentliche Schlüssel wurde für die Authentifizierung verwendet?
- Uhrzeit, zu der sich der Benutzer abgemeldet hat
Da wir nun die Möglichkeit haben, Benutzeraktionen zu einem bestimmten Zeitpunkt zuzuweisen, sofern nicht beide Benutzer gleichzeitig angemeldet waren, können wir uns die Änderungen ansehen, die am Repository vorgenommen wurden.
Verzeichnisüberwachung mit Auditd
Wie sysadmin1138 sagte, könnte dies ein ausgezeichneter Anwendungsfall für das auditd-Subsystem sein. Wenn Sie keine RedHat-basierte Distribution verwenden, gibt es wahrscheinlich ein Analogon, aber Sie müssen es finden. Die Konfiguration für auditd ist ziemlich umfangreich und bietet eine Vielzahl von Konfigurationsoptionen. Sehen Sie sich diese Frage auf unserer Schwestersite für Informationssicherheitsspezialisten an, um sich einen Überblick über einige der Optionen zu verschaffen .
Auf jeden Fall würde ich empfehlen, in dem Verzeichnis auf der Festplatte, das das betreffende Git-Repository enthält, eine so genannte "Überwachung" einzurichten. Dadurch wird das Kernelmodul angewiesen, über Versuche zu berichten, Dateizugriffsaufrufe durchzuführen, wie z. B. open()
oder creat()
über Dateihandles, die auf die von uns aufgelisteten Dateien oder Verzeichnisse verweisen.
Hier ist eine Beispielkonfiguration, die dies und nur dies tun würde. Lesen und verstehen Sie daher Ihre vorhandenen Daten sorgfältig, um /etc/audit/audit.rules
Änderungen angemessen zu integrieren.
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 1024
-w /path/to/git/repos-p wa
# Disable adding any additional rules - note that adding *new* rules will require a reboot
-e 2