Handbücher für die Kommandozeile

Man » acl Manual online - detaillierte Online-Dokumentation für die acl-Manpage

🌍
acl — Access Control Lists

BESCHREIBUNG

Diese Manpage beschreibt POSIX Access Control Lists (ACLs), die verwendet werden, um detailliertere, frei konfigurierbare Zugriffsrechte für Dateien und Verzeichnisse zu definieren.

ACL-TYPEN

Jedes Objekt kann als mit einer ACL assoziiert betrachtet werden, die den frei konfigurierbaren Zugriff auf dieses Objekt steuert; diese ACL wird als Zugriffs-ACL bezeichnet. Zusätzlich kann ein Verzeichnis mit einer ACL assoziiert sein, die die anfängliche Zugriffs-ACL für Objekte steuert, die innerhalb dieses Verzeichnisses erstellt werden; diese ACL wird als Standard-ACL bezeichnet.

ACL-EINTRAEGE

Eine ACL besteht aus einer Menge von ACL-Einträgen. Ein ACL-Eintrag gibt die Zugriffsrechte für das zugehörige Objekt für einen einzelnen Benutzer oder eine Gruppe von Benutzern als Kombination aus Lese-, Schreib- und Such-/Ausführungsrechten an.

Ein ACL-Eintrag enthält einen Eintragstyp, einen optionalen Eintragstyp-Qualifizierer und eine Menge von Berechtigungen. Wir verwenden den Begriff Qualifizierer, um den Eintragstyp-Qualifizierer eines ACL-Eintrags zu bezeichnen.

Der Qualifizierer gibt die Kennung eines Benutzers oder einer Gruppe für Einträge mit den Typen ACL_USER oder ACL_GROUP an. Einträge mit anderen Eintragstypen als ACL_USER oder ACL_GROUP haben keine definierten Qualifizierer.

Die folgenden Eintragstypen sind definiert:

ACL_USER_OBJ Der ACL_USER_OBJ-Eintrag bezeichnet die Zugriffsrechte für den Dateieigentümer.

ACL_USER ACL_USER-Einträge bezeichnen die Zugriffsrechte für Benutzer, die durch den Qualifizierer des Eintrags identifiziert werden.

ACL_GROUP_OBJ Der ACL_GROUP_OBJ-Eintrag bezeichnet die Zugriffsrechte für die Dateigruppe.

ACL_GROUP ACL_GROUP-Einträge bezeichnen die Zugriffsrechte für Gruppen, die durch den Qualifizierer des Eintrags identifiziert werden.

ACL_MASK Der ACL_MASK-Eintrag bezeichnet die maximalen Zugriffsrechte, die durch Einträge des Typs ACL_USER, ACL_GROUP_OBJ oder ACL_GROUP gewährt werden können.

ACL_OTHER Der ACL_OTHER-Eintrag bezeichnet die Zugriffsrechte für Prozesse, die zu keinem anderen Eintrag in der ACL passen.

Wenn eine Zugriffskontrolle durchgeführt wird, werden die ACL_USER_OBJ- und ACL_USER-Einträge gegen die effektive Benutzer-ID getestet. Die effektive Gruppen-ID sowie alle zusätzlichen Gruppen-IDs werden gegen die ACL_GROUP_OBJ- und ACL_GROUP-Einträge getestet.

GÜLTIGE ACLS

Eine gültige ACL enthält genau einen Eintrag mit jedem der Typen ACL_USER_OBJ, ACL_GROUP_OBJ und ACL_OTHER. Einträge mit den Typen ACL_USER und ACL_GROUP können null oder mehrmals in einer ACL vorkommen. Eine ACL, die Einträge mit den Typen ACL_USER oder ACL_GROUP enthält, muss genau einen Eintrag mit dem Typ ACL_MASK enthalten. Wenn eine ACL keine Einträge mit den Typen ACL_USER oder ACL_GROUP enthält, ist der ACL_MASK-Eintrag optional.

Alle Benutzer-ID-Qualifizierer müssen unter allen Einträgen des ACL_USER-Tag-Typs eindeutig sein, und alle Gruppen-IDs müssen unter allen Einträgen des ACL_GROUP-Tag-Typs eindeutig sein. Die Funktion acl_get_file() gibt eine ACL mit null ACL-Einträgen als Standard-ACL eines Verzeichnisses zurück, wenn das Verzeichnis nicht mit einer Standard-ACL verknüpft ist. Die Funktion acl_set_file() akzeptiert auch eine ACL mit null ACL-Einträgen als gültige Standard-ACL für Verzeichnisse, was bedeutet, dass das Verzeichnis nicht mit einer Standard-ACL verknüpft werden soll. Dies entspricht der Verwendung der Funktion acl_delete_def_file().

Entsprechung zwischen ACL-Einträgen und Datei-Berechtigungsbits

Die in ACLs definierten Berechtigungen sind eine Obermenge der durch die Datei-Berechtigungsbits angegebenen Berechtigungen. Es besteht eine Entsprechung zwischen den Datei-Berechtigungen für Besitzer, Gruppe und andere sowie bestimmten ACL-Einträgen: Die Besitzer-Berechtigungen entsprechen den Berechtigungen des ACL_USER_OBJ-Eintrags. Wenn die ACL einen ACL_MASK-Eintrag hat, entsprechen die Gruppen-Berechtigungen den Berechtigungen des ACL_MASK-Eintrags. Andernfalls, wenn die ACL keinen ACL_MASK-Eintrag hat, entsprechen die Gruppen-Berechtigungen den Berechtigungen des ACL_GROUP_OBJ-Eintrags. Die Berechtigungen für andere entsprechen den Berechtigungen des ACL_OTHER-Eintrags. Die Datei-Berechtigungen für Besitzer, Gruppe und andere stimmen immer mit den Berechtigungen des entsprechenden ACL-Eintrags überein. Eine Änderung der Datei-Berechtigungsbits führt zu einer Änderung der zugehörigen ACL-Einträge, und eine Änderung dieser ACL-Einträge führt zu einer Änderung der Datei-Berechtigungsbits.

Objekterstellung und Standard-ACLs

Die Zugriffs-ACL eines Dateiobjekts wird bei der Erstellung des Objekts mit einer der Funktionen creat(), mkdir(), mknod(), mkfifo() oder open() initialisiert. Wenn ein Verzeichnis mit einer Standard-ACL verknüpft ist, werden der Modusparameter, der an die Funktionen zur Erstellung von Dateiobjekten übergeben wird, und die Standard-ACL des Verzeichnisses verwendet, um die ACL des neuen Objekts zu bestimmen:

Das neue Objekt übernimmt die Standard-ACL des enthaltenden Verzeichnisses als seine Zugriffs-ACL.

Die Zugriffs-ACL-Einträge, die den Datei-Berechtigungsbits entsprechen, werden so geändert, dass sie keine Berechtigungen enthalten, die nicht in den durch den Modusparameter angegebenen Berechtigungen enthalten sind. Wenn kein Verzeichnis mit einer Standard-ACL verknüpft ist, werden der Modusparameter, der an die Funktionen zur Erstellung von Dateiobjekten übergeben wird, und die Datei-Erstellungsmaske (siehe umask(2)) verwendet, um die ACL des neuen Objekts zu bestimmen:

Dem neuen Objekt wird eine Zugriffs-ACL zugewiesen, die Einträge der Tag-Typen ACL_USER_OBJ, ACL_GROUP_OBJ und ACL_OTHER enthält. Die Berechtigungen dieser Einträge werden auf die Berechtigungen gesetzt, die durch die Datei-Erstellungsmaske angegeben werden.

Die Zugriffs-ACL-Einträge, die den Datei-Berechtigungsbits entsprechen, werden so geändert, dass sie keine Berechtigungen enthalten, die nicht in den durch den Modusparameter angegebenen Berechtigungen enthalten sind.

Algorithmus zur Zugriffskontrolle

Ein Prozess kann den Zugriff auf ein durch eine ACL geschütztes Dateiobjekt mit den Berechtigungen zum Lesen, Schreiben oder Ausführen/Suchen anfordern. Der Algorithmus zur Zugriffskontrolle bestimmt, ob der Zugriff auf das Objekt gewährt wird.


Wenn die effektive Benutzer-ID des Prozesses mit der Benutzer-ID des Dateiobjekt-Eigentümers übereinstimmt, dann

wenn der ACL_USER_OBJ-Eintrag die angeforderten Berechtigungen enthält, wird der Zugriff gewährt,

andernfalls wird der Zugriff verweigert.

andernfalls, wenn die effektive Benutzer-ID des Prozesses mit dem Qualifier eines beliebigen Eintrags vom Typ ACL_USER übereinstimmt, dann

wenn der übereinstimmende ACL_USER-Eintrag und der ACL_MASK-Eintrag die angeforderten Berechtigungen enthalten, wird der Zugriff gewährt,

andernfalls wird der Zugriff verweigert.

andernfalls, wenn die effektive Gruppen-ID oder eine der zusätzlichen Gruppen-IDs des Prozesses mit der Dateigruppe oder dem Qualifier eines beliebigen Eintrags vom Typ ACL_GROUP übereinstimmt, dann

wenn die ACL einen ACL_MASK-Eintrag enthält, dann

wenn der ACL_MASK-Eintrag und einer der übereinstimmenden ACL_GROUP_OBJ- oder ACL_GROUP-Einträge die angeforderten Berechtigungen enthalten, wird der Zugriff gewährt,

andernfalls wird der Zugriff verweigert.

andernfalls (beachten Sie, dass es keine ACL_GROUP-Einträge ohne einen ACL_MASK-Eintrag geben kann)

wenn der ACL_GROUP_OBJ-Eintrag die angeforderten Berechtigungen enthält, wird der Zugriff gewährt,

andernfalls wird der Zugriff verweigert.

andernfalls, wenn der ACL_OTHER-Eintrag die angeforderten Berechtigungen enthält, wird der Zugriff gewährt.

andernfalls wird der Zugriff verweigert.

ACL-TEXTFORMEN

Eine lange und eine kurze Textform zur Darstellung von ACLs ist definiert. In beiden Formen werden ACL-Einträge als drei durch Doppelpunkte getrennte Felder dargestellt: ein ACL-Eintrag-Tag-Typ, ein ACL-Eintrag-Qualifier und die diskretionären Zugriffsberechtigungen. Das erste Feld enthält eines der folgenden Eintrag-Tag-Typ-Schlüsselwörter:

user Ein Benutzer-ACL-Eintrag gibt die dem Dateieigentümer (Eintrag-Tag-Typ ACL_USER_OBJ) oder einem angegebenen Benutzer (Eintrag-Tag-Typ ACL_USER) gewährten Zugriffe an.

group Ein Gruppen-ACL-Eintrag gibt die der Dateigruppe (Eintrag-Tag-Typ ACL_GROUP_OBJ) oder einer angegebenen Gruppe (Eintrag-Tag-Typ ACL_GROUP) gewährten Zugriffe an.

mask Ein Masken-ACL-Eintrag gibt den maximalen Zugriff an, der von einem beliebigen ACL-Eintrag gewährt werden kann, mit Ausnahme des Benutzereintrags für den Dateieigentümer und des „Other“-Eintrags (Eintrag-Tag-Typ ACL_MASK).

other Ein „Other“-ACL-Eintrag gibt die jedem Prozess gewährten Zugriffe an, der nicht mit einem Benutzer- oder Gruppen-ACL-Eintrag übereinstimmt (Eintrag-Tag-Typ ACL_OTHER).

Das zweite Feld enthält die Benutzer- oder Gruppen-ID des Benutzers oder der Gruppe, die dem ACL-Eintrag für Einträge vom Eintrag-Tag-Typ ACL_USER oder ACL_GROUP zugeordnet ist, und ist für alle anderen Einträge leer. Eine Benutzer-ID kann ein Benutzername oder eine dezimale Benutzer-ID sein. Eine Gruppen-ID kann ein Gruppenname oder eine dezimale Gruppen-ID sein.

Das dritte Feld enthält die diskretionären Zugriffsberechtigungen. Die Lese-, Schreib- und Such-/Ausführungsberechtigungen werden durch die Zeichen r, w und x in dieser Reihenfolge dargestellt. Jedes dieser Zeichen wird durch das Zeichen - ersetzt, um anzugeben, dass eine Berechtigung im ACL-Eintrag fehlt. Beim Konvertieren von der Textform in die interne Darstellung müssen fehlende Berechtigungen nicht angegeben werden.


Leerzeichen sind am Anfang und Ende jedes ACL-Eintrags sowie unmittelbar vor und nach einem Feldtrenner (dem Doppelpunkt) zulässig.

LANGE TEXTFORM

Die lange Textform enthält einen ACL-Eintrag pro Zeile. Darüber hinaus kann ein Hash-Zeichen (#) den Anfang einer Anmerkung markieren, die bis zum Zeilenende reicht. Wenn ein ACL_USER-, ACL_GROUP_OBJ- oder ACL_GROUP-ACL-Eintrag Berechtigungen enthält, die nicht auch im ACL_MASK-Eintrag enthalten sind, folgt auf den Eintrag ein Hash-Zeichen, die Zeichenkette „effective:“ und die durch diesen Eintrag definierten effektiven Zugriffsberechtigungen. Dies ist ein Beispiel für die lange Textform:

user::rwuser:lisa:rw-         #effective:r-group::r-group:toolies:rw-     #effective:r-mask::r-other::r-###    KURZE TEXTFORM

Die kurze Textform ist eine durch Kommas getrennte Folge von ACL-Einträgen und wird für die Eingabe verwendet. Anmerkungen werden nicht unterstützt. Einträge mit Typkennzeichnungsschlüsselwörtern können entweder in ihrer vollständigen, nicht abgekürzten Form oder in ihrer abgekürzten Form mit einem einzelnen Buchstaben erscheinen. Die Abkürzung für Benutzer ist u, die Abkürzung für Gruppe ist g, die Abkürzung für Maske ist m und die Abkürzung für Andere ist o. Die Berechtigungen dürfen höchstens jeweils eines der folgenden Zeichen in beliebiger Reihenfolge enthalten: r, w, x. Dies sind Beispiele für die kurze Textform:

u::rw-,u:lisa:rw-,g::r--,g:toolies:rw-,m::r--,o::r-g:toolies:rw,u:lisa:rw,u::wr,g::r,o::r,m::r

BEGRÜNDUNG

Der IEEE 1003.1e-Entwurf 17 definiert Zugriffskontrolllisten, die Einträge des Typs ACL_MASK enthalten, und definiert eine Zuordnung zwischen Dateiberechtigungsbits, die nicht konstant ist. Die Arbeitsgruppe des Standards definierte diese relativ komplexe Schnittstelle, um sicherzustellen, dass Anwendungen, die mit IEEE 1003.1 („POSIX.1“) kompatibel sind, auch auf Systemen mit ACLs wie erwartet funktionieren. Die Begründung für die Wahl dieser Schnittstelle enthält der IEEE 100.1e-Entwurf 17 in Abschnitt B.23.

ÄNDERUNGEN AN DEN DATEI-DIENSTPROGRAMMEN

Auf einem System, das ACLs unterstützt, ändern die Datei-Dienstprogramme ls(1), cp(1) und mv(1) ihr Verhalten wie folgt:

Für Dateien, die eine Standard-ACL oder eine Zugriffs-ACL haben, die mehr als die drei erforderlichen ACL-Einträge enthält, zeigt das Dienstprogramm ls(1) in der langen Form, die durch ls -l erzeugt wird, ein Pluszeichen (+) nach der Berechtigungszeichenkette an.

Wenn die Option -p angegeben wird, bewahrt das Dienstprogramm cp(1) auch ACLs. Wenn dies nicht möglich ist, wird eine Warnung ausgegeben.

Das Dienstprogramm mv(1) bewahrt immer ACLs. Wenn dies nicht möglich ist, wird eine Warnung ausgegeben.

Die Auswirkungen des Dienstprogramms chmod(1) und des Systemaufrufs chmod(2) auf die Zugriffs-ACL werden in „ENTSPRECHUNG ZWISCHEN ACL-EINTRÄGEN UND DATEIBERECHTIGUNGSBITS“ beschrieben.

STANDARDS

Das IEEE 1003.1e-Dokument (Entwurf 17, „POSIX.1e“) beschreibt mehrere Sicherheitserweiterungen zum IEEE 100.1-Standard. Obwohl die Arbeit an 1003.1e eingestellt wurde, implementieren viele UNIX-ähnliche Systeme Teile des POSIX.1e-Entwurfs 17 oder früherer Entwürfe.


Linux Access Control Lists implementieren den vollständigen Satz von Funktionen und Dienstprogrammen, die für Access Control Lists in POSIX.1e definiert sind, sowie verschiedene Erweiterungen. Die Implementierung ist vollständig kompatibel mit POSIX.1e Entwurf 17; Erweiterungen sind entsprechend gekennzeichnet. Die Funktionen zur Bearbeitung von Access Control Lists sind in der ACL-Bibliothek (libacl, -lacl) definiert. Die POSIX-konformen Schnittstellen sind in der Header-Datei <sys/acl.h> deklariert. Linux-spezifische Erweiterungen dieser Funktionen sind in der Header-Datei <acl/libacl.h> deklariert.

HINWEISE

VERWEHRTE BERECHTIGUNGEN UND LINUX-BENUTZER-NAMENSRÄUME

Obwohl ACLs verwendet werden können, um Prozessen basierend auf den Gruppen, denen sie angehören, Berechtigungen zu verweigern, wird dies als schlechte Praxis betrachtet. Privilegierte Hilfsprogramme wie newuidmap(1) können nicht privilegierten Prozessen Zugriff auf den Systemaufruf setgroups(2) ermöglichen, wodurch diese die Möglichkeit haben, die Mitgliedschaft in zusätzlichen Gruppen zu entfernen und so auf dieser Grundlage vorgenommene Beschränkungen unwirksam zu machen. Weitere Informationen finden Sie unter user_namespaces(7).

SIEHE AUCH

chmod(1), creat(2), getfacl(1), ls(1), mkdir(2), mkfifo(2), mknod(2), mount(8), open(2), setfacl(1), stat(2), umask(1)

POSIX 1003.1e ENTWURF 17

https://wt.tuxomania.net/publications/posix.1e/download.html

POSIX 1003.1e FUNKTIONEN NACH KATEGORIE

ACL-Speicherverwaltung
acl_dup(3), acl_free(3), acl_init(3)

ACL-Eintragsmanipulation
acl_copy_entry(3), acl_create_entry(3), acl_delete_entry(3), acl_get_entry(3), acl_valid(3)

acl_add_perm(3), acl_calc_mask(3), acl_clear_perms(3), acl_delete_perm(3),
acl_get_permset(3), acl_set_permset(3)

acl_get_qualifier(3), acl_get_tag_type(3), acl_set_qualifier(3), acl_set_tag_type(3)

ACL-Manipulation an einem Objekt
acl_delete_def_file(3), acl_get_fd(3), acl_get_file(3), acl_set_fd(3), acl_set_file(3)

ACL-Formatübersetzung
acl_copy_entry(3), acl_copy_ext(3), acl_from_text(3), acl_to_text(3), acl_size(3)

POSIX 1003.1e FUNKTIONEN NACH VERFÜGBARKEIT

Die erste Gruppe von Funktionen wird auf den meisten Systemen mit POSIX-ähnlichen Access Control Lists unterstützt, während die zweite Gruppe auf weniger Systemen unterstützt wird. Für Anwendungen, die auf andere Systeme portiert werden sollen, ist es am besten, die zweite Gruppe zu vermeiden.

acl_delete_def_file(3), acl_dup(3), acl_free(3), acl_from_text(3), acl_get_fd(3),
acl_get_file(3), acl_init(3), acl_set_fd(3), acl_set_file(3), acl_to_text(3), acl_valid(3)

acl_add_perm(3), acl_calc_mask(3), acl_clear_perms(3), acl_copy_entry(3), acl_copy_ext(3),
acl_copy_int(3), acl_create_entry(3), acl_delete_entry(3), acl_delete_perm(3), acl_get_entry(3),
acl_get_permset(3), acl_get_qualifier(3), acl_get_tag_type(3), acl_set_permset(3),
acl_set_qualifier(3), acl_set_tag_type(3), acl_size(3)

LINUX-ERWEITERUNGEN

Diese nicht-portablen Erweiterungen sind auf Linux-Systemen verfügbar.

acl_check(3), acl_cmp(3), acl_entries(3), acl_equiv_mode(3), acl_error(3), acl_extended_fd(3),
acl_extended_file(3), acl_extended_file_nofollow(3), acl_from_mode(3), acl_get_perm(3),
acl_to_any_text(3)

AUTOR

Andreas Gruenbacher, <_>