![尝试将 sh 脚本作为 setuid 位课程的一部分运行时“权限被拒绝”](https://linux22.com/image/96036/%E5%B0%9D%E8%AF%95%E5%B0%86%20sh%20%E8%84%9A%E6%9C%AC%E4%BD%9C%E4%B8%BA%20setuid%20%E4%BD%8D%E8%AF%BE%E7%A8%8B%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%E8%BF%90%E8%A1%8C%E6%97%B6%E2%80%9C%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%E2%80%9D.png)
我正在尝试完成有关 setuid 位的课程,并在 CentOS 7 VM 上完成了以下操作(通过我的 Mac 上的 Terminal.app):
program.sh
在他的主文件夹中创建用户 adam 和文件program.sh
是一个基本脚本,其中包含:echo "This is a test" >> /etc/stickytestfile.txt
设置
chmod 777
以及chmod u+s
到program.sh
和/usr/bin/sh
但我仍然收到“权限被拒绝”。我应该如何进行?
-bash-4.2$ whoami
adam
-bash-4.2$ ls -al
total 32
drwsrwxrwx. 2 adam adam 4096 Oct 7 17:44 .
drwxr-xr-x. 6 root root 58 Oct 7 15:30 ..
-rw-------. 1 adam adam 853 Oct 7 19:26 .bash_history
-rw-r--r--. 1 adam adam 18 Nov 20 2015 .bash_logout
-rw-r--r--. 1 adam adam 193 Nov 20 2015 .bash_profile
-rw-r--r--. 1 adam adam 231 Nov 20 2015 .bashrc
-rw-rw-r--. 1 adam adam 29 Oct 7 16:07 adampersonalfile
-rw-rw-r--. 1 adam adam 27 Oct 7 16:07 adamsharedfile
-rwsrwxrwx. 1 root root 50 Oct 7 17:44 program.sh
-bash-4.2$ whereis sh
sh: /usr/bin/sh /usr/share/man/man1/sh.1.gz
-bash-4.2$ ls -al /usr/bin/sh
lrwxrwxrwx. 1 root root 4 Oct 2 16:05 /usr/bin/sh -> bash
-bash-4.2$ su
Password:
bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[root@localhost adam]# chmod u+s /usr/bin/sh
[root@localhost adam]# ls -al /usr/bin/sh
lrwxrwxrwx. 1 root root 4 Oct 2 16:05 /usr/bin/sh -> bash
[root@localhost adam]# exit
exit
-bash-4.2$ sh program.sh
program.sh: line 1: /etc/stickytest.txt: Permission denied
答案1
看看调用部分bash 手册页,bash(1):
如果 shell 启动时有效用户(组)id 不等于真实用户(组)id,并且-p未提供选项,...,并且有效用户id设置为真实用户id。如果-p选项在调用时提供,启动行为相同,但有效用户 ID 不会重置。
(强调是添加的。)
如果您运行 bash 时没有-p
选项,如果它正在运行setuid(有效用户id不等于真实用户id),它立即“放弃权限”;即恢复到您的真实身份。
顺便说一句,您使用了错误的术语。您所说的位是 setuid 位,而不是粘性位。
PS 我希望您遵循的说明告诉您一定要设置确定 bash 的初始模式(权限位)并在完成后恢复它。