FYI lo intento strace ls -lmás tarde, veo una openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4declaración.
Rick
77
Por supuesto, la realidad es más compleja hoy en día. No está /etc/passwden los BSD. Un activo nscdcambiará las cosas; como lo hará el NSS. Tenga en cuenta que esta pregunta se basa en una cosmovisión de la 7ª Edición.
JdeBP
44
@JdeBP Programación antigua en el entorno Unix , entonces?
Andrew Henle
@JdeBP ¿ No es así? Me sorprendió cuando dijiste eso porque pensaría que se romperían muchos programas (scripts y binarios) que dependen (tal vez erróneamente, pero aún) de la presencia de / etc / passwd.
Peter - Restablece a Monica el
No lo es, como lo revelará la página del manual correctamente, incluida su sección de ARCHIVOS. (-:
JdeBP
Respuestas:
50
El sistema de archivos asocia directamente los valores numéricos de UID (ID de usuario) y GID (ID de grupo) con el archivo, no el nombre de usuario y el nombre del grupo (que son cadenas). Por lo tanto, el ls -lcomando (y cualquier otro comando que muestre el usuario y el propietario del grupo de un archivo) debe obtener los nombres de usuario y grupo de alguna parte. El /etc/passwdarchivo es una de esas fuentes (probablemente la fuente original y más común). El manual lo confirma: de PASSWD (5) (es decir, la página del manual del /etc/passwdarchivo):
muchas utilidades, como ls (1) lo usan para asignar ID de usuario a nombres de usuario
Para complementar la respuesta: POSIX especifica la opción -npara ls. Esto evita la traducción de UID y GID a nombres de usuario y nombres de grupo. He probado ls -ncon GNU core utils ' lsy la opción evitó el acceso a ambos /etc/passwdy /etc/groupcomo se esperaba.
strace ls -l
más tarde, veo unaopenat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
declaración./etc/passwd
en los BSD. Un activonscd
cambiará las cosas; como lo hará el NSS. Tenga en cuenta que esta pregunta se basa en una cosmovisión de la 7ª Edición.Respuestas:
El sistema de archivos asocia directamente los valores numéricos de UID (ID de usuario) y GID (ID de grupo) con el archivo, no el nombre de usuario y el nombre del grupo (que son cadenas). Por lo tanto, el
ls -l
comando (y cualquier otro comando que muestre el usuario y el propietario del grupo de un archivo) debe obtener los nombres de usuario y grupo de alguna parte. El/etc/passwd
archivo es una de esas fuentes (probablemente la fuente original y más común). El manual lo confirma: de PASSWD (5) (es decir, la página del manual del/etc/passwd
archivo):fuente
-n
parals
. Esto evita la traducción de UID y GID a nombres de usuario y nombres de grupo. He probadols -n
con GNU core utils 'ls
y la opción evitó el acceso a ambos/etc/passwd
y/etc/group
como se esperaba.