Das Datei Berechtigungssystem unter UNIX und Unix-Derivaten

Das Datei Berechtigungssystem unter UNIX und UNIX Derivaten, wie MAC OSX oder Linux, ist sehr einfach gehalten. Es basiert auf auf den Benutzerklassen Eigentümer, Gruppe und alle Anderen, die für jede Datei und jeden Ordner festgelegt werden. Jeder Benutzerklasse kann eines oder mehrerer der Rechte lesen, schreiben und ausführen zugewiesen werden. Wobei das Recht ausführen im Falle von Verzeichnissen bedeutet, dass Mitglieder der jeweiligen Benutzerklasse in dieses Verzeichnis wechseln dürfen.

Zuweisen von Benutzerklassen

Wird eine Datei oder ein Verzeichnis neu erstellt hängen die zugewiesenen Benutzerklassen vom erstellenden Prozess ab.

Um der Datei oder dem Verzeichnis einen anderen Eigentümer oder eine andere Gruppe zuzuweisen können die Kommandos chown und chgrp verwendet werden. Wobei mit ersterem gleichzeitig der Eigentümer und die Gruppe geändert werden kann:

shell> chown -R www-data:ftpgroup /var/www

Das obige Beispiel weist dem Verzeichnis /var/www rekursiv (Option -R), also auch allen Unterverzeichnissen und Dateien, den Eigentümer www-data und die Gruppe ftpgroup zu.

Zuweise von Berechtigungen

Neben der Informationen über die zugewiesenen Benutzerklassen, muss den Dateien und Verzeichnissen die Berechtigungen für die jeweilige Benutzerklasse zugewiesen werden. Dazu dient das Komando chmod.

Für die Zuweisung der Berechtigungen existieren zwei verschiedene Notationen, die Oktalnotation und die symbolische Notation.

Bei der Oktalnotation werden drei Ziffern für die drei Benutzerklassen in der Reihenfolge Eigentümer, Gruppe, alle Anderen verwendet.

Jedes Recht wird durch eine Zahl repräsentiert:

  • 1 – Ausführen
  • 2 – Schreiben
  • 4 – Lesen

Die effektiven Berechtigungen setzen sich aus der Summer dieser Zahlen zusammen. Lesen und schreiben also aus 1 + 2 = 3, ausführen und lesen aus 1 + 4 = 5 und so weiter. Soll also eine Datei vom Eigentümer gelesen und geändert und von allen Gruppenmitgliedern nur gelesen werden können, wird chmod so verwendet:

shell> chmod 640 /home/chris/public/beispiel.txt 

Alle Anderen Benutzer können danach die Datei beispiel.txt weder lesen, noch ändern und natürlich auch nicht ausführen.

Zur Verdeutlichung noch ein Beispiel. Soll ein Script für alle Benutzer ausführbar (1) und lesbar (4) sein und lediglich für den Eigentümer auch änderbar (2) so kann das mit folgendem Befehl erreicht werden:

shell> chmod 755 /usr/local/bin/backup.sh

Alternativ kann die symbolische Notation verwendet werden. Dabei steht für jedes Recht ein Buchstabe:

  • r – lesen (read)
  • w – schreiben (write)
  • x – ausführen (execute)

Auch für die Benutzerklassen werden Bustaben verwendet:

  • u – Eigentümer (user)
  • g – Gruppe (group)
  • o – Alle Anderen (other users)

DieBerechtigungen müssen für jede Benutzerklasse separat angegeben werden. Dabei kann chmod Berechtigungen zuteilen, aber auch verändern. Also zusätzliche Berechtigungen vergeben oder diese entziehen. Dafür werden die Operanden = für zuteilen, - für entziehen und + für zusätzlich zuteilen verwendet.

Um mit der symbolischen Notation das gleiche Ergebnis zu erreichen wie im letzten Beispiel mit dem Script das nur vom Eigentümer geändert aber von allen gelesen und ausgeführt werden soll, so wird der chmod Befehl dreimal wie folgt verwendet:

shell> chmod u=rwx /usr/local/bin/backup.sh
shell> chmod g=rx /usr/local/bin/backup.sh
shell> chmod o=rx /usr/local/bin/backup.sh 

Wenn nun die Gruppenmitglieder ebenfalls schreibend auf das Script zugreifen können sollen, so erreicht man das mit:

shell> chmod g+w /usr/local/bin/backup.sh

Soll allen anderen das Recht zum Lesen und Ausführen entzogen werden kann analog dazu folgender Befehl verwendet werden:

shell> chmod o-rx /usr/local/bin/backup.sh

Gruppenzugehörigkeit der Benutzer

Um die Berechtigungen nutzen zu können, müssen die User nun noch Gruppen zugeordnet werden. Jeder User kann bei beliebig vielen Gruppen Mitglied sein.

Zur Anzeige der Gruppenmitgliedschaften für einen bestimmten User kann das Kommando groups gefolgt vom Username verwendet werden:

shell> groups chris
chris : chris

Zur Zuweisung von User zu Gruppen dient das Kommando usermod. Soll ein User einer bestimmten Gruppe zugewiesen werden so erfolgt das mit dem Kommando:

shell> usermod -g ftpgroup ftpuser

Danach ist der User ftpuser Mitglied der Gruppe ftpgroup:

shell> groups ftpuser
ftpuser : ftpgroup

Soll nun der ftpuser zusätzlich in der Gruppe www-data sein, um auf Dateien, die über den Webserver hochgeladen wurden schreibend zugreifen zu können, so erreicht man das so:

shell> usermod -a -G www-data ftpuser

Ein erneuter Aufruf von ```groups zeigt dass nun ftpuser Mitglied in zwei Gruppen ist:

shell> groups ftpuser
ftpuser : ftpgroup www-data