Beispielhack:
Hack #4 Erstellen Sie flexible Berechtigungshierarchien mit POSIX-ACLs
Setzen Sie eine ACL ein, wenn Unix-basierte Berechtigungen nicht ausreichen.
Meistens ist das herkömmliche Dateiberechtigungssystem von Unix genau das Richtige. Allerdings kann dieses System in einer im hohen Maße auf Zusammenarbeit beruhenden Umgebung mit mehreren Leuten, die Zugriff auf Dateien benötigen, unhandlich werden. Zugriffskontrolllisten (Access Control Lists), auch als ACLs bekannt (wird so ausgesprochen, dass es sich auf »hackles« reimt), sind ein Feature, das für Linux-Betriebssysteme zwar relativ neu ist, für FreeBSD und Solaris allerdings schon seit einiger Zeit zur Verfügung steht. Obwohl ACLs an sich einem System keine »weitere Sicherheit« hinzufügen, reduzieren sie doch die Komplexität bei der Verwaltung von Berechtigungen. ACLs bieten neue Möglichkeiten, um Datei- und Verzeichnisberechtigungen anzuwenden, ohne sich in die Erstellung unnötiger Gruppen zu flüchten.
ACLs werden als erweiterte Attribute innerhalb der Metadaten des Dateisystems gespeichert. Wie der Name schon sagt, können Sie damit Listen definieren, die basierend auf von Ihnen vorgegebenen Kriterien den Zugriff auf eine bestimmte Datei entweder gewähren oder verbieten. Jedoch geben ACLs das herkömmliche Berechtigungssystem nicht komplett auf. ACLs können sowohl für Benutzer als auch für Gruppen angegeben werden und werden immer noch in die Bereiche Lese-, Schreib- und Ausführungszugriff aufgeteilt. Zusätzlich könnte eine Kontrollliste für jeden Benutzer oder jede Gruppe festgelegt werden, die nicht mit irgendeiner der Benutzer- und Gruppen-ACLs übereinstimmt, genauso wie die Bits des »Andere«-Modus einer Datei. Zugriffskontrolllisten besitzen auch etwas, das ACL-Maske genannt wird, die als Berechtigungsmaske für alle ACLs agiert, die speziell einen Benutzer oder eine Gruppe aufführen. Dies ist einer umask ähnlich, aber nicht genau das Gleiche. Wenn Sie zum Beispiel die ACL-Maske auf r-- setzen, werden alle ACLs, die zu einem bestimmten Benutzer oder einer bestimmten Gruppe gehören und bei den Berechtigungen freizügiger sind (zum Beispiel rw-), tatsächlich zu r--. Verzeichnisse könnten auch eine Standard-ACL enthalten, die die anfänglichen ACLs von Dateien und Unterverzeichnissen festlegt, die innerhalb dieser Verzeichnisse erzeugt werden.
Verwenden Sie den Befehl setfacl, um ACLs zu bearbeiten und zu entfernen. Um eine ACL zu bearbeiten, wird die Option -m verwendet, gefolgt von einer ACL-Festlegung und einem Dateinamen oder einer Liste von Dateinamen. Sie können eine ACL löschen, indem Sie die Option -x verwenden und eine ACL oder eine Liste von ACLs festlegen.
Es gibt drei allgemeine Formen einer ACL: eine für Benutzer, eine andere für Gruppen und eine für andere. Lassen Sie uns hier einen Blick auf sie werfen:
# Benutzer-ACL
u:[Benutzer]:<Modus>
# Gruppen-ACL
g:[Gruppe]:<Modus>
# ACL fuer andere
o:<Modus>
Beachten Sie, dass in den Benutzer- und Gruppen-ACLs die tatsächlichen Benutzer- und Gruppennamen, auf die die ACL angewendet wird, optional sind. Wenn diese weggelassen werden, bedeutet dies, dass diese ACL auf die Basis-ACL angewendet wird, die von den Modus-Bits der Datei abgeleitet wird. Daraus folgt, dass bei einer Bearbeitung auch die Modus-Bits bearbeitet werden und umgekehrt.
Sehen Sie sich das selbst an, indem Sie eine Datei erzeugen und dann deren Basis-ACL bearbeiten:
$ touch myfile
$ ls -l myfile
-rw-rw-r-- 1 andrew andrew 0 Oct 13 15:57 myfile
$ setfacl -m u::---,g::---,o:--- myfile
$ ls -l myfile
---------- 1 andrew andrew 0 Oct 13 15:57 myfile
In diesem Beispiel können Sie auch sehen, dass mehrere ACLs aufgeführt werden können, indem man sie durch Kommas trennt.
Sie können auch ACLs für eine beliebige Anzahl von Gruppen oder Benutzern angeben:
$ touch foo
$ setfacl -m u:jlope:rwx,g:wine:rwx ,o:--- foo
$ getfacl foo
# file: foo
# owner: andrew
# group: andrew
user::rw-
user:jlope:rwx
group::---
group:wine:rwx
mask::rwx
other::---
Wenn Sie jetzt die Maske auf r-- geändert hätten, würden die ACLs für jlope und wine tatsächlich auch zu r-- werden:
$ setfacl -m m:r-- foo
$ getfacl foo
# file: foo
# owner: andrew
# group: andrew
user::rw-
user:jlope:rwx #tatsächlich:r--
group::---
group:wine:rwx #tatsächlich:r--
mask::r--
other::---
Wie schon früher erwähnt, können Verzeichnisse Standard-ACLs besitzen, die automatisch auf Dateien angewandt werden, die innerhalb des Verzeichnisses erstellt werden. Standard-ACLs werden gesetzt, indem der ACL, die Sie setzen möchten, ein d: vorangestellt wird:
$ mkdir mydir
$ setfacl -m d:u:jlope:rwx mydir
$ getfacl mydir
# file: mydir
# owner: andrew
# group: andrew
user::rwx
group::---
other::---
default:user::rwx
default:user:jlope:rwx
default:group::---
default:mask::rwx
default:other::---
$ touch mydir/bar
$ getfacl mydir/bar
# file: mydir/bar
# owner: andrew
# group: andrew
user::rw-
user:jlope:rwx #tatsächlich:rw-
group::---
mask::rw-
other::---
Wie Sie vielleicht aus den vorangegangenen Beispielen mitbekommen haben, können Sie ACLs mit dem Befehl getfacl auflisten. Dieser Befehl ist ziemlich unkompliziert und besitzt nur wenige Optionen. Die nützlichste ist die Option -R, die es Ihnen ermöglicht, ACLs rekursiv aufzulisten, und ziemlich genau wie ls -R arbeitet.
Zurück zu Netzwerksicherheits Hacks
O'Reilly Home |
O'Reilly Partnerbuchhandlungen |
Bestellinformationen
Kontakt |
Über O'Reilly |
Datenschutz

© 2004, O'Reilly Verlag GmbH & Co.KG
webmaster@oreilly.de
|