Die Benutzer- und Gruppenverwaltung ist fundamental für Linux-Server. Sie kontrolliert Zugriff, Berechtigungen und Sicherheit auf dem System.

Benutzer

Benutzer auflisten

# Alle Benutzer
cat /etc/passwd

# Nur Benutzernamen
cut -d: -f1 /etc/passwd

# Angemeldete Benutzer
who
w
users

# Aktuelle Benutzer-Info
id
id username
whoami

Benutzer erstellen

# Mit Standardeinstellungen
useradd username

# Mit Home-Verzeichnis
useradd -m username

# Mit Shell
useradd -m -s /bin/bash username

# Mit Gruppe
useradd -m -g users -G sudo,docker username

# Mit Kommentar
useradd -m -c "Max Mustermann" mmustermann

# Vollständiges Beispiel
useradd -m \
    -s /bin/bash \
    -g users \
    -G sudo,www-data \
    -c "Webentwickler" \
    -e 2025-12-31 \
    webdev

Passwort setzen

# Interaktiv
passwd username

# Direkt setzen (unsicher, nur für Scripts)
echo "username:passwort" | chpasswd

# Passwort-Hash generieren
openssl passwd -6 "passwort"

Benutzer ändern

# Shell ändern
usermod -s /bin/zsh username

# Gruppe hinzufügen
usermod -aG docker username
usermod -aG sudo username

# Home-Verzeichnis ändern
usermod -d /new/home -m username

# Benutzernamen ändern
usermod -l newname oldname

# Benutzer sperren
usermod -L username

# Benutzer entsperren
usermod -U username

# Ablaufdatum setzen
usermod -e 2025-12-31 username

Benutzer löschen

# Ohne Home-Verzeichnis
userdel username

# Mit Home-Verzeichnis
userdel -r username

# Prozesse beenden und löschen
pkill -u username
userdel -r username

Gruppen

Gruppen auflisten

# Alle Gruppen
cat /etc/group

# Gruppen eines Benutzers
groups username
id -Gn username

# Mitglieder einer Gruppe
getent group groupname

Gruppe erstellen

# Neue Gruppe
groupadd developers

# Mit GID
groupadd -g 2000 developers

# System-Gruppe
groupadd -r myservice

Gruppe ändern

# Umbenennen
groupmod -n newname oldname

# GID ändern
groupmod -g 3000 groupname

Gruppe löschen

groupdel groupname

Benutzer zu Gruppen

# Zu Gruppe hinzufügen (WICHTIG: -a = append)
usermod -aG groupname username

# Ohne -a werden alle anderen Gruppen entfernt!
# FALSCH: usermod -G docker username

# Primäre Gruppe ändern
usermod -g newgroup username

# Mehrere Gruppen
usermod -aG group1,group2,group3 username

System-Dateien

/etc/passwd

username:x:1000:1000:Full Name:/home/username:/bin/bash
   │     │  │    │       │           │           │
   │     │  │    │       │           │           └─ Shell
   │     │  │    │       │           └─ Home-Verzeichnis
   │     │  │    │       └─ Kommentar/Name
   │     │  │    └─ Primäre GID
   │     │  └─ UID
   │     └─ Passwort (x = in /etc/shadow)
   └─ Benutzername

/etc/shadow

username:$6$hash...:19000:0:99999:7:::
    │        │        │   │   │   │
    │        │        │   │   │   └─ Warnzeit vor Ablauf
    │        │        │   │   └─ Max. Passwort-Alter
    │        │        │   └─ Min. Passwort-Alter
    │        │        └─ Letzte Änderung (Tage seit 1970)
    │        └─ Passwort-Hash
    └─ Benutzername

/etc/group

groupname:x:1000:user1,user2
    │     │  │      │
    │     │  │      └─ Mitglieder
    │     │  └─ GID
    │     └─ Passwort (x oder leer)
    └─ Gruppenname

Sudo

Sudo-Berechtigung

# Zur sudo-Gruppe hinzufügen
usermod -aG sudo username      # Debian/Ubuntu
usermod -aG wheel username     # CentOS/RHEL

/etc/sudoers

# Editieren (nie direkt!)
visudo

# Syntax
# user HOST=(RUNAS) COMMANDS
username ALL=(ALL:ALL) ALL

# Ohne Passwort
username ALL=(ALL) NOPASSWD: ALL

# Bestimmte Befehle
username ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl

# Gruppe
%developers ALL=(ALL) /usr/bin/docker

sudoers.d

# Datei in /etc/sudoers.d/
echo "username ALL=(ALL) NOPASSWD: /usr/bin/docker" > /etc/sudoers.d/username
chmod 440 /etc/sudoers.d/username

Praktische Szenarien

Webentwickler-Benutzer

#!/bin/bash
# Webentwickler einrichten

USERNAME="webdev"

# Benutzer erstellen
useradd -m -s /bin/bash -c "Web Developer" $USERNAME

# Passwort setzen
echo "$USERNAME:$(openssl rand -base64 12)" | chpasswd

# Gruppen
usermod -aG www-data,docker $USERNAME

# SSH-Key
mkdir -p /home/$USERNAME/.ssh
chmod 700 /home/$USERNAME/.ssh
# Public Key einfügen
chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh

Service-Account

# Benutzer ohne Login
useradd -r -s /usr/sbin/nologin -d /var/lib/myapp myapp

# Oder
adduser --system --group --no-create-home myapp

SFTP-only Benutzer

# Benutzer erstellen
useradd -m -s /usr/sbin/nologin -g sftp sftpuser
passwd sftpuser

# /etc/ssh/sshd_config
Match Group sftp
    ChrootDirectory /home/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

# Chroot-Verzeichnis vorbereiten
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftp /home/sftpuser/upload

systemctl restart sshd

Shared Directory

# Gruppe für geteilte Dateien
groupadd shared

# Benutzer hinzufügen
usermod -aG shared user1
usermod -aG shared user2

# Verzeichnis
mkdir /srv/shared
chown root:shared /srv/shared
chmod 2775 /srv/shared  # SGID

Passwort-Richtlinien

PAM-Konfiguration

# /etc/security/pwquality.conf
minlen = 12
minclass = 3
maxrepeat = 3
reject_username = yes

Passwort-Ablauf

# Ablauf setzen
chage -M 90 username     # Max 90 Tage
chage -m 1 username      # Min 1 Tag
chage -W 14 username     # Warnung 14 Tage vorher

# Status anzeigen
chage -l username

# Sofortiger Ablauf (Passwort-Änderung erzwingen)
chage -d 0 username

Sicherheit

Unbenutzte Accounts deaktivieren

# Sperren
usermod -L username

# Shell auf nologin
usermod -s /usr/sbin/nologin username

# Ablaufdatum in Vergangenheit
usermod -e 1 username

Root-Login

# Root-Passwort sperren
passwd -l root

# In /etc/ssh/sshd_config
PermitRootLogin no

Benutzer-Audit

# Letzte Logins
last
lastlog

# Fehlgeschlagene Logins
lastb

# Login-History eines Users
last username

Zusammenfassung

| Befehl | Funktion | |--------|----------| | useradd | Benutzer erstellen | | usermod | Benutzer ändern | | userdel | Benutzer löschen | | passwd | Passwort setzen | | groupadd | Gruppe erstellen | | groupmod | Gruppe ändern | | groupdel | Gruppe löschen | | id | Benutzer-Info | | groups | Gruppen anzeigen |

| Datei | Inhalt | |-------|--------| | /etc/passwd | Benutzer-Daten | | /etc/shadow | Passwort-Hashes | | /etc/group | Gruppen | | /etc/sudoers | Sudo-Regeln |

| Option | useradd | usermod | |--------|---------|---------| | -m | Home erstellen | Home verschieben | | -s | Shell | Shell ändern | | -g | Primäre Gruppe | Primäre Gruppe | | -G | Zusätzliche Gruppen | Gruppen ersetzen | | -aG | - | Gruppe hinzufügen |

Fazit

Die Benutzer- und Gruppenverwaltung ist zentral für Linux-Sicherheit. Service-Accounts sollten ohne Login-Shell erstellt werden. sudo ermöglicht kontrollierte Privilegien-Eskalation. Passwort-Richtlinien erhöhen die Sicherheit. Regelmäßige Audits helfen, ungenutzte Accounts zu identifizieren. Die richtige Gruppenstruktur vereinfacht die Berechtigungsverwaltung.