Skip to content
Zurück zum Blog
Sicherheit

Linux-Dateiberechtigungen erklärt: chmod 755, 644 & 777

Linux-Dateiberechtigungen verstehen: wie chmod, Oktal (755, 644, 777) und rwx funktionieren, plus setuid und umask – mit kostenlosem chmod-Rechner.

11 Min. Lesezeit

Linux-Dateiberechtigungen erklärt: chmod 755, 644 & 777

Linux-Dateiberechtigungen entscheiden, wer jede Datei und jeden Ordner im System lesen, schreiben oder ausführen darf. Jedes Objekt kennt drei Benutzerklassen (den Eigentümer, eine Gruppe und alle anderen), und jede Klasse erhält drei Berechtigungsbits: Lesen (r), Schreiben (w) und Ausführen (x). Das sind neun Bits pro Datei. chmod setzt sie, und die Kurzschreibweise, die Ihnen überall begegnet, ist Oktal: die rwx jeder Klasse fallen zu einer einzigen Ziffer von 0 bis 7 zusammen (Lesen 4 + Schreiben 2 + Ausführen 1).

Drei Modi decken fast alles ab, was Sie jemals eintippen werden:

  • 755 (rwxr-xr-x) — Verzeichnisse und Skripte: der Eigentümer darf sie ändern, alle anderen dürfen sie lesen und ausführen.
  • 644 (rw-r--r--) — gewöhnliche Dateien: der Eigentümer schreibt, alle anderen lesen.
  • 777 (rwxrwxrwx) — Vollzugriff für alle. Fast immer falsch; das ist ein Sicherheitsloch, keine Lösung.

Schalten Sie jede Kombination im kostenlosen chmod-Rechner um und beobachten Sie, wie sich die Oktalzahl, die rwx-Zeichenkette und der exakte Befehl gemeinsam aktualisieren. Der Rest dieses Leitfadens erklärt, wie diese Zahlen funktionieren und wohin jede gehört.

Linux-Dateiberechtigungen in 30 Sekunden

OktalSymbolischTypische Verwendung
400r--------Privater SSH-Schlüssel, schreibgeschützt
600rw-------Private Dateien, SSH-Schlüssel, .env
644rw-r--r--Webseiten, Konfiguration, die meisten Dateien
700rwx------Private Verzeichnisse (~/.ssh)
755rwxr-xr-xSkripte, Binärdateien, Web-Verzeichnisse
775rwxrwxr-xVon Gruppen gemeinsam genutzte Verzeichnisse
777rwxrwxrwxJeder, alles — vermeiden
1777rwxrwxrwtGemeinsame Temp-Verzeichnisse wie /tmp

Faustregel: 644 für Dateien, 755 für Verzeichnisse, und von dort aus verschärfen. Lockern Sie einen Modus nur, wenn konkret etwas kaputtgeht, niemals vorsorglich.

Das Berechtigungsmodell: Eigentümer, Gruppe, Andere

Drei Klassen teilen sich eine Datei. Der Eigentümer (meist derjenige, der sie erstellt hat), eine einzelne Gruppe und die Anderen, also jedes Konto, das weder der Eigentümer noch Mitglied der Gruppe ist. Jede Klasse erhält unabhängig Lesen, Schreiben und Ausführen:

  • Lesen (r) — den Inhalt einer Datei ansehen oder die Einträge eines Verzeichnisses auflisten.
  • Schreiben (w) — eine Datei ändern oder Einträge in einem Verzeichnis hinzufügen und entfernen.
  • Ausführen (x) — eine Datei als Programm ausführen oder ein Verzeichnis betreten (per cd).

Die Feinheit, über die viele stolpern: bei einem Verzeichnis bedeuten die Bits etwas anderes. r erlaubt Ihnen, Namen aufzulisten, w erlaubt das Anlegen und Löschen von Einträgen darin, und x erlaubt das Durchqueren, um die darunterliegenden Dateien zu erreichen und per cd einzusteigen. Sie können auf einem Verzeichnis r ohne x besitzen, ls darauf ausführen und trotzdem „Permission denied” erhalten, sobald Sie versuchen, es zu betreten. Genau deshalb sind Verzeichnisse 755 und nicht 644.

Eine ls -l-Zeile lesen

Führen Sie ls -l aus, und jeder Eintrag beginnt mit einem zehn Zeichen langen Block:

$ ls -l
-rw-r--r--  1 jack staff  1400 Jul 17 10:00 index.html
drwxr-xr-x  5 jack staff   160 Jul 17 10:00 assets

Lesen Sie ihn von links nach rechts. Das erste Zeichen ist der Dateityp, keine Berechtigung: - ist eine reguläre Datei, d ein Verzeichnis, l ein Symlink, c oder b ein Gerät, p eine benannte Pipe, s ein Socket. Die nächsten neun Zeichen sind drei Gruppen von rwx: Eigentümer, Gruppe, Andere. Also ist -rw-r--r-- eine reguläre Datei, bei der der Eigentümer liest und schreibt (rw-), während Gruppe und Andere nur lesen (r-- r--), was 644 entspricht. drwxr-xr-x ist ein Verzeichnis mit 755.

Manche Systeme hängen nach den neun Bits eine Markierung an. Ein abschließender . signalisiert einen SELinux-Kontext, ein + bedeutet, dass eine ACL Regeln über die Basis-Bits hinaus hinzufügt, und unter macOS markiert ein @ erweiterte Attribute. Keine davon ändert die Oktalzahl. Ignorieren Sie die Markierung und lesen Sie die neun Zeichen.

Oktalschreibweise: Wie aus 755 rwxr-xr-x wird

Oktale Dateiberechtigungen funktionieren, weil jede Berechtigung eine Zweierpotenz ist:

  • Lesen = 4
  • Schreiben = 2
  • Ausführen = 1

Addieren Sie die Bits, die eine Klasse besitzt, und Sie erhalten ihre Ziffer. rwx ist 4 + 2 + 1 = 7. r-x ist 4 + 1 = 5. r-- ist 4. Also liest sich rwxr-xr-x, in Dreiergruppen, als 7 5 5. Machen Sie dasselbe für rw-r--r-- und Sie erhalten 4 + 2, 4, 4 → 644. Das ist der ganze Trick; mehr steckt hinter oktalen Berechtigungen nicht als drei voneinander unabhängige Summen.

Die Berechtigungsziffern 0–7 auf einen Blick

ZifferBinärBerechtigungen
0000Keine Berechtigungen
1001Nur Ausführen
2010Nur Schreiben
3011Schreiben + Ausführen
4100Nur Lesen
5101Lesen + Ausführen
6110Lesen + Schreiben
7111Lesen + Schreiben + Ausführen

Oktal ist einfach zur Basis 8, sodass jede Ziffer drei Bits ohne Überlappung in die nächste Klasse packt. Falls Ihnen das Stellenwertrechnen eingerostet vorkommt: der Zahlensystem-Konverter zeigt, wie sich die Basis 8 genauso auf Binär abbildet wie es jede Berechtigungsziffer tut.

chmod 755 vs 644 vs 777: Die Modi, die Sie wirklich tippen werden

Dieser Vergleich beantwortet chmod 755 vs 644 vs 777 direkt:

OktalSymbolischEigentümerGruppeAndereTypische VerwendungRisiko
644rw-r--r--Lesen/SchreibenLesenLesenReguläre DateienSicherer Standard
755rwxr-xr-xalleLesen/Ausf.Lesen/Ausf.Verzeichnisse, SkripteSicherer Standard
600rw-------Lesen/SchreibenPrivate Dateien, SchlüsselSehr sicher
700rwx------allePrivate VerzeichnisseSehr sicher
775rwxrwxr-xallealleLesen/Ausf.Von Gruppen genutzte Verz.Gruppe kann schreiben
777rwxrwxrwxalleallealle(vermeiden)Weltweit beschreibbar

Der Unterschied zwischen 755 und 644 ist ein einziges Bit: Ausführen. Verzeichnisse, Skripte und Binärdateien brauchen x, um betreten oder ausgeführt zu werden, also landen sie bei 755. Eine reguläre Datei wie eine HTML-Seite, ein Bild oder eine Konfiguration hat keinen Grund, ausführbar zu sein, also bleibt sie bei 644. Diese beiden zu verwechseln, steckt hinter den meisten alltäglichen Berechtigungsfehlern.

Warum 777 gefährlich ist. Es übergibt Schreibzugriff an jedes Konto auf der Maschine, einschließlich eines kompromittierten Dienstkontos oder eines gekaperten Web-Prozesses. Ein weltweit beschreibbares Document-Root ist der klassische Weg zu einer verunstalteten Website oder eingeschleuster Malware, denn jeder, der es erreicht, kann Ihren Code überschreiben. Wenn ein Forenbeitrag Ihnen rät, etwas per chmod 777 „zum Laufen zu bringen”, ist das eigentliche Problem fast immer die Eigentümerschaft, weiter unten behandelt.

Die Ausnahme 1777. /tmp ist absichtlich weltweit beschreibbar, aber mit einer Absicherung. Modus 1777 fügt das Sticky-Bit hinzu, das es jedem erlaubt, Dateien anzulegen, während es Benutzer daran hindert, Dateien zu löschen oder umzubenennen, die ihnen nicht gehören. Deshalb sind gemeinsame Temp-Verzeichnisse mit 1777 sicher, aber niemals mit reinem 777. Geben Sie 777 in den chmod-Rechner ein, und das Risiko-Panel markiert es sofort, während 1777 als das übliche Muster für gemeinsame Verzeichnisse erkannt wird.

Numerischer vs. symbolischer Modus

chmod nimmt dieselben Bits auf zwei Arten entgegen.

Numerischer (absoluter) Modus gibt das vollständige Ergebnis an. chmod 755 file setzt alle neun Bits auf rwxr-xr-x, unabhängig davon, was zuvor da war. Das ist es, was Sie in Skripten und beim Deployment wollen, wo Sie einen bekannten, guten Zustand erzwingen.

Symbolischer (relativer) Modus beschreibt eine Änderung. chmod u+x file kippt ein Bit (Ausführen für den Eigentümer hinzufügen) und lässt alles andere unangetastet. chmod u=rwx,go=rx file setzt ganze Klassen explizit. Der symbolische Modus eignet sich für einmalige Anpassungen, bei denen es übertrieben wäre, den gesamten Modus neu anzugeben.

# Numerisch: den gesamten Modus überschreiben
$ chmod 644 report.txt

# Symbolisch: nur das ändern, was Sie benennen
$ chmod u+x deploy.sh        # add execute for the owner
$ chmod go-w shared.conf     # remove write from group and others
$ chmod u=rw,go=r notes.md   # set each class explicitly → 644

Eine Falle beim symbolischen Modus: chmod +x ohne Klasse wird von Ihrer umask gefiltert. Bei der üblichen umask 022 fügt chmod +x script.sh Ausführen für alle hinzu, entspricht also chmod a+x. Unter einer strengeren umask wie 077 betrifft es nur den Eigentümer. Wenn Sie ein garantiertes Ergebnis wollen, benennen Sie die Klasse: u+x nur für den Eigentümer, a+x für alle.

Spezialberechtigungen: setuid, setgid und das Sticky-Bit

Über die neun Standard-Bits hinaus trägt eine vierte, führende Oktalziffer die drei Spezialmodi setuid, setgid und das Sticky-Bit:

  • setuid = 4000 — das Programm läuft mit den Rechten des Dateieigentümers, nicht denen des Aufrufers. So erlaubt passwd, das root gehört, einem gewöhnlichen Benutzer, eine root-eigene Passwortdatenbank zu aktualisieren.
  • setgid = 2000 — dieselbe Idee für die Gruppe. Auf einem Verzeichnis sorgt es zusätzlich dafür, dass neue Dateien die Gruppe des Verzeichnisses erben, was ein gemeinsames Projekt durchgängig in Gruppenbesitz hält.
  • Sticky-Bit = 1000 — auf einem gemeinsamen Verzeichnis schränkt es das Löschen ein, sodass Benutzer nur ihre eigenen Dateien entfernen können. /tmp mit 1777 ist das kanonische Beispiel.
$ chmod 4755 /usr/local/bin/mytool   # setuid
$ chmod 2775 /srv/shared             # setgid on a shared dir
$ chmod 1777 /tmp                     # sticky bit
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59976 Jul 17 10:00 /usr/bin/passwd

Die Groß-/Kleinschreibungsregel für s/S und t/T

In ls -l belegen die Spezialbits den Ausführen-Platz wieder, und die Groß-/Kleinschreibung sagt Ihnen, ob Ausführen ebenfalls gesetzt ist. Kleines s (setuid/setgid) oder t (Sticky) bedeutet, das Spezialbit und Ausführen sind aktiv, der Normalfall. Großes S oder T bedeutet, das Spezialbit ist gesetzt, Ausführen aber nicht, was meist ein Fehler ist, denn ein Spezialbit auf einer nicht ausführbaren Datei bewirkt nichts Nützliches.

Vergleichen Sie rwsr-xr-x (4755, setuid mit Ausführen, korrekt) mit rwSr--r-- (4644, setuid ohne Ausführen, verdächtig). Wann immer Sie ein großes S oder T sehen, prüfen Sie, ob jemand versehentlich das Ausführen-Bit weggelassen hat.

Der GNU-Verzeichnis-Fallstrick, den niemand erwähnt

Diesen Plattformunterschied stellt nahezu jedes Tutorial falsch dar. Unter Linux (GNU coreutils) löscht ein numerisches chmod 755 dir ein vorhandenes setuid- oder setgid-Bit auf diesem Verzeichnis nicht. Es bleibt erhalten. Wenn ein Verzeichnis bereits 2755 (setgid) ist und Sie chmod 755 ausführen und dabei einen sauberen Neuanfang erwarten, bleibt das setgid-Bit bestehen, und das Verzeichnis ist in Wirklichkeit weiterhin 2755.

Um es tatsächlich zu löschen, seien Sie explizit:

$ chmod 00755 dir      # five-digit form zeroes the special digit
$ chmod =755 dir       # = clears every bit not listed
$ chmod u-s,g-s dir    # remove setuid and setgid by name

BSD und macOS machen das Gegenteil: ein numerisches chmod 755 löscht die Spezialbits standardmäßig. Ein Deploy-Skript, das Berechtigungen mit chmod -R 755 „zurücksetzt”, verhält sich also auf einem Mac-Laptop anders als auf einem Linux-Server. Diese Beibehaltung ist im GNU-coreutils-Handbuch dokumentiert; im Zweifel verwenden Sie die fünfstellige oder die u-s,g-s-Form, damit das Ergebnis überall identisch ist.

umask: Was neu erstellte Dateien bekommen

Sie führen selten für jede Datei von Hand chmod aus; die meisten erhalten ihren Modus bei der Erstellung, und die umask entscheidet ihn. Eine umask ist ein Satz von Bits, die abgeschaltet werden. Neue Dateien starten von der Basis 666 und neue Verzeichnisse von 777, und die umask maskiert Bits weg:

effective mode = base & ~umask

Dateien beginnen bei 666, nicht bei 777, weil eine brandneue Datei standardmäßig nichts damit zu tun haben sollte, ausführbar zu sein. Dieses Bit fügen Sie bewusst mit chmod +x hinzu.

umaskNeue DateienNeue Verz.Bedeutung
022644755Standard — Andere lesen, nicht schreiben
077600700Privat für den Eigentümer
002664775Gruppenzusammenarbeit

Rechnen Sie den Standard 022 von Hand durch: 666 & ~022 = 666 & 755 = 644, und 777 & ~022 = 755. Prüfen Sie Ihren aktuellen Wert mit umask und setzen Sie einen Sitzungsstandard mit etwa umask 077 auf einer Maschine, auf der nichts für die Gruppe oder die Welt lesbar sein soll.

chmod vs. chown: Berechtigungen vs. Eigentümerschaft

chmod und chown beantworten unterschiedliche Fragen. chmod ändert, was Eigentümer, Gruppe und Andere tun dürfen: die Berechtigungsbits. chown ändert, wer Eigentümer und Gruppe tatsächlich sind. Nach 777 zu greifen, ist oft ein Eigentümerschaftsproblem im Berechtigungskostüm.

Der klassische Fall: ein Webserver, der als www-data läuft, kann sein Upload-Verzeichnis nicht beschreiben. chmod 777 lässt den Fehler verschwinden, indem es die ganze Welt schreiben lässt, und hinterlässt ein Loch. Die korrekte Lösung weist die Eigentümerschaft dem Prozess zu, der sie braucht:

# Wrong: opens the directory to every account on the box
$ sudo chmod -R 777 /var/www/uploads

# Right: give it to the web user, keep a tight mode
$ sudo chown -R www-data:www-data /var/www/uploads
$ sudo find /var/www/uploads -type d -exec chmod 755 {} +
$ sudo find /var/www/uploads -type f -exec chmod 644 {} +

Diagnosereihenfolge, wenn etwas unerwartet nicht lesbar ist: führen Sie ls -l aus, um zuerst zu sehen, wem es gehört, entschlüsseln Sie zweitens den Modus und entscheiden Sie dann, ob die Lösung chown, chmod oder das Hinzufügen eines Benutzers zu einer Gruppe ist.

Rekursive Berechtigungen richtig gemacht

Ein pauschales chmod -R 755 . markiert jede reguläre Datei als ausführbar, was bestenfalls Rauschen und schlimmstenfalls ein stilles Risiko ist. Rekursieren Sie stattdessen nach Typ:

$ find . -type d -exec chmod 755 {} +   # directories → 755
$ find . -type f -exec chmod 644 {} +   # files → 644

GNU chmod bietet eine einzeilige Abkürzung mit dem großen X, das Ausführen nur zu Verzeichnissen und zu Dateien hinzufügt, die bereits ein Ausführen-Bit tragen:

$ chmod -R u+rwX,go+rX .

Der chmod-Rechner erzeugt die find-Befehle nur für Verzeichnisse und nur für Dateien für jeden Modus, den Sie wählen, sodass Sie die korrekte Aufteilung kopieren können, statt zu einem einfachen -R zu greifen.

Best Practices für Linux-Dateiberechtigungen

  • Gewähren Sie das geringste Privileg, das funktioniert. Beginnen Sie mit dem strengsten Modus und öffnen Sie nur, was kaputtgeht. Jedes zusätzliche Schreibbit ist Angriffsfläche.
  • Standardmäßig 644-Dateien in 755-Verzeichnissen. Diese Paarung bedient nahezu jedes Web-Root und jeden Repository-Checkout. Reguläre Dateien brauchen selten Ausführen; Verzeichnisse immer.
  • Lassen Sie 777 niemals auf etwas, das ein Server erreichen kann. Wenn mehrere Konten schreiben müssen, verwenden Sie eine gemeinsame Gruppe mit 775 oder 2775 (setgid hält die Gruppeneigentümerschaft konsistent), anstatt den Modus für die Welt zu öffnen.
  • Halten Sie private SSH-Schlüssel bei 600 oder, wenn final, bei 400. OpenSSH verweigert für Gruppe oder Welt lesbare private Schlüssel rundweg. Siehe das OpenSSH-Handbuch für die genaue Anforderung an die Schlüsseldatei. Öffentliche Schlüssel und authorized_keys sind mit 644 in Ordnung.
  • Schichten Sie Dateimodi mit anderen Kontrollen. Berechtigungen sind die Basis; kombinieren Sie sie mit Basisauthentifizierung aus dem htpasswd-Generator, wenn ein Ordner ein Login braucht, und behandeln Sie Dateimodi als einen Baustein des Gesamtbilds, das unser Leitfaden zu den Web-Sicherheit Grundlagen abdeckt.

FAQ

Was bedeutet das d oder l am Anfang von drwxr-xr-x?

Das erste Zeichen in einer ls -l-Zeile ist der Dateityp, keine Berechtigung. d markiert ein Verzeichnis, l einen Symlink, - eine reguläre Datei, c oder b ein Gerät, p eine benannte Pipe und s einen Socket. Nur die neun Zeichen danach kodieren die tatsächlichen Lese-, Schreib- und Ausführen-Bits.

Was ist der Unterschied zwischen einem kleinen s und einem großen S in Berechtigungen?

Ein kleines s und ein großes S bedeuten beide, dass das setuid- oder setgid-Bit gesetzt ist. Kleines s bedeutet, dass Ausführen ebenfalls gesetzt ist, der normale Arbeitsfall. Großes S bedeutet, dass das Spezialbit aktiv, Ausführen aber aus ist (wie bei 4644), was fast immer eine Fehlkonfiguration ist, da ein Spezialbit ohne Ausführen bedeutungslos ist.

Was ist umask und wie entscheidet es Standardberechtigungen?

umask ist der Satz an Berechtigungsbits, die abgeschaltet werden, wenn eine Datei erstellt wird. Neue Dateien beginnen bei Basis 666 und Verzeichnisse bei 777, dann entfernt effective = base & ~umask die maskierten Bits. Der Standard 022 ergibt 644-Dateien und 755-Verzeichnisse; führen Sie umask aus, um Ihren zu sehen, oder umask 077 für einen privateren Standard.

Wann sollte ich 400 oder 700 statt 644 oder 755 verwenden?

Verwenden Sie 400 oder 700, wenn eine Datei oder ein Verzeichnis vollständig privat bleiben muss. 400 (r--------) ist eine schreibgeschützte private Datei, ideal für einen finalisierten privaten SSH-Schlüssel, den Sie nie bearbeiten. 700 (rwx------) ist ein Verzeichnis, das nur der Eigentümer betreten kann, wie ~/.ssh oder ~/.gnupg. Anders als 644 und 755 gewähren sie niemand anderem etwas.

Warum kann ich ein Verzeichnis auflisten, aber nicht per cd betreten?

Verzeichnisberechtigungen trennen Auflisten vom Durchqueren: das r-Bit erlaubt Ihnen, Namen aufzulisten, das x-Bit erlaubt das Betreten. Ein Verzeichnis mit r, aber ohne x (ein 644-Verzeichnis) zeigt seine Namen unter ls, blockiert aber cd und jeden Zugriff auf die darin liegenden Dateien. Fügen Sie Ausführen hinzu (machen Sie es zu 755), um es betretbar zu machen.

Funktionieren Dateiberechtigungen auf macOS genauso wie unter Linux?

Berechtigungen teilen auf beiden dasselbe zentrale rwx- und Oktalmodell, weil beide POSIX folgen, aber Details unterscheiden sich. BSD und macOS löschen das setuid/setgid eines Verzeichnisses bei einem numerischen chmod standardmäßig, während Linux es beibehält. Auch das Auslesen eines Modus unterscheidet sich: stat -c '%a' file unter Linux, stat -f '%Lp' file unter macOS, und macOS ergänzt ACLs und Datei-Flags.

Kann ich Dateiberechtigungen ohne die Befehlszeile ändern?

Sie können Berechtigungen ohne Terminal berechnen und entschlüsseln. Der kostenlose chmod-Rechner lässt Sie eine Berechtigungsmatrix ankreuzen, einen Oktalwert eintippen oder eine ls -l-Zeile einfügen und gibt dann den exakten chmod-Befehl zurück. Ihn auf eine echte Datei anzuwenden, erfordert weiterhin diesen Befehl auf dem Server oder einen GUI- oder FTP-Client, der Berechtigungsfelder bereitstellt.

Tags: linux chmod file-permissions permissions security

Verwandte Artikel

Alle Artikel anzeigen