跳过导航链接 | |
退出打印视图 | |
![]() |
Sun QFS 文件系统 5.3 配置和管理指南 Sun QFS and Sun Storage Archive Manager 5.3 Information Library (简体中文) |
Oracle Solaris 的以前版本支持的 ACL 实现主要基于 POSIX ACL 规范。基于 POSIX 的 ACL 用于保护 UFS 文件,并通过 NFSv4 之前的 NFS 版本进行转换。
引入 NFSv4 之后,新的 Oracle Solaris ACL 模型完全支持 NFSv4 在 UNIX 和非 UNIX 客户机之间提供的互操作性。如 NFSv4 规范中所定义,这一新的 ACL 实现提供了更丰富的基于 NT 样式 ACL 的语义。
与旧模型相比,新的 ACL 模型的主要变化如下:
基于 NFSv4 规范,与 NT 样式的 ACL 类似。
提供更为详尽的访问特权集合。有关更多信息,请参见表 8-3。
使用 chmod 和 ls 命令(而不是 setfacl 和 getfacl 命令)进行设置和显示。
提供更丰富的继承语义,用于指定如何应用访问特权。有关更多信息,请参见ACL 继承。
两种 ACL 模型均可比标准文件权限提供更精细的访问控制。与 POSIX ACL 非常相似,新 ACL 也由多个访问控制项 (Access Control Entry, ACE) 构成。
POSIX 样式的 ACL 使用单个项来定义允许和拒绝的权限。新的 ACL 模型包含两种可影响访问检查的 ACE:ALLOW 和 DENY。因此,不能根据任何定义一组权限的单个 ACE 来推断该 ACE 中未定义的权限是被允许还是被拒绝。
有关新的 Oracle Solaris ACL 模型的更多信息,请参见《Oracle Solaris Administration: ZFS File Systems》中的"New Solaris ACL Model"。
当前,SAM-QFS 不支持临时 ID 或 SID。因此,必须使用 idmap 服务显式定义所有 Windows 身份或必须由 Active Directory 服务提供所有 Windows 身份。SMB 服务器遇到的未定义显式映射的身份将自动默认为 nobody 身份。
有关身份映射管理的更多信息,请参见 《Oracle Solaris Administration: SMB and Windows Interoperability》中的第 2 章 "Identity Mapping Administration (Tasks)"。
POSIX ACL 是 SAM-QFS 文件系统中存在的默认 ACL。为了支持 SMB 服务,SAM-QFS 文件系统还必须支持 NFSv4 ACL。
使用 sammkfs -A 命令创建支持 NFSv4 ACL 的文件系统。例如,创建支持 NFSv4 ACL 的文件系统 sqfs1:
# sammkfs -A -S sqfs1
有关 sammkfs 命令中 -A 选项的更多信息,请参见《Sun QFS and Sun Storage Archive Manager 5.3 Reference Manual》中的"sammkfs(1M)"。
使用 samfsck -A 命令将现有 POSIX ACL 转换为 NFSv4 ACL。例如,在现有文件系统 sqfs2 上从 POSIX ACL 转换为 NFSv4 ACL:
# samfsck -F -A sqfs2
注 - 不能执行从 POSIX ACL 到 NFSv4 ACL 的反向转换。该转换仅适用于文件系统版本 V2 或 V2A。
有关 samfsck 命令中 -A 选项的更多信息,请参见《Sun QFS and Sun Storage Archive Manager 5.3 Reference Manual》中的"samfsck(1M)"。
提供的两种基本 ACL 格式如下所示:
用于设置普通 ACL 的语法
chmod [options] A[index]{+|=}owner@ |group@ |everyone@: access-permissions/...[:inheritance-flags]: deny | allow file
chmod [options] A-owner@, group@, everyone@: access-permissions/...[:inheritance-flags]: deny | allow file ...
chmod [options] A[index]- file
用于设置非普通 ACL 的语法
chmod [options] A[index]{+|=}user|group:name: access-permissions/...[:inheritance-flags] :deny | allow file
chmod [options] A-user|group:name:access-permissions /...[:inheritance-flags]:deny | allow file ...
chmod [options] A[index]- file
标识普通 ACL 语法的 ACL-entry-type。有关 ACL-entry-type 的说明,请参见表 8-2。
标识显式 ACL 语法的 ACL-entry-type。用户和组 ACL-entry-type 还必须包含 ACL-entry-ID、username 或 groupname。有关 ACL-entry-type 的说明,请参见表 8-2。
标识被授予或拒绝的访问权限。有关 ACL 访问特权的说明,请参见表 8-3。
标识 ACL 继承标志的可选列表。有关 ACL 继承标志的说明,请参见表 8-4。
标识是授予还是拒绝访问权限。
在以下示例中,与 ACL-entry-ID 值无关。
group@:write_data/append_data/execute:deny
以下示例包含一个 ACL-entry-ID,因为在 ACL 中包含一个特定用户 (ACL-entry-ID)。
0:user:gozer:list_directory/read_data/execute:allow
显示 ACL 条目时,它与以下内容类似:
2:group@:write_data/append_data/execute:deny
该示例中的 2 或 index-ID 标志标识较大的 ACL 中的 ACL 条目,该 ACL 可能具有多个对应于属主、特定 UID、组和每个人的条目。可以使用 chmod 命令指定 index-ID 以标识要修改的 ACL 部分。例如,在 chmod 命令中可以将索引 ID 3 标识为 A3,与下面的内容类似:
chmod A3=user:venkman:read_acl:allow filename
下表介绍了 ACL 条目类型(属主、组和其他项的 ACL 表示形式)。
表 8-2 ACL 条目类型
|
下表介绍了 ACL 访问特权。
表 8-3 ACL 访问特权
|
示例 8-3 修改 SAM-QFS 文件上的普通 ACL
以下示例中,普通 ACL 存在于 file.1 中:
# ls -v file.1 -rw-r--r-- 1 root root 206674 Jun 14 10:54 file.1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
使用 ACL 继承的目的是使新创建的文件或目录可以继承相应的 ACL,而不忽略父目录上的现有权限位。
默认情况下,ACL 不进行传播。如果在目录中设置非普通 ACL,则不会将其继承到任何后续目录中。必须在文件或目录中指定 ACL 的继承。
下表介绍了可选继承标志。
表 8-4 ACL 继承标志
|
默认情况下,ACL 不会通过目录结构传播。
示例 8-4 授予默认 ACL 继承
在以下示例中,在 test.dir 上为用户 gozer 应用了非普通 ACE read_data/write_data/execute。
# chmod A+user:gozer:read_data/write_data/execute:allow test.dir # ls -dv test.dir drwxr-xr-x+ 2 root root 2 Jun 15 10:40 test.dir 0:user:gozer:list_directory/read_data/add_file/write_data/execute:allow 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/read_attributes /write_attributes/read_acl/write_acl/write_owner/synchronize:allow 2:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
如果创建了 test.dir 的子目录,则不会传播用户 gozer 的 ACE。仅当 sub.dir 上的权限授予用户 gozer 文件属主、组成员或 everyone@ 访问权限,该用户对 sub.dir 才具有访问权限。
# mkdir test.dir/sub.dir # ls -dv test.dir/sub.dir drwxr-xr-x 2 root root 2 Jun 15 10:41 test.dir/sub.dir 0:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/read_attributes /write_attributes/read_acl/write_acl/write_owner/synchronize:allow 1:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 2:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
示例 8-5 对目录内的文件授予 ACL 继承
在以下示例中,某些权限应用于目录中新创建的所有文件,但不应用于目录本身。file_inherit 标志表明权限针对文件,inherit_only 标志表明权限针对继承,而不应用于目录本身。
# chmod A+user:bob:read_data/execute:file_inherit/inherit_only:deny mydir # ls -vd mydir dr-xr-xr-x+ 2 root root 4096 Jul 5 19:10 mydir 0:user:bob:list_directory/read_data/execute:file_inherit/inherit_only:deny 1:owner@:list_directory/read_data/add_file/write_data/add_subdirectory /append_data/read_xattr/write_xattr/execute/delete_child /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow 3:everyone@:list_directory/read_data/read_xattr/execute/read_attributes /read_acl/synchronize:allow
如果在 mydir 目录中创建 myfile 文件,则 myfile 文件将自动继承所有访问权限。
# cd mydir # touch myfile # ls -v myfile -r--r--r--+ 1 root root 0 Jul 5 19:11 myfile 0:user:bob:read_data/execute:file_inherit/inherit_only:deny 1:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 2:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 3:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow