ACL(access control list)權(quán)限控制
一個(gè)文件有所屬者,所屬組,其他人三種關(guān)系,且這三種關(guān)系不可以更改,但是如果又來一個(gè)用戶要求要對(duì)該文件有r-x權(quán)限且不能更改其他用戶的權(quán)限關(guān)系,那么這三種權(quán)限關(guān)系就不夠使用了,所以這個(gè)時(shí)候需要用到ACL權(quán)限,為這個(gè)用戶單獨(dú)分配r-x權(quán)限,這樣既不會(huì)破壞其他用戶對(duì)這個(gè)文件的權(quán)限關(guān)系,又不會(huì)使這個(gè)用戶沒有這個(gè)操作文件權(quán)限的關(guān)系。
CentOS7 默認(rèn)創(chuàng)建的xfs和ext4文件系統(tǒng)具有ACL功能 CentOS7 之前版本,默認(rèn)手工創(chuàng)建的ext4文件系統(tǒng)無ACL功能,需手動(dòng)增加
#查看是否有ACL功能
#dumpe2fs命令是查詢指定分區(qū)詳細(xì)文件系統(tǒng)信息的命令
#-h僅顯示超級(jí)塊中信息,而不顯示磁塊組的詳細(xì)信息
dumpe2fs -h /dev/sdb1
#添加ACL功能
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
#或者
vi /etc/fstab
#在default后面加入acl
ACL相關(guān)命令
查看ACL命令
getfacl filename

設(shè)置ACL權(quán)限
setfacl命令
格式:setfacl 選項(xiàng) acl參數(shù) 目標(biāo)文件或目錄
-m 設(shè)置后續(xù)的acl參數(shù),不可與-x一起使用
-x 刪除后續(xù)的acl參數(shù),不可與-m一起使用
-b 刪除所有的acl參數(shù)
-k 刪除默認(rèn)的acl參數(shù)
-R 遞歸設(shè)置acl參數(shù)
-d 設(shè)置默認(rèn)acl參數(shù),只對(duì)目錄有效
ACL參數(shù)
u:用戶名:權(quán)限 給某個(gè)用戶設(shè)定權(quán)限,若不添加用戶名,默認(rèn)修改屬主權(quán)限
g:組名:權(quán)限 給某個(gè)組設(shè)定權(quán)限,若不添加組名,默認(rèn)修改屬組權(quán)限
m:權(quán)限 更改權(quán)限掩碼
范例:
# 創(chuàng)建目錄并設(shè)置權(quán)限
mkdir -p /tmp/test
chmod 640 /tmp/test
# 創(chuàng)建用戶AAA、BBB 創(chuàng)建組testg并加入
useradd AAA
useradd BBB
groupadd testg
gpasswd -a AAA testg
gpasswd -a BBB testg
# 設(shè)置acl權(quán)限
setfacl -m u:AAA:rx test
# 現(xiàn)在AAA可訪問
# 設(shè)置acl權(quán)限
setfacl -m g:testg:rx test
# 現(xiàn)在BBB也可訪問
最大有效權(quán)限mask
mask是用來指定最大有效權(quán)限的。mask只影響除所有者和other的之外的人和組的最大權(quán)限。如果我給用戶賦予了ACL權(quán)限,如果我再設(shè)置mask權(quán)限這是需要和mask的權(quán)限相與才能得到用戶的真正的權(quán)限,把-當(dāng)做0,通過調(diào)整mask權(quán)限來調(diào)整文件的權(quán)限,下面來調(diào)整一下最大用戶權(quán)限
setfacl -m u:AAA:rwx 1.txt
備份和還原ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 參數(shù)。但是tar等常見的備份工具是不 會(huì)保留目錄和文件的ACL信息
#備份ACL
getfacl -R /tmp/dir > acl.txt
#消除ACL權(quán)限
setfacl -R -b /tmp/dir
#還原ACL權(quán)限
setfacl -R --set-file=acl.txt /tmp/dir
#還原ACL權(quán)限
setfacl --restore acl.txt
#查看ACL權(quán)限
getfacl -R /tmp/dir