Linux Benutzer und Gruppen verwalten – useradd, sudo und Berechtigungen
Die Benutzerverwaltung ist ein zentrales Konzept der Linux-Sicherheit: Jeder Prozess läuft unter einem Benutzer, jede Datei gehört einem Benutzer und einer Gruppe. Wer diese Mechanismen versteht, kann Systeme granular absichern und gezielt Rechte vergeben.
Benutzer und Gruppen – die Grundlagen
UIDs und GIDs
Jeder Benutzer hat eine eindeutige numerische UID (User ID), jede Gruppe eine GID (Group ID).
UID 0 → root (Superuser)
UID 1–999 → Systembenutzer (Daemons: www-data, postgres, nginx)
UID 1000+ → Normale Benutzer
Wichtige Konfigurationsdateien
# Alle Benutzer
cat /etc/passwd
# format: name:x:uid:gid:kommentar:home:shell
# andre:x:1000:1000:Andre,,,:/home/andre:/bin/bash
# Passwörter (gehasht, nur root lesbar)
sudo cat /etc/shadow
# Alle Gruppen
cat /etc/group
# format: name:x:gid:mitglieder
# docker:x:999:andre
# sudo-Konfiguration
cat /etc/sudoers # (besser: sudo visudo)
Aktuellen Benutzer und Gruppen anzeigen
# Aktueller Benutzer
whoami
# UID, GID und Gruppen-Mitgliedschaften
id
# uid=1000(andre) gid=1000(andre) groups=1000(andre),27(sudo),999(docker)
# Alle Gruppen des aktuellen Benutzers
groups
# Alle eingeloggten Benutzer
who
w
Benutzer verwalten
Benutzer erstellen
# Neuen Benutzer erstellen (mit Home-Verzeichnis, Standard-Shell)
sudo useradd -m -s /bin/bash -c "Max Mustermann" max
# -m → Home-Verzeichnis erstellen (/home/max)
# -s → Standard-Shell
# -c → Kommentarfeld (Vollständiger Name)
# Passwort setzen
sudo passwd max
# Alles in einem (interaktiv)
sudo adduser max # Ubuntu/Debian: freundlicher Wrapper um useradd
Benutzer-Optionen
# Mit spezifischer UID
sudo useradd -m -u 1500 -s /bin/bash spezial
# Mit primärer Gruppe
sudo useradd -m -g webteam -s /bin/bash webdev
# Ohne Login (für Daemons/Services)
sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
# Home-Verzeichnis woanders
sudo useradd -m -d /opt/deploy -s /bin/bash deploy
Benutzer ändern
# Shell ändern
sudo usermod -s /bin/zsh max
# Home-Verzeichnis verschieben
sudo usermod -d /new/home -m max
# Benutzername ändern
sudo usermod -l neuer-name alter-name
# Kommentar ändern
sudo usermod -c "Neuer Kommentar" max
# Konto deaktivieren (Login verhindern)
sudo usermod -L max # Lock
sudo usermod -U max # Unlock
# Ablaufdatum setzen
sudo usermod -e 2026-12-31 max
Benutzer löschen
# Benutzer löschen (Home-Verzeichnis bleibt)
sudo userdel max
# Mit Home-Verzeichnis löschen
sudo userdel -r max
# Prüfen ob Dateien des Benutzers noch existieren
sudo find / -user max 2>/dev/null
Passwort-Verwaltung
# Eigenes Passwort ändern
passwd
# Passwort anderes Benutzers (als root)
sudo passwd max
# Passwort-Ablauf erzwingen (Benutzer muss beim nächsten Login ändern)
sudo passwd -e max
# Passwort-Politik anzeigen
sudo chage -l max
# Passwort-Ablauf in 90 Tagen
sudo chage -M 90 max
Gruppen verwalten
Gruppe erstellen und verwalten
# Neue Gruppe erstellen
sudo groupadd webteam
# Mit spezifischer GID
sudo groupadd -g 1500 webteam
# Benutzer zu Gruppe hinzufügen
sudo usermod -aG webteam max
# -a = append (ohne -a werden alle anderen Gruppen entfernt!)
# -G = Supplementary Groups
# Alternativ:
sudo gpasswd -a max webteam
# Benutzer aus Gruppe entfernen
sudo gpasswd -d max webteam
# Gruppe umbenennen
sudo groupmod -n neuer-name alter-name
# Gruppe löschen
sudo groupdel webteam
Wichtige Systemgruppen
| Gruppe | Zugang zu |
|---|---|
sudo / wheel |
sudo-Rechte |
docker |
Docker-Daemon |
www-data |
Webserver-Dateien |
adm |
Log-Dateien lesen |
audio |
Audio-Geräte |
video |
Video-Geräte |
plugdev |
USB-Geräte |
# Alle Gruppen eines Benutzers anzeigen
groups max
id max
# Alle Mitglieder einer Gruppe
getent group docker
# docker:x:999:andre,max
Wichtig: Neue Gruppen-Mitgliedschaften gelten erst in neuen Login-Sessions!
newgrp dockeroder aus-/einloggen.
sudo – Administratorrechte vergeben
sudo (superuser do) erlaubt regulären Benutzern, spezifische oder alle Root-Befehle auszuführen.
Benutzer sudo-Rechte geben
# Auf Ubuntu/Debian: sudo-Gruppe
sudo usermod -aG sudo max
# Auf Fedora/RHEL: wheel-Gruppe
sudo usermod -aG wheel max
# Sofort testen (in neuer Shell oder nach Neuanmeldung)
su - max
sudo whoami
# root
sudoers-Datei bearbeiten
Immer visudo verwenden – es prüft die Syntax vor dem Speichern:
sudo visudo
Syntax der sudoers-Datei:
# Format:
# wer wo=(als_wer) Befehle
# Alles erlauben (wie sudo-Gruppe)
max ALL=(ALL:ALL) ALL
# Nur bestimmte Befehle
max ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx
# Ohne Passwort (NOPASSWD)
deploy ALL=(ALL) NOPASSWD: /usr/bin/docker
/etc/sudoers.d/ – modulare Konfiguration
Statt die Haupt-sudoers zu bearbeiten, eigene Dateien in /etc/sudoers.d/ anlegen:
# Neue Datei für deploy-Benutzer
sudo visudo -f /etc/sudoers.d/deploy
# deploy darf Docker und systemctl ohne Passwort nutzen
deploy ALL=(ALL) NOPASSWD: /usr/bin/docker, /usr/bin/systemctl
# Berechtigungen korrekt setzen (Pflicht!)
sudo chmod 440 /etc/sudoers.d/deploy
sudo-Nutzung einschränken
# Wer hat sudo-Rechte?
grep -E '^%sudo|^%wheel' /etc/sudoers
# sudo-Historie anzeigen
sudo journalctl _COMM=sudo
# oder
sudo grep sudo /var/log/auth.log # Ubuntu/Debian
sudo grep sudo /var/log/secure # Fedora/RHEL
Dateiberechtigungen im Detail
chmod im Oktal-System
# Rechte anzeigen
ls -la datei.txt
# -rw-r--r-- 1 andre www-data 1024 Feb 18 10:00 datei.txt
# Aufbau: [Typ][User][Group][Others]
# - rw- r-- r--
| Oktal | Binär | rwx | Bedeutung |
|---|---|---|---|
| 7 | 111 | rwx | lesen, schreiben, ausführen |
| 6 | 110 | rw- | lesen, schreiben |
| 5 | 101 | r-x | lesen, ausführen |
| 4 | 100 | r-- | nur lesen |
| 0 | 000 | --- | kein Recht |
# Gängige Berechtigungen
chmod 755 script.sh # rwxr-xr-x (Skripte/Verzeichnisse)
chmod 644 datei.txt # rw-r--r-- (Dateien)
chmod 600 privat.key # rw------- (private Schlüssel)
chmod 700 ~/.ssh # rwx------ (private Verzeichnisse)
chmod 664 gemeinsam.txt # rw-rw-r-- (Teamdatei)
# Rekursiv
chmod -R 755 /var/www/html
# Symbolische Notation
chmod u+x script.sh # User: ausführbar hinzufügen
chmod g-w datei.txt # Gruppe: Schreibrecht entfernen
chmod o-rwx privat/ # Others: alle Rechte entfernen
chmod a+r public.txt # All: Leserecht für alle
chown – Eigentümer ändern
# Eigentümer ändern
sudo chown andre datei.txt
# Eigentümer und Gruppe
sudo chown andre:www-data datei.txt
# Nur Gruppe (chgrp)
sudo chgrp www-data datei.txt
# Rekursiv
sudo chown -R www-data:www-data /var/www/meine-app
umask – Standard-Berechtigungen
umask bestimmt die Standard-Berechtigungen für neu erstellte Dateien:
# Aktuellen umask anzeigen
umask
# 0022
# Berechnung:
# Dateien: 666 - 022 = 644 (rw-r--r--)
# Verzeichnisse: 777 - 022 = 755 (rwxr-xr-x)
# Restriktiver (nur Eigentümer)
umask 077
# Dateien: 666 - 077 = 600
# Verzeichnisse: 777 - 077 = 700
# umask dauerhaft setzen (in ~/.bashrc)
echo "umask 022" >> ~/.bashrc
Spezielle Berechtigungsbits: SUID, SGID, Sticky
SUID (Set User ID) – Bit 4000
Führt ein Programm mit den Rechten des Eigentümers aus, nicht des ausführenden Benutzers.
# Beispiel: passwd darf /etc/shadow ändern (obwohl root-Eigentum)
ls -la /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
# ^-- s = SUID
# SUID setzen
sudo chmod u+s datei
sudo chmod 4755 datei
# SUID-Dateien finden (potenzielle Sicherheitsrisiken)
find / -perm -4000 -type f 2>/dev/null
SGID (Set Group ID) – Bit 2000
Bei Verzeichnissen: neue Dateien erben die Gruppe des Verzeichnisses.
# Teamverzeichnis: alle neuen Dateien gehören zur Gruppe "team"
sudo mkdir /opt/teamprojekt
sudo chown root:team /opt/teamprojekt
sudo chmod 2775 /opt/teamprojekt
# drwxrwsr-x ← s = SGID
# SGID setzen
chmod g+s /opt/teamprojekt
chmod 2775 /opt/teamprojekt
Sticky Bit – Bit 1000
Bei Verzeichnissen: Dateien können nur vom Eigentümer gelöscht werden.
# Klassisches Beispiel: /tmp
ls -la /
# drwxrwxrwt ... tmp ← t = Sticky Bit
# Jeder kann schreiben, aber nur der Eigentümer kann seine Dateien löschen
chmod +t /shared/uploads
chmod 1777 /shared/uploads
ACLs: feinere Berechtigungskontrolle
Standard-Unix-Rechte kennen nur User/Group/Others. Mit ACLs (Access Control Lists) kannst du für beliebige Benutzer/Gruppen individuelle Rechte setzen.
# acl-Paket installieren
sudo apt install acl
# ACLs einer Datei anzeigen
getfacl datei.txt
# # file: datei.txt
# # owner: andre
# # group: www-data
# user::rw-
# group::r--
# other::r--
# ACL für zusätzlichen Benutzer setzen
setfacl -m u:max:rw datei.txt
# ACL für Gruppe setzen
setfacl -m g:dev:rx /var/www/app
# ACL rekursiv setzen
setfacl -R -m u:deploy:rwx /opt/meine-app
# ACL entfernen
setfacl -x u:max datei.txt
# Alle ACLs entfernen
setfacl -b datei.txt
Häufige Szenarien
Webserver-Deployment: Benutzer und Rechte einrichten
# Deploy-Benutzer erstellen (kein interaktiver Login)
sudo useradd -m -s /bin/bash -c "Deployment User" deploy
# Webroot gehört deploy und www-data
sudo chown -R deploy:www-data /var/www/meine-app
sudo chmod -R 755 /var/www/meine-app
sudo chmod -R 664 /var/www/meine-app/*.php # Schreibbar für Gruppe
# deploy darf systemctl restart (für CI/CD)
sudo visudo -f /etc/sudoers.d/deploy
# deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
Gemeinsamer Team-Ordner
# Gruppe erstellen
sudo groupadd webteam
# Benutzer hinzufügen
sudo usermod -aG webteam alice
sudo usermod -aG webteam bob
# Ordner einrichten
sudo mkdir /opt/webprojekt
sudo chown root:webteam /opt/webprojekt
sudo chmod 2775 /opt/webprojekt # SGID: neue Dateien gehören webteam
Service-Benutzer (ohne Login)
# Minimaler Benutzer für einen Daemon
sudo useradd \
--system \
--no-create-home \
--shell /usr/sbin/nologin \
--comment "Meine App Service Account" \
myapp
# Verzeichnisse zuweisen
sudo mkdir -p /opt/myapp /var/log/myapp /run/myapp
sudo chown -R myapp:myapp /opt/myapp /var/log/myapp /run/myapp
Troubleshooting
Benutzer kann sudo nicht nutzen
# In sudo-Gruppe?
groups max | grep sudo
# Nicht drin: hinzufügen und neu einloggen
sudo usermod -aG sudo max
# Danach: max muss sich neu einloggen!
Neue Gruppe-Mitgliedschaft nicht aktiv
# Ohne Logout: für aktuelle Session aktivieren
newgrp docker
# Oder: komplett neu einloggen
Datei gehört root, kann nicht gelöscht werden
# Als root oder mit sudo löschen
sudo rm datei.txt
# Oder Eigentümer ändern
sudo chown dein-nutzer datei.txt
rm datei.txt
Fazit
Linux-Benutzerverwaltung folgt dem Least-Privilege-Prinzip: Jeder Benutzer und Prozess bekommt nur die Rechte, die er wirklich braucht.
Kurzreferenz:
useradd -m -s /bin/bash user # Benutzer erstellen
passwd user # Passwort setzen
usermod -aG gruppe user # Zu Gruppe hinzufügen
sudo visudo # sudo-Rechte vergeben
chown user:gruppe datei # Eigentümer setzen
chmod 755 datei # Rechte setzen