> Die vollständige Liste der Artikel steht in [llms.txt](https://docs.f3cloud.com/llms.txt). Jede Seite gibt es auch als Markdown, dazu einfach .md an die Adresse anhängen. Diese Seite als Markdown: [https://docs.f3cloud.com/de/linux/linux-permissions.md](https://docs.f3cloud.com/de/linux/linux-permissions.md).

# Dateiberechtigungen unter Linux – die Befehle chmod und chown

Zugriffsrechte für Dateien und Ordner unter Linux. So lesen Sie die Ausgabe von ls -l, was r, w, x und die Zahlen 644, 755 und 600 bedeuten, wie Sie Rechte mit dem Befehl chmod und den Besitzer mit dem Befehl chown ändern, wie Sie die richtigen Rechte für eine Website setzen und warum Sie nicht 777 setzen sollten. Geprüft unter Debian 12.

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.

```bash
ls -la
```

<figure><img src="https://docs.f3cloud.com/img/linux-perm-ls.png" alt="Ausgabe von ls -la im Ordner der Website mit Rechten, Besitzer und Gruppe jeder Datei"><figcaption><p>Die erste Spalte zeigt Typ und Rechte, die dritte und vierte Besitzer und Gruppe</p></figcaption></figure>

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, `d` ein Ordner, `l` ein 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`.

```bash
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.

```bash
# 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
```

<figure><img src="https://docs.f3cloud.com/img/linux-perm-chmod.png" alt="Befehle chmod +x, chmod 600 und chmod 750 und das Ergebnis in der Ausgabe von ls -la"><figcaption><p>backup.sh ist ausführbar geworden, .env ist für alle außer dem Besitzer gesperrt</p></figcaption></figure>

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.

```bash
# Den übrigen Benutzern das Leserecht entziehen
chmod o-r datei

# Rechte genau festlegen, wie mit der Zahl 750
chmod u=rwx,g=rx,o= uploads
```

Der 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.

```bash
chown -R www-data:www-data /var/www/site
```

<figure><img src="https://docs.f3cloud.com/img/linux-perm-chown.png" alt="Befehl chown -R www-data:www-data und der neue Besitzer der Dateien in der Ausgabe von ls -la"><figcaption><p>Alle Dateien der Website gehören jetzt dem Benutzer www-data</p></figcaption></figure>

`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.

```bash
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

<details>

<summary>Permission denied beim Starten eines Skripts</summary>

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.

</details>

<details>

<summary>Die Rechte der Datei stimmen, aber Permission denied bleibt</summary>

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.

<figure><img src="https://docs.f3cloud.com/img/linux-perm-denied.png" alt="Permission denied beim Lesen einer Datei in einem Ordner ohne x-Recht und erfolgreiches Lesen nach chmod 755"><figcaption><p>Ohne x-Recht auf den Ordner kann selbst der Eigentümer keine Datei darin öffnen</p></figcaption></figure>

</details>

<details>

<summary>chown: changing ownership: Operation not permitted</summary>

Den Besitzer einer Datei ändern kann nur root. Führen Sie den Befehl als `root` oder über `sudo` aus.

</details>

<details>

<summary>Welche Rechte neue Dateien erhalten</summary>

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.

</details>

***

## Unsere Ressourcen

**Telegram-Kanal:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Hosting-Website:** [https://f3cloud.com](https://f3cloud.com/de)
