chmod-Rechner

Rechnet Unix-Dateirechte zwischen Oktal (755), symbolisch (rwxr-xr-x) und einem Kästchenraster um — mit setuid, setgid und dem Sticky-Bit.

Häufige Modi
KlasseLesenSchreibenAusführen
Eigentümer
Gruppe
Andere
Oktal
Symbolisch
Oktaler Befehl
chmod 644 file
Symbolischer Befehl
chmod u=rw,g=r,o=r file
ls -l-Stil
-rw-r--r--

Was dieses Werkzeug tut

Jede Datei auf einem Unix-System trägt eine Menge von Rechten, die festlegen, wer sie lesen, ändern oder ausführen darf. Der Befehl chmod setzt sie, und er nimmt diese Rechte in zwei recht unterschiedlichen Schreibweisen entgegen — einer dreistelligen Oktalzahl und einer Buchstabenkette —, die genau dasselbe beschreiben. Dieses Werkzeug hält beide Schreibweisen sowie ein Raster aus Kästchen synchron, sodass Sie von der Form ausgehen können, die Sie haben, und die kopieren, die Sie brauchen.

Alles läuft in Ihrem Browser und ist reine Arithmetik: Es gibt keinen Server, und nichts, was Sie eingeben, wird irgendwohin gesendet. Es ist ein Rechner und ein Nachschlagewerk, kein Weg, Rechte auf einer echten Maschine zu ändern — dafür kopieren Sie den erzeugten chmod-Befehl und führen ihn selbst aus.

Drei Gruppen, drei Rechte

Rechte sind in drei Dreiergruppen gegliedert. Die drei Gruppen sind der Eigentümer der Datei, die Gruppe, der sie gehört, und alle übrigen — „Andere“. Innerhalb jeder Gruppe gibt es drei Rechte: Lesen, Schreiben und Ausführen.

  • Lesen (r) — den Inhalt der Datei ansehen oder die Einträge eines Verzeichnisses auflisten.
  • Schreiben (w) — die Datei ändern oder Einträge in einem Verzeichnis hinzufügen und entfernen.
  • Ausführen (x) — die Datei als Programm starten oder ein Verzeichnis betreten und die Dateien darin erreichen.

Ausführen bedeutet bei einem Verzeichnis etwas anderes als bei einer Datei, und das übersieht man leicht: Ein Verzeichnis, das Sie lesen, aber nicht ausführen dürfen, zeigt Ihnen die Namen des Inhalts, lässt Sie aber nichts davon öffnen.

Wie die Oktalzahl funktioniert

Die drei Rechte jeder Gruppe passen in eine Oktalziffer, indem feste Werte addiert werden: Lesen ist 4, Schreiben ist 2, Ausführen ist 1. Lesen-Schreiben-Ausführen ergibt 4+2+1 = 7; Lesen-Ausführen ergibt 4+1 = 5; Lesen-Schreiben ergibt 4+2 = 6. Drei Gruppen ergeben drei Ziffern.

755
7 = 4+2+1   # Eigentümer: Lesen + Schreiben + Ausführen
5 = 4+0+1   # Gruppe: Lesen + Ausführen
5 = 4+0+1   # Andere: Lesen + Ausführen

So bedeutet 755 „der Eigentümer darf alles, alle anderen dürfen lesen und ausführen, aber nicht ändern“ — der übliche Modus für ein Programm oder ein Verzeichnis. 644 — Lesen und Schreiben für den Eigentümer, nur Lesen für alle anderen — ist der übliche Modus einer gewöhnlichen Datei. Ist das Muster erst vertraut, liest man die gängigen Modi auf einen Blick.

Die symbolische Zeichenkette

Die andere Schreibweise ist die, die ls -l ausgibt: neun Zeichen, drei je Gruppe, jedes entweder sein Buchstabe oder ein Bindestrich. 755 ist rwxr-xr-x; 644 ist rw-r--r--. Sie enthält genau dieselbe Information wie die Oktalzahl, nur so angeordnet, dass Sie jedes Recht sehen, statt im Kopf Ziffern zu addieren.

Eine ls -l-Zeile hat vorne ein zehntes Zeichen — ein d für ein Verzeichnis, einen Bindestrich für eine gewöhnliche Datei, ein l für einen symbolischen Link. Dieses führende Zeichen ist der Dateityp, kein Recht, und chmod kann es nicht ändern. Sie können hier das ganze Rechtefeld aus ls -l einfügen; das Typzeichen wird einfach ignoriert.

Die Sonderbits: setuid, setgid und sticky

Über den neun gewöhnlichen Bits sitzen drei besondere, geschrieben als optionale vierte Oktalziffer vorne — setuid (4), setgid (2) und das Sticky-Bit (1). Sie haben keine eigene Spalte; stattdessen überlagert jedes von ihnen einen Ausführungsplatz in der symbolischen Zeichenkette, und daher rühren die Großbuchstaben, die viele verwirren.

  • setuid bei einer ausführbaren Datei lässt sie als Eigentümer der Datei laufen statt als der Benutzer, der sie gestartet hat. So kann passwd eine Systemdatei aktualisieren, in die Sie nicht direkt schreiben dürfen — und deshalb ist ein setuid-Programm mit einem Fehler eine ernste Lücke.
  • setgid bei einer ausführbaren Datei startet sie mit der Gruppe der Datei. Bei einem Verzeichnis tut es etwas Nützlicheres und Sichereres: Neu darin angelegte Dateien erben diese Gruppe statt der des Erstellers.
  • Das Sticky-Bit bei einem Verzeichnis bedeutet, dass nur der Eigentümer einer Datei sie löschen oder umbenennen darf, selbst wenn alle in das Verzeichnis schreiben dürfen. Das hält /tmp gemeinsam nutzbar und zugleich sicher. Bei einer gewöhnlichen Datei bewirkt es nichts.

In der symbolischen Zeichenkette macht ein gesetztes Sonderbit aus seinem Ausführungsplatz einen Buchstaben: s im Platz des Eigentümers für setuid, s im Platz der Gruppe für setgid, t im Platz der Anderen für sticky. Die Groß- und Kleinschreibung verrät, ob auch Ausführen aktiv ist — klein heißt ja, groß heißt nein.

rwsr-xr-x  4755   # setuid, Eigentümer führt aus
rwSr-xr-x  4655   # setuid, Eigentümer führt NICHT aus
rwxrwxrwt  1777   # sticky, Andere führen aus
rwxrwxrwT  1776   # sticky, Andere führen NICHT aus

Ein großes S oder T ist fast immer ein Fehler: Es bedeutet, dass ein Sonderbit auf einer Datei gesetzt wurde, die nicht ausführbar ist, sodass das Bit nichts hat, worauf es wirken könnte.

Oktal oder symbolisch auf der Kommandozeile

chmod nimmt beide Formen entgegen, und dieses Werkzeug schreibt beide. Die oktale Form setzt alle Bits auf einmal: chmod 755 file. Die symbolische =-Form tut dasselbe absolut — chmod u=rwx,g=rx,o=rx file — und führt jede Gruppe auf, damit das Ergebnis nicht davon abhängt, wie die Datei vorher stand.

Es gibt eine dritte, relative Form, die der Rechner nicht braucht, die Ihnen aber begegnen wird: chmod +x file fügt für alle Ausführen hinzu, chmod g-w file nimmt der Gruppe das Schreibrecht, chmod o= file löscht alles für Andere. Diese Form ändert Bits relativ zum aktuellen Modus, statt den ganzen zu setzen — praktisch auf der Kommandozeile, aber ohne ein einzelnes „Ergebnis“, das man anzeigen könnte.

Modi, die man besser nicht setzt

Ein Rechte-Werkzeug sollte auch sagen, wann ein Modus eine schlechte Idee ist. Zwei kommen ständig vor:

  • 777 gibt jedem Benutzer Lesen, Schreiben und Ausführen. Es ist der Reflex-Fix, wenn etwas „nicht geht“, und tauscht fast immer ein kleines Problem gegen eine echte Sicherheitslücke. Der richtige Modus ist fast immer enger — meist 755 oder 644.
  • Jede für alle schreibbare Datei (die letzte Ziffer enthält 2) lässt jedes Konto der Maschine ihren Inhalt überschreiben. Für alles, was ausgeführt, eingebunden oder als vertrauenswürdig behandelt wird, ist das ein Einfallstor. Geben Sie das Schreibrecht stattdessen einer Gruppe oder behalten Sie es beim Eigentümer.

Das Werkzeug weist auf beide hin, sobald sie auftreten. Es kann nicht wissen, ob Ihr Ziel eine Datei oder ein Verzeichnis ist, und formuliert sie deshalb als etwas, das einen zweiten Blick verdient, nicht als Fehler — das Sticky-Bit ist bei einem Verzeichnis richtig und bei einer Datei sinnlos, und nur Sie wissen, was Sie vor sich haben.

Was chmod 755 bedeutet

Das ist der Modus, bei dem fast jedes Skript, jedes Programm und jedes Verzeichnis landet, und er liest sich Gruppe für Gruppe. Jede Ziffer sind die drei Rechte dieser Gruppe zusammengezählt — Lesen 4, Schreiben 2, Ausführen 1 —, also ist 7 alle drei und 5 Lesen plus Ausführen ohne Schreiben.

  • Eigentümer — 7 = 4+2+1. Lesen, Schreiben und Ausführen: Sie können die Datei bearbeiten und ausführen.
  • Gruppe — 5 = 4+0+1. Lesen und Ausführen, kein Schreiben: Mitglieder der Gruppe der Datei dürfen sie lesen und ausführen und nicht ändern.
  • Andere — 5 = 4+0+1. Dasselbe noch einmal: Jedes andere Konto der Maschine darf sie lesen und ausführen, und keines darf sie ändern.

Ausgeschrieben ist das rwxr-xr-x, und der Befehl lautet chmod 755 file — oder chmod u=rwx,g=rx,o=rx file, wenn Ihnen die Buchstaben lieber sind. Bei einem Verzeichnis lesen sich dieselben Bits anders, denn dort heißt Ausführen, dass Sie hineingehen und an den Inhalt gelangen dürfen: 755 ist ein Verzeichnis, das jeder auflisten und betreten kann, während nur der Eigentümer Einträge hinzufügen oder entfernen darf. Zu 755 sagt der Rechner überhaupt nichts, und das mit Absicht — es ist der engste Modus, in dem andere Konten das noch ausführen können, was Sie geschrieben haben. Braucht die Gruppe die Datei auch zum Bearbeiten, ist der Modus mit Gruppenschreibrecht 775 und nicht 777.

Was chmod 644 bedeutet, und warum Ihre Dateien es längst haben

644 ist 755 ohne jedes Ausführungsbit: 6 = 4+2 für den Eigentümer, dann 4 = 4+0+0 für die Gruppe und noch einmal 4 für Andere, also rw-r--r--. Niemand kann sie ausführen, und genau das gehört zu allem, was nur gelesen wird — ein Dokument, eine HTML-Seite, eine Konfigurationsdatei, eine Quelldatei, die ein anderes Programm übersetzt. Bei einem Verzeichnis ist er dagegen nicht restriktiv, sondern kaputt: ohne Ausführen kann nichts hinein, also lassen sich die Namen darin auflisten und keiner davon öffnen.

Es ist außerdem der Modus, den eine neue Datei üblicherweise hat, bevor jemand sie anfasst, und der Grund heißt umask. Ein Programm, das eine Datei erzeugt, verlangt normalerweise 666, eines, das ein Verzeichnis erzeugt, 777; die umask streicht dann die von ihr genannten Bits, noch bevor die Datei existiert. Mit der üblichen umask 022 — Schreiben der Gruppe und Anderen entzogen — wird aus 666 die 644 und aus 777 die 755, weshalb diese beiden überall vorkommen und weshalb sie die ersten zwei Modi sind, die dieses Werkzeug anbietet. Tippen Sie umask in eine Shell, um Ihren Wert zu sehen.

  • umask 022, die gewöhnliche Voreinstellung — eine neue Datei kommt als 644 heraus, ein neues Verzeichnis als 755.
  • umask 002, gesetzt dort, wo jeder Benutzer eine eigene Gruppe hat — 664 und 775, sodass Gruppenmitglieder ebenfalls bearbeiten dürfen.
  • umask 077, die private Einstellung — 600 und 700, die außer dem Eigentümer niemand auch nur lesen darf.

Alle sechs sind hier voreingestellte Modi, und das ist kein Zufall: es sind die drei umask-Werte, die Leute tatsächlich setzen, je einmal auf eine Datei und einmal auf ein Verzeichnis angewendet. Sie als drei Paare statt als sechs Werte zu lesen ist der schnellste Weg, das Nachschlagen von Modi aufzugeben.

Was chmod 711 bedeutet: hinein, aber nicht hinsehen

711 ist der gängige Modus, der Ausführen ohne Lesen vergibt: 7 = 4+2+1 für den Eigentümer, dann zweimal 1 = 0+0+1, also rwx--x--x. Sinn ergibt er erst, wenn man die beiden Verzeichnisrechte wieder trennt — Lesen listet die Namen, Ausführen lässt Sie hindurch —, weshalb ein Verzeichnis mit 711 von jedem betreten werden kann, der den Namen des Gesuchten schon kennt, und von niemandem aufgelistet.

  • Bei einem Verzeichnis ist das wirklich nützlich. Ein Heimatverzeichnis mit 711 lässt einen Webserver oder ein anderes Konto auf einer gemeinsam genutzten Maschine /home/you/public/report.pdf öffnen, während ls /home/you abgewiesen wird. Vor dem Eigentümer ist nichts verborgen; die Namen lassen sich von außen nur nicht aufzählen.
  • Bei einer Datei ist es nahezu nutzlos. Ein Shell-Skript auszuführen heißt, dass ein Interpreter die Datei öffnet und liest, also scheitert Ausführen ohne Lesen; nur eine übersetzte Binärdatei, die der Kernel selbst lädt, läuft weiterhin. War ein Skript gemeint, das andere starten können, wollten Sie 755.

Auch zu 711 sagt der Rechner nichts, weil es enger als 755 ist und nicht weiter: es gewährt nichts, was 755 nicht auch gewährt. Die Nachbarn tauchen aus demselben Grund auf — 751 gibt der Gruppe das Auflisten, das Anderen verwehrt bleibt, und 700 entzieht selbst das Durchgehen, was ein Verzeichnis für ein einziges Konto braucht.

777 und 1777: ein Bit Unterschied und nicht derselbe Rat

Die beiden Modi, die ein gemeinsam genutztes Verzeichnis anzieht, unterscheiden sich in einem einzigen Bit, und dieses Werkzeug antwortet darauf mit Absicht verschieden. 777 ist rwxrwxrwx und kommt als Gefahr markiert zurück; 1777 ist rwxrwxrwt, kommt als schlichter Hinweis zurück und ist einer der voreingestellten Modi oben — es ist der Modus, den /tmp tatsächlich hat.

  • 777 — jede Ziffer ist 4+2+1: Lesen, Schreiben und Ausführen für den Eigentümer, die Gruppe und alle übrigen. Es bleibt nichts, was noch etwas schützt: jedes Konto kann die Datei überschreiben, und jedes Konto kann in einem Verzeichnis mit diesem Modus einen Eintrag löschen oder ersetzen. Es ist der Reflex-Fix für ein Rechteproblem und tauscht fast immer ein kleines Problem gegen ein echtes.
  • 1777 — dieselben neun Bits plus das Sticky-Bit, das Löschen und Umbenennen eines Eintrags nur dessen eigenem Eigentümer erlaubt. Diese eine Einschränkung macht es sicher, ein Verzeichnis für alle beschreibbar zu lassen, und deshalb funktioniert /tmp: jeder darf dort eine Datei anlegen, und niemand darf die eines anderen entfernen.

Der Unterschied hält nur, wo Andere auch ausführen dürfen, und darin ist das Werkzeug streng. 1666 ist rw-rw-rwT — das Sticky-Bit gesetzt, wo keine Gruppe Ausführen hat —, und nichts dieser Form kann ein brauchbares Verzeichnis sein, also schützt das Sticky-Bit nichts und der Modus wird genau wie 666 mit voller Schärfe als für alle schreibbar markiert. Das große T sagt dasselbe in einem Zeichen.

Also: ein Verzeichnis, das geteilt werden muss, will 1777, besser noch 775 und die richtige Gruppe; und eine Datei, die sich nicht öffnet, ist fast immer ein Eigentumsproblem und kein Fall für 777.

Häufig gestellte Fragen

Was ist der Unterschied zwischen 644 und 755?
644 ist Lesen und Schreiben für den Eigentümer und nur Lesen für alle anderen — der übliche Modus einer gewöhnlichen Datei. 755 ergänzt Ausführen für alle drei Gruppen, was ein Programm zum Laufen und ein Verzeichnis zum Betreten braucht. Nehmen Sie 644 für Dokumente und Quelldateien, 755 für Skripte und Verzeichnisse.
Warum zeigte mein Modus ein großes S oder T?
Weil ein Sonderbit auf einer Gruppe gesetzt wurde, die kein Ausführungsrecht hat. Ein kleines s oder t bedeutet, dass Sonderbit und Ausführen beide aktiv sind; die große Form bedeutet, dass das Sonderbit aktiv ist, Ausführen aber nicht — meist ein Zeichen dafür, dass der Modus nicht der beabsichtigte ist. So ist 4644 (rwSr--r--) setuid auf einer Datei, die niemand ausführen kann.
Was macht chmod 777 wirklich, und warum ist davon abzuraten?
Es gewährt Eigentümer, Gruppe und allen anderen Lesen, Schreiben und Ausführen — vollen Zugriff für jedes Konto des Systems. Davon ist abzuraten, weil es sämtliche Schutzmaßnahmen auf einmal entfernt: Eine Datei, in die jeder schreiben kann, kann jeder manipulieren, und ein Verzeichnis, in das jeder schreiben kann, ist eines, in das jeder Dateien legen kann. Fast jeder Fall, der nach 777 greift, löst sich mit 755 oder 644 und der richtigen Eigentümerschaft.
Muss die führende Ziffer da sein?
Nein. Wenn kein Sonderbit gesetzt ist, besteht der Modus aus nur drei Ziffern — 755, nicht 0755 —, und genau das zeigt dieses Werkzeug. Eine führende Null wird akzeptiert und bedeutet dasselbe; eine führende 4, 2 oder 1 schaltet setuid, setgid beziehungsweise das Sticky-Bit ein.
Kann ich eine Zeile direkt aus ls -l einfügen?
Ja. Fügen Sie das zehn Zeichen lange Rechtefeld ein, etwa -rwxr-xr-x oder drwxr-xr-x; das Werkzeug entfernt das führende Typzeichen und liest den Rest. Der Typ (Datei, Verzeichnis, Link) ist kein Recht und chmod kann ihn nicht ändern, deshalb wird er ignoriert.
Wird etwas von dem, was ich eingebe, an einen Server gesendet?
Nein. Das ganze Werkzeug ist Arithmetik, die in Ihrem Browser läuft. Nichts wird hochgeladen, protokolliert oder gespeichert — deshalb funktioniert es auch ganz ohne Netzverbindung.
Was macht chmod 711?
Es gibt dem Eigentümer alles und der Gruppe wie allen übrigen nur Ausführen — rwx--x--x. Bei einem Verzeichnis heißt das, dass sie zu einem ihnen schon bekannten Pfad hindurchgehen, aber nicht auflisten können, was darin liegt; genau das will ein Heimatverzeichnis auf einer gemeinsam genutzten Maschine meist. Bei einer Datei nützt es nichts: ein Shell-Skript muss von seinem Interpreter gelesen werden, um zu laufen, also scheitert Ausführen ohne Lesen einfach.
Was ist der Unterschied zwischen chmod 777 und chmod 1777?
Ein Bit — das Sticky-Bit, geschrieben als führende 1, das das letzte Zeichen von x zu t macht. Beide geben jedem Konto Lesen, Schreiben und Ausführen; 1777 erlaubt zusätzlich nur dem Eigentümer eines Eintrags, ihn zu löschen oder umzubenennen. Deshalb markiert dieses Werkzeug 777 als fast nie richtig und nennt 1777 den Standardmodus eines gemeinsam genutzten Verzeichnisses wie /tmp.
Warum kommen neue Dateien als 644 und neue Verzeichnisse als 755 heraus?
Wegen der umask. Ein Programm, das eine Datei erzeugt, verlangt 666, eines, das ein Verzeichnis erzeugt, 777, und die umask streicht davon Bits, noch bevor die Datei existiert. Der üblichen Wert 022 entzieht der Gruppe und Anderen das Schreiben, sodass 644 und 755 übrig bleiben. Führen Sie umask in einer Shell aus, um Ihren zu sehen: 002 ergibt 664 und 775, 077 ergibt 600 und 700.
Was bedeutet rwxr-xr-x?
Es ist 755 ausgeschrieben. Lesen Sie es in Dreierschritten: rwx ist der Eigentümer, mit Lesen, Schreiben und Ausführen; r-x ist die Gruppe, mit Lesen und Ausführen, aber ohne Schreiben; r-x noch einmal sind alle übrigen. Ein Bindestrich bedeutet, dass dieses Recht aus ist. Fügen Sie die Kette hier in das Feld „Symbolisch“ ein, dann zeigt das Feld „Oktal“ die 755.

Verwandte Werkzeuge