Estou tentando entender o sinalizador NOEXEC ao montar.
Estou tendo um problema de execução no diretório / tmp em outra máquina que não consigo acessar atm onde o diretório / tmp está montado em uma unidade diferente de '/' e NOEXEC está presente. Eu queria tentar recriar esse cenário na minha máquina, mas não tenho um segundo disco rígido. Eu tentei fazer o seguinte comando:
mount --bind /test1 /test2
Em seguida, removi o bind
sinalizador e adicionei o NOEXEC
arquivo / etc / fstab. Então, eu criei um arquivo em / test2 chamado test.sh, onde ele reproduz 'olá mundo'. Eu tento executá-lo e ele disse 'permissão negada'. Eu executei chmod 777 test.sh
e consegui executar o arquivo muito bem. Eu pensei que o sinalizador NOEXEC não deveria me permitir executar nada?
Não mount --bind /test1 /test2
é o mesmo que montar a partir de uma unidade física completamente diferente? Como em / test1 e / test2 estão em unidades diferentes?
fonte
Respostas:
A opção 'NOEXEC' flag no
mount
comando não permite a execução de binários executáveis no sistema de arquivos montado 1 . No entanto, quando um script (um arquivo de texto que começa com a linha she-bang; ou seja, uma linha que começa com#!
) é fornecido a alguns shells (bash), ele executa o executável nomeado nessa linha (por exemplo,/usr/bin/perl
) e passa o caminho do script de shell como o primeiro argumento. O intérprete real pode não estar nesse ponto de montagem.__________
1 O
mount
comando normalmente monta um sistema de arquivos . (Pode-sebind
argumentar que loopback ou montagens podem ser consideradas uma exceção a essa generalidade.) Em alguns casos (por exemplo,/tmp
), esse sistema de arquivos conterá apenas um diretório.fonte
#!/bin/sh
no topo. Eu não sei como o script shell está sendo executado, exceto por passar por java e referências / bin / sh. Se estiver referenciando / bin / sh e o diretório bin tiver privilégios de execução, por que os scripts shell não seriam executados como no meu teste?