我正在学习 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 的副本并从那里调用您想要的内容。