关于setfacl默认ACL与可执行权限的两个问题咨询
关于setfacl默认ACL与可执行权限的两个问题咨询
嗨,我来帮你捋捋这两个setfacl的问题,这俩其实都是和ACL默认权限的工作逻辑以及文件/目录的创建规则有关的,咱们一个个说:
问题1:默认ACL设了rwx,为什么新建文件无执行权限,目录却有?
这其实是Linux系统的安全机制在起作用:普通文件默认创建时就不会自带执行权限——总不能随便新建个文本文件就变成可执行程序吧?
当你用setfacl -dm u::rwx,g::rwx,o:---设置默认ACL时,这个规则会和文件/目录的创建基础权限、umask共同作用:
- 普通文件的创建基础权限是
666(也就是rw-rw-rw-),本身就不含执行位,所以哪怕ACL默认设了rwx,最终生成的文件还是会遵循“默认不给文件加执行位”的规则,只会得到rw-rw----权限; - 目录的创建基础权限是
777(rwxrwxrwx),而目录的执行位对应“进入该目录”的权限,是目录正常工作必需的,所以创建目录时会自动把执行位加上,最终得到drwxrwx---的权限。
这就是为什么你看到目录有执行位,文件却没有的原因,这不是setfacl的bug,是预期行为哦。
问题2:为什么用了rwX选项,getfacl里看不到大写X?
这个大写X是setfacl的条件性权限选项,它并不会被直接存储到ACL的条目里,所以你在getfacl的输出里看不到它是完全正常的——它的作用是在应用权限的时候触发判断逻辑,而不是作为固定权限位存储。
rwX的具体逻辑是:
- 如果目标是目录,自动加上执行位;
- 如果目标是文件,只有当这个文件原本就已经有执行权限的时候,才会保留/加上执行位。
所以你用setfacl -dm u::rwX,g::rwX,o:---设置的默认ACL,其实正好满足你的需求:新建目录会自动获得执行位(因为触发了目录的判断条件),新建文件则不会(既不是目录,也没有原有执行位)。你看不到X在ACL输出里,是因为X是命令层面的逻辑选项,不是存储在ACL中的权限标识,它的作用已经隐含在默认权限的应用规则里了。
备注:内容来源于stack exchange,提问作者user1089185
相关产品推荐
相关产品推荐

