Alguém fez uma pergunta no Ask Ubuntu sobre por que eles obtiveram permission denied
quando entraram em um shell Bash
/etc/profile
Eu sei que isso ocorre porque o arquivo não tem permissão de execução. Mesmo o root não pode executá-lo ( sudo /path/to/file/with/no/execute/bits
falha com o erro não informativo sudo /path/to...: command not found
). Também sei que o root pode entrar em um diretório sem bits de execução, então a proibição absoluta de executar arquivos não executáveis parece especial. No bate-papo, Eliah Kagan opinou que o motivo pelo qual o root não seria capaz de executar arquivos não executáveis era protegê-lo (presumivelmente, de executar códigos perigosos acidentalmente).
Eu brevemente me perguntei por que alguém iria querer executar /etc/profile
e pensei que se alguém quisesse executá-lo, provavelmente iria querer source
(porque é um arquivo de configuração que define as variáveis de ambiente e shell). Percebi então que a permissão de execução não é necessária para source
nenhum arquivo regular. Mas source
executa o arquivo no shell atual! O arquivo pode conter qualquer comando e . file
irá em frente e executá-lo.
Se a permissão de execução for restrita para impedir a execução acidental de código potencialmente perigoso, por que é possível executar arquivos não executáveis usando o source
comando?