Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

chmod - Zugriffsrechte ändern

&pagelevel(4)&pagelevel

(change file modes)


chmod ändert die Zugriffsrechte für Dateien.

Nur der Eigentümer der Datei oder der POSIX-Verwalter darf die Zugriffsrechte ändern. Das s-Bit für die Gruppe darf nur ein Benutzer setzen, dessen aktuelle Gruppennummer mit der Gruppennummer der Datei übereinstimmt, deren Zugriffsrechte verändert werden (siehe chgrp und newgrp).

Syntax


chmod [-R] modus datei ...

-R

(R - rekursiv)
chmod ändert rekursiv die Zugriffsrechte aller Dateien in allen angegebenen Verzeichnissen und deren Unterverzeichnissen.

modus

Mit modus geben Sie an, wie Sie die Zugriffsrechte für die angegebenen Dateien ändern wollen. Sie können modus auf zwei Arten definieren:

  • durch eine symbolische Angabe

  • durch eine absolute Angabe

datei

Name der Datei, für die Sie die Zugriffsrechte definieren oder ändern wollen. datei kann auch ein Dateiverzeichnis sein. Pro Aufruf können Sie mehrere Namen angeben.

Symbolische Angabe

[wer]darf[was][,[wer]darf[was]]...

wer

Mit wer geben Sie an, für wen Sie die Zugriffsrechte ändern wollen.


wer kann sein:
u (u - user) für Eigentümer
g (g - group) für Gruppe
o (o - other) für andere Benutzer
a (a - all) für ugo, d.h. für alle Benutzer
oder eine Kombination aus den Buchstaben u, g, o.


wer nicht angegeben:

Für wer gilt ugo, d.h. alle Benutzer. Die Zugriffsrechte für ugo werden mit Ausnahme der Bits der Schutzbit-Maske (siehe umask) gesetzt.

darf

Mit darf geben Sie an, ob Sie die angegebenen Zugriffsrechte erteilen, unverändert lassen oder entziehen wollen.


darf kann sein:
+ Zugriffsrechte neu erteilen
- Zugriffsrechte entziehen
= Zugriffsrechte absolut setzen, d.h., es werden genau die angegebenen Zugriffsrechte erteilt, alle anderen werden entzogen.


was

Mit was geben Sie an, welche Zugriffsrechte Sie erteilen bzw. entziehen wollen.


was kann eine Kombination folgender Optionen sein:
r (r - read) für Leserecht
w (w - write) für Schreibrecht
x (x - execute) für Ausführrecht bzw. für Recht zum Durchlaufen von Dateien und Dateiverzeichnissen.
X (X - execute) für Ausführrecht bzw. für Recht zum Durchlaufen für eine Datei, wenn mindestens ein x-Bit gesetzt ist, oder von Dateiverzeichnissen.
Wenn Datei kein Dateiverzeichnis ist oder wenn für Datei nicht mindestens ein x-Bit gesetzt ist, wird diese Option ignoriert.
s für s-Bit (set-user-ID-Bit bzw. set-group-ID-Bit).
Die Angabe s beim chmod-Aufruf ist nur zusammen mit u, g oder ug wirksam (wird wer nicht angegeben, so wird hierfür ug angenommen). Ein gesetztes s-Bit ist nur für ausführbare Binärdateien (nicht für Shell-Prozeduren!) wirksam
(siehe Das s-Bit).
t für Sticky-Bit (t-Bit).
Nur der POSIX-Verwalter kann das Sticky-Bit setzten. Versucht ein nichtprivilegierter Benutzer das Sticky-Bit zu setzen, so wird dies ignoriert. Die Angabe t beim chmod-Aufruf ist nur zusammen mit u, a oder ohne Angabe für wer wirksam. Ein gesetztes Sticky-Bit ist nur für ausführbare Dateien wirksam (siehe Das Sticky-Bit). Werden die Zugriffsrechte einer Datei mit gesetztem Sticky-Bit geändert, so wird das Sticky-Bit automatisch gelöscht.
l (l - lock) für obligatorische Sperre von Dateien, Dateiverzeichnissen oder Datensätzen. Hierbei können Schreib- und Lesezugriff gesperrt werden, solange ein Programm auf datei zugreift.
Für datei wird das l-Bit gesetzt, wenn für datei das Ausführrecht für Gruppe nicht gesetzt ist und für datei das s-Bit für die Gruppe gesetzt ist.
Folgende Beispiele sind deshalb nicht korrekt und führen zu Fehlermeldungen:
  chmod g+x,+l datei 
  chmod g+s,+l datei
uDie Zugriffsrechte des aktuellen Eigentümers sollen übernommen werden.
gDie Zugriffsrechte der aktuellen Gruppe sollen übernommen werden.
oDie Zugriffsrechte der aktuellen anderen Benutzer sollen übernommen werden.


was nicht angegeben:
Dies ist nur sinnvoll in Kombination mit dem Gleichheitszeichen = ; dem betreffenden wer werden dann alle Zugriffsrechte entzogen.


Wie oben angegeben, können Sie mehrere "wer-darf-was"-Angaben, getrennt durch Kommas, aneinanderreihen, z.B.

chmod g-w,o-rw datei

chmod arbeitet die Zeichenkette, die Sie für modus angeben, von links nach rechts ab. So erhält z.B. durch die Angabe a-w,u+w der Eigentümer Schreibrecht, während es allen anderen entzogen wird.

Absolute Angabe

Eine absolute Angabe für modus ist eine drei- oder vierstellige Oktalzahl. Die zulässigen Oktalzahlen erhalten Sie, wenn Sie die untenstehenden oktalen Modi im Binärsystem mit dem bitweisen logischen ODER verknüpfen. Dasselbe Ergebnis erhalten Sie, wenn Sie die Modi (im Oktal- oder Dezimalsystem) addieren. Eine führende Null (weder s-Bit noch Sticky-Bit) können Sie weglassen. Die angegebenen Zugriffsrechte werden erteilt, alle anderen Zugriffsrechte werden entzogen.


4000s-Bit für Eigentümer
20#0s-Bit für Gruppe, wenn # gleich 7, 5, 3 oder 1 ist. Eine obligatorische Sperre wird gesetzt, wenn # gleich 6, 4, 2 oder 0 ist. Der Wert von # wird ignoriert, wenn datei ein Dateiverzeichnis ist. In diesem Fall dürfen Sie nur die symbolische Angabe verwenden.
1000Sticky-Bit (t-Bit)
0400Leserecht für Eigentümer
0200Schreibrecht für Eigentümer
0100Ausführrecht (bzw. Recht zum Durchlaufen von Dateiverzeichnissen) für Eigentümer
0040Leserecht für Gruppe
0020Schreibrecht für Gruppe
0010Ausführrecht (bzw. Recht zum Durchlaufen von Dateiverzeichnissen) für Gruppe
0004Leserecht für andere Benutzer
0002Schreibrecht für andere Benutzer
0001Ausführrecht (bzw. Recht zum Durchlaufen von Dateiverzeichnissen) für andere Benutzer


Beispiel

Wenn Sie für den Eigentümer das Lese-, Schreib- und Ausführrecht setzen wollen, und für Gruppe das Lese- und Ausführrecht, dann geben Sie für modus 750 an:

400 + 200 + 100 + 40 + 10 = 750

Für die Datei gelten dann die Zugriffsrechte rwx r-x ---.

Das s-Bit

Ist für ein ausführbares Programm das s-Bit für den Eigentümer gesetzt, dann ist beim Aufruf des Programms die effektive Benutzernummer des zugehörigen Prozesses gleich der Benutzernummer des Eigentümers der Datei (und nicht gleich der Benutzenummer des Aufrufers). Das bedeutet, dass der Prozess unter der Benutzernummer des Programm-Eigentümers abläuft. Dadurch kann er auch auf Dateien zugreifen, für die der Programm-Aufrufer direkt kein Zugriffsrecht hat.
Die reale Benutzernummer des Prozesses bleibt die des Programm-Aufrufers.

Ist das s-Bit für die Gruppe gesetzt, dann ist die effektive Gruppennummer des Prozesses gleich der Gruppennummer des Programm-Eigentümers. Der Prozess läuft also unter der Gruppennummer des Programm-Eigentümers ab.
Die reale Gruppennummer des Prozesses bleibt die des Programm-Aufrufers.

Das s-Bit wirkt nur bei ausführbaren Binärdateien (ausführbaren Programmen), nicht aber bei Shell-Prozeduren. Für Dateien, die eine Shell-Prozedur enthalten, kann das
s-Bit zwar mit chmod gesetzt werden, es bleibt jedoch wirkungslos.

Bei Dateiänderungen werden die s-Bits aus Sicherheitsgründen zurückgesetzt.

Setzt der POSIX-Verwalter für ein Programm, das ihm gehört, das s-Bit, erlaubt er allen Benutzern, die das Programm aufrufen dürfen, alle Operationen, die er selbst mit Hilfe dieses Programms ausführen darf. Er darf das s-Bit also nur dann setzen, wenn sichergestellt ist, dass dadurch keine Sicherheitslücke entsteht, z.B. Daten gefährdet werden.

Beispiel für die Anwendung des s-Bits

Ein Beispiel für die Anwendung des s-Bits ist das Kommando mailx, das Nachrichten an den Benutzer USER1 in die Datei /var/mail/USER1 schreibt.

Die Datei gehört zur Gruppe MAIL, Eigentümer ist USER1. Sowohl Gruppe als auch Eigentümer haben Lese- und Schreibrecht, alle anderen haben keine Rechte für diese Datei:

-rw-rw---- USER1 MAIL /var/mail/USER1

Somit könnte ein anderer Benutzer (USER2) keine Nachrichten in diese Datei schreiben. Da für das Kommando mailx jedoch das s-Bit für die Gruppe MAIL gesetzt ist, wird USER2 nach Aufruf von mailx kurzzeitig Mitglied der Gruppe MAIL und hat somit Schreibrecht für die Datei /var/mail/USER1.

Das Sticky-Bit (t-Bit)

Nur der POSIX-Verwalter kann das Sticky-Bit (t-Bit) setzen. Versucht ein nichtprivilegierter Benutzer, das Sticky-Bit zu setzen, so wird dies ignoriert.

Das Sticky-Bit wirkt nur bei Dateiverzeichnissen und ausführbaren Dateien. Für andere Dateien kann es zwar mit chmod gesetzt werden, es ist jedoch wirkungslos.

Ist das Sticky-Bit bei ausführbaren Dateien gesetzt, kann beim Programmstart das Einlesen des Programms aus der Programmdatei und das Auslagern in den Swap-Bereich teilweise vermieden werden.

Wenn ein Dateiverzeichnis schreibbar ist, aber das Sticky-Bit gesetzt hat, muss eine der folgenden Bedingungen erfüllt sein, um eine Datei unter diesem Dateiverzeichnis zu löschen, zu verschieben oder einen Verweis auf diese Datei zu erzeugen:

  • die Datei muss dem Benutzer gehören

  • das Dateiverzeichnis muss dem Benutzer gehören

  • der Benutzer muss Schreibberechtigung für die Datei haben

  • der Benutzer muss ein privilegierter Benutzer sein

Bei der Ausgabe des Kommandos ls -l erscheint ein gesetztes Sticky-Bit an der letzten Stelle der Zugriffsrechte. Ist gleichzeitig das x-Bit für „andere Benutzer“ gesetzt, so wird
ein t ausgegeben, andernfalls ein T.

Das l-Bit

Mit Hife der Funktion lockf() kann ein Programm eine Datei sperren, solange das Programm auf diese Datei zugreift. Ist für diese Datei das l-Bit gesetzt, bewirkt der Funktionsaufruf eine obligatorische Sperre (mandatory locking) der Datei (siehe lockf() [4]).

Fehler

chmod: ERROR: Invalid mode

Sie haben für chmod einen unzulässigen Modus angegeben.


chmod: WARNING: Locking not permitted on datei , a group executable file
Sie wollten eine Datei sperren, obwohl für diese Datei das Ausführrecht für Gruppe gesetzt ist.


chmod: WARNING: Execute permission requiered for set-ID on execution for datei
Sie wollten eine Datei sperren, obwohl für diese Datei das s-Bit gesetzt ist.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos chmod:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten).

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Beispiel

Die folgenden Beispiele beziehen sich alle auf eine Datei mit den Zugriffsrechten rw- --- ---.

Die ersten beiden Spalten der Tabelle enthalten Angaben für modus, die letzte Spalte enthält das Ergebnis des jeweiligen chmod-Aufrufs.

Symbolische Angabe    Absolute Angabe    Ergebnis
u-w                     400              r--------
-w                      400              r--------
go+r                    644              rw-r--r--
go=r                    644              rw-r--r--
go+rw                   666              rw-rw-rw-
=rw                     666              rw-rw-rw-
+rx                     755              rwxr-xr-x
=r                      444              r--r--r--
ug=rw,o=r               664              rw-rw-r--
u=rwx,g=rx,o=           750              rwxr-x---
+x,u+s                 4711              rws--x--x
+xt                    1711              rwx--x--t

Das Sticky-Bit (letztes Beispiel) kann nur der POSIX-Verwalter setzen. Versucht ein nichtprivilegierter Benutzer, das Sticky-Bit zu setzen, so wird dies ignoriert.

Siehe auch

chgrp, ls, newgrp, umask

chmod(), chown() [4]