Como o gcc manipula as permissões de arquivo?

4

Os arquivos executáveis que gcc cria têm permissões de execução

-rwxrwxr-x

, que são diferentes das permissões que o arquivo de origem possui.

-rw-rw-r--

Como o gcc define essas permissões?

    
por asheeshr 01.03.2013 / 05:33

3 respostas

4

Quatro coisas interferem para determinar a permissão de um arquivo.

  1. Quando um aplicativo cria um arquivo, ele especifica um conjunto de permissões iniciais. Essas permissões iniciais são passadas como um argumento da chamada de sistema que cria o arquivo ( open para arquivos regulares, mkdir para diretórios, etc.).
  2. As permissões são mascaradas com a umask , que é um atributo do processo em execução. O umask indica os bits de permissão que são removidos das permissões especificadas pelo aplicativo. Por exemplo, um umask de 022 remove a permissão de gravação em grupo e outra gravação. Um umask de 007 deixa a permissão de gravação em grupo, mas torna o arquivo totalmente fora dos limites para outras pessoas.
  3. As permissões podem ser modificadas por listas de controle de acesso . Eu não vou discutir mais sobre isso neste post.
  4. O aplicativo pode chamar chmod explicitamente para alterar as permissões para o que quiser. O usuário que possui um arquivo pode definir suas permissões livremente.

Algumas escolhas populares de conjuntos de permissões para a etapa 1 são:

  • 666 (ou seja, leia e escreva para todos) para um arquivo regular.
  • 600 (ou seja, ler e escrever somente para o proprietário) para um arquivo regular que deve permanecer privado (por exemplo, um email ou um arquivo temporário).
  • 777 (por exemplo, ler, escrever e executar para todos) para um diretório ou para um arquivo regular executável.

É o umask que faz com que os arquivos não sejam legíveis para o mundo, apesar de os aplicativos poderem incluir a permissão de gravação de outros usuários nas permissões de criação de arquivos.

No caso do gcc, o arquivo de saída é criado primeiro com permissões 666 (mascarado pelo umask), depois chmod'ed para torná-lo executável. O Gcc poderia criar um executável diretamente, mas não: ele só torna o arquivo executável quando termina de escrevê-lo, para que você não corra o risco de começar a executar o programa enquanto estiver incompleto.

    
por 02.03.2013 / 04:04
2

Não tenho certeza do que você está perguntando; você quer dizer como tem permissão para defini-los? O proprietário de um arquivo pode definir as permissões para o que quiserem. gcc está sendo executado em sua conta de usuário, portanto, o arquivo que ele cria pertence a você e tem permissão para fazer qualquer coisa que sua conta possa fazer, incluindo a configuração de permissões em seus arquivos

    
por 01.03.2013 / 06:56
2

Como no comentário de AshRj acima, isso depende das permissões padrão que a conta definiu. Essencialmente, o que é feito é começar com todas as permissões (que incluem, especificamente, x para usuário / grupo / outros) e desativar as permissões especificadas por umask(2) (ver também bash(1) ). Hoje (cada usuário tem seu próprio grupo privado) umask é normalmente definido como 002 (somente negar w para outros), portanto, as permissões do executável resultam em rwxrwxr-x , independentemente das permissões nas origens. Se outros arquivos forem criados (por exemplo, pelo editor), as permissões iniciais não terão x (um arquivo de texto aleatório não deve ser executado), portanto, as permissões serão rw-rw-r-- .

    
por 01.03.2013 / 14:36