如果您向单个用户授予 create 和 mount 权限,必须确保该用户拥有底层挂载点的权限。
例如,要向用户 mark 授予对 tank 文件系统的 create 和 mount 权限,需要先设置权限:
# chmod A+user:mark:add_subdirectory:fd:allow /tank/home
然后,使用 zfs allow 命令授予 create、destroy 和 mount 权限。例如:
# zfs allow mark create,destroy,mount tank/home
现在,用户 mark 可以在 tank/home 文件系统中创建自己的文件系统。例如:
# su mark mark$ zfs create tank/home/mark mark$ ^D # su lp $ zfs create tank/home/lp cannot create 'tank/home/lp': permission denied示例 8-2 向组授予 create 和 destroy 权限
以下示例展示了如何设置文件系统,以使 staff 组中的每个人都可以在 tank/home 文件系统中创建和挂载文件系统,以及销毁其自己的文件系统。但是,staff 组成员不能销毁其他人的文件系统。
# zfs allow staff create,mount tank/home # zfs allow -c create,destroy tank/home # zfs allow tank/home ---- Permissions on tank/home ---------------------------------------- Create time permissions: create,destroy Local+Descendent permissions: group staff create,mount # su cindy cindy% zfs create tank/home/cindy/files cindy% exit # su mark mark% zfs create tank/home/mark/data mark% exit cindy% zfs destroy tank/home/mark/data cannot destroy 'tank/home/mark/data': permission denied示例 8-3 在正确的文件系统级别授予权限
确保在正确的文件系统级别授予用户权限。例如,向用户 mark 授予了对本地和后代文件系统的 create、destroy 和 mount 权限。向用户 mark 授予了对 tank/home 文件系统创建快照的本地权限,但不允许该用户对自己的文件系统创建快照。因此,未在正确的文件系统级别为他授予 snapshot 权限。
# zfs allow -l mark snapshot tank/home # zfs allow tank/home ---- Permissions on tank/home ---------------------------------------- Create time permissions: create,destroy Local permissions: user mark snapshot Local+Descendent permissions: group staff create,mount # su mark mark$ zfs snapshot tank/home@snap1 mark$ zfs snapshot tank/home/mark@snap1 cannot create snapshot 'tank/home/mark@snap1': permission denied
要在后代文件系统级别向用户 mark 授予权限,请使用 zfs allow –d 选项。例如:
# zfs unallow -l mark snapshot tank/home # zfs allow -d mark snapshot tank/home # zfs allow tank/home ---- Permissions on tank/home ---------------------------------------- Create time permissions: create,destroy Descendent permissions: user mark snapshot Local+Descendent permissions: group staff create,mount # su mark $ zfs snapshot tank/home@snap2 cannot create snapshot 'tank/home@snap2': permission denied $ zfs snapshot tank/home/mark@snappy
现在,用户 mark 只能在 tank/home 文件系统级别之下创建快照。
示例 8-4 定义和使用复杂委托权限可向用户或组授予特定权限。例如,以下 zfs allow 命令将向 staff 组授予特定权限。此外,还会在创建 tank/home 文件系统后授予 destroy 和 snapshot 权限。
# zfs allow staff create,mount tank/home # zfs allow -c destroy,snapshot tank/home # zfs allow tank/home ---- Permissions on tank/home ---------------------------------------- Create time permissions: create,destroy,snapshot Local+Descendent permissions: group staff create,mount
由于用户 mark 是 staff 组的成员,因此他可以在 tank/home 中创建文件系统。此外,用户 mark 可以创建 tank/home/mark2 的快照,因为他具有执行此操作的特定权限。例如:
# su mark $ zfs create tank/home/mark2 $ zfs allow tank/home/mark2 ---- Permissions on tank/home/mark2 ---------------------------------- Local permissions: user mark create,destroy,snapshot ---- Permissions on tank/home ---------------------------------------- Create time permissions: create,destroy,snapshot Local+Descendent permissions: group staff create,mount
但是,用户 mark 不能在 tank/home/mark 中创建快照,因为他不具有执行此操作的特定权限。例如:
$ zfs snapshot tank/home/mark@snap1 cannot create snapshot 'tank/home/mark@snap1': permission denied
在此示例中,用户 mark 在其起始目录中具有 create 权限,这意味着他可以创建快照。当文件系统通过 NFS 挂载时,此方案很有用。
$ cd /tank/home/mark2 $ ls $ cd .zfs $ ls shares snapshot $ cd snapshot $ ls -l total 3 drwxr-xr-x 2 mark staff 2 Sep 27 15:55 snap1 $ pwd /tank/home/mark2/.zfs/snapshot $ mkdir snap2 $ zfs list # zfs list -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home/mark 63K 62.3G 32K /tank/home/mark tank/home/mark2 49K 62.3G 31K /tank/home/mark2 tank/home/mark2@snap1 18K - 31K - tank/home/mark2@snap2 0 - 31K - $ ls snap1 snap2 $ rmdir snap2 $ ls snap1示例 8-5 定义和使用 ZFS 委托权限集
以下示例说明如何创建权限集 @myset 并针对 tank 文件系统向组 staff 授予该权限集和 rename 权限。用户 cindy 是 staff 组成员,他具有在 tank 中创建文件系统的权限。但是,用户 lp 没有在 tank 中创建文件系统的权限。
# zfs allow -s @myset create,destroy,mount,snapshot,promote,clone,readonly tank # zfs allow tank ---- Permissions on tank --------------------------------------------- Permission sets: @myset clone,create,destroy,mount,promote,readonly,snapshot # zfs allow staff @myset,rename tank # zfs allow tank ---- Permissions on tank --------------------------------------------- Permission sets: @myset clone,create,destroy,mount,promote,readonly,snapshot Local+Descendent permissions: group staff @myset,rename # chmod A+group:staff:add_subdirectory:fd:allow tank # su cindy cindy% zfs create tank/data cindy% zfs allow tank ---- Permissions on tank --------------------------------------------- Permission sets: @myset clone,create,destroy,mount,promote,readonly,snapshot Local+Descendent permissions: group staff @myset,rename cindy% ls -l /tank total 15 drwxr-xr-x 2 cindy staff 2 Jun 24 10:55 data cindy% exit # su lp $ zfs create tank/lp cannot create 'tank/lp': permission denied