![为什么这个 setUID 示例不起作用?](https://linux22.com/image/78975/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B8%AA%20setUID%20%E7%A4%BA%E4%BE%8B%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F%20.png)
我正在学习 setuid 和 setgid,其中执行脚本的用户将在运行脚本时继承所有者的权限。为了测试这一点,我在 /home/ Fiverr/test.sh 中以用户 Fiverr 身份创建了一个 bash,权限为 4755。
rwsr-xr-x 1 fiverr fiverr 39 Dec 6 13:47 /home/fiverr/test.sh
它包含以下内容:
#!/bin/bash
touch /home/fiverr/raza.txt
我以我(raza)身份登录并尝试执行它,但我的权限被拒绝。怎么会?
touch: cannot touch ‘/home/fiverr/raza.txt’: Permission denied
答案1
由于安全措施的原因,尝试设置 bash 脚本的 uid 是行不通的。过去,setuid/setgid 功能被滥用来提升权限,以至于现在存在一些限制,包括 bash 二进制文件和扩展 bash 脚本不能继承/放弃 setuid/setgid 权限,并且只有 root 才能在现代中创建 setuid 文件Linux 发行版。
如果你想运行它,你必须在使用用 C 编译的二进制包装器或完全在二进制文件中执行之前获取 setuid。
如果在 Debian 中,您可以设置 /bin/dash 的副本并从那里调用您想要的内容。