Seit Mac OS 10.7 (Lion) kommen ACLs (= Access Control List, in die deutsche Sprache wahrscheinlich am besten mit erweiterten Dateizugriffsberechtigungen zu übersetzen) zum Einsatz. Das fällt zunächst auch technisch versierten Benutzern nicht sofort ins Auge.
Zunächst einmal handelt es sich dabei um nichts Neues. Auf Mac OS wurden diese Dateiattribute mit Mac OS 10.4 (Tiger) eingeführt, welche offiziell am 29. April 2005 erschien.
Die meisten anderen Betriebssysteme hatten ACLs schon bedeutend länger mit an Bord.
Der Funktionsumfang dieser erweiterten Dateizugriffsrechte liegt im wesentlichen im zugrunde gelegten Dateisystem verankert. Und bezüglich Mac OS X haben sich vor einigen Jahren auch schon andere damit befaßt.
Die Befehle, welche man zum Anschauen und zur Bearbeitung von ACLs benutzt lauten:
* ls -le
* chmod +a
Und was soll das jetzt?
Zum einen wird man manchmal unfreiwillig damit konfrontiert, davon handelt mein vorangehender Artikel.
Zum anderen gibt es denkbar viele Anwendungsfälle, welche sich mit ACLs sehr geschickt und einfach lösen lassen. Greifen wir uns also einen heraus …
1. Individuelle Drop Box
Ein jeder Mac OS X Benutzer stellt für andere Anwender eine Ablage für Dateien bereit, deren Inhalt sie aber nicht sehen können bzw. dürfen.
Nun wäre es manchmal hilfreich, einer einzelnen Person das Recht einräumen zu können in ein solches Verzeichnis hineinzuschauen, was denn schon drin liegt. Also eine individuelle Drop Box anlegen.
Man schaut sich die aktuellen Rechte an …
$ ls -le
drwx-wx-wx+ 2 martin staff 102 8 Okt 09:30 Drop Box
0: user:martin allow list,add_file,search,delete,add_subdirectory,delete_child,
readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,
chown,file_inherit,directory_inherit
1: user:_spotlight inherited allow list,search,file_inherit,directory_inherit
-rw-r--r--+ 1 martin staff 1711 8 Okt 09:11 mac_rastetter-gpg.asc
0: user:_spotlight inherited allow read,execute
Das der Kennzeichnung der Zugriffsrechte nachgestellte + Zeichen, gibt einem den Hinweis es sind ACLs für diese Datei gesetzt. Diese werden je Benutzer bzw. Gruppe von dem Befehl ls -le aufgelistet.
ACL 0 : Der Besitzer (martin) des Verzeichnisses bekommt explizit alle Rechte
ACL 1 : Der Spotlight Dienst (_spotlight) darf alles darinnen befindliche lesen und durchsuchen
Bei einer darinnen befindlichen Datei (mein öffentlicher PGP Schlüssel) hat jeder Leserechte und unabhängig davon, wie ich die gewöhnlichen Dateirechte einschränkte, blieb dem Spotlight Dienst die Möglichkeit den Inhalt zu lesen bzw. diese auszuführen (wozu auch immer).
Nun legen wir ein Verzeichnis mit individueller Berechtigung an …
$ cp -Rp Drop\ Box Ina\'s\ Box
$ chmod o-wx Ina\'s\ Box
$ chmod g-wx Ina\'s\ Box
$ chmod +a "ina allow list" Ina\'s\ Box
$ chmod +a "ina allow add_file" Ina\'s\ Box
$ chmod +a "ina allow search" Ina\'s\ Box
$ chmod +a "ina deny delete_child" Ina\'s\ Box
Wir kopieren also das Verzeichnis Drop Box mit Inhalt (in diesem Fall hoffentlich leer) und allen Berechtigungen und nennen es Ina’s Box.
Dann nehmen wir allen anderen Benutzern und jenen der eigenen Gruppe (staff s.o.) alle Rechte.
Wir erlauben nur der Benutzerin ina sich den Inhalt des Verzeichnisses anzusehen, Dateien hinzuzufügen,
darin zu suchen und verbieten das Löschen.
Das ganze sieht dann wie folgt aus …
$ ls -le
drwx-wx-wx+ 2 martin staff 204 10 Okt 08:46 Drop Box
0: user:martin allow list,add_file,search,delete,add_subdirectory,delete_child,
readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,
chown,file_inherit,directory_inherit
1: user:_spotlight inherited allow list,search,file_inherit,directory_inherit
drwx------+ 2 martin staff 306 10 Okt 08:47 Ina's Box
0: user:ina deny delete_child
1: user:ina allow list,add_file,search
2: user:martin allow list,add_file,search,delete,add_subdirectory,delete_child,
readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,
chown,file_inherit,directory_inherit
3: user:_spotlight inherited allow list,search,file_inherit,directory_inherit
-rw-r--r--+ 1 martin staff 1711 8 Okt 09:11 mac_rastetter-gpg.asc
0: user:_spotlight inherited allow read,execute
So, jetzt wollen wir schauen ob und wie es funktioniert.
Alle Benutzer sehen mein öffentliches Verzeichnis im Finder wie folgt:

Wohingegen die Benutzerin ina mein öffentliches Verzeichnis im Finder wie folgt dargestellt bekommt:

Und siehe da, diese Benutzerin kann mir dort nicht nur Dateien hinterlegen, sondern diese und deren Inhalt kontrollieren.

Die tatsächlichen Rechte sehen dann wie folgt aus.
$ ls -le Ina\'s\ Box/
-rw-r--r--+ 1 ina staff 1188252 15 Sep 2009 ObjC.pdf
0: user:martin inherited allow read,write,execute,delete,append,
readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,
chown
1: user:_spotlight inherited allow read,execute
-rw-r--r--+ 1 ina staff 124 10 Okt 08:40 maxosx_extensions.txt
0: user:martin inherited allow read,write,execute,delete,append,
readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,
chown
1: user:_spotlight inherited allow read,execute
Man kann erkennen, daß bei den Dateien die Rechte vom Verzeichnis vererbt (inherited) wurden, sowie keine Verzeichnisattribute gesetzt sind.
Die allgemeinen Zugriffsrechte bleiben erhalten.
Will die Besitzerin die Dateien löschen, wird das abgelehnt, bzw. mit der Frage nach dem Kennwort des Administrators quittiert (der darf sowieso alles).
Nachträgliche Änderungen an den Dateien sind mit Mac Texteditoren (TextEditor, XCode) nicht mehr möglich, wohingegen auf der Unix Kommandoebene keine Einschränkungen bestehen.
$cd ~martin/Public
$ echo "Hallo Welt ... wie geht's?" >> Ina\'s\ Box/maxosx_extensions.txt
$ tail -1 Ina\'s\ Box/maxosx_extensions.txt
Hallo Welt ...wie geht's?
Man erwartet eigentlich auch genau dieses Verhalten, dennoch behaupten o.g. Editoren die Datei sei gesperrt?!
Vielleicht will ja ein interessierter Leser dieser Sache näher auf den Grund gehen …