Skip to main content

Berechtigungen auf einem Linux- oder Unix-System mittels chown und chmod

Hallo zusammen. In diesem kurzen Mini-Wiki soll es um die Berechtigungen auf einem Linux-System gehen.

Ihr habt – sofern ihr schon mal mit Linux- oder Unix-Systemen in Berührung gekommen seid – bestimmt schon einmal die Ziffernfolgen "775", "644", "0755" oder auch symbolische Befehle wie "+x" oder auch "+rwx" gesehen. Aber, was bedeuten diese Ziffern eigentlich? Welche Ziffer hat welche Bedeutung? Und wie setzen sich diese Ziffern zusammen?

Das möchte ich euch in diesem kurzen Mini-Wiki einmal erläutern.


Woraus setzen sich die Ziffern und Symbole eigentlich zusammen?

Um euch von Grund auf abzuholen, möchte ich euch erst einmal kurz erläutern, woher diese Ziffern überhaupt kommen und wie sich diese zusammensetzen. Es handelt sich hierbei um ein eher selten genutztes Zahlensystem namens "Oktalsystem". Dieses hat die Basis 8 (0-7) und kann wie folgt in die anderen bekannteren Zahlensysteme, wie Hexa-Dezimal oder unser normales Dezimalsystem umgerechnet werden:

Für unser Beispiel ist es einfacher, wenn wir die Ziffer 7 nutzen. Um diese Ziffer in das Binärsystem umzurechnen, müssen wir uns erstmal vorstellen, wie das Binärsystem überhaupt aussieht. Beim Binärsystem haben wir nämlich nur die Basis 2, setzt sich also aus den Ziffern 0 und 1 zusammen. Und wichtig anzumerken ist auch, dass das Binärsystem immer von rechts nach links gelesen wird. 0010 im Binärsystem ist also die Dezimalziffer 2, wie in der Tabelle zu sehen.

Binärsystem

0 0 1 0
Dezimalwert 8 4 2 1

Mit diesem Wissen können wir also jetzt auch die Binärziffer von Oktal 7 berechnen. Wie aber bestimmt schon aufgefallen ist: Wir haben keine 8 hier, sondern die höchste Ziffer ist die 7. Das bedeutet für uns, dass wir nur mit den 3 rechten Spalten von dieser Tabelle arbeiten müssen/können, weil eine Oktalziffer nur 3 Bits hat.

Schwafel, Schwafel, Fasel, Fasel: Die Oktalzahl 7 ist also im Binärsystem die 111. Und das wiederum ist im Dezimalsystem (unser normales Zahlensystem, welches wir täglich nutzen) auch wieder die 7, da die ein-stellige Oktalziffer 7 natürlich auch nur eine Dezimalziffer 7 sein kann.

Nun aber zurück zum eigentlichen Thema: Wie wir jetzt gelernt haben, setzen sich die Berechtigungen auf Linux- und Unix-Systemen aus Oktalzahlen zusammen, was aber immer noch nicht die Frage klärt, welche Ziffer jetzt was genau bedeutet.


Also, wofür genau stehen die einzelnen Ziffern?

Nun, da ich euch kurz erläutert habe, wie sich die Ziffern zusammensetzen bzw. wie man diese umrechnen kann in die unterschiedlichen Zahlensysteme, wird es Zeit, euch aufzuklären, für was genau diese Ziffern denn eigentlich stehen.

Jeder der 3 Ziffern setzt sich aus mehreren Werten zusammen:

Ziffer

0 1 2 4
Symbolik - x w r
Label Nichts Ausführen Schreiben Lesen

Und der Spezialfall mit 4 Ziffern, wobei die hier genannten immer am Anfang stehen:

Ziffer 0 1 2 4
Label Nichts "Sticky Bit" Setze Gruppen ID Setze User ID

Die hier genannten Ziffern sind erstmal die Grundwerte, aber allein mit diesen können wir noch nichts wirklich anfangen. Wichtig ist nämlich noch zu wissen, wie sich diese nun in Befehlen wie "chmod ... 755 ..." zusammensetzen. Ich rede dabei immer gerne vom "UGO"-Case, also "User, Group, Other"-Case. Was bedeutet das im Spezifischen? Nun ja, die 3 Ziffern setzen sich wie folgt zusammen:

Ziffer 1 Ziffer 2 Ziffer 3
User Gruppe alle Anderen

Oder beim Case mit 4 Ziffern:

Ziffer 1 Ziffer 2 Ziffer 3 Ziffer 4
Spezialberechtigungen User Gruppe alle Anderen

Um die Ziffern dann am Ende zusammenzusetzen, muss man ein wenig rechnen.

Wert 0 1 2 3 4 5 6 7
Kombi 0 1 2 1+2 4 1+4 2+4

1+2+4

Rechte Keine Ausführen Schreiben

Ausführen

Schreiben

Lesen

Lesen

Ausführen

Lesen

Schreiben

Alles

Wie nutzt man denn diese Befehle jetzt eigentlich?

Da wir hier von Berechtigungen unter Linux und Unix reden, sollten einem die Befehle "chown" und "chmod" schon einmal über den Weg gelaufen sein. Diese Befehle sind wie folgt einzuordnen:

  • chown: Setzt den Besitzer eines Verzeichnisses oder einer Datei auf den angegeben User + Gruppe.
    • Nutzung: "chown user:gruppe verzeichnis/" oder "chown -R user:gruppe verzeichnis/"
  • chmod: Setzt die Berechtigungen des Verzeichnisses oder der Datei auf die angegebenen Werte.
    • Nutzung: "chmod 755 verzeichnis/" oder "chmod -R 444 verzeichnis/"

Wie gerade aufgefallen sein sollte, habe ich in jeweils einer Variante jeden Befehls die Flag "-R" gesetzt. Diese Flag steht für "-Recursive", was bedeutet, dass alle Dateien und Verzeichnisse, die innerhalb des angegeben Verzeichnisses liegen mit geändert werden. Wenn also der Ordner "/srv/" angegeben wird und ein "-R" mitgegeben wird, dann sind alle Ordner und Dateien, die in diesem "/srv"-Verzeichnis liegen mit betroffen von der Änderung. Sollte das "-R" weggelassen werden, dann ist nur das Verzeichnis selbst von der Änderung betroffen.


Was kann man mit dem "chmod"-Befehl alles machen?

Da der "chown"-Befehl recht unspektakulär ist, schauen wir uns in diesem Abschnitt den "chmod"-Befehl doch nochmal etwas genauer an, denn mit diesem kann man noch viel mehr machen, als bisher erwähnt wurde.

Wir haben bis jetzt schon gelernt, wie der Befehl grob funktioniert, aber was kann man damit noch machen? Es gibt noch viel mehr Flags und Optionen, um diesen Befehl noch weiter zu verfeinern. Einige davon sind Folgende:

  • Zielgruppen-Kürzel: u, g, o, a
  • Berechtigungen: r, w, x (0-7)
  • Operatoren: +, -, =
  • Spezialrechte: 0, 1, 2, 4

Fangen wir einmal mit den Zielgruppen-Kürzeln an. Diese sind wie folgt zu erläutern:

  1. Das u für User – Use-Case: u+r – In diesem Fall erteile ich dem User, welcher vorher mit "chown user:gruppe...." festgelegt wurde, die Berechtigung, das Verzeichnis lesen zu dürfen.
  2. Das g für Gruppe – Use-Case: g-x – Hier entziehe ich der Gruppe die Berechtigung zum Ausführen einer Datei.
  3. Das o für Other – Use-Case: o=rx – Hier setze ich anderen (alles außerhalb der Gruppe oder des Users) die feste Berechtigung zum lesen und Ausführen von Verzeichnissen und/oder Dateien.
  4. Und das a für All – Use-Case: a+r – In diesem Fall erteile ich die Berechtigung lesen für alle, also User und Gruppe und Other (Andere).

Die Berechtigungen haben wir oben bereits geklärt, also machen wir mit den Operatoren weiter:

  1. Das + für Hinzufügen – Use-Case: u+r – Wie oben füge ich hier dem User die Berechtigung lesen hinzu.
  2. Das - für Entfernen – Use-Case: g-x – Ebenfalls wie oben entziehe ich der Gruppe hier die Berechtigung eine Datei ausführen zu dürfen.
  3. Das = für Setzen – Use-Case: o=rx – Und auch hier wie oben, setze ich die Berechtigung lesen und Ausführen fest auf Andere.

Die Spezialberechtigungen! Erläuterung und Anwendung

Und nun zum interessanten Teil... Die Spezialberechtigungen. Auf diese sind wir bis jetzt noch gar nicht eingegangen bzw. nur ganz kurz oben im zweiten Teil. Sobald Spezialberechtigungen zum Einsatz kommen haben wir nämlich nicht mehr nur die üblichen drei Ziffern, sondern vier.

Mit einer der üblichsten Use-Cases von Spezialberechtigungen ist zum Beispiel bei "create mask" oder "directory mask" unter Samba. Das könnte dann zum Beispiel so aussehen:

  • "create mask = 0755", "create mask = 2544"
  • "directory mask = 1655", "directory mask = 4744"

Aber auch bei dem normalen "chmod"-Befehl können natürlich diese Spezialberechtigungen ihren Nutzen finden. Bevor wir aber zu den Spezialberechtigungen direkt kommen, erstmal die Erklärung, was "create mask" und "directory mask" überhaupt machen und bedeuten. (Bei diesem Teil habe ich mir von Gemini helfen lassen, da ich diese Masken selbst kaum nutze.)

  1. Die sog. "create mask": Wie der Name bereits andeuten lässt, hat dieser Name etwas mit dem Erstellen zu tun. In diesem Fall handelt es sich um das erstellen neuer Dateien. Diese Maske steuert die maximal erlaubten Rechte für neu erstellte Dateien.
    • Wenn zum Beispiel ein Windows-User eine .txt-Datei erstellt, schickt Windows oft den Wunsch mit, die Datei voll beschreibbar und ausführbar zu machen. Die "create mask" sorgt dafür, dass bestimmte Rechte (wie das Ausführungsrecht "x" für normale Textdateien) hart weggestrichen werden, selbst wenn der Client sie angefordert hat.
  2. Die sog. "directory mask": Auch dieser Name hat etwas mit dem Erstellen zu tun, nur in diesem Fall steuert diese Maske die Berechtigungen für neu erstellte Ordner bzw. Verzeichnisse.
    • Während Dateien fast nie das Ausführungsrecht "x" brauchen, ist es bei Ordnern lebenswichtig. Ohne das Ausführungsrecht kann ein Linux-Ordner nicht betreten werden. Die "directory mask" stellt also sicher, dass neue Ordner immer die nötigen Berechtigungen bekommen, damit man sie auch öffnen kann.

Jetzt aber zu den Spezialberechtigungen selbst. Wir haben hier die Ziffern 0, 1, 2 und 4, wofür genau stehen diese aber nun?

  • Die 0 steht für gar nichts, die setzt einfach keine Berechtigung, also kann man diese meist weglassen, zumindest beim "chmod"-Befehl, bei den Masken in Samba schreibt man diese normalerweise mit, lässt diese aber meist auf 0.
  • Die 1 steht für "Sticky Bit": Diese Spezialberechtigung sorgt dafür, dass nur der Besitzer einer Datei oder eines Verzeichnisses, diese/s auch löschen oder umbenennen darf. Ein typischer Use-Case dafür ist ein /tmp-Verzeichnis, wo dafür gesorgt wird, dass nur der Ersteller bzw. der Eigentümer (oder auch root) einer Datei diese auch löschen oder umbenennen darf.
  • Die 2 steht für "SGID" bzw. "Set Group ID": Bei Dateien eher selten genutzt, weil es nur die Rechte der Gruppe beim Ausführen der Datei annimmt. Bei Verzeichnissen ist es deutlich häufiger genutzt, da alle neu erstellen Dateien und Unterverzeichnisse automatisch die Gruppe des übergeordneten Verzeichnisses statt der primären Gruppe des erstellenden Nutzers erben. Wird häufig bei gemeinsamen Projekt- oder Teamordnern genutzt.
  • Die 4 steht für "SUID" bzw. "Set User ID": Wenn eine ausführbare Datei diese Spezialberechtigung gesetzt bekommt, wird sie beim Ausführen mit den Berechtigungen des Dateieigentümers (vorher mittels "chown ......" festgelegt) ausgeführt und nicht mit den Rechten des Users, der diese Datei startet. Ein gutes Beispiel ist der Befehl "passwd", welcher genutzt wird, um das Passwort des angemeldeten Users zu ändern. Normale Nutzer müssen ihr eigenes Passwort in der zentralen Passwortdatei (/etc/shadow) ändern können. Da diese Datei aber nur root gehört, besitzt /usr/bin/passwd das SUID-Bit, was heißt, dass jeder Nutzer, der den Befehl aufruft, diesen kurzzeitig mit root-Rechten ausführt, um die Änderungen in der geschützten Datei zu speichern.

Fazit

Also, was haben wir heute gelernt, wenn wir den Text aufmerksam verfolgt haben?

Auch wenn die Texte recht lang geworden sind, kann man kurz und knapp sagen, dass Dateiberechtigungen, wenn man sich einmal damit beschäftigt hat, gar nicht so schwer sind, wie man eigentlich meinen würde. Ein simples "chown -R user:gruppe verzeichnis/", um dem Verzeichnis und allen Unterordnern, wie Dateien innerhalb der Verzeichnisse, einen neuen Besitzer zuzuweisen und ein "chmod -R 755 verzeichnis/", um allen Dateien, Unterverzeichnissen und dem Verzeichnis selbst die Berechtigungen

  • User: lesen, schreiben, ausführen (rwx)
  • Gruppe: lesen, ausführen (rx)
  • Anderen: lesen, ausführen (rx) zu geben

Dazu kann man noch sagen, dass man mit dem Befehl "ls -l" oder "ls -la" die aktuell gesetzten Berechtigungen des Ordners und aller Dateien anzeigen lassen kann, wo man sich gerade befindet. Wenn man also mit "cd /srv" in das /srv-Verzeichnis wechselt und dann "ls -l" eingibt, werden einem alle Ordner angezeigt, die sich in dem /srv-Verzeichnis befinden und dessen Rechte, wie Besitzer und Gruppen.

Abschließend würde ich mich für eure Aufmerksamkeit bedanken und hoffen, dass euch dieser Artikel, der ja nun doch sehr umfassend war, weitergeholfen hat. Einen schönen Tag wünsche ich und bis zum nächsten Mal.