Chmod-Befehl in Linux (Dateiberechtigungen)

author
10 minutes, 2 seconds Read

In Linux wird der Zugriff auf die Dateien über die Dateiberechtigungen, Attribute und den Besitz verwaltet. Dadurch wird sichergestellt, dass nur autorisierte Benutzer und Prozesse auf Dateien und Verzeichnisse zugreifen können.

In diesem Tutorial wird erklärt, wie man den Befehl chmod verwendet, um die Zugriffsrechte von Dateien und Verzeichnissen zu ändern.

Linux File Permissions #

Bevor wir weitermachen, wollen wir das grundlegende Linux-Berechtigungsmodell erklären.

In Linux ist jede Datei mit einem Besitzer und einer Gruppe verbunden und mit Zugriffsrechten für drei verschiedene Klassen von Benutzern versehen:

  • Der Dateibesitzer.
  • Die Gruppenmitglieder.
  • Andere (alle anderen).

Der Dateibesitz kann mit den chownund chgrpBefehlen geändert werden.

Es gibt drei Arten von Dateiberechtigungen, die für jede Klasse gelten:

  • die Leseberechtigung.
  • die Schreibberechtigung.
  • Das Ausführungsrecht.

Mit diesem Konzept können Sie festlegen, welche Benutzer die Datei lesen, in die Datei schreiben oder die Datei ausführen dürfen.

Die Dateiberechtigungen können mit dem lsBefehl angezeigt werden:

ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt|- | | | | | | || | | | | | +-----------> 7. Group| | | | | +-------------------> 6. Owner| | | | +--------------------------> 5. Alternate Access Method| | | +----------------------------> 4. Others Permissions| | +-------------------------------> 3. Group Permissions| +----------------------------------> 2. Owner Permissions+------------------------------------> 1. File Type

Das erste Zeichen zeigt den Dateityp an. Es kann sich um eine normale Datei (-), ein Verzeichnis (d), einen symbolischen Link (l) oder einen anderen speziellen Dateityp handeln.

Die nächsten neun Zeichen stellen die Dateiberechtigungen dar, drei Tripletts mit je drei Zeichen. Das erste Triplett zeigt die Rechte des Eigentümers, das zweite die Rechte der Gruppe und das letzte Triplett zeigt die Rechte aller anderen. Die Berechtigungen können je nach Dateityp eine unterschiedliche Bedeutung haben.

Im obigen Beispiel (rw-r--r--) bedeutet, dass der Dateieigentümer Lese- und Schreibrechte hat (rw-), die Gruppe und andere haben nur Leseberechtigungen (r--).

Jedes der drei Berechtigungstripletts kann aus den folgenden Zeichen gebildet werden und hat unterschiedliche Auswirkungen, je nachdem, ob sie auf eine Datei oder ein Verzeichnis gesetzt werden:

Wirkung von Berechtigungen auf Dateien

Berechtigung Zeichen Bedeutung auf Datei
Lesen - Die Datei ist nicht lesbar. Sie können den Inhalt der Datei nicht anzeigen.
r Die Datei ist lesbar.
Schreiben - Die Datei kann nicht geändert oder modifiziert werden.
w Die Datei kann geändert oder modifiziert werden.
Ausführen - Die Datei kann nicht ausgeführt werden.
x Die Datei kann ausgeführt werden.
s Wenn im Triplett user gefunden, wird das Bit setuid gesetzt. Wird es im Triplett group gefunden, wird das Bit setgid gesetzt. Es bedeutet auch, dass das x-Flag gesetzt ist.
Wenn die setuid– oder setgid-Flags bei einer ausführbaren Datei gesetzt sind, wird die Datei mit den Eigentümer- und/oder Gruppenrechten der Datei ausgeführt.
S Gleich wie s, aber das x-Flag ist nicht gesetzt. Dieses Flag wird selten in Dateien verwendet.
t Wenn es im others-Triplett gefunden wird, setzt es das sticky-Bit.
Es bedeutet auch, dass das x-Flag gesetzt ist. Dieses Flag ist bei Dateien nutzlos.
T Gleich wie t, aber das x-Flag ist nicht gesetzt. Dieses Flag ist bei Dateien nutzlos.

Auswirkung von Berechtigungen auf Verzeichnisse (Ordner)

In Linux sind Verzeichnisse spezielle Arten von Dateien, die andere Dateien und Verzeichnisse enthalten.

Berechtigung Zeichen Bedeutung auf Verzeichnis
Lesen - Der Inhalt des Verzeichnisses kann nicht angezeigt werden.
r Der Inhalt des Verzeichnisses kann angezeigt werden.
(z.B. können Sie Dateien innerhalb des Verzeichnisses mit ls auflisten.)
Schreiben - Der Inhalt des Verzeichnisses kann nicht geändert werden.
w Der Inhalt des Verzeichnisses kann geändert werden.
(z.B. Sie können neue Dateien erstellen, Dateien löschen ..usw.)
Ausführen - Das Verzeichnis kann nicht verändert werden.
x Das Verzeichnis kann mit cd navigiert werden.
s Wenn es im Triplett user gefunden wird, setzt es das Bit setuid. Wenn es im Triplett group gefunden wird, wird das Bit setgid gesetzt. Es bedeutet auch, dass das Kennzeichen x gesetzt ist. Wenn das setgid-Flag für ein Verzeichnis gesetzt ist, erben die darin neu erstellten Dateien die Gruppen-ID (GID) des Verzeichnisses anstelle der primären Gruppen-ID des Benutzers, der die Datei erstellt hat.
setuid hat keine Auswirkungen auf Verzeichnisse.
S Gleich wie s, aber das x-Flag wird nicht gesetzt. Dieses Flag ist bei Verzeichnissen nutzlos.
t Wenn es im Triplett others gefunden wird, setzt es das Bit sticky.
Es bedeutet auch, dass das Flag x gesetzt ist. Wenn das Sticky-Bit in einem Verzeichnis gesetzt ist, kann nur der Eigentümer der Datei, der Eigentümer des Verzeichnisses oder ein administrativer Benutzer die Dateien in dem Verzeichnis löschen oder umbenennen.
T Gleich wie t, aber das x-Flag ist nicht gesetzt. Dieses Flag ist bei Verzeichnissen nutzlos.

Verwendung von chmod #

Der chmod-Befehl hat die folgende allgemeine Form:

chmod MODE FILE...

Mit dem chmod-Befehl können Sie die Berechtigungen für eine Datei ändern, indem Sie entweder einen symbolischen oder numerischen Modus oder eine Referenzdatei verwenden. Wir werden die Modi später in diesem Artikel näher erläutern. Der Befehl kann eine oder mehrere durch Leerzeichen getrennte Dateien und/oder Verzeichnisse als Argumente akzeptieren.

Nur root, der Dateieigentümer oder ein Benutzer mit sudo-Rechten kann die Berechtigungen einer Datei ändern. Seien Sie besonders vorsichtig, wenn Sie chmod verwenden, insbesondere wenn Sie die Berechtigungen rekursiv ändern.

Symbolische (Text-)Methode #

Die Syntax des chmod-Befehls bei Verwendung des symbolischen Modus hat folgendes Format:

chmod perms… FILE...

Der erste Satz von Flags (), Benutzerflags, definiert, für welche Benutzerklassen die Berechtigungen für die Datei geändert werden.

  • u – Der Eigentümer der Datei.
  • g – Die Benutzer, die Mitglieder der Gruppe sind.
  • o – Alle anderen Benutzer.
  • a – Alle Benutzer, identisch mit ugo.

Wenn das Benutzer-Flag weggelassen wird, ist das Standard-Flag a und die Berechtigungen, die durch umask gesetzt werden, sind nicht betroffen.

Der zweite Satz von Flags (), die Operationsflags, definiert, ob die Berechtigungen entfernt, hinzugefügt oder gesetzt werden sollen:

  • - Entfernt die angegebenen Berechtigungen.
  • + Fügt die angegebenen Berechtigungen hinzu.
  • = Ändert die aktuellen Berechtigungen in die angegebenen Berechtigungen. Wenn nach dem Symbol = keine Berechtigungen angegeben werden, werden alle Berechtigungen der angegebenen Benutzerklasse entfernt.

Die Berechtigungen (perms...) können explizit entweder mit Null oder einem oder mehreren der folgenden Buchstaben festgelegt werden: r, w, x, X, s, und t. Verwenden Sie einen einzelnen Buchstaben aus dem Satz u, g und o, wenn Sie Berechtigungen von einer Benutzerklasse in eine andere kopieren.

Wenn Sie Berechtigungen für mehr als eine Benutzerklasse () festlegen, verwenden Sie Kommas (ohne Leerzeichen), um die symbolischen Modi zu trennen.

Nachfolgend einige Beispiele für die Verwendung des Befehls chmod im symbolischen Modus:

  • Geben Sie den Mitgliedern der Gruppe die Berechtigung, die Datei zu lesen, aber nicht zu schreiben und auszuführen:

    chmod g=r filename
  • Entfernen Sie die Ausführungsberechtigung für alle Benutzer:

    chmod a-x filename
  • Entfernen Sie die Schreibberechtigung für andere Benutzer:

    chmod -R o-w dirname
  • Entfernen Sie die Lese-, Schreib- und Ausführungsberechtigung für alle Benutzer mit Ausnahme des Eigentümers der Datei:

    chmod og-rwx filename

    Das Gleiche kann auch mit der folgenden Form erreicht werden:

    chmod og= filename
  • Lese-, Schreib- und Ausführungsberechtigung für den Eigentümer der Datei, Leseberechtigung für die Gruppe der Datei und keine Berechtigung für alle anderen Benutzer:

    chmod u=rwx,g=r,o= filename
  • Die Rechte des Dateieigentümers zu den Rechten hinzufügen, die die Mitglieder der Dateigruppe haben:

    chmod g+u filename
  • Ein Sticky Bit zu einem bestimmten Verzeichnis hinzufügen:

    chmod o+t dirname

Numerische Methode #

Die Syntax des Befehls chmod bei Verwendung der numerischen Methode hat folgendes Format:

chmod NUMBER FILE...

Bei Verwendung des numerischen Modus können Sie die Berechtigungen für alle drei Benutzerklassen (Eigentümer, Gruppe und alle anderen) gleichzeitig festlegen.

Die NUMBER kann eine 3- oder 4-stellige Zahl sein.

Wenn eine 3-stellige Zahl verwendet wird, steht die erste Ziffer für die Berechtigungen des Dateibesitzers, die zweite für die Dateigruppe und die letzte für alle anderen Benutzer.

Jede Schreib-, Lese- und Ausführungsberechtigung hat den folgenden Zahlenwert:

  • r (lesen) = 4
  • w (schreiben) = 2
  • x (ausführen) = 1
  • keine Berechtigungen = 0

Die Anzahl der Berechtigungen einer bestimmten Benutzerklasse wird durch die Summe der Werte der Berechtigungen für diese Gruppe dargestellt.

Um die Berechtigungen der Datei im numerischen Modus zu ermitteln, berechnen Sie einfach die Summen für alle Benutzerklassen. Um beispielsweise dem Eigentümer der Datei Lese-, Schreib- und Ausführungsrechte, der Gruppe der Datei Lese- und Ausführungsrechte und allen anderen Benutzern nur Leserechte zu geben, würden Sie Folgendes tun:

  • Besitzer: rwx=4+2+1=7
  • Gruppe: r-x=4+0+1=5
  • Andere: r-x=4+0+0=4

Mit der obigen Methode kommen wir auf die Zahl 754, die die gewünschten Berechtigungen darstellt.

Um die Flags setuid, setgid und sticky bit einzurichten, verwenden wir eine vierstellige Zahl.

Wenn die vierstellige Nummer verwendet wird, hat die erste Ziffer die folgende Bedeutung:

  • setuid=4
  • setgid=2
  • sticky=1
  • keine Änderungen = 0

Die nächsten drei Ziffern haben die gleiche Bedeutung wie bei der Verwendung der dreistelligen Nummer.

Wenn die erste Ziffer 0 ist, kann sie weggelassen werden, und der Modus kann mit 3 Ziffern dargestellt werden. Der numerische Modus 0755 ist derselbe wie 755.

Um den numerischen Modus zu berechnen, kann man auch eine andere Methode (binäre Methode) verwenden, die jedoch etwas komplizierter ist. Das Wissen, wie man den numerischen Modus mit 4, 2 und 1 berechnet, ist für die meisten Benutzer ausreichend.

Mit dem statBefehl können Sie die Dateiberechtigungen in numerischer Schreibweise überprüfen:

stat -c "%a" filename
644

Hier sind einige Beispiele, wie man den chmodBefehl im numerischen Modus verwendet:

  • Dem Eigentümer der Datei Lese- und Schreibrechte und den Gruppenmitgliedern und allen anderen Benutzern nur Leserechte geben:

    chmod 644 dirname
  • Dem Eigentümer der Datei Lese-, Schreib- und Ausführungsrechte, den Gruppenmitgliedern Lese- und Ausführungsrechte und allen anderen Benutzern keine Rechte geben:

    chmod 750 dirname
  • Lese-, Schreib- und Ausführungsberechtigungen sowie ein Sticky Bit für ein bestimmtes Verzeichnis vergeben:

    chmod 1777 dirname
  • Rekursiv Lese-, Schreib- und Ausführungsberechtigungen für den Dateieigentümer und keine Berechtigungen für alle anderen Benutzer für ein bestimmtes Verzeichnis festlegen:

    chmod -R 700 dirname

Verwendung einer Referenzdatei #

Mit der Option --reference=ref_file können Sie die Berechtigungen der Datei so einstellen, dass sie denen der angegebenen Referenzdatei (ref_file) entsprechen.

chmod --reference=REF_FILE FILE

Der folgende Befehl weist beispielsweise die Berechtigungen der Datei file1 auf file2

chmod --reference=file1 file2

Rekursiv die Dateiberechtigungen ändern #

Um rekursiv auf alle Dateien und Verzeichnisse unter dem angegebenen Verzeichnis zu arbeiten, verwenden Sie die Option -R (--recursive):

chmod -R MODE DIRECTORY

Um beispielsweise die Berechtigungen aller Dateien und Unterverzeichnisse unter dem Verzeichnis /var/www auf 755 zu ändern, verwenden Sie:

chmod -R 755 /var/www

Bearbeiten von symbolischen Links #

Symbolische Links haben immer 777 Berechtigungen.

Standardmäßig werden beim Ändern der Berechtigungen von Symlinks chmod die Berechtigungen für die Datei geändert, auf die der Link verweist.

chmod 755 symlink

Es besteht die Möglichkeit, dass Sie statt der Änderung der Eigentumsrechte für das Ziel eine Fehlermeldung „cannot access ’symlink‘: Permission denied“-Fehler.

Der Fehler tritt auf, weil Symlinks bei den meisten Linux-Distributionen standardmäßig geschützt sind und Sie nicht auf Zieldateien zugreifen können. Diese Option wird in /proc/sys/fs/protected_symlinks angegeben. 1 bedeutet aktiviert und 0 deaktiviert. Es wird empfohlen, den Symlink-Schutz nicht zu deaktivieren.

Dateiberechtigungen im Ganzen ändern #

Manchmal gibt es Situationen, in denen Sie die Berechtigungen von Dateien und Verzeichnissen im Ganzen ändern müssen.

Das häufigste Szenario ist, die Berechtigungen der Website-Datei rekursiv auf 644 und die Berechtigungen des Verzeichnisses auf 755 zu ändern.

Verwendung der numerischen Methode:

find /var/www/my_website -type d -exec chmod 755 {} \;find /var/www/my_website -type f -exec chmod 644 {} \;

Verwendung der symbolischen Methode:

find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;

Der Befehl find sucht nach Dateien und Verzeichnissen unter /var/www/my_website und übergibt jede gefundene Datei und jedes gefundene Verzeichnis an den Befehl chmod, um die Berechtigungen zu setzen.

Schlussfolgerung #

Der Befehl chmod ändert die Berechtigungen der Datei. Die Berechtigungen können entweder im symbolischen oder numerischen Modus gesetzt werden.

Um mehr über chmod zu erfahren, besuchen Sie die chmod manpage.

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.