问题描述
如果 / usr / bin / bash 设置了suid位
为什么仅当我使用-p选项时,/usr/bin/bash -p
才将euid更改为root
-p选项代表什么?
当您从suid二进制文件中生成bash shell时,为什么 euid 设置为 root ,为什么不将 uid 设置为?
解决方法
-p
打开特权模式。在这种模式下,不会处理$ BASH_ENV和$ ENV文件,shell函数不会从环境继承,并且SHELLOPTS,BASHOPTS,CDPATH和GLOBIGNORE变量(如果它们出现在环境中)将被忽略。如果外壳程序在有效用户(组)标识与真实用户(组)标识不相等的情况下启动,并且未提供-p选项,则会执行这些操作并将有效用户标识设置为真实用户标识。如果在启动时提供了-p选项,则不会重置有效用户ID。关闭此选项会将有效的用户名和组ID设置为实际的用户名和组ID。
之所以这样做,是因为setuid shell脚本是安全漏洞的常见来源。因此,要求程序员使用-p
选项表示他们确实需要特权提升,例如通过使用
#!/usr/bin/bash -p
否则,将suid
上的/usr/bin/bash
本身设置为一个巨大的安全漏洞,因为大多数脚本在使用提升的权限运行时并未采取必要的预防措施。