Access Control List
访问控制列表;
传统的linux权限控制,只能粗略的对属主,数组,其他人进行权限控制;而ACL可以针对单一用户,单一文件或目录来进行rwx的权限设置;
ACL是UNIX-like系统的额外支持选项,但是现在很多linux系统都直接加入了这个文件系统的挂载参数,不需要什么额外的设置就可以直接使用;使用dmesg查找ACL相关信息(dmesg | grep -i acl,-i参数为忽略大小写);
ACL的设置技巧:getfacl,setfacl
getfacl:获取某个文件/目录的ACL设置选项;
setfacl:设置某个文件/目录的ACL选项;
setfacl的简单用法:u:账号:权限
#setfacl [-bkRd] [{-m|-X} ACL参数] 目标文件名
-m和-x只能二选一,-m表示给文件设置后续的ACL参数;-x则表示删除;
-b:删除所有的ACL设置参数
-k:删除”默认”的ACL参数
-R:递归设置ACL,包括子目录都会被设置起来
-d:设置默认的ACL参数,只对目录有效,在该目录新建的数据会引用这个默认值
如何设置ACL的特殊权限
1.针对特定使用者的方式:
#u:[使用者账号列表]:[rwx]
例:setfacl -m u:aaa:rx testfile
此时如果使用ll命令查看testfile的权限的话,会发现在原先的权限后边新增了一个+;
2.针对用户组设置的方式:
#g:[用户组列表]:[rwx]
和第一条相似
3.针对有效权限设置:
mask,用户或者用户组所设置的权限必须要存在于mask的权限设置范围内才会生效,这就是”有效权限(effective permission)”;
举个例子
setfacl -m m:r testfile
getfacl testfile
能看到mask这一栏变为r—;此时用户aaa的权限为r-w,加上mask之后,会仅剩r;
4.针对权限继承的设置:
仅仅对目录的权限设置是不能被子目录继承的;
如果希望ACL在目录下面的所有数据都有继承功能,需要如下操作;
d:[ug]:使用者列表:[rwx]
#setfacl -m d:u:用户名:rx /srv/project
上面这个例子为啥要用getfacl读取信息?如果使用完setfacl之后,再使用ll查看文件权限,会看到一个文件的权限里多了一个+,但是到底+了啥? 到底哪个账号获得了什么权限?这些使用ll都看不见,这种情况下需要使用getfacl;
#getfacl filename
会显示的信息有
filename
owner
group
user::rwx 这行表示文件拥有者的权限
user:aaa:r-x
group::r— 表示属组权限
mask::r-x 默认的有效权限
other::r—
实例:
如果有一个独立的用户与用户组:ccc;可以进入某个开发目录看,但是没有修改能力;这可以使用setfacl实现
使用root将ccc添加到这个目录里:-m u:ccc:rx(可读可执行);
需要注意的是,如果要设置某个用户或者组没有任何权限,是不可以留白的,需要使用”—-“;
