ACL是Linux里面常见的概念但并不是Linux特有的。很多产品包括硬件都有ACL的概念,比如思科交换机路由器也有ACL。无论在什么地方看到ACL,它的名称既然叫访问控制列表那就是要实现控制功能的,确切的说ACL就是用来实现灵活的权限控制的。
ACL的常用参数及使用格式
- getfacl file |directory #查看ACL属性
- setfacl -m u:uname:rwx file|directory #指定用户ACL权限
- setfacl -M file.acl file|directory #通过调用文件的方式授予ACL权限
- setfacl -m g:group:rw file| directory #指定组ACL权限
- setfacl -m d:u:uname:rx directory #默认权限,此目录新建文件默认有ACL
- setfacl -x u:uname file |directory #删除用户ACL权限
- setfacl -X file.acl directory #通过调用文件删除ACL
- setfacl -k dir #删除默认ACL权限
- setfacl –b file1 #清除所有ACL权限
- getfacl file1 | setfacl --set-file=- file2 #复制file1的acl权限给file2
- --set #set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含 UGO的设置,不能象-m一样只是添加ACL就可以
示例:
setfacl --set u::rw,u:wang:rw,g::r,o::- file1
ACL的优先级顺序是所有者>ACL自定义用户>ACL自定义组>其他人,
当一个用户去访问某个文件的时候,它会判断访问此文件的人是不是所有者,如果是权限立即生效,后面不会再继续往后判断,如果不是那它继续判断访问者是否ACL指定的用户,如果是那ACL里面设置那用户的权限生效了,它就不往后看了。
mask权限用来做权限的限高的,所有自定义的用户和组都只能比它低而不能比它高
这有什么用呢?我们可能会遇到这样一种场景,我们针对了很多用户设置了ACL权限,读写执行各不相同难以管理。某天觉得这些用户的权限稍大了,要把他们的权限设小一点,如果用传统的方法一个个的手动设置太麻烦了十几个呢,那这时候mask的作用就体现出来了,我们只需要把mask设置小一点,因为所有人的权限只能比它低,就全降级了。
备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。
但是tar等常见的备份工具是不会保留目录和文件的ACL信息的
需要额外的备份与恢复ACL操作
- getfacl -R /tmp/dir1 > acl.txt
- setfacl -R -b /tmp/dir1
- setfacl -R --set-file=acl.txt /tmp/dir1
- setfacl --restore acl.txt
- getfacl -R /tmp/dir1