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.
if id -u "$1" >/dev/null 2>&1; then
...if
d'un vérificateur de résultat négatif?id -u $1 1>/dev/null 2>&1; echo $?
peut être utilisé pour pipegetent
Cette commande est conçue pour regrouper 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:
Cela fonctionne également avec le groupe, les hôtes et autres, en fonction du système d'exploitation et de la mise en œuvre.
la source
getent
, il n’en existe pasgetent
sur Mac OS Xfinger
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.Imprimera
0
si l'utilisateur est trouvé (car il n'y a pas d'erreur), sinon, des nombres plus grands.chown
Exécutez (comme tout utilisateur, étonnamment):
Si cela échoue
root
, le nom du compte est invalide.S'il échoue en tant que non-
root
utilisateur, analysez la sortie éventuellement localisée pour une opération non autorisée ou non valide (ou des équivalents). RéglezLANG
au préalable pour le faire de manière fiable.la source
Je dirais que vous voudriez vous appuyer sur des éléments
/etc/passwd
similaires (par exemple,/etc/shadow
pour les systèmes basés sur Shadow; sur une note secondaire hors sujet, certains systèmes similaires pourraient utiliser/etc/master.passwd
ou autres fichiers similaires).Le
/etc/passwd
est généralement traité comme la décision absolue absolue selon laquelle 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/etc/passwd
ne le font pas, je dirais alors que l'utilisateur n'existe pas correctement sur le système, par définition du standard le plus courant le 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, ce qui pourrait se produire si vous importiez 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.
la source
id
ou quigetent
n'existe pas "correctement" sur le système, en particulier lorsque l'OP indique clairement que les services de nommage sont à prendre en considération.