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
信息。