Dateirechte setzen und verändern unter Linux

Dateirechte setzen und verändern unter Linux sind Lerninhalte der LPI Prüfungen Linux Essentials, Thema 5 und LPI 101, Thema 104.5

Autoren: Michael Gisbers und Christian Hesse

Nachdem der letzte Artikel dieser Reihe die Besitz- und Zugriffsrechte ausführlich erklärt hat, geht es hier um die wichtigen Kommandos, mit denen Sie die Dateirechte 'ändern': "chown", "chgrp"und "chmod".

Zuvor aber stellen wir das Kommando "stat" vor, das die Rechte sehr übersichtlich anzeigt:

----------

user@linux ~$ stat kapitel.txt

File: 'kapitel.txt'

Size: 819 Blocks: 8 IO Block: 4096 regular file

Device: fd06h/64774d Inode: 439267 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 4000/mgisbers) Gid: ( 4000/mgisbers)

Access: 2013-03-25 18:52:04.283934329 +0100

Modify: 2013-03-25 18:52:04.283934329 +0100

Change: 2013-03-25 18:52:04.288934359 +0100

----------

Es finden sich alle bereits bekannten Parameter wieder. Darüber hinaus sind einige Zeitangaben eingeblendet. Die vom Befehl "ls" standardmäßig ausgegebene Zeit ist die 'mtime' (Modifikationszeit), also der Zeitpunkt der letzten Änderung am Inhalt der Datei. Weniger bekannt sind die 'atime' (Zugriffszeit), das Datum des letzten Zugriffs auf den Dateiinhalt, und die 'ctime' (Änderungszeit), die den Zeitpunkt der letzten Rechteänderung angibt.

In vielen Konfigurationen wird inzwischen von der aktiven Nutzung der 'atime' abgesehen, da jeder Lesezugriff auf den Inhalt der Datei einen Schreibzugriff nach sich zieht. Nur wenige Administratoren nutzen die 'atime' bei Ihrer Arbeit, tatsächlich wird bei aktuellen Systemen standardmäßig die 'atime' erst beim schreiben der 'ctime' oder 'mtime' mit aktualisiert.


Besitzrechte

Zur Kontrolle der Besitzrechte von Benutzer und Gruppe einer Datei dienen die beiden Kommandos "chown" und "chgrp". Jede Datei kann genau einem Benutzer und einer Gruppe gehören.

Mittels "chown" lassen sich beide Werte gleichzeitig ändern. Dafür werden Benutzer und Gruppe durch einen Doppelpunkt (":") getrennt angegeben. Es funktionieren sowohl die numerischen IDs als auch die namentliche Darstellung.

Einige Beispiele:

----------

root@linux ~# chown user:gruppe kapitel.txt

root@linux ~# chown 1000:1001 kapitel.txt

root@linux ~# chown user kapitel.txt

root@linux ~# chown :gruppe kapitel.txt

----------

Die letzten beiden Beispiele sind ein Beispiel dafür, wie nur der Benutzer 'oder' die Gruppe geändert wird.

Eine Alternative für das letzte Beispiel stellt der Befehl "chgrp" dar, der nur die Gruppe einer Datei ändert:

----------

root@linux ~# chgrp gruppe kapitel.txt

----------

Für beide Befehle gibt es einen Parameter "-R", um rekursiv Verzeichnisse zu bearbeiten.

Vielleicht ist Ihnen schon aufgefallen, dass die Befehle als Benutzer "root" ausgeführt wurden. Dies hat einen einfachen Hintergrund: Auch wenn ein Benutzer der Eigentümer einer Datei ist, so hat er nicht die Berechtigung, die Datei einem anderen Benutzer zuzuweisen. Ebenso kann er nur Gruppen zuordnen, in denen er selbst Mitglied ist. Nur der privilegierte Benutzer "root" ist in der Lage, Rechte für beliebige Benutzer und Gruppen zu vergeben.


Zugriffsrechte

Bei den Zugriffsrechten -- die Kombination der Lese-, Schreib- und Ausführrechte für Benutzer, Gruppen und anderer -- gibt es grundsätzlich zwei verschiedene Schreibweisen.

Den meisten Linux-Benutzern wird die sogenannte 'Oktalschreibweise' bekannt sein, bei der eine drei- oder vierstellige Zahlenkombination die Zugriffsrechte anzeigt.

Hier entsprechen die Ziffern der Summe aus den verschieden Berechtigungswerten.

- r = Leseberechtigung = 4

- w = Schreibberechtigung = 2

- x = Ausführberechtigung = 1

Die Position der jeweiligen Summen in der Zahlenkombination gibt den Bereich an, für den sie gelten:

- Sonderrechte (bei vierstelligen Zahlenkombinationen)

- Benutzer

- Gruppe

- andere

Setzt man nun die Berechtigung "640" auf eine Datei, bedeutet dies, dass der Benutzer Lese- und Schreibrechte, die Gruppe Leserechte und andere keinen Zugriff haben.

----------

root@linux ~# chmod 640 kapitel.txt

root@linux ~# ls -l kapitel.txt

-rw-r----- 1 user gruppe 3592 26. Mär 11:21 kapitel.txt

----------

Um sicherzustellen, dass nicht weitere Sonderrechte eingeräumt werden, sollte zusätzlich eine "0" vorangestellt werden, die eventuell vorhandene Sonderrechte zurücksetzt. Natürlich kann der Befehl "chmod" auch mit dem Parameter "-R" für den rekursiven Aufruf genutzt werden, allerdings ist hierbei zu beachten, dass für Verzeichnisse die Ausführbrechtigung ("x") gesetzt sein muss, um in das Verzeichnis zu wechseln. Es haben sich schon viele Administratoren durch einen unüberlegten Aufruf des Befehls "chmod" die Zugriffsrechte kompletter Verzeichnisstrukturen zerstört.

Die Angabe der Rechte in Oktalschreibweise hat den entscheidenden Nachteil, dass sie immer nur einen fixen Wert vorgibt. Es ist mit ihr nicht möglich, auf der Grundlage bestehender Rechte einzelne weitere zu gewähren.

Daher gibt es eine zweite Möglichkeit, die Rechte anzugeben.

Hierbei steht zunächst der Bereich für das Recht:

- u = Benutzer

- g = Gruppe

- o = Andere

- a = alle (Benutzer, Gruppe und andere)

Danach folgt ein Modifikator:

- + = hinzufügen

- - = entfernen

- = = den angegeben Wert setzen

Und zuletzt die eigentlichen Rechte:

- r = Leseberechtigung

- w = Schreibberechtigung

- x = Ausführberechtigung

- X = Ausführberechtigung, wenn die Datei ein Verzeichnis ist oder bereits

Benutzer, Gruppe oder andere eine Ausführberechtigung haben

- u = die Rechte, die aktuell dem Benutzer zugeordnet sind

- g = die Rechte, die aktuell der Gruppe zugeordnet sind

- o = die Rechte, die aktuell den Anderen zugeordnet sind

- s = SetUID oder SetGID - Sonderrechte

- t = StickyBit, eingeschränktes Löschen

Direkt ein Beispiel, um einer Datei die gleichen Rechte wie im letzten Beispiel ("640") zu geben:

----------

root@linux ~# chmod u=rw,g=r kapitel.txt

root@linux ~# ls -l kapitel.txt

-rw-r----- 1 user gruppe 3592 26. Mär 11:21 kapitel.txt

----------

Die verschiedenen Kombinationen lassen sich, durch Kommata getrennt, nacheinander angeben. Im nächsten Beispiel erhält die Gruppe zusätzlich die Schreibberechtigung, die anderen Leserechte:

----------

root@linux ~# chmod g+w,o=r kapitel.txt

root@linux ~# ls -l kapitel.txt

-rw-rw-r-- 1 user gruppe 3592 26. Mär 11:21 kapitel.txt

----------

Es ist sinnvoll, die verschiedenen Möglichkeiten dieses Befehls auszuprobieren. Im Zweifelsfall hilft auch die Manualpage ("man chmod") des Befehls "chmod" mit vielen nützlichen Zusatzinformationen.

Dies waren die Informationen zum Setzen und Verändern der Besitz- und Zugriffsrechte. Der nächste Artikel dieser Reihe enthält Informationen zu den erweiterten Besitz- und Zugriffsrechten (ACLs).