Qual é o efeito de ACLs / umask nas permissões do arquivo executável gerado pelo gcc?

2

Eu tenho me perguntado como gcc determina as permissões de arquivo resultantes do arquivo executável que está sendo gerado. Para obter algum insight, considerei um programa minimalista test.c

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

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

e os dois cenários a seguir:

  1. O arquivo test.c reside em um diretório sem ACLs e umask é definido como 0027 . Se eu executar gcc -o test test.c , o arquivo test tem (como esperado) as permissões rwxr-x--- e o arquivo output.dat criado iniciando ./test .

  2. O arquivo test.c reside em um diretório com setfacl -m d:g::rX -m d:o:--- . e umask está definido como 0022 . Sob essas circunstâncias, o arquivo executável test gerado por gcc tem permissões rwxr-x--x , enquanto o arquivo output.dat retém rwxr-x--- .

Quanto ao arquivo output.dat , o comportamento parece estar de acordo com a seção Criação de objetos e ACLs padrão na página de manual do acl. Além disso, strace revela que gcc primeiro cria o arquivo de saída e chmod s o sinalizador de executável mais tarde. No entanto, parece chamar chmod("test", 0750) no primeiro cenário e chmod("test", 0751) no segundo.

Provavelmente estou sentindo falta de algo muito óbvio, mas qual é o motivo das permissões 0751 no último caso? Não deveria -m d:o:--- ser respeitado?

    
por ewcz 18.09.2015 / 21:49

0 respostas