Frühere Versionen des Betriebssystems Solaris unterstützten eine auf dem POSIX-Entwurf basierende Implementierung von Zugriffssteuerungslisten. POSIX-basierte Zugriffssteuerungslisten dienen zum Schutz von UFS-Dateien und werden von NFS-Versionen vor NFSv4 verwendet.
Seit der Einführung von NFSv4 unterstützt ein neues Modell für Zugriffssteuerungslisten vollständig die Interoperabilität, die NFSv4 für die Kommunikation zwischen UNIX-Clients und anderen Clients bietet. Die neue, in der NFSv4-Spezifikation definierte Implementierung von Zugriffssteuerungslisten bietet eine reichhaltigere Semantik, die auf NT-basierten Zugriffssteuerungslisten beruht.
Es folgen die wichtigsten Unterschiede des neuen Zugriffssteuerungslistenmodells:
Das neue Zugriffssteuerungslistenmodell basiert auf der NFSv4-Spezifikation und ist den NT-Zugriffssteuerungslistenmodellen ähnlich.
Das neue Modell bietet feiner abgestimmte Zugriffsrechte. Weitere Informationen finden Sie in Tabelle 8–2.
Zugriffssteuerungslisten werden mit den Befehlen chmod und ls anstatt setfacl und getfacl eingestellt und angezeigt.
Das neue Modell bietet eine reichhaltigere Vererbungssemantik zum Festlegen der Weitergabe von Zugriffsrechten von über- an untergeordnete Verzeichnisse usw. Weitere Informationen dazu finden Sie in Vererbung von Zugriffssteuerungslisten.
Beide Zugriffssteuerungslistenmodelle bieten eine feiner abstimmbare Kontrolle von Zugriffsrechten als die Standardzugriffsrechte. Ähnlich wie POSIX-basierten Zugriffssteuerungslisten bestehen auch die neuen Zugriffssteuerungslisten aus mehreren Zugriffssteuerungseinträgen.
POSIX-basierte Zugriffssteuerungslisten definieren mithilfe eines einzigen Eintrags, welche Zugriffsrechte zulässig und unzulässig sind. Das neue Zugriffssteuerungslistenmodell besitzt zwei Arten von Zugriffssteuerungseinträgen, die sich auf die Überprüfung von Zugriffsrechten auswirken: ALLOW (Erlauben) und DENY (Verweigern). Demzufolge können Sie nicht aus einem einzigen Zugriffssteuerungseintrag schließen, ob die in diesem Zugriffssteuerungseintrag nicht definierten Zugriffsrechte zulässig sind oder nicht.
Die Konvertierung zwischen NFSv4-basierten und POSIX-basierten Zugriffssteuerungslisten geschieht wie folgt:
Bei der Verwendung von Dienstprogrammen, die Zugriffsrechte überprüfen (z. B. die Befehle cp, mv, tar, cpio oder rcp), werden die POSIX-basierten Zugriffssteuerungslisten in die entsprechenden NFSv4-basierten Zugriffssteuerungslisten konvertiert, damit UFS-Dateien mit Zugriffssteuerungslisten in ein ZFS-Dateisystem transferiert werden können.
Einige NFSv4-basierte Zugriffssteuerungslisten werden in POSIX-basierte Zugriffssteuerungslisten konvertiert. Wenn eine NFSv4-basierte Zugriffssteuerungsliste nicht in eine POSIX-basierte Zugriffssteuerungsliste konvertiert werden kann, wird eine Meldung angezeigt, die der folgenden ähnlich ist:
# cp -p filea /var/tmp cp: failed to set acl entries on /var/tmp/filea |
Wenn Sie auf einem System, auf dem die neueste Solaris-Version installiert ist, mit tar oder cpio ein UFS-Archiv mit der Option zur Beibehaltung der Zugriffssteuerungsliste (tar -p bzw. cpio -P) erstellen, gehen beim Extrahieren des Archivs auf einem System, auf dem eine frühere Solaris-Version installiert ist, die Zugriffssteuerungslisten verloren.
Alle Dateien werden mit den ordnungsgemäßen Dateimodi extrahiert, aber die Zugriffssteuerungslisten werden ignoriert.
Der Befehl ufsrestore ermöglicht es, Daten in einem ZFS-Dateisystem wiederherzustellen. Wenn die Originaldaten POSIX-basierte Zugriffssteuerungslisten enthalten, werden diese in NFSv4-basierte Zugriffssteuerungslisten konvertiert.
Wenn Sie versuchen, eine NFSv4-basierte Zugriffssteuerungsliste für eine UFS-Datei festzulegen, wird eine Meldung wie die folgende angezeigt:
chmod: ERROR: ACL type's are different |
Wenn Sie versuchen, eine POSIX-basierte Zugriffssteuerungsliste für eine ZFS-Datei festzulegen, wird eine Meldung wie die folgende angezeigt:
# getfacl filea File system doesn't support aclent_t style ACL's. See acl(5) for more information on Solaris ACL support. |
Informationen zu Einschränkungen mit Zugriffssteuerungslisten und Backup-Software finden Sie unter Sichern von ZFS-Daten mit anderen Softwarepaketen zur Erstellung von Sicherungskopien.
Es gibt zwei grundlegende Zugriffssteuerungslistenformate:
Syntax zum Setzen gewöhnlicher Zugriffssteuerungslisten
Eine Zugriffssteuerungsliste ist insofern gewöhnlich, als sie nur die herkömmlichen UNIX-Einträge owner/group/other repräsentiert.
chmod [Optionen] A[Index]{+|=}owner@ |group@ |everyone@: Zugriffsrechte/...[:Vererbungsflags]: deny | allow Datei
chmod [Optionen] A-owner@, group@, everyone@: Zugriffsrechte/...[:Vererbungsflags]: deny | allow Datei ...
chmod [Optionen] A[Index]- Datei
Syntax zum Setzen komplexerer Zugriffssteuerungslisten
chmod [Optionen] A[Index]{+|=}user|group:name:Zugriffsrechte /...[:Vererbungsflags]:deny | allow Datei
chmod [Optionen] A-user|group:name:Zugriffsrechte /...[:Vererbungsflags]:deny | allow Datei ...
chmod [Optionen] A[Index]- Datei
Der Zugriffssteuerungslisten-Eintragstyp für die gewöhnliche Zugriffssteuerungslistensyntax. Eine Beschreibung der Zugriffssteuerungslisten-Eintragstypen finden Sie in Tabelle 8–1.
Der Zugriffssteuerungslisten-Eintragstyp für die explizite Zugriffssteuerungslistensyntax. Der Zugriffssteuerungslisten-Eintragstyp „user” bzw. ”group” muss auch die Zugriffssteuerungslisteneintrags-ID, den Benutzernamen oder den Gruppennamen enthalten. Eine Beschreibung der Zugriffssteuerungslisten-Eintragstypen finden Sie in Tabelle 8–1.
Die Zugriffsrechte, die gewährt bzw. verweigert werden. Eine Beschreibung von Zugriffsrechten für Zugriffssteuerungslisten finden Sie in Tabelle 8–2.
Eine optionale Liste von Vererbungsflags von Zugriffssteuerungslisten. Eine Beschreibung der Vererbungsflags von Zugriffssteuerungslisten finden Sie in Tabelle 8–3.
Legt fest, ob Zugriffsrechte gewährt oder verweigert werden.
Im folgenden Beispiel spielt die Zugriffssteuerungslisten-Eintragstyp-ID keine Rolle:
group@:write_data/append_data/execute:deny |
Das folgende Beispiel enthält eine Zugriffssteuerungslisteneintrags-ID, da ein spezifischer Benutzer (Zugriffssteuerungslisten-Eintragstyp) in der Zugriffssteuerungsliste enthalten ist.
0:user:gozer:list_directory/read_data/execute:allow |
Ein Zugriffssteuerungslisteneintrag sieht ungefähr wie folgt aus:
2:group@:write_data/append_data/execute:deny |
Die 2 bzw. die Index-ID in diesem Beispiel identifiziert den Zugriffssteuerungslisteneintrag in der größeren Zugriffssteuerungsliste, in der für Eigentümer, spezifische UIDs, Gruppen und allgemeine Zugriffsrechte mehrere Einträge vorhanden sein können. Sie können die Index-ID mit dem Befehl chmod angeben und somit festlegen, welchen Teil der Zugriffssteuerungsliste Sie ändern möchten. Sie können beispielsweise Index-ID 3 als A3 im Befehl chmod angeben (siehe folgendes Beispiel):
chmod A3=user:venkman:read_acl:allow filename |
Zugriffssteuerungslisten-Eintragstypen, die Eigentümer, Gruppen und andere Parameter in Zugriffssteuerungslisten darstellen, sind in der folgenden Tabelle beschrieben.
Tabelle 8–1 Zugriffssteuerungslisten- Eintragstypen
Zugriffssteuerungslisten- Eintragstyp |
Beschreibung |
---|---|
owner@ |
Das Zugriffsrecht, das dem Eigentümer des Objekts gewährt wird. |
group@ |
Das Zugriffsrecht, das der Eigentümergruppe des Objekts gewährt wird. |
everyone@ |
Der Zugriff, der allen anderen Benutzern oder Gruppen gewährt wird, denen keine anderen Zugriffssteuerungslisteneinträge entsprechen. |
user |
Das Zugriffsrecht, das einem zusätzlichen (und durch den Benutzernamen anzugebenden) Benutzer des Objekts gewährt wird. Dieser Eintrag muss die Zugriffssteuerungslisteneintrags-ID enthalten, die wiederum den betreffenden Benutzernamen oder die Benutzer-ID enthält. Wenn es sich bei diesem Wert um keine gültige nummerische Benutzer-ID oder keinen Benutzername handelt, ist der Zugriffssteuerungslisten-Eintragstyp ungültig. |
group |
Das Zugriffsrecht, das einer zusätzlichen (und durch den Gruppennamen anzugebenden) Benutzergruppe des Objekts gewährt wird. Dieser Eintrag muss die Zugriffssteuerungslisteneintrags-ID enthalten, die wiederum den betreffenden Gruppennamen oder die Gruppen-ID enthält. Wenn es sich bei diesem Wert um keine gültige nummerische Gruppen-ID oder keinen Gruppenname handelt, ist der Zugriffssteuerungslisten-Eintragstyp ungültig. |
In der folgenden Tabelle sind die Zugriffsrechte für Zugriffssteuerungslisten beschrieben.
Tabelle 8–2 Zugriffssteuerungslisten-Zugriffsrechte
Zugriffsrecht |
Kurzform |
Beschreibung |
---|---|---|
add_file |
w |
Berechtigung zum Hinzufügen neuer Dateien zu einem Verzeichnis. |
add_subdirectory |
p |
Berechtigung zum Erstellen von Unterverzeichnissen in einem Verzeichnis. |
append_data |
p |
Platzhalter. Gegenwärtig nicht implementiert. |
delete |
d |
Berechtigung zum Löschen einer Datei. |
delete_child |
D |
Berechtigung zum Löschen einer Datei oder eines Verzeichnisses in einem Verzeichnis. |
execute |
x |
Berechtigung zum Ausführen einer Datei bzw. Durchsuchen eines Verzeichnisses. |
list_directory |
r |
Berechtigung zum Auflisten des Inhalts eines Verzeichnisses. |
read_acl |
c |
Berechtigung zum Lesen der Zugriffssteuerungsliste (ls). |
read_attributes |
a |
Berechtigung zum Lesen grundlegender (nicht zu Zugriffssteuerungslisten gehörender) Attribute einer Datei. Grundlegende Attribute sind Attribute auf der stat-Ebene. Durch Setzen dieses Zugriffsmaskenbits kann eine Entität ls(1) und stat(2) ausführen. |
read_data |
r |
Berechtigung zum Lesen des Inhalts einer a Datei. |
read_xattr |
R |
Berechtigung zum Lesen der erweiterten Attribute einer Datei bzw. Durchsuchen des Verzeichnisses erweiterter Dateiattribute. |
synchronize |
s |
Platzhalter. Gegenwärtig nicht implementiert. |
write_xattr |
V |
Berechtigung zum Erstellen erweiterter Attribute bzw. Schreiben in das Verzeichnis erweiterter Attribute. Durch Gewähren dieses Zugriffsrechtes kann ein Benutzer für eine Datei ein Verzeichnis erweiterter Attribute erstellen. Die Zugriffsrechte der Attributdatei legen das Zugriffsrecht des Benutzers auf das Attribut fest. |
write_data |
w |
Berechtigung zum Ändern oder Ersetzens des Inhalts einer Datei. |
write_attributes |
I |
Berechtigung zum Setzen der Zeitmarken einer Datei bzw. eines Verzeichnisses auf einen beliebigen Wert. |
write_acl |
A |
Berechtigung zum Schreiben bzw. Ändern der Zugriffsteuerungsliste mithilfe des Befehls chmod. |
write_owner |
o |
Berechtigung zum Ändern des Eigentümers bzw. der Gruppe einer Datei bzw. Berechtigung zum Ausführen der Befehle chown oder chgrp für die betreffende Datei. Berechtigung zum Übernehmen der Eigentümerschaft einer Datei bzw. zum Ändern der ihrer Gruppe, zu der der betreffende Benutzer gehört. Wenn Sie die Benutzer- bzw. Gruppeneigentümerschaft auf einen beliebigen Benutzer bzw. eine beliebige Gruppe setzen wollen, ist das Zugriffsrecht PRIV_FILE_CHOWN erforderlich. |
Der Zweck der Vererbung von Zugriffssteuerungslisten besteht darin, dass neu erstellte Dateien bzw. Verzeichnisse die vorgesehenen Zugriffssteuerungslisten erben, ohne dass die vorhandenen Zugriffsrechte des übergeordneten Verzeichnisses ignoriert werden.
Standardmäßig werden Zugriffssteuerungslisten nicht weitergegeben. Wenn Sie für ein Verzeichnis eine komplexe Zugriffssteuerungsliste setzen, wird diese nicht an untergeordnete Verzeichnisse vererbt. Sie müssen die Vererbung einer Zugriffssteuerungsliste für Dateien bzw. Verzeichnisse explizit angeben.
In der folgenden Tabelle sind die optionalen Vererbungsflags aufgeführt.
Tabelle 8–3 Vererbungsflags von Zugriffssteuerungslisten
Vererbungsflag |
Kurzform |
Beschreibung |
---|---|---|
file_inherit |
f |
Die Zugriffssteuerungsliste wird vom übergeordneten Verzeichnis nur an die Dateien des betreffenden Verzeichnisses vererbt. |
dir_inherit |
d |
Die Zugriffssteuerungsliste wird vom übergeordneten Verzeichnis nur an die Unterverzeichnisse des betreffenden Verzeichnisses vererbt. |
inherit_only |
i |
Die Zugriffssteuerungsliste wird vom übergeordneten Verzeichnis vererbt, gilt jedoch nur für neu erstellte Dateien bzw. Unterverzeichnisse, aber nicht für das betreffende Verzeichnis selbst. Für dieses Flag ist das Flag file_inherit bzw. dir_inherit (oder beide) erforderlich. Diese legen fest, was vererbt wird. |
no_propagate |
n |
Die Zugriffssteuerungsliste wird vom übergeordneten Verzeichnis an die erste Hierarchieebene des betreffenden Verzeichnisses und nicht an untergeordnete Ebenen vererbt. Für dieses Flag ist das Flag file_inherit bzw. dir_inherit (oder beide) erforderlich. Diese legen fest, was vererbt wird. |
- |
entf. |
Zugriff nicht gewährt. |
Darüber hinaus können Sie mithilfe der Dateisystemeigenschaft aclinherit für das Dateisystem mehr oder weniger strenge Vererbungsrichtlinien für Zugriffssteuerungslisten festlegen. Weitere Informationen finden Sie im folgenden Abschnitt.
Das ZFS-Dateisystem enthält zwei Eigenschaften für Zugriffssteuerungslisten.
aclinherit – Diese Eigenschaft legt das Verhalten der Vererbung von Zugriffssteuerungslisten fest und kann die folgenden Werte annehmen:
discard – Für neu erstellte Objekte werden beim Erstellen von Dateien und Verzeichnissen keine Zugriffssteuerungslisteneinträge vererbt. Die Zugriffssteuerungsliste der neuen Datei bzw. des neuen Verzeichnisses entspricht dem Zugriffsrechten dieser Datei bzw. dieses Verzeichnisses.
noallow – Bei neuen Objekten werden nur vererbbare Zugriffssteuerungslisteneinträge mit Zugriffstyp deny vererbt.
restricted – Für neu erstellte Objekte werden beim Vererben von Zugriffssteuerungslisteneinträgen die Zugriffsrechte write_owner und write_acl entfernt.
passthrough – Ist der Eigenschaftswert auf passthrough gesetzt, werden die Dateien mithilfe von Zugriffsrechten erstellt, die durch die vererbbaren Zugriffssteuerungseinträge festgelegt wurden. Wenn keine Zugriffsrechte für die vererbbaren Zugriffssteuerungseinträge vorhanden sind, werden Zugriffsrechte gesetzt, die mit der Forderung der Anwendung übereinstimmen.
passthrough-x – Dieser Eigenschaftswert hat die gleiche Semantik wie passthrough, mit der Ausnahme, dass bei Aktivierung von passthrough-x Dateien mit der Ausführungsberechtigung (x) erstellt werden, jedoch nur, wenn die Ausführungsberechtigung im Dateierstellungsmodus und in einer vererbbaren Zugriffssteuerungsliste festgelegt wurde, die sich auf den Modus auswirkt.
Der Standardwert für die Eigenschaft aclinherit ist beschränkt.
aclmode – Diese Eigenschaft ändert das Zugriffssteuerungslistenverhalten, wenn eine Datei neu erstellt wird oder die Datei- bzw. Verzeichniszugriffsrechte vom Befehl chmod geändert werden, und kann die folgenden Werte annehmen:
discard – Alle Zugriffssteuerungslisteneinträge außer denen, die den Modus der Datei bzw. des Verzeichnisses definieren, werden entfernt.
groupmask – Zugriffssteuerungslisten-Zugriffsrechte für Benutzer bzw. Gruppen werden eingeschränkt, sodass sie nicht größer werden als durch die Gruppenzugriffsrechte festgelegt, es sei denn, es handelt sich um einen Benutzereintrag mit der gleichen Benutzer-ID wie der Eigentümer der Datei bzw. des Verzeichnisses. Dann werden die Zugriffssteuerungslisten-Zugriffsrechte eingeschränkt, sodass sie nicht größer werden als durch die Zugriffsrechte des Eigentümers gesetzt.
passthrough – Während eines chmod-Vorgangs werden Zugriffssteuerungseinträge außer owner@, group@ oder everyone@ nicht geändert. Zugriffssteuerungseinträge mit owner@, group@ oder everyone@ werden deaktiviert, um den Dateimodus wie durch den chmod-Vorgang gefordert zu setzen.
Der Standardwert für aclmode ist groupmask.