本文介紹在使用NFSv4協議掛載的檔案系統上,如何設定NFSv4 ACL來進行檔案或目錄許可權管理。
前提條件
已使用NFSv4協議掛載檔案系統。具體操作,請參見掛載NFS檔案系統。
已開啟檔案系統的 NFS ACL 功能。開啟方式:在 NAS 控制台進入檔案系統詳情頁,在左側導覽列單擊存取控制,然後開啟 NFS ACL 開關。
背景資訊
您可以使用NFSv4協議掛載檔案系統,並在已掛載檔案系統的機器上安裝符合Linux標準的nfs4-acl-tools軟體。安裝完成後,通過標準工具nfs4_getfacl和nfs4_setfacl設定NFSv4 ACL。
命令說明
在設定NFSv4 ACL前,請先熟悉相關操作命令。
|
命令 |
說明 |
|
|
查看檔案當前的ACL許可權。 |
|
|
給GROUP設定寫入權限。 |
|
|
給使用者1000設定寫入權限。 |
|
|
給使用者組10001設定寫入權限。 |
|
|
互動式編輯設定ACL許可權。 |
|
|
將檔案當前的ACL許可權儲存為一個文字檔。 |
|
|
恢複儲存到文字檔裡的ACL許可權。 |
|
|
修改檔案file1上的其中一條ACE的許可權。 |
|
|
將檔案file1的ACL許可權複製到檔案file2上。 |
|
|
刪除檔案file1上所有非保留的ACE。 |
|
|
對分類樹dir下所有檔案和目錄,增加使用者組10001可以讀寫訪問的許可權。 |
|
|
刪除分類樹dir下所有檔案中包含1005的ACE。 |
|
|
讓使用者組10001對目錄dir1下新建立的檔案和目錄有讀寫權限。 |
|
|
讓使用者組10001對目錄dir1下新建立的檔案有讀和執行許可權。 |
操作步驟
您可以參考以下步驟,為目錄或檔案設定NFSv4 ACL實現許可權管理。
-
建立使用者和群組。
本文假設建立普通使用者player,屬於普通使用者群組players;管理員admini,屬於管理員群組adminis;另外再建立一個使用者anonym。
sudo useradd player sudo groupadd players sudo usermod -g players player sudo useradd admini sudo groupadd adminis sudo usermod -g adminis admini sudo useradd anonym -
安裝NFSv4 ACL工具。
如果已安裝NFSv4 ACL工具,請跳過此步驟。
# CentOS/RHEL/Alibaba Cloud Linux sudo yum -y install nfs4-acl-tools # Ubuntu/Debian sudo apt-get -y install nfs4-acl-tools -
擷取使用者群組players和adminis的id。
開啟/etc/group檔案,擷取使用者群組players和adminis的id,如下所示。
players:x:19064:player adminis:x:19065:admini -
對目錄和檔案設定NFSv4 ACL。
本文假設建立目錄dir0,針對目錄dir0中的所有檔案,授予群組players唯讀許可權,授予群組adminis讀寫執行許可權,不授予其他使用者權限。
sudo umask 777 sudo mkdir dir0 sudo nfs4_setfacl -a A:fdg:19064:RX dir0 sudo nfs4_setfacl -a A:fdg:19065:RWX dir0 sudo nfs4_setfacl -a A:fdg:OWNER@: dir0 sudo nfs4_setfacl -a A:fdg:GROUP@: dir0 sudo nfs4_setfacl -a A:fdg:EVERYONE@: dir0設定完成後,可執行
sudo nfs4_getfacl dir0查看設定結果。A::OWNER@:tTnNcCy A::GROUP@:tncy A::EVERYONE@:tncy A:fdi:EVERYONE@:tncy A:fdi:OWNER@:tTnNcCy A:fdi:GROUP@:tncy A:g:19064:rxtncy A:g:19065:rwaDxtTnNcCy A:fdig:19064:rxtncy A:fdig:19065:rwaDxtTnNcCy -
驗證ACL的設定結果。
-
驗證使用者admini具有讀寫權限。
sudo su admini -c 'touch dir0/file'sudo su admini -c 'echo 123 > dir0/file' -
驗證使用者player具有隻讀許可權。
-
驗證是否有建立檔案的許可權(例如,建立dir0/file檔案)。
-
執行命令
sudo su player -c 'touch dir0/file' -
如果返回如下資訊,則表示使用者player無許可權建立檔案。
touch: cannot touch ‘dir0/file’: Permission denied
-
-
驗證是否有寫入權限(例如,向dir0/file檔案中寫入內容)。
-
執行命令
sudo su player -c 'echo 456 >> dir0/file' -
如果返回如下資訊,則表示使用者player無寫入權限。
bash: dir0/file: Permission denied
-
-
驗證是否有讀許可權。
-
執行命令
sudo su player -c 'cat dir0/file' -
如果返回如下資訊,則表示使用者player有讀許可權。
123
您還可以通過執行
sudo su player -c 'nfs4_getfacl dir0/file'命令,查看使用者player對dir0/file檔案的許可權。A::OWNER@:tTnNcCy A::GROUP@:tncy A::EVERYONE@:tncy A:g:19064:rxtncy A:g:19065:rwaxtTnNcCy -
-
-
驗證使用者anonym無許可權。
-
驗證無許可權查看dir0目錄下的檔案。
-
執行命令
sudo su anonym -c 'ls dir0' -
如果返回如下資訊,則表示使用者anonym無許可權訪問。
ls: cannot open directory dir0: Permission denied
-
-
驗證無許可權查看file檔案的內容。
-
執行命令
sudo su anonym -c 'cat dir0/file' -
如果返回如下資訊,則表示使用者 anonym 無許可權訪問 dir0 目錄下的 file 檔案(NFSv4 協議在缺少目錄搜尋許可權時返回此資訊)。
cat: dir0/file: No such file or directory
-
-
驗證無許可權訪問file檔案。
-
執行命令
sudo su anonym -c 'nfs4_getfacl dir0/file' -
如果返回如下資訊,則表示使用者anonym無許可權訪問file檔案。
Invalid filename: dir0/file
-
-
-
相關操作
如果您要移除使用者權限,可參見以下方法。
建議在使用NFSv4 ACL時,盡量把每個使用者歸類到群組中。在設定NFSv4 ACL時直接設定群組許可權而不用設定單個使用者的許可權。這樣在移除使用者權限時只需把使用者移出某個群組即可。例如:參見以下命令將使用者admini移出群組adminis,移入群組adminis2。
-
建立adminis2群組。
sudo groupadd adminis2 -
將使用者admini移出群組adminis,移入群組adminis2。
sudo usermod -g adminis2 admini -
查詢使用者ID許可權。
-
執行命令
id admini -
返回資訊
uid=1057(admini) gid=1057(admini) groups=1061(adminis2)
-
-
驗證使用者admini具備的許可權。
-
驗證無許可權訪問dir0目錄。
-
執行命令
sudo su admini -c 'ls dir0' -
如果返回以下資訊,則表示使用者admini無許可權訪問dir0目錄。
ls: cannot open directory dir0: Permission denied
-
-
驗證使用者admini無許可權查看dir0/file檔案的內容。
-
執行命令
sudo su admini -c 'cat dir0/file' -
如果返回以下資訊,表示使用者 admini 無許可權訪問 dir0 目錄下的 file 檔案(NFSv4 協議在缺少目錄搜尋許可權時返回此資訊)。
cat: dir0/file: No such file or directory
-
-
驗證使用者admini無許可權訪問dir0/file。
-
執行命令
sudo su admini -c 'nfs4_getfacl dir0/file' -
如果返回以下資訊,表示使用者 admini 無許可權訪問 dir0 目錄下的 file 檔案(NFSv4 協議在缺少目錄搜尋許可權時返回此資訊)。
Invalid filename: dir0/file
-
-