目录和文件权限ACL用于定义用户或用户组被授予的访问权限。本文介绍在使用CPFS-POSIX客户端挂载的CPFS文件系统上,如何设置NFSv4 ACL来进行文件或目录权限管理。
说明 CPFS-NFS协议服务仅支持NFS v3服务,不支持NFSv4 ACL。
命令说明
在设置NFSv4 ACL前,请先熟悉相关操作命令。
命令 |
说明 |
mmgetacl <FileName or Dirname> |
查看文件当前的ACL权限。 |
mmgetacl <FileName or Dirname > standard.acl |
查看文件当前的ACL权限,并将ACL保存到指定的文件中。 |
mmputacl -i standard.acl <FileName or Dirname> |
将standard.acl应用到指定的文件或目录上。 |
export EDITOR=/usr/bin/vim;mmeditacl <FileName or Dirname> |
编辑指定文件或目录的ACL。 |
配置权限
您可以参考以下步骤,为目录或文件设置NFSv4 ACL实现权限管理。
- 创建用户和群组。
本文假设创建普通用户player,属于普通用户群组players;管理员admini,属于管理员群组adminis;另外再创建一个用户anonym。
- 创建普通用户player并加入用户群组players。
sudo useradd player
sudo groupadd players
sudo usermod -g players player
- 创建管理员admini并加入管理员群组adminis。
sudo useradd admini
sudo groupadd adminis
sudo usermod -g adminis admini
- 创建用户anonym。
- 获取用户群组players和adminis的ID。
打开/etc/group文件,获取用户群组players和adminis的ID,如下所示。
players:x:1001:
adminis:x:1003:
- 对目录和文件设置NFSv4 ACL。
本文假设创建目录dir3,针对目录dir3中的所有文件,授予群组players只读权限,授予群组adminis读写执行权限,不授予其他用户权限。
- 创建目录dir3。
- 配置规则并保存至文本文件acl.txt中。
#NFSv4 ACL
#owner:root
#group:root
special:everyone@:----:allow:FileInherit:DirInherit
(-)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (-)SYNCHRONIZE (-)READ_ACL (-)READ_ATTR (-)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (-)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:group@:----:allow:FileInherit:DirInherit
(-)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (-)SYNCHRONIZE (-)READ_ACL (-)READ_ATTR (-)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (-)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:owner@:----:allow:FileInherit:DirInherit
(-)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (-)SYNCHRONIZE (-)READ_ACL (-)READ_ATTR (-)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (-)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
group:adminis:rwxc:allow:FileInherit:DirInherit
(X)READ/LIST (X)WRITE/CREATE (X)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (X)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED
group:players:r-x-:allow:FileInherit:DirInherit
(X)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (X)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:owner@:---c:allow
(-)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (X)CHOWN (-)EXEC/SEARCH (X)WRITE_ACL (X)WRITE_ATTR (X)WRITE_NAMED
special:group@:----:allow
(-)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (-)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
special:everyone@:----:allow
(-)READ/LIST (-)WRITE/CREATE (-)APPEND/MKDIR (X)SYNCHRONIZE (X)READ_ACL (X)READ_ATTR (X)READ_NAMED
(-)DELETE (-)DELETE_CHILD (-)CHOWN (-)EXEC/SEARCH (-)WRITE_ACL (-)WRITE_ATTR (-)WRITE_NAMED
- 将ACL规则应用到目录dir3。
mmputacl -i ~/acl.txt dir3
验证权限
您可以参考以下步骤,验证ACL的设置结果。
- 验证用户admini具有读写权限。
sudo su admini -c 'touch dir3/file'
sudo su admini -c 'echo 123 > dir3/file'
如未返回异常信息,则表示用户admini具有读写权限。
- 验证用户player的只读权限。
- 验证player用户是否有执行权限。
- 验证player用户是否有写权限。
- 验证player用户是否有编辑dir3/fileACL的权限。
- 修改dir3/file的ACL权限。
sudo su player -c 'export EDITOR=/usr/bin/vim;/usr/lpp/mmfs/bin/mmeditacl dir3/file'
- 输入
yes
应用修改后的ACL权限。mmeditacl: Should the modified ACL be applied? (yes) or (no)
若返回如下信息,则表示用户player无编辑
dir3/fileACL的权限。
tsputacl: Authorization failure
- 验证用户anonym无权限。
- 验证访问目录dir3权限。
- 验证查看dir3/file文件权限。
- 验证更改dir3/file的ACL权限。
移除权限
如果您要移除用户权限,可参见以下方法。例如:将用户admini移入群组adminis2,并验证用户admini无权限。
- 创建adminis2群组。
- 将用户admini移入群组adminis2。
sudo usermod -g adminis2 admini
- 查询用户ID权限。
- 验证用户admini无权限。
- 验证访问目录dir3权限。
- 验证查看dir3/file文件权限。
- 验证更改dir3/file的ACL权限。