15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
09.10.2024

useradd vs adduser: Technische Unterschiede, Anwendungsfälle und wann welches verwendet werden sollte

`useradd` ist ein Low-Level-Binär-Dienstprogramm, das auf nahezu jeder Linux-Distribution verfügbar ist und Benutzerkonten erstellt, indem es direkt in `/etc/passwd`, `/etc/shadow` und `/etc/group` schreibt. `adduser` ist ein übergeordnetes Wrapper-Skript — typischerweise in Perl auf Debian-basierten Systemen geschrieben — das `useradd` intern aufruft und dabei die Erstellung des Home-Verzeichnisses, die Befüllung von Skeleton-Dateien, die Passwortabfrage und die Erfassung von GECOS-Feldern automatisiert. Der praktische Unterschied liegt nicht nur in der Benutzerfreundlichkeit: Die Wahl des falschen Werkzeugs in einer automatisierten Bereitstellungspipeline oder auf einem Nicht-Debian-System kann stillschweigend unvollständige Benutzerkonten erzeugen.

Beide Befehle registrieren letztendlich einen Benutzer in der Authentifizierungsdatenbank des Systems, aber ihr Verhalten unterscheidet sich erheblich in Bezug auf Standardeinstellungen, Interaktivität, Portabilität und Skriptfähigkeit. Dieser Leitfaden behandelt jeden technischen Unterschied, den ein Administrator benötigt, um eine fundierte Entscheidung zu treffen.

Was useradd tatsächlich im Hintergrund tut

`useradd` ist Teil des shadow-utils-Pakets (auf älteren Distributionen manchmal `passwd` genannt). Bei der Ausführung führt es eine Reihe atomarer Operationen durch:

  1. Liest `/etc/login.defs`, um Standard-UID-Bereiche, Passwort-Alterungsrichtlinien und ob standardmäßig ein Home-Verzeichnis erstellt werden soll, zu bestimmen.
  2. Liest `/etc/default/useradd` für die Standard-Shell, den Skeleton-Verzeichnispfad und das Gruppenverhalten.
  3. Schreibt einen neuen Eintrag in `/etc/passwd` und `/etc/shadow`.
  4. Erstellt optional ein Home-Verzeichnis und kopiert Dateien aus `/etc/skel`, wenn `-m` explizit übergeben wird.
  5. Erstellt optional eine private Gruppe, die dem Benutzernamen entspricht, wenn `USERGROUPS_ENAB` in `/etc/login.defs` auf `yes` gesetzt ist.

Ein kritischer Punkt, den viele Leitfäden auslassen: Auf Red Hat-basierten Distributionen (RHEL, CentOS, Rocky Linux, AlmaLinux) erstellt `useradd` das Home-Verzeichnis standardmäßig, weil `/etc/login.defs` `CREATE_HOME yes` setzt. Auf Debian und Ubuntu ist dies nicht der Fall — das Flag `-m` ist obligatorisch, es sei denn, Sie ändern `/etc/default/useradd`. Diese Verhaltensasymmetrie ist eine häufige Quelle der Verwirrung, wenn Administratoren zwischen Distributionsfamilien wechseln.

Wichtige Flags und ihr Verhalten

FlagZweckHinweise
———————-
`-m`Home-Verzeichnis erstellenAuf Debian/Ubuntu ohne Konfigurationsänderung erforderlich
`-d /path`Benutzerdefinierten Home-Verzeichnispfad festlegenErstellt das Verzeichnis nicht, es sei denn, `-m` wird ebenfalls verwendet
`-s /bin/bash`Login-Shell festlegenStandardmäßig `/bin/sh` oder Wert in `/etc/default/useradd`
`-u UID`Bestimmte UID zuweisenMuss eindeutig sein; verwenden Sie `-o`, um Duplikate zuzulassen
`-g GID`Primärgruppe festlegenGruppe muss bereits existieren
`-G group1,group2`Ergänzende Gruppen hinzufügenKommagetrennt, keine Leerzeichen
`-e YYYY-MM-DD`Ablaufdatum des KontosWird in `/etc/shadow` Feld 8 geschrieben
`-f days`Passwort-InaktivitätszeitraumTage nach Ablauf, bevor das Konto gesperrt wird
`-r`Systemkonto erstellenUID unterhalb von `SYS_UID_MAX` in `/etc/login.defs`, standardmäßig kein Home-Verzeichnis
`-M`Explizit kein Home-Verzeichnis erstellenÜberschreibt Distro-Standardeinstellungen
`-N`Keine private Benutzergruppe erstellenDie primäre Gruppe des Benutzers wird zur Standardgruppe
`-k /path`Alternatives Skeleton-Verzeichnis angebenÜberschreibt `/etc/skel`

Praktisches useradd-Beispiel mit vollständigen Optionen

“`bash

useradd

-m

-d /srv/appuser

-s /bin/bash

-u 1500

-g developers

-G sudo,docker

-e 2025-12-31

-c "Application Service Account"

appuser

passwd appuser

“`

Es wird kein Passwort gesetzt, bis `passwd` aufgerufen wird. Bis dahin existiert das Konto, ist aber gesperrt — der Shadow-Eintrag enthält `!` als Passwort-Hash, was die Anmeldung über Passwort-Authentifizierung verhindert. Die SSH-Schlüssel-basierte Anmeldung ist von diesem Zustand jedoch nicht betroffen.

Was adduser tatsächlich im Hintergrund tut

Auf Debian und Ubuntu ist `adduser` ein Perl-Skript, das sich unter `/usr/sbin/adduser` befindet. Es liest seine eigene Konfiguration aus `/etc/adduser.conf` — einer separaten Datei von `/etc/login.defs` — und ruft dann `useradd` mit den entsprechenden Flags basierend auf dieser Konfiguration und Benutzereingaben auf.

Das Skript führt zusätzliche Schritte durch, die `useradd` allein nicht ausführt:

  • Fordert interaktiv ein Passwort an und bestätigt es mit einer zweiten Eingabe.
  • Erfasst GECOS-Felder (vollständiger Name, Zimmernummer, Arbeitstelefon, Heimtelefon, Sonstiges) über geführte Eingabeaufforderungen.
  • Kopiert Skeleton-Dateien aus `/etc/skel` automatisch, ohne `-m` zu benötigen.
  • Setzt korrekte Eigentümerschaft und Berechtigungen für das Home-Verzeichnis.
  • Fügt den Benutzer optional zu ergänzenden Gruppen hinzu, die in `/etc/adduser.conf` definiert sind.

Auf Red Hat-basierten Systemen ist `adduser` typischerweise ein Symlink zu `useradd`, was bedeutet, dass es sich identisch zum Low-Level-Binary verhält — es gibt keinen interaktiven Wrapper. Dies ist das wichtigste Portabilitätsproblem beim Schreiben von distributionsübergreifenden Skripten.

adduser-Konfigurationsdatei: /etc/adduser.conf

Wichtige Direktiven in `/etc/adduser.conf`, die das Verhalten beeinflussen:

“`

DSHELL=/bin/bash # Default shell

DHOME=/home # Parent directory for home directories

GROUPHOMES=no # Whether to create group-named subdirectories

LETTERHOMES=no # Whether to use first-letter subdirectories

USERGROUPS=yes # Create a group with the same name as the user

USERS_GID=100 # Default GID if USERGROUPS=no

DIR_MODE=0755 # Permissions on new home directories

SETGID_HOME=no

QUOTAUSER=""

SKEL=/etc/skel

SKEL_IGNORE_REGEX="dpkg-(old|new|dist|tmp)"

“`

Durch die Änderung dieser Datei können Sie die Benutzererstellung über eine Flotte von Debian/Ubuntu-Servern standardisieren, ohne jedes Mal Flags übergeben zu müssen.

Praktisches adduser-Beispiel

“`bash

adduser customuser

“`

Die interaktive Sitzung sieht folgendermaßen aus:

“`

Adding user 'customuser' …

Adding new group 'customuser' (1001) …

Adding new user 'customuser' (1001) with group 'customuser' …

Creating home directory '/home/customuser' …

Copying files from '/etc/skel' …

New password:

Retype new password:

passwd: password updated successfully

Changing the user information for customuser

Enter the new value, or press ENTER for the default

Full Name []: Jane Smith

Room Number []:

Work Phone []:

Home Phone []:

Other []:

Is the information correct? [Y/n] Y

“`

Um einen bestehenden Benutzer nicht-interaktiv mit `adduser` zu einer Gruppe hinzuzufügen:

“`bash

adduser customuser sudo

“`

Dies ist eine bemerkenswerte Funktion: `adduser` dient auch als Verwaltungswerkzeug für Gruppenmitgliedschaften, was `useradd` nicht mit einem einzigen Befehl repliziert.

Direkter Vergleich

Funktion`useradd``adduser`
TypBinary (C-Programm)Skript (Perl auf Debian, Symlink auf RHEL)
InteraktivitätNicht-interaktiv; alle Optionen über FlagsInteraktive Eingabeaufforderungen standardmäßig
Home-VerzeichnisWird nicht erstellt, es sei denn, `-m` wird übergeben (Debian)Wird automatisch erstellt
Passwort-EinrichtungErfordert separaten `passwd`-BefehlWird während der Erstellung abgefragt
GECOS-FelderÜber `-c`-Flag als einzelne Zeichenkette gesetztWerden interaktiv Feld für Feld erfasst
Skeleton-DateienNur mit `-m`-Flag kopiertImmer kopiert
Konfigurationsdatei`/etc/login.defs`, `/etc/default/useradd``/etc/adduser.conf`
Distributionsübergreifende VerfügbarkeitAlle Linux-DistributionenNur Debian/Ubuntu (als Wrapper-Skript)
Skript-EignungAusgezeichnet — vollständig nicht-interaktivSchlecht — erfordert `–disabled-password`- und `–gecos`-Flags, um Eingabeaufforderungen zu vermeiden
SystemkontenUnterstützt über `-r`-FlagUnterstützt über `–system`-Flag
GruppenverwaltungNur zum ErstellungszeitpunktKann Benutzer nach der Erstellung zu bestehender Gruppe hinzufügen
GranularitätVollständige Kontrolle über jeden ParameterMeinungsstarke Standardeinstellungen, weniger granular

Wann useradd verwendet werden sollte

Automatisierung und Infrastructure-as-Code

`useradd` ist die richtige Wahl in jedem nicht-interaktiven Kontext: Ansible-Playbooks, Terraform-Provisioner, Docker-`RUN`-Anweisungen, cloud-init-Skripte und CI/CD-Pipelines. Es erzeugt deterministischen Output ohne stdin-Abhängigkeit.

“`bash

Ansible task equivalent

useradd -m -s /bin/bash -G sudo -c "Deploy User" deployuser

echo "deployuser:$(openssl passwd -6 'securepassword')" | chpasswd

“`

Distributionsübergreifende Portabilität

Jedes Shell-Skript, das sowohl auf Debian-basierten als auch auf RHEL-basierten Systemen ausgeführt werden soll, muss `useradd` verwenden. Das Verlassen auf das Verhalten von `adduser` führt zu stillen Fehlern oder unerwartetem Verhalten auf CentOS, Fedora, Rocky Linux oder Alpine Linux.

System- und Dienstkonten

Das Erstellen gesperrter, nicht-login-fähiger Dienstkonten für Daemons ist eine Spezialität von `useradd`:

“`bash

useradd -r -s /usr/sbin/nologin -d /var/lib/myservice -m myservice

“`

Das Flag `-r` weist eine UID unterhalb der Systemkonto-Schwelle zu, signalisiert Administratoren, dass dies kein menschliches Benutzerkonto ist, und ist das Standardmuster für die Anwendungsbereitstellung in VPS Hosting-Umgebungen, in denen Dienst-Isolation kritisch ist.

Präzise UID/GID-Kontrolle

In NFS-Umgebungen, Container-Orchestrierung oder bei der Synchronisierung von Benutzerdatenbanken über mehrere Server hinweg sind konsistente UIDs und GIDs obligatorisch. `useradd -u 1500 -g 1500` garantiert dies; `adduser` bietet ohne erhebliche Konfiguration nicht dieselbe deterministische Kontrolle.

Wann adduser verwendet werden sollte

Interaktive Server-Einrichtung

Beim manuellen Bereitstellen eines neuen Dedizierten Servers und dem Hinzufügen der ersten menschlichen Benutzerkonten reduziert `adduser` das Risiko einer unvollständigen Einrichtung. Die geführten Eingabeaufforderungen machen es nahezu unmöglich, den Passwortschritt zu vergessen.

Debian/Ubuntu-Umgebungen mit Standardeinstellungen

Wenn Ihre gesamte Infrastruktur auf Debian oder Ubuntu läuft und Sie Standard-Home-Verzeichnis-Benutzer erstellen, liefert `adduser` schneller korrekte Ergebnisse mit weniger zu merkenden Flags.

Gruppenverwaltung nach der Erstellung

Die `adduser username groupname`-Syntax zum Hinzufügen eines bestehenden Benutzers zu einer bestehenden Gruppe ist übersichtlicher als `usermod -aG groupname username`, obwohl beide gültig sind.

Einarbeitung von Junior-Administratoren

Die interaktive Natur von `adduser` macht es zu einem besseren Lehrwerkzeug. Es zeigt die wichtigen Felder (Passwort, vollständiger Name) und verbirgt die Komplexität von UID-Bereichen und Skeleton-Verzeichnissen, bis der Administrator bereit ist, sie zu erlernen.

Kritische Randfälle und Fallstricke

Die fehlende Home-Verzeichnis-Falle

Auf Debian/Ubuntu erstellt das Ausführen von `useradd username` ohne `-m` den Benutzer, aber nicht das Home-Verzeichnis. Der Benutzer kann sich anmelden (sobald ein Passwort gesetzt ist), aber `$HOME` existiert nicht, was zu Fehlern in jeder Anwendung führt, die beim ersten Login in das Home-Verzeichnis schreibt — einschließlich `.bash_history`, `.ssh/authorized_keys` und vieler Anwendungskonfigurationsverzeichnisse.

“`bash

Verify home directory existence after creation

ls -la /home/newuser || echo "Home directory missing — run: mkhomedir_helper newuser"

“`

Shadow-Datei-Sperrung

Beide Befehle sperren `/etc/shadow` während des Schreibens. In Hochparallelitäts-Bereitstellungsskripten, die Dutzende von Benutzern gleichzeitig erstellen, verursacht dies Race Conditions. Verwenden Sie eine Warteschlange oder sequentielle Ausführung beim Massenerstellen von Benutzern.

UID-Kollision in containerisierten Umgebungen

Bei der Bereitstellung von Anwendungen auf VPS mit cPanel oder anderen Control-Panel-Umgebungen verwaltet das Panel selbst die UID-Zuweisung. Das manuelle Ausführen von `useradd` mit einer fest codierten UID kann mit panel-zugewiesenen UIDs kollidieren und Berechtigungsfehler über mehrere Konten hinweg verursachen. Überprüfen Sie immer `getent passwd | awk -F: '{print $3}' | sort -n`, bevor Sie eine UID manuell angeben.

adduser –disabled-password für Skripting

Wenn Sie `adduser` in einem Skript verwenden müssen (zum Beispiel, um seine `/etc/adduser.conf`-Standardeinstellungen zu nutzen), unterdrücken Sie die interaktiven Eingabeaufforderungen:

“`bash

adduser –disabled-password –gecos "Automated User,,," scriptuser

echo "scriptuser:$(openssl passwd -6 'password')" | chpasswd

“`

Das Flag `–gecos` akzeptiert eine kommagetrennte Zeichenkette, die den GECOS-Feldern entspricht, und eliminiert alle interaktiven Eingabeaufforderungen.

PAM- und NSS-Integration

Weder `useradd` noch `adduser` konfiguriert PAM-Module oder NSS (Name Service Switch)-Einträge für LDAP, Active Directory oder andere zentralisierte Authentifizierungssysteme. Auf Servern, die mit `sssd` oder `winbind` integriert sind, erstellt die lokale Benutzererstellung mit beiden Befehlen Konten, die mit Verzeichnisdienstkonten in Konflikt geraten oder von diesen überschrieben werden können. Überprüfen Sie `/etc/nsswitch.conf`, bevor Sie lokale Benutzer auf domänengebundenen Systemen erstellen.

Skeleton-Datei-Anpassung

Beide Befehle kopieren standardmäßig aus `/etc/skel`. Für Teams, die Shared Web Hosting-Umgebungen verwalten, in denen jeder Benutzer ein vorkonfiguriertes `.bashrc`, `.vimrc` oder eine SSH-Konfiguration benötigt, ist das Befüllen von `/etc/skel` vor dem Ausführen eines der beiden Befehle der richtige Ansatz — nicht das Ändern von Dateien nach der Kontoerstellung.

Überprüfung der Benutzererstellung

Unabhängig davon, welchen Befehl Sie verwenden, überprüfen Sie das Ergebnis:

“`bash

Check passwd entry

getent passwd newuser

Check shadow entry (requires root)

getent shadow newuser

Check group memberships

groups newuser

id newuser

Verify home directory and permissions

ls -la /home/newuser

Test login shell

su -s /bin/bash – newuser -c "echo login successful"

“`

Benutzer ändern und löschen

`useradd` und `adduser` erstellen nur Konten. Die Verwaltung nach der Erstellung verwendet andere Befehle:

  • `usermod` — Vorhandene Benutzerattribute ändern (Shell, Gruppen, Home-Verzeichnis, Ablauf).
  • `userdel` / `deluser` — Konten entfernen. `deluser –remove-home username` auf Debian entfernt auch das Home-Verzeichnis und den Mail-Spool.
  • `passwd` — Passwörter setzen oder ändern, Konten sperren/entsperren.
  • `chage` — Passwort-Alterungs- und Ablaufrichtlinien verwalten.

“`bash

Lock an account without deleting it

usermod -L username

Unlock

usermod -U username

Force password change on next login

chage -d 0 username

“`

Praktische Entscheidungsmatrix

Verwenden Sie diese Checkliste, um den richtigen Befehl auszuwählen:

  • Läuft das Skript auf einem Nicht-Debian-System oder muss es portabel sein? Verwenden Sie `useradd`.
  • Handelt es sich um eine automatisierte, nicht-interaktive Umgebung (CI/CD, Ansible, Docker)? Verwenden Sie `useradd`.
  • Benötigen Sie eine bestimmte UID/GID für NFS- oder Container-Konsistenz? Verwenden Sie `useradd -u -g`.
  • Erstellen Sie ein System-/Dienstkonto ohne Login-Shell? Verwenden Sie `useradd -r -s /usr/sbin/nologin`.
  • Sind Sie auf Debian/Ubuntu und erstellen interaktiv ein Standard-Menschenbenutzerkonto? Verwenden Sie `adduser`.
  • Möchten Sie einen bestehenden Benutzer mit einem sauberen Einzeiler zu einer Gruppe hinzufügen? Verwenden Sie `adduser username groupname`.
  • Schreiben Sie Dokumentation oder schulen Sie Junior-Mitarbeiter auf Debian? Verwenden Sie `adduser`.
  • Müssen Sie den Home-Verzeichnisort, den Ablauf oder die Shell nicht-interaktiv im großen Maßstab anpassen? Verwenden Sie `useradd` mit expliziten Flags.

Ordentliche Benutzerkonto-Hygiene ist grundlegend für die Server-Sicherheit. Ob Sie einen einzelnen VPS oder eine Flotte von Dedizierten Servern verwalten — zu verstehen, was jeder Befehl genau auf die Festplatte schreibt und was er ungesetzt lässt, verhindert die Klasse von Privilege-Escalation- und Authentifizierungsfehlern, die aus unvollständiger Kontobereitstellung entstehen.

FAQ

Erstellt useradd standardmäßig ein Home-Verzeichnis?

Das hängt von der Distribution ab. Auf Red Hat-basierten Systemen (RHEL, CentOS, Rocky Linux) bewirkt `CREATE_HOME yes` in `/etc/login.defs`, dass `useradd` das Home-Verzeichnis automatisch erstellt. Auf Debian und Ubuntu wird kein Home-Verzeichnis erstellt, es sei denn, Sie übergeben explizit das Flag `-m`.

Ist adduser auf CentOS oder Rocky Linux verfügbar?

Auf RHEL-basierten Distributionen ist `adduser` ein symbolischer Link zu `useradd`, nicht der interaktive Perl-Wrapper, der auf Debian/Ubuntu zu finden ist. Das Ausführen von `adduser username` auf CentOS verhält sich identisch zu `useradd username` — keine Eingabeaufforderungen, kein automatisches Home-Verzeichnis nach Debian-Standardeinstellungen.

Wie verwende ich adduser nicht-interaktiv in einem Skript?

Übergeben Sie `–disabled-password`, um die Passwortabfrage zu überspringen, und `–gecos ""`, um die GECOS-Feld-Eingabeaufforderungen zu überspringen: `adduser –disabled-password –gecos "" username`. Setzen Sie das Passwort anschließend mit `echo "username:password" | chpasswd` oder durch Pipen eines `openssl passwd -6`-Hashes.

Was ist der Unterschied zwischen /etc/login.defs und /etc/adduser.conf?

`/etc/login.defs` ist die systemweite Konfigurationsdatei, die von `useradd`, `userdel` und `usermod` gelesen wird — sie steuert UID/GID-Bereiche, Passwort-Alterungsstandards und das Verhalten bei der Home-Verzeichnis-Erstellung. `/etc/adduser.conf` wird ausschließlich von den Perl-Skripten `adduser` und `deluser` auf Debian-basierten Systemen gelesen und steuert übergeordnete Standardeinstellungen wie die Standard-Shell, den übergeordneten Home-Verzeichnispfad und das Skeleton-Verzeichnis.

Kann ich useradd und adduser sicher auf demselben Debian-Server mischen?

Ja. Beide schreiben letztendlich in dieselben `/etc/passwd`-, `/etc/shadow`- und `/etc/group`-Dateien. Mit beiden Befehlen erstellte Konten sind auf Systemebene nicht zu unterscheiden. Das einzige praktische Problem ist die Konsistenz: Wenn Ihr Team `adduser` interaktiv verwendet und ein Automatisierungsskript `useradd` ohne `-m` verwendet, können einige Benutzer ohne Home-Verzeichnisse enden. Standardisieren Sie auf einen Ansatz pro Umgebung und dokumentieren Sie ihn.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen