1、設置ACL權限
命令格式:setfacl [選項] 文件名;
選項說明:
- -m:設定ACL權限;
- -x:刪除指定的ACL權限;
- -b:刪除所有的ACL權限;
- -d:設定默認的ACL權限;
- -k:刪除默認ACL權限;
- -R:遞歸設定ACL權限;
我們以上一小節中的舉例說明:
整個過程如下:
(1)創建兩個用戶codea、codeb,作為團隊開發人員;
(2)創建學習用戶learnc;
(3)創建開發團隊devgroup;
(4)創建項目目錄/project;
(5)將項目目錄的所有者變更為root,所屬組變更為devgroup;
(6)將項目目錄權限設置為rwxrwx---(770);
(7)使用ACL方式給用戶賦予r-x權限;
(8)創建學習團隊learngroup;
(9)使用ACL方式給團隊learngroup賦予r-x權限;
[root@VM-0-8-centos ~]# useradd codea
[root@VM-0-8-centos ~]# useradd codeb
[root@VM-0-8-centos ~]# useradd learnc
[root@VM-0-8-centos ~]# groupadd devgroup
[root@VM-0-8-centos ~]# mkdir /project
[root@VM-0-8-centos ~]# chown root:devgroup /project/
[root@VM-0-8-centos ~]# chmod -R 770 /project/
[root@VM-0-8-centos ~]# setfacl -m u:learnc:rx /project
[root@VM-0-8-centos ~]# groupadd learngroup
[root@VM-0-8-centos ~]# setfacl -m g:learngroup:rx /project/
說明:
(1)為用戶分配權限,使用 u:用戶名:權限 格式。
(2)為組分配權限,使用 g:組名:權限 格式。
2、查看ACL權限
命令格式:getfacl 文件名;
執行命令,查看/project目錄的ACL權限:
getfacl /project/
分別查看未設置ACL權限和設置ACL權限的文件,查看結果如下圖所示:
同時查看/project和/project2目錄文件,如下圖所示:
設置了ACL權限的文件夾比未設置的多了一個+號。
3、ACL最大有效權限
mask是用來指定最大有效權限的。
如果給某用戶賦予了ACL權限,需要和mask權限進行“與”計算后,才能得到用戶的真正權限。
此舉是為了防止給用戶或者用戶組的權限過高,提前設定,做到權限的雙重保證。
與計算邏輯,舉例說明:
A | B | 與計算 |
---|---|---|
r | r | r |
r | - | - |
- | r | - |
- | - | - |
命令格式:setfacl -m m:權限 文件名;
setfacl -m m:rx /project
更改完mask最大權限以后,查看/project目錄的ACL權限,如下圖所示:
圖中紅框標注的信息表示:雖然group組的權限設置的是rwx,但是真正有效的權限是r-x。mask最大有效權限不影響所有者權限。
4、刪除ACL權限
4.1、刪除指定用戶的ACL權限
命令格式:setfacl -x u:用戶名 文件名;
執行命令,刪除用戶learnc的ACL權限:
setfacl -x u:learnc /project
整個直接過程如下圖所示:
在刪除命令執行前有user:learnc:r-x選項,執行后再次查看learnc的ACL權限消失。而且,此時設置的mask權限也恢復成rwx。
4.2、刪除指定用戶組的ACL權限
命令格式:setfacl -x g:組名 文件名;
執行命令,刪除learngroup組的ACL權限:
setfacl -x g:learngroup /project
整個直接過程如下圖所示:
4.3、刪除文件所有的ACL權限
命令格式:setfacl -b 文件名;
在4.2章節中,我們將用戶learnc和用戶組learngroup的ACL權限給刪除了。現在我們重新添加上,并且查看/project目錄的ACL權限。如下圖所示:
執行命令刪除/project目錄的所有的ACL權限:
setfacl -b /project
再次查看如下圖所示:
5、遞歸設置ACL權限
遞歸是父目錄在設定ACL權限時,所有的子文件、子目錄以及子目錄中的子文件也會擁有相同的ACL權限。
命令格式:setfacl -m u:用戶名:權限 -R 目錄名;
注意:-R選項必須放在后面才行,不能放在-m之前否則會報錯!!!
執行命令,遞歸設置learnc用戶/project目錄的權限為rx:
setfacl -m u:learnc:rx -R /project
執行命令之前查看/project目錄沒有任何ACL權限,執行命令后再次查看,發現/project/china目錄learnc用戶都有了rx權限。
整個過程如下圖所示:
6、設置默認ACL權限
默認ACL權限的作用是如果給父目錄設定默認ACL權限,那么父目錄中所有新建的子文件和子目錄都會繼承父目錄的ACL權限;
命令格式:setfacl -m d:u:用戶名:權限 目錄名;
說明:可以在此命令后面加-R來進行遞歸,達到一條命令同時設置ACL默認權限和設置遞歸;
在/project/china目錄下面新建文件shanxi,查看文件的ACL權限,如下圖所示:
發現此時新創建的文件沒有ACL權限。
執行命令為/project/china文件設置默認ACL權限:
setfacl -m d:u:learnc:rx /project/china/
在/project/china目錄下面創建文件neimenggu,然后查看neimenggu文件對應的ACL權限,如下圖所示: