
Habe eine Binärdatei aus dem Golang-Quellcode kompiliert, aber sie lässt sich nicht ausführen. Ich habe versucht, die Binärdatei herunterzuladen, was auch nicht funktioniert hat. Die Berechtigungen scheinen alle richtig zu sein. Das Ausführen der Datei von Go aus funktioniert aus irgendeinem Grund.
Ausgabe von ~/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...]
Ausgabe von ~/go/bin$ ./exercism
:
bash: ./exercism: Permission denied
Ausgabe von ~/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
Ausgabe von ~/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 +++
Antwort1
Überprüfen Sie, ob dies noexec
am betreffenden Einhängepunkt nicht der Fall ist. Oder wählen Sie einen besseren Ort zum Starten Ihres Skripts.
$ 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
existiert speziell, um Sicherheitsprobleme zu vermeiden, die durch allgemein beschreibbare Speicherorte für ausführbare Dateien entstehen; Sie können eine Datei dort ablegen, aber jemand anderes kann sie vor der Ausführung umschreiben, und nun führen Sie nicht den Code aus, den Sie auszuführen glaubten.