【发布时间】:2020-12-20 16:01:48
【问题描述】:
如果 /usr/bin/bash 设置了 suid 位
为什么我的 euid 仅在我使用 -p 选项时才更改为 root 像这样/usr/bin/bash -p
这个 -p 选项代表什么?
当您从 suid 二进制文件生成 bash shell 时,为什么将 euid 设置为 root 而为什么不设置为 uid?
【问题讨论】:
如果 /usr/bin/bash 设置了 suid 位
为什么我的 euid 仅在我使用 -p 选项时才更改为 root 像这样/usr/bin/bash -p
这个 -p 选项代表什么?
当您从 suid 二进制文件生成 bash shell 时,为什么将 euid 设置为 root 而为什么不设置为 uid?
【问题讨论】:
-p
开启特权模式。在此模式下,不处理 $BASH_ENV 和 $ENV 文件,不从环境继承 shell 函数,并且如果 SHELLOPTS、BASHOPTS、CDPATH 和 GLOBIGNORE 变量出现在环境中,它们将被忽略。如果 shell 以不等于真实用户(组)标识的有效用户(组)标识启动,并且未提供 -p 选项,则执行这些操作并将有效用户标识设置为真实用户标识。如果在启动时提供了 -p 选项,则不会重置有效用户 ID。关闭此选项会导致有效的用户和组 ID 设置为真实的用户和组 ID。
这样做是因为 setuid shell 脚本一直是安全漏洞的常见来源。所以程序员需要使用-p选项来表明他们确实需要提权,例如通过使用
#!/usr/bin/bash -p
如果没有这个,在/usr/bin/bash 上设置suid 位本身将是一个巨大的安全漏洞,因为大多数脚本在以提升的权限运行时没有采取必要的预防措施。
【讨论】:
passwd如何选择它的默认值。