Permissions
無法執行“Hello, World!”使用者不是“root”的 C 程序
我寫了一個“你好,世界!”
myCFile.c
Debian 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
是 mountnoexec
,這意味著你不能在那裡執行二進製文件。/tmp/user/1000
之所以有效,是因為它位於不同的文件系統上,就像/root
(root
的主目錄一樣)。在你的情況下,
mount -o remount,exec /persistent
應該允許您執行主目錄中的文件。