Oracle Solaris ZFS-Administrationshandbuch

Arbeiten mit der delegierten ZFS-Administration

In diesem Abschnitt finden Sie Beispiele zum Delegieren und Anzeigen von ZFS-Zugriffsrechten.

Delegieren von ZFS-Zugriffsrechten (Beispiele)


Beispiel 9–1 Delegieren von Zugriffsrechten an einzelne Benutzer

Wenn Sie einem einzelnen Benutzer die Zugriffsrechte create und mount übertragen möchten, müssen Sie sich vergewissern, dass dieser über die erforderlichen Zugriffsrechte für den zugrunde liegenden Einhängepunkt verfügt.

Um beispielsweise dem Benutzer marks die Zugriffsrechte create und mount für tank zu erteilen, setzen Sie zuerst diese Zugriffsrechte:


# chmod A+user:marks:add_subdirectory:fd:allow /tank

Anschließend gewähren Sie mit dem Befehl zfs allow die Zugriffsrechte create , destroy und mount. Beispiel:


# zfs allow marks create,destroy,mount tank

Jetzt kann der Benutzer marks unter tank eigene Dateisysteme anlegen. Beispiel:


# su marks
marks$ zfs create tank/marks
marks$ ^D
# su lp
$ zfs create tank/lp
cannot create 'tank/lp': permission denied


Beispiel 9–2 Delegieren der Zugriffsrechte create und destroy an Gruppen

Das folgende Beispiel veranschaulicht, wie ein Dateisystem eingerichtet wird, damit jedes Mitglied der Gruppe staff Dateisysteme unter tank erstellen und einhängen sowie eigene Dateisysteme löschen kann. Die Gruppenmitglieder von staff können jedoch nicht die Dateisysteme anderer Gruppenmitglieder löschen.


# zfs allow staff create,mount tank
# zfs allow -c create,destroy tank
# zfs allow tank
-------------------------------------------------------------
Create time permissions on (tank)
        create,destroy
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------
# su cindys
cindys% zfs create tank/cindys
cindys% exit
# su marks
marks% zfs create tank/marks/data
marks% exit
cindys% zfs destroy tank/marks/data
cannot destroy 'tank/mark': permission denied


Beispiel 9–3 Delegieren von Zugriffsrechten auf der richtigen Ebene der Dateisystemhierarchie

Achten Sie darauf, den Benutzern die Zugriffsrechte auf der richtigen Ebene der Dateisystemhierarchie zuweisen. So werden beispielsweise dem Benutzer marks die Zugriffsrechte create, destroy und mount für das lokale und für die untergeordneten Dateisysteme gewährt. Benutzer marks erhält lokale Zugriffsrechte zum Erstellen von Snapshots des Dateisystems tank, nicht aber des eigenen Dateisystems. Ihm wurde das Zugriffsrecht snapshot also nicht auf der richtigen Ebene der Dateisystemhierarchie übertragen.


# zfs allow -l marks snapshot tank
# zfs allow tank
-------------------------------------------------------------
Local permissions on (tank)
        user marks snapshot
Local+Descendent permissions on (tank)
        user marks create,destroy,mount
-------------------------------------------------------------
# su marks
marks$ zfs snapshot tank/@snap1
marks$ zfs snapshot tank/marks@snap1
cannot create snapshot 'mark/marks@snap1': permission denied

Um Benutzer marks Zugriffsrechte für die untergeordnete Ebene zu gewähren, verwenden Sie den Befehl zfs allow mit der Option - d. Beispiel:


# zfs unallow -l marks snapshot tank
# zfs allow -d marks snapshot tank
# zfs allow tank
-------------------------------------------------------------
Descendent permissions on (tank)
        user marks snapshot
Local+Descendent permissions on (tank)
        user marks create,destroy,mount
-------------------------------------------------------------
# su marks
$ zfs snapshot tank@snap2
cannot create snapshot 'tank@snap2': permission denied
$ zfs snapshot tank/marks@snappy

Jetzt kann der Benutzer marks nur Snapshots unterhalb der Ebene tank erstellen.



Beispiel 9–4 Definieren und Anwenden komplexer delegierter Zugriffsrechte

Benutzern oder Gruppen können spezifische Zugriffsrechte gewährt werden. So werden beispielsweise mit dem folgenden zfs allow-Befehl spezifische Zugriffsrechte an die Gruppe staff übertragen. Darüber hinaus gelten die Zugriffsrechte destroy und snapshot, sobaldtank-Dateisysteme erstellt werden.


# zfs allow staff create,mount tank
# zfs allow -c destroy,snapshot tank
# zfs allow tank
-------------------------------------------------------------
Create time permissions on (tank)
        destroy,snapshot
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------

Da Benutzer marks ein Mitglied der Gruppe staff ist, kann er in tank Dateisysteme erstellen. Zusätzlich kann Benutzer marks Snapshots von tank/marks2 erstellen, da er über die spezifischen Zugriffsrechte verfügt. Beispiel:


# su marks
$ zfs create tank/marks2
$ zfs allow tank/marks2
-------------------------------------------------------------
Local permissions on (tank/marks2)
        user marks destroy,snapshot
-------------------------------------------------------------
Create time permissions on (tank)
        destroy,snapshot
Local+Descendent permissions on (tank)
        group staff create
        everyone mount
-------------------------------------------------------------

Er kann jedoch keine Snapshots in tank/marks erstellen, da ihm die Zugriffsrechte hierfür fehlen. Beispiel:


$ zfs snapshot tank/marks2@snap1
$ zfs snapshot tank/marks@snappp
cannot create snapshot 'tank/marks@snappp': permission denied

Wenn Sie in Ihrem home-Verzeichnis über die Berechtigung create verfügen, können Sie eigene Snapshot-Verzeichnisse erstellen. Dies kann sich bei Dateisystemen als hilfreich erweisen, die per NFS eingehängt werden. Beispiel:


$ cd /tank/marks2
$ ls
$ cd .zfs
$ ls
snapshot
$ cd snapshot
$ ls -l
total 3
drwxr-xr-x   2 marks    staff          2 Dec 15 13:53 snap1
$ pwd
/tank/marks2/.zfs/snapshot
$ mkdir snap2
$ zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank                   264K  33.2G  33.5K  /tank
tank/marks            24.5K  33.2G  24.5K  /tank/marks
tank/marks2             46K  33.2G  24.5K  /tank/marks2
tank/marks2@snap1     21.5K      -  24.5K  -
tank/marks2@snap2         0      -  24.5K  -
$ ls
snap1  snap2
$ rmdir snap2
$ ls
snap1


Beispiel 9–5 Definieren und Anwenden von delegierten Zugriffsrechtsätzen für ZFS

Das folgende Beispiel zeigt, wie der Zugriffsrechtsatz @myset erstellt wird und dieser und das Zugriffsrecht rename an die Gruppe staff für das Dateisystem tank übertragen werden. Der Benutzer cindys, Mitglied der Gruppe staff, verfügt über die Berechtigung zum Erstellen von Dateisystemen in tank. Benutzer lp verfügt jedoch nicht über die Berechtigung zum Erstellen von Dateisystemen in tank.


# zfs allow -s @myset create,destroy,mount,snapshot,promote,clone,readonly tank
# zfs allow tank
-------------------------------------------------------------
Permission sets on (tank)
        @myset clone,create,destroy,mount,promote,readonly,snapshot
-------------------------------------------------------------
# zfs allow staff @myset,rename tank
# zfs allow tank
-------------------------------------------------------------
Permission sets on (tank)
        @myset clone,create,destroy,mount,promote,readonly,snapshot
Local+Descendent permissions on (tank)
        group staff @myset,rename
# chmod A+group:staff:add_subdirectory:fd:allow tank
# su cindys
cindys% zfs create tank/data
Cindys% zfs allow tank
-------------------------------------------------------------
Permission sets on (tank)
        @myset clone,create,destroy,mount,promote,readonly,snapshot
Local+Descendent permissions on (tank)
        group staff @myset,rename
-------------------------------------------------------------
cindys% ls -l /tank
total 15
drwxr-xr-x   2 cindys   staff          2 Aug  8 14:10 data
cindys% exit
# su lp
$ zfs create tank/lp
cannot create 'tank/lp': permission denied

Anzeigen von delegierten ZFS-Zugriffsrechten (Beispiele)

Mit dem folgenden Befehl werden die Zugriffsrechte angezeigt:


# zfs allow dataset

Dieser Befehl gibt die für das jeweilige Dataset gesetzten oder gewährten Zugriffsrechte aus. Die Ausgabe enthält folgende Komponenten:


Beispiel 9–6 Anzeigen einfacher Zugriffsrechte für die delegierte Administration

Die folgende Ausgabe in diesem Beispiel bedeutet, dass der Benutzer cindys berechtigt ist, im Dateisystem tank/cindys Objekte zu erstellen, zu löschen, einzuhängen und Snapshots zu erstellen.


# zfs allow tank/cindys
       -------------------------------------------------------------
       Local+Descendent permissions on (tank/cindys)
               user cindys create,destroy,mount,snapshot


Beispiel 9–7 Anzeigen komplexer Zugriffsrechte für die delegierte Administration

Die Ausgabe in diesem Beispiel zeigt die folgenden Zugriffsrechte für die Dateisysteme pool/fred und pool auf.

Für das Dateisystem pool/fred:

Für das Dateisystem pool:

Sehen Sie hier die Ausgabe für dieses Beispiel:


$ zfs allow pool/fred
------------------------------------------------------------------------------
Permission sets on (pool/fred)
        @eng create,destroy,snapshot,mount,clone,promote,rename
        @simple create,mount
Create time permissions on (pool/fred)
        @eng,mountpoint
Local permissions on (pool/fred)
        user tom @eng
        user joe create,destroy,mount
Local+Descendent permissions on (pool/fred)
        user fred @basic,share,rename
Descendent permissions on (pool/fred)
        user barney @basic
        group staff @basic
------------------------------------------------------------------------------
Permission sets on (pool)
        @simple create,destroy,mount
Local permissions on (pool)
        group staff @simple
------------------------------------------------------------------------------

Löschen von ZFS-Zugriffsrechten (Beispiele)

Mit dem Befehl zfs unallow lassen sich übertragene Zugriffsrechte wieder löschen. Beispielsweise verfügt Benutzer cindys über die Zugriffsrechte zum Erstellen, Löschen, Einhängen und Anfertigen von Snapshots im Dateisystem tank/cindys.


# zfs allow cindys create,destroy,mount,snapshot tank/cindys
       # zfs allow tank/cindys
       -------------------------------------------------------------
       Local+Descendent permissions on (tank/cindys)
               user cindys create,destroy,mount,snapshot
       -------------------------------------------------------------

Mit der folgenden zfs unallow-Syntax entziehen Sie das Zugriffsrecht von Benutzer cindys zum Erstellen von Snapshots für das Dateisystem tank/cindys:


# zfs unallow cindys snapshot tank/cindys
# zfs allow tank/cindys
-------------------------------------------------------------
Local+Descendent permissions on (tank/cindys)
        user cindys create,destroy,mount
-------------------------------------------------------------
cindys% zfs create tank/cindys/data
cindys% zfs snapshot tank/cindys@today
cannot create snapshot 'tank/cindys@today': permission denied

Betrachten wir als weiteres Beispiel die nachfolgenden Zugriffsrechte des Benutzers marks in tank/marks:


# zfs allow tank/marks
-------------------------------------------------------------
Local+Descendent permissions on (tank/marks)
        user marks create,destroy,mount
-------------------------------------------------------------

In diesem Beispiel werden mit der folgenden zfs unallow-Syntax alle Zugriffsrechte für Benutzer marks von tank/marks gelöscht:


# zfs unallow marks tank/marks

Die folgende zfs unallow-Syntax löscht einen Zugriffsrechtsatz für das Dateisystem tank.


# zfs allow tank
-------------------------------------------------------------
Permission sets on (tank)
        @myset clone,create,destroy,mount,promote,readonly,snapshot
Create time permissions on (tank)
        create,destroy,mount
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------
# zfs unallow -s @myset tank
$ zfs allow tank
-------------------------------------------------------------
Create time permissions on (tank)
        create,destroy,mount
Local+Descendent permissions on (tank)
        group staff create,mount
-------------------------------------------------------------