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!

Der Aufruf mit Root-Rechten (sudo chmod ...) kann das System zerstören!

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

Aufruf

Die allgemeine Syntax lautet [1]:

chmod [Option] Modus Datei 

oder

chmod [Option] Oktal-Modus Datei 

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

Modi

Die Rechte einer Datei oder eines Verzeichnisses können für drei verschiedene Typen von Benutzern vergeben werden:

Benutzergruppen für chmod
GruppeBeschreibung
uBesitzer der Datei
gGruppe der Datei
oAndere Benutzer
aAlle Gruppen

Will man Rechte für alle drei gleichzeitig setzen, kann man den Buchstaben a auch wegfallen lassen.

Jede Gruppe kann individuell folgende Rechte erhalten:

Rechte für chmod
RechtBeschreibung
r Leserechte
w Schreibrechte
x Ausführungsrechte
s SUID-Bit (wird weiter unten noch erklärt)

Diese Rechte werden mit einem vorangestellten + einer Datei oder einem Verzeichnis gegeben und mit einem -' entzogen. Mit einem = werden vorhandene Rechte entfernt und nur die angegebenen gesetzt. Mehrere Operationen dürfen direkt aneinander angehängt werden.

Beispiele

chmod a+x Datei   # Eine Datei für alle Nutzer ausführbar machen
chmod u+r Datei   # Der Eigentümer darf zusätzlich zu vorhandenen Rechten lesen.
chmod a+w Datei   # Alle dürfen zusätzlich zu vorhandenen Rechten schreiben
chmod g-w Datei   # Der Gruppe werden die Schreibrechte entzogen
chmod u=rwx Datei # Der Eigentümer darf lesen, schreiben und ausführen
chmod g=rw Datei  # Die Gruppe darf __nur__ lesen und schreiben 

⚓︎

Oktal-Modi

Oktal-Modi von chmod
ModusBeschreibung
4 Leserechte
2 Schreibrechte
1 Ausführungsrechte

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 ein 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. Der SUID-Bit kann mit dieser Methode nicht gesetzt werden.

Hinweis:

Damit Verzeichnisse geöffnet werden können, muss man "Ausführungs"rechte für sie besitzen.

Beispiele

chmod 644 Datei   # Der Eigentümer darf lesen und schreiben, alle anderen nur lesen. 

Die 6 kommt durch die Addition von 4 und 2 zustande, genau wie die 7 im nächsten Beispiel durch 4 + 2 + 1.

chmod 744 Datei   # Der Eigentümer darf lesen, schreiben und ausführen, alle anderen nur lesen. 

Anwendung an einem Beispiel

 ls -l 

Ausgabe:

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. Hier soll sie von allen gelesen und ausgeführt werden dürfen:

chmod +rx Datei1.sh
ls -l 

Ausgabe:

insgesamt 4
-rwxr-xr-x  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

Anders sieht es mit den Schreibrechten aus. Wenn man versucht, durch ein -w der Datei2.txt die Schreibrechte für alle zu entziehen, wird dies scheitern. Diese werden bei symbolischer Schreibweise immer nur dem Besitzer der Datei gegeben oder entzogen.

chmod -w Datei2.txt
ls -l 

Ausgabe

insgesamt 4
-rwxr-xr-x  1 det det    0 2005-07-07 10:41 Datei1.sh
-r--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

Wenn man dies ändern will, greift man auf die oktale Schreibweise zurück:

chmod 444 Datei2.txt
ls -l 

Ausgabe:

insgesamt 4
-rwxr-xr-x  1 det det    0 2005-07-07 10:41 Datei1.sh
-r--r--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

Optionen

Optionen von chmod
OptionBeschreibung
-R oder--recursive Ändert die Zugriffsrechte von Dateien und Verzeichnissen rekursiv
-v oder --verbose Ausgabe einer Diagnose für jede verarbeitete Datei
-c oder --changes Wie --verbose, aber nur bei wirklichen Änderungen
-f oder --silent, --quiet Unterdrücken der meisten Fehlermeldungen

Mehr Optionen erhält man mit

chmod --help 

oder in den Manpages.

⚓︎

SUID-Bit

Achtung!

Das SUID-BIT sollte nur gesetzt werden wenn es unbedingt notwendig ist!

Hinweis:

Das SUID-Bit funktioniert nicht bei Skripten!

Manchmal braucht man unter Linux die Möglichkeit, Benutzer Programme ausführen zu lassen, die sie eigentlich nicht ausführen dürfen (z.B. Passwort ändern, d.h. Schreibrechte auf die Datei /etc/shadow). Deswegen hat Linux die Option "Set User ID", oder auch kurz SUID-Bit. Ist das SUID-Bit gesetzt, wird eine ausführbare Datei nicht mit der Berechtigung des Benutzers, sondern mit der Berechtigung des Eigentümers der Datei ausgeführt.

ls -l /usr/bin/passwd
  -rwsr-xr-x    1 root     root        25692 Mar  8  2001 /usr/bin/passwd
     ^
     |
     \_______ s .. Das setuid-Bit. Normalerweise steht statt des s ein x... 

SUID-Bit setzen:

chmod u+s Datei 

SGID-Bit

Mit dem Set Group ID Bit kann man gemeinsame Ordner einrichten. Ist dieses Bit gesetzt (mit chmod g+s OrdnerName), vererbt sich die Benutzergruppe beim Erstellen eines neuen Unterordners. Man kann auf diese Weise einen gemeinsamen Ordner einrichten, in dem mehrere Benutzer Dateien/Ordner erstellen können. Allerdings werden die Zugriffsrechte nicht vererbt, sondern richten sich weiterhin nach der aktuell eingestellten umask. Die Vorgehensweise:

  1. Alle Benutzer, die Zugriff erhalten sollen, in eine gemeinsame Benutzergruppe stecken, siehe Benutzer und Gruppen. Es empfiehlt sich die Benutzergruppe users dafür zu verwenden.

  2. Ordner und alle Unterordner (Parameter -R für rekursiv) einrichten

    1. Gruppe setzen:

      sudo chgrp -R GRUPPENNAME ORDNERNAME 
    2. SGID setzen:

      chmod -R g+srwx ORDNERNAME 

Nachprüfen kann man das mit einem ls -la:

  -rwxr-sr-x    1 root     tty          9276 Mar  8  2001 /usr/bin/wall
        ^
        |
        \__ s .. Group ID ist gesetzt 

Hinweis:

Um nicht nur die Benutzergruppe sondern auch die Benutzerrechte automatisch zu vererben, ist noch die Konfiguration von ACL (Abschnitt „Verzeichnisse“) notwendig.

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 27. Mai 2010 14:48 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell