我尝试在 Ubuntu 18.04 上使用 setfacl,但得到了意想不到的结果。在这里的简单示例中,有一个目录:home,2 个用户:我、她和一个由这两个用户组成的组。文件系统已启用 acl 挂载,我使用 tune2fs 检查了这一点。
这是我用来设置权限的脚本的一部分:
#remove all chmod perms
chmod -R u=,g=,o= home
# remove default acl settings
setfacl -R -b -k home
# set default acl
setfacl -dR -m u:me:rwx,g:we:rwx home
# set actual permissions
setfacl -R -m u:me:rwx,g:we:rwx home
ls -al home
d---rwx---+ 9 me we 4096 sep 5 18:36 .
d---rwx---+ 8 me we 4096 sep 4 15:27 energy
d---rws---+ 13 she we 4096 sep 4 15:26 she
# Very strange , the chmod group bits are set!
# setfacl should not touch these bits?
# check acl bits
getfacl home
# getfacl output
# file: home
# owner: me
# group: we
user::---
user:me:rwx
group::---
group:we:rwx
mask::rwx
other::---
default:user::---
default:user:me:rwx
default:group::---
default:group:we:rwx
default:mask::rwx
default:other::---
# as expected
# run as user: me
ls home
# result of: ls home:
Permission denied
# Although the acl bits are ok, permission denied!
# It looks like the system api does not use acl bits
问题:
1 标准 chmod 位与 acl 位不同吗?
2 为什么 setfacl 会修改 chmod 组位?
每当我运行:setfacl -R -mu:someuser:rw directory
chmod 组位已设置。
3 aclbits 已经设置为允许访问,但是访问仍然被拒绝,为什么?
答案1
最后我找到了一些完整的文档来解释细节。我以错误的方式使用了 setfacl 命令:当为所有者用户和所有者组设置 acl 时,命令是:
setfacl -R -m u::rwX,g::rwX dir
当 acl 用于非所有者主体时,使用显式用户和/或组的语法。互联网上的大多数示例都处理这些情况,没有什么指导意义。此 acl 机制显然基于从未实现的 Posix 草案。我认为此机制不太适合现有的 unix 权限系统。