
Compilé un binario de la fuente de golang, pero no se ejecutará. Intenté descargar el binario, que tampoco funcionó. Todos los permisos parecen estar correctos. Ejecutar el archivo desde go por alguna razón funciona.
Salida 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...]
Salida de ~/go/bin$ ./exercism
:
bash: ./exercism: Permission denied
Salida 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
Salida 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 +++
Respuesta1
Compruebe que noexec
no esté vigente en el punto de montaje en cuestión. O elija un lugar mejor para iniciar su 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 específicamente para evitar problemas de seguridad que surgen al tener lugares de escritura mundial que almacenan archivos ejecutables; podrías colocar un archivo allí, pero otra persona podría reescribirlo antes de ejecutarlo y ahora no estás ejecutando el código que pensabas.