Par rapport à cette question:
En observant le comportement de fatrace, je remarque quelque chose qui me préoccupe. Voici les premières lignes de sortie de la commande "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
...
Le fait est que lsof | grep passwd montre que passwd n'est ouvert par aucun processus.
Alors une idée de ce qui se passe?
/etc/passwd
? Ce fichier contient toutes les informations sur les comptes d'utilisateurs, y compris le répertoire personnel et le shell.Réponses:
Vous pouvez lire le code source; en parlant de ... je l'ai fait pour vous; on dirait que ça vient du
ProcessInfo.cpp
fichier. Il obtient les noms d'utilisateur. Non seulement cela/etc/passwd
ne vous préoccupe pas, tout le monde peut le lire. Vous pourriez cependant être inquiet s'il essayait de lire/etc/shadow
.la source
En utilisant,
strace
vous pouvez voir ce quikonsole
se passe.Konsole lit le contenu de
/etc/passwd
assez rapidement et vous ne le voyez pas aveclsof
. Il s'agit d'un problème typique lorsqu'un fichier est ouvert, lu rapidement, puis fermé.Dois-je m'inquiéter?
Soit dit en passant, cela ne pose aucun problème. Mon
gnome-terminal
fait la même chose. Le flux de choses peut être un peu déroutant, mais Konsole interroge le système pour une information. Dans ce cas, quelque chose comme le répertoire personnel de l'utilisateur.Ainsi, le système appelle NSS (fichier de configuration de Name Service Switch):
Il y a une ligne dans ce fichier, en particulier cette ligne:
Cette ligne indique à NSS où se trouve la "base de données" 'passwd'. Cette ligne indique à NSS que la ressource se trouve dans des fichiers. Le système ouvre alors le
/etc/passwd
fichier pour rechercher le répertoire personnel de l'utilisateur.REMARQUE: creuser plus loin ce comportement semble être provoqué par Bash. Faire un
strace
de juste Bash montre la même chose.Lectures complémentaires
Si vous êtes vraiment intéressé par le fonctionnement de NSS, consultez les pages de manuel
nsswitch.conf
etnss
. NSS est modulaire et peut utiliser différentes technologies de backend pour ses "bases de données".Par exemple:
la source
/etc/nsswitch.conf
cela qui déclenche le chargement de/etc/passwd
, bien au contraire. Konsole veut obtenir des informations sur les comptes d'utilisateurs, alors il s'ouvre/etc/nsswitch.conf
, ce qui lui indique (à l'intérieur du code libc, pas à l'intérieur du code de la source Konsole) que les comptes d'utilisateurs sont dedans/etc/passwd
.Pour la même raison,
ls -l
lit / etc / passwd, ce sont les données qui associent les UID aux noms. Lors d'ls
appelsstat(2)
sur un fichier, il obtient un UID numérique pour le propriétaire du fichier. Pour afficher cela comme un nom lisible par l'homme, il doit le rechercher au seul endroit qui possède ces associations/etc/passwd
,. Par exemple, une première ligne typique/etc/passwd
estQuand
ls -l /etc/hosts
doit produire la sortieil doit traduire l'UID 0 en "root" car il appelle donc une routine de bibliothèque comme getpwuid qui lit
/etc/passwd
pour fournir la traduction. C'est une grande partie de la raison/etc/passwd
existe: pour fournir de telles traductions à des fins complètement banales.La recherche de noms d'utilisateurs ne pose pas plus de problème de sécurité que d'appeler localtime, ce qui
ls
vous indique le "14 janvier 2013" pour l'heure de modification du fichier. Comme l'a noté slm , il n'y a aucune raison de garder le fichier ouvert, il est donc fermé dès que son contenu est lu.À l'origine, le fichier
/etc/passwd
contenait des mots de passe hachés. Les hachages de mot de passe ont été déplacés vers/etc/shadow
lesquels les utilisateurs normaux ne peuvent pas lire car il s'agissait d'une faille de sécurité. Le nom est/etc/passwd
resté le même mais contient maintenantx
dans l'ancien champ de hachage de mot de passe qui n'est un hachage valide pour aucun mot de passe.la source