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