web-dev-qa-db-fra.com

Savoir si le nom d'utilisateur existe

Comment savoir, dans un script Shell, si un nom d'utilisateur donné existe sur le système actuel?


/etc/passwd et /etc/shadow sont incomplets. Considérons les services de répertoire de OS X ou Linux avec une intégration similaire à Active Directory.

65
Daniel Beck

L’un des outils les plus élémentaires à utiliser est probablement id.

#!/bin/bash
if id "$1" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

Qui produit

$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
98
barbaz

getent

Cette commande est conçue pour rassembler les entrées des bases de données pouvant être sauvegardées par des fichiers/etc et divers services distants tels que LDAP, AD, NIS/Pages jaunes, DNS et autres.

Pour déterminer si un nom d'utilisateur est connu par l'un des services de nommage des mots de passe, exécutez simplement:

getent passwd username

Cela fonctionne également avec le groupe, les hôtes et autres, en fonction du système d'exploitation et de la mise en œuvre.

19
jlliagre

finger

Analyser la sortie de finger -m <username>. Aucun code d'erreur si aucun utilisateur n'a été trouvé, malheureusement, mais si ce n'est pas le cas, la sortie d'erreur sera écrite. Aucun inconvénient jusqu'à présent.

finger -ms <username> 2>&1 1>/dev/null | wc -l

Imprimera 0 si l'utilisateur est trouvé (car il n'y a pas d'erreur en sortie), sinon, des nombres plus grands.

chown

Exécutez (comme tout utilisateur, étonnamment):

T=$( mktemp -t foo.XXX ) ; chown <username> $T

Si cela échoue en tant que root, le nom du compte n'est pas valide.

S'il échoue en tant qu'utilisateur non -root, analysez la sortie éventuellement localisée pour Opération non autorisée ou utilisateur non valide (ou des équivalents). Réglez LANG à l'avance pour le faire de manière fiable.

6
Daniel Beck

Je dirais que vous voudriez vous appuyer sur /etc/passwd et similaire (par exemple, /etc/shadow pour les systèmes basés sur Shadow; sur une note secondaire, certains systèmes similaires pourraient utiliser /etc/master.passwd ou d’autres fichiers du même type).

Le /etc/passwd est généralement traité comme une décision faisant autorité absolue pour déterminer si un utilisateur existe ou non. Si vous utilisez l'une des autres méthodes décrites sur cette page et si ces méthodes renvoient à un utilisateur existant, mais que /etc/passwd ne le soit pas, je dirais que l'utilisateur n'existe pas correctement sur le système, par définition du standard le plus courant. ce logiciel compterait probablement sur.

Cela dit, je vais ajouter un autre moyen d’ajouter à la combinaison d’autres options qui pourraient être utilisées.

ls -l /home | grep ^customUserName$<BR> echo $?

Clairement, remplacez "customuserName" par le nom de l'utilisateur que vous souhaitez vérifier. Remplacez/home par/users si c'est ce que votre système utilise. Cela pourrait ne pas trouver tous les utilisateurs dans/etc/passwd si aucun répertoire de base n'a été créé pour cet utilisateur particulier, ce qui peut se produire si vous importez simplement des utilisateurs (c'est-à-dire des lignes de texte dans/etc/passwd) et si les répertoires de base ne le sont pas. se faire à moins que/jusqu'à ce qu'une personne se connecte.

0
TOOGAM