Linux文件系統ACL介紹

簡介
ACL是訪問控制列表(Access Control Lists)的縮寫,對於Unix系統,ACL是標準Unix文件屬性(r,w)的附加擴展。ACL給予用戶和管理員更好控制文件讀寫和權限賦予的能力,商業Unix和NTFS以及Freebsd都支持文件系統的ACL,Linux從2.6內核開始支持對Ext2,Ext3和XFS,JFS等文件系統的ACL支持。
注意,Fedora Core從2開始支持ACL操作,雖然好像並不支持JFS和ReiserFS。

打開文件系統的ACL支持,修改/etc/fstab的mount屬性,例如針對這樣的
/home文件系統,LABEL=/home /home ext3 rw,acl 1 2
該行第四列原文爲defaults,現改爲rw,acl以開啓文件系統的ACL支持。
可以在線中心掛載文件系統,
# mount -v -o remount /home
當然umount掉文件系統,再mount也是可以的,只要確信沒有用戶和程序在使用這個文件系統,可以通過mount命令來查看修改是否生效,
# mount -l
之後,輸出中有這樣的行就正確了,
/dev/hda5 on /home type ext3 (rw,acl) [/home]

ACL操作命令
getfacl - 取得文件的ACL信息
setfacl - 設置文件的ACL信息
基本命令就是這麼兩條。

getfacl很簡單,可以返回文件當前的ACL信息,例如在一個CVSROOT下的passwd
有這樣的屬性,
# getfacl passwd
# file: passwd
# owner: cvsadmin
# group: cvsadmin
user::rw-
group::r--
other::r--

可以用setfacl加上相關屬性,例如加上allen用戶可寫到剛纔我們看到的passwd文件
# setfacl -m u:allen:rw- passwd
這個命令可以這樣解釋:增加用戶(u)用戶名(allen)可讀寫權限(rw-)到文件passwd。這樣之後再執行getfacl,看看結果,
# getfacl passwd

# file: passwd
# owner: cvsadmin
# group: cvsadmin
user::rw-
user:allen:rw-
group::r--
mask::rw-
other::r--
可以看到多出了行user:allen:rw-,表示allen用戶有rw-權限。

mask權限,就是用一個固定的權限設置遮住其他的權限設置,這樣可以獲得比較好的保護,因爲用戶最終對文件的權限將是由設置的權限和mask運算出來的有效權限,例如執行下面的設置
# setfacl -m mask::r-- passwd
# getfacl passwd
# file: passwd
# owner: cvsadmin
# group: cvsadmin
user::rw-
user:allen:rw- #effective:r--
group::r--
mask::r--
other::r--
我們可以看到allen用戶對於passwd文件的有效(effective)權限經計算爲r--。如果setfacl命令不指定操作用戶,那麼就是對默認屬主用戶權限的操作,這時候的setfacl命令功能上和傳統的chmod相同。例如setfacl u::rwx,g::rwx,o::rwx
filename 等價於chmod 777 filenmae。
更多的setfacl操作
-x 刪除特定用戶的權限設置,例如setfacl -x u:allen
filename,刪除filenmae上allen用戶的權限設置。
刪除所有的ACL設置
setfacl -b filename
setfacl --remove-all filename
遞歸選項 -R
此外,ACL的屬性設置也可以寫在一個文件中,使用setfacl的-M參數從文件中取得設置信息,這個對成批設置和備份ACL設置恢復特別有效。默認ACL設置,setfacl -d可以設置,只供目錄以及目錄繼承使用。

cp和mv命令對於ACL的支持,mv命令保持ACL設置信息,cp命令在使用-p,-a參數時保留ACL設置信息。但是如果從一個支持ACL的文件系統向一個不支持ACL的文件系統移動或帶ACL屬性的拷貝,則會得到類似下面這樣的錯誤提示:
cp: preserving permissions for `filename': Operation not supported
設置了ACL的文件在ls -l時可以看到這樣的情況,
-rw-rw----+ 1 allen chen 0 Jun 2 09:52 filename
有個加號在第一個列的末尾。

可以這樣備份ACL信息和恢復
getfacl -R dir/ > acl.bak.txt
setfacl --restore acl.bak.txt

打包備份ACLs目錄和文件
請使用star命令打包,參數-acl用於指定備份相關的ACL信息。
備份:star -Hexustar -acl -c f=Tree.star Tree
恢復:star -acl -x f=Tree.star
ACL的應用,主要可以用在共享文件時需要細分用戶權限的地方,如CVS倉庫的權限控制應用等方面,ACL都有很好的用途。

******
ACL 在權限繼承問題:
setfacl -m u:tset:rwx /test
意爲增加test用戶 對/test目錄擁有完全權限

setfacl -m -d u:tset:rwx /test
意爲增加test用戶 對/test目錄擁有完全權限並且默認繼承。

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