Executando o script sh: «Permissão negada» apesar dos direitos de root e de bits executáveis

17

Instalei o Debian no VirtualBox (para vários experimentos que geralmente interrompiam meu sistema) e tentei iniciar o script de complemento de convidado do VirtualBox. Entrei como root e tentei iniciar autorun.sh, mas recebi a «Permissão negada». ls -lmostra que o script tem direitos executáveis.

Desculpe, mas não posso copiar a saída - o VirtualBox não tem absolutamente nenhum uso sem o complemento, pois nem um diretório compartilhado nem uma área de transferência compartilhada funcionam. Mas, para ter certeza, copiei os direitos manualmente:

#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh

A princípio, pensei que o script executasse algo que deu o erro. Tentei substituir /bin/shpor algo como #/pathtorealsh/sh -xv, mas não obtive saída - parece que o script nem pode ser executado.

Eu nem tenho uma idéia do que poderia causar isso.

Olá anjo
fonte
2
Parece que deve funcionar. Tente executá-lo com o bash explicitamente: `bash -x ./autorun.sh". Talvez isso dê uma pista adicional.
nobar
2
Do que é produzido mount | grep noexec?
cuonglm
1
@Gnouc, você está certo, o «cdrom» montado tem o noexecconjunto. Provavelmente você pode publicá-lo como resposta; Enquanto isso, estou tentando remontar com direitos de execução. Humm, eu nem sabia que o sistema de arquivos poderia ter esse atributo.
Hi-Angel
E se você tentar executá-lo, o sh ./autorun.shque acontece?
infixado em 05/04

Respostas:

29

Talvez o seu sistema de arquivos esteja montado com o noexecconjunto de opções, para que você não possa executar nenhum arquivo executável. Na documentação da montagem :

noexec

Não permita a execução direta de nenhum binário no sistema de arquivos montado. (Até recentemente, era possível executar binários de qualquer maneira usando um comando como /lib/ld*.so / mnt / binary. Esse truque falha desde o Linux 2.4.25 / 2.6.0.)

Experimentar:

mount | grep noexec

Em seguida, verifique se o seu sistema de arquivos está listado na saída.

Se sim, você pode resolver esse problema, montando novamente o sistema de arquivos com a execopção:

mount -o remount,exec filesystem
cuonglm
fonte
Isso não funcionou para mim. Eu tive que desmontar e depois remontar normalmente. Então funcionou bem.
datakid 23/06
@datakid: Qual é o seu fs?
cuonglm
Estou tendo esse problema com o debian 9, alguns arquivos têm permissão negada se os scripts estiverem sendo executados como root, mas se identificam como root ... como um comportamento do Windows, se eu remover e o script funcionou! = [
Luciano Andress Martini
Eu estava recebendo uma mensagem muito estranha, que acabou por ser por causa de noexec: "sh: 75: script.sh: Permissão negada"
tmm1
2

bash -x ./filename.filetypeDeveria trabalhar. Funcionou para mim quando recebi permissão negada como usuário root.

Stephen Howe
fonte
Não, como no final o problema acabou sendo a noexecopção de montagem, isso não funcionará, porque pode haver mais arquivos que precisam ser executados; ou seja, o filename.filetypesuspiro ao tentar executar outros arquivos do mesmo sistema de arquivos. Você pode verificá-lo facilmente com um teste simplificado: crie um script de duas linhas que imprima "olá" e depois se chame novamente, mas não defina direitos executáveis. Se você executá-lo com -x, ele imprimiria "olá", mas a linha de chamada recursiva provocaria um erro.
Angel
1

Minha solução para esse problema é usar a fonte . Eu estava em um volume de armazenamento de dados muito importantes. Este volume é montado como noexec. Eu tenho um script de shell simples que é executável, mas tenho problema de permissão.

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

Apenas testado no meu Ubuntu.

Kemin Zhou
fonte