web-dev-qa-db-ja.com

実行権限にもかかわらず、権限の取得が拒否されました

Golangソースからバイナリをコンパイルしましたが、実行されません。バイナリをダウンロードしようとしましたが、これも機能しませんでした。権限はすべて正しいようです。何らかの理由でgoからファイルを実行すると機能します。

~/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...]

~/go/bin$ ./exercismの出力:

bash: ./exercism: Permission denied

~/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

~/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 +++
5
Joshua Nelson

問題のマウントポイントでnoexecが有効になっていないことを確認します。または、スクリプトを起動するのに適した場所を選択します。

$ 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は、実行可能ファイルを格納する世界中の書き込み可能な場所に起因するセキュリティの問題を防ぐために存在します。あなたはそこにファイルを置くかもしれませんが、実行する前に誰かがそれを書き直すかもしれません、そして今あなたはあなたが思っていたコードを実行していません。

7
Michael Mol