Einführung in den Linux-Befehl useradd

Das Hinzufügen eines Benutzers ist eine der grundlegendsten Übungen auf jedem Computersystem.

Bevor ich anfange, möchte ich drei Grundlagen erwähnen, die es zu beachten gilt. Erstens benötigen Linux-Benutzer wie bei den meisten Betriebssystemen ein Konto, um sich anmelden zu können. Dieser Artikel behandelt speziell lokale Konten, nicht Netzwerkkonten wie LDAP. Zweitens haben Konten sowohl einen Namen (Benutzername genannt) als auch eine Nummer (Benutzer-ID genannt). Drittens werden Benutzer normalerweise in eine Gruppe eingeteilt. Gruppen haben auch einen Namen und eine Gruppen-ID.

Wie zu erwarten, enthält Linux ein Befehlszeilendienstprogramm zum Hinzufügen von Benutzern; es heißt useradd . Sie können auch den Befehl adduser finden. Viele Distributionen haben diesen symbolischen Link aus praktischen Gründen zum Befehl useradd hinzugefügt.

$ file `which adduser`
/usr/sbin/adduser: symbolic link to useradd

Werfen wir einen Blick auf useradd.

Hinweis: Die in diesem Artikel beschriebenen Standardeinstellungen entsprechen denen in Red Hat Enterprise Linux 8.0. Sie können subtile Unterschiede in diesen Dateien und bestimmte Standardeinstellungen auf anderen Linux-Distributionen oder anderen Unix-Betriebssystemen wie FreeBSD oder Solaris finden.

Standardverhalten

Die grundlegende Verwendung von useradd ist recht einfach: Ein Benutzer kann einfach durch Angabe seines Benutzernamens hinzugefügt werden.

$ sudo useradd sonny

In diesem Beispiel erstellt der Befehl useradd ein Konto namens sonny. Eine Gruppe mit demselben Namen wird ebenfalls erstellt, und Sonny wird darin platziert, um als primäre Gruppe verwendet zu werden. Es gibt andere Parameter wie Sprache und Shell, die gemäß den Standardeinstellungen und Werten in den Konfigurationsdateien /etc/default/useradd und /etc /login angewendet werden.defs. Dies ist in der Regel ausreichend für ein einzelnes, persönliches System oder eine kleine Geschäftsumgebung mit einem Server.

Während die beiden obigen Dateien das Verhalten von useradd regeln, werden Benutzerinformationen in anderen Dateien im Verzeichnis /etc gespeichert, auf die ich in diesem Artikel verweisen werde.

Datei Beschreibung Felder (fett—von useradd gesetzt)
passwd Speichert Benutzerkontodetails Benutzername:unbenutzt:uid:gid:Kommentar:homedir:shell
shadow Speichert Sicherheitsdetails des Benutzerkontos Benutzername:Passwort:lastchange:Minimum:Maximum:warn:inaktiv:verfallen:unbenutzt
Gruppe Speichert Gruppendetails gruppenname:nicht verwendet:gid:mitglieder

Anpassbares Verhalten

Die Befehlszeile ermöglicht die Anpassung für Zeiten, in denen ein Administrator eine genauere Kontrolle benötigt, z. B. um die ID-Nummer eines Benutzers anzugeben.

Benutzer- und Gruppen-ID-Nummern

Standardmäßig versucht useradd, dieselbe Nummer für die Benutzer-ID (UID) und die primäre Gruppen-ID (GID) zu verwenden, es gibt jedoch keine Garantien. Obwohl es nicht notwendig ist, dass die UID und die GID übereinstimmen, ist es für Administratoren einfacher, sie zu verwalten, wenn sie dies tun.

Ich habe nur das Szenario zu erklären. Angenommen, ich füge ein weiteres Konto hinzu, diesmal für Timmy. Der Vergleich der beiden Benutzer sonny und timmy zeigt, dass sowohl Benutzer als auch ihre jeweiligen primären Gruppen mithilfe des Befehls getent erstellt wurden.

$ getent passwd sonny timmy
sonny:x:1001:1002:Sonny:/home/sonny:/bin/bash
timmy:x:1002:1003::/home/timmy:/bin/bash
$ getent group sonny timmy
sonny:x:1002:
timmy:x:1003:

Leider stimmen weder die UID noch die primäre GID des Benutzers überein. Dies liegt daran, dass das Standardverhalten darin besteht, dem Benutzer die nächste verfügbare UID zuzuweisen und dann zu versuchen, der primären Gruppe dieselbe Nummer zuzuweisen. Wenn diese Nummer jedoch bereits verwendet wird, wird der Gruppe die nächste verfügbare GID zugewiesen. Um zu erklären, was passiert ist, nehme ich an, dass eine Gruppe mit GID 1001 bereits existiert, und gebe einen Befehl zur Bestätigung ein.

$ getent group 1001
book:x:1001:alan

Das Gruppenbuch mit der ID 1001 hat dazu geführt, dass die GIDs um eins ausgeschaltet wurden. Dies ist ein Beispiel, in dem ein Systemadministrator mehr Kontrolle über den Benutzererstellungsprozess übernehmen müsste. Um dieses Problem zu beheben, muss ich zuerst die nächste verfügbare Benutzer- und Gruppen-ID ermitteln, die übereinstimmt. Die Befehle getent group und getent passwd sind hilfreich, um die nächste verfügbare Nummer zu ermitteln. Diese Nummer kann mit dem Argument -u übergeben werden.

$ sudo useradd -u 1004 bobby
$ getent passwd bobby; getent group bobby
bobby:x:1004:1004::/home/bobby:/bin/bash
bobby:x:1004:

Ein weiterer guter Grund, die ID anzugeben, ist für Benutzer, die über das Network File System (NFS) auf Dateien auf einem Remote-System zugreifen. NFS ist einfacher zu verwalten, wenn alle Client- und Serversysteme dieselbe ID für einen bestimmten Benutzer konfiguriert haben. Ich behandle dies etwas ausführlicher in meinem Artikel über die Verwendung von autofs zum Mounten von NFS-Freigaben.

Mehr Anpassung

Sehr oft müssen jedoch andere Kontoparameter für einen Benutzer angegeben werden. Hier finden Sie kurze Beispiele für die gängigsten Anpassungen, die Sie möglicherweise verwenden müssen.

Comment

Die Option comment ist ein Klartextfeld, um eine kurze Beschreibung oder andere Informationen mit dem Argument -c bereitzustellen.

$ sudo useradd -c "Bailey is cool" bailey
$ getent passwd bailey
bailey:x:1011:1011:Bailey is cool:/home/bailey:/bin/bash

Gruppen

Einem Benutzer können eine primäre Gruppe und mehrere sekundäre Gruppen zugewiesen werden. Das Argument -g gibt den Namen oder die GID der primären Gruppe an. Wenn dies nicht angegeben ist, erstellt useradd eine primäre Gruppe mit demselben Namen des Benutzers (wie oben gezeigt). Das Argument -G (Großbuchstaben) wird verwendet, um eine durch Kommas getrennte Liste von Gruppen zu übergeben, in die der Benutzer platziert wird.

$ sudo useradd -G tgroup,fgroup,libvirt milly
$ id milly
uid=1012(milly) gid=1012(milly) groups=1012(milly),981(libvirt),4000(fgroup),3000(tgroup)

Home-Verzeichnis

Das Standardverhalten von useradd besteht darin, das Home-Verzeichnis des Benutzers in /home zu erstellen. Verschiedene Aspekte des Home-Verzeichnisses können jedoch mit den folgenden Argumenten überschrieben werden. Die Option -b legt ein anderes Verzeichnis fest, in dem Benutzer-Homes abgelegt werden können. Zum Beispiel /home2 anstelle des Standard /home.

$ sudo useradd -b /home2 vicky
$ getent passwd vicky
vicky:x:1013:1013::/home2/vicky:/bin/bash

Mit -d können Sie ein Home-Verzeichnis mit einem anderen Namen als der Benutzer angeben.

$ sudo useradd -d /home/ben jerry
$ getent passwd jerry
jerry:x:1014:1014::/home/ben:/bin/bash

Das Skelett-Verzeichnis

Das -k weist das neue Home-Verzeichnis des neuen Benutzers an, mit allen Dateien im Verzeichnis /etc/skel gefüllt zu werden. Dies sind normalerweise Shell-Konfigurationsdateien, aber sie können alles sein, was ein Systemadministrator allen neuen Benutzern zur Verfügung stellen möchte.

Shell

Das Argument -s kann verwendet werden, um die Shell anzugeben. Der Standardwert wird verwendet, wenn nichts anderes angegeben ist. Im folgenden Beispiel wird Shell bash in der Standardkonfigurationsdatei definiert, aber Wally hat zsh angefordert.

$ grep SHELL /etc/default/useradd
SHELL=/bin/bash
$ sudo useradd -s /usr/bin/zsh wally
$ getent passwd wally
wally:x:1004:1004::/home/wally:/usr/bin/zsh

Sicherheit

Sicherheit ist ein wesentlicher Bestandteil der Benutzerverwaltung, daher stehen mit dem Befehl useradd mehrere Optionen zur Verfügung. Ein Benutzerkonto kann mit dem Argument -e ein Ablaufdatum in der Form JJJJ-MM-TT erhalten.

$ sudo useradd -e 20191231 sammy
$ sudo getent shadow sammy
sammy:!!:18171:0:99999:7::20191231:

Ein Konto kann auch automatisch deaktiviert werden, wenn das Passwort abläuft. Das Argument -f legt die Anzahl der Tage nach Ablauf des Kennworts fest, bevor das Konto deaktiviert wird. Null ist unmittelbar.

$ sudo useradd -f 30 willy
$ sudo getent shadow willy
willy:!!:18171:0:99999:7:30::

Ein Beispiel aus der Praxis

In der Praxis können mehrere dieser Argumente beim Erstellen eines neuen Benutzerkontos verwendet werden. Wenn ich beispielsweise ein Konto für Perry erstellen muss, kann ich den folgenden Befehl verwenden:

$ sudo useradd -u 1020 -c "Perry Example" \
-G tgroup -b /home2 \
-s /usr/bin/zsh \
-e 20201201 -f 5 perry

Lesen Sie die obigen Abschnitte, um die einzelnen Optionen zu verstehen. Überprüfen Sie die Ergebnisse mit:

$ getent passwd perry; getent group perry; getent shadow perry; id perry
perry:x:1020:1020:Perry Example:/home2/perry:/usr/bin/zsh
perry:x:1020:
perry:!!:18171:0:99999:7:5:20201201:
uid=1020(perry) gid=1020(perry) groups=1020(perry),3000(tgroup)

Einige abschließende Ratschläge

Der Befehl useradd ist ein „Muss“ für jeden Unix-Administrator (nicht nur für Linux). Es ist wichtig, alle Optionen zu verstehen, da die Benutzererstellung etwas ist, das Sie beim ersten Mal richtig machen möchten. Dies bedeutet, dass Sie über eine durchdachte Namenskonvention verfügen, die einen dedizierten UID / GID—Bereich enthält, der für Ihre Benutzer in Ihrem gesamten Unternehmen reserviert ist, nicht nur für ein einzelnes System – insbesondere, wenn Sie in einer wachsenden Organisation arbeiten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.