Kiedy przejmujesz serwer Linux, pierwsze pytanie nie zawsze brzmi: „Kto jest teraz połączony?”. Prawdziwe pytanie często brzmi: które konta nadal istniejąktóre z nich mogą się logować, a które mają poufne prawa.

W tym przewodniku umieścimy listę użytkowników w przejrzysty sposób, bez popadania w panikę. /etc/passwdNastępnie zidentyfikuj konta, które należy najpierw sprawdzić. Powiem ci od razu: nie usuwaj niczego tylko dlatego, że nazwa wydaje się dziwna. W Linuksie wiele kont jest przeznaczonych dla usług.
Przeczytaj plik /etc/passwd nie myląc konta systemowego z kontem użytkownika.
Plik /etc/passwd Wyświetla listę znanych kont lokalnych. Nie zawiera haseł w postaci zwykłego tekstu, ale dostarcza przydatnych informacji: nazwy konta, UID, GID, katalogu domowego i powłoki.
kot /etc/passwd
Linia wygląda tak:
nathan:x:1000:1000:Nathan Martin:/home/nathan:/bin/bash
Pola są rozdzielone dwukropkami. Na początek skup się na nazwie, UID, katalogu domowym i powłoce:
wytnij -d: -f1,3,6,7 /etc/passwd
W wielu dystrybucjach konta użytkowników zaczynają się od UID. tysiącKonta systemowe często mają niższy UID lub powłokę podobną do /usr/sbin/nologin Lub /bin/fałszNie jest to uniwersalna reguła, ale stanowi dobry pierwszy filtr.
awk -F: '$3 >= 1000 && $3 < 60000 {drukuj $1, $3, $6, $7}' /etc/passwd
Strona podręcznika hasło(5) Zawiera szczegółowy opis formatu pliku. Miej go pod ręką, jeśli potrzebujesz przeprowadzić audyt starego serwera lub nietypowej dystrybucji.
Preferuj getent, gdy konta nie są tylko lokalne
W prostej pozycji, /etc/passwd Często to wystarcza. Na serwerze zintegrowanym z LDAP, Active Directory, SSSD lub inną usługą katalogową może być niekompletne. W takim przypadku należy użyć getenta, który wysyła zapytanie do baz danych skonfigurowanych przez system.
pobierz hasło
Aby sprawdzić konkretne konto:
pobierz hasło nathan
Aby wygenerować bardziej czytelną listę kont z identyfikatorami użytkowników:
getent passwd | awk -F: '$3 >= 1000 && $3 < 60000 {print $1, $3, $6, $7}'
Wolę tę metodę na komputerach firmowych, ponieważ pozwala uniknąć założenia, że konto nie istnieje tylko dlatego, że nie zostało zapisane w pliku lokalnym. Polecenie jest udokumentowane w getent(1).
Sprawdź wrażliwe grupy i uprawnienia
Wykaz kont jest dobry. Wiedza o tym, które konta mogą wyrządzić szkody, jest lepsza. Zacznij od konkretnego użytkownika z id :
mam Nathana
grupuje Nathana
Zobaczysz UID, grupę główną i grupy dodatkowe. Grupy, którym należy się dokładnie przyjrzeć, zależą od rozkładu, ale sudo, koło, adm, doker lub pewne grupy aplikacji mogą zapewniać znacznie więcej niż tylko prosty dostęp użytkownika.
grupa getent sudo
koło grupy getent
grupa getent docker
administrator grupy getent
Jeśli konto pojawi się w sudo Lub kołoSprawdź również konfigurację sudoers. Stare, zapomniane konto z dostępem administratora to dokładnie ten rodzaj szczegółu, który później będzie miał dla Ciebie poważne konsekwencje. W tym miejscu nasz poradnik… opanowanie sudo w systemie Linux Ta wstępna kontrola jest dobrym uzupełnieniem.
Święcenia identyfikator(1) I grupy(1) Pozostają proste, ale szybko dają pojęcie o rzeczywistym zakresie konta.
Zidentyfikuj konta, na które można się zalogować
Nie wszystkie wymienione konta umożliwiają logowanie. Aby odizolować konta z aktualnie otwartą powłoką interaktywną, możesz filtrować powłoki:
pobierz hasło | grep -E '/bin/(bash|sh|zsh|ryba)$'
Ten filtr nie jest idealny, ale zapewnia wstępną listę do przejrzenia. Następnie sprawdź, czy konta mają folder osobisty:
getent passwd | awk -F: '$6 ~ /^/home/ {print $1, $6, $7}'
ls -1 /home
Jeśli audytujesz serwer udostępniony przez SSH, sprawdź także klucze znajdujące się w katalogach użytkowników:
sudo find /home -maxdepth 3 -path '*/.ssh/authorized_keys' -type f -ls
Klucz SSH na niewłaściwym koncie może wystarczyć do utrzymania dostępu. Jeśli chcesz wyczyścić ustawienia uwierzytelniania, przeczytaj ponownie nasz artykuł na temat generowanie klucza SSH w systemie Ubuntu.
Sprawdź najnowsze połączenia, nie wyciągając zbyt pochopnych wniosków
Aby zobaczyć, kto jest teraz online:
Kto
w
Z najnowszej historii:
ostatnie -a | głowa
sudo lastlog | head -30
ostatnilog Może to oznaczać, że konto nigdy nie było zalogowane, ale to nie wystarczy, aby udowodnić jego bezużyteczność. Konto może być używane do usługi, zaplanowanego zadania, aplikacji lub mogło zostać utworzone na potrzeby procedury tworzenia kopii zapasowej. Używaj tych poleceń jako sygnałów, a nie jako automatycznej decyzji. Strona ostatni dziennik(8) określa dostępne opcje.
Jeśli szukasz anomalii po podejrzanym połączeniu, uzupełnij to o logi systemowe:
sudo journalctl -u ssh -b
sudo journalctl -p ostrzeżenie..alert -b
Nasz przewodnik po journalctl i logi z ostatniego uruchomienia może pomóc w ustaleniu tej części bez konieczności szukania na chybił trafił.
Mała lista kontrolna, z której korzystam przed sprzątaniem
- Dokładny ślimak konta Zapisz nazwę, UID, katalog domowy i powłokę.
- Grupy wrażliwe : kontrola
sudo,koło,doker,admi grupy aplikacji. - Dostęp SSH :szukaj plików
autoryzowane_kluczei zachowaj kopię przed wprowadzeniem jakichkolwiek zmian. - Ostatnia aktywność : przechodzić
ostatni,ostatnilogi gazet, nie usuwając ich na podstawie choćby jednej wskazówki. - Powiązana usługa : sprawdź czy konto nie należy do usługi lub aplikacji przed jej wyłączeniem.
Jeśli konto wydaje się naprawdę niepotrzebne, zacznij od jego zablokowania lub wyłączenia logowania, a nie usuwania folderu. Na serwerze zawsze wolę śledzić, testować usługi, a dopiero potem wszystko posprzątać. Jest to mniej dramatyczne, ale zapobiega awariom aplikacji, ponieważ „nieznane” konto było faktycznie używane codziennie.
sudo passwd -l stare_konto
sudo systemctl --failed
sudo journalctl -p ostrzeżenie..alert -b
Po tym sprawdzeniu uzyskasz znacznie bardziej przejrzysty obraz: konta ludzkie, konta systemowe, uprawnienia administratora, dostęp SSH i ostatnia aktywność. Aby powiązać to sprawdzenie z aktywnymi usługami, możesz użyć lista usług systemctl i zobaczyć, co naprawdę działa na komputerze.