ACL/umask 对 gcc 生成的可执行文件的权限有什么影响?

ACL/umask 对 gcc 生成的可执行文件的权限有什么影响?

我一直想知道如何gcc确定生成的可执行文件的最终文件权限。为了获得一些见解,我考虑了一个简约的程序test.c

#include <fcntl.h>
#include <unistd.h>

int main(){
  int fd = open("output.dat", O_CREAT, 0777);
  close(fd);
}

以及以下两种场景:

  1. 该文件test.c驻留在没有 ACL 的目录中,并且 umask 设置为0027。如果我执行gcc -o test test.c,该文件test具有(如预期的)权限,通过启动创建的rwxr-x---文件也具有权限。output.dat./test

  2. 该文件test.c位于 目录中,setfacl -m d:g::rX -m d:o:--- .并且 umask 设置为0022。在这种情况下,test由 生成的可执行文件gcc具有权限rwxr-x--x,而文件output.dat保留rwxr-x---.

至于该文件output.dat,其行为似乎与该部分一致。对象创建和默认 ACL在 acl 的手册页中。此外,还strace揭示了gcc首先创建输出文件,然后chmod创建可执行标志。然而,它似乎chmod("test", 0750)在第一个场景和chmod("test", 0751)第二个场景中调用。

0751我可能遗漏了一些非常明显的东西,但是后一种情况下权限的原因是什么?不应该-m d:o:---被尊重吗?

相关内容