複製鏈接
請複製以下鏈接發送給好友

setfacl

鎖定
setfacl,命令名,設置文件訪問控制列表
外文名
setfacl
釋    義
設置文件訪問控制列表
方    式
設置文件的ACL規則。
getfacl:
取得某個文件/目錄的ACL設置項目

setfacl基本信息

命令setfacl-設置文件訪問控制列表
setfacl,顧名思義就是設置文件的ACL規則。
Acl(Access Control List)就是訪問控制列表,最初好像是unix裏面為了提供更高級的權限管理而搞出來的。
可能是被chmod命令的3個權限控制無法滿足,而被迫搞出來的吧!

setfacl設置技巧

getfacl:取得某個文件/目錄的ACL設置項目
setfacl:設置某個目錄/文件的ACL規定
[root@kinggoo.com ~]# tune2fs -l /dev/hda1 | grep option
Default mount options: user_xattr acl

setfacl主要方法

–help一下
[root@kinggoo.com~]# 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
[shell@kinggoo.com ~]# touch file.kinggoo
[shell@kinggoo.com ~]# getfacl file.kinggoo #獲取acl
# file: file.kinggoo
# owner: root
# group: kinggoo
user::rw-
group::r--
other::r--
#給kinggoo.com用户向file.kingoo文件增加讀和執行的acl規則
[shell@kinggoo.com ~]# setfacl -m u:kinggoo.com:rx file.kinggoo
#查看user:kinggoo.com:r-x出來了吧,而且mask被默認被設置
[shell@kinggoo.com ~]# getfacl file.kinggoo
# file: file.kinggoo
# owner: root
# group: kinggoo
user::rw-
user:kinggoo.com:r-x
group::r--
mask::r-x
other::r--
#木有寫用户的時候會修改默認文件所有者的權限
[shell@kinggoo.com ~]# setfacl -m u::rwx file.kinggoo
#最初是user:rw-,現在被修改rwx了
[shell@kinggoo.com ~]# 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一個目錄
[shell@kinggoo.com ~]# mkdir directories.kinggoo
[shell@kinggoo.com ~]# setfacl -m u:kinggoo.com:x d.kinggoo/ #目錄如果不加-d就會警告,所以-d要和目錄使用
[shell@kinggoo.com ~]# setfacl: d.kinggoo/: No such file or directory
[shell@kinggoo.com ~]# setfacl -d -m u:kinggoo.com:x directories.kinggoo/#設置這個目錄acl,並且使用-d參數
[shell@kinggoo.com ~]# 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規則
[shell@kinggoo.com ~]# setfacl -b directories.kinggoo/
[shell@kinggoo.com ~]# getfacl directories.kinggoo/
# file: directories.kinggoo
# owner: root
# group: kinggoo
user::rwx
group::r-x
other::r-x
去掉指定acl規則
#先查看一下文件默認的acl規則
[shell@kinggoo.com ~]# 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參數
[shell@kinggoo.com ~]# setfacl -x u:kinggoo.com file.kinggoo
[shell@kinggoo.com ~]# 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};
[1-2] 
參考資料