Chmod-Rechner

Setze Haken bei Lesen, Schreiben und Ausführen für Besitzer, Gruppe und Andere, um die oktale chmod-Zahl, die symbolische rwx-Zeichenkette und ein Kommando zu erhalten, das du direkt in ein Terminal einfügen kannst.

Setze die Haken, um die Zahl zu erhalten, oder gib die Zahl ein, um zu sehen, was sie tatsächlich erlaubt. Berechtigungen gelten für drei Zielgruppen – den Dateibesitzer, die besitzende Gruppe und alle anderen –, und jede Zielgruppe erhält unabhängig Lesen, Schreiben und Ausführen. Schalte das Raster um oder gib einen oktalen Wert ein; beide bleiben synchron.

Wer Lesen (4) Schreiben (2) Ausführen (1)
Besitzer (u)
Gruppe (g)
Andere (o)

Unix-Berechtigungsbits lesen und schreiben

Drei Triaden, je drei Bits

Jede Unix-Datei trägt neun Berechtigungsbits, angeordnet als drei Gruppen zu je dreien. Die erste Triade gehört dem Dateibesitzer, die zweite der Dateigruppe und die dritte allen anderen auf dem System. Innerhalb jeder Triade bedeuten die Bits Lesen, Schreiben und Ausführen, und sie sind wert 4, 2 und 1. Die Addition der Werte der gewünschten Bits ergibt eine einzelne Ziffer von 0 bis 7, weshalb Berechtigungen traditionell als drei oktale Ziffern geschrieben werden.

Das ist der ganze Trick hinter einer Zahl wie 755. Die Besitzer-Ziffer ist 7, also 4 + 2 + 1, sodass der Besitzer lesen, schreiben und ausführen darf. Die Gruppen- und Andere-Ziffer sind beide 5, also 4 + 1, sodass sie lesen und ausführen, aber nicht ändern dürfen. Symbolisch geschrieben lautet derselbe Wert rwxr-xr-x, genau das, was ls -l nach dem führenden Dateityp-Zeichen ausgibt.

Die drei Verben bedeuten bei einem Verzeichnis etwas anderes. Lesen lässt dich die Namen darin auflisten, Schreiben lässt dich Einträge erstellen und löschen, und Ausführen lässt dich hindurch navigieren, um einen Pfad zu erreichen, den du bereits kennst. Ein Verzeichnis mit Lesen, aber ohne Ausführen ist fast nutzlos: du kannst die Namen sehen, aber nichts dahinter öffnen.

Die Werte, die du tatsächlich eintippst

Eine Handvoll Kombinationen deckt die meiste reale Arbeit ab. 644 (rw-r--r--) ist der normale Modus für ein Dokument oder eine Quelldatei: der Besitzer bearbeitet sie, alle anderen lesen sie. 755 (rwxr-xr-x) ist der normale Modus für ein Verzeichnis oder ein ausführbares Skript, weil beide das Ausführ-Bit brauchen, um überhaupt nutzbar zu sein. 600 (rw-------) hält eine Datei privat für ihren Besitzer, was OpenSSH für private Schlüssel verlangt, und 700 macht dasselbe für ein Verzeichnis.

Modi, die anderen Schreibzugriff gewähren, verdienen einen zweiten Blick. 777 lässt jedes Konto auf dem Rechner die Datei überschreiben oder löschen, und es ist fast nie die richtige Antwort – es ist einfach der schnellste Weg, einen Berechtigungsfehler ohne Verständnis dafür verschwinden zu lassen. Wenn ein Webserver nicht in ein Upload-Verzeichnis schreiben kann, ist der echte Fix meist, den besitzenden Benutzer oder die Gruppe mit chown zu ändern, nicht die Datei für die Welt zu öffnen.

Berechtigungen interagieren auch mit der umask. Neue Dateien werden mit einem Standardmodus erstellt, der um den umask-Wert (üblich 022) verringert ist, weshalb eine frisch erstellte Datei eher als 644 statt 666 ankommt.

Setuid, setgid und das Sticky-Bit

Eine vierte Ziffer kann vor den drei vertrauten stehen, und sie trägt drei Sonderbits: setuid (4), setgid (2) und das Sticky-Bit (1). Sie ändern, als wer ein Programm läuft und wie ein Verzeichnis die darin erstellten Dateien behandelt.

Setuid auf einer ausführbaren Datei lässt sie mit den Rechten des Dateibesitzers statt des Benutzers laufen, der sie startete. So kann passwd eine systemweite Datei aktualisieren, während ein unprivilegierter Benutzer sie ausführt, und das ist auch, warum setuid-Binärdateien so sorgfältig geprüft werden – ein Fehler darin ist ein direkter Weg zu den Rechten des Besitzers. Setgid macht dasselbe für die Gruppe. Auf einem Verzeichnis hat setgid eine freundlichere Bedeutung: neue Dateien, die darin erstellt werden, erben die Gruppe des Verzeichnisses, was einen gemeinsamen Projektordner konsistent hält, egal wer hineinschreibt.

Das Sticky-Bit ist am bekanntesten für /tmp, üblicherweise geschrieben 1777. Es erlaubt jedem, Dateien im Verzeichnis zu erstellen, beschränkt aber das Löschen auf den jeweiligen Besitzer der Datei, sodass Benutzer einander ihre temporären Dateien nicht entfernen können. In einer langen Auflistung ersetzen diese Bits das Ausführ-Zeichen: ein s an Stelle von x bedeutet, dass setuid oder setgid gesetzt ist, ein großes S bedeutet, dass das Bit gesetzt ist, während Ausführen nicht gesetzt ist, und t markiert das Sticky-Bit.

Open-Source-Hinweis: implementiert in reinem JavaScript ohne Fremdbibliotheken.

FAQ

Was bedeutet 755 genau?
Der Besitzer darf lesen, schreiben und ausführen; die Gruppe und alle anderen dürfen lesen und ausführen, aber nicht ändern. Es ist der übliche Modus für Verzeichnisse und für Skripte, die von anderen Benutzern ausführbar sein sollen.
Mein Skript ist lesbar, sagt aber Zugriff verweigert. Warum?
Eine Datei zu lesen und sie auszuführen sind getrennte Bits. Ein Skript braucht das Ausführ-Bit für den Benutzer, der es ausführen will, also reicht 644 nicht – verwende 755, oder führe es explizit über seinen Interpreter aus.
Ist 777 jemals die richtige Wahl?
Fast nie auf einer gemeinsamen oder internet-nahen Maschine, weil es jedem lokalen Konto erlaubt, die Datei zu ändern oder zu löschen. Wenn ein Dienst nicht irgendwohin schreiben kann, ändere stattdessen den Besitzer oder die Gruppe, anstatt den Modus zu weiten.
Was ist der Unterschied zwischen 644 und 0644?
Keiner, für die neun Standardbits. Die führende Null ist die Sonderbits-Ziffer, und sie auf 0 zu setzen löscht setuid, setgid und das Sticky-Bit. Viele schreiben vier Ziffern rein aus Gewohnheit.
Warum weigert sich SSH, meinen privaten Schlüssel zu nutzen?
OpenSSH lehnt einen privaten Schlüssel ab, den andere Benutzer lesen können. Setze den Schlüssel auf 600 und das enthaltende .ssh-Verzeichnis auf 700, und die Warnung verschwindet.
Verhält sich chmod unter macOS und Linux gleich?
Die numerischen Modi sind identisch. Die Unterschiede zeigen sich bei erweiterten Attributen und ACLs, die macOS mit einem `+` nach der Berechtigungszeichenkette meldet und die chmod allein nicht verwaltet.