man visudo
解释 visudo 将不会(默认情况下)使用EDITOR
环境VISUAL
变量。
它指出
“如果 visudo 使用的编辑器允许 shell 转义,则没有简单的方法可以阻止用户获得 root shell。”
现在我很困惑安全风险到底在哪里。我相信
- 只有 root 可以使用 visudo 进行编辑
/etc/sudoers
- 只有 root 可以更改 root 的环境变量
- root 已经有 root shell
可能有一个用例不成立,但我想不起来。
答案1
严格来说,我认为运行任意编辑器不会带来额外的安全风险visudo
。显然,运行的用户visudo
已经具有编辑权限/etc/sudoers
,因此能够添加允许在系统上执行任何其他命令的规则。因此,无论运行哪个编辑器,用户都可以visudo
通过添加新的 sudo 规则来间接执行他们想要的任何内容。
我认为文档中有关EDITOR
和VISUAL
环境变量的建议是关于在绕过 sudo 的标准日志记录时执行 root shell(或任意命令)。默认情况下,sudo 将所有成功和不成功的身份验证记录到系统日志中。这为系统管理员提供了有关哪些用户通过 sudo 执行哪些命令的审计跟踪。如果用户使用 进行更改/etc/sudoers
,visudo
则可以通过校验和或查看文件来查看。但是,如果用户可以通过 获得 root shell visudo
,他们就可以执行任意命令,而无需任何审计跟踪。
因此,安全风险与授予 run 权限相同sudo bash
,即具有该权限的用户可以获得 root shell 并执行任意代码,而不会限制或记录所运行的命令。