Linux ist eindeutig ein Mehrbenutzersystem, und daher ist es erforderlich, ein Berechtigungssystem bereitzustellen, um genehmigte Vorgänge an Dateien und Verzeichnissen zu steuern, einschließlich aller Systemressourcen und Laufwerke (in einem Unix-System wird jedes Laufwerk als eine Datei oder ein Verzeichnis dargestellt). Dies ist allen Unix-Systemen gemein, aber ist immer sinnvoll daran zu erinnern, vor allem, da es einige sehr interessante und relativ unbekannte fortgeschrittene Anwendungen davon gibt.
9.3.1. Owners and Permissions
Jede Datei und jeder Ordner hat spezifische Berechtigungen für drei Kategorien von Benutzern:
seinen Eigentümer (symbolisiert durch u
wie in „user“);
seine Eigentümergruppe (symbolisiert durch g
wie in „group“), die alle Mitglieder der Gruppe repräsentiert;
die Sonstigen (symbolisiert durch o
wie in „other“).
Three basic types of rights can be combined:
Lesen (symbolisiert durch r
wie in „read“);
Schreiben (oder Ändern, symbolisiert durch w
wie in „write“);
Ausführen (symbolisiert durch x
wie in „eXecute“).
Bei einer Datei sind diese Berechtigungen leicht zu verstehen: Lesezugriff erlaubt das Lesen des Inhalts (einschließlich des Kopierens), Schreibzugriff erlaubt es, sie zu verändern, und Ausführungszugriff erlaubt es Ihnen, sie auszuführen (was nur funktionieren wird, wenn sie ein Programm ist).
Ein Verzeichnis wird anders gehandhabt. Lesezugriff gewährt das Recht, die Liste der Einträge (Dateien und Verzeichnisse) durchzugehen, Schreibzugriff erlaubt es, Dateien zu erstellen oder zu löschen, und Ausführungszugriff erlaubt es, dieses zu durchqueren (insbesondere dorthin mit dem Befehl cd
zu gehen). Die Berechtigung, ohne ein Verzeichnis zu lesen auf dessen Inhalt zugreifen zu können, gestattet Zugriff auf namentlich bekannte Dateien, nicht jedoch auf solche von denen man nichts weiß oder deren genauen Namen man nicht kennt.
Drei Befehle steuern die einer Datei zugeordneten Berechtigungen:
chown Benutzer Datei
ändert den Eigentümer der Datei;
chgrp Gruppe Datei
ändert die Eigentümergruppe;
chmod Rechte Datei
ändert die Berechtigungen für die Datei.
Es gibt zwei Arten, die Berechtigungen darzustellen, wovon die symbolische Darstellung wohl am einfachsten zu verstehen und zu merken ist. Es geht um die oben erwähnten Buchstabensymbole. Sie können Berechtigungen für jede Kategorie von Benutzern festlegen (u
/g
/o
), indem Sie sie entweder ausdrücklich setzen (mit =
), sie hinzufügen (+
) oder sie entfernen (-
). So gewährt die Formel u=rwx,g+rw,o-r
dem Eigentümer Lese-, Schreib- und Ausführungszugriff, fügt Lese- und Schreibzugriff für die Eigentümergruppe hinzu und entfernt den Lesezugriff für andere Benutzer. Rechte, die in einem solchen Befehl nicht durch Hinzufügen oder Entfernen modifiziert werden, bleiben unverändert. Der Buchstabe a
, für „all“, deckt alle drei Benutzerkategorien ab, so dass a=rx
allen drei Kategorien die gleichen Rechte gewährt (Lesen und Ausführen, aber nicht Schreiben).
Die (oktale) Zahlendarstellung ordnet jeder Berechtigung einen Wert zu: 4 für Lesen, 2 für Schreiben und 1 für Ausführen. Wir verknüpfen jede Kombination von Berechtigungen durch die Summe der Zahlen. Jeder Wert wird dann einer anderen Kategorie von Benutzern zugeordnet, indem sie von vorne nach hinten in der üblichen Reihenfolge (Eigentümer, Gruppe, Sonstige) angeordnet werden.
For instance, the chmod 754 file
command will set the following rights: read, write and execute for the owner (since 7 = 4 + 2 + 1); read and execute for the group (since 5 = 4 + 1); read-only for others. The 0
(zero) means no rights; thus chmod 600 file
allows for read/write rights for the owner, and no rights for anyone else. The most frequent right combinations are 755
for executable files and directories, and 644
for data files.
Um spezielle Berechtigungen darzustellen, können Sie dieser Zahl eine vierte Ziffer nach dem gleichen Prinzip voranstellen, wobei die setuid
-, setgid
- und sticky
-Bits jeweils 4, 2 und 1 entsprechen. chmod 4754
fügt das setuid
-Bit den zuvor beschriebenen Berechtigungen hinzu.
Beachten Sie, dass die oktale Schreibweise es nur erlaubt, alle Berechtigungen gleichzeitig für eine Datei zu setzen. Sie können sie nicht dazu benutzen, einfach eine neue Berechtigung hinzuzufügen, wie den Lesezugriff für die Eigentümergruppe, da Sie die bestehenden Berechtigungen berücksichtigen und den entsprechenden neuen numerischen Wert berechnen müssen.
9.3.2. ACLs - Access Control Lists
Many filesystems, e.g. Btrfs, Ext3, Ext4, JFS, XFS, etc., support the use of Access Control Lists (ACLs). These extend the basic features of file ownership and permission, described in the previous section, and allow for a more fine-grained control of each (file) object. For example: A user wants to share a file with another user and that user should only be able to read the file, but not write or change it.
For some of the filesystems, the usage of ACLs is enabled by default (e.g. Btrfs, Ext3, Ext4). For other filesystems or older systems it must be enabled using the acl
mount option - either in the mount
command directly or in /etc/fstab
. In the same way the usage of ACLs can be disabled by using the noacl
mount option. For Ext* filesystems one can also use the tune2fs -o [no]acl /dev/device
command to enable/disable the usage of ACLs by default. The default values for each filesystem can usually be found in their homonym manual pages in section 5 (filesystem(5)) or in mount(8).
After enabling ACLs, permissions can be set using the setfacl(1) command, while getfacl(1) allows one to retrieve the ACLs for a given object or path. These commands are part of the acl package. With setfacl
one can also configure newly created files or directories to inherit permissions from the parent directory. It is important to note that ACLs are processed in their order and that an earlier entry that fits the situation has precedence over later entries.
If a file has ACLs set, the output of the ls -l
command will show a plus-sign after the traditional permissions. When using ACLs, the chmod
command behaves slightly different, and umask
might be ignored. The extensive documentation, e.g. acl(5) contains more information.