Den Fehler Permission denied kennt jeder, der mit einem Server arbeitet. Die Website kann ein hochgeladenes Bild nicht speichern, ein Skript startet nicht, und ein Programm liest seine Konfigurationsdatei nicht. Fast immer liegt die Ursache in den Zugriffsrechten. In diesem Artikel sehen wir uns an, wie Linux entscheidet, wer eine Datei lesen, ändern und ausführen darf, lernen, die Rechte in der Ausgabe von ls -l zu lesen, sie mit den Befehlen chmod und chown zu ändern und die richtigen Rechte für eine Website zu setzen. Alle Beispiele haben wir auf einem Testserver mit Debian 12 ausgeführt.
Wie Linux die Rechte prüft
Jede Datei und jeder Ordner unter Linux hat einen Besitzer und eine Gruppe. Wenn ein Programm etwas mit einer Datei tun will, schaut das System nach, unter welchem Benutzer dieses Programm läuft, und ordnet ihn einer von drei Kategorien zu. Ist er der Besitzer der Datei, gelten die Rechte des Besitzers. Ist er nicht der Besitzer, gehört aber zur Gruppe der Datei, gelten die Rechte der Gruppe. In allen anderen Fällen gelten die Rechte für die übrigen Benutzer. Die Prüfung läuft streng in dieser Reihenfolge ab und endet bei der ersten passenden Kategorie, deshalb bekommt ein Besitzer mit eingeschränkten Rechten nicht mehr, nur weil der Gruppe mehr erlaubt ist.
Für jede Kategorie werden drei Rechte festgelegt. r erlaubt das Lesen, w das Ändern, x das Ausführen. Bei einer gewöhnlichen Datei ist die Bedeutung offensichtlich. Das Recht x brauchen Skripte und Programme, sonst lassen sie sich nicht starten, bei einer Textdatei oder einem Bild ist es dagegen überflüssig. Bei einem Ordner bedeuten dieselben Buchstaben etwas anderes, und genau hier entstehen die meisten Fehler. Das Recht r auf einen Ordner erlaubt es, die Liste der Dateinamen abzurufen, w erlaubt es, darin Dateien anzulegen und zu löschen, und x erlaubt es, den Ordner zu betreten und auf die Dateien darin zuzugreifen. Ohne x hilft nicht einmal das Recht an der Datei selbst. Angenommen, die Rechte der Datei photo.jpg erlauben dem Besitzer, sie zu lesen, aber dem Ordner uploads, in dem sie liegt, wurde das Recht x entzogen. Dann bleibt das System beim Versuch, uploads/photo.jpg zu öffnen, schon am Ordner stehen, und das Programm erhält Permission denied. Wir haben das auf dem Testserver geprüft, und sobald der Ordner sein x zurückbekam, ließ sich die Datei sofort lesen.
Rechte lassen sich bequem als Zahlen schreiben. Jedem Buchstaben entspricht eine Zahl, r ist 4, w ist 2 und x ist 1, und die Rechte einer Kategorie ergeben sich durch Addition. Lesen und Schreiben ergeben 6, Lesen und Ausführen 5, alles zusammen 7. Drei Ziffern hintereinander legen die Rechte des Besitzers, der Gruppe und der übrigen Benutzer fest. So bedeutet 644, dass der Besitzer liest und schreibt und alle anderen nur lesen, das sind die üblichen Rechte für die Dateien einer Website. 755 gibt dem Besitzer alles und den übrigen Lesen und Betreten, so richtet man gewöhnlich Ordner und Skripte ein. 600 lässt den Zugriff nur dem Besitzer und eignet sich für Dateien mit Passwörtern und Schlüsseln.
Von all diesen Regeln gibt es eine Ausnahme. Der Benutzer root durchläuft die Prüfung der Rechte nicht, er darf alle Dateien lesen und ändern. Deshalb „funktioniert“ unter root alles, während dasselbe Programm, unter einem gewöhnlichen Benutzer oder dem Webserver gestartet, auf ein Verbot stößt. Wenn etwas bei Ihnen im Terminal funktioniert, auf der Website aber nicht, prüfen Sie zuerst, unter welchem Benutzer die Website läuft und welche Rechte ihre Dateien haben.
1. Sehen Sie sich die Rechte an
Die Rechte zeigt der Befehl ls -l. Der Parameter -a fügt versteckte Dateien hinzu, deren Namen mit einem Punkt beginnen.
ls -la
Die erste Spalte zeigt Typ und Rechte, die dritte und vierte Besitzer und Gruppe
Nehmen wir die Zeile -rw-r--r-- 1 root root 12 Oct 21 11:55 index.html auseinander.
- Das erste Zeichen zeigt den Typ.
-ist eine Datei,dein Ordner,lein symbolischer Link. - Die nächsten drei Zeichen
rw-sind die Rechte des Besitzers. Er kann die Datei lesen und ändern. - Weitere drei Zeichen
r--sind die Rechte der Gruppe, sie kann nur lesen. - Die letzten drei Zeichen
r--sind die Rechte der übrigen Benutzer. - root root sind Besitzer und Gruppe der Datei.
Wenn Sie die Rechte lieber als Zahlen sehen, verwenden Sie den Befehl stat.
stat -c "%a %U:%G %n" *2. Ändern Sie die Rechte mit chmod
Rechte lassen sich mit Zahlen oder mit Buchstaben angeben. Zahlen sind praktisch, wenn Sie die gewünschten Rechte genau kennen, Buchstaben dann, wenn Sie ein einzelnes Recht hinzufügen oder entfernen möchten, ohne die übrigen anzutasten.
# Ausführen des Skripts erlauben
chmod +x backup.sh
# Datei mit Passwörtern nur für den Besitzer zugänglich
chmod 600 .env
# Ordner, den nur Besitzer und Gruppe betreten können
chmod 750 uploads
backup.sh ist ausführbar geworden, .env ist für alle außer dem Besitzer gesperrt
In der Buchstabenschreibweise steht u für den Besitzer, g für die Gruppe, o für die übrigen Benutzer und a für alle zusammen. Das Zeichen + fügt ein Recht hinzu, - entfernt es, = legt die Rechte genau fest.
# Den übrigen Benutzern das Leserecht entziehen
chmod o-r datei
# Rechte genau festlegen, wie mit der Zahl 750
chmod u=rwx,g=rx,o= uploadsDer Parameter -R ändert die Rechte eines Ordners und seines gesamten Inhalts. Gehen Sie damit vorsichtig um, denn er setzt Ordnern und Dateien die gleichen Rechte.
3. Ändern Sie den Besitzer mit chown
Der Befehl chown ändert Besitzer und Gruppe. Durch einen Doppelpunkt getrennt geben Sie zuerst den Benutzer und dann die Gruppe an, und -R wendet die Änderung auf den gesamten Inhalt des Ordners an.
chown -R www-data:www-data /var/www/site
Alle Dateien der Website gehören jetzt dem Benutzer www-data
www-data ist der Benutzer, unter dem Nginx und Apache in Debian und Ubuntu laufen. Wenn die Website selbst Dateien speichern soll, zum Beispiel Bilder in den Ordner uploads hochladen, muss dieser Ordner ihm gehören. Den Besitzer ändern kann nur root, ein gewöhnlicher Benutzer erhält den Fehler Operation not permitted.
4. Setzen Sie die richtigen Rechte für die Website
Für eine Website genügt meist eine einfache Regel. Ordner erhalten 755, Dateien 644, und Besitzer wird der Benutzer des Webservers. Für die gesamte Website erledigen Sie das mit zwei find-Befehlen, die Ordner und Dateien getrennt finden.
find /var/www/site -type d -exec chmod 755 {} +
find /var/www/site -type f -exec chmod 644 {} +Stellen Sie die Rechte der Ausnahmen wieder her
Die Befehle oben setzen allen Dateien die gleichen Rechte 644. Auf dem Testserver war danach die Datei .env mit dem Passwort wieder für alle Benutzer lesbar, und das Skript backup.sh ließ sich nicht mehr starten. Stellen Sie deshalb gleich nach der massenhaften Änderung der Rechte die Ausnahmen wieder her, zum Beispiel mit chmod 600 .env und chmod +x backup.sh.
Warum Sie nicht 777 setzen sollten
Die Rechte 777 erlauben allen Benutzern des Servers, die Datei zu lesen, zu ändern und auszuführen. Der Fehler Permission denied verschwindet danach tatsächlich, deshalb findet man diesen Rat oft im Internet. Doch zusammen mit dem Fehler verschwindet auch der Schutz. Wird auf dem Server irgendeine Website oder ein Programm gehackt, kann der Angreifer auch Ihre Dateien ändern und zum Beispiel Schadcode in die Seiten Ihrer Website einfügen. Statt 777 zu setzen, finden Sie heraus, unter welchem Benutzer das Programm läuft, und machen Sie ihn mit dem Befehl chown zum Besitzer des benötigten Ordners.
Häufige Fragen
Permission denied beim Starten eines Skripts
Die Datei hat kein Ausführungsrecht. Fügen Sie es mit dem Befehl chmod +x script.sh hinzu und starten Sie das Skript als ./script.sh. Eine andere Möglichkeit ist, das Skript über den Interpreter zu starten, zum Beispiel mit bash script.sh, dann ist das Recht x nicht erforderlich.
Die Rechte der Datei stimmen, aber Permission denied bleibt
Prüfen Sie die Rechte aller Ordner auf dem Pfad zur Datei. Jeder von ihnen braucht das Recht x für den Benutzer, unter dem das Programm läuft. Am bequemsten sehen Sie das mit dem Befehl namei -l /voller/pfad/zur/datei, er zeigt die Rechte jedes Ordners auf dem Pfad.

Ohne x-Recht auf den Ordner kann selbst der Eigentümer keine Datei darin öffnen
chown: changing ownership: Operation not permitted
Den Besitzer einer Datei ändern kann nur root. Führen Sie den Befehl als root oder über sudo aus.
Welche Rechte neue Dateien erhalten
Die Rechte neuer Dateien bestimmt die Maske umask. Auf dem Testserver ist sie 0022, deshalb erhalten neue Dateien die Rechte 644 und neue Ordner 755. Die Maske können Sie mit dem Befehl umask anzeigen.
Unsere Ressourcen
Telegram-Kanal: https://t.me/f3cloud_news
Hosting-Website: https://f3cloud.com