Tutoriel Linux

Getent w systemie Linux: odnaleźć konto, nawet jeśli nie pochodzi z /etc/passwd

Débutant3 min de lecture

Uruchamiasz id alice na serwerze, konto istnieje w katalogu firmy, ale grep alice /etc/passwd nie zwraca niczego. Zanim dojdziesz do wniosku o braku konta, spójrz na widok, który Linux rzeczywiście wykorzystuje.

getent pyta bazy zdefiniowane w NSS, mechanizmie, który może łączyć lokalne pliki, SSSD, LDAP lub inny serwis tożsamości. Dzięki temu możesz sprawdzić, czy system rozwiązuje konto, grupę i jej identyfikator numeryczny, nie zmieniając konfiguracji.

Tux łączy konto Linux z lokalnymi plikami i katalogiem sieciowym
Getent sprawdza źródła tożsamości skonfigurowane przez NSS.

Dlaczego /etc/passwd nie zawsze daje odpowiedź

Na lokalnej maszynie /etc/passwd często zawiera wszystkie oczekiwane konta. Na serwerze połączonym z LDAP lub Active Directory przy użyciu SSSD, ten plik zachowuje konta lokalne, podczas gdy konta zdalne pojawiają się przez NSS.

Polecenie getent passwd korzysta z NSS, aby rozwiązać bazę passwd z użyciem źródeł i kolejności zdefiniowanej w /etc/nsswitch.conf.

grep '^passwd:' /etc/nsswitch.conf
grep '^group:' /etc/nsswitch.conf

Linia taka jak passwd: files systemd sss wskazuje, że Linux najpierw sprawdza lokalne pliki, następnie usługę systemową, a na końcu SSSD. Nie kopiuj tego porządku do swojej konfiguracji: zależy on od dystrybucji i już istniejącej integracji.

Szukaj konta za pomocą getent

Użyj dokładnej nazwy logowania, nie wyświetlając całej bazy. W dużym katalogu samo getent passwd może wygenerować długą i niepotrzebną informację.

getent passwd alice
getent passwd 10542

Jeżeli konto zostało rozwiązane, wyjście będzie w standardowym formacie: nazwa, wskaźnik hasła, UID, GID, pole opisowe, katalog domowy i powłoka. Konto LDAP lub SSSD może więc tutaj się pojawić, podczas gdy pozostało nieobecne w /etc/passwd.

Brak wyjścia oznacza tylko, że NSS nie znajduje tej pozycji w obecnej konfiguracji. Taki wynik nie naprawia awarii LDAP, nie opróżnia pamięci podręcznej SSSD ani nie jest błędem w żądanej nazwie.

Sprawdzanie grupy i tożsamości efektywnej

Widoczne konto nie gwarantuje, że jego grupy są poprawne. Sprawdź bazę group, a następnie pozwól id wyświetlić obliczone grupy dla tego użytkownika.

getent group projekt-admin
id alice

id alice powinno wyświetlić UID, GID główny oraz oczekiwane dodatkowe grupy. Jeżeli konto wyświetla się za pomocą getent passwd alice, ale nie z id alice, zachowaj oba wyniki i sprawdź dzienniki SSSD lub odpowiedniej usługi tożsamości.

To odczytanie pomaga narzędziom, które proszą NSS o rozwiązanie tożsamości, takim jak id lub usługa skonfigurowana z katalogiem.

Przewodnik o wylistowywaniu użytkowników w systemie Linux pozostaje przydatny do inwentarzowania kont lokalnych. Tutaj pytanie jest inne: czy system rozpoznaje tożsamość w momencie, gdy usługa musi jej użyć?

Szukaj najpierw, naprawiaj potem

Trzymałbym getent jako pierwszą kontrolę przed ponownym uruchomieniem SSSD, opróżnieniem pamięci podręcznej lub zmianą nsswitch.conf. Polecenie jest tylko do odczytu i daje ten sam punkt widzenia co wiele programów Linuxa.

  • Porównaj żądane konto z linią passwd: w /etc/nsswitch.conf.
  • Uruchom getent passwd użytkownik i getent group grupa.
  • Sprawdź obliczone grupy za pomocą id użytkownik.
  • Jeżeli brakuje wejścia, zanotuj dziennik usługi tożsamości przed zmianą jej konfiguracji.

Na stanowisku tylko lokalnym getent często potwierdzi zawartość /etc/passwd. Na serwerze połączonym z katalogiem, ta różnica zapobiega usunięciu lub ponownemu utworzeniu konta, które już istnieje po stronie NSS.

Strona getent(1) na man7 szczegółowo opisuje dostępne bazy i wyszukiwanie według klucza. Jeżeli konto ma być utworzone lokalnie, użyj raczej procedury Useradd w systemie Linux po wykluczeniu zdalnej tożsamości.

sudo apt update && sudo apt upgrade