last modified
18.04.2024
Ihr Browser unterstützt kein CSS. Das für die Darstellung dieser Webseiten intendierte Seitenlayout wird deshalb nicht angewandt / angezeigt. Ist dies nicht Ihre Absicht, so haben Sie wahrscheinlich in Ihrem Browser den Autorenmodus deaktiviert. Dennoch sind diese Seiten les- und navigierbar.
Texte der Infoboxen werden inline ausgegeben.
Bitte erlauben Sie den Autorenmodus oder verwenden Sie einen CSS-fähigen Browser, wenn Sie diese Seiten so anschauen möchten, wie sie vom Autor gestaltet wurden.
von Michael Luthardt
Wer sein Ubuntu etwas ambitionierter nutzen möchte, kommt um das Arbeiten auf der Kommandozeile nicht herum; und hierzu ist die Kenntnis der Unix-Zugriffsrechte (permissions, file mode) unerläßlich.
Natürlich gibt es die man-pages für chmod, chown und chgrp und schon viele Beiträge im Internet. Selten trifft man aber eine wirklich vollständige Übersicht. In einer solchen muss es Erklärungen zu u, g, o, a, r, w, x, X, s, S, t und T und der vierstelligen oktalen Darstellung geben.
Es erleichtert das Verständnis der Wirkung der Zugriffsrechte auf Verzeichnisse, sich zu erinnern: Verzeichnisse sind Dateien und müssen, um zu funktionieren, ausführbar sein.
Zugriffsrechte sind r, w: Leserecht, Schreibrecht. x kennzeichnet eine Datei als ausführbar1. Angezeigt werden die Zugriffsrechte mit ls -l
; weiteres siehe hierzu in der ls man-page.
Zugriffs- recht | Wirkung auf | |
---|---|---|
Datei | Verzeichnis | |
r | Inhalt lesbar | nur Dateinamen lesbar |
w | Inhalt änderbar | Dateien anlegen, löschen |
x | ausführbar | traversierbar2 |
r-x | Dateien und deren Eigenschaften lesbar |
Im Prinzip sind die Wirkungen der Rechte additiv; rw bedeutet z. B., dass eine Datei les- und beschreibbar ist. Für Verzeichnisse gibt es jedoch eine Ausnahme. r-x ist mehr als Dateinamen auflisten und traversieren, diese Rechtekombination erlaubt das Auflisten der Dateieigenschaften und damit das Verhalten eines Verzeichnisses, wie man es üblich gewohnt ist.
Diese Rechte können mit dem Eigentümer u einer Datei3, der Gruppe g, anderen o oder gleichzeitig allen a 4 mit dem Befehl chmodchange mode gegeben oder entzogen werden. Näheres findet sich in der man-page für chmod.
Zum Wechsel von Besitzer und Gruppe für eine Datei genügt es übrigens, sich chownchange owner zu merken; chown .groupname datei
wechselt die Gruppe, chown username.groupname datei
beides.
X ist nur von Bedeutung für das rekursive Zuweisen der Ausführungsberechtigung mit dem Befehl chmod -R
. Im Unterschied zur Benutzung von x wird die Ausführungsberechtigung nur Verzeichnissen zugewiesen oder Dateien, die für u oder g oder o bereits ausführbar sind.
Ein großes X kann nie in der Anzeige von Berechtigungen mit ls -l auftauchen.
Sonderrechte
Über die grundlegenden Unix-Rechte r, w und x für jeweils u, g und o hinaus gibt es die Möglichkeit, im mode-Feld drei weitere Eigenschaften festzulegen: SUID, SGID und das sticky bit.
SUID, Set User ID, bedeutet, dass eine binäre ausführbare Datei auch bei Aufruf durch einen Nicht-Eigentümer mit den Rechten des Eigentümers ausgeführt wird. Dies nutzt man z. B. für die Datei /usr/bin/passwd. So kann mit diesem Programm jeder sein eigenes Passwort in der nur für root schreibbaren Datei /etc/shadow ändern. Ein weiteres Beispiel finden Sie in der Auswahlliste unter Creation Time.
Für reguläre (nicht ausführbare) Dateien, ausführbare Shellskripte5 und Verzeichnisse ist SUID wirkungslos.
Eingeschaltet wird das SUID-Bit mit chmod u+s Datei
.
SGID, Set Group ID, bewirkt für Verzeichnisse eine rekursive Vererbung der Gruppenzugehörigkeit auf alle neu angelegten untergeordneten Verzeichnisse und Dateien. Eine binäre ausführbare Datei wird mit den Rechten ihrer Gruppe ausgeführt wird.
Für reguläre (nicht ausführbare) Dateien und ausführbare Shellskripte ist SGID wirkungslos.
Eingeschaltet wird das SGID-Bit mit chmod g+s {Verzeichnis | Datei}
.
Das sticky bit, klebrige Bit, wird nur für Verzeichnisse gesetzt. Es bewirkt, dass in Verzeichnissen, für die andere/alle Benutzer Schreibrechte haben6, Dateien nur von ihren Besitzern, dem Besitzer des Verzeichnisses und dem Superuser (root) gelöscht werden können. Ist der Verzeichnisbesitzer, der eine fremde Datei löschen will, nicht root, erfolgt für rm
ohne Option -f eine Sicherheitsabfrage.
Genutzt wird dies z. B. für das /tmp-Verzeichnis.
Für Dateien ist das sticky bit wirkungslos.
Eingeschaltet wird das sticky bit mit chmod o+t Verzeichnis
.
In der Auflistung der Dateirechte durch ls -l gibt es nur je drei Plätze rwx für u, g und o. Um nun die Sonderrechte ebenfalls mit ls anzeigen zu können, wird für gesetztes SUID und SGID das x für u und g durch s ersetzt, beim sticky bit das zu o gehörende x durch t.
Sollten die Dateien nicht ausführbar sein, erfolgt die Ersetzung der - durch S bzw. T, um die Standardrechte erkennen zu können. Rechtekombinationen, die zu S führen, kommen standardmäßig nicht vor und T gibt es nur für wenige Systemverzeichnisse.
In Kürze zusamengefasst:
Sonder- recht | Wirkung auf | ||
---|---|---|---|
reguläre Dateien | ausführbare Dateien | Verzeichnisse | |
SUID | keine | ausführen mit den Rechten des Eigentümers | keine |
SGID | keine | ausführen mit den Rechten der Gruppe | Vererbung der Gruppen- eigentümerschaft |
sticky | keine | keine | löschen von Dateien nur durch ihren Eigentümer |
Für welche Dateien Sonderrechte gesetzt sind, findet man mit den Befehlen
sudo find / -perm -u=s -exec ls -ld --color=always {} \;
sudo find / -perm -g=s -exec ls -ld --color=always {} \;
sudo find / -perm -o=t -exec ls -ld --color=always {} \;
Es ist durchaus interessant, sich für sein System dies einmal anzuschauen.
In Skripten lassen sich einzelne Rechte einer Datei mit [ -y file ]
ermitteln. y ist durch r, w oder x für die Standardrechte und mit u, g oder k für die Sonderrechte (SUID, SGID, sticky bit) zu ersetzen.
Neben der mnemotechnischen Schreibweise rwx für die Dateirechte gibt es die oktale Darstellung der vier Rechtegruppen in der Form 0000. Die erste Ziffer steht für die Sonderrechte und wird nur angezeigt, wenn wenigstens eines dieser Rechte gesetzt ist. Die weiteren Ziffern stehen für die Rechte rwx von u, g und o.
SUID | r | 4 |
SGID | w | 2 |
sticky | x | 1 |
Der Zahlenwert ergibt sich aus der Addition der Werte entsprechend der Tabelle.
Natürlich kann die oktale Schreibweise auch in Befehlen wie chmod 1777 Verzeichnis
genutzt werden. In dem Fall würde Verzeichnis öffentlich Les- und Schreibbar und hätte das sticky bit gesetzt.
Möchte man die Zugriffsrechte oktal anzeigen, kann man die Funktion lo in seine .bashrc einbauen. Testen auf den kompletten Rechtesatz läßt sich z. B. mit [ $(stat --format=%a filespec) == 1777 ]
.
Im weiteren Sinne gehören zu den Zugriffsrechten unter Linux die in ext3/ext4, xfs und anderen Dateisystemen vorhandenen ACL und die weniger bekannten Dateiattribute.
Mit beiden lassen sich Zugriffsrechte weiter differenzieren. ACL sind besonders nützlich für Samba-Server.
Die Attribute sind nicht in allen Systemen vollständig implementiert. Zwei besonders interessante sind jedoch immer benutzbar: immutable und append7 (only). i macht eine Datei unveränderbar und a beschränkt das Ändern einer Datei auf das Hinzufügen neuer Daten. So kann man mit a ohne SUID oder SGID z. B. eine Logdatei gemeinsam nutzen oder für ein Verzeichnis erreichen, dass dort nur Dateien neu angelegt und mittels append erweitert, nicht aber geändert oder gelöscht werden dürfen.
Hat root ein immutable Attribut gesetzt, kann auch root die Datei nicht mehr löschen, bevor es wieder aufgehoben wird. Das komplette Directory, in dem sich eine immutable Datei befindet, kann allerdings von jedem, der die dafür notwendigen Rechte hat, innerhalb des DateisystemsEin Verschieben des Ordners ändert weder die inodes der in ihm enthaltenen Dateien noch deren Inhalt.
Dies führt zu dem zunächst verblüffend erscheinenden Effekt, das sich ein Ordner verschieben läßt, auf dessen sämtliche Dateien man keinerlei Zugriffrechte hat. verschoben werden!8
Weitere Informationen hierzu findet man in den man-pages zu setfacl, getfacl, chattr und lsattr.
Da getfacl nicht zwischen Dateien und Verzeichnissen unterscheidet, kann man sich zur besseren Übersicht Funktionen analog lld oder llf schreiben.
Für lsattr ist es zweckmäßig, mit | grep -vE '-{18}'
die Ausgabe auf die wenigen Dateien zu beschränken, für die tatsächlich Attribute gesetzt sind.
1 read, write, execute
2 Traversieren bedeutet das Recht, in untergeordnete Verzeichnisse hineinwechseln zu können, ohne für das übergeordnete Verzeichnis Leserecht zu besitzen. Lesen von und Schreiben in Dateien ist im untergeordneten Verzeichnis möglich – Dateirechte vorausgesetzt –, nicht jedoch eine Pfadnamenvervollständigung durch das nur traversierbare Verzeichnis.
3 Im Folgenden schließt Datei Verzeichnis mit ein, falls nicht extra eingeschränkt wird.
4 user, group, other, all
5 Die bash reicht die Sonderrechte nicht an innerhalb des Skripts befindliche binäre Befehle weiter; es müsste für die bash selbst SUID oder SGID gesetzt werden, was sich selbstverständlich verbietet. Für einen Befehl in einem Skript ist das SUID wirksam.
6 Zur Erinnerung: Schreibrecht im Verzeichnis bedeutet anlegen und löschen von Dateien daselbst.
7 Wirkliches append wie command >> file
oder cat >> file << eof
. Ein weiterschreiben von Dateien mit Editoren gelingt nicht, weil Editoren die Datei zum Schreiben öffnen, was für gesetztes a(ppend) ja verboten ist.
8 Somit läßt sich ein Ordner, der eine immutable Datei enthält, im virtuellen Desktop-Filesystem löschen, denn das ist nur ein Verschieben in den Trash-Ordner. Danach ist ist es nicht mehr möglich, den Mülleimer zu leeren! Abhilfe: Das Attribut der Datei auf der Konsole im Trash-Ordner zurücksetzen.
03.12.2007/28.10.2013