无法解释 ACL 行为

Kat*_*kas 6 acl

所以这就是情况:为 Web 开发人员获取服务器。有很多开发人员。所有developers+ PHP+Apache所属的www组。有一个开发目录 - development.

目标是development目录中的每个文件都有755权限,每当任何开发人员创建、修改development目录中的文件时,文件仍然具有755.

所以我已经阅读了许多acl教程、指南和操作方法,但我仍然无法得到我想要的结果。

  1. 我的磁盘安装了 acl
  2. 我有 chown -R www:www development
  3. 添加 chmod g+s development
  4. acldevelopment目录上设置了许多规则并得到了这个:

    $ 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)
  5. 根据我的想法ACL,如果目录有这样的规则,我的任务应该可以实现,但是当我尝试在development目录中创建文件时,我得到:

    -rw-rw-r--+ 1 www     www      0 Nov 21 09:14 newfile
    
    Run Code Online (Sandbox Code Playgroud)

我似乎无法理解为什么它会创建rw-代替rwx

这可能是我遗漏的一些简单的东西或我不理解的一些一般概念。

Mik*_*kel 4

您的默认 ACL 取代了 umask,后者指定的不是默认权限,而是创建新文件的最大权限。在这种情况下rwxrwxr-x

\n\n

然后您的应用程序使用它想要的权限调用openor 。creat几乎所有应用程序都会要求rw-rw-rw-提供文件。

\n\n

您可以通过运行看到这一点strace,例如

\n\n
$ strace -e trace=file touch newfile\n...\nopen("newfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3\n
Run Code Online (Sandbox Code Playgroud)\n\n

0666是相同的rw-rw-rw-。)

\n\n

使用按位 AND 将两个权限组合起来得到rw-rw-r--

\n\n
  rwxrwxr-x     # default ACL\n  rw-rw-rw-     # permission requested (e.g. by touch, vim, etc.)\n& _________\n  rw-rw-r--     # effective permissions\n
Run Code Online (Sandbox Code Playgroud)\n\n

有关其他说明,请参阅POSIX 访问控制列表\xe2\x80\x94\xc2\xa0\xe2\x80\x9cDefault ACL 示例\xe2\x80\x9d。

\n\n

所以真正的问题是:为什么需要这些文件可执行?

\n