Permissions

無法執行“Hello, World!”使用者不是“root”的 C 程序

  • September 8, 2021

我寫了一個“你好,世界!” myCFile.cDebian OS 上 x86 嵌入式板上的C 文件。

#include <stdio.h>
int main()
{
 printf("hello\n")
}

我編譯程序:gcc myCFile.c

然而,

tester@localhost:~/test$ ./a.out
-bash: ./a.out: Permission denied
tester@localhost:~/pravin$ ls -lrt
total 44
-rwxrwxrwx 1 tester test   54 Sep  7 07:33 myCFile.c
-rwxrwxrwx 1 tester test   16608 Sep  7 07:33 a.out

但是,如果我複製a.out/run/user/1000,我可以執行它。

tester@localhost:/run/user/1000$ ls
a.out  bus  gnupg  systemd

另外,當我用root使用者編譯C文件並執行它時,我可以執行它。我可以執行它。

root@localhost:~# gcc myCFile.c
root@localhost:~# ./a.out
hello
root@localhost:~#

是不是和NOEXEC國旗有關?

我的/etc/fstab文件:

# Begin /etc/fstab
/dev/root    /        ext4        defaults        0    0 proc
/proc        proc        nosuid,noexec,nodev    0    0 sysfs        /sys        sysfs        nosuid,noexec,nodev    0    0 devpts
/dev/pts    devpts        gid=5,mode=620        0    0 tmpfs
/run        tmpfs        defaults,size=1500M    0    0 devtmpfs
/dev        devtmpfs    mode=0755,nosuid    0    0
# End /etc/fstab
LABEL=persistent    /persistent    ext4    defaults,data=journal,noatime,nosuid,nodev,noexec    0    2
/persistent/home    /home    none    defaults,bind    0    0
/persistent/tmp    /tmp    none    defaults,bind    0    0

是否與 NOEXEC 標誌相關?

是的; 大概/home是 mount noexec,這意味著你不能在那裡執行二進製文件。/tmp/user/1000之所以有效,是因為它位於不同的文件系統上,就像/rootroot的主目錄一樣)。

在你的情況下,

mount -o remount,exec /persistent

應該允許您執行主目錄中的文件。

引用自:https://unix.stackexchange.com/questions/667998