man bash
我已经阅读了解释set
内置标志的部分-p
,这告诉我特权模式对 Bash 行为的一些影响,但它没有解释得足够深入(或者我只是没有足够的上下文/经验) )让我了解它的用途,即您会在什么情况下使用它。
我的困惑部分来自于这样一个事实:我读到的有关特权模式的所有内容都使它听起来像是“特权不足”是一个更合适的名称。这本身可能表明我误解了它。
我也不确定我是否理解 setuid。我熟悉有效用户 id 和真实用户 id,因为它与 相关sudo
,但听起来 setuid 是一个更广泛的概念,所以也许我错过了一些东西。
答案1
当 shell 在增强权限下运行时(例如由 setuid 程序调用),特权模式的存在是为了尝试提高安全性(通过限制潜在危险的操作)。
是的,您是正确的,因为它听起来像是“特权不足”,该-p
选项正在限制可能允许攻击的操作,方法可能是欺骗 shell 在更高特权的用户下执行命令。例如,这就是它限制启动脚本的原因,因为在这种情况下,特权用户可能不拥有或控制这些脚本。此外,从环境继承函数也可能很危险,因为可以导出诸如cd
或等可能在特权 shell 期间使用的函数ls
,然后触发可用于攻击的操作。
您还询问了“setuid”。在这种情况下,“setuid”通常指的是包含该位的二进制文件的权限04000
,例如权限04711
(或-rws--x--x
在ls
输出中)。在二进制文件中启用“setuid”位使其始终在该二进制文件所有者的有效 uid 下运行二进制。因此,每当任何用户执行 root 拥有的 setuid 二进制文件时,它都会以 root 身份运行。真正的 uid 是调用它的用户的 uid,这就是为什么effective uid != real uid
在这种情况下检查很常见。 (顺便说一句,“setgid”位也存在同样的情况,它位于02000
文件权限中。)
因此,可以使用的一个可能的场景bash -p
是 setuid 二进制文件,它以特权用户(root 或其他)身份运行并想要生成一个 shell,他们可能会用于bash -p
该场景,因为那时 bash 将尝试为了保持更安全(通过忽略环境中的启动脚本和函数,这可能很危险),并将在运行时保留有效 uid 的权限。在没有选项的情况下调用它-p
意味着 bash 将简单地忽略有效 uid(通过重置为真实 uid)并表现得好像什么也没发生一样......
这里仍然存在许多安全陷阱...因此,使用特权 bash 仍然需要大量思考安全性可能受到的影响。所采取的措施-p
可能有帮助,但需要在可能的攻击场景的整个背景下考虑。