# Chmod

chmod (von englisch: change mode) ist ein Kommandozeilenprogramm unter Unix, mit dem sich die klassischen Unix-Dateirechte verändern lassen. Das chmod-Kommando gibt es bereits seit der ersten Version des AT&T-Unix (Anfang der 1970er Jahre).
Die Attributsänderungen lassen sich nur von dem Besitzer der Datei oder dem root-Benutzer durchführen.

## Benutzung

Das Programm wird in der Unix-Shell wie folgt benutzt:
Es sind zunächst Optionen möglich; options kann dabei -v für ausführliche Ausgaben (verbose) und -R für rekursives Durchgehen aller Unterverzeichnisse sein.
mode steht für die auf die Datei oder Dateien anzuwendende Rechtemaske. Diese kann in einer numerischen Notation oder einer symbolischen Notation geschehen.

### Symbolische Notation

chmod ermöglicht eine Kurzschreibweise, um Dateirechte einfach zu kombinieren. Dabei steht u für den Eigentümer (user), g für die Gruppe (group) und o für alle anderen Benutzer (other). Schließlich gibt es noch a, welches alle drei Benutzergruppen umschließt (all). Um zum Beispiel allen möglichen Benutzern die Ausführrechte einer Datei zu geben, reicht ein chmod a+x dateiname.
Diese Benutzerklassen werden mit drei möglichen Operatoren mit den Dateirechten verknüpft:
* + fügt die entsprechenden Dateirechte den entsprechenden Benutzerklassen hinzu (überschreibt nur die betroffenen Rechte)
* - entzieht den entsprechenden Benutzerklassen die entsprechenden (und betroffenen) Dateirechte
* = setzt für die Benutzerklassen die entsprechenden Dateirechte neu, ungeachtet ihrer vorherigen Rechte am Objekt (override).
Anschließend werden die entsprechenden Dateirechte angegeben. Dies sind r, w, x, s und t entsprechend der klassischen symbolischen Notation. Zusätzlich gibt es noch das spezielle Zeichen X (special execute). Dabei handelt es sich nicht um ein Dateirecht, sondern um einen Ersatz für x, welches bei Verzeichnissen das Ausführ-Recht setzt (ungeachtet, ob sie es vorher gesetzt hatten) und nur bei den Dateien ein Ausführ-Recht setzt, die bereits ein Ausführ-Recht bei mindestens einer Benutzerklasse gesetzt haben. Es ist daher nur dann sinnvoll, wenn es mit + und der -R-Option genutzt wird, um den entsprechenden Benutzerklassen Zugriff zu einem Verzeichnisbaum zu geben, ohne normalen Dateien (keinen Programmen) das Ausführ-Bit zu setzen, was normalerweise beim Aufruf von chmod -R a+rx passieren würde. Mit X hingegen kann man chmod -R a+rX benutzen.

### Numerisch

Die numerische Benutzung des chmod ist folgendermaßen aufgebaut:
chmod SUGO beispiel.txt
S steht dabei für das auch sogenannte Sticky-Bit, es hat üblicherweise den Wert 0 U … für den Benutzer (englisch user) oder auch Besitzer (und Eigentümer) der Datei G … für die Gruppe und O … für das englische other(s), also alle anderen Benutzer
Die vier oktalen Ziffern nach dem Befehl chmod tragen für die Stellen von S, U, G oder O je einen Wert von 0 bis 7. Bei U, G und O steht 4 für lesen, 2 für schreiben und 1 für ausführen.
| # | Berechtigung | rwx |
| 7 | Voll | 111 |
| 6 | Lesen und Schreiben | 110 |
| 5 | Lesen und Ausführen | 101 |
| 4 | Nur Lesen | 100 |
| 3 | Schreiben und Ausführen | 011 |
| 2 | Nur Schreiben | 010 |
| 1 | Nur Ausführen | 001 |
| 0 | Keine | 000 |
Das Sticky-Bit ergibt ein unterschiedliches Verhalten bei Verzeichnissen und Dateien. Bei Verzeichnissen erzeugt in den meisten modernen UNIX-Implementierungen ein gesetztes sticky-Bit die Eigenschaft, dass (bei entsprechenden übrigen Rechten) jeder Benutzer Dateien in das Verzeichnis schreiben darf, aber nur seine eigenen bearbeiten oder löschen kann. Ebenfalls möglich sind die Werte 4 und 2, die als Dateieigentümer den Verzeichniseigentümer bzw. die Verzeichnisgruppe für Dateien eintragen, so dass z. B. Benutzer unterschiedlicher primärer Gruppenzugehörigkeit sich leicht die Dateien in einem Verzeichnis teilen können.
| # | Berechtigung |
| 4 | SUID (Setze User des Verzeichnisses für Dateien) |
| 2 | SGID (Setze Gruppe des Verzeichnisses für Dateien) |
| 1 | Nur Eigentümer (und Superuser) darf Dateien löschen und umbenennen |
| 0 | Keine |
Insbesondere für ausführbare Dateien stellen das SUID/SGID-Bit ein Sicherheitsrisiko dar, da es den Kontext des Datei-Eigentümers bzw. der Gruppe statt den des Ausführenden setzt. Die ursprüngliche Bedeutung des Sticky-Bits, ausführbare Dateien im Arbeitsspeicher zu halten, um einen Performanzgewinn zu erzeugen, ist kaum noch von Bedeutung.

### Beispiele

Erklärung:
* setzt die Rechte der Datei „MyFile“ des Besitzers (der Datei) auf Lesen (r) und Schreiben (w), löscht ggf. dabei das Ausführrecht, weil nicht gesetzt. Diese Rechte sind zum Beispiel sinnvoll, wenn ein Benutzer ein Dokument in einem Computer- oder Gruppenweit sichtbaren Verzeichnis schützen möchte. Für ein Verzeichnis oder ausführbares Programm des Benutzers sind diese Rechteeinstellungen nicht sinnvoll, da er es anschließend nicht mehr auflisten kann (das Ausführungsrecht fehlt).
* entzieht der (besitzenden) Gruppe das Recht auf Lesen (r) und Ausführen (x), berührt aber nicht das Schreibrecht. Es bleibt je nach vorhergehendem Zustand für die Gruppe möglicherweise das Recht auf Schreiben (w), sodass die Datei als "Inbox" verwendet werden könnte. Ein Schreiben mit einem interaktiven Editor wird nicht möglich sein, aber durch Gruppenmitglieder mit einem Kommando wie echo Inhalt > MyFile.
* fügt für alle Anderen das Recht auf Lesen (r) hinzu (falls noch nicht vorhanden).
* Bei dem numerischen Verfahren werden allen bis auf den Eigentümer der Datei alle Rechte entzogen, der Eigentümer kann die Datei jedoch lesen (4), beschreiben (2) und ausführen (1).
* Fügt der besitzenden Gruppe das Recht auf Schreiben (w) hinzu und entzieht allen anderen, die nicht die Datei als Eigentümer oder Gruppe besitzen, das Recht auf Ausführen.

## Grafische Alternativen

In vielen grafischen Dateimanagern und FTP-Clients, zum Beispiel Konqueror/KDE, Nautilus/GNOME, lassen sich die Dateirechte grafisch bearbeiten.