Dateirechte unter Ubuntu

Dateien und Verzeichnisse unter Ubuntu besitzen einen Standardsatz an Berechtigungen, welche den Zugriff auf Dateisystemebene kontrollieren. Dieser Blog-Artikel erklärt die wichtigsten Konzepte und dokumentiert die notwendigen Befehle für die Kommandozeile.

Einführung

Ubuntu und die meisten anderen Linux-Distributionen implementieren die Zugriffskontrolle auf das Dateisystem als Discretionary Access Control (DAC). Hierbei wird jede Datei bzw. jedes Verzeichnis von einem oder mehreren Benutzern in Besitz genommen, welche die Zugriffsrichtlinien bestimmen.

Benutzer und Gruppen

Unter Ubuntu wird jeder Benutzer durch ein Benutzerkonto repräsentiert. Ein Benutzer hat einen Namen und eine eindeutige UID (User ID). Ein Benutzer kann eine reale Person (regular user) sein oder eine bestimmte Rolle im System (service user) repräsentieren.

Benutzer könne in Gruppen zusammengefasst werden. Dies dient u.a. der effektiveren Zuweisung von Rechten. Eine Gruppe hat einen Namen und eine eindeutige GID (Group ID).

Ein Benutzer kann Mitglied mehrerer Gruppen sein, aber nur eine Gruppe kann seine Hauptgruppe (Primary Group) sein. Die Hauptgruppe eines Benutzers ist in der Datei /etc/passwd definiert. Sie wird beim Anlegen eines Benutzers zugeordnet.

Der Benutzer root ist unter Ubuntu ein stets vorhandenes Benutzerkonto mit der UID 0, das den Super-Administrator des Gesamtsystems repräsentiert. Er hat umfassende Rechte und kann auf alle Dateien, Daten und Kommandos zugreifen.

Benutzerklassen

Ubuntu definiert drei Benutzerklassen für Dateien bzw. Verzeichnisse:

Benutzerklasse Beschreibung
Owner Benutzers, welcher die Datei oder das Verzeichnis besitzt.
Group Benutzergruppe, welche die Datei oder das Verzeichnis besitzt.
Other Aller anderen Benutzer, die weder Owner noch Mitglied von Group sind.

Eine Datei bzw. ein Verzeichnis hat also genau zwei Besitzer: Den Owner und die Group. Der Owner ist ein ausgewiesener Benutzer, die Group repräsentiert eine Liste von Benutzern (nämlich deren Mitglieder).

Berechtigungen

Jede Benutzerklasse hat drei Berechtigungen:

Berechtigung Dateizugriff Verzeichniszugriff
Read Du kannst die Datei kopieren und deren Inhalt lesen. Du kannst Dir den Verzeichnisinhalt anzeigen lassen.
Write Du kannst den Dateiinhalt ändern. Du kannst Dateien den Verzeichnisinhalt ändern (z.B. Dateien hinzufügen und löschen).
Execute Du kannst die Datei ausführen, wenn sie ausführbar ist. Du kannst mittels cd ins Verzeichnis wechseln.

Hinzu kommen noch drei Spezialberechtigungen:

Berechtigung Dateizugriff Verzeichniszugriff
SetUID Bit Dateien werden mit den Rechten von owner ausgeführt. Neu erzeugte Dateien oder Unterverzeichnisse übernehmen den owner des Verzeichnisses und nicht des Erzeugers.
SetGID Bit Dateien werden mit den Rechten von group ausgeführt. Neu erzeugte Dateien oder Unterverzeichnisse übernehmen die group des Verzeichnisses und nicht des Erzeugers.
Sticky Bit Du kannst die Datei nur löschen, wenn Du Eigentümer bist. Du kannst nur Dateien oder Unterverzeichnisse löschen, deren Eigentümer Du bist.

Das SetUID Bit kann nur für die Benutzerklasse Owner gesetzt werden, das SetGID Bit kann nur für die Benutzerklasse Group gesetzt werden und das Sticky Bit kann nur für die Benutzerklasse Other gesetzt werden.

Berechtigungen anzeigen

Möchtest Du Dir die Berechtigung einer Datei anzeigen lassen, dann nutze den Befehl ls mit dem Parameter -l.

Beispiel:

$ ls -l /usr/bin/passwd

Das Ergebnis unter Ubuntu sollte in etwa so aussehen:

-rwsr-xr-x 1 root root 68208 Jul 15 00:08 /usr/bin/passwd

Schauen wir uns die Ausgabe etwas genauer an:

Legende für ls-Befehl

Legende für ls-Befehl

Das erste Zeichen in der Ausgabe gibt wieder, ob es sich um eine Datei (-) oder ein Verzeichnis (d) handelt. Die folgenden neun Zeichen geben die Berechtigungen der drei Benutzerklassen Owner , Group und Other aus.

Die Berechtigungen werden in der Ausgabe von ls -l durch folgende Buchstaben repräsentiert.

Symbol Bedeutung
r Lesen
w Schreiben
x Ausführen (oder Suchen bei Verzeichnissen)
s SetUID Bit bzw. SetGID Bit gesetzt, und Execute gesetzt
S SetUID Bit bzw. SetGID Bit gesetzt, aber kein Execute gesetzt
t Sticky Bit gesetzt, aber kein Execute gesetzt
T Sticky Bit gesetzt, und Execute gesetzt
- Kein Recht gesetzt

Die Symbole x, s und S schließen sich gegenseitig aus, ebenso die Symbole x, t, und T.

Kommen wir noch einmal auf unser Beispiel zurück. Die ausführbare Datei /usr/bin/passwd implementiert den Befehl passwd zum Ändern des eigenen Benutzerkennworts.

Folgende Beobachtungen kannst Du machen:

  • Der Benutzer root ist der alleinige Besitzer von /usr/bin/passwd. Die gleichnamige Gruppe enthält normalerweise nur den Benutzer root.

  • Alle Benutzer können /usr/bin/passwd ohne sudo ausführen (siehe das s bei Owner und das x bei Group und Other).

  • Die Ausführung geschieht immer mit Root-Rechten (siehe das s bei Owner). Das ist notwendig, da /usr/bin/passwd u.a. Änderungen an der Datei /etc/shadow vornehmen muss. In dieser Datei werden die Kennwörter verschlüsselt gespeichert und diese darf nur durch den Benutzer root verändert werden.

Besitzer ändern

Einer Datei oder einem Verzeichnis sind stets ein Owner und eine Gruppe zugeordnet. Mit Hilfe des Befehls chown kannst Du den Owner ändern, mit Hilfe des Befehls chgrp die Group.

Um beispielseise den Owner der Datei datei.txt zu ändern, tippe folgendes ein:

$ sudo chown frank datei.txt

Der neue Owner heißt jetzt frank.

Um auch die zugeordnete Group der Datei datei.txt zu ändern, tippe folgendes ein:

$ sudo chgrp marketing datei.txt

Die neue Group heißt jetzt marketing.

Beide Befehle lassen sich auch kombinieren:

$ sudo chown frank:marketing datei.txt

Hier wurden Owner und Group gleichzeitig geändert.

Standardbesitzer

Standardmäßig wird der Ersteller einer Datei oder eines Verzeichnisses als Owner eingetragen und seine Hauptgruppe (Primary Group) als Group zugeordnet.

Mit Hilfe des folgenden Befehls kannst Du Dir die Hauptgruppe eines Benutzers anzeigen lassen:

$ grep frank /etc/passwd

Die Ausgabe könnte wie folgt aussehen:

frank:x:1000:1000:Frank,,,:/home/frank:/bin/bash

Die GID der Hauptgruppe steht im vierten Feld (hier: 1000). Möchtest Du den Namen Hauptgruppe wissen, dann tippe folgendes ein:

$ grep 1000 /etc/group

Die Ausgabe könnte wie folgt aussehen:

frank:x:1000:

Die Hauptgruppe heißt also frank.

Möchtest Du die Hauptgruppe nachträglich ändern, dann tippe folgendes ein:

$ sudo usermod frank -g marketing

Die neue Hauptgruppe für frank heißt jetzt marketing.

Berechtigungen ändern

Mit Hilfe des Befehls chmod kannst Du die Zugriffsrechte einer Datei oder eines Verzeichnisses ändern.

Um beispielsweise dem Owner der Datei datei.txt die Berechtigung Execute zu erteilen, tippe folgendes ein:

$ chmod u+x datei.txt 

Der Besitzer der Datei hat nun die Berechtigung Execute erhalten. Das u steht für User bzw Owner, das + ist der Operator Hinzufügen und das x für Execute.

Schauen wir uns chmod etwas genauer an. Dieser Befehl kann in zwei unterschiedlichen Modi ausgeführt werden: Im symbolischen Modus oder im numerischen Modus.

Symbolischer Modus

Im symbolischen Modus werden Benutzerklassen, Operatoren und Berechtigungen durch Symbole ausgedrückt. Die Kombination dieser Symbole legt fest, welche Rechte gesetzt oder entfernt werden sollen.

Hier die Definition der Benutzerklassen:

Symbol Bedeutung
u Besitzer
g Gruppe
o alle anderen
a alle (also die Vereinigungsmenge aus u, g und o)

Hier die Definition der Operatoren:

Symbol Bedeutung
+ Hinzufügen
- Entfernen
= Ersetzen

Hier die Definition der Berechtigungen:

Symbol Bedeutung
r Lesen
w Schreiben
x Ausführen (oder Suchen bei Verzeichnissen)
X nur Ausführen/Suchen, wenn die Datei ein Verzeichnis ist oder bereits für einige Benutzer die Ausführungsrechte besitzt
s Das SetUID Bit bzw. das SetGID Bit setzen
t Das Sticky Bit setzen
u Die Rechte der Benutzerklasse Owner kopieren
g Die Rechte der Benutzerklasse Group kopieren
o Die Rechte des Benutzerklasse Other kopieren

Diese Symbole müssen wie folgt kombiniert werden:

  • Zunächst wird die Benutzergruppe angegeben werden (z.B. u). Es können auch mehrere Benutzergruppen gleichzeitig angeben weden (z.B. ugo).

  • Unmittelbar danach folgt der Operator (z.B. +)

  • Den Abschluss bildet das Recht (z.B. r) oder eine Kombination der Rechte r, w, x, X, s und t. Die Rechte u, g und o können nur isoliert angegeben werden.

Ein paar Beispiele für chmod im symbolischen Modus:

  • Setzt die Rechte der Datei auf Read, Write und Execute für Owner.

    chmod u=rwx datei.txt
    
  • Setzt die Rechte der Datei auf Read, Write und Execute für Owner. Group und Other haben beide kein Zugriffsrecht.

    chmod u=rwx,g=-,o=- datei.txt
    
  • Setzt die Rechte der Datei auf Read, Write und Execute für Owner, Group und Other .

    chmod a=rwx datei.txt
    
  • Fügt das Recht Write für Owner hinzu.

    chmod u+w datei.txt
    
  • Entfernt das Recht Write für Owner.

    chmod u-w datei.txt
    
  • Kopiert die Rechte von Owner nach Group.

    chmod g=u datei.txt
    
  • Fügt das Sticky Bit für Other hinzu.

    chmod o+t datei.txt
    
  • Setzt rekursiv die Rechte f+r Owner aller Dateien und Unterverzeichnisse im Verzeichnis /mein/ordner auf rwx.

    chmod -R u=rwx /mein/ordner
    

Numerischer Modus

Im numerischen Modus (auch Oktal-Modus genannt) werden die Rechte durch Zahlen definiert, die den drei Benutzerklassen direkt zugewiesen werden.

Hier die Definition der Rechte:

Wert Rechte
0 Keine
1 x
2 w
3 w+x
4 r
5 r+x
6 r+w
7 r+w+x

Diese Zahlenwerte müssen wie folgt angewandt werden:

  • Es werden immer alle drei Benutzerklassen gleichzeitig durch eine dreistellige Zahl gesetzt (z.B. 744).

  • Die erste Stelle definiert die Rechte für Owner, die zweite Stelle die Rechte für Group und die dritte Stelle die Rechte für Other.

Möchtest Du auch die Spezialrechte SetUID Bit, SetGID Bit oder Sticky Bit setzen, musst Du noch eine zusätzliche vierte Stelle voranstellen. Hier die möglichen Werte:

Wert Rechte
0 Keine
1 Sticky Bit
2 SetGID Bit
3 SetGID Bit + Sticky Bit
4 SetUID Bit
5 SetUID Bit + Sticky Bit
6 SetUID Bit + SetGID Bit
7 SetUID Bit + SetGID Bit + Sticky Bit

Ein paar Beispiele für chmod im numerischen Modus:

  • Setzt die Rechte der Datei auf Read, Write und Execute für Owner. Group und Other haben beide kein Zugriffsrecht

    chmod 700 datei.txt
    
  • Setzt die Rechte der Datei auf Read, Write und Execute für Owner, Group und Other

    chmod 777 datei.txt
    
  • Setzt die Rechte der Datei auf Read, Write und Execute für Owner sowie Read und Write für Group und Other. Außerdem wird das Sticky Bit gesetzt.

    chmod 1766 datei.txt
    
  • Setzt rekursiv die Rechte aller Dateien und Unterverzeichnisse im Verzeichnis /mein/ordner auf 700.

    chmod -R 700 /mein/ordner
    

Standardberechtigungen

Beim Erzeugen einer neuen Datei oder eines neuen Verzeichnisses vergibt Ubuntu Standardberechtigungen für alle drei Berechtigungsgruppen.

  • Die Standardberechtigungen für root sind 755 (rwxr-xr-x) für Verzeichnisse und 644 (rw-r--r--) für Dateien.

  • Die Standardberechtigungen für alle anderen Benutzer sind 775 (rwxrwxr-x) für Verzeichnisse und 664 (rw-rw-r--) für Dateien.

Diese Vorgabe kannst Du für jeden Benutzer anpassen. Ubuntu vergibt die Standardberechtigungen nämlich in einem zweistufigen Verfahren:

  • Zunächst gelten die Standardberechtigungen von Ubuntu. Diese lauten 777 (rwxrwxrwx) für Verzeichnisse und 666 (rw-rw-rw-) für Dateien.

  • Von diesen Standardberechtigungen wird ein benutzerdefinierter Wert abgezogen. Dieser Wert wird als umask (user-defined permissions mask) bezeichnet. Er lautet für root 022 und für alle anderen Benutzer 002.

Zieht man also beispielsweise die umask 002 von 666 ab, dann ergibt dies 664.

Mit Hilfe des Befehls umask kannst Du den umask-Wert anpassen. Der folgende Befehl setzt den umask-Wert des aktuellen Benutzers auf 022

$ umask 022

Access Control Lists

Der Standardsatz an Berechtigungen für Dateien und Verzeichnisse erlaubt die Zuordnung nur einer Benutzergruppe. Das ist vor allem dann ein Problem, wenn in freigegebenen Verzeichnissen unterschiedliche Gruppen von Benutzern (z.B. Marketing und Development) mit unterschiedlichen Zugriffsrechten kollaborieren sollen. Die Lösung hierfür ist der Einsatz einer Access Control List (kurz ACL).

Mit Hilfe von ACL ist es möglich, einzelnen Benutzern und Gruppen gezielt Rechte an einzelnen Dateien oder Verzeichnissen zu geben oder zu entziehen. ACLs sind eine Erweiterung der Rechteverwaltung. Die Nutzung von ACLs unter Ubuntu ist standardmäßig aktiviert. Die entscheidenden Befehle lauten:

Das könnte dich auch interessieren:
  1. HTTPS unter nginx/Ubuntu
  2. Postfix unter Ubuntu-Server
  3. PostgreSQL 14 unter Ubuntu-Server
  4. UniFi Network Controller unter Ubuntu
  5. HTTPS unter Apache/Ubuntu
Teile diesen Artikel
comments powered by Disqus