27

Read from APUE, just feel curious:

The password file is used every time a user logs in to a UNIX system and every time someone executes an ls -l command.

  • 3
    FYI I try strace ls -l later on, I see a openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4 statement. – Rick Mar 8 at 6:47
  • 6
    Of course, reality is more complex nowadays. It's not /etc/passwd on the BSDs. An active nscd will change things; as will the NSS. So note that this question is based upon a 7th Edition worldview. – JdeBP Mar 8 at 7:55
  • 4
    @JdeBP Ancient Programming in the Unix Environment, then? – Andrew Henle Mar 8 at 13:22
  • @JdeBP It isn't? I wa surprised when you said that because I'd think that a lot of programs (scripts and binaries) would break which rely (perhaps wrongly, but still) on the presence of /etc/passwd. – Peter A. Schneider Mar 9 at 12:02
  • It isn't, as reading that manual page properly, including its FILES section, will reveal. (-: – JdeBP Mar 11 at 12:39
48

The file-system directly associates the numerical UID (User ID) and GID (Group ID) values with the file, not the user name and group name (which are strings). So the ls -l command (and any other command that displays the user and group owner of a file) need to get the user and group names from somewhere. The /etc/passwd file is one such source (probably the original and most common source). The manual bears this out - from PASSWD (5) (i.e. the man page for the /etc/passwd file):

many utilities, like ls(1) use it to map user IDs to usernames

  • 16
    To complement the answer: POSIX specifies option -n for ls. This prevents translation of UIDs and GIDs to usernames and group names. I have tested ls -n with GNU core utils' ls and the option prevented accessing both /etc/passwd and /etc/group as expected. – pabouk Mar 8 at 8:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.