Access Control Lists (ACL) im Dateisystem

Seite: 4/5
(2168 Worte insgesamt im Text)
(12637 mal aufgerufen)  Druckerfreundliche Ansicht

Die Befehle getfacl und setfacl

Um sich die erweiterten Rechte der Datei test anzeigen zu lassen, kommt ein spezieller Befehl zum Einsatz: getfacl.

Für das Setzen, Ändern und Löschen von ACLs kommt der Befehl setfacl zum Einsatz. Das waren dann auch schon alle Befehle auf der Kommandozeile.

getfacl

Wie wir in unserem Beispiel gesehen haben, sind für die Datei test ACLs gesetzt - darauf hat uns das "+" ja hingewiesen. Um diese ACLs nun anzuzeigen, verwenden wir den Befehl:
getfacl test

Das erzeugt hier folgende Ausgabe:

# file: test
# owner: lars
# group: users
user::rw-
user:vertretung:rw-
group::r--
mask::rw-
other::---

Es gibt also einen Benutzer "vertretung", der hier ebenso wie der Eigentümer "lars" Lese- und Schreibrechte besitzt. Zusätzlich hat die Gruppe "users" Leserechte an dieser Datei. Wenn wir uns an die Ausgangslage erinnern, sind hier also alle Anforderungen erfüllt.

Stellt sich die Frage, was das "mask:: rw-" zu bedeuten hat. Mit dieser Maske werden die Rechte für alle zusätzlich eingetragenen Nutzer global geregelt. Nehmen wir einmal an, dass ich temporär allen Nutzern die Lese- und Schreibrechte für die Datei entziehen möchte. Anstatt jetzt jedem Nutzer einzeln diese Rechte zu entziehen und später wieder bei jedem Einzelnen neu zu setzen, verändere ich einfach die "mask" und schon habe ich das was ich will!

Das Ergebnis sollte dann so aussehen:

# file: test
# owner: lars
# group: users
user::rw-
user:vertretung:rw- #effective:---
group::r-- #effective:---
mask::---
other::---

Diese Ausgabe von getfacl test weißt mich also darauf hin, dass hier aufgrund der "default-mask" alle anderen Benutzer und Gruppen zur Zeit keinen Zugriff haben (#effective: ---) - obwohl Sie von den eigentlichen ACLs her Lese- (group::r--) bzw. sogar Schreibrecht (user:vertretung:rw-) hätten!

Wenn ich die "mask" auf "r--" setze, bekämen also alle ACL-Nutzer Lesezugriff auf die Datei - auch wenn der Nutzer vertretung eigentlich zusätzliche Schreibrechte hätte. Die Ausgabe des Befehls ls -l sähe in diesem Fall übrigens wie folgt aus:

drw-r-----+ 8 lars users 4096 2005-07-19 14:57 test

Also nochmal: ist bei der Ausgabe von ls -l ein "+" bei einer Datei oder einem Verzeichnis zu sehen, dann stellt das zweite Rechte-Trippel (hier: r--) die "default-mask" dar. Um mehr �ber diese Zus�tzlichen Rechte zu erfahren muss man den Befehl getfacl nutzen.

setfacl

Für das Setzen, Löschen und Ändern von ACLs wird der Befehl setfacl genutzt. Wenn man ACLs setzen oder Ändern will, muss setfacl mit dem Parameter -m aufgerufen werden (-m steht hier für "modify").

ACL setzen oder Ändern

Nach dem -m muss man setfacl noch sagen, für wen eine ACL gesetzt oder geändert werden soll:
  • Will man die ACL für einen bestimmten Nutzer setzen oder Ändern, verwendet man u (für "user").
  • Für Gruppen kommt das Kürzel g (für "group"),
  • für "Andere" (das letzte Trippel bei ls -l) das Kürzel o (für "others") und
  • für die "default-mask" das Kürzel m (für "mask") zum Einsatz.

Setzt man die ACL für einen Benutzer oder eine Gruppe, dann muss man - durch ":" getrennt - noch den Namen des Benutzers oder der Gruppe angeben.

Wieder durch ":" getrennt werden anschließend die Rechte aufgelistet. Hier verwendet man die geläufigen Kürzel rwx- für Lesen ("r"), Schreiben ("w"), Ausführen ("x") oder Nicht ("-").

Was fehlt noch? Richtig: die Datei oder das Verzeichnis, für die diese ACLs gesetzt werden.

Ein kompletter Befehl zum Hinzufügen des Benutzers vertretung mit Lese- und Schreibrechten an der Datei test lautet also:
setfacl -m -u:vertretung:rw- test

Das kann man sogar lesen: "Setze ACL:" (setfacl) "modifiziere" (-m) "für Benutzer:" (u:) "vertretung" (vertretung) "auf" (:) "Lesen und Schreiben" (rw-) "Datei test" (test).

Um die "default-mask" zu ändern, sieht der Befehl wie folgt aus:
setfacl -m m::--- test

Zu beachten: wenn man also Standardwerte setzen will, dann läßt man den Bereich zwischen den "::" leer. So kann man wie hier gezeigt die "default-mask" oder die Rechte für "Andere" ändern, ohne gleich deren Namen zwischen die "::" schreiben zu müssen. Genauso klappt das auch, wenn man:
setfacl -m u::--- test

setzt. Hier wird der Eigentümer der Datei genommen - bei setfacl -m g::--- test wäre es die Hauptgruppe.

ACL löschen

Um einen zusätzlichen Nutzer oder eine Gruppe wieder aus diesen ACL-Einträgen zu löschen, verwendet man die Option -x. Wenn wir also den Nutzer vertretung die ACL entziehen möchten, lautet der Befehl:
setfacl -x u:vertretung test

Da wir die ACL ja löschen wollen, brauchen wir hier keine dedizierten Angaben zu den Rechten machen. Die spezielle ACL für den Nutzer vertretung wird einfach gelöscht.

ACLs auf neue Dateien und Verzeichnisse vererben

Bis jetzt wurden nur Dateien (und Verzeichnisse) bearbeitet, die sich schon im Verzeichnis befanden. Für alle neuen Dateien gilt diese Rechtevergabe nicht.

Aus diesem Grund gibt es "Default-Rechte". Damit kann man Rechte definieren, die eine Datei, welche erst noch angelegt wird, erhalten soll.

Wieder kommt das Kommando setfacl zum Einsatz. Da die "Default-Rechte" erst ab einem bestimmten exsitierenden Verzeichnis gelten, muss dieses Ur-Verzeichnis modifiziert werden. Also ist die Option -m auf ein Verzeichnis anzuwenden.

Um setfacl mitzuteilen, dass jetzt ein "Default-Recht" gesetzt wird, kommt die Option d zum Einsatz. Um also dem Nutzer vertretung immer auch Schreibrechte auf neue Dateien und Unterverzeichnisse im Verzeichnis /home/lars/admin zu geben, wendet man folgenden Befehl an:
setfacl -m d:u:vertretung:rw- /home/lars/admin

Soll eine zusätzliche Gruppe per default z.B. Leserechte bekommen, dann sähe der entsprechende Befehl so aus:
setfacl -m d:g:abi03:r-- /home/lars/admin

Mehrere ACLs auf einmal setzen

Wenn man z.B. mehreren Benutzern oder Gruppen zusätzlich ACLs geben, wäre es ziemlich mühsam, wenn man für jeden einzelnen Nutzer oder Gruppe den Befehl setfacl aufrufen müßte. Hier kann man einfach durch Komma getrennt die ACLs für die Benutzer bzw. Gruppen angeben. Ein Beispiel:
setfacl -m d:u:vertretung:rw-, d:g:abi03:r-- /home/lars/admin

Damit fassen wir die letzten beiden Beispiele zusammen.

Backup und Restore von ACLs

Wer auf Nummer sicher gehen möchte und/ oder einmal gesetzte ACLs (über deren Bedeutung man sich stundenlang den Kopf zerbrochen hat) auch auf anderen Rechner oder in anderen Verzeichnissen anwenden möchte, der wird sich über die schon "eingebauten" Tools freuen.

Nehmen wir einmal an, Sie möchten ein Backup sämtlicher ACLs im Homeverzeichnis durchführen (evtl. weil Sie die Partition aus einem bestimmten Grund kurzfristig ohne ACL-Support mounten möchten). Dann können Sie mit diesem Einzeiler sämtliche gesetzten ACLs unterhalb von /home sichern:

getfacl -R /home > /root/backup_home_ACLs.txt

In der Datei /root/backup_home_ACLs.txt finden Sie anschließend für jede Datei und jedes Verzeichnis die gesetzten ACLs.

Wollen Sie zu einem späteren Zeitpunkt die ACLs wieder herstellen, geben Sie einfach:

setfacl --restore=/root/backup_home_ACLs.txt

Damit werden die ACLs wieder hergestellt.

Wenn Sie einmal komplizierte ACLs für eine Datei oder ein Verzeichnis gesetzt haben, sichern Sie diese mit dem Befehl:

getfacl dateiname > acl_vorlage.txt

Wenn Sie genau diese ACLs später auch für eine andere Datei oder ein Verzeichnis anwenden wollen, nutzen Sie einfach die erzeugte Vorlagendatei:

echo acl_vorlage.txt | setfacl --set-file=- neuedatei

Damit werden der neuedatei die ACLs zugewiesen, die in der Datei acl_vorlage.txt gespeichert sind. Mit dem Parameter --set-file=- erwartet setfacl die ACL-Eintrage von der Standardeingabe - und genau dorthin "pipen" wir mit echo die Ausgabe der Datei acl_vorlage.txt.




Kommentare

Einen Kommentar hinzufügen



 Suchen:


 Umfrage

(Nur für angemeldete Benutzer)

Was wird hier am meisten vermisst?

[ Ergebnis | Umfragen ]

Stimmen: 621
Kommentare: 0

 Zitate

Keine CPU kann halten, wenn Programmierer sinnlos walten.

-- anonymous