請關注本頭條號,每天堅持更新原創乾貨技術文章。
如需學習視頻,請在微信搜索公眾號「智傳網優」直接開始自助視頻學習
1. 前言
本文主要講解Linux acl訪問控制權限的原理以及日常使用方法。是Linux系統管理中的一個重要安全工具及策略設置,運維人員必須掌握好。
2. Linux acl權限控制的原理
我們知道 Linux 的權限控制是非常重要的,傳統的權限僅有三種身份 (owner, group, others) ,即文件或者目錄擁有者權限、擁有者同組成員的權限、其它用戶的權限,搭配三種權限 (r,w,x),即可讀、可寫、可執行而已,這些權限可以通過 chmod、 chown 等命令來修改。然而並沒有辦法單純的針對某一個使用者或某一個群組來設置特定的權限需求。此時就得要使用 ACL 這個工具了。
比如有個名為zcwyou的用戶,他想要修改 nginx.conf 這個配置文件,然而這個文件是歸root 用戶所有,這樣怎樣為單個用戶做特定授權呢? 為了解決這種情況,訪問控制列表Access Control List(ACL)誕生了。
ACL 是 Access Control List 的縮寫,主要的目的是在提供傳統的 owner,group,others 的 read,write,execute 權限之外的細部權限設置。ACL 可以針對單一使用者,單一文件或目錄來進行 r,w,x 的權限規範,對於需要特殊權限的使用狀況非常有幫助。它為文件系統提供了附加的、更具有彈性的權限機制。 它被設計來為補充 UNIX 文件權限機制。 ACL 允許你賦予任何某用戶/組訪問某項資源的權限。 setfacl 與 getfacl 命令會幫助你管理 ACL 而不會有任何麻煩。
那ACL工具主要支持以下對象設置安全權限:
使用者 (user):可以針對使用者來設置權限;
群組 (group):針對群組為對象來設置其權限;
默認屬性 (mask):還可以針對在該目錄下在創建新文件/目錄時,規範新數據的默認權限;
也就是說,如果你有一個目錄,需要給一堆人使用,每個人或每個群組所需要的權限並不相同時,在過去,傳統的 Linux 三種身份的三種權限是無法達到的, 因為基本上,傳統的 Linux 權限只能針對一個用戶、一個群組及非此群組的其他人設置權限而已,無法針對單一用戶或個人來設計權限。 而 ACL 就是為了要改變這個問題啊!好了,稍微了解之後,再來看看如何讓你的文件系統可以支持 ACL 吧!
3. Linux acl權限控制的工具集
查看Linux acl權限工具是否有安裝,一般情況下,系統都是默認安裝的。
[root@zcwyou ~]# rpm -qa |grep acl
查看linux acl工具包
如果沒有安裝,使用以下命令安裝它:
[root@zcwyou ~]# yum -y install acl
- setfacl用於設置文件和目錄的 ACL。
- getfacl - 獲取文件的 ACL 。對於每個文件, getfacl 都會顯示文件名、文件所有者、所屬組以及ACL。 如果目錄有默認 ACL, getfacl 也會顯示這個默認的 ACL。
4. Linux acl權限控制工具的使用
運行 tune2fs 命令來檢查是否啟用了 ACL。
[root@zcwyou ~]# tune2fs -l /dev/sdb1 | grep options
顯示如下
Default mount options: (none)
上面的輸出很明顯第說明 /dev/sdb1 分區沒有啟用 ACL。
如果結果中沒有列出 acl,則你需要在掛載選項中加上 acl。 為了讓它永久生效, 修改 /etc/fstab 中 /app 這一行成這樣:
[root@zcwyou ~]# vi /etc/fstab
開機默認為分區開啟linux acl
修改為以下這行,
/dev/sdb1 /app ext4 defaults,acl 1 1
當然,你也可以使用下面命令將其添加道文件系統的超級塊中:
[root@zcwyou ~]# tune2fs -o +acl /dev/sdb1
然後,通過運行以下命令來動態修改選項:
[root@zcwyou ~]# mount -o remount,acl /app
再次運行tune2fs看看是否開啟了acl
[root@zcwyou ~]# tune2fs -l /dev/sdb1 | grep options
輸出。
Default mount options: acl
CentOS 7默認已經啟用acl,可以直接使用。
5. 如何查看默認acl的設置
[root@zcwyou ~]# getfacl /etc/passwd
getfacl: Removing leading '/' from absolute path names
file: etc/passwd
owner: root
group: root
user::rw-
group::r--
other::r--
查看默認acl的設置
6. 如何為文件設置acl屬性
以下面格式運行 setfacl 命令可以為指定文件設置 ACL。在下面的例子中,我們會給 zcwyou用戶對 /etc/samba/smb.conf文件 rwx 的權限。
[root@zcwyou ~]# setfacl -m u:zcwyou:rwx /etc/samba/smb.conf
為文件設置acl屬性
setfacl命令部分參數
-m: 修改文件的當前 ACL
u: 指明用戶
magi: 用戶名
rwx: 要設置的權限
/etc/samba/smb.conf: 指定的文件或者目錄
通過ls命令也可以查看這個文件的特殊權限,注意一下圖中的+號。
查看文件acl屬性
7. 如何為目錄設置acl屬性
以下面格式運行 setfacl 命令可以遞歸地為指定目錄設置 ACL。在下面的例子中,我們會將 /etc/samba/ 目錄中的 rwx 權限賦予zcwyou用戶。
首先先查看當前情況,如下圖
為目錄設置acl屬性
可以看到上圖中,只有smb.conf一個文件有+號。
執行以下命令:
[root@zcwyou ~]# setfacl -Rm u:zcwyou:rwx /etc/samba/
-R: 表示把設置遞歸到子目錄中
再次檢查:
檢查目錄acl屬性
可以看出,所有文件都被設置了acl權限。
使用getacl查看目錄
[root@zcwyou ~]# getfacl /etc/samba/
getfacl: Removing leading '/' from absolute path names
file: etc/samba/
owner: root
group: root
user::rwx
user:zcwyou:rwx
group::r-x
mask::rwx
other::r-x
使用getacl命令檢查目錄acl屬性
8. 為組用戶設置acl
以下面格式為指定文件運行 setfacl 命令。在下面的例子中,我們會給 zcwyou組賦予 /etc/samba/smb.conf 文件的 rwx 權限。
[root@zcwyou ~]# setfacl -m g:zcwyou:rwx /etc/samba/smb.conf
為組用戶設置acl屬性
g: 表示為一個組設置acl屬性
如果對多個用戶和組授權,只需要用 逗號 區分開,就像下面這樣。
[root@zcwyou ~]# setfacl -m u:user1:rwx,g:group2:rwx /etc/samba/smb.conf
9. 刪除acl
以下面格式運行 setfacl 命令會刪除文件對指定用戶的 ACL。這只會刪除用戶權限而保留 mask 的值為只讀。
[root@zcwyou ~]# setfacl -x u:magi /etc/samba/smb.conf
選項-x: 表示從文件的 ACL 中刪除acl屬性
使用 選項-b 來刪除文件中所有的 ACL,例如:
[root@zcwyou ~]# setfacl -b /etc/samba/smb.conf
選項-b: 表示刪除所有的 ACL 條目所有的屬性
再次查看刪掉後的 ACl 值就會發現所有的東西都不見了,包括 mask 的值也不見了。
10. acl最大權限mask
10.1 最大有效權限mask
mask是用來指定最大有效權限的(使用命令getfacl 文件名顯示的結果中倒數第二排會出現mask這個詞)。如果給用戶賦予了acl權限,是需要和mask的權限「相與」才能得到用戶的真正權限。相與是計算機中的術語,皆真方為真,有假便為假。例如mask權限為rwx,某用戶的acl權限為r-x,則實際有效權限為r-x。
最大權限也會影響到組權限(例:某文件所有者為tony,chmod賦予的普通權限為7,而acl賦予tony的權限為5,則acl權限會高於chmod權限)
修改最大有效權限mask
修改mask的命令
setfacl -m m:權限 文件
11. 對acl的屬性進行備份和恢復
運行以下命令備份和還原 ACL 的值。要製作備份, 需要進入對應的目錄然後這樣做(假設我們要備份 sites-available 目錄中的 ACL 值)。
[root@zcwyou ~]# cd /etc/apache2/sites-available/
[root@zcwyou ~]# getfacl -R * > acl_backup_for_folder
運行下面命令進行還原acl屬性設置
[root@zcwyou ~]# setfacl --restore=/etc/apache2/sites-available/acl_backup_for_folder
12. 總結
Linux的ACL機制是對傳統的用戶、組、其他用戶權限安全機制的補充,結合傳統的權限機制,將極為靈活地根據特定用戶為Linux系統的文件或者目錄設置特定權限。它是Linux系統工程師必須掌握的系統工具。
本文已同步至博客站,尊重原創,轉載時請在正文中附帶以下連結:
https://www.linuxrumen.com/rmxx/649.html
點擊了解更多,快速查看更多的技術文章列表。