chmod-Rechner
Rechnet Unix-Dateirechte zwischen Oktal (755), symbolisch (rwxr-xr-x) und einem Kästchenraster um — mit setuid, setgid und dem Sticky-Bit.
| Klasse | Lesen | Schreiben | Ausführen |
|---|---|---|---|
| Eigentümer | |||
| Gruppe | |||
| Andere |
chmod 644 filechmod u=rw,g=r,o=r file-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.
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.