ACL實現靈活的權限管理
除了文件的所有者,所屬組和其它人,可以對更多的用戶設置權限
CentOS7當中,無論是操作系統安裝時還是之后手工創建的文件系統(xfs、ext4)均會開啟ACL功能。
CentOS6及之前的版本,僅操作系統安裝時創建的文件系統才會默認開啟ACL,手工創建的文件系統,需要手工開啟ACL功能。
mount -o acl /dev/sda7 取消的方式,重新掛載時不指定即可
tune2fs -o acl /dev/sda7 取消的方式 tune2fs -o ^acl /dev/sda7
ACL權限判斷的順序
先判斷是否是文件的OWNER,如果是,則執行OWNER的權限后結束,如果不是OWNER,則判斷是否是ACL的USER,如果是則執行USER權限后結束,如果不是ACL的USER, 則判斷是否屬于GROUP或ACL GROUP,如果是,則取最大權限。如果不屬于任何GROUP,則執行OTHER。
所有人->ACL的user>所有組和ACL的group->其他人
將文件f1的所屬人權限改為—,將文件f1 ACL里的user :liubei權限設為rwx,切換到liubei用戶下,此時該用戶對f1文件啥都不能做,說明文件的ower權限大于ACL的user權限。
將文件f1 acl的user:guanyu的權限設為—,將acl里的group:guanyu的權限設為rw-,進入guanyu用戶下,此時不能查看修改文件f1,所以acl中user權限大于group權限。
文件f1的組權限為—,acl中group:guanyu的權限為rwx,切換到guanyu用戶下,能查看修改執行文件
文件f1組權限為rwx,acl中group:guanyu權限為rw-,切換到guanyu用戶下,此時能執行文件。
所以如果不是ACL的USER, 則判斷是否屬于GROUP或ACL GROUP,如果是,則取最大權限。
為多用戶或者組的文件和目錄賦予訪問權限rwx:
setfacl -m u:liubei:— f1 設置ACL USER
setfacl -m g:shuguo:rwx f1 設置ACL GROUP
setfacl -M acl.txt f1[dir1](將一個文件的ACL,導入到另一個文件中)
acl.txt 內容來自getfacl f1 > acl.txt,如下
# file: fstab
# owner: root
# group: root
user::rw-
user:zhangfei:rwx
group::r–
mask::rwx
other::r–
setfacl -Rm u:zhangfei:rwx acltest/ 遞歸設置
setfacl -m mask:rwx f1 設置mask的權限
或 chmod g=rwx f1 一旦設置了ACL權限后,原有的文件GROUP不可再更改,使用chmod g=即修改ACL MASK(用ll命令顯示的文件組權限變為mask)
ACL MASK隨著新的ACL設置會被重置,重置的標準是讓該文件上的所有ACL及文件原GROUP上的權限都有效。
給文件f1的組權限設成rwx,但文件f1 ACL里組權限還是原本的rw-,而mask權限變為rwx,切換到guanyu用戶下,執行文件f1,權限被拒絕。
原本文件f1 ACL中mask權限為rwx,當把文件組權限改為—時,可以發現組權限并沒有發生變化,而mask權限變為—,所以當文件設置了ACL權限后,原有的文件GROUP不可再更改,使用chmod g=即修改ACL MASK。
當mask權限為—時,ACL中的user權限和group權限都會受到作用(除了owner),即mask權限會約束到ACL中user和group權限,兩者(mask和ACL USER或mask和ACL group)權限取并集。
最好最后設置mask,是為了保障每一條ACL都能夠生效。
setfacl -x u:liubei f1 單獨去除一條ACL權限
setfacl -X aclrm.txt f1[ f2 f3 *](批量刪除ACL:先創建一個文件在里面寫入你所要刪除的ACL,格式如下圖)
aclrm.txt 內容如下
u:liubei
g:shuguo
setfacl -b f1 去除該文件上ACL屬性(文件中mask也被刪掉了)。
setfacl -m d:u:guanyu:rwx dir1 設置ACL默認權限,僅影響新創建的文件及目錄,不影響當前。
此時進入guanyu用戶下,進入/app/acltest/dir1,但是不能創建文件,說明guanyu用戶是以其他身份來訪問dir1目錄的。
回到root用戶下,發現之后在dir1中創建的文件和目錄都默認有ACL屬性。
再切到guanyu用戶下,進入dir1下123目錄中,發現能夠創建文件了,而且文件也有默認ACL屬性。說明guanyu用戶此時擁有 setfacl -m d u:guanyu:rwx dir1 命令新增加acl user的權限,也說明該命令對當前目錄不會生效,對子目錄以下的有效。
setfacl -m u:guanyu:rwx dir1(在 setfacl -m d u:guanyu:rwx dir1 后面再敲setfacl -m u:guanyu:rwx dir1(兩者順序可以顛倒)就可以在當前目錄也生效)
setfacl -x d:sunquan d11 刪除一條默認權限
setfacl -k d1 刪除全部默認權限
setfacl -b d1 刪除ACL屬性
備份和恢復ACL
getfacl -R /tmp/dir1 > acl.txt 將目錄下的所有文件的ACL屬性備份到文件
setfacl -R -b /tmp/dir1 清除目錄下所有文件的ACL屬性
setfacl -R –set-file=acl.txt /tmp/dir1 通過文件還原ACL屬性的方法1
setfacl –restore acl.txt 通過文件還原ACL屬性的方法2
原創文章,作者:fuming,如若轉載,請注明出處:http://www.www58058.com/82811