O objetivo da permissão execute
é não para impedir a execução em geral . É (1) informar aos progams quais arquivos devem ser executados e (2) impedir a execução como usuário privilegiado , quando o bit setuid (etc.) é especificado.
O hack de linker é menos explorador do que parece. Você pode executar qualquer arquivo não executável que tenha permissões para ler com mais facilidade:
$ cp unexecutable_file ~/runme
$ chmod +x ~/runme
$ ~/runme
Veja esta discussão no fórum Arch Linux .
Em resumo:
Marcando arquivos que devem ser executados
Quando você escreve um script de shell, pode marcá-lo como executável com chmod +x
. Isto sugere ao seu shell que você pretende que ele seja executável (caso contrário, para todos que o shell sabe, é apenas outro arquivo de texto simples). O shell pode mostrá-lo na conclusão da tabulação quando você digita ./
Tab .
Da mesma forma: os diretórios something.d
(por exemplo, init.d
) contêm scripts de shell de inicialização ou controle que normalmente são executados automaticamente por daemons. Você pode querer colocar um comentário ou arquivo README no diretório como um arquivo de texto simples. Ou você pode querer desativar temporariamente um dos scripts. Você pode fazer isso limpando o bit de execução para esse arquivo específico. Isso diz ao daemon para pulá-lo.
Prevenindo a execução privilegiada
O bit setuid
significa que, quando você executa o arquivo, ele é executado como um usuário especificado (por exemplo, root).
O post do fórum explica bem:
You want an executable to be setuid for some user, but you only want people from a specific group to be able to execute it as setuid. They can still execute it by copying, but the setuid flag gets lost, so they'll be executing it as themselves, rather than the user who owned the original file.