setfacl

setfacl,命令名,設定檔案訪問控制列表。

基本信息

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

相關詞條

相關搜尋

熱門詞條

聯絡我們