目錄和文件權限ACL用于定義用戶或用戶組被授予的訪問權限。本文介紹在使用CPFS-POSIX客戶端掛載的CPFS文件系統(tǒng)上,如何設置NFSv4 ACL來進行文件或目錄權限管理。

前提條件

已完成掛載CPFS文件系統(tǒng)。具體操作,請參見快速入門(CPFS-POSIX)
說明 CPFS-NFS協(xié)議服務僅支持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實現(xiàn)權限管理。

  1. 創(chuàng)建用戶和群組。

    本文假設創(chuàng)建普通用戶player,屬于普通用戶群組players;管理員admini,屬于管理員群組adminis;另外再創(chuàng)建一個用戶anonym。

    1. 創(chuàng)建普通用戶player并加入用戶群組players。
      sudo useradd player
      sudo groupadd players
      sudo usermod -g players player
    2. 創(chuàng)建管理員admini并加入管理員群組adminis。
      sudo useradd admini
      sudo groupadd adminis
      sudo usermod -g adminis admini
    3. 創(chuàng)建用戶anonym。
      sudo useradd anonym
  2. 獲取用戶群組playersadminisID。

    打開/etc/group文件,獲取用戶群組playersadminisID,如下所示。

    players:x:1001:
    adminis:x:1003:
  3. 對目錄和文件設置NFSv4 ACL。

    本文假設創(chuàng)建目錄dir3,針對目錄dir3中的所有文件,授予群組players只讀權限,授予群組adminis讀寫執(zhí)行權限,不授予其他用戶權限。

    1. 創(chuàng)建目錄dir3。
      mkdir dir3
    2. 配置規(guī)則并保存至文本文件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規(guī)則應用到目錄dir3。
      mmputacl -i ~/acl.txt dir3

驗證權限

您可以參考以下步驟,驗證ACL的設置結(jié)果。

  1. 驗證用戶admini具有讀寫權限。
    sudo su admini -c 'touch dir3/file'
    sudo su admini -c 'echo 123 > dir3/file'

    如未返回異常信息,則表示用戶admini具有讀寫權限。

  2. 驗證用戶player的只讀權限。
    1. 驗證player用戶是否有執(zhí)行權限。
      • 執(zhí)行命令
        sudo su player -c 'touch dir3/file'
      • 如果返回如下信息,則表示用戶player無執(zhí)行權限。
        touch: cannot touch 'dir3/file': Permission denied
    2. 驗證player用戶是否有寫權限。
      • 執(zhí)行命令
        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權限。
      • 執(zhí)行命令
        sudo su anonym -c 'ls dir3'
      • 如果返回如下信息,則表示用戶anonym無權限訪問dir3目錄。
        ls: cannot open directory 'dir3': Permission denied
    2. 驗證查看dir3/file文件權限。
      • 執(zhí)行命令
        sudo su anonym -c 'cat dir3/file'
      • 如果返回如下信息,則表示用戶anonym無權限查看dir3/file文件的內(nèi)容。
        cat: dir3/file: Permission denied
    3. 驗證更改dir3/fileACL權限。
      • 執(zhí)行命令
        sudo su anonym -c 'export EDITOR=/usr/bin/vim;/usr/lpp/mmfs/bin/mmeditacl dir3/file'
      • 如果返回以下信息,則表示用戶anonym無執(zhí)行權限。
        dir3/file: Permission denied
        tsgetacl: Cannot open dir3/file
        mmeditacl: Failure reading ACL (rc=13)

移除權限

如果您要移除用戶權限,可參見以下方法。例如:將用戶admini移入群組adminis2,并驗證用戶admini無權限。

  1. 創(chuàng)建adminis2群組。
    sudo groupadd adminis2
  2. 將用戶admini移入群組adminis2。
    sudo usermod -g adminis2 admini
  3. 查詢用戶ID權限。
    • 執(zhí)行命令
      id admini
    • 返回示例
      uid=1001(admini) gid=1005(adminis2) groups=1005(adminis2)
  4. 驗證用戶admini無權限。
    1. 驗證訪問目錄dir3權限。
      • 執(zhí)行命令
        sudo su admini -c 'ls dir3'
      • 如果返回如下信息,則表示用戶admini無權限訪問dir3目錄。
        ls: cannot open directory 'dir3': Permission denied
    2. 驗證查看dir3/file文件權限。
      • 執(zhí)行命令
        sudo su admini -c 'cat dir3/file'
      • 如果返回如下信息,則表示用戶admini無權限查看dir3/file文件的內(nèi)容。
        cat: dir3/file: Permission denied
    3. 驗證更改dir3/fileACL權限。
      • 執(zhí)行命令
        sudo su admini -c 'export EDITOR=/usr/bin/vim;/usr/lpp/mmfs/bin/mmeditacl dir3/file'
      • 如果返回以下信息,則表示用戶admini無執(zhí)行權限。
        dir3/file: Permission denied
        tsgetacl: Cannot open dir3/file
        mmeditacl: Failure reading ACL (rc=13)