|
Dateirechte sind der Dreh- und Angelpunkt im Bezug auf Sicherheitsaspekte bei einem Betriebssystem. Und obwohl diese unter Linux recht einfach gehalten werden, lassen sich damit alle wichtigen Einstellungsvarianten vornehmen. Dieser Beitrag soll das System dahinter und die Umsetzung erläutern.
Zur Einführung in das Konzept der Dateirechte wird erstmal eine Übungsdatei angelegt. Dazu wird in den persönlichen Ordner gewechselt, eine Datei angelegt und danschließend ihre Rechte aufgelistet.
cd ~ && touch testfile && ls -la testfile
-rw-r--r-- 1 root root 0 2006-06-03 15:28 testfile
Die tabellarische Aufschlüsselung der ersten 10 Stellen:
| Position |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
| Bedeutung |
Typ |
Besitzer |
Gruppe |
Andere |
| Rechte |
- |
r |
w |
- |
r |
- |
- |
r |
- |
- |
-
Die erste Stelle gibt Auskunft über den Typ: - (Minus) einfache Datei, directory, block device, character device, etc.
-
Das r steht für read und bedeutet, dass die Datei oder der Ordner gelesen weden darf.
-
Das w steht für write und bedeutet, dass die Datei oder Ordner geändert und gelöscht werden darf.
-
Das x steht für execute und bezieht sich auf ausführbare Programme, die damit gestartet werden dürfen. Bei Verzeichnissen wird damit erlaubt selbige zu betreten.
Im obigen Fall lässt sich die Aufschlüsselung für die Datei testfile so interpretieren:
-
Besitzer (user) darf lesen und schreiben, bzw. löschen
-
Gruppe (group) darf lesen (bezieht sich nur auf die Hauptgruppe des Besitzers)
-
Andere (other) dürfen lesen
Die Rechteeigenschaften werden mit dem Befehl chmod verwaltet. Dabei stehem diesem Befehl zwei Methoden zur Verfügung. Die erste Methode ist die absolute Rechtevergabe. Dabei wird jedem der drei Attribute ein Zahlenwert (oktales Zahlensystem) zugeordnet.
Im obigen Beispiel könnte man deshalb die Darstellung also auch so interpretieren:
-[42-][4--][4--] 1 root root 0 2006-06-03 15:28 testfile
Das bedeutet, der ersten 3er Gruppe (user) wären die Werte 4 und 2 zuzuordnen, der zweiten 3er Gruppe (group) der Wert 4 und der dritten 3er Gruppe (other) ebenfalls der Wert 4. Nun werden aber bei der absoluten Rechtevergabe nicht die Einzelwerte eingesetzt, sondern immer die Summe der Einzelwerte pro 3er Gruppe! Da zum besseren Verständnis nun die Rechteeigenschaften so geändert werden sollen, dass auch group und other Schreibrechte bekommen sollen, muss bei group und other zur 4 (lesen) die 2 (schreiben) hinzuaddiert werden.
Nun wird die Änderung überprüft:
-rw-rw-rw- 1 root root 0 2006-06-03 15:30 testfile
oder wieder interpretiert
-[44-][44-][44-] 1 root root 0 2006-06-03 15:28 testfile
Wichtig bei der absoluten Rechtevergabe ist, dass bestehende Rechte bei hinzukommenden berücksichtigt werden müssen. Eine Eingabe von beispielsweise chmod 622 testfile hätte zwar die Schreibrechte hinzugefügt, die Leserechte aber entzogen! Deshalb nennt man diese Art der Rechtevergabe auch absolute Rechtevergabe.
Die zweite Möglichkeit wäre die relative Rechtevergabe, bei der das zu ändernde Attribut in der jeweiligen 3er Gruppe direkt angesprochen wird. Mit + wird ein Recht hinzugefügt, mit - entzogen.
Als Beispiel werden jetzt die Änderungen die oben durchgeführt wurden wieder rückgängig gemacht, indem group und other das Schreibrecht wieder entzogen wird:
Damit wären die Rechteeigenschaften wieder im Ursprungszustand. Zu achten ist hier auf die Kommatrennung ohne Leerzeichen bei den Attributänderungen, wenn mehrere Änderungen durchgeführt werden sollen!
Unter Linux bestehen noch besondere Möglichkeiten der Rechtevergabe. Zum einen das User-Bit und das Group-Bit. Ist das User-Bit oder das Group-Bit gesetzt, dann wird eine ausführbare Binäratei mit den Rechten des Eigentümers, bzw. der Gruppe des Eigentümers ausgeführt. Dies kann dann Notwendig sein, wenn die Ausführung der Binärdatei weitere Prozesse oder Resourcen bedient, für die der ausführende Benutzer normalerweise nicht genügend Rechte besitzen würde.
-
User-Bit = 4
-
Group-Bit = 2
Bei deren Anwendung wird das jeweilige Bit den allgemeinen Rechten voransgestellt. Nehmen wir nun an, testfile sei eine ausführbare Binärdatei und die momentanen Rechte wären wie folgt gesetzt.
-rwxr-xr-x 1 root root 0 2006-06-03 15:31 testfile
Nun möchte Benutzer XY dieses Programm starten. Die Rechte zum Ausführen hat er (x). Nun bedient das Programm allerdings weitere Prozesse oder Systemresourcen, auf die Benutzer XY keinen Zugriff hat. Dann muss das User-Bit gesetzt werden, damit Benutzer XY das Programm fehlerfrei ausführen kann.
Die Rechte haben sich nun wie folgt geändert:
-rwsr-xr-x 1 root root 0 2006-06-03 15:32 testfile
Jetzt kann der Benutzer das Programm fehlerfrei ausführen, da es nun mit den Rechten des Besitzers root ausgeführt wird. Möchte man das Group-Bit setzen, ist analog zu verfahren, nur mit dem Wert 2. In der Bedeutung unterscheidet es sich dahingehend, dass das Programm dann mit den Rechten der Gruppe ausgeführt wird.
An dieser Stelle sein aber angemerkt, dass mit diesen beiden Bits äußerst sorgsam umgegangen werden muss, da man durch eine nicht weit genug durchdachte Anwendung extreme Sicherheitslücken verursachen kann. Des Weiteren ist deren Anwendung in aller Regel auch nicht notwendig.
Das dritte Bit ist das Sticky-Bit und hat den Wert 1. Damit ist es möglich ein Verzeichnis für alle zur Verfügung zu stellen und trotzdem darf nur jeder seine eigenen Dateien ändern. Als Beispiel ein für alle zugängliches Verzeichnis.
drwxrwxrwx 1 root root 0 2006-06-03 15:33 test
Das Setzen des Sticky-Bits erfolgt wie auch das Setzen der anderen beiden Bits.
Die Rechteauflistung hat sich nun wie folgt geändert.
drwxrwxrwt 1 root root 0 2006-06-03 15:34 test
Nun kann immernoch jeder in das Verzeichnis und dort Daten anlegen, aber jeder darf nur die von ihm selbst angelegten ändern.
Abschließend zu diesem Unterkapitel ist noch die Funktionen von umask zu erwähnen. Damit lassen sich die Default-Rechte von neuen Dateien und Ordnern festlegen. Im Prozess seiner Erstellung wird ein Ordner erstmal mit den Rechten 777 gebildet. Im weiteren Verlauf des Erstellungsprozesses wird dann der umask Wert abgefragt. Dieser hat in der Regel den Wert 0022. Das Besondere an der Anwendung ist, dass nun die entsprechenden Wertigkeiten vom ursprünglichen Wert 777 abgezogen werden! Daraus folgt, dass der Ordner letzendlich mit den Rechten 755 angelegt wird.
Als praktisches Beispiel führt die Ausführung des Befehls umask im home-Verzeichnis zu der Ausgabe 0022. Daraufhin wird mit mkdir test_1 der Ordner test_1 erstellt. Die Rechte sind wie folgt gesetzt:
drwxr-xr-x 2 pace pace 4096 2006-06-03 17:43 test_1
Nun wird der Befehl umask 0007 angewandt und ein weiteres Verzeichnis mit dem Namen test_2 erstellt. Während die Rechte von test_1 unberührt blieben, sehen die Rechte von test_2 so aus:
drwxr-x--- 2 pace pace 4096 2006-06-03 17:43 test_2
Die Standardmaske ist in der Datei /etc/profile festgelegt und sollte ohne besonderen Grund auch nicht geändert werden. Dateien werden mit den Rechten 666 erstellt, auf welche dann die gleiche umask Maske gelegt wird. Damit haben Dateien nach dem Anlegen die Default-Rechte 644.
Weitere Informationen:
-
Die Informationen zu den Rechten einer Datei (einfache Datei, Ordner oder Gerätedatei), sowie viele weitere Informationen (Letzter Zugriff, Größe, etc.) werden in der Inode-Liste auf der Festplatte gespeichert.
-
Ab dem Kernel 2.6 bietet Linux auch die Möglichkeit ACLs (Access Control Lists) einzusetzen, mit denen die Rechtevergabe noch expliziter, aber auch komplizierter erfolgt.
|