1. 程式人生 > >ACL權限設置命令setfacl

ACL權限設置命令setfacl

setfacl

setfacl

setfacl


Linux命令——setfacl


命令setfacl- 設置文件訪問控制列表


setfacl,顧名思義就是設置文件的ACL規則。


Acl(Access Control
List
)就是訪問控制列表,最初好像是unix裏面為了提供更高級的權限管理而搞出來的。


可能是被chmod命令的3個權限控制無法滿足,而被迫搞出來的吧!


ACL的設置技巧


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規則(s估計是sock文件)


-M,--modify-file=file readACL entries tomodify from file
#修改文件acl規則


-x,--remove=acl remove entries from the ACL(s)of file(s)

#刪除文件的acl規則(s估計是sock文件)


-X,--remove-file=file readACL entries toremove from file
#刪除文件的acl規則


-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};


ACL權限設置命令setfacl