目录
什么是ACL与如何支持启动ACL
ACL设置技巧:getfacl、setfacl
getfacl命令用法
setfacl命令用法
最简单的【u:账号:权限】设置
使用默认权限设置目录未来文件的ACL权限继承
什么是ACL与如何支持启动ACL
ACL是Access Control List的英文缩写,中文译为访问控制列表,主要目的是提供传统的属主、所属群组、其他人的读、写、执行权限之外的详细权限设置。ACL可以直接针对单一用户、单一文件或目录来进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有帮助
ACL主要针对这几个选项来控制权限:
- 用户(user):可以针对用户来设置权限
- 用户组(group):可以针对用户组为对象来设置权限
- 默认属性(umask):还可以针对在该目录下建立新文件/目录时,规范新数据的默认权限
传统的Linux系统只能针对一个用户、一个用户组以及非此用户组的其他人设置权限而已,无法针对单一用户或个人来设置权限,而ACL就是为了解决此问题
ACL原本是UNIX-like操作系统的额外支持选项,但因为近年来Linux系统对权限设置的热烈需求,目前ACL几乎已经默认加入了所有常见的Linux文件系统的挂载参数中(ext2、ext3、ext4、xfs等),如果你不确认自己的系统是否真的支持ACL,可以检查一下内核挂载时显示的信息
ACL设置技巧:getfacl、setfacl
设置与查看ACL的两个命令:
- getfacl:获取某个文件/目录的ACL设置选项
- setfacl:设置某个文件/目录的ACL规范
getfacl命令用法
getfacl filename
选项与参数:
-a:仅显示文件的ACL
-d:仅显示文件的ACL
-e:显示所有的有效权限
-E:显示没有的有效权限
-s:跳过文件,只具有基本条目
-R:递归查询
-L:按照逻辑路径,包括软链接
-P:按照物理路径,不包括软链接
-t,:使用表格输出格式
-n:显示用户的UID和组群的GID
-p:保留路径中开始的根"/"
第一行:说明此文件
第二行:说明此文件的拥有者
第三行:说明此文件的所属组
第四行:使用者列表栏是空,代表文件拥有者的权限
第五行:针对redhat用户的权限设置为rx,与拥有者并不同
第六行:针对文件用户组的权限设置仅有r
第七行:此文件默认的有效权限
第八行 :其他人拥有权限
显示数据前有#的表示这个文件的默认属性,包括文件名、文件拥有者与文件所属用户组。下面出现的user、group、mask、other则是属于不同用户、用户组与有效权限(mask)的设置值
setfacl命令用法
setfacl 【-bkRd】【 {-m | -x} acl参数 】目标文件名
选项与参数:
-m:设置后续的ACL参数给文件使用,不可与-x合用
-x:删除后续的ACL参数,不可与-m合用
-b:删除【所有的】ACL设置参数
-k:删除【默认的】ACL参数
-R:递归设置ACL,即包括所有子目录都会被设置起来
-d:设置【默认ACL参数】的意思,只对目录有效,在该目录新建的数据会引用此默认值
最简单的【u:账号:权限】设置
设置规范为 【u/g/m:使用者账号/用户组名:rwx】
u:针对用户
g:针对用户组
m:针对有效权限
设置有效权限时,设置规范为 m:rwx 与设置g、u有些不同
有效权限(mask)的意思为规范最大允许范围,所以当mask的权限只有r时,redhat用户权限最大也只有r,x权限并不生效
我们看到的权限与实际权限可能会有点误差,所以我们需要通过getfacl来查看
针对单一用户的设置方式:针对redhat的权限规范rx
设置规范【u:使用者账号:rwx】
我们可以发现设置了ACL后,权限部分最后一位由 . 变成了+,且与原本的644权限看起来差异很大
当设置规范【u:使用者账号:rwx】没有使用者账号时,默认为该文件拥有者
删除全部ACL的属性:
补充:当我们给一个目录设置了ACL后,在此目录内新建的文件或目录都不会继承该目录的ACL设置(新建文件权限最后不是+),但是我们可以使用默认权限来设置目录未来文件的ACL权限继承
使用默认权限设置目录未来文件的ACL权限继承
设置规范【d:[ug]:使用者列表:rwx】
此时再建立一个文件看看
通过这个针对目录来设置的默认ACL权限设置值的选项,我们可以让这些属性继承到子目录下面