Widzę dwa dobre sposoby na uzyskanie tego rodzaju informacji. Jednym z nich jest zwiększenie rejestrowania z samego sshd, a drugim poprzez głębsze monitorowanie repozytorium git na dysku. Ponieważ żaden z nich indywidualnie nie podaje potrzebnych informacji, możesz wykonać jedno i drugie i skorelować dane dziennika za pomocą zewnętrznego silnika analizy dziennika lub na żądanie przy użyciu ludzkich oczu i znaczników czasu.
Modyfikacje sshd
Domyślnie, jak niewątpliwie widziałeś, możesz zobaczyć, kiedy użytkownik się zalogował i skąd, korzystając z dzienników uwierzytelniania ssh. Co chcesz zrobić, to zmienić poziom wylogowania z sshd. Edytuj więc /etc/ssh/sshd_config
i znajdź linię, która wygląda
#LogLevel INFO
i zmień to na
LogLevel VERBOSE
następnie uruchom ponownie usługę sshd. Zwiększa to poziom rejestrowania sshd o 1 krok, co daje znacznie więcej informacji. Sprawdź ten fragment dziennika mojego zdalnego dostępu po wprowadzeniu tej zmiany.
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
Ważne rzeczy, które należy tutaj zauważyć, są dwojakie
- Widzimy odcisk palca klucza publicznego używanego do uwierzytelnienia mnie
- Widzimy znacznik czasu mojego wylogowania
Korzystanie z domyślnego sshd LogLevel (INFO) nie rejestruje żadnego z tych elementów. Uzyskanie odcisku palca klucza to jeden dodatkowy krok. Musisz przetworzyć odpowiedni authorized_keys
plik za pomocą ssh-keygen jako takiego.
[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)
Więc teraz znasz następujące informacje:
- Nazwa użytkownika, który się zalogował
- Czas zalogowania się użytkownika
- Który klucz publiczny został użyty do uwierzytelnienia
- Czas wylogowania użytkownika
Teraz, gdy mamy możliwość przypisania akcji użytkownika w określonym czasie, zakładając, że obaj użytkownicy nie byli zalogowani w tym samym czasie, możemy zacząć patrzeć na zmiany wprowadzone w repozytorium.
Monitorowanie katalogów za pomocą Auditd
Jak powiedział sysadmin1138, może to być doskonały przypadek użycia podsystemu poddanego audytowi. Jeśli nie używasz dystrybucji opartej na RedHat, prawdopodobnie jest to analog, ale musisz go znaleźć. Konfiguracja audytu jest dość intensywna i zawiera ponurą liczbę opcji konfiguracji. Aby zapoznać się z niektórymi opcjami, sprawdź to pytanie na naszej siostrzanej stronie dla specjalistów ds. Bezpieczeństwa informacji .
W minimalnym stopniu zaleciłbym ustawienie tak zwanego „watch” w katalogu na dysku, który zawiera dane repozytorium git. W ten sposób instruuje moduł jądra, aby raportował o próbach wywołań dostępu do plików, takich jak open()
lub creat()
, na uchwytach plików wskazujących na pliki lub katalogi, które wymieniliśmy.
Oto przykładowa konfiguracja, która by to zrobiła i tylko to. Uważaj więc na przeczytanie i zrozumienie swojego /etc/audit/audit.rules
, aby odpowiednio zintegrować zmiany.
# 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