Tutoriel Linux

Użytkownicy Linuksa: przydatne polecenia do wyświetlania listy kont i identyfikowania dostępu

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

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.

Ilustracja przedstawiająca Tuxa przed serwerem z kontami użytkowników, lupą i kłódkami zabezpieczającymi
Wyświetlenie listy kont Linux ułatwia identyfikację dostępu użytkowników, wrażliwych grup i zapomnianych kluczy SSH.

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, adm i grupy aplikacji.
  • Dostęp SSH :szukaj plików autoryzowane_klucze i zachowaj kopię przed wprowadzeniem jakichkolwiek zmian.
  • Ostatnia aktywność : przechodzić ostatni, ostatnilog i 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.

sudo apt update && sudo apt upgrade