Dlaczego / etc / passwd miałoby być używane za każdym razem, gdy ktoś wykonuje polecenie `ls -l`?

28

Czytaj z APUE , poczuj ciekawość:

Plik haseł jest używany za każdym razem, gdy użytkownik loguje się do systemu UNIX i za każdym razem, gdy ktoś wykonuje ls -lpolecenie.

Stóg
źródło
3
Do Twojej wiadomości próbuję strace ls -lpóźniej, widzę openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4oświadczenie.
Rick
7
Oczywiście rzeczywistość jest obecnie bardziej złożona. Nie ma go /etc/passwdna BSD. Aktywny nscdzmieni rzeczy; podobnie jak NSS. Pamiętaj, że to pytanie opiera się na światopoglądzie 7. edycji.
JdeBP
4
@JdeBP Ancient Programming in the Unix Environment ?
Andrew Henle,
@JdeBP To nie jest? Byłem zaskoczony, kiedy to powiedziałeś, ponieważ sądzę, że wiele programów (skryptów i plików binarnych) ulegnie awarii, które polegają (być może niesłusznie, ale nadal) na obecności / etc / passwd.
Peter - Przywróć Monikę
Nie jest tak, ponieważ ujawnienie tej strony podręcznika, w tym jego sekcji PLIKI, ujawni. (-:
JdeBP

Odpowiedzi:

50

System plików bezpośrednio wiąże z plikiem wartości UID (identyfikator użytkownika) i GID (identyfikator grupy), a nie nazwę użytkownika i nazwę grupy (które są łańcuchami). Tak więc ls -lpolecenie (i każde inne polecenie wyświetlające użytkownika i właściciela grupy pliku) musi skądś pobrać nazwy użytkownika i grupy. /etc/passwdPlik jest jednym z takich źródeł (prawdopodobnie oryginału i najczęstszym źródłem). Instrukcja zawiera to - z PASSWD (5) (tj. Strony podręcznika dla /etc/passwdpliku):

wiele narzędzi, takich jak ls (1), używa go do mapowania identyfikatorów użytkowników na nazwy użytkowników

igal
źródło
17
Aby uzupełnić odpowiedź: POSIX określa opcję -ndla ls. Zapobiega to translacji identyfikatorów UID i GID na nazwy użytkowników i nazwy grup. Testowałem ls -nz użyciem podstawowych narzędzi GNU lsi opcja uniemożliwiła dostęp zarówno do, jak /etc/passwdi /etc/groupzgodnie z oczekiwaniami.
pabouk