为什么进程的“有效 UID”没有改变为文件所有者的 UID?

为什么进程的“有效 UID”没有改变为文件所有者的 UID?

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" ); 并解释每个输入行。

相关内容