HOWTO: chmod, Unix-Dateirechte verstehen und richtig setzen
Auszug: http://de.wikipedia.org/wiki/Chmod
chmod (von englisch: change mode) ist ein Kommandozeilenprogramm unter Unix, mit dem sich die klassischen Unix-Dateiattribute (Zugriffsrechte) verändern lassen. Das chmod-Kommando gibt es bereits seit der ersten Version des AT&T-Unix (Ende der 1970er Jahre).
Die Attributsänderungen lassen sich nur von dem Besitzer der Datei oder dem root-Benutzer durchführen.
Ruft man die chmod Manpage auf wird man folgendes lesen können:
NAME
chmod - change file mode bitsSYNOPSIS
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
Im Laufe dieses Artikels werde ich darauf eingehen wie man die Rechtemaske mit Hilfe der symbolischen Notation oder der numerischen Notation (Oktalnotation) setzen kann.
Es gibt 3 Benutzerklassen:
1. Eigentümer (Owner)
2. Gruppe (Group)
3. Sonstige (World, Others)
Ebenfalls gibt es 3 grundlegende Rechte:
1. Lesen (Read) - r [R-Bit]
2. Schreiben (Write) - w [W-Bit]
3. Ausführen (Execute) - x [X-Bit]
Legt man in einem Verzeichnis neue Dateien oder Unterverzeichnisse an, werden die Rechte nicht vererbt. Sie müssen ggf. angepasst werden. Dies beruht darauf, dass keine ACL verwendet wird.
Ich möchte nun in der Unix-Shell die aktuellen Rechte aller Dateien eines Verzeichnises einsehen. Ich befinde mich in diesem Verzeichnis und rufe folgendes auf:
# ls -l
Als Rückmeldung erhalte ich nun zb diese Liste:
drwxrwxrwx 6 root root 4.0K 2008-11-19 18:59 .
drwx------ 9 root root 4.0K 2009-06-30 10:51 ..
drwxrwxrwx 2 root root 4.0K 2008-11-19 18:59 doc
-rw-r--r-- 1 root root 631 2008-05-07 14:19 Makefile.am
-rw-r--r-- 1 root root 22K 2008-11-19 10:03 Makefile.in
Wir lassen . und .. außer Acht und sehen uns die 3 anderen Zeilen an. Ganz links sehen wir die aktuellen Dateirechte der 3 Eintäge. 'doc' ist ein Verzeichnis, 'Makefile.am' und 'Makefile.in' sind Dateien. Dies erkennt man, da bei dem Verzeichnis vor den Rechten ganz links ein 'd' steht und bei den beiden Dateien ein '-'.
Sehen wir uns nun die Datei 'Makefile.am' an. Die Rechtemaske sieht wie folgt aus: rw-r--r--
Trennen wir diese Zeichenkette in 3 Teile auf:
rw-
r--
r--
Wir können daraus folgendes auslesen:
Eigentümer: Lesen [JA], Schreiben [JA], Ausführen [NEIN]
Gruppe: Lesen [JA], Schreiben [NEIN], Ausführen [NEIN]
Sonstige: Lesen [JA], Schreiben [NEIN], Ausführen [NEIN]
Würde man diese Rechtemaske nun oktal darstellen, würde sie so aussehen: 644
Oktale Notation
1. Lesen (Read) - 4
2. Schreiben (Write) - 2
3. Ausführen (Execute) - 1
Hierzu 2 Beispiele:
Dateirecht: 755
Symbolische Notation: rwxr-xr-xEigentümer: Lesen [JA], Schreiben [JA], Ausführen [JA]
Gruppe: Lesen [JA], Schreiben [NEIN], Ausführen [JA]
Sonstige: Lesen [JA], Schreiben [NEIN], Ausführen [JA]Bedeutung:
Typische Dateirechte für eine ausführbare Datei (ein Programm oder ein Script). Nur der Dateinhaber kann die Datei ändern, alle anderen können lesen und ausführen.
Dateirecht: 664
Symbolische Notation: rw-rw-r--Eigentümer: Lesen [JA], Schreiben [JA], Ausführen [NEIN]
Gruppe: Lesen [JA], Schreiben [JA], Ausführen [NEIN]
Sonstige: Lesen [JA], Schreiben [NEIN], Ausführen [NEIN]Bedeutung:
Mögliche Dateirechte für eine nicht ausführbare Datei (z.B. ein Textdokument), welche von Inhaber und Gruppe bearbeitet werden kann, vom Rest allerdings nur gelesen.
Besitzer/Gruppe
Sehen wir und nochmal folgende Zeile an:
-rw-r--r-- 1 root root 631 2008-05-07 14:19 Makefile.am
Wir finden in dieser Zeile ebenfalls 2x 'root'. Das erste 'root' sagt uns das der Besitzer der Datei 'root' heißt. Das zweite 'root' wiederum sagt uns das die Datei ebenfalls der Gruppe 'root' gehört.
Rechte zuweisen - Oktale Notation
Weisen wir der Datei 'Makefile.am' nun andere Rechte zu. Wir möchten zB. das der Eigentümer auf die Datei Lese und Schreib Zugriff hat, aber weder Gruppe noch sonst jemand darauf zugreifen kann. Wir weisen der Datei also das Recht 600 zu.
# chmod 600 Makefile.am
Wir könnten auf allen Dateien und Ordnern im Verzeichnis dieses Recht zuweisen:
# chmod 600 *
Möchten wir sogar, das alle Unterverzeichnisse und darin enthaltene Dateien auch dieses Recht zugewiesen bekommen, führen wir folgendes aus:
# chmod -R 600 *
Rechte zuweisen - Symbolische Notation
Mit der symbolischen Notation ist die Zuweisung ein kleines Bisschen komplizierter, allerdings können damit explizit einzelne Rechte für Eigentümer, Gruppen etc. hinzugefügt oder entfernt werden. Dazu gibt es folgende Regeln:
Betroffene Klasse:
u - user - Eigentümer
g - group - Gruppe
o - others - Andere
a - all - alle, equivalent zu ugo
Verwendeter Operator:
+ Fügt den angegebenen Modus der entsprechenden Klasse hinzu
- Entfernt den angegebenen Modus für die entsprechenden Klasse
= Setzt den exakten Modus für die entsprechende Klasse
Modi (Rechte):
r - read - Lesen, Verzeichnisinhalte auslesen
w - write - Schreiben
x - execute - Ausführen, Verzeichnis öffnen
Beispiele:
Fügt der Datei Lese- und Schreibrechte für die Klassen Eigentümer und Gruppe zu:
# chmod ug+rw Makefile.am
Nimmt allen Klassen jegliche Dateirechte weg:
# chmod a-rwx Makefile.am
Weist den Klassen Eigentümer und Gruppe genau die Rechte Lesen und Ausführen zu.
# chmod ug=rx Makefile.am