ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

chmod

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Achtung!

Ändere außerhalb des Benutzerverzeichnisses (und /tmp) keine Zugriffsrechte, wenn du nicht weißt, was du tust!

Mit chmod verändert man die Zugriffsrechte von Dateien. Dies funktioniert jedoch nur bei Dateisystemen, welche die Linux-Rechteverwaltung unterstützen (z. B. ext*, reiser, xfs, nicht aber FAT und NTFS).

Aufruf

Die allgemeine Syntax lautet [1]:

chmod [Optionen] Modus Datei/Verzeichnis [Datei/Verzeichnis 2 [...]] 

Neben den hier aufgeführten Beispielen findet man in der Manpage von chmod weitere Informationen.

Modi

Es gibt zwei Arten, wie Zugriffsrechte gesetzt (und angezeigt) werden können:

  • symbolischer Modus: Den Benutzerkategorien und Zugriffsrechten sind Buchstaben zugeordnet. Mit einer Kombination dieser Buchstaben wird angegeben, welche Rechte gesetzt oder entfernt werden sollen.

  • Oktal-Modus: Die Rechte werden in Form einer dreistelligen Oktal-Zahl angegeben, wobei jede Ziffer für die Rechte einer Benutzerkategorie steht.

Die Rechte einer Datei oder eines Verzeichnisses können für drei verschiedene Benutzerkategorien getrennt festgelegt werden:

Benutzertyp symbolischer Modus Oktalmodus
Besitzer der Datei u 1. Ziffer
Gruppe der Datei g 2. Ziffer
Andere Benutzer o 3. Ziffer

Es gibt folgende Zugriffsrechte (ausführliche Informationen zu der Bedeutung der verschiedenen Zugriffsrechte findet man im Artikel Rechte):

Recht symbolischer Modus Oktalmodus
Leserechte r 4
Schreibrechte w 2
Ausführungsrechte x 1
Setuid/Setgid (Details) s siehe Experteninfo unten
Sticky-Bit (Details) t

Symbolischer Modus

Der symbolische Modus besteht aus drei Teilen:

  • Zu Beginn stehen die Benutzerkategorien, denen die Rechte gesetzt bzw. entzogen werden sollen. Hier können mehrere Buchstaben kombiniert werden (z. B. ug für Benutzer und Gruppe) oder auch a angegeben werden (entspricht ugo)

  • Dann folgt der Operator: Mit + werden die Rechte gesetzt, mit - entzogen, mit einem = werden nur die explizit angegebenen Rechte gesetzt und die restlichen entzogen.

  • Zum Schluss folgen die Rechte. Auch hier können die jeweiligen Buchstaben einfach aneinandergehängt werden.

Experten-Info:

Der erste Teil kann auch weggelassen werden. Das entspricht einem a, mit der Ausnahme, dass in der umask gesetzte Bits ignoriert werden. Beispiel:

ls -l 
-rw-r--r-- 1 user user 0 Sep 20 02:06 datei

chmod +rwx datei
ls -l 
-rwxr-xr-x 1 user user 0 Sep 20 02:06 datei*

chmod a+rwx datei
ls -l 
-rwxrwxrwx 1 user user 0 Sep 20 02:06 datei*

chmod -rwx datei 
chmod: datei: new permissions are ----w--w-, not ---------

ls -l datei 
-----w--w- 1 user user  0 Sep 20 02:06 datei

Beispiele

Recht Bedeutung
a+x / ugo+x Eine Datei für alle Nutzer ausführbar machen.
u+r Der Eigentümer darf (zusätzlich zu vorhandenen Rechten) lesen.
a+w / ugo+w Alle dürfen zusätzlich zu vorhandenen Rechten schreiben.
g-w Der Gruppe werden die Schreibrechte entzogen.
o=r Andere Benutzer dürfen nur lesen, nicht schreiben oder ausführen.
g=rw Die Gruppe darf nur lesen und schreiben, ein eventuell vorhandenes Ausführungsrecht wird entfernt.
u+s Setzt das SetUID-Bit

⚓︎

Oktal-Modus

Die Rechte werden für den Dateibesitzer, die Dateigruppe und andere separat addiert. An jeder Stelle bedeutet ein gesetzter Wert, dass die Rechte gewährt und eine 0, dass sie entzogen werden. Die Rechte werden somit durch drei Stellen vollständig beschrieben; die erste Stelle gibt die Rechte des Eigentümers, die zweite die Rechte der Gruppe und die letzte Stelle die Rechte für alle Übrigen an.

Experten-Info:

Auch mit dem Oktalmodus können die Sonderrechte (SetUID / SetGID / Sticky) gesetzt werden: Dazu fügt man vorne eine weitere Ziffer hinzu. Hier steht für SetUID die 4, für SetGID die 2 und für Sticky die 1.

Beispiele

Zahl Bedeutung
644 Der Eigentümer darf lesen und schreiben, alle anderen nur lesen. (6 = 4 + 2)
744 Der Eigentümer darf lesen, schreiben und ausführen, alle anderen nur lesen. (7 = 4 + 2 + 1)
660 Eigentümer und Gruppe dürfen lesen und schreiben, der Rest nichts.
4755 Alle dürfen lesen und ausführen, der Eigentümer auch schreiben. Zusätzlich wird das SetUID-Bit gesetzt.

Anwendung an einem Beispiel

 ls -l 
insgesamt 4
-rwx------  1 det det    0 2005-07-07 10:41 Datei1.sh
-rw-rw-r--  1 det det    0 2005-07-07 10:41 Datei2.txt
drwxr-xr-x  2 det det 4096 2005-07-07 10:44 Verzeichnis

In diesem Beispiel befinden sich zwei Dateien und ein Verzeichnis. Am Anfang steht ein Block aus zehn Zeichen. Das erste zeigt an, um was für einen Dateityp es sich handelt. Bei einfachen Dateien steht dort ein - , bei Verzeichnissen ein d (directory), bei Verweisen ein l (link).

Danach folgen drei Blöcke mit jeweils drei Zeichen. Der erste Block steht für den Dateibesitzer, der zweite für die Gruppe und der dritte für alle anderen.

Jeder dieser Blöcke baut sich aus den Lese- (r, Read), den Schreib- (w, Write) und den Ausführungsrechten (x, eXecute) auf. Wenn der Buchstabe gesetzt ist, ist das Recht vorhanden.

Die Datei Datei1.sh darf nur der Besitzer lesen, beschreiben und ausführen. Sie soll von allen gelesen und ausgeführt werden dürfen:

chmod a+rx Datei1.sh
ls -l Datei1.sh 
-rwxr-xr-x  1 det det    0 2005-07-07 10:41 Datei1.sh

Nun werden

chmod a-w Datei2.txt
ls -l Datei2.txt 
-r--r--r--  1 det det    0 2005-07-07 10:41 Datei2.txt

Optionen

Optionen von chmod
OptionBeschreibung
-R, --recursive Ändert die Zugriffsrechte von Dateien und Verzeichnissen rekursiv, d.h. auch für Unterverzeichnisse und Dateien darin
-v, --verbose Ausgabe einer Diagnose für jede verarbeitete Datei
-c, --changes Wie --verbose, aber nur, wenn auch etwas geändert wird
-f, --silent, --quiet Unterdrücken der meisten Fehlermeldungen

Mehr Optionen erhält man mit chmod --help oder in der Manpage.

Rechte rekursiv setzen

In manchen Fällen möchte man für alle Dateien und Ordner in einem Verzeichnis die Rechte auf einmal setzen. Da Dateien und Ordner andere Rechte benötigen, kann man hier nicht mit einem Befehl arbeiten, aber find hilft hier:

find /verzeichnis/ -type d -exec chmod 755 {} +
find /verzeichnis/ -type f -exec chmod 644 {} + 

-type d bezieht sich hierbei auf "directory", also den Ordner, -type f auf "file", also die Dateien. Näheres dazu unter Shell/find


Diese Revision wurde am 20. September 2010 02:48 von maix erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell