script.sh
我有 Ubuntu 20.04 虚拟服务器。我在 /opt 中有一个已设置位的可执行文件SetUID
。
meliwex@linode:/opt$ ls -ld /opt
drwxr-xr-x 2 root root 4096 Dec 19 03:45 /opt
meliwex@linode:/opt$ ls -l
total 4
-rwsr-xr-x 1 root root 125 Dec 19 03:45 script.sh
meliwex@linode:/opt$
当我以非 root 用户身份运行此文件时,effective UID
进程没有改变,为什么?
meliwex@linode:/opt$ ./script.sh&
[1] 1200
meliwex@linode:/opt$ ps -elf | grep -i script.sh
0 S meliwex 1200 733 0 80 0 - 1756 do_wai 03:52 pts/0 00:00:00 /bin/bash ./script.sh
0 S meliwex 1205 733 0 80 0 - 1609 pipe_w 03:52 pts/0 00:00:00 grep --color=auto -i script.sh
meliwex@linode:/opt$ ps -eo pid,ruid,euid | grep -i 1200
1200 1000 1000
meliwex@linode:/opt$
这里我猜应该是:1200 1000 0
答案1
设置 shell 脚本的 suid 位是无效的。Shell 脚本不会像可执行程序那样使用 exec*() 进行分叉。相反,shell 会执行 fopen( shell_script, "r" ); 并解释每个输入行。