ACL,即訪問控制列表(Access Control List), 可以實現更爲靈活的文件訪問權限控制,除了文件的所有者,所屬組和其他人,可以爲更多的用戶設置權限,ACL可以對特定的用戶、特定的用戶組、特定的文件或目錄來進行rwx
的權限控制。
如,某一個文件,不讓單一的某個用戶訪問。
1.設置文件訪問權限setfacl
chmod
命令可以把文件權限分爲u:g:o
,也就是(user:group:other)三組,而setfacl
可以對每一個文件或目錄設置更精確的文件權限,setfacl
可以理解爲文件訪問權限擴展或者說增強。
語法如下:
setfacl [-bkndrlp] {-m|-M|-x|-X} file
-m, --modify=acl 修改文件的acl權限
格式:setfacl -m file or dir
-M, --modify-file=file 通過acl配置文件來爲文件設置acl訪問權限
格式:setfacl -M xxx.acl file or dir
xxx.acl中格式如下:
#u:表示給用戶添加權限,
#user:指定確定存在的用戶名,
#rwx:表示具有訪問文件具有的權限
u:user:rwx
#g:表示給用組添加權限,
# group:指定確定存在的用戶組,
#rwx:表示具有訪問文件具有的權限
g:group:r
-x, --remove=acl 刪除文件的acl訪問權限
-X, --remove-file=file 刪除file文件提供的acl權限
-b, --remove-all 刪除所有 acl 權限
-k, --remove-default 刪除缺省的acl規則。如果沒有缺省規則,將不提示。
--set=acl
-set-file=file
--mask 重新計算有效權限,即使ACL mask被明確指定。
-n, --no-mask 不要重新計算有效權限。setfacl默認會重新計算ACL mask,除非mask被明確的制定。有效權限是由兩部分組成
的,一部分是通過setfacl設置的權限,一部分是由mask設置的權限,通過
setfacl添加進來的用戶具有的權限會首mask的限制,可以將mask作爲一個
統一控制門限,通過setfacl設置的用戶可以實現一鍵控制。
-d, --default 使用默認的acl權限操作
-R, --recursive 遞歸設置acl權限,從當前目錄開始,遞歸設置子目錄下的
文件及目錄權限
--restore=file 從文件恢復備份的acl規則(這些文件可由getfacl -R產生)。
通過這種機制可以恢復整個目錄樹的acl規則。此參數不能和除--test以外的
任何參數一同執行。
--test 測試模式,不會改變任何文件的acl規則,操作後的acl規格將被列出。
-L,--logical:跟蹤符號鏈接,默認情況下只跟蹤符號鏈接文件,跳過符號
鏈接目錄。
-P,--physical:跳過所有符號鏈接,包括符號鏈接文件。
-v, --version 輸出setfacl的版本號並退出。
-h, --help 輸出幫助信息。
注意
:
- centos7及以上的版本,
xfs
和ext4
文件系統具有ACL
功能 - centos7及以前的版本,默認手工創建的
ext4
文件系統沒有ACL
功能,需要手動添加
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /mnt/test
ACL
生效順序:所有者 > 自定義用戶 > 自定義組 > 其他人- 全局訪問控制權限生效順利:
- 檢查所有者是否具有訪問權限;
- 檢查
ACL
權限是否具有訪問權限; - 檢查用戶是否具有訪問權限;
- 檢查用戶所在的組是否具有訪問權限;
- 檢查
other
是否具有訪問權限;
2.備份和恢復ACL
主要的文件操作拷貝命令cp
、scp
等都支持ACL
,只需要在命令選項上加上-p
參數即可,但是常用的備份工具是不會保留目錄和文件ACL
信息。