ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

chmod

Verändert die Zugriffsrechte von Dateien.

Aufruf

chmod [Option] Modus Datei

oder

chmod [Option] Oktal-Modus Datei

Modi

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

u user Besitzer der Datei
g group Gruppe der Datei
o other Andere Benutzer

Will man Rechte für alle drei gleichzeitig setzen, fällt der Buchstabe einfach weg. Alternativ kann man auch ein a schreiben.

Jede Gruppe kann individuell folgende Rechte erhalten:

r read Leserechte
w write Schreibrechte
x eXecute Ausführungsrechte
s SUID-Bit (wird weiter unten noch erklärt)

Diese Rechte werden mit einem vorangestellten + einer Datei oder einem Verzeichniss 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 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 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

4 Leserechte
2 Schreibrechte
1 Ausführungsrechte

Die Rechte werden für den Dateibesitzer, die Dateigruppe und die Anderen separat addiert. An jeder Stelle bedeutet ein gesetzter Wert das 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.

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

det@datengrab:~/tmp/rechte$ 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 auf aus den Lese- (r, Read), den Schreib- (w, Write) und den Ausführungsrechten (x, eXecute). Wenn der Buchstabe gesetzt ist ist das Recht vorhanden.

Die Datei Datei1.sh darf nur der Besitzer lesen, beschreiben und ausführen. Wir wollen, dass alle sie lesen und ausführen dürfen:

det@datengrab:~/tmp/rechte$ chmod +rx Datei1.sh
det@datengrab:~/tmp/rechte$ ls -l
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 Verzeichniss

Anders sieht es mit den Schreibrechten aus. Wenn wir versuchen 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.

det@datengrab:~/tmp/rechte$ chmod -w Datei2.txt
det@datengrab:~/tmp/rechte$ ls -l
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 Verzeichniss

Wenn wir dies ändern wollen greifen wir auf die oktale Schreibweise zurück:

det@datengrab:~/tmp/rechte$ chmod 444 Datei2.txt
det@datengrab:~/tmp/rechte$ ls -l
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 Verzeichniss

Parameter

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

mehr Parameter mit

chmod --help

SUID-Bit

⚓︎

Setzen von SUID-BIT nur wenn es __unbedingt__ notwendig ist!

Manchmal braucht man unter Linux die Möglichkeit User Sachen machen zu lassen, die sie eigentlich nicht dürfen (z.B. Passwort ändern, d.h. Schreibrechte auf /etc/shadow). Deswegen hat Linux die Option "Set User ID", kurz SUID-Bit oder auch Sticky-Bit. Ist der Sticky-Bit gesetzt wird eine ausführbare Datei nicht mit der Berechtigung vom User, sondern mit der Berechtigung vom Eigentümer der Datei ausgeführt (der als user für die Datei eingetragen ist).

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 dem s ein x...

SUID-Bit setzten:

chmod u+s Datei

Analog dazu gibt es noch den "Set Group ID". Ist dieser gesetzt wird die Datei mit den Rechten der Eigentümergruppe ausgeführt.

  -rwxr-sr-x    1 root     tty          9276 Mar  8  2001 /usr/bin/wall
        ^
        |
	\__ s .. set groupid.

Mit disem Befehl sucht mal alle Dateien mit Sticky-Bit:

find /usr -perm +6000 -type f

Referenzen findet man in:

man chmod

SGID-Bit

Mit dem Set Group ID Bit kann man gemeinsame Ordner einrichten. Ist diese Bit gesetzt (mit chmod g+s OrdnerName) dann vererbt sich die Benutzergruppe beim Erstellen eines neuen Unterordners mit. Möchte man einen gemeinsamen Ordner einrichten, in dem mehrere Benutzer Dateien/Ordner erstellen können, dann muss man wie folgt vorgehen:

  1. Alle Benutzer, die Zugriff erhalten sollen, in eine gemeinsame Benutzergruppe stecken, siehe Benutzer und Gruppen.

  2. Ordner einrichten

    1. Gruppe setzten:

      sudo chown .GRUPPENNAME ORDNERNAME
    2. SGID setzten:

      chmod g+srwx ORDNERNAME

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 anderen Rechte benötigen, kann man hier nicht mit einem Befehl arbeiten, aber find hilft hier:

cd /verzeichnis 
find  -type d -exec chmod 755 {} \;
find  -type f -exec chmod 644 {} \;

  • ["Kategorie/Shell"]

Diese Revision wurde am 29. März 2007 20:40 von cebe erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Shell