目录和文件权限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实现权限管理。

  1. 创建用户和群组。

    本文假设创建普通用户player,属于普通用户群组players;管理员admini,属于管理员群组adminis;另外再创建一个用户anonym。

    1. 创建普通用户player并加入用户群组players。
      sudo useradd player
      sudo groupadd players
      sudo usermod -g players player
    2. 创建管理员admini并加入管理员群组adminis。
      sudo useradd admini
      sudo groupadd adminis
      sudo usermod -g adminis admini
    3. 创建用户anonym。
      sudo useradd anonym
  2. 获取用户群组playersadminisID。

    打开/etc/group文件,获取用户群组playersadminisID,如下所示。

    players:x:1001:
    adminis:x:1003:
  3. 对目录和文件设置NFSv4 ACL。

    本文假设创建目录dir3,针对目录dir3中的所有文件,授予群组players只读权限,授予群组adminis读写执行权限,不授予其他用户权限。

    1. 创建目录dir3。
      mkdir dir3
    2. 配置规则并保存至文本文件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
    3. ACL规则应用到目录dir3。
      mmputacl -i ~/acl.txt dir3

验证权限

您可以参考以下步骤,验证ACL的设置结果。

  1. 验证用户admini具有读写权限。
    sudo su admini -c 'touch dir3/file'
    sudo su admini -c 'echo 123 > dir3/file'

    如未返回异常信息,则表示用户admini具有读写权限。

  2. 验证用户player的只读权限。
    1. 验证player用户是否有执行权限。
      • 执行命令
        sudo su player -c 'touch dir3/file'
      • 如果返回如下信息,则表示用户player无执行权限。
        touch: cannot touch 'dir3/file': Permission denied
    2. 验证player用户是否有写权限。
      • 执行命令
        sudo su player -c 'echo 456 >> dir3/file'
      • 如果返回如下信息,则表示用户playerdir3/file无写权限。
        bash: dir3/file: Permission denied
    3. 验证player用户是否有编辑dir3/fileACL的权限。
      1. 修改dir3/fileACL权限。
        sudo su player -c 'export EDITOR=/usr/bin/vim;/usr/lpp/mmfs/bin/mmeditacl dir3/file'
      2. 输入yes应用修改后的ACL权限。
        mmeditacl: Should the modified ACL be applied? (yes) or (no)
        若返回如下信息,则表示用户player无编辑dir3/fileACL的权限。
        tsputacl: Authorization failure
  3. 验证用户anonym无权限。
    1. 验证访问目录dir3权限。
      • 执行命令
        sudo su anonym -c 'ls dir3'
      • 如果返回如下信息,则表示用户anonym无权限访问dir3目录。
        ls: cannot open directory 'dir3': Permission denied
    2. 验证查看dir3/file文件权限。
      • 执行命令
        sudo su anonym -c 'cat dir3/file'
      • 如果返回如下信息,则表示用户anonym无权限查看dir3/file文件的内容。
        cat: dir3/file: Permission denied
    3. 验证更改dir3/fileACL权限。
      • 执行命令
        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)

移除权限

如果您要移除用户权限,可参见以下方法。例如:将用户admini移入群组adminis2,并验证用户admini无权限。

  1. 创建adminis2群组。
    sudo groupadd adminis2
  2. 将用户admini移入群组adminis2。
    sudo usermod -g adminis2 admini
  3. 查询用户ID权限。
    • 执行命令
      id admini
    • 返回示例
      uid=1001(admini) gid=1005(adminis2) groups=1005(adminis2)
  4. 验证用户admini无权限。
    1. 验证访问目录dir3权限。
      • 执行命令
        sudo su admini -c 'ls dir3'
      • 如果返回如下信息,则表示用户admini无权限访问dir3目录。
        ls: cannot open directory 'dir3': Permission denied
    2. 验证查看dir3/file文件权限。
      • 执行命令
        sudo su admini -c 'cat dir3/file'
      • 如果返回如下信息,则表示用户admini无权限查看dir3/file文件的内容。
        cat: dir3/file: Permission denied
    3. 验证更改dir3/fileACL权限。
      • 执行命令
        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)