ACL:访问控制列表(Access Control List)。
基于普通文件或目录设置 ACL 就是对指定的用户或用户组设置文件的操作权限。
如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。
1、setfacl命令,用于管理文件的 ACL 规则,格式为“setfacl [参数] 文件名称”。
-m,--modify=acl:修改文件或目录的扩展ACL设置信息 -x,--remove=acl:从文件或目录删除一个扩展的ACL设置信息 -b,--remove-all:删除所有的扩展的ACL设置信息 -k,--remove-default:删除缺省的acl设置信息 -n,--no-mask:不要重新计算有效权限。setfacl默认会重新计算ACL mask,除非mask被明确的制定 -d,--default:设置默认的ACL设置信息(只对目录有效) -R,--recursive:操作递归到所有子目录和 文件
常用的增加ACL权限
①给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名
②给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名
常用的删除ACL权限
①删除指定用户的ACL权限: setfacl -x u:用户名 文件名
②删除指定用户组的ACL权限:setfacl -x g:组名 文件名
③删除文件的所有ACL权限:setfacl -b 文件名
场景1:/home/data是ftp用户上传数据的目录,现在es用户需要能进行读取和执行。
[[email protected] ~]$ cd home/data #@H_301_37@没有权限进入@H_301_37@ -bash: cd: home/data: 没有那个文件或目录 [es@H_301_37@@bigdata-senior01 ~]$ getfacl /home/data getfacl: Removing leading ‘@H_301_37@/‘ from absolute path names @H_301_37@#@H_301_37@ file: home/data@H_301_37@ #@H_301_37@ owner: xu.dm.ftp #只有xu.dm.ftp有权限@H_301_37@ #@H_301_37@ group: root@H_301_37@ user::rwx group@H_301_37@::--- other@H_301_37@::--- [es@H_301_37@@bigdata-senior01 ~]$ ll home/data ls: 无法访问home@H_301_37@/data: 没有那个文件或目录 [es@H_301_37@@bigdata-senior01 ~]$ setfacl -Rm u:es:rx /home/data setfacl: @H_301_37@/home/data: 不允许的操作 setfacl: @H_301_37@/home/data: 权限不够 [es@H_301_37@@bigdata-senior01 ~]$ sudo setfacl -Rm u:es:rx /home/data [es@H_301_37@@bigdata-senior01 ~]$ ll /home/data -d drwxr@H_301_37@-x---+ 2 xu.dm.ftp root 224 11月 13 22:36 /home/data
#这个时候看到目录权限最后又个“+”号,说明是ACL控制目录 [es@H_301_37@@bigdata-senior01 ~]$ getfacl /home/data getfacl: Removing leading ‘@H_301_37@/‘ from absolute path names @H_301_37@#@H_301_37@ file: home/data@H_301_37@ #@H_301_37@ owner: xu.dm.ftp@H_301_37@ #@H_301_37@ group: root@H_301_37@ user::rwx user:es:r@H_301_37@-x #@H_301_37@es用户获取了rx权限@H_301_37@ group::--- mask@H_301_37@::r-x other@H_301_37@::---
场景2:删除/home/data目录es的acl权限,删除全部/home/data的acl权限
[[email protected] ~]$ sudo setfacl -x u:es /home/data [es@H_301_37@@bigdata-senior01 ~]$ ll /home/data -d drwx@H_301_37@------+ 2 xu.dm.ftp root 224 1月 12 22:45 /home/data #实际上只有一个es用户设置了对/home/data的acl权限,删除后,目录里那个+;号依然在。
#用getfacl查看后,发现还有一个mask属性遗留 [es@H_301_37@@bigdata-senior01 ~]$ getfacl /home/data getfacl: Removing leading ‘@H_301_37@/‘ from absolute path names @H_301_37@#@H_301_37@ file: home/data@H_301_37@ #@H_301_37@ owner: xu.dm.ftp@H_301_37@ #@H_301_37@ group: root@H_301_37@ user::rwx group@H_301_37@::--- mask@H_301_37@::--- other@H_301_37@::---
#全部删除ACL [es@H_301_37@@bigdata-senior01 ~]$ sudo setfacl -b /home/data [es@H_301_37@@bigdata-senior01 ~]$ ll /home/data -d drwx@H_301_37@------. 2 xu.dm.ftp root 224 1月 12 22:45 /home/data [es@H_301_37@@bigdata-senior01 ~]$ getfacl /home/data getfacl: Removing leading ‘@H_301_37@/‘ from absolute path names @H_301_37@#@H_301_37@ file: home/data@H_301_37@ #@H_301_37@ owner: xu.dm.ftp@H_301_37@ #@H_301_37@ group: root@H_301_37@ user::rwx group@H_301_37@::--- other@H_301_37@::---