本篇部落格我們介紹了權限管理的ACL權限,通過設定 ACL 權限,我們為某個使用者指定某個檔案的特定權限,在實際權限管理中還是用的比較多的。
通過前面的兩篇部落格我們介紹了Linux系統的使用者管理,Linux使用者和使用者組管理之相關配置檔案 講解了使用者管理的相關配置檔案,包括使用者資訊檔案/etc/passwd,使用者密碼檔案/etc/shadow;然後介紹了使用者組資訊檔案/etc/group,使用者組密碼檔案/etc/gshadow。使用者的家目錄,以及使用者的模闆目錄;Linux使用者和使用者組管理之使用者管理指令 講解了管理使用者和使用者組的指令,包括建立、修改、檢視等等以及用的比較多的切換使用者指令 su。那麼使用者管理結束之後,我們将進入linux的權限管理介紹,本篇部落格介紹的是Linux權限管理的ACL權限。
1、什麼是 ACL 權限?
比如有如下場景:
某大牛在QQ群内直播講解Linux系統的權限管理,講解完之後,他在一個公有的Linux系統中建立了一個 /project 目錄,裡面存放的是課後參考資料。那麼 /project 目錄對于大牛而言是所有者,擁有讀寫可執行(rwx)權限,對于QQ群内的所有使用者他們都配置設定的一個所屬組裡面,也都擁有讀寫可執行(rwx)權限,而對于 QQ 群外的其他人,那麼我們不給他通路/project 目錄的任何權限,那麼 /project 目錄的所有者和所屬組權限都是(rwx),其他人權限無。
問題來了,這時候直播有旁聽的人參與(不屬于QQ群内),聽完之後,我們允許他通路/project目錄檢視參考資料,但是不能進行修改,也就是擁有(r-x)的權限,這時候我們該怎麼辦呢?我們知道一個檔案隻能有一個所屬組,我們将他配置設定到QQ群所在的所屬組内,那麼他擁有了寫的權限,這是不被允許的;如果将這個旁聽的人視為目錄/project 的其他人,并且将/project目錄的其他人權限改為(r-x),那麼不是旁聽的人也能通路我們/project目錄了,這顯然也是不被允許的。怎麼解決呢?

我們想想windows系統裡面給某個檔案配置設定權限的辦法:
如上圖,我們想要讓某個使用者不具備某個權限,直接不給他配置設定這個目錄的相應權限就行了。那麼對應到Linux系統也是這樣,我們給指定的使用者指定目錄配置設定指定的權限,也就是 ACL 權限配置設定。
2、檢視分區 ACL 權限是否開啟:dump2fs
我們看某個檔案(Linux系統中目錄也是檔案,一切皆是檔案)是否支援 ACL 權限,首先要看檔案所在的分區是否支援 ACL 權限。
①、檢視目前系統有哪些分區:df -h
②、檢視指定分區詳細檔案資訊:dumpe2fs -h 分區路徑
下面是檢視 根分區/ 的詳細檔案資訊
3、開啟分區 ACL 權限
①、臨時開啟分區 ACL 權限
mount -o remount,acl /
重新挂載根分區,并挂載加入 acl 權限。注意這種指令開啟方式,如果系統重新開機了,那麼根分區權限會恢複到初始狀态。
②、永久開啟分區 ACL 權限
一、修改配置檔案 /etc/fstab
上面是修改根分區擁有 acl 權限
UUID=490ed737-f8cf-46a6-ac4b-b7735b79fc63 / ext4 defaults,acl 1 1
二、重新挂載檔案系統或重新開機系統,使得修改生效
mount -o remount /
4、設定 ACL 權限:setfacl 選項 檔案名
①、給使用者設定 ACL 權限:setfacl -m u:使用者名:權限 指定檔案名
②、給使用者組設定 ACL 權限:setfacl -m g:組名:權限 指定檔案名
注意:我們給使用者或使用者組設定 ACL 權限其實并不是真正我們設定的權限,是與 mask 的權限“相與”之後的權限才是使用者的真正權限,一般預設mask權限都是rwx,與我們所設定的權限相與就是我們設定的權限。mask 權限下面我們會詳細講解
範例:所有者root使用者在根目錄下建立一個檔案目錄/project,然後建立一個QQ群所屬組,所屬組裡面建立兩個使用者zhangsan和lisi。所有者和所屬組權限和其他人權限是770。
然後建立一個旁聽使用者 pt,給他設定/project目錄的 ACL 為 r-x。
目錄 /project 的所有者和所屬組其他人權限設定為 770。接下來我們建立旁聽使用者 pt,并賦予 acl 權限 rx
為了驗證 pt 使用者對于 /project 目錄沒有寫權限,我們用 su 指令切換到 pt 使用者,然後進入 /project 目錄,在此目錄下建立檔案,看是否能成功:
上面提示權限不夠,說明 acl 權限賦予成功,注意如下所示,如果某個目錄或檔案下有 + 标志,說明其具有 acl 權限。
5、檢視 ACL 權限:getfacl 檔案名
6、最大有效權限 mask
前面第4點我們講過,我們給使用者或使用者組設定 ACL 權限其實并不是真正我們設定的權限,是與 mask 的權限“相與”之後的權限才是使用者的真正權限,一般預設mask權限都是rwx,與我們所設定的權限相與就是我們設定的權限。
我們通過 getfacl 檔案名 也能檢視 mask 的權限,那麼我們怎麼設定呢?
setfacl -m m:權限 檔案名
7、删除 ACL 權限
①、删除指定使用者的 ACL 權限
setfacl -x u:使用者名 檔案名
②、删除指定使用者組的 ACL 權限
setfacl -x g:組名 檔案名
③、删除檔案的所有 ACL 權限
setfacl -b 檔案名
8、遞歸 ACL 權限
通過加上選項 -R 遞歸設定檔案的 ACL 權限,所有的子目錄和子檔案也會擁有相同的 ACL 權限。
setfacl -m u:使用者名:權限 -R 檔案名
9、預設 ACL 權限
如果給父目錄設定了預設的 ACL 權限,那麼父目錄中所有建立的子檔案會繼承父目錄的 ACL 權限。
setfacl -m d:u:使用者名:權限 檔案名
10、總結
本篇部落格我們介紹了權限管理的ACL權限,通過設定 ACL 權限,我們為某個使用者指定某個檔案的特定權限,在實際權限管理中還是用的比較多的。
作者:IT可樂
出處:http://www.cnblogs.com/ysocean/
資源:微信搜【IT可樂】關注我,回複 【電子書】有我特别篩選的免費電子書。
本文版權歸作者所有,歡迎轉載,但未經作者同意不能轉載,否則保留追究法律責任的權利。