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