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 |
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 |
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.
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 |
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 |