Zum Inhalt springen
Serverküche
Suche

Die Suche wird geladen … (nur in der veröffentlichten Seite verfügbar).

Grundlagen Schwierigkeit: Einsteiger

Linux-Benutzer, Gruppen & Dateirechte verstehen

Wer darf was auf deinem Server? Dieser Grundlagen-Guide erklärt Benutzer, Gruppen und Dateirechte an echten Befehlen – die Basis für jedes sichere Setup.

· 7 Min. Lesezeit ·Dauer: ca. 25 Minuten
Inhaltsverzeichnis

Fast jede „Permission denied“-Meldung, jeder falsch startende Container und jede unsichere Konfiguration hat dieselbe Wurzel: ein Missverständnis darüber, wer auf einem Linux-Server was darf. Dieser Guide räumt das ein für alle Mal auf – mit echten Befehlen statt Theorie.

Was bauen wir?

Diesmal keinen Dienst, sondern das Fundament, auf dem alle anderen Rezepte stehen: das Rechtemodell von Linux. Am Ende verstehst du, was ein Benutzer und eine Gruppe sind, wie du rwx-Rechte und die Zahlen wie 755 liest und setzt, warum www-data und docker als Gruppen ständig auftauchen – und wann sudo das richtige Werkzeug ist und wann nicht. Alle Beispiele sind auf Debian 13 ausgeführt und funktionieren auf jedem Linux-Server.

Voraussetzungen

  • Ein Linux-Server mit Root- oder sudo-Zugang (dein netcup-VPS reicht)
  • Vertrautheit mit den wichtigsten Terminal-Befehlen (ls, cd, cat)
  • Kein zusätzliches Paket nötig – alle Werkzeuge sind Teil von Debian
🍳 Empfehlung Anzeige

VPS 1000 G12

4 vCore · 8 GB RAM · 256 GB NVMe

ab 10,36 €/Monat

Zum Üben reicht jeder Server – die Befehle sind auf jedem Linux gleich.

Zu netcup →

💶 5 € Gutschein für netcup-Neukunden:36nc17844976032 (nur Neukunden, keine Domains)

Schritt für Schritt

Schritt 1: Wer bin ich? Benutzer und ihre IDs

Jeder Prozess und jede Datei gehört einem Benutzer. Wer du gerade bist, zeigt id:

Terminal
id
Ausgabe
uid=0(root) gid=0(root) groups=0(root)

Drei Dinge stehen hier: die UID (User-ID, 0 = root, der Administrator), die primäre GID (Group-ID) und alle Gruppen, in denen du Mitglied bist. Menschliche Benutzer bekommen auf Debian UIDs ab 1000, darunter liegen Systembenutzer für Dienste.

Benutzer sind in /etc/passwd hinterlegt – eine schlichte Textdatei:

Terminal
grep -E '^(root|www-data|nobody):' /etc/passwd
Ausgabe
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin

Die Felder sind Name, Passwort-Platzhalter (x = das echte Hash steht in /etc/shadow), UID, GID, Kommentar, Home-Verzeichnis und Login-Shell. Wichtig: www-data – der Benutzer, unter dem Webserver laufen – hat als Shell /usr/sbin/nologin. Solche Dienstbenutzer können sich absichtlich nicht einloggen; sie existieren nur, damit ein Prozess mit minimalen Rechten läuft statt als root.

Schritt 2: Einen Benutzer anlegen

Für alles außer der Erstkonfiguration solltest du nicht als root arbeiten. Lege einen normalen Benutzer an – hier koch:

Terminal
useradd -m -s /bin/bash koch

-m erstellt das Home-Verzeichnis /home/koch, -s /bin/bash setzt die Login-Shell. Ein Passwort vergibst du mit passwd koch. Prüfe das Ergebnis:

Terminal
id koch
Ausgabe
uid=1000(koch) gid=1000(koch) groups=1000(koch)

useradd hat automatisch eine gleichnamige primäre Gruppe koch (GID 1000) angelegt. Das ist der Debian-Standard: Jeder Benutzer bekommt seine eigene Gruppe – so ist eine neue Datei nie versehentlich für andere lesbar, nur weil sie eine gemeinsame Gruppe teilen.

Schritt 3: Rechte lesen – das rwx-Modell

Jede Datei kennt drei Rechte-Sätze: für den Besitzer, für die Gruppe und für alle anderen. Sieh sie dir mit ls -l an:

Terminal
ls -l
Ausgabe
-rw-r--r-- 1 root root  0 Jul 24 19:02 datei.txt
drwxr-xr-x 2 root root 40 Jul 24 19:02 ordner

Die erste Spalte ist der Schlüssel. Zerlege drwxr-xr-x:

  • Zeichen 1 – der Typ: - Datei, d Verzeichnis, l symbolischer Link.
  • Zeichen 2–4 (rwx) – Rechte des Besitzers: lesen (r), schreiben (w), ausführen (x).
  • Zeichen 5–7 (r-x) – Rechte der Gruppe.
  • Zeichen 8–10 (r-x) – Rechte aller anderen.

Danach folgen Besitzer (root) und Gruppe (root). Bei datei.txt darf also nur root schreiben, alle dürfen lesen.

x bedeutet bei Verzeichnissen etwas anderes

Bei einer Datei heißt x „ausführbar“ (ein Programm oder Skript). Bei einem Verzeichnis heißt x „hineinwechseln dürfen“ (cd). Ein Ordner ohne x ist unbetretbar, selbst wenn du r hast – ein häufiger Stolperstein.

Schritt 4: Rechte als Zahl – warum 755 und 644

Dieselben Rechte schreibt man kompakt als Oktalzahl. Jede Ziffer steht für einen der drei Sätze, und sie ist die Summe aus: lesen = 4, schreiben = 2, ausführen = 1.

  • 7 = 4+2+1 = rwx (alles)
  • 6 = 4+2 = rw- (lesen + schreiben)
  • 5 = 4+1 = r-x (lesen + ausführen)
  • 4 = r-- (nur lesen)

Damit ergeben sich die zwei häufigsten Muster von selbst: 644 (rw-r--r--) für normale Dateien und 755 (rwxr-xr-x) für Verzeichnisse und Programme. stat zeigt beide Schreibweisen nebeneinander:

Terminal
stat -c '%A %a %U %G %n' datei.txt ordner
Ausgabe
-rw-r--r-- 644 root root datei.txt
drwxr-xr-x 755 root root ordner

Schritt 5: Rechte setzen mit chmod

chmod ändert die Rechte – entweder numerisch oder symbolisch. Numerisch setzt du alle drei Sätze auf einmal. So machst du eine Datei nur für Besitzer und Gruppe lesbar:

Terminal
chmod 640 datei.txt
stat -c '%A %a %n' datei.txt
Ausgabe
-rw-r----- 640 datei.txt

Symbolisch änderst du gezielt einzelne Bits: u (user/Besitzer), g (group), o (others), a (all), mit +/-/=:

Terminal
chmod u+x,g-r datei.txt
stat -c '%A %a %n' datei.txt
Ausgabe
-rwx------ 700 datei.txt

Niemals chmod 777

chmod 777 gibt jedem auf dem System volle Schreibrechte – ein klassischer Anfängerfehler, um schnell ein Rechteproblem „wegzumachen“. Es ist fast immer die falsche Lösung und ein echtes Sicherheitsloch. Richtig ist, den korrekten Besitzer zu setzen (Schritt 6), nicht die Rechte aufzuweichen.

Schritt 6: Besitz übertragen mit chown

Wem eine Datei gehört, änderst du mit chown – im Format benutzer:gruppe:

Terminal
chown koch:koch datei.txt
stat -c '%A %a %U %G %n' datei.txt
Ausgabe
-rwx------ 700 koch koch datei.txt

Für einen ganzen Verzeichnisbaum hängst du -R (rekursiv) an – genau das brauchst du ständig bei Docker-Volumes, wenn ein Container als bestimmter Benutzer schreiben muss:

Terminal
chown -R koch:koch /opt/meineapp/data

Was passiert, wenn die Rechte fehlen? Als koch eine nur-für-root lesbare Datei öffnen:

Terminal
su - koch -c "cat /tmp/secret.txt"
Ausgabe
cat: /tmp/secret.txt: Permission denied

Genau diese Meldung ist der häufigste Rechte-Fehler überhaupt – jetzt weißt du, dass sie nichts Kaputtes bedeutet, sondern das Modell wie vorgesehen greift.

Schritt 7: Gruppen – gemeinsamer Zugriff

Gruppen bündeln Benutzer, die auf dieselben Dateien zugreifen sollen. Ein Benutzer wird mit usermod -aG (append to Group) einer weiteren Gruppe hinzugefügt:

Terminal
usermod -aG docker koch
id koch
Ausgabe
uid=1000(koch) gid=1000(koch) groups=1000(koch),990(docker)

Das -a ist entscheidend: Ohne -a ersetzt usermod -G alle Nebengruppen, statt eine hinzuzufügen – so fliegt man versehentlich aus sudo oder docker. Zwei Gruppen begegnen dir ständig:

  • sudo – wer hier Mitglied ist, darf mit vorangestelltem sudo Befehle als root ausführen.
  • docker – wer hier Mitglied ist, darf Docker steuern. Das ist praktisch, aber sicherheitsrelevant: Zugriff auf den Docker-Socket ist faktisch Root-Zugriff (siehe Warnung unten).

Neue Gruppe erst nach neuem Login aktiv

Eine frisch zugewiesene Gruppe gilt erst in einer neuen Sitzung. Nach usermod -aG musst du dich aus- und wieder einloggen (oder newgrp docker starten), sonst zeigt id die Gruppe zwar an, docker ps scheitert aber weiter mit „permission denied“.

Schritt 8: sudo statt Dauer-Root

Als root eingeloggt zu bleiben ist gefährlich: Ein Tippfehler löscht das halbe System, und jeder kompromittierte Prozess läuft mit vollen Rechten. Der sichere Weg ist ein normaler Benutzer in der Gruppe sudo, der einzelne Befehle bei Bedarf erhöht:

Terminal
usermod -aG sudo koch

Danach führt koch administrative Befehle mit vorangestelltem sudo aus (sudo apt update) und wird nach seinem eigenen Passwort gefragt. Das ist nachvollziehbar (jede Aktion steht im Log unter /var/log/auth.log), reversibel und deutlich sicherer als ein Dauer-Root-Login. Genau darauf baut das Tutorial SSH absichern auf, wenn es den direkten Root-Login abschaltet.

Wenn es nicht funktioniert

Permission denied, obwohl die Rechte stimmen. Prüfe die Rechte des übergeordneten Verzeichnisses: Fehlt dort das x-Recht, kommst du gar nicht erst an die Datei heran, egal wie ihre eigenen Rechte aussehen. ls -ld /pfad/zum/ordner zeigt es.

docker ps sagt weiter „permission denied“ nach usermod -aG docker. Die neue Gruppe ist in der aktuellen Sitzung noch nicht aktiv – aus- und wieder einloggen (siehe Warn-Box in Schritt 7). id in der neuen Sitzung muss docker anzeigen.

Neue Dateien haben unerwartete Rechte. Das bestimmt die umask – sie zieht Rechte von den Vorgaben ab. Der Debian-Standard umask 0022 führt zu 644 für Dateien und 755 für Verzeichnisse. Prüfen mit dem Befehl umask (ohne Argument).

Ein Container schreibt nicht ins Volume. Der Prozess im Container läuft unter einer bestimmten UID (oft nicht root). Setze den Besitzer des Host-Verzeichnisses passend: chown -R 1000:1000 ./data – die richtige UID nennt die Doku des Images (Umgebungsvariablen wie PUID/PGID).

usermod hat den Benutzer aus Gruppen geworfen. Du hast -G ohne -a benutzt. -G ersetzt die Nebengruppen. Immer usermod -aG verwenden. Reparatur: die fehlenden Gruppen mit usermod -aG gruppe1,gruppe2 benutzer wieder ergänzen.

Wartung & Backups

  • Rechte sind selten Wartungsaufgabe, aber ein Audit lohnt sich. Suche gelegentlich nach weltweit schreibbaren Dateien – ein häufiges Sicherheitsleck: find /opt -perm -0002 -type f. Treffer solltest du mit chmod o-w entschärfen.
  • Der Docker-Socket ist Root-Äquivalent. ls -l /var/run/docker.sock zeigt Besitz root:docker – wer in der Gruppe docker ist, kann Container mit gemountetem Host-Dateisystem starten und damit alles lesen und schreiben. Nimm nur vertrauenswürdige Konten in diese Gruppe.
  • Backups brauchen die Rechte mit. Wenn du Daten sicherst, achte darauf, dass Besitz und Rechte erhalten bleiben – restic und rsync -a tun das automatisch. Sonst gehört nach einem Restore plötzlich alles root, und Dienste starten nicht mehr. Wie das sauber läuft, zeigt Backups mit Restic.

Feedback per E-Mail: feedback@serverkueche.de

Das könnte dir auch schmecken