Login
Newsletter
Werbung

Di, 25. Januar 2005, 00:00

Access Control Lists mit ext2

Dieser Artikel stellt ACLs und den Umgang mit ihnen vor.

Warnung

Dieser Artikel stellt schon erhöhte Ansprüche, 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 ;-))

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-Rechten (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 brauchbare Lösung ein, wenn du eine hast, bitte mailen!

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 kommerziellen Unixe haben ACL, aber unter Linux ist es kaum bekannt. Aber es ist da und funktioniert, und ab Samba 2.2 kannst du die Rechte des NT/2000-Clients einstellen!

Probleme mit ext2fs-ACL

Die Implementierungen sind noch recht neu und deswegen gibt es einige Probleme. Da wären im Moment:

  • Probleme mit NFS
  • Kein Backup-Programm unterstützt die ACLs, auf dem Backup sind sie weg. Aber es gibt einen Workaround.

Da sich diese Probleme recht schnell lösen könnten, solltest du zuerst mal auf die Web-Seite des Projektes [2] schauen, und dann entscheiden, ob du es probierst.

Installieren der ACL

Jetzt wird es etwas knifflig: du mußt den Kernel und einige wichtige Programme patchen (fsck.ext2, ls, cp, mv, ...), also überleg dir nochmal genau, ob du ACLs brauchst...

Noch da? Dann los: Erst mal einen aktuellen Kernel [1] besorgen, dann unter http://acl.bestbits.at/ [2] alles runterladen, was dort angeboten wird (kein Scherz), achte auf deinen Kernel! Ich habe für diesen Artikel die Programmversionen 0.7.8 bzw. 0.7.9 benutzt.

Du brauchst auch noch die Quellen von e2fsprogs [3] und die Quellen von den fileutils [4].

Kernel patchen und installieren

Der Kernel sollte so entpackt werden, daß er unter /usr/src/linux liegt; ein kleiner Tipp: lege deinen Kernel unter /usr/src/linux-2.4.2 oder so, und linke das Verzeichnis nach /usr/src/linux. Ich benutzte übrigens Kernel 2.4.2 für diesen Artikel.

Jetzt den EA-patch (linux-2.4.2ea-0.7.8.patch.gz) nach /usr/src/linux kopieren und den Kernel patchen:

gzip -cd < linux-2.4.2ea-0.7.8.patch.gz | patch -p1

Es werden nun einige Dateien gepatcht und es sollten keine Fehler kommen.

Danach den ACL-Patch (linux-2.4.2acl-0.7.9.patch.gz) nach /usr/src/linux kopieren und den Kernel patchen:

gzip -cd < linux-2.4.2acl-0.7.9.patch.gz | patch -p1

Es werden nun einige Dateien gepatcht und es sollten keine Fehler kommen.

Nun den Kernel konfigurieren:

  • Unter code maturity level options menu den Punkt prompt for development andor incomplete codedrivers aktivieren (daß ein Sternchen dort steht)
  • Unter File Systems diese Punkte aktivieren:
    [*] Extended filesystem attributes (EXPERIMENTAL) (CONFIG_FS_EXT_ATTR)
    [*]     Extended user attributes (CONFIG_FS_USER_EXT_ATTR)
    [*]     Posix Access Control Lists (CONFIG_FS_POSIX_ACL)
    ...
    <*> Second extended fs support (CONFIG_EXT2_FS)
    [*]     Extended attributes for ext2 (EXPERIMENTAL) ( CONFIG_EXT2_FS_EXT_ATTR)
    [  ]         Extended attribute block sharing (EXPERIMENTAL) (CONFIG_EXT2_FS_EXT_ATTR_SHARING) ; kannst du, aber brauchst du nicht

Jetzt den Kernel compilieren und installieren (vergiß nicht lilo, wenn du LILO benutzt), du kannst den Kernel nun booten und evtl. verbessern.

e2fsprogs anpassen

Ganz wichtig ist es, e2fsck zu patchen, sonst erlebst du eine kleine Katastrophe, wenn du die ACLs anwendest und e2fsck beim nächsten Start darüber fällt und sich weigert, weiter zu arbeiten (alles passiert ;-) ).

Also, die Quellen von e2fsprogs irgendwo entpacken und in dieses Verzeichnis den e2fsprogs-Patch (e2fsprogs-1.19ea-0.7.8.patch.gz) kopieren und patchen:

gzip -cd < e2fsprogs-1.19ea-0.7.8.patch.gz | patch -p1

Danach e2fsck compilieren. Wie immer: ./configure; make

Jetzt hast du im Unterverzeichnis (des Quellverzeichnisses von e2fsprogs) e2fsck ein neues e2fsck, dieses nun an die Stelle deines bisherigen e2fsck kopieren (zumeist /sbin), aber zuerst das bisherige e2fsck sichern! Jetzt kommt wieder eine Falle: Das Tool fsck.ext2 sollte ein Link auf e2fsck sein, ist es aber nicht immer! Also überprüfen und evtl. korrigieren.

ACL Tools erstellen

So, du hast nun einen neuen, schönen Kernel, ein brandheißes e2fsck, aber wie arbeitest du nun mit den ACLs?

Dafür gibt es die Programme setfacl und getfacl. Diese erstellen wir nun. Dieser Schritt ist einfacher:

  • acl-0.7.9.tar.gz entpacken
  • dort den üblichen Dreisatz durchführen: ./configure && make && make install
  • Achtung! Die Dateien werden unter /usr/local/bin installiert, dieser Pfad steht nicht als $PATH bei allen Distris (z.B.: Mandrake 7.2). Also, entweder $PATH anpassen oder die Dateien in ein $PATH-Verzeichnis kopieren.

Die fileutils anpassen

Wenn du die fileutils anpasst, zeigt dir ls ein Plus an, wenn ACL vorhanden sind, cp und mv kopieren/verschieben die ACL mit (Option -p). Ich finde, das solltest du nun auch schnell machen ;-))

Zuerst mußt du ein neues Quellpaket der fileutils erzeugen:

xdelta patch fileutils-4.0.41acl-0.7.8.xdelta \
fileutils-4.0.41.tar.gz fileutils-4.0.41acl.tar.gz

Damit hast du fileutils-4.0.41acl.tar.gz erzeugt, und nun:

  • fileutils-4.0.41acl.tar.gz entpacken
  • dort den folgendes durchführen: ./configure; make
  • jetzt ein make check durchführen, ein Test geht bei mir immer schief, aber ich glaube, das ist OK
  • noch schnell ein make install
  • Achtung! Die Dateien werden unter /usr/local/bin installiert, diese Pfad steht nicht als $PATH bei allen Distris (z.B.: Mandrake 7.2). Und noch was: liegen die alten fileutils (ls, cp, mv, ...) unter /bin, und /usr/local/bin steht auch im $PATH, hast du alles zweimal und die falschen gewinnen immer! Also schön aufräumen...

Das war's, du bist durch!

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung