Administratorhandbuch:ACL

Aus Delixs
Version vom 30. Dezember 2005, 14:33 Uhr von Schoffer (Diskussion | Beiträge) (externe Links entfernt)
Zur Navigation springen Zur Suche springen
fertig Seite fertig: Sollten Sie Änderungsvorschläge oder Ergänzungen zu diesem Punkt haben, dann nutzen Sie bitte den Punkt Diskussion (oben).

Nutzung von ACLs

Warum Access Control Lists?

ein Beispiel: im Schulnetz soll eine Übersicht bereitgestellt werden, welche Aufgaben zur Vorbereitung der Abiturfeier von wem erfüllt werden und wie der Stand der Realisierung ist. Der Schülersprecher soll die Übersicht bearbeiten können, die Schüler des Abiturjahrgangs diese Liste lesen, sonst keiner.

Dieser Fall kann mit den normalen Unix-Rechten (Besitzer, Gruppe und Sonstige) einfach realisiert werden. Aber auch der Schülersprecher muss sich auf die Prüfungen vorbereiten und ist deswegen nicht immer erreichbar und soll demzufolge von seinem Stellvertreter unterstützt werden.

Jetzt sieht es mit den Unix-Rechten schlecht aus: zwei Benutzer sollen schreiben dürfen, die Schüler des Abiturjahrgangs lesen und alle anderen dürfen nichts. Was nun?

Spielen wir die möglichen Lösungen durch:

  • Der Stellvertreter kann sich als Schülersprecher einloggen -> nicht gut
  • Einen neuen User, unter dem sich beide einloggen können -> auch nicht gut. Insbesondere läst sich dann nicht nachvollziehen, wer etwas geändert hat.
  • eine spezielle Gruppe für den Schülersprecher und den Stellvertreter. Würde hier zwar gehen, aber sollten verschieden Aufgaben von verschiedenen Gruppen realisiert werden müssen, steigt die Anzahl der möglichen Gruppen rasant (2^n) -> dann wird's unüberschaubar

Genau jetzt kommen die POSIX Access Control Lists (ACL) ins Spiel: Access Control Lists sind eine Erweiterung des traditionellen UNIX-Berechtigungsschemas. Es können damit zusätzlich zu den Berechtigungen für den Besitzer, die Besitzergruppe und für Andere auch Berechtigungen für weitere Benutzer und Gruppen angegeben werden. Ausserdem kann definiert werden, welche Berechtigungen neu erzeugte Dateien erhalten sollen.

Die Ausgangssituation

Da wir ja weitere Berechtigungen vergeben wollen, sollten wir uns ersteinmal ein Bild über die schon vergebenen Rechte machen und dabei gleich den Befehl getfacl kennenlernen. Betrachten wir zuerst einen Lehrer mmustermann.

ein ls -l /home liefert:

drwx--x---+ 8 mmustermann root 4096 2004-07-19 14:57 mmustermann
          ^

Dieses "+" sagt uns, hier kommen ACLs zum Einsatz. Wir lassen uns diese jetzt mit dem Befehl getfacl mmustermann anzeigen.

# file: mmustermann
# owner: mmustermann
# group: root
user::rwx
user:wwwrun:--x
group::--x
mask::--x
other::---

Es gibt also für den User wwwrun das Recht, dieses Verzeichnis "auszuführen", also in dieses Verzeichnis zu gelangen. (Das muss deshalb sein, damit der Apache ins Verzeichnis www-pub kommt und damit auch diese Dateien lesen kann.

Dann ist noch dieses mask::--x zu klären: damit werden die maximalen Rechte der Default-Gruppe und aller weiteren Benutzer und Gruppen festgelegt, nicht betroffen ist der Eigentümer (hier: # owner: mmustermann) der Datei. Steht dort nur "ausführen", geht auch nur maximal "ausführen", egal was für den (zusätzlichen) Benutzer eingestellt ist! Das möchte ich mal so verdeutlichen: wenn die Gruppe auch das Leserecht zugewiesen bekommen hat, dann hat diese nichts davon, denn die Maske gibt an, dass nur "ausführen" möglich sein soll. Das zeigt getfacl mmustermann so an:

# file: mmustermann
# owner: mmustermann
# group: root
user::rwx
user:wwwrun:--x
group::r-x                      #effective:--x
mask::--x
other::---

Es soll noch auf einen Zusammenhang hingewiesen werden: ändert man mit chmod die Rechte, dann ändert man damit die Maske. Umgekehrt gilt das genauso. Ändert man die Maske, dann ist das gleichbedeutend, als ob ein chmod ausgeführt worden wäre.

Zum Vergleich für einen Schüler test, diesmal aus der Wurzel mit getfacl /home/test aufgerufen:

# file: home/test
# owner: test
# group: fachl
user::rwx
user:wwwrun:--x
group::rwx
mask::rwx
other::---

Setzen, Ändern und Löschen von ACLs bei Dateien

Während für das Anzeigen getfacl zuständig ist, kommt für das Setzen, Ändern und Löschen von ACLs der Befehl setfacl zum Einsatz. Weitere Kommandos gibt es für ACLs nicht.

Setzen und Ändern von ACLs

Da nur für das eigentliche Homeverzeichnis ACLs gesetzt sind, wollen wir nun im Homeverzeichnis vom Schülersprecher test der Datei projekt.txt dem stellvertretenden Schülersprecher test2 endlich die Schreibberechtigungen auf diese Datei geben.

Für das Setzen von ACLs wird setfacl genauso wie für das Ändern mit dem Parameter -m aufgerufen. Da die ACLs eine Erweiterung der Unix-Rechtevergabe ist, fasst man die Rechtevergabe ohne ACLs als "minimale ACL" auf und modifiziert diese. Es entsteht dann eine "erweiterte ACL". Damit ergibt sich aber, dass man auch für das Setzen von ACLs einfach den Parameter für das Modifzieren nimmt.

setfacl -m user::rwx,group::---,mask:rw-,other:---,u:test2:rw-  projekt.txt

Damit erhält der User test alle Rechte, die Gruppe fachl keine Rechte (also Lehrer können nicht mehr die Vorbereitung des Abiturs verfolgen ;-) und andere (other) auch nicht. Weiterhin ist mit der Maske angegeben, dass nur noch Lese- und Schreibrechte vergeben werden können bzw. wenn diese doch vergeben werden, nicht zum Tragen kommen. Mit Wildcards können natürlich auch gleich mehrere Dateien erfaßt werden.

setfacl -m user::rwx,group::---,mask:rw-,other:---,u:test2:rw-   proj*

Für unser nächstes Beispiel gehen wir davon aus, dass die Schüler des Abiturjahrgangs in der Gruppe abi04 sind. Die sollten noch das Leserecht bekommen.

setfacl -m group:abi04:rw-   proj*

Zusammengefaßt: nach dem Befehl setfacl -m folgt, für wen man (hier group:abi04) welche Rechte (hier rw-) auf welche Dateien geben will (hier proj*)

Löschen von ACL-Einträgen

Stellen wir uns jetzt vor, die Vorbereitungen sind erledigt und der Stellvertreter braucht keine besonderen Rechte mehr (Leserecht hat er ja auch als Mitglied der Gruppe abi04). Dann sollte dieser Eintrag aus der ACL gelöscht werden. Zum Löschen von Einträgen verwenden wir den Parameter -x.

setfacl -x user:test2   proj*

Eine Rechteangabe entfällt hier, da ja der gesamte Eintrag für den User test2 gelöscht wird.

Vererben der ACLs bei Verzeichnissen

Bis jetzt haben wir alle Dateien (Verzeichnisse sind auch Dateien) bearbeitet, die sich schon im Verzeichnis befanden. Für alle Dateien nach dieser Rechtevergabe, egal ob vom User test oder vom User test2, gilt diese Rechtevergabe noch nicht.

Deshalb gibt es noch die Default-Rechte. Damit kann man die Rechte definieren, die eine Datei, die erst noch angelegt wird, dann erhalten soll. Für unseren User test (auf die Ausgangssituation unter 2. bezogen) wäre auch folgende Lösung möglich gewesen:

setfacl -m d:user::rw-,d:user:test2:rw-,d:group:abi04:r--   /home/test

Damit wird erreicht, dass für alle in Zukunft angelegten Dateien (auch Verzeichnisse) der User test Lese- und Schreibrechte besitzt, ebenso der User test2, die Gruppe abi04 hat nur Leserechte. Da über die Gruppe fachl keine Aussage getroffen wurde, wird für diese Gruppe auch nichts vererbt. Und eine Maske wurde auch nicht vergeben. Das bedeutet, für alle neuen Dateien gibt es für die Gruppe fachl keinen ACL-Eintrag. Das bedeutet, für diese Dateien gilt die Voreinstellung rwx.

Natürlich werden die Default-Regeln auch von getfacl angezeigt. Deshalb zum Abschluß ein Aufruf von

getfacl home/test/

liefert

# file: home/test
# owner: test
# group: fachl
user::rw-
user:wwwrun:--x
group::rwx
mask::rwx
other::---
default:user::rw-
default:user:test2:rw-
default:group::rwx
default:group:abi04:r--
default:mask::rwx
default:other::---

Alle ACLs der Nutzer global sichern und zurückspielen

Dieser Punkt beschreibt das Auslesen aller ACLs in eine Datei, damit Sie diese dann wieder aus der Datei zum restaurieren nutzen können.

Zuerst sichern Sie alle ACLs für /home in eine Textdatei:

 getfacl -R --skip-base /home  >  /backup_meiner_ACLs.txt

und das Zurückschreiben in ein eingespieltes Backup von /home geschieht dann mit folgendem Befehl:

 setfacl --restore=backup_meiner_ACLs.txt

letzteres als root von / aus aufrufen (weil in diesem Beispiel die Datei unter / liegt).

Attribute:

  • -R = rekursiv und
  • --skip-base = ohne die Standard-Rechte, denn die werden durch das Backup gesichert.

Die ganze Sache funktioniert deshalb, weil die Eingabe von setfacl auch im Format der Ausgabe von getfacl sein kann, dass heißt, Sie können einfach die Ausgabe von getfacl in eine Datei umlenken und später diese Datei als "echo" der Eingabe von setfacl zur Verfügung stellen.

Das bedeutet weiter, Sie können auch die ACLs einer Datei zu einer anderen Datei pipen.

ACL's in der täglichen Arbeit

Wenn Sie Windows 2000 oder WindowsXPprofessional im Schulnetz einsetzen, können Sie direkt vom Client aus die Rechte auf eine sehr einfache Weise bearbeiten.

Das Verändern der Rechte zum lesen, schreiben und ausführen/öffnen von Dateien und Ordnern wird im Kapitel Rechteverwaltung des Benutzerhandbuches ausführlich beschrieben.

weitere Informationen

Diese Seite sollte nur einen Überblick über die auf Arktur 4 zum Einsatz gekommenen ACLs darstellen und für ein Grundverständnis für diese erweiterte Form der Rechtevergabe beitragen. Detaillierte Informationen wie z.B. zur Eingabe der Parameter auf der Kommandozeile, dem Einlesen aus einer Datei oder dem Kopieren schon vergebener ACLs auf andere Dateien bzw. Verzeichnisse u.a.m. finden Sie im Internet oder in entsprechender Fachliteratur.



zurück | Hauptseite