使用NFSv4 ACL進行權(quán)限管理
本文介紹在使用NFSv4協(xié)議掛載的文件系統(tǒng)上,如何設(shè)置NFSv4 ACL來進行文件或目錄權(quán)限管理。
前提條件
已使用NFSv4協(xié)議掛載文件系統(tǒng)。具體操作,請參見掛載NFS文件系統(tǒng)。
背景信息
您可以使用NFSv4協(xié)議掛載文件系統(tǒng),并在已掛載文件系統(tǒng)的機器上安裝符合Linux標準的nfs4-acl-tools軟件。安裝完成后,通過標準工具nfs4_getfacl和nfs4_setfacl設(shè)置NFSv4 ACL。
命令說明
在設(shè)置NFSv4 ACL前,請先熟悉相關(guān)操作命令。
命令 | 說明 |
| 查看文件當前的ACL權(quán)限。 |
| 給GROUP設(shè)置寫權(quán)限。 |
| 給用戶1000設(shè)置寫權(quán)限。 |
| 給用戶組10001設(shè)置寫權(quán)限。 |
| 交互式編輯設(shè)置ACL權(quán)限。 |
| 將文件當前的ACL權(quán)限保存為一個文本文件。 |
| 恢復(fù)保存到文本文件里的ACL權(quán)限。 |
| 修改文件file1上的其中一條ACE的權(quán)限。 |
| 將文件file1的ACL權(quán)限復(fù)制到文件file2上。 |
| 刪除文件file1上所有非保留的ACE。 |
| 對目錄樹dir下所有文件和目錄,增加用戶組10001可以讀寫訪問的權(quán)限。 |
| 刪除目錄樹dir下所有文件中包含1005的ACE。 |
| 讓用戶組10001對目錄dir1下新創(chuàng)建的文件和目錄有讀寫權(quán)限。 |
| 讓用戶組10001對目錄dir1下新創(chuàng)建的文件有讀和執(zhí)行權(quán)限。 |
操作步驟
您可以參考以下步驟,為目錄或文件設(shè)置NFSv4 ACL實現(xiàn)權(quán)限管理。
創(chuàng)建用戶和群組。
本文假設(shè)創(chuàng)建普通用戶player,屬于普通用戶群組players;管理員admini,屬于管理員群組adminis;另外再創(chuàng)建一個用戶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工具,請?zhí)^此步驟。
sudo yum -y install nfs4-acl-tools
獲取用戶群組players和adminis的id。
打開/etc/group文件,獲取用戶群組players和adminis的id,如下所示。
players:x:19064:player adminis:x:19065:admini
對目錄和文件設(shè)置NFSv4 ACL。
本文假設(shè)創(chuàng)建目錄dir0,針對目錄dir0中的所有文件,授予群組players只讀權(quán)限,授予群組adminis讀寫執(zhí)行權(quán)限,不授予其他用戶權(quán)限。
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
設(shè)置完成后,可執(zhí)行
sudo nfs4_getfacl dir0
查看設(shè)置結(jié)果。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的設(shè)置結(jié)果。
驗證用戶admini具有讀寫權(quán)限。
sudo su admini -c 'touch dir0/file'
sudo su admini -c 'echo 123 > dir0/file'
驗證用戶player具有只讀權(quán)限。
驗證是否有創(chuàng)建文件的權(quán)限(例如,創(chuàng)建dir0/file文件)。
執(zhí)行命令
sudo su player -c 'touch dir0/file'
如果返回如下信息,則表示用戶player無權(quán)限創(chuàng)建文件。
touch: cannot touch ‘dir0/file’: Permission denied
驗證是否有寫權(quán)限(例如,向dir0/file文件中寫入內(nèi)容)。
執(zhí)行命令
sudo su player -c 'echo 456 >> dir0/file'
如果返回如下信息,則表示用戶player無寫權(quán)限。
bash: dir0/file: Permission denied
驗證是否有讀權(quán)限。
執(zhí)行命令
sudo su player -c 'cat dir0/file'
如果返回如下信息,則表示用戶player有讀權(quán)限。
123
您還可以通過執(zhí)行
sudo su player -c 'nfs4_getfacl dir0/file'
命令,查看用戶player對dir0/file文件的權(quán)限。A::OWNER@:tTnNcCy A::GROUP@:tncy A::EVERYONE@:tncy A:g:19064:rxtncy A:g:19065:rwaxtTnNcCy
驗證用戶anonym無權(quán)限。
驗證無權(quán)限查看dir0目錄下的文件。
執(zhí)行命令
sudo su anonym -c 'ls dir0'
如果返回如下信息,則表示用戶anonym無權(quán)限訪問。
ls: cannot open directory dir0: Permission denied
驗證無權(quán)限查看file文件的內(nèi)容。
執(zhí)行命令
sudo su anonym -c 'cat dir0/file'
如果返回如下信息,則表示用戶anonym無權(quán)限查看file文件的內(nèi)容。
cat: dir0/file: Permission denied
驗證無權(quán)限訪問file文件。
執(zhí)行命令
sudo su anonym -c 'nfs4_getfacl dir0/file'
如果返回如下信息,則表示用戶anonym無權(quán)限訪問file文件。
Invalid filename: dir0/file
相關(guān)操作
如果您要移除用戶權(quán)限,可參見以下方法。
建議在使用NFSv4 ACL時,盡量把每個用戶歸類到群組中。在設(shè)置NFSv4 ACL時直接設(shè)置群組權(quán)限而不用設(shè)置單個用戶的權(quán)限。這樣在移除用戶權(quán)限時只需把用戶移出某個群組即可。例如:參見以下命令將用戶admini移出群組adminis,移入群組adminis2。
創(chuàng)建adminis2群組。
sudo groupadd adminis2
將用戶admini移出群組adminis,移入群組adminis2。
sudo usermod -g adminis2 admini
查詢用戶ID權(quán)限。
執(zhí)行命令
id admini
返回信息
uid=1057(admini) gid=1057(admini) groups=1061(adminis2)
驗證用戶admini具備的權(quán)限。
驗證無權(quán)限訪問dir0目錄。
執(zhí)行命令
sudo su admini -c 'ls dir0'
如果返回以下信息,則表示用戶admini無權(quán)限訪問dir0目錄。
ls: cannot open directory dir0: Permission denied
驗證用戶admini無權(quán)限查看dir0/file文件的內(nèi)容。
執(zhí)行命令
sudo su admini -c 'cat dir0/file'
如果返回以下信息,表示用戶admini無權(quán)限查看dir0/file文件的內(nèi)容。
cat: dir0/file: Permission denied
驗證用戶admini無權(quán)限訪問dir0/file。
執(zhí)行命令
sudo su admini -c 'getfacl dir0/file'
如果返回以下信息,表示用戶admini無權(quán)限訪問dir0/file。
getfacl: dir0/file: Permission denied