Mam serwer git działający na ssh, a każdy użytkownik ma konto uniksowe w systemie.
Biorąc pod uwagę, że dwóch użytkowników ma dostęp do repozytorium, w jaki sposób mogę się upewnić, który użytkownik wykonał które zatwierdzenie, ponieważ nazwa użytkownika i adres e-mail zatwierdzenia są przesyłane i kontrolowane przez klienta git.
Obawiam się, że użytkownik może podszyć się pod innego, nawet jeśli ma takie same uprawnienia autoryzacyjne.
Odpowiedzi:
Jeśli martwisz się tym, istnieje kilka sposobów rozwiązania tego problemu.
źródło
.git/hooks/update.sample
inspirację. Proszę @ powiadom mnie, jeśli zadasz pytanie na ten temat w SO, to też byłoby dla mnie interesująceWidzę 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ądai zmień to na
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.
Ważne rzeczy, które należy tutaj zauważyć, są dwojakie
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.Więc teraz znasz następujące informacje:
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()
lubcreat()
, 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.źródło
Jedynym technicznym podejściem, jakie możesz zastosować, jest zaufanie do tożsamości połączenia ssh. Następnie możesz wymusić, aby każdy użytkownik wypychał tylko zatwierdzenia, które sam wykonał, poprzez sprawdzenie zatwierdzającego każdego nowego wypychanego zatwierdzenia.
Aby było to niezawodne, prawie na pewno nie chcesz dać użytkownikom nieograniczonego dostępu powłoki do skrzynki, w której znajduje się repozytorium; chciałbyś upewnić się, że używasz czegoś takiego jak
git-shell
tylko w przeciwnym razie ograniczenia można łatwo obejść.Użytkownicy nadal jednak mogliby się podszywać pod siebie jako autorzy. Możesz to również ograniczyć, ale straciłoby to typowe przepływy pracy, takie jak wybieranie i przekształcanie, a może nawet rozgałęzienie (w zależności od implementacji haka), więc możesz tego nie chcieć.
W pewnym momencie do pewnego stopnia musisz zaufać programistom.
źródło
Wiele demonów ssh dokonuje wpisu
/var/log/audit.log
lub czegoś podobnego po otrzymaniu połączenia ssh. Odwołanie tego dziennika do dziennika zmian powinno dać ci wyobrażenie, który użytkownik ssh został użyty do wydania zatwierdzenia. Jest to etap audytu, który należy zastosować po fakcie do weryfikacji.Właściwe wymuszenie poprawnego użytkownika ssh dla odpowiedniego użytkownika git dotyczy jednej z pozostałych odpowiedzi tutaj.
źródło
Jeśli wszyscy użytkownicy mają konta powłoki z dostępem do zapisu do repozytorium, nie będzie można utworzyć wiarygodnego dziennika audytu: nadal mogą modyfikować repozytorium bez zapisywania w dzienniku i mogą zapisywać w nim wszystko, co chcą.
Aby móc zaufać dziennikowi kontroli, należy uniemożliwić bezpośredni dostęp do zapisu na poziomie pliku do repozytorium, zamiast tego używać czegoś takiego jak gitolite (który działa na swoim koncie) w celu pośredniczenia w dostępie do repozytorium.
źródło