Navigationsleiste   |    Direktzugriff   |    Artikel   |    Home   

Erweiterte Zugriffsrechte mit Access Control Lists


Direkt eine Warnung: Dieser Artikel stellt schon erhöhte Ansprüchte, da der Eingriff dein System aushebeln kann. Du solltest also kein Einsteiger sein, sondern ein fortgeschrittener Admin. Was aber keinen davon abhalten soll diesen Artikel zu lesen, aber sei gewarnt und nimm erstmal ein Test-System und nicht den Firmen-Server ;-))

Ich gehe in diesen Artikel davon aus, das ein Filesystem mit ACL-Unterstützung (z.B.: XFS) lauffähig installiert ist und die Tools setfacl und getfacl installiert sind.


Was sind Access Control Lists ?

Am besten mal ein Beispiel: Angela arbeitet in der Buchhaltung der Firma tuxhausen an einer Urlaubsliste aller Mitarbeiter der Abteilung. Sie selber darf diese Liste bearbeiten, die Mitarbeiter der Abteilung dürfen diese Datei lesen, aber sonst keiner.
Dieser Fall ist mit den normalen Unix-Rechte (Besitzer, Gruppe und Sonstige) einfach einzustellen. Aber nun soll Claudia diese Liste bearbeiten, da Angela selber in Urlaub ist. Jetzt sieht es mit den Unix-Rechten schlecht aus: zwei Benutzer sollen schreiben dürfen, die Abteilung lesen und der Rest nichts. Was nun?
Claudia kann sich als Angela einloggen -> dumme Idee
Eine neue Gruppe für Angela und Claudia -> geht nicht, wir haben schon die Abteilung als Gruppe
Einen neuen User, unter dem sich beide einloggen können -> auch dumm
Mir fällt keine gebrauchbare Lösung ein, wenn du eine hast mailden !

Genau jetzt kommen die Access Control Lists (ab jetzt ACL) in Spiel: Sie erlauben beliebig viele Benutzer- und Gruppeneinträge.
NT-Administratoren kennen das schon und auch die Novell-Leute, auch die die kommerzielen Unix haben ACL, aber er unter Linux ist es kaum bekannt. Aber es ist da und funktioniert, und ab Samba 2.2 kannst du die Rechte vom NT/2000-Client einstellen !



Benutzung von setfacl und getfacl

So, ich mache mal eine kleinen Praxis-Lehrgang, ich denke damit versteht man dieses Thema besser. Auf jeden Fall solltest du die man-Page zu setfacl und getfacl genau lesen.
Wir haben diese Datei (aus dem Beispiel oben) :

-rw-r--r-- 1 angela buch 1234 03.06 16:02 urlaub.txt


Claudia sollte ja nun auch diese Datei bearbeiten können; zuerst die Datei ändern und dann das Ergebnis anzeigen:

[root]# setfacl -m user:claudia:rw- urlaub.txt
[root]# getfacl urlaub.txt
# file: urlaub.txt
# owner: angela
# group: buch
user::rw-
user:claudia:rw-
group::r-- mask:rw-
other:r--
[root]# ls -l urlaub.txt -rw-rw-r-- + 1 angela buch 1234 03.06 16:07 urlaub.txt

Und schon habst du das oben gennante Problem gelöst !!

Die Syntax dürfte nun schon fast klar sein: Sie ist in Art von chmod, chown. Aber erstmal der Reihe nach:
Mit dem setfacl Befehl änderst du die Zugriffsrechte der Datei, der Parameter "-m" (wie modify) dient zum Ändern der Rechte. Danach sagst du was du ändern willst, im Beispiel bekommt der Benutzer claudia (user:claudia:) Schreib/Lese-Rechte (rw-) für die Datei urlaub.txt.
Anstelle von user, group oder other, reicht es den ersten Buchtstaben ein zugeben; also setfacl -m u:claudia:rw- urlaub.txt ; desweiteren kannst du die Rechte auch als Oktalzahl angeben.

Der Befehl getfacl urlaub.txt ist quasi ein ls für die ACLs, er zeigt die aktuellen ACLs der Datei lesbar an.

Und was ls -l urlaub.txt macht, dürfte klar sein, neu ist das kleine Plus am Ende: Daran erkennst du, das diese Datei weitere Rechte (die ACLs) hat und diese zeigt dir nur getfacl.

Eine kleine Sache wird dir noch aufgefallen sein: Der Eintrag mask:rw-, dieser ist genial !
Damit werden die maximalen Rechte der Default-Gruppe und aller weiteren Benutzer und Gruppen festgelegt, nicht betroffen ist der Eingentümer (hier: # owner: angela) der Datei.
Steht dort nur Read geht auch nur maximal Read, egal was für den (zusätzlichen) Benutzer eingestellt ist !

So jetzt noch ein Paar weitere Beispiele, kurz erläutert:

Rechte aller User (außer Eigentümer) auf read stellen:
(Hier wird die mask umgestellt)
[root]# setfacl -m mask:r-- urlaub.txt
[root]# getfacl urlaub.txt
# file: urlaub.txt
# owner: angela
# group: buch
user::rw-
user:claudia:rw-                #effective:r--
group::r--
mask:r--
other:r--
User claudia wieder löschen:
[root]# setfacl -x user:claudia urlaub.txt
[root]# getfacl urlaub.txt
# file: urlaub.txt
# owner: angela
# group: buch
user::rw-
group::r--
mask:r--
other:r--


Vererbare Rechte in Verzeichnissen

Verzeichnisse verhalten sich ähnlich wie Dateien. Gut, das Recht zum Ausführen von Dateien, ist bei Verzeichnis das Recht zum Durchsuchen/eintauchen in das Verzeichnis; das ist aber nicht neu, sondern war bei Unix schon immer so.
Aber eine Sache kommt mit den ACLs: die Default-Rechte. Damit kannst du die Rechte definieren, die eine neu angelegte Datei im Verzeichnis hat. So könnte zum Beispiel eingestellt werden, daß alle neue Dateien im einem Verzeichnis als User claudia und angela haben:

[root]# setfacl -m d:user::rwx,d:user:claudia:rw-,d:user:angela:rw- acl_verz/
[root]# getfacl acl_verz/               #Rechte des Verzeichnisses acl_ver
# file: acl_verz/
# owner: root
# group: root
user::rwx
group::r-x
other:r-x
default:user::rwx
default:user:angela:rw-
default:user:claudia:rw-
default:group::r-x
default:mask:rwx
default:other:r-x

Legst du nun in diesem Verzeichnis Dateien an, so haben diese die folgenden Rechte:

[root] acl_verz # touch hallo.txt
[root] acl_verz # getfacl hallo.txt
# file: hallo.txt
# owner: root
# group: root
user::rw-
user:angela:rw-
user:claudia:rw-
group::r-x                               #effective:r--
mask:rw-
other:r--

Noch ein Wort zu #effective:r--: Die Gruppe hat hier die Rechte r-x, aber die mask nur rw-, aus diesem Grund sind die Gruppen-Rechte nu noch r--. Und das zeigt dir effective an.

Und was passiert wenn du ein Verzeichnis in einem ACL-Verzeichnis anlegst ?
Ganz einfach, dieses hat die gleich Default wie das übergeordnete Verzeichnis, es erbt die Rechte:

[root] acl_verz # mkdir acl_verz2
[root] acl_verz # getfacl acl_verz2/                   #Rechte des Verzeichnisses acl_ver2
# file: acl_verz2/
# owner: root
# group: root
user::rwx
user:angela:rw-
user:claudia:rw-
group::r-x mask:rwx
other:r-x
default:user::rwx
default:user:angela:rw-
default:user:claudia:rw-
default:group::r-x
default:mask:rwx
default:other:r-x

Gut, ich denke das reicht jetzt, du solltest aber vor dem Einsatz alles gut durchdenken und durchspielen, sonst gehst du in den vielen Rechten unter ;-))


ACL und samba

Um es direkt zu sagen: JA, es geht !!
Etwas ausführlicher:
Ab der Version 2.2 von samba, kann samba die Rechte an einer drunterliegendes ACL-System weitergeben. Das bedeutet du kannst die Rechte direkt von Windows aus mit dem Explorer einstellen.

Damit das funktioniert mußt du samba beim configuren den Parameter "--with-acl-support" mit auf dem Weg geben, also mindestens:
./configure - -with-acl-support
make
make install


Ich habe es mit mit Windows 2000 Prof. ausprobiert und es ging, aber ich hatte Probleme mit den Benutzer-Namen, da mein ACL-Testrechner nicht mein Domänen-Master ist. Wer hier Erfahrungen hat, sollte sich mal melden !




Quellen und weitere Dokus




Im Text genannte Links

[1] Homepage des ext2/ext3-ACL Patches: http://acl.bestbits.at/
[2] ix Artikel über ACL und Samba: http://www.heise.de/ix/artikel/2001/04/148/05.shtml
[3] Forschungszentrum Jülich: Setzen von Zugriffsrechten
mit Hilfe von Access Control Lists (ACL) unter Solaris
http://www.kfa-juelich.de/zam/docs/tki/tki_html/t0314/t0314.html

Erstellt: 2007-10-01 Autor: Markus Ungermann (markus@tuxhausen.de)
Letztes Update: 2007-10-01      URL: http://www.tuxhausen.de/acl.html