這一次要介紹的主題是─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"
沒有留言:
張貼留言