Quando tento correr ./script.sh
, consegui, Permission denied
mas quando corro bash script.sh
está tudo bem.
O que eu fiz errado?
bash
shell-script
permissions
mount
Piotr Stapp
fonte
fonte
getfacl script.sh
?Respostas:
Permissões POSIX incorretas
Isso significa que você não tem o bit de permissão de execução definido para
script.sh
. Ao executarbash script.sh
, você só precisa de permissão de leitura parascript.sh
. Consulte Qual é a diferença entre executar “bash script.sh” e “./script.sh”? para mais informações.Você pode verificar isso executando
ls -l script.sh
.Você pode nem precisar iniciar um novo processo do Bash. Em muitos casos, você pode simplesmente executar
source script.sh
ou. script.sh
executar os comandos de script no seu shell interativo atual. Você provavelmente desejaria iniciar um novo processo Bash se o script alterar o diretório atual ou modificar o ambiente do processo atual.Listas de controle de acesso
Se os bits de permissão POSIX estiverem definidos corretamente, a Lista de Controle de Acesso (ACL) pode ter sido configurada para impedir que você ou seu grupo execute o arquivo. Por exemplo, as permissões POSIX indicariam que o script do shell de teste é executável.
No entanto, a tentativa de executar o arquivo resulta em:
O
getfacl
comando mostra o motivo pelo qual:Nesse caso, meu grupo principal é o
domain users
qual teve permissões de execução revogadas ao restringir a ACLsudo setfacl -m 'g:domain\040users:rw-' t.sh
. Essa restrição pode ser levantada por um dos seguintes comandos:Vejo:
Sistema de arquivos montado com a opção noexec
Finalmente, a razão, neste caso específico, de não conseguir executar o script, é que o sistema de arquivos em que o script reside foi montado com a
noexec
opção Esta opção substitui as permissões POSIX para impedir que qualquer arquivo desse sistema de arquivos seja executado.Isso pode ser verificado executando-se
mount
para listar todos os sistemas de arquivos montados; as opções de montagem estão listadas entre parênteses na entrada correspondente ao sistema de arquivos, por exemploVocê pode mover o script para outro sistema de arquivos montado ou remontar o sistema de arquivos, permitindo a execução:
Nota: usei
/tmp
como exemplo aqui, pois existem boas razões de segurança para manter-se/tmp
montado com onoexec,nodev,nosuid
conjunto de opções.fonte
Experimentar
chmod 755 script.sh
isso tornará o arquivo executável. Então tente,
./script.sh
Espero que isso funcione.
fonte
No meu win7 com admin executando o cmd; Eu tenho arquivos .sh associados ao cygwin64 / bin / bash, mas foi bloqueado pelo cmd. Nenhuma das sugestões acima ajudou (chmod, setfacl, mount).
A solução abaixo funcionou: é um acl-fixer admin sempre que pastas / arquivos ficam inacessíveis para admin no win7, o que geralmente é):
fonte