chmod
Der Shell-Befehl chmod ändert die Zugriffsrechte von Dateien und Verzeichnissen, sofern der aufrufende Benutzer Eigentümer oder Benutzer "root" ist.
Syntax
chmod versteht zwei verschiedene Arten von Befehlen.
Bestimmung der Zugriffsrechte über Ziffern
Zum Setzen der Zugriffsrechte werden drei- oder viertstellige Oktalzahlen verwendet. Diese errechnen sich folgendermassen.
Oktalzahl | Ausgabe bei "ls -l" | Zugriffsrechte | |
---|---|---|---|
1 | --- | keine | |
2 | --x | ausführen | |
3 | entspricht 2 + 1 | -w- | schreiben |
4 | -wx | schreiben und ausführen | |
5 | entspricht 4 + 1 | r-x | lesen und ausführen |
6 | entspricht 4 + 2 | rw- | lesen und Schreiben |
7 | entspricht 4 + 2 + 1 | rwx | alle (lesen, schreiben, ausführen) |
Bestimmung der Zugriffsrechte über Buchstaben
u | (user) Eigentümer |
g | (group) Gruppe |
o | (others) alle anderen |
r | (read) lesen |
w | (write) schreiben |
x | (execute) ausführen |
s | Setzen des setUID bzw. setGID-Bit |
t | Setzen des Sticky Bit |
Zum Setzen der Zugriffsrechte werden Plus-, Minus- und Gleichheitszeichen verwendet.
Beispiele
Vorgang | mit Ziffern | mit Buchstaben |
---|---|---|
Einer Gruppe das Lese- und Schreibrecht für die Datei "file" erteilen. | chmod g+rw file | |
Allen Benutzern, die nicht Eigentümer oder Gruppenmitglieder sind alle Zugriffsrechte für die Datei "file" entziehen. | chmod o-rwx file | |
Die beiden obigen Befehle lassen sich auch kombinieren: | chmod g+rw,o-rwx file | |
Erteilen aller Rechte für den Eigentümer, die Gruppenmitglieder und alle anderen für das Verzeichnis "directory". | chmod ugo=rxw directory | |
chmod 644 file | chmod u-rw,go=r file | |
chmod 777 file | chmod a=rwx file |
Verwendung
Entzug der Schreibrechte für die Gruppe für das Verzeichnis "directory" und rekursiv alle darin enthaltenen Dateien und Unterverzeichnisse.
$ chmod -R g-w directory
Da das x-flag für Verzeichnisse zwingend gesetzt sein muss, um hineinwechseln zu können, führt "chmod -R 600 directory" zur Fehlermeldung "Keine Berechtigung". Bevor nämlich der Befehl die erste Datei erreicht, hat er bereits die Rechte von "directory" selbst auf 600 gesetzt und kann deshalb nicht mehr hineinwechseln. Um diese Hindernis zu umgehen, sucht folgender Befehl im Unterverzeichnis zuerst nach allen gewöhnlichen Dateien, auf die der Befehl "chmod 600" angewendet werden soll. Das Verzeichnis und die darin enthaltenen Unterverzeichnisse bleiben dabei unangetastet.
$ find directory -type f -exec chmod 600 {} \;