Linux-Dateirechte: chmod, chown und sudo mit Beispielen
Linux-Dateirechte bestehen aus drei Sätzen rwx — für den Besitzer, die Gruppe und alle anderen; geändert werden sie mit chmod in symbolischer Form (chmod u+x) oder numerischer Form (chmod 755, wobei r=4, w=2, x=1 ist). Den Besitzer ändert chown, Aktionen als Administrator laufen über sudo; der Fehler Permission denied bedeutet fast immer, dass Ihrem Benutzer das nötige Recht auf die Datei oder auf eines der Verzeichnisse im Pfad fehlt.
Linux-Dateirechte beantworten die Frage „wer darf was mit einer Datei tun“. Jede Datei hat einen Besitzer, eine Gruppe und drei Rechtesätze: für den Besitzer, für die Gruppe und für alle anderen. Geändert werden sie mit chmod, den Besitzer ändert chown, und Aktionen als Administrator führen Sie mit sudo aus. Wir zeigen, wie Sie Rechte lesen, ändern und den Fehler Permission denied beheben.
So sehen Sie die Rechte einer Datei
Die Rechte stehen in der Ausgabe von ls -l:
$ ls -l
-rw-r--r-- 1 alice developers 1204 Oct 10 14:02 notizen.txt
-rwxr-xr-x 1 alice developers 356 Oct 10 14:05 deploy.sh
drwxr-x--- 2 alice developers 4096 Oct 10 13:50 geheim
Die ersten zehn Zeichen werden so gelesen:
- Das erste Zeichen ist der Typ:
-eine gewöhnliche Datei,dein Verzeichnis,lein symbolischer Link. - Zeichen 2–4 sind die Rechte des Besitzers (user).
- Zeichen 5–7 sind die Rechte der Gruppe (group).
- Zeichen 8–10 sind die Rechte aller anderen (others).
Danach folgen die Anzahl der harten Links, der Besitzer (alice), die Gruppe (developers), Größe, Datum und Name. Für eine einzelne Datei ist stat praktisch:
$ stat -c '%A %a %U:%G %n' deploy.sh
-rwxr-xr-x 755 alice:developers deploy.sh
Was r, w und x bedeuten
Die Bedeutung der Rechte unterscheidet sich für Dateien und Verzeichnisse — das ist die häufigste Quelle für Verwirrung.
| Recht | Bei einer Datei | Bei einem Verzeichnis |
|---|---|---|
r (read) | Inhalt lesen | die Dateiliste sehen (ls) |
w (write) | Inhalt ändern | Dateien darin anlegen, löschen und umbenennen |
x (execute) | als Programm ausführen | das Verzeichnis betreten (cd) und Dateien über den Pfad ansprechen |
Beachten Sie: Eine Datei dürfen Sie löschen, wenn Sie w und x auf dem Verzeichnis haben — auch dann, wenn Sie die Datei selbst nicht beschreiben dürfen. Ohne x auf dem Verzeichnis können Sie eine Datei darin nicht öffnen, selbst wenn die Rechte der Datei das Lesen erlauben.
Das System prüft die Rechte in einer festen Reihenfolge: Sind Sie der Besitzer, gelten die Rechte des Besitzers; sonst, wenn Sie in der Gruppe der Datei sind, die Gruppenrechte; sonst die Rechte für alle anderen. Der Benutzer root umgeht die Prüfung von Lese- und Schreibrechten.
Zahlenform der Rechte: 755, 644, 600
Jedes Recht hat ein Gewicht: r = 4, w = 2, x = 1. Die Summe der Gewichte ergibt für jeden der drei Sätze eine Ziffer von 0 bis 7.
| Ziffer | Rechte | Berechnung |
|---|---|---|
| 7 | rwx | 4+2+1 |
| 6 | rw- | 4+2 |
| 5 | r-x | 4+1 |
| 4 | r-- | 4 |
| 0 | --- | 0 |
Typische Kombinationen, die man auswendig kennen sollte:
| Modus | Form | Wo verwendet |
|---|---|---|
644 | rw-r--r-- | gewöhnliche Dateien, Konfigurationen, HTML |
755 | rwxr-xr-x | Verzeichnisse, Skripte und Programme |
600 | rw------- | private SSH-Schlüssel, Dateien mit Passwörtern |
700 | rwx------ | das Verzeichnis ~/.ssh, private Verzeichnisse |
640 | rw-r----- | Konfigurationen, die die Gruppe des Dienstes lesen muss |
777 | rwxrwxrwx | alles für alle — fast nie nötig |
Der Befehl chmod: Rechte ändern
Zahlenmodus
Die Zahlenform legt die Rechte vollständig fest:
chmod 644 index.html
chmod 755 deploy.sh
chmod 600 ~/.ssh/id_ed25519
Symbolischer Modus
Die symbolische Form ändert Rechte gezielt, ohne die übrigen anzutasten. Wem: u Besitzer, g Gruppe, o andere, a alle. Aktion: + hinzufügen, - entfernen, = genau setzen.
chmod +x deploy.sh # Start erlauben
chmod u+x,g-w datei # Besitzer darf starten, Gruppe darf nicht schreiben
chmod o-rwx geheim/ # anderen gar nichts
chmod g=rx app/ # Gruppe genau Lesen und Betreten
Rekursiv: Dateien und Verzeichnisse getrennt
Mit -R wenden Sie Rechte auf den ganzen Baum an. Aber chmod -R 755 macht alle Dateien ausführbar, was meist nicht gewollt ist. Besser trennen Sie Dateien und Verzeichnisse mit find:
find /srv/site -type d -exec chmod 755 {} +
find /srv/site -type f -exec chmod 644 {} +
Es gibt auch eine Kurzform: Das große X fügt das Ausführungsrecht nur Verzeichnissen und Dateien hinzu, die es schon haben.
chmod -R u=rwX,go=rX /srv/site
Der Befehl chown: Besitzer und Gruppe ändern
Den Besitzer einer Datei kann nur root ändern, deshalb wird chown fast immer mit sudo ausgeführt.
sudo chown alice bericht.txt # Besitzer
sudo chown alice:developers bericht.txt # Besitzer und Gruppe
sudo chown :www-data index.html # nur die Gruppe
sudo chown -R www-data:www-data /var/www/seite
Nur die Gruppe ändert der Befehl chgrp: sudo chgrp developers bericht.txt. Ihre Gruppen zeigen id oder groups.
$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),1001(developers)
Einen Benutzer fügen Sie mit sudo usermod -aG developers bob einer Gruppe hinzu. Die Option -a ist zwingend: Ohne sie wird der Benutzer aus allen anderen Zusatzgruppen entfernt. Eine neue Gruppe wirkt nach der nächsten Anmeldung.
sudo: Aktionen als Administrator
sudo führt einen Befehl mit root-Rechten (oder den Rechten eines anderen Benutzers) aus und fragt nach Ihrem eigenen Passwort, nicht nach dem Passwort von root. Jeder Aufruf wird protokolliert, sodass nachvollziehbar ist, wer was getan hat.
sudo apt update
sudo systemctl restart nginx
sudo -u postgres psql # als Benutzer postgres
sudo -i # interaktive root-Shell
sudo -l # was ist mir erlaubt
Wer was darf, steht in /etc/sudoers und in den Dateien des Verzeichnisses /etc/sudoers.d/. Bearbeiten Sie diese Dateien nur mit sudo visudo: Es prüft die Syntax, und ein Fehler in der Datei sperrt Sie nicht von sudo aus. In Ubuntu erhalten Administratorrechte Mitglieder der Gruppe sudo, in RHEL-artigen Systemen der Gruppe wheel.
# /etc/sudoers.d/deploy — Benutzer deploy darf nur nginx neu starten
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
Warum sudo echo > datei nicht funktioniert
Eine häufige Falle:
$ sudo echo "127.0.0.1 test.local" >> /etc/hosts
bash: /etc/hosts: Permission denied
Die Umleitung >> führt Ihre Shell aus, nicht sudo, also wird die Datei ohne root-Rechte geöffnet. Richtig geht es über tee:
echo "127.0.0.1 test.local" | sudo tee -a /etc/hosts
Permission denied: Ursachen und Lösungen
Der Fehler Permission denied bedeutet, dass der Kernel Ihrem Prozess die Operation verweigert hat. Die Fehlersuche folgt immer demselben Ablauf: Wer bin ich (id), wer ist Besitzer und welche Rechte gelten (ls -l), welche Rechte hat jedes Verzeichnis im Pfad (namei -l).
$ namei -l /srv/app/config/app.env
f: /srv/app/config/app.env
drwxr-xr-x root root /
drwxr-xr-x root root srv
drwxr-x--- deploy deploy app
drwxr-xr-x deploy deploy config
-rw-r----- deploy deploy app.env
Hier sieht man, dass das Verzeichnis app für andere gesperrt ist — ein Benutzer, der nicht in der Gruppe deploy ist, kommt nicht weiter, wie auch immer die Rechte der Datei selbst aussehen.
Das Skript startet nicht
$ ./deploy.sh
bash: ./deploy.sh: Permission denied
Der Datei fehlt das Ausführungsrecht. Die Lösung ist chmod +x deploy.sh oder der Start über den Interpreter: bash deploy.sh. Ist die Partition mit der Option noexec eingehängt (das passiert bei /tmp), lässt sich die Datei nicht direkt starten, dann hilft nur die zweite Variante.
In ein Systemverzeichnis darf nicht geschrieben werden
Dateien in /etc, /usr und /var/www gehören root oder Dienstbenutzern. Verwenden Sie sudo für einmalige Änderungen; für dauerhafte Arbeit geben Sie Rechte einer Gruppe, nicht allen.
Der Webserver liefert 403
Nginx oder Apache laufen als Benutzer www-data (in Debian und Ubuntu). Er braucht Leserechte auf die Dateien und x auf alle Verzeichnisse des Pfads. Abhilfe: sudo chown -R www-data:www-data /var/www/seite oder Rechte 755 auf Verzeichnisse und 644 auf Dateien.
SSH akzeptiert den Schlüssel nicht
SSH verweigert Schlüssel mit zu offenen Rechten. Der private Schlüssel braucht 600, das Verzeichnis ~/.ssh — 700, und die Datei authorized_keys auf dem Server — 600.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
Kein Zugriff auf Docker
Die Meldung permission denied while trying to connect to the Docker daemon socket bedeutet, dass Sie nicht in der Gruppe docker sind. Führen Sie sudo usermod -aG docker $USER aus und melden Sie sich neu an. Beachten Sie: Die Mitgliedschaft in dieser Gruppe entspricht faktisch root-Rechten.
Warum chmod 777 eine schlechte Idee ist
Der Rat „mach einfach chmod 777“ beseitigt den Fehler, öffnet aber die Datei für Schreibzugriffe jedes Benutzers und jedes Prozesses im System. Wird eine Webanwendung kompromittiert, kann ein Angreifer solche Dateien austauschen. Der richtige Weg: herausfinden, welcher Benutzer Zugriff braucht, und genau diesem das Recht geben — über den Besitzer oder die Gruppe.
umask: Standardrechte
Neue Dateien erhalten Rechte unter Berücksichtigung der Maske umask. Bei dem üblichen Wert 022 werden Dateien mit 644 und Verzeichnisse mit 755 angelegt.
$ umask
0022
Fazit
Linux-Dateirechte sind drei Sätze rwx für Besitzer, Gruppe und alle anderen. chmod ändert die Rechte in Zahlen- (755, 644, 600) oder symbolischer Form, chown den Besitzer, und mit sudo führen Sie einen einzelnen Befehl als root aus. Bei Permission denied prüfen Sie den Benutzer, die Rechte der Datei und jedes Verzeichnisses im Pfad — und lösen das Problem nicht mit 777. Benutzer, Gruppen, Rechte und sudo behandelt unser Linux-Kurs praxisnah Schritt für Schritt.
Häufige Fragen
Was bedeutet chmod 755?
Der Besitzer darf lesen, schreiben und ausführen (7); Gruppe und andere dürfen lesen und ausführen (5). Das ist der Standardsatz für Verzeichnisse und Skripte.
Was ist der Unterschied zwischen chmod und chown?
chmod ändert die Rechte (was mit der Datei getan werden darf), chown ändert den Besitzer und die Gruppe (wem diese Rechte gehören).
Wie gebe ich einem Benutzer sudo-Rechte?
In Ubuntu und Debian fügen Sie ihn mit sudo usermod -aG sudo name der Gruppe sudo hinzu, in RHEL-artigen Systemen der Gruppe wheel. Die Änderung wirkt nach der nächsten Anmeldung.
Was bedeuten die Rechte 4755 und das SUID-Bit?
Die führende Ziffer 4 aktiviert SUID: Das Programm läuft mit den Rechten des Dateibesitzers und nicht mit denen des Startenden. So funktioniert zum Beispiel passwd; in der Ausgabe von ls steht beim Besitzer-x dann ein s.
Warum darf root eine Datei mit den Rechten 000 lesen?
Der Kernel wendet die gewöhnlichen Lese- und Schreibprüfungen auf root nicht an. Eingeschränkt werden kann root nur durch andere Mechanismen, etwa SELinux, AppArmor oder das Attribut chattr +i.
Dieses Thema wird im Kurs „Linux: с нуля до уверенного администрирования“ ausführlich mit Praxis behandelt.
Zum Kurs