无法执行“Hello, World!” C 程序的用户不是“root”

无法执行“Hello, World!” C 程序的用户不是“root”

我写了一个“你好世界!”myCFile.cDebian 操作系统 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

答案1

与 NOEXEC 标志相关吗?

是的;大概/home是 mount noexec,这意味着你不能在那里运行二进制文件。/tmp/user/1000之所以有效,是因为它位于不同的文件系统上,就像/rootroot的主目录)一样。

就你而言,

mount -o remount,exec /persistent

应该允许您执行主目录中的文件。

相关内容