9.2 Berechtigungen
Berechtigungen sind der andere wichtige Teil eines des Mehrbenutzer-Aspekts des Dateisystems. Mit diesen können Sie ändern wer Dateien lesen, schreiben und ausführen kann.
Die Besitzinformation wird in vier oktalen Zahlen gespeichert, wobei jede einer unterschiedlichen Zusammenstellung von Berechtigungen entspricht. Es gibt Besitzer-Berechtigungen, Gruppen-Berechtiungen und Welt-Berechtigungen. Die vierte oktale Zahl wird benutzt um spezielle Informationen zu speichern, wie set user ID, set group ID, und das sticky bit. Die oktalen Werte, die den Berechtigungen zugeordnet sind, sind (sie haben auch Buchstaben zugeordnet welche von Programmen wie ls angezeigt werden und mit chmod genutzt werden können):
Tabelle 9-1. Oktale Berechtigungs Werte
| Berechtigungstyp | Oktalwert | Buchstabenwert |
| "sticky" bit | 1 | t |
| set user ID | 4 | s |
| set group ID | 2 | s |
| lesen | 4 | r |
| schreiben | 2 | w |
| ausführen | 1 | x |
Sie fügen die oktalen Werte für jede Berechtigungsgruppe zusammen. Zum Beispiel, wen Sie die Gruppen-Berechtigungen auf "lesen" und "schreiben" haben wollen, würden Sie "6" im Gruppen-Bereich der Berechtingunsinformation angeben.
bash's Standard Berechtigungen sind:
% ls -l /bin/bash -rwxr-xr-x 1 root bin 477692 Mar 21 19:57 /bin/bash
Der erste Strich würde mit einem "d" ersetzt werden wenn dies ein Verzeichnis wäre. Die drei Berechtingsgruppen (Besitzer, Gruppe und Welt) werden danach angezeigt. Wir sehen das der Besitzer Lese-, Schreib- und Ausführungsrecht hat (rwx). Die Gruppe hat nur Lese- und Ausführungsrecht (r-x). Alle anderen haben nur Lese- und Ausführungsrecht (r-x).
Wie würden wir Berechtigungen auf eine andere Datei setzen, dass sie denen von bash gleichen? Lassen Sie uns zunächst eine Beispiel-Datei erstellen:
% touch /tmp/example % ls -l /tmp/example -rw-rw-r--- 1 david users 0 Apr 19 11:21 /tmp/example
Wir werden chmod(1) (was "Modus ändern" (change mode) bedeutet) nutzen um die Berechtigungen auf die Beispiel-Datei zu setzen. Fügen Sie die Oktalzahlen für die Berechtigungen, welche Sie wollen, zusammen. Um für den Besitzer Lese-, Schreibe- und Ausführungsrecht zu haben, hätten wir eienn Wrt von 7. Lese- und Ausführungsrecht wäre 5. Fügen Sie diese zusammen und übergeben Sie sie an chmod wie hier:
% chmod 755 /tmp/example % ls -l /tmp/example -rwxr-xr-x 1 david users 0 Apr 19 11:21 /tmp/example
Nun könnten Sie sich fragen: "Warum hat er die Datei nicht einfach von vornherein mit diesen Berechtigungen erzeugt?" Nun, die Antwort ist einfach. bash hat etwas nettes eingebaut das sich umask nennt. Dieses ist auch in den meisten Unix Shells enthalten und kontrolliert welche Berechtigungen für neu erstellte Dateien vergeben werden. Wir haben in Bash eingebaute Funktionen zu einem gewissen Grad in Abschnitt 8.3.1 diskutiert. Es gehört nicht viel dazu um sich an umask zu gewöhnen. Es funktioniert sehr ähnlich wie chmod, nur andersrum. Sie geben die Oktalwerte die für neu erstellte Dateien nicht existieren sollen. Der standard umask Wert ist 0022.
% umask 0022 % umask 0077 % touch tempfile % ls -l tempfile -rw-------- 1 david users 0 Apr 19 11:21 tempfile
Schauen Sie in die bash Man Page für weitere Informationen.
Um spezielle Berechtigungen mit chmod zu setzen, fügen Sie die Zahlen zusammen und platzieren Sie sie in die erste Spalte. Um sie zum Beispiel auf set user ID und set group ID zu setzen, verwenden wir 6 als erste Spalte:
% chmod 6755 /tmp/example % ls -l /tmp/example -rwsr-sr-x 1 david users 0 Apr 19 11:21 /tmp/example
Wenn die Oktalwerte Sie verwirren, dann können Sie Buchstaben mit chmod verwenden. Die Berechtigungsgruppen sind wie folgt vertreten:
| Besitzer | u |
| Gruppe | g |
| Welt | o |
| Alle obigen | a |
Um obiges zu erreichen müssten wir mehrere Befehlszeilen nutzen:
% chmod a+rx /tmp/example % chmod u+w /tmp/example % chmod ug+s /tmp/example
Einige Leute ziehen die Buchstaben den Zahlen vor. Beide Wege resultieren in der gleichen Zusammenstellung von Berechtigungen
Das Oktalformat ist oft schneller und die Form die am häufigsten in Shellskripten genutzt wird. Manchmal sind die Buchstaben allerdings leistungsfähiger. Es gibt z.B. keinen einfachen Weg mit dem Oktalformat eine Gruppe von Berechtigungen zu ändern während die anderen Gruppen auf Dateien und Verzeichnissen erhalten bleiben. Das ist einfach mit Buchstaben.
% ls -l /tmp/ -rwxr-xr-x 1 alan users 0 Apr 19 11:21 /tmp/example0 -rwxr-x--- 1 alan users 0 Apr 19 11:21 /tmp/example1 ----r-xr-x 1 alan users 0 Apr 19 11:21 /tmp/example2 % chmod g-rwx /tmp/example? -rwx---r-x 1 alan users 0 Apr 19 11:21 /tmp/example0 -rwx------ 1 alan users 0 Apr 19 11:21 /tmp/example1 -------r-x 1 alan users 0 Apr 19 11:21 /tmp/example2
Wir haben set user ID und set group ID Berechtigungen oben an mehreren Stellen erwähnt. Sie könnten sich wundern was das ist. Normalerweise wenn Sie ein Programm ausführen, dann arbeitet es unter ihrem Benutzeraccount. Das bedeutet es hat alle Berechtigungen die Sie als Benutzer haben. Das gleiche gilt für die Gruppe. Wenn Sie ein Programm ausführen, dann wird es unter ihrer aktuellen Gruppe ausgeführt. Mit set user ID Berechtigungen können Sie das Programm zwingen immer als Programm-Besitzer zu laufen (wie zum Beispiel "root"). Set group ID ist das selbe aber für die Gruppe.
Seien Sie vorsichtig damit. Set user ID und set group ID Programme können größte Sicherheitslöcher auf Ihrem System öffnen. Wenn Sie häufig set user ID für Programme setzen für die root der Besitzer ist, dann erlauben Sie jedem dieses Programm als root zu starten. Da root keine Einschränkungen auf dem System hat, können Sie sehen wie dies ein größeres Sicherheitsproblem hervorrufen würde. Kurz geagt ist es nicht verkehrt set user ID und set group ID Berechtigungen zu setzen. Verwenden Sie einfach Ihren gesunden Menschenverstand.