Eu notei esse problema estranho em uma caixa do Ubuntu 18.04 (Bionic Beaver) e alguns outros sistemas baseados em Debian - vou usar um netcat
binário vinculado estaticamente (uma ferramenta de rede unix) para demonstração, no entanto, o resultado é o mesmo para qualquer outro executável ELF.
Executá-lo fornece a seguinte mensagem (de qualquer diretório normal, como /tmp
):
/tmp$ ./nc
-bash: ./nc: Permission denied
As permissões com chmod
estão corretas para permissões de execução:
/tmp$ ls -lah nc
-rwxr-xr-x 1 user user 2.8M May 19 19:38 nc
Eu tentei muitas combinações, mas nenhuma funcionou, até que um amigo meu sugeriu que eu colocasse o binário /var/lib/php/session
(onde residem os PHPSESSIDs) e funciona:
/var/lib/php/session$ ./nc
Ncat: You must specify a host to connect to. QUITTING.
No entanto, ainda não consegui encontrar uma explicação para isso e php
não está presente em todos os sistemas, então o que faço nesse caso?
Isso acontece quando
/tmp
é montado com onoexec
sinalizador, o que provavelmente é o caso do seu sistema - veja a saída demount
. Isso impede que qualquer executável armazenado sob/tmp
seja executado, independentemente das permissões do arquivo. A ideia por trás da montagem/tmp
e de outros diretórios graváveis em todo o mundo, com essa configuração, é tornar mais difícil soltar binários em seu sistema e executá-los.Qualquer diretório em um volume montado sem
noexec
(como/var
, na maioria dos casos) pode ser usado para armazenar executáveis que você deseja executar. Qual diretório você deve usar depende do seu caso de uso exato.