在 Oracle® Solaris 11.2 中管理 ZFS 文件系统

退出打印视图

更新时间: 2014 年 12 月
 
 

授予 ZFS 权限示例

示例 8-1  向单个用户授予权限

如果您向单个用户授予 createmount 权限,必须确保该用户拥有底层挂载点的权限。

例如,要向用户 mark 授予对 tank 文件系统的 createmount 权限,需要先设置权限:

# chmod A+user:mark:add_subdirectory:fd:allow /tank/home

然后,使用 zfs allow 命令授予 createdestroymount 权限。例如:

# 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  向组授予 createdestroy 权限

以下示例展示了如何设置文件系统,以使 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 授予了对本地和后代文件系统的 createdestroymount 权限。向用户 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 文件系统后授予 destroysnapshot 权限。

# 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

由于用户 markstaff 组的成员,因此他可以在 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 权限。用户 cindystaff 组成员,他具有在 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