Finden Sie heraus, ob der Benutzername existiert


68

Wie kann ich in einem Shell-Skript herausfinden, ob ein bestimmter Benutzername auf dem aktuellen System vorhanden ist?


/etc/passwdund /etc/shadowsind unvollständig. Betrachten Sie die Verzeichnisdienste von OS X oder Linux mit einer ähnlichen Active Directory-Integration.

Antworten:


103

Eines der grundlegendsten Werkzeuge dafür ist wahrscheinlich id.

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

Welches produziert

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

2
Sie brauchen nicht die Anführungszeichen hier - verwenden Sie einfach if id -u "$1" >/dev/null 2>&1; then...
Gordon Davisson

1
@ Gordon absolut richtig natürlich. Danke :)
barbaz

"-u" scheint auch unnötig
palacsint

Was ist, wenn ich nur ifmit negativer Ergebniskontrolle brauche ?
Yura Shinkarev

id -u $1 1>/dev/null 2>&1; echo $?kann für Pipe verwendet werden
JasonWayne

20

getent

Dieser Befehl dient zum Sammeln von Einträgen für die Datenbanken, die mit / etc-Dateien und verschiedenen Remotediensten wie LDAP, AD, NIS / Yellow Pages, DNS und dergleichen gesichert werden können.

Um herauszufinden, ob einem der Kennwortbenennungsdienste ein Benutzername bekannt ist, führen Sie einfach Folgendes aus:

getent passwd username

Dies funktioniert auch mit Gruppen, Hosts und anderen, je nach Betriebssystem und Implementierung.


1
Während Solaris und Linux und in jüngerer Zeit auch die meisten BSDs getent, gibt es getentunter Mac OS X keine
barbaz

In der Tat vermisst ich Mac OS / X fehlt getent.
Juli

Trotzdem ist es auf den unterstützten Systemen sehr nützlich.
Daniel Beck

1
getent ist nett, weil Sie mehrere Benutzernamen abfragen können, wobei id nur einen einzigen Benutzernamen unterstützt.
Alle

6

finger

Analysieren Sie die Ausgabe von finger -m <username>. Kein Fehlercode, wenn leider kein Benutzer gefunden wurde, aber wenn nicht gefunden, wird eine Fehlerausgabe geschrieben. Bisher keine Nachteile.

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

Wird gedruckt, 0wenn ein Benutzer gefunden wird (da keine Fehlerausgabe erfolgt), andernfalls werden größere Zahlen ausgegeben.

chown

Führen Sie (überraschenderweise wie jeder andere Benutzer) Folgendes aus:

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

Wenn dies fehlschlägt root, ist der Kontoname ungültig.

Wenn dies als Nichtbenutzer fehlschlägt root, analysieren Sie die möglicherweise lokalisierte Ausgabe für Operation nicht zulässig oder ungültiger Benutzer (oder Entsprechungen). Stellen Sie dies LANGvorher zuverlässig ein.


0

Ich würde sagen, dass Sie sich auf etwas /etc/passwdÄhnliches verlassen möchten (z. B. /etc/shadowfür Shadow-basierte Systeme; bei einer Randnotiz, die nicht zum Thema gehört, könnten einige ähnliche Systeme /etc/master.passwdoder andere solche Dateien verwenden).

Das /etc/passwdwird normalerweise als die absolut maßgebliche Entscheidung darüber behandelt, ob ein Benutzer existiert oder nicht. Wenn Sie eine der anderen auf dieser Seite beschriebenen Methoden verwenden und diese anderen Methoden auf einen vorhandenen Benutzer verweisen, dies jedoch /etc/passwdnicht tun, dann würde ich sagen, dass der Benutzer nach Definition des gebräuchlichsten Standards nicht ordnungsgemäß auf dem System vorhanden ist Software würde wahrscheinlich verlassen.

Das heißt, ich werde auf eine andere Weise werfen, um die Mischung einiger anderer Optionen, die verwendet werden könnten, zu ergänzen.

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

Ersetzen Sie "customuserName" durch den Namen des Benutzers, nach dem Sie suchen möchten. Ersetzen Sie / home durch / users, wenn Ihr System dies verwendet. Dies kann dazu führen, dass nicht alle Benutzer in / etc / passwd gefunden werden, wenn für den jeweiligen Benutzer kein Basisverzeichnis erstellt wurde. Dies kann auftreten, wenn Sie einfach Benutzer (dh Textzeilen in / etc / passwd) importiert haben und wenn dies nicht der Fall ist gemacht werden, es sei denn / bis sich eine Person anmeldet.


Ich verstehe nicht, warum Sie einen Benutzer angeben, der keinen Eintrag in der Datei / etc / password hat, der jedoch als gültig gemeldet wird idoder getentauf dem System nicht "ordnungsgemäß" vorhanden ist, insbesondere wenn das OP eindeutig angibt, dass Namensdienste vorhanden sind ist zu berücksichtigen.
Juli
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.