En relación con esta pregunta:
Al observar el comportamiento de fatrace, noto algo que me preocupa. Aquí están las primeras líneas de salida del comando "fatrace | grep konsole"
konsole(4112): O /etc/passwd
konsole(4112): CO /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
...
El caso es que lsof | grep passwd muestra que passwd no está abierto por ningún proceso.
¿Alguna idea de lo que está pasando?
/etc/passwd
? Este archivo contiene toda la información sobre las cuentas de usuario, incluido el directorio de inicio y el shell.Respuestas:
Puedes leer el código fuente; hablando de ... lo hice por ti; parece que es del
ProcessInfo.cpp
archivo. Está obteniendo los nombres de usuario. No solo eso/etc/passwd
no es una preocupación para usted, cualquiera puede leerlo. Sin embargo, podría estar preocupado si estaba tratando de leer/etc/shadow
.fuente
Usando
strace
usted puede ver lo quekonsole
está haciendo.Konsole está leyendo el contenido de
/etc/passwd
bastante rápido y simplemente no lo estás viendolsof
. Este es un problema típico cuando se abre un archivo, se lee rápidamente y luego se cierra.¿Debería Preocuparme?
Esto, por cierto, no es motivo de preocupación. Mi
gnome-terminal
hace lo mismo. El flujo de cosas puede ser un poco confuso, pero Konsole está buscando información en el sistema. En este caso, algo así como el directorio de inicio del usuario.Entonces, el sistema realiza una llamada a NSS (archivo de configuración del conmutador de servicio de nombres):
Hay una línea en este archivo, específicamente esta línea:
Esta línea le dice a NSS dónde se puede encontrar la "base de datos" 'passwd'. Esta línea le dice a NSS que el recurso está ubicado en archivos. Entonces, el sistema abre el
/etc/passwd
archivo para buscar el directorio de inicio del usuario.NOTA: Cavar aún más este comportamiento parece ser causado por Bash. Hacer un
strace
solo Bash muestra lo mismo.Lecturas adicionales
Si está realmente interesado en cómo funciona NSS, consulte las páginas de manual
nsswitch.conf
ynss
. NSS es modular y puede usar diferentes tecnologías de back-end para sus "bases de datos".Por ejemplo:
fuente
/etc/nsswitch.conf
que desencadena la carga/etc/passwd
, sino todo lo contrario. Konsole quiere obtener alguna información sobre las cuentas de usuario, por lo que se abre/etc/nsswitch.conf
, lo que le dice (dentro del código libc, no dentro del código de la fuente de Konsole) que están las cuentas de usuario/etc/passwd
.Por la misma razón que
ls -l
lee / etc / passwd, son los datos los que asocian los UID con los nombres. Cuandols
llamastat(2)
a un archivo, obtiene un UID numérico para el propietario del archivo. Para mostrarlo como un nombre legible por humanos, debe buscarlo en el único lugar que tiene esas asociaciones/etc/passwd
,. Por ejemplo, una primera línea típica en/etc/passwd
esCuando
ls -l /etc/hosts
necesita producir la salidanecesita traducir el UID 0 a "raíz" para que llame a una rutina de biblioteca como getpwuid que se lee
/etc/passwd
para proporcionar la traducción. Esa es una gran parte de la razón que/etc/passwd
existe: proporcionar tales traducciones para propósitos completamente mundanos.Buscar nombres de usuario no presenta más problemas de seguridad que llamar a localtime para que
ls
pueda decirle "14 de enero de 2013" para la hora de modificación del archivo. Como se observó en slm , no hay ninguna razón para mantener el archivo abierto, por lo que se cierra tan pronto como se lee su contenido.El archivo
/etc/passwd
originalmente contenía contraseñas hash en tiempos más simples. Los hashes de contraseña se movieron a los/etc/shadow
que los usuarios normales no pueden leer porque era un agujero de seguridad. El nombre/etc/passwd
permaneció igual pero ahora contienex
el campo de hash de contraseña anterior que no es un hash válido para ninguna contraseña.fuente