基本信息
命令名 setfacl-設定檔案訪問控制列表
setfacl,顧名思義就是設定檔案的 ACL規則。
而 Acl( Access Control List)就是訪問控制列表,最初好像是unix裡面為了提供更高級的許可權管理而搞出來的。
可能是被chmod命令的3個許可權控制無法滿足,而被迫搞出來的吧!
設定技巧
getfacl:取得某個檔案/目錄的ACL設定項目
setfacl:設定某個目錄/檔案的ACL規定
[[email protected] ~]# tune2fs -l /dev/hda1 | grep option
Default mount options: user_xattr acl
主要方法
–help一下
[[email protected]~]# setfacl --help
setfacl2.2.39--set fileaccess control lists
Usage:setfacl[-bkndRLP]{-m|-M|-x|-X...}file... # -m|-M|-x|-X
-m,--modify=acl modify the current ACL(s)of file(s) #設定檔案acl規則
-M,--modify-file=file read ACL entries to modify from file #從檔案讀取訪問控制列表條目更改
-x,--remove=acl remove entries from the ACL(s)of file(s) #刪除檔案的acl規則
-X,--remove-file=file readACL entries to remove from file #從檔案讀取訪問控制列表條目並刪除
-b,--remove-all remove all extended ACL entries # 刪除所有擴展的acl規則,基本的acl規則(所有者,群組,其他)將被保留.
-k,--remove-default remove the defaultACL #刪除預設的acl規則。如果沒有預設規則,將不提示.
--set=acl set the ACL of file(s),replacing the current ACL.
--set-file=file readACL entries toset from file #從檔案中讀設定ACL規則.
--mask dorecalculate the effective rights mask #重新計算有效許可權,即使ACL mask被明確指定.
-n,--no-mask don'trecalculate the effective rights mask #不要重新計算有效許可權。setfacl默認會重新計算ACL mask,除非mask被明確的制定.
-d,--default operations apply tothe defaultACL #設定默認的acl規則,針對目錄而言.
-R,--recursive recurse into subdirectories #遞歸的對所有檔案及目錄進行操作.
-L,--logical logical walk,follow symbolic links #跟蹤符號連結,默認情況下只跟蹤符號連結檔案,跳過符號連結目錄。
-P,--physical physical walk,donotfollow symbolic links #跳過所有符號連結,包括符號連結檔案。
--restore=file restore ACLs(inverse of`getfacl-R') #從檔案恢復備份的acl規則(這些檔案可由getfacl -R產生)。通過這種機制可以恢復整個目錄樹的acl規則。此參數不能和除--test以外的任何參數一同執行.
--test testmode(ACLs are notmodified) #測試模式,不會改變任何檔案的acl規則,操作後的acl規格將被列出.
-v,--version print version andexit #版本.
-h,--help thishelp text #不用說肯定是幫助了.
當使用-M,-X選項從檔案中讀取規則時,setfacl接受getfacl命令輸出的格式。每行至少一條規則,以#開始的行將被視為注釋.
其他的許可權
setfacl命令可以識別以下的規則格式。
setfacl命令可以識別以下的規則格式。
[d[efault]:][u[ser]:]uid[:perms]
指定用戶的許可權,檔案所有者的許可權(如果uid沒有指定)。
[d[efault]:]g[roup]:gid[:perms]
指定群組的許可權,檔案所有群組的許可權(如果gid未指定)
[d[efault]:]m[ask][:][:perms]
有效許可權掩碼
[d[efault]:]o[ther][:perms]
#perms域是一個代表各種許可權的字母的組合:讀:r 寫:w 執行:x,執行只適合目錄和一些可執行的檔案。perms域也可設定為八進制格式0~7。
#其他的許可權
試驗一下,創建一個檔案,然後獲取該檔案的acl
[[email protected] ~]# touch file.kinggoo
[[email protected] ~]# getfacl file.kinggoo #獲取acl
# file: file.kinggoo
# owner: root
# group: kinggoo
user::rw-
group::r--
other::r--
#給kinggoo.com用戶向file.kingoo檔案增加讀和執行的acl規則
[[email protected] ~]# setfacl -m u:kinggoo.com:rx file.kinggoo
#查看user:kinggoo.com:r-x出來了吧,而且mask被默認被設定
[[email protected] ~]# getfacl file.kinggoo
# file: file.kinggoo
# owner: root
# group: kinggoo
user::rw-
user:kinggoo.com:r-x
group::r--
mask::r-x
other::r--
#木有寫用戶的時候會修改默認檔案所有者的許可權
[[email protected] ~]# setfacl -m u::rwx file.kinggoo
#最初是user:rw-,現在被修改rwx了
[[email protected] ~]# getfacl file.kinggoo
# file: file.kinggoo
# owner: root
# group: kinggoo
user::rwx
user:kinggoo.com:r-x
group::r--
mask::r-x
other::r--
設定組的話只需要把setfacl -m u::rwx file.kinggoo中的u改為g即可,大致差不多。
設定mask的話,setfacl -m u::rwx file.kinggoo中的u改為m,並且這個可不針對用戶和組喔,其他的大致差不多。
在使用-R時,記得放在-m前面,否則不可以地
使用-d的話,就會把默認的都加上去,針對目錄喔。設定檔案會警告[setfacl: /root/a/file.kinggoo: Only directories can have default ACLs]
mkdir一個目錄
[[email protected] ~]# mkdir directories.kinggoo
[[email protected] ~]# setfacl -m u:kinggoo.com:x d.kinggoo/ #目錄如果不加-d就會警告,所以-d要和目錄使用
[[email protected] ~]# setfacl: d.kinggoo/: No such file or directory
[[email protected] ~]# setfacl -d -m u:kinggoo.com:x directories.kinggoo/#設定這個目錄acl,並且使用-d參數
[[email protected] ~]# getfacl directories.kinggoo
# file: directories.kinggoo
# owner: root
# group: kinggoo
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:kinggoo.com:--x
default:group::r-x
default:mask::r-x
default:other::r-x
去掉所有的acl規則
[[email protected] ~]# setfacl -b directories.kinggoo/
[[email protected] ~]# getfacl directories.kinggoo/
# file: directories.kinggoo
# owner: root
# group: kinggoo
user::rwx
group::r-x
other::r-x
去掉指定acl規則
#先查看一下檔案默認的acl規則
[[email protected] ~]# getfacl file.kinggoo
# file: file.kinggoo
# owner: root
# group: kinggoo
user::rwx
user:kinggoo.com:r-x #<----注意這裡
group::r--
mask::r-x
other::r--
#然後執行-x參數
[[email protected] ~]# setfacl -x u:kinggoo.com file.kinggoo
[[email protected] ~]# getfacl file.kinggoo
# file: file.kinggoo
# owner: root
# group: vancl
user::rwx
group::r--#沒有user:kinggoo.com:r-x這行了
mask::r--
other::r--
下面這個是我腳本裡面寫的一個東西,不過為了能起到例子的作用我把變數多數都改掉了(木有用在我的伺服器喔)
${DocRoot}是一個變數,代表是一個資料夾目錄!!!!!
設定兩個用戶的ACL
setfacl -R -m u:[user.kinggoo.com]:rw- ${DocRoot};
setfacl -R -m u:[user1.kinggoo.com]:rwx ${DocRoot};
setfacl -d -R -m u:[user.kinggoo.com]:rw- ${DocRoot};
setfacl -d -R -m u:[user1.kinggoo.com]:rw- ${DocRoot};
設定兩個組的ACL
setfacl -R -m g:[group.kinggoo]:--- ${DocRoot};
setfacl -R -m g:[group1.kinggoo]:--- ${DocRoot};
setfacl -d -R -m g:[group.kinggoo]:--- ${DocRoot};
setfacl -d -R -m g:[group1.kinggoo]:--- ${DocRoot};
設定other的ACL
setfacl -R -m o::--- ${DocRoot};
setfacl -d -R -m o::--- ${DocRoot};
設定默認mask的ACL
setfacl -R -m m::rwx ${DocRoot};
setfacl -d -R -m m::rw- ${DocRoot};