getfacl与ls -al输出的基础权限为何存在差异?
getfacl与ls -al输出的基础权限为何存在差异?
嗨,这个问题其实是Linux ACL机制里一个挺容易搞混的点,我来给你理清楚~
当一个文件或目录启用了ACL(也就是权限串末尾带+)时,ls -al里显示的「组权限列」,其实不再是文件的基础组权限,而是ACL里的mask值!
拿你的例子来看:
ls -ald /media/mburr输出的组权限是r-x,这对应的是getfacl结果里的mask::r-x- 而
getfacl里的group::---,才是这个目录真正的基础组(root组)的权限
那为什么要这么设计呢?
因为ACL的mask作用是作为所有自定义ACL条目(比如你这里的user:mburr:r-x)和组自定义ACL条目的「权限上限」。为了让ls的输出能直观反映这个权限上限(毕竟大部分人不会每次看ls都去查ACL),系统就把mask的值显示在了原来的组权限位置,代替了原本的基础组权限。
再拆解下你的场景:
- 这个目录的基础组是root,root组的实际权限是
---,也就是说如果有其他root组的成员,他们是没法访问这个目录的 - 但因为ACL的mask设为
r-x,所以你的自定义用户权限user:mburr:r-x是有效的(它的权限没超过mask的上限) ls把mask显示在组权限列,是为了快速告诉你:所有通过ACL额外赋予的权限,最高不会超过这个mask的限制
总结一下:
- 没有ACL时,
ls的组权限=基础组权限 - 有ACL时,
ls的组权限=ACL的mask值,真正的基础组权限得看getfacl里的group::条目
备注:内容来源于stack exchange,提问作者Michael Burr
相关产品推荐
相关产品推荐

