所以这就是情况:为 Web 开发人员获取服务器。有很多开发人员。所有developers+ PHP+Apache所属的www组。有一个开发目录 - development.
目标是development目录中的每个文件都有755权限,每当任何开发人员创建、修改development目录中的文件时,文件仍然具有755.
所以我已经阅读了许多acl教程、指南和操作方法,但我仍然无法得到我想要的结果。
aclchown -R www:www developmentchmod g+s development我acl在development目录上设置了许多规则并得到了这个:
$ getfacl development
# file: development
# owner: www
# group: www
# flags: -s-
user::rwx
user:www:rwx
group::rwx
group:www:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:www:rwx
default:group::rwx
default:group:www:rwx
default:mask::rwx
default:other::r-x
p.s. I know its messy, was doing a number of tests
Run Code Online (Sandbox Code Playgroud)根据我的想法ACL,如果目录有这样的规则,我的任务应该可以实现,但是当我尝试在development目录中创建文件时,我得到:
-rw-rw-r--+ 1 www www 0 Nov 21 09:14 newfile
Run Code Online (Sandbox Code Playgroud)我似乎无法理解为什么它会创建rw-代替rwx。
这可能是我遗漏的一些简单的东西或我不理解的一些一般概念。
您的默认 ACL 取代了 umask,后者指定的不是默认权限,而是创建新文件的最大权限。在这种情况下rwxrwxr-x。
然后您的应用程序使用它想要的权限调用openor 。creat几乎所有应用程序都会要求rw-rw-rw-提供文件。
您可以通过运行看到这一点strace,例如
$ strace -e trace=file touch newfile\n...\nopen("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3\nRun Code Online (Sandbox Code Playgroud)\n\n(0666是相同的rw-rw-rw-。)
使用按位 AND 将两个权限组合起来得到rw-rw-r--。
rwxrwxr-x # default ACL\n rw-rw-rw- # permission requested (e.g. by touch, vim, etc.)\n& _________\n rw-rw-r-- # effective permissions\nRun Code Online (Sandbox Code Playgroud)\n\n有关其他说明,请参阅POSIX 访问控制列表\xe2\x80\x94\xc2\xa0\xe2\x80\x9cDefault ACL 示例\xe2\x80\x9d。
\n\n所以真正的问题是:为什么需要这些文件可执行?
\n