我写了一个“你好世界!”myCFile.c
Debian 操作系统 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
之所以有效,是因为它位于不同的文件系统上,就像/root
(root
的主目录)一样。
就你而言,
mount -o remount,exec /persistent
应该允许您执行主目录中的文件。