11.09.2011

ACL (Access Control List)─存取控制列表

這一次要介紹的主題是─ACL (Access Control List)─存取控制列表

開宗明義,ACL的目的是讓檔案或資料夾能夠有多使用者 (Multi-User)或多個群組 (Multi-Group)的存取權限

可以用一個案例情境來做舉例:軟體部 (SW)有兩位成員:Apollo和Picasso;硬體部 (HW)有兩位成員:Bright和Stanley。

現今有一個專案,是由Apollo和Bright來共同開發,為了開發過程中的一些文件和資料,建立了一個叫PROJECT的資料夾;

但是,只能讓Apollo或Bright可以存取,Picasso和Stanley不能存取。要解決這樣的問題,ACL就派上用場了!!

ACL的設定相當地簡單,也亦於理解;我們再拿之前那個無關痛養的檔案來當做範例:

cat -n /etc/issue; cp -vf /etc/issue ./;

ls -l ./issue

getfacl ./issue



getfacl (Get File ACL)指令,就是用來查看檔案的ACL權限狀態;從上圖的實作中可以得知getfacl和ls -l所得到檔案屬性是一樣地。

如果要設定,指令為:

setfacl -m u:picasso:-wx ./issue

setfacl -m g:MIS:--- ./issue

getfacl ./issue

ls -l ./issue



setfacl指令也不難理解:

第二個參數:-m,指的是Modify (修改)

第三個參數,又細分為三個參數:所要修改的User / Group / Others名稱,及權限為何;

最後一個參數,就是要被設定ACL的檔案 (或資料夾)。

這裡要注意一點:只要"曾經"設定過ACL的檔案,檔案屬性的第11碼必定為'+'號 (如上圖反白處)。

當一個檔案,要被運作 (讀取、寫入和執行)時,Linux系統該如何判斷這個檔案能否被該使用者運作??

1. 是否為使用者 (User,ls -l的第2、3、4碼)??

2. 是否為ACL for User??

3. 是否為群組成員 (Group,ls -l的第5、6、7碼)??

4. 是否為ACL for Group??

5. 是否為其它成員 (Others,ls -l的第8、9、10碼)??

6. 是否為ACL for Others??

除此之外,ACL還具有繼承的特性─可以只針對資料夾設定ACL,但資料夾內的檔案均繼承此一設定─以最少的指令來達到功效

倘若,不曉得檔案系統 (File System)是否有支援ACL,還可以在/etc/fstab中加上此一設定:



編輯完檔案系統表之後,記得要重新掛載:

mount -o remount /

mount | grep --color "acl"

沒有留言:

張貼留言