Fügen Sie dem System einen Benutzer hinzu * nur, wenn er nicht existiert *

47

Ich habe den useradd {user}Befehl zum Hinzufügen von Benutzern zu meinem System ausgeführt, obwohl ich dies in einer automatisierten Umgebung ausführen möchte, und es wird möglicherweise erneut ausgeführt, obwohl der Benutzer bereits vorhanden ist.

Kann ich das nur ausführen, wenn der Benutzer noch nicht existiert? Der Benutzer hat keinen Basisordner.

Tarnfeld
quelle
adduserwird allgemein auf Debian / Ubuntu-Systemen bevorzugt.
Faheem Mitha
@FaheemMitha In automatisierten Skripten ist es wahrscheinlich besser, die konsistentere zu verwenden useradd.
Der Kerl mit dem Hut

Antworten:

69

id -u somename Gibt einen Exit-Code ungleich Null zurück, wenn der Benutzer nicht existiert.

Sie können es ganz einfach testen ... ( &>/dev/nullunterdrückt nur die normale Ausgabe / Warnung)

id -u somename &>/dev/null || useradd somename 
Peter.O
quelle
1
Auf tragbare Weise: "id -u somename> / dev / null 2> & 1 || useradd somename"
Tristan
13

Versuche dies:

useradd {user} || echo "User already exists."

oder auch das:

useradd {user} || true
sebaszw
quelle
Dies sichert die Prüfung, da sie sicher fehlschlägt, wenn der Benutzer bereits vorhanden ist.
CoverosGene
8

Wenn Sie nicht nur eine kleine Handvoll Systeme haben, stellen Sie die falsche Frage. Die Antwort ist, dass useradd überhaupt nicht ausgeführt wird, sondern dass diese Arbeit einer Konfigurationsverwaltungslösung wie Puppet oder Chef überlassen wird. Auf diese Weise können Sie Ihre Benutzerdefinitionen zentralisieren und verhindern, dass Sie für Schleifen ausgeführt werden und ssh mit Root-Benutzern verwenden, um Ihre Systeme zu konfigurieren. Sie werden immer Systeme in einem bekannten Konfigurationsstatus haben.

Die Dokumentation für Puppets finden Sie unter http://docs.puppetlabs.com

Als Beispiel in Puppe:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with `openssl passwd -1`
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}
Aaron Brown
quelle
4
Puppet ist ein großartiges Projekt, aber Sie können keine Vermutungen darüber
anstellen,
1
Das OP hat das Ziel sehr deutlich erklärt - automatisiert und wieder lauffähig, obwohl der Benutzer existiert (Idempotenz). Dies sind die genauen Anwendungsfälle für ein Konfigurationsverwaltungstool. Wenn jemand nicht weiß, dass es bereits Tools zur Lösung dieser Probleme gibt, neigt er dazu, Fragen zu stellen, bei denen ein sehr spezifisches, eng fokussiertes Problem gelöst werden muss, wenn ein größeres Konzept zu erfassen ist.
Aaron Brown
Ich benutze schon Chef.
Tarnfeld
1
Chef fügt nur Benutzer hinzu, wenn der Benutzer nicht existiert. Das ist Idempotenz, also verstehe ich die Frage nicht (1,5 Jahre später).
Aaron Brown
4

useradd würde den Benutzer nicht erneut hinzufügen, wenn er bereits vorhanden ist. Es soll sichergestellt werden, dass die UID-Nummer und die UID-Anmeldung eindeutig sind. Wenn Sie vorhaben, einen Stapel zu durchlaufen, stellen Sie sicher, dass die verwendeten UIDs eindeutig sind. useradd würde sich über die problematischen Einträge beschweren und Sie müssen die Fehler / stderr erfassen, um zu sehen, welche Benutzerkonten Probleme hatten, in die Kontosysteme (/ etc / passwd, group, shadow) zu gelangen.

Nikhil Mulley
quelle