Pourquoi / etc / passwd serait-il utilisé chaque fois que quelqu'un exécute la commande `ls -l`?
28
Lisez APUE , soyez curieux:
Le fichier de mot de passe est utilisé chaque fois qu'un utilisateur se connecte à un système UNIX et chaque fois que quelqu'un exécute une ls -lcommande.
Pour info j'essaye strace ls -lplus tard, je vois une openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4déclaration.
Rick
7
Bien sûr, la réalité est plus complexe de nos jours. Ce n'est pas /etc/passwdsur les BSD. Un actif nscdchangera les choses; tout comme le NSS. Notez donc que cette question est basée sur une vision du monde de la 7e édition.
JdeBP
4
@JdeBP Ancient Programming in the Unix Environment , then?
Andrew Henle
@JdeBP Ce n'est pas? J'ai été surpris lorsque vous avez dit cela parce que je pensais que beaucoup de programmes (scripts et binaires) se briseraient qui reposent (peut-être à tort, mais toujours) sur la présence de / etc / passwd.
Peter - Rétablir Monica
Ce n'est pas le cas, car la lecture correcte de cette page de manuel, y compris sa section FICHIERS, le révélera. (-:
JdeBP
Réponses:
50
Le système de fichiers associe directement les valeurs numériques UID (User ID) et GID (Group ID) au fichier, pas le nom d'utilisateur et le nom de groupe (qui sont des chaînes). Ainsi, la ls -lcommande (et toute autre commande qui affiche l'utilisateur et le propriétaire du groupe d'un fichier) doit obtenir les noms d'utilisateur et de groupe quelque part. Le /etc/passwdfichier est l'une de ces sources (probablement la source originale et la plus courante). Le manuel le confirme - de PASSWD (5) (c'est-à-dire la page de manuel du /etc/passwdfichier):
de nombreux utilitaires, comme ls (1), l'utilisent pour mapper les ID utilisateur aux noms d'utilisateur
Pour compléter la réponse: POSIX spécifie l'option -npour ls. Cela empêche la traduction des UID et des GID en noms d'utilisateur et noms de groupe. J'ai testé ls -navec GNU core utils ' lset l'option a empêché d'accéder aux deux /etc/passwdet /etc/groupcomme prévu.
strace ls -l
plus tard, je vois uneopenat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
déclaration./etc/passwd
sur les BSD. Un actifnscd
changera les choses; tout comme le NSS. Notez donc que cette question est basée sur une vision du monde de la 7e édition.Réponses:
Le système de fichiers associe directement les valeurs numériques UID (User ID) et GID (Group ID) au fichier, pas le nom d'utilisateur et le nom de groupe (qui sont des chaînes). Ainsi, la
ls -l
commande (et toute autre commande qui affiche l'utilisateur et le propriétaire du groupe d'un fichier) doit obtenir les noms d'utilisateur et de groupe quelque part. Le/etc/passwd
fichier est l'une de ces sources (probablement la source originale et la plus courante). Le manuel le confirme - de PASSWD (5) (c'est-à-dire la page de manuel du/etc/passwd
fichier):la source
-n
pourls
. Cela empêche la traduction des UID et des GID en noms d'utilisateur et noms de groupe. J'ai testéls -n
avec GNU core utils 'ls
et l'option a empêché d'accéder aux deux/etc/passwd
et/etc/group
comme prévu.