本文介紹在使用NFS v3協議掛載的檔案系統上,如何設定POSIX ACL來進行檔案和目錄許可權管理。
前提條件
已使用NFS v3協議掛載檔案系統。具體操作,請參見掛載NFS協議檔案系統。
命令說明
在設定POSIX ACL前,請先熟悉相關操作命令。
命令 | 說明 |
getfacl <filename> | 查看檔案當前的ACL。 |
setfacl -m g::w <filename> | 給GROUP設定寫入權限。 |
setfacl -m u:player:w <filename> | 給使用者player設定寫入權限。 |
setfacl -m g:players:rwx <filename> | 給使用者組players設定讀寫執行許可權。 |
setfacl -x g:players <filename> | 刪除使用者組players的許可權。 |
getfacl file1 | setfacl --set-file=- file2 | 將檔案file1的ACL複製到檔案file2上。 |
setfacl -b file1 | 刪除檔案file1上的所有非mode的ACE。 |
setfacl -k file1 | 刪除檔案file1上的所有default的ACE。 |
setfacl -R -m g:players:rw dir | 對分類樹dir下的檔案和目錄增加使用者組players讀寫的許可權。 |
setfacl -d -m g:players:rw dir1 | 使用者組players對目錄dir1下新建立的檔案和目錄都有讀寫權限。 |
操作步驟
您可以參考以下步驟,為目錄或檔案設定NFS 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
對目錄和檔案設定POSIX ACL實現許可權管理。
本樣本假設建立目錄dir0,針對目錄dir0中的所有檔案,授予players唯讀許可權,授予adminis讀寫執行許可權,不授予其他使用者權限。
sudo umask 777 sudo mkdir dir0 sudo setfacl -m g:players:r-x dir0 sudo setfacl -m g:adminis:rwx dir0 sudo setfacl -m u::--- dir0 sudo setfacl -m g::--x dir0 sudo setfacl -m o::--- dir0 sudo setfacl -d -m g:players:r-x dir0 sudo setfacl -d -m g:adminis:rwx dir0 sudo setfacl -d -m u::--- dir0 sudo setfacl -d -m g::--x dir0 sudo setfacl -d -m o::--- dir0
設定完成後,可執行
sudo getfacl dir0
查看設定結果。# file: dir0 # owner: root # group: root user::--- group::--x group:players:r-x group:adminis:rwx mask::rwx other::--- default:user::--- default:group::--x default:group:players:r-x default:group:adminis:rwx default:mask::rwx default:other::---
驗證ACL設定結果。
驗證使用者admini具有讀寫權限。
sudo su admini -c 'touch dir0/file'
sudo su admini -c 'echo 123 > dir0/file'
驗證使用者player具有隻讀許可權。
驗證無建立file檔案的許可權。
例如,在dir0目錄下建立file檔案。
執行命令
sudo su player -c 'touch dir0/file'
如果返回如下類似資訊,則表示使用者player無建立file檔案的許可權。
touch: cannot touch ‘dir0/file’: Permission denied
驗證查看dir0/file檔案內容。
執行命令
sudo su player -c 'cat dir0/file'
如果返回如下資訊,則表示使用者player具有查看dir0/file檔案內容的許可權。
123
驗證寫入權限。
執行命令
sudo su player -c 'echo 456 >> dir0/file'
如果返回如下資訊,則表示使用者player無寫入權限。
bash: dir0/file: Permission denied
您還可以通過執行
sudo su player -c 'getfacl dir0/file'
命令,查看使用者player對dir0/file的許可權。# file: dir0/file # owner: admini # group: adminis user::--- group::--- group:players:r-x group:adminis:rwx mask::rwx other::---
驗證使用者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無許可權查看file檔案的內容。
cat: dir0/file: Permission denied
驗證無許可權訪問file檔案。
執行命令
sudo su anonym -c 'getfacl dir0/file'
如果返回如下資訊,則表示使用者anonym無許可權訪問file檔案。
getfacl: dir0/file: Permission denied
相關操作
如果您要移除使用者權限,可參見以下方法。
建議在使用NFS v4 ACL時,盡量把每個使用者歸類到群組中。在設定NFS v4 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檔案的內容。
cat: dir0/file: Permission denied
驗證使用者admini無許可權訪問dir0/file。
執行命令
sudo su admini -c 'getfacl dir0/file'
如果返回以下資訊,表示使用者admini無許可權訪問dir0/file。
getfacl: dir0/file: Permission denied