Linux權限管理之ACL權限

ACL 是什麼
ACL的全稱是 Access Control List (訪問控制列表) ,一個針對文件/目錄的訪問控制列表。它在UGO權限(屬主,屬組,其他人)管理的基礎上爲文件系統提供一個額外的、更靈活的權限管理機制。它被設計爲UNIX文件權限管理的一個補充。ACL允許你給任何的用戶或用戶組設置任何文件/目錄的訪問權限。


ACL有什麼用
既然是作爲UGO權限管理的補充,ACL自然要有UGO辦不到或者很難辦到的本事,例如:

可以針對特定用戶來設置權限
可以針對特定用戶組來設置權限
子文件/目錄繼承父目錄的權限

最主要的是當我們的某個目錄或文件對其他人設置的權限是---但是某個用戶又需要查看裏面的內容,這個用戶即不是這個文件或目錄的擁有者或擁有組中的用戶,他只屬於
其他用戶,其他用戶還對這個文件沒有任何權限,這時候我們就可以用ACL來設置。

一、檢查Linux是否支持ACL
ACL需要Linux內核和文件系統的配合才能工作,當前我們能見到的大多數Linux發行版本默認都是支持的。但最好還是能夠先檢查一下:

sudo tune2fs -l /dev/sda1 |grep "Default mount options:"
Default mount options: user_xattr acl
我們能夠看到默認情況下(Default mount options:)已經加入 acl 支持了。

二、如何設置ACL
我們可以使用setfacl和getfacl命令來設置或查看文件/目錄的acl權限。 

用法:

setfacl [參數] 文件/目錄名

參數

-m :配置後面的 acl 參數給文件/目錄使用,不可與 -x 合用;
-x :刪除後續的 acl 參數,不可與 -m 合用;
-b :移除所有的 ACL 配置參數;
-k :移除默認的 ACL 參數;
-R :遞歸配置 acl;
-d :配置“默認 acl 參數”,只對目錄有效,在該目錄新建的數據會引用此默認值;

給用戶設定 ACL 權限:setfacl -m u:用戶名:權限 指定文件名
給用戶組設定 ACL 權限:setfacl -m g:組名:權限 指定文件名

查看文件/目錄的acl權限

用法:

getfacl 文件/目錄名

三、下面我們通過一些示例來演示 ACL 權限的基本用法。

針對用戶來設置權限

1、假設pi1用戶創建了一個文件ii權限如下
-----------------------------------------------
[root@CentOS7 home]# ll ii
-rw-r-----. 1 pi1 pi1 14 7月 16 13:55 ii #其他用戶沒有任何權限
[root@CentOS7 home]#
-----------------------------------------------

2、爲用戶pi2添加讀寫權限,pi2對於ii文件屬於其他用戶
-----------------------------------------------
[pi1@CentOS7 home]$ setfacl -m u:pi2:rw ii #root或文件擁有者可以通過setfacl命令來添加權限
-----------------------------------------------

3、再次查看ii權限
-----------------------------------------------
[root@CentOS7 home]# ll ii
-rw-r-x---+ 1 pi1 pi1 14 7月 16 13:55 ii #可以看到權限部分多了個+
[root@CentOS7 home]#
-----------------------------------------------

4、查看ii文件的ACL 權限
-----------------------------------------------
[root@CentOS7 home]# getfacl ii
# file: ii #說明文件
# owner: pi1 #ii文件的擁有着
# group: pi1 #ii文件的擁有組
user::rw- #使用者列表欄爲空,代表文件擁有着的權限
user:pi2:rw- #針對pi2的權限設置爲rx,與擁有者不同
group::r-- #針對文件擁有組的權限設定僅有r
mask::rw- #此文件預設的有效權限(mask)
other::--- #其他人擁有的權限

[root@CentOS7 home]#
-----------------------------------------------

5、爲用戶組pi2添加讀寫權限,pi2對於ii文件屬於其他用戶
-----------------------------------------------
[root@CentOS7 home]# setfacl -m g:pi2:rw ii
-----------------------------------------------

6、查看ii文件的ACL 權限
-----------------------------------------------
[root@CentOS7 home]# getfacl ii
# file: ii
# owner: pi1
# group: pi1
user::rw-
user:pi2:rw-
group::r--
group:pi2:rw- #多了一個pi2組的權限
mask::rw-
other::---

[root@CentOS7 home]#
-----------------------------------------------

 

四、最大有效權限 mask


我們給用戶或用戶組設定 ACL 權限其實並不是真正我們可用的權限,是與 mask 的權限“相與”之後的權限纔是用戶的真正可用的權限,這是什麼意思那就是當你爲pi1這個用戶設置了rwx的權限,但是mask的權限是r--那麼ip1用戶實際得到的權限就只有r,一般默認mask權限都是與你ACL添加的權限一樣的,所以你設定了什麼權限用戶就具有什麼權限。

舉例:改變mask權限
-----------------------------------------------
[root@CentOS7 home]# setfacl -m m:r ii #設置mask只有r權限
[root@CentOS7 home]# getfacl ii
# file: ii
# owner: pi1
# group: pi1
user::rw-
user:pi2:rw- #effective:r-- #系統提示有效的權限爲r
group::r--
group:pi2:rw- #effective:r--
mask::r--
other::---
-----------------------------------------------

五、遞歸 ACL 權限

通過加上選項 -R 遞歸設定文件的 ACL 權限,所有的子目錄和子文件也會擁有相同的 ACL 權限。

setfacl -m u:用戶名:權限 -R 文件名

六、默認 ACL 權限

如果給父目錄設定了默認的 ACL 權限,那麼父目錄中所有新建的子文件會繼承父目錄的 ACL 權限。

setfacl -m d:u:用戶名:權限 文件名


七、刪除 ACL 權限

1、刪除指定用戶的 ACL 權限

setfacl -x u:用戶名 文件名

2、刪除指定用戶組的 ACL 權限

setfacl -x g:組名 文件名

3、刪除文件的所有 ACL 權限

setfacl -b 文件名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章