尝试将 sh 脚本作为 setuid 位课程的一部分运行时“权限被拒绝”

尝试将 sh 脚本作为 setuid 位课程的一部分运行时“权限被拒绝”

我正在尝试完成有关 setuid 位的课程,并在 CentOS 7 VM 上完成了以下操作(通过我的 Mac 上的 Terminal.app):

  1. program.sh在他的主文件夹中创建用户 adam 和文件
  2. program.sh是一个基本脚本,其中包含:

    echo "This is a test" >> /etc/stickytestfile.txt
    
  3. 设置chmod 777以及chmod u+sprogram.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 的初始模式(权限位)并在完成后恢复它。

相关内容