29

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.

Olorin
  • 4,636
  • 1
  • 13
  • 25
Rick
  • 1,107
  • 1
  • 16
  • 29
  • 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 08 '19 at 06:47
  • 7
    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 08 '19 at 07:55
  • 4
    @JdeBP *Ancient Programming in the Unix Environment*, then? – Andrew Henle Mar 08 '19 at 13:22
  • @JdeBP [It isn't?](https://www.freebsd.org/cgi/man.cgi?query=passwd&apropos=0&sektion=5&manpath=FreeBSD+13-current&arch=default&format=html) 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 - Reinstate Monica Mar 09 '19 at 12:02
  • It isn't, as reading that manual page properly, including its FILES section, will reveal. (-: – JdeBP Mar 11 '19 at 12:39

1 Answers1

50

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

igal
  • 9,666
  • 1
  • 42
  • 58
  • 17
    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 - Ukraine stay strong Mar 08 '19 at 08:54