Parece que consigo executar scripts (.sh) com e sem que eles sejam definidos como executáveis. Então, onde exatamente isso importa?
Digamos que você tenha o arquivo que myscript
contém o seguinte:
#!/bin/bash
echo "Hello, World!"
Se você tornar este arquivo executável e executá-lo ./myscript
, o kernel verá que os dois primeiros bytes são #!
, o que significa que é um arquivo de script. O kernel usará o restante da linha como intérprete e passará o arquivo como seu primeiro argumento. Então, ele roda:
/bin/bash myscript
e o bash lê o arquivo e executa os comandos que ele contém.
Portanto, para que o bash (ou qualquer outro interpretador que seu script exija) "execute" o script, ele precisa apenas ler o arquivo.
Portanto, para scripts, o bit de execução apenas torna um pouco mais conveniente executá-lo. Desde que o bash seja executável, você sempre pode executar o bash com o arquivo de script como argumento ou executar o bash interativamente e copiar e colar a linha de script por linha no seu terminal para executar os comandos.
Verifique se você não está confundindo "executando o shell script" com "execute um shell script usando sh".
Isso não será afetado pelas permissões de arquivo em
file.sh
:Você está executando
sh
(que resolve o programa/bin/sh
), que lêfile.sh
e executa seu código.As permissões de arquivo terão efeito se você realmente executar o próprio script :
Observe que as permissões de arquivo não são suportadas por sistemas de arquivos não Linux, como o FAT. Portanto, mesmo se você executar
chmod -x file.sh
, o arquivo ainda terá suas permissões anteriores.A permissão de execução é imposta pelo sistema de arquivos. Mas os programas também podem "executar" o código lendo o conteúdo do arquivo, o que ignora as permissões do sistema de arquivos em "execute".
fonte
bash
) para executar a execução - para bloquear que você também teria que tirar aread
permissão deles .If you set the executable permission, the script can be run directly by users who have that permission - whether they have it on a group, world or owner basis
Mas como a permissão é concedida a diferentes usuários, verificando a permissão executável? E eu entendi o seu segundo ponto. Você quer dizer retirar a permissão de leitura do script para que eles nem sequer possam processá-lo através do bash. Direita?sudo chmod g+x myfile.sh
no terminal para adicionar permissões de execução ao grupo do arquivo. Consulte o tutorial de permissões de arquivo . Para gerenciar permissões para vários usuários simultaneamente, você usaria grupos, consulte, por exemplo, Gerenciando grupos .Não pense nisso dessa maneira. Posso executar este arquivo? Pense nisso da seguinte maneira: Quem pode executar este arquivo?
Se o computador é seu e o arquivo é seu, tenho certeza que você pode executá-lo. Você pode querer procurar mais em comandos como chmod e chown e permissões de arquivo.
Espero que ajude.
fonte
O
exec
syscall do kernel do Linux falhaEACCES
se o arquivo não for executávelEnquanto você pode fazer
sh myprog.sh
(que apenas lê os arquivos e interpreta), tentar executar o programa como./myprog.sh
não pode funcionar, desde quando você faz isso:exec
chamada do sistema./myprog.sh
exec
chamada do sistema do kernel do Linux, conforme explicado em: /programming/2429511/why-do-people-write-the-usr-bin-env-python-shebang-on -a-primeira-linha-de-um-pyt / 40938801 # 40938801Isso pode ser verificado com
main.c
:e
myprog.sh
:Se
myprog.sh
não for executável,main
falha com:Testado no Ubuntu 17.10
gcc -std=c99
,.O POSIX 7 menciona que em:
Uma justificativa adicional pode ser encontrada em: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the
fonte