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
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.
strace ls -l
później, widzęopenat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
oświadczenie./etc/passwd
na BSD. Aktywnynscd
zmieni rzeczy; podobnie jak NSS. Pamiętaj, że to pytanie opiera się na światopoglądzie 7. edycji.Odpowiedzi:
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 -l
polecenie (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/passwd
Plik 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/passwd
pliku):źródło
-n
dlals
. Zapobiega to translacji identyfikatorów UID i GID na nazwy użytkowników i nazwy grup. Testowałemls -n
z użyciem podstawowych narzędzi GNUls
i opcja uniemożliwiła dostęp zarówno do, jak/etc/passwd
i/etc/group
zgodnie z oczekiwaniami.