在为单个用户委托 create 和 mount 权限时,必须确保该用户对底层挂载点拥有权限。
例如,要向用户 marks 委托对 tank 文件系统的 create 和 mount 权限,需要先设置权限:
# chmod A+user:marks:add_subdirectory:fd:allow /tank |
然后,使用 zfs allow 命令委托 create、destroy 和 mount 权限。例如:
# zfs allow marks create,destroy,mount tank |
现在,用户 marks 可以在 tank 文件系统中创建其自己的文件系统。例如:
# su marks marks$ zfs create tank/marks marks$ ^D # su lp $ zfs create tank/lp cannot create 'tank/lp': permission denied |
以下示例说明如何设置文件系统,以使 staff 组中的每个人都可以在 tank 文件系统中创建和挂载文件系统,还可以销毁其自己的文件系统。但是,staff 组成员不能销毁其他任何人的文件系统。
# 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 |
确保在正确的文件系统级别委托用户权限。例如,用户 marks 被委托对本地和后代文件系统的 create、destroy 和 mount 权限。用户 marks 被委托对 tank 文件系统创建快照的本地权限,但不允许该用户对其自己的文件系统创建快照。因此,未在正确的文件系统级别对他委托 snapshot 权限。
# 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 |
要在后代文件系统级别向用户 marks 委托权限,请使用 zfs allow -d 选项。例如:
# 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 |
现在,用户 marks 只能在 tank 文件系统级别之下创建快照。
可向用户或组委托特定权限。例如,以下 zfs allow 命令将向 staff 组委托特定权限。此外,还会在创建 tank 文件系统后委托 destroy 和 snapshot 权限。
# 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 ------------------------------------------------------------- |
由于用户 marks 是 staff 组的成员,因此他可以在 tank 中创建文件系统。此外,用户 marks 可以创建 tank/marks2 的快照,因为他具有执行此操作的特定权限。例如:
# 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 ------------------------------------------------------------- |
但是,用户 marks 不能在 tank/marks 中创建快照,因为他不具有执行此操作的特定权限。例如:
$ zfs snapshot tank/marks2@snap1 $ zfs snapshot tank/marks@snappp cannot create snapshot 'tank/marks@snappp': permission denied |
在此示例中,用户 marks 在其起始目录中具有 create 权限,这意味着他可以创建快照。当文件系统通过 NFS 挂载时,此方案很有用。
$ 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 |
以下示例说明如何创建权限集 @myset 并向组 staff 委托对 tank 文件系统的该权限集和 rename 权限。用户 cindys 是 staff 组成员,他具有在 tank 中创建文件系统的权限。但是,用户 lp 没有在 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 |