Apesar do privilégio de execução, obter permissão negada

4

Compilou um binário da fonte golang, mas não será executado. Eu tentei baixar o binário, o que também não funcionou. Todas as permissões parecem estar corretas. Executar o arquivo de ir por algum motivo funciona.

Saída de ~/go$ go run src/github.com/exercism/cli/exercism/main.go1 :

NAME:
   exercism - A command line tool to interact with http://exercism.io

USAGE:
   main [global options] command [command options] [arguments...]

Saída de ~/go/bin$ ./exercism :

bash: ./exercism: Permission denied

Saída de ~/go/bin$ ls -al :

total 9932
drwxr-xr-x 2 joshua joshua     4096 Apr 28 12:17 .
drwxr-xr-x 5 joshua joshua     4096 Apr 28 12:17 ..
-rwxr-xr-x 1 joshua joshua 10159320 Apr 28 12:17 exercism

Saída de ~/go/bin$ strace ./exercism :

execve("./exercism", ["./exercism"], [/* 42 vars */]) = -1 EACCES (Permission denied)
write(2, "strace: exec: Permission denied\n", 32strace: exec: Permission denied
) = 32
exit_group(1)                           = ?
+++ exited with 1 +++
    
por Joshua Nelson 28.04.2017 / 19:07

1 resposta

5

Verifique se noexec não está em vigor no ponto de montagem em questão. Ou escolha um lugar melhor para iniciar seu script.

$ mount | grep noexec
[ snip ]
shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime)
$ cat > /dev/shm/some_script
#!/bin/sh
echo hi
$ chmod +x /dev/shm/some_script
$ /dev/shm/some_script
bash: /dev/shm/some_script: Permission denied
$ mv /dev/shm_script .
$ ./some_script
hi

noexec existe especificamente para evitar problemas de segurança que surgem em ter locais graváveis do mundo que armazenam arquivos executáveis; você pode colocar um arquivo lá, mas outra pessoa pode reescrevê-lo antes de executá-lo, e agora você não está executando o código que pensou que fosse.

    
por 28.04.2017 / 19:34