主要观点:
sudo
和doas
等工具依赖setuid
二进制文件和特权提升来以 root 身份运行命令,设计不理想且有局限性,如整个用户会话需保留提升特权的能力、在受限用户命名空间中运行整个用户会话时不起作用、setuid
二进制文件会限制系统整体的安全性。- 一种有趣的替代方案是
[s6-sudod](https://skarnet.org/software/s6/s6-sudod.html)
,将程序分为特权服务器和非特权客户端两部分。 - 进行了一项实验,使用本地
ssh
模拟sudo
的功能,不将sshd
实例暴露到网络,实现授权用户以 root 身份运行命令且不使用特权提升。
关键信息和重要细节:
- 配置专用 SSH 密钥用于 root 身份认证,将其放在单独文件
/root/.ssh/local_keys
中。 - 运行绑定到 unix 域套接字的
sshd
服务器实例,收紧权限,覆盖PermitRootLogin
选项并使用新创建的密钥文件。 - 锁定 root 账户禁止通过常规机制登录,修改
/etc/passwd
中的 root 密码并替换特殊前缀。 - 使用
ProxyCommand
选项通过socat
或ProxyUseFdpass
连接到本地sshd
实例,最初使用socat
时存在开销问题,后找到合适的脚本passfd.py
解决。 - 结论指出该技术可行,主要依赖 OpenSSH 的安全细节,配置新主机简单,
passfd.py
脚本可改进为可执行文件放入/usr/local/bin
,ssh
命令也可放入包装器。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。