在为单个用户委托 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
|