儘管有執行權限,但獲得許可被拒絕

儘管有執行權限,但獲得許可被拒絕

從 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 +++

答案1

檢查該設定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專門用於防止因儲存可執行檔的全域可寫入位置而產生的安全性問題;你可能把一個文件放在那裡,但其他人可能會在你執行它之前重寫它,而現在你並沒有執行你認為的程式碼。

相關內容