使用NFSv4 ACl对POSIX文件系统进行权限管理
更新时间:
目录和文件权限ACL用于定义用户或用户组被授予的访问权限。本文介绍在使用CPFS-POSIX客户端挂载的CPFS文件系统上,如何设置NFSv4 ACL来进行文件或目录权限管理。
前提条件
已完成挂载CPFS文件系统。具体操作,请参见快速入门(CPFS-POSIX)。说明 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 playersudo groupadd playerssudo usermod -g players player - 创建管理员admini并加入管理员群组adminis。
sudo useradd adminisudo groupadd adminissudo usermod -g adminis admini - 创建用户anonym。
sudo useradd anonym
- 创建普通用户player并加入用户群组players。
- 获取用户群组players和adminis的ID。
打开/etc/group文件,获取用户群组players和adminis的ID,如下所示。
players:x:1001: adminis:x:1003: - 对目录和文件设置NFSv4 ACL。
本文假设创建目录dir3,针对目录dir3中的所有文件,授予群组players只读权限,授予群组adminis读写执行权限,不授予其他用户权限。
- 创建目录dir3。
mkdir 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
- 创建目录dir3。
验证权限
您可以参考以下步骤,验证ACL的设置结果。
- 验证用户admini具有读写权限。
sudo su admini -c 'touch dir3/file'sudo su admini -c 'echo 123 > dir3/file'如未返回异常信息,则表示用户admini具有读写权限。
- 验证用户player的只读权限。
- 验证player用户是否有执行权限。
- 执行命令
sudo su player -c 'touch dir3/file' - 如果返回如下信息,则表示用户player无执行权限。
touch: cannot touch 'dir3/file': Permission denied
- 执行命令
- 验证player用户是否有写权限。
- 执行命令
sudo su player -c 'echo 456 >> dir3/file' - 如果返回如下信息,则表示用户player对dir3/file无写权限。
bash: dir3/file: Permission denied
- 执行命令
- 验证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
- 修改dir3/file的ACL权限。
- 验证player用户是否有执行权限。
- 验证用户anonym无权限。
- 验证访问目录dir3权限。
- 执行命令
sudo su anonym -c 'ls dir3' - 如果返回如下信息,则表示用户anonym无权限访问dir3目录。
ls: cannot open directory 'dir3': Permission denied
- 执行命令
- 验证查看dir3/file文件权限。
- 执行命令
sudo su anonym -c 'cat dir3/file' - 如果返回如下信息,则表示用户anonym无权限查看dir3/file文件的内容。
cat: dir3/file: Permission denied
- 执行命令
- 验证更改dir3/file的ACL权限。
- 执行命令
sudo su anonym -c 'export EDITOR=/usr/bin/vim;/usr/lpp/mmfs/bin/mmeditacl dir3/file' - 如果返回以下信息,则表示用户anonym无执行权限。
dir3/file: Permission denied tsgetacl: Cannot open dir3/file mmeditacl: Failure reading ACL (rc=13)
- 执行命令
- 验证访问目录dir3权限。
移除权限
如果您要移除用户权限,可参见以下方法。例如:将用户admini移入群组adminis2,并验证用户admini无权限。
- 创建adminis2群组。
sudo groupadd adminis2 - 将用户admini移入群组adminis2。
sudo usermod -g adminis2 admini - 查询用户ID权限。
- 执行命令
id admini - 返回示例
uid=1001(admini) gid=1005(adminis2) groups=1005(adminis2)
- 执行命令
- 验证用户admini无权限。
- 验证访问目录dir3权限。
- 执行命令
sudo su admini -c 'ls dir3' - 如果返回如下信息,则表示用户admini无权限访问dir3目录。
ls: cannot open directory 'dir3': Permission denied
- 执行命令
- 验证查看dir3/file文件权限。
- 执行命令
sudo su admini -c 'cat dir3/file' - 如果返回如下信息,则表示用户admini无权限查看dir3/file文件的内容。
cat: dir3/file: Permission denied
- 执行命令
- 验证更改dir3/file的ACL权限。
- 执行命令
sudo su admini -c 'export EDITOR=/usr/bin/vim;/usr/lpp/mmfs/bin/mmeditacl dir3/file' - 如果返回以下信息,则表示用户admini无执行权限。
dir3/file: Permission denied tsgetacl: Cannot open dir3/file mmeditacl: Failure reading ACL (rc=13)
- 执行命令
- 验证访问目录dir3权限。
该文章对您有帮助吗?