ACL權限設置命令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)
-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
--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