这就是情况:为网络开发人员提供服务器。有很多开发商。所有developers
++PHP
都Apache
属于www
组。有一个开发目录- development
.
目标是development
目录中的每个文件都具有755
权限,并且每当任何开发人员创建、修改development
目录中的文件时,文件仍将具有755
.
所以我读了很多acl
教程、指南和指南,但我仍然无法得到我想要的结果。
- 我的磁盘安装有
acl
- 我有
chown -R www:www development
- 添加
chmod 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
根据我的想法
ACL
,如果目录有这样的规则,我的任务应该完成,但是当我尝试在 dir 中创建文件时development
,我得到:-rw-rw-r--+ 1 www www 0 Nov 21 09:14 newfile
rw-
我似乎无法理解为什么它会创建rwx
。
这可能是我错过的一些简单的东西或者我不理解的一些一般概念。
答案1
您的默认 ACL 替换了 umask,它指定不默认权限,但是最大限度创建新文件的权限。在这种情况下rwxrwxr-x
。
然后您的应用程序使用它想要的权限调用open
or 。creat
几乎所有应用程序都会要求rw-rw-rw-
提供文件。
您可以通过运行看到这一点strace
,例如
$ strace -e trace=file touch newfile
...
open("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
(0666
是相同的rw-rw-rw-
。)
使用按位 AND 将两个权限组合起来得到rw-rw-r--
。
rwxrwxr-x # default ACL
rw-rw-rw- # permission requested (e.g. by touch, vim, etc.)
& _________
rw-rw-r-- # effective permissions
其他解释请参见POSIX 访问控制列表— “默认 ACL 示例”。
所以真正的问题是:为什么需要这些文件可执行?