sudo 是 Linux 用户最熟悉的命令之一。
它让普通用户在授权范围内临时以更高权限执行命令,例如安装软件、修改系统配置或重启服务。
最近 sudo-rs 受到更多关注,原因是 Ubuntu 25.10 开始默认使用 Rust 实现的 sudo-rs 来替代传统 sudo。
对普通用户来说,表面上仍然输入 sudo。
真正变化在系统底层:执行的可能已经是 Rust 版本的 sudo。
这件事容易引发两个问题:
- 传统 sudo 出什么问题了吗?
- sudo-rs 会不会影响日常使用和服务器配置?
简单结论是:普通桌面用户基本不用担心;如果你维护服务器、写过复杂 sudoers 规则,或者依赖特殊 sudo 行为,就需要认真测试。
sudo-rs 是什么
sudo-rs 是用 Rust 编写的 sudo / su 实现。
它的目标不是创造一个完全不同的新命令,而是重新实现传统 sudo 的主要功能,同时利用 Rust 的内存安全特性降低常见安全风险。
传统 sudo 主要由 C 语言编写,历史很长,功能也很完整。 这种成熟度带来稳定性,也带来维护负担。 很多代码来自很早的 Unix/Linux 使用场景,后来又叠加了大量兼容逻辑、扩展和边界处理。
sudo-rs 选择重新实现,是为了获得几个好处:
- 借助 Rust 减少内存安全问题;
- 用更现代的代码结构降低维护难度;
- 去掉部分历史功能和高风险默认行为;
- 吸引熟悉 Rust 的新贡献者参与维护;
- 为未来权限提升工具提供更容易审计的基础。
不过,sudo-rs 不是传统 sudo 的 100% 兼容替代品。
它仍在发展中,一些传统功能暂时没有实现,另一些功能可能不会再实现。
普通用户会感觉到什么变化
对普通用户来说,变化很少。
你仍然这样使用:
|
|
或者:
|
|
在 Ubuntu 25.10 中,sudo 会指向 sudo-rs。
用户输入的命令不需要改成 sudo-rs,脚本里常见的 sudo 也不会因为命令名变化而立刻失效。
比较容易看到的变化是密码输入反馈。
sudo-rs 默认会在输入密码时显示星号。
传统 sudo 也可以通过配置实现类似效果,但很多发行版默认是不显示任何字符。
另外,部分错误信息和警告信息的文本可能不同。 例如密码错误、权限不足、配置不兼容时,提示内容可能和以前不完全一样。 这对人类用户影响不大,但如果某些脚本依赖解析 sudo 的错误输出,就需要检查。
管理员需要关注哪些差异
真正需要注意的是系统管理员和高级用户。
传统 sudo 的生态很大,不少服务器会有复杂的 sudoers 配置。 这些配置可能包含命令参数匹配、环境变量控制、日志、邮件通知、PAM 行为和不同主机组策略。
sudo-rs 当前和传统 sudo 存在一些差异。
例如,原文提到 sudo-rs 不包含传统 sudo 的 sendmail 支持。
过去有些环境会通过 sendmail 发送 sudo 使用通知,这类配置迁移时就需要换方案。
认证方面,sudo-rs 使用 PAM。
这意味着资源限制、umask 等行为应更多通过 PAM 配置,而不是完全依赖 sudoers 文件。
如果你过去在 sudoers 里处理了很多细节,切换前要确认这些规则是否仍然生效。
还有一个重要变化是命令参数位置的通配符支持。
sudo-rs 不支持在命令参数位置使用通配符,以避免 sudoers 文件中常见的配置错误。
这对安全是好事,但可能影响已有规则。
Ubuntu 里怎么处理 sudo 和 sudo-rs
从 Ubuntu 25.10 开始,系统默认使用 sudo-rs。
用户继续输入 sudo,底层会运行 Rust 实现。
传统 sudo 并没有马上消失。
在 Ubuntu 的过渡设计中,经典 sudo 仍然以 sudo-ws 的形式保留。
如果确实需要传统实现,可以使用 sudo-ws,或者通过 alternatives 机制切换默认 sudo。
切换命令类似这样:
|
|
不过,不建议普通用户主动切回传统 sudo。 如果你没有定制 sudoers,也没有依赖特殊行为,继续使用发行版默认选择更省心。
如果你想在旧版本 Ubuntu 上测试,sudo-rs 从 Ubuntu 24.04 开始已经可以从 universe 仓库获得。
其他发行版也可能提供对应包,但命令名称和集成方式不一定相同。
sudo-rs 为什么选择 Rust
sudo 是高权限工具。 一旦这类工具出现漏洞,后果可能比普通命令严重得多。 历史上,sudo 也出现过多个权限提升漏洞。
Rust 的优势在于内存安全。 它通过所有权、借用检查和类型系统,减少悬空指针、越界访问、use-after-free 等常见问题。 这不能保证程序绝对安全,但可以减少 C/C++ 项目里很常见的一类漏洞。
对 sudo 这种长期运行在安全敏感位置的工具来说,用更安全的语言重写有现实意义。 它不只是“为了 Rust 而 Rust”,而是试图降低维护和审计成本。
当然,语言不能解决全部安全问题。 权限检查逻辑、配置解析、PAM 交互、环境变量处理、日志和用户体验,仍然需要严谨设计和长期测试。
sudo-rs 不是唯一选择
sudo 生态里本来就有其他替代品。
比较常见的是 doas。
它来自 OpenBSD,设计更简单,配置也更小。
一些用户喜欢它,是因为它没有 sudo 那么复杂。
还有一些 Rust 或 systemd 相关的替代方案,例如 RootAsRole、systemd 的 run0 等。
不过这些工具的目标和适用场景并不完全相同。
对大多数 Linux 发行版来说,sudo 仍然是默认选择。
sudo-rs 的意义在于,它尝试在保持用户习惯的同时,把底层实现换成更现代的代码基础。
迁移前应该检查什么
如果你只是个人桌面用户,可以跟随发行版默认配置。
如果你维护服务器或工作站,建议检查这些内容:
- 是否有复杂的
/etc/sudoers或/etc/sudoers.d/规则; - 是否使用了命令参数通配符;
- 是否依赖 sudo 的邮件通知;
- 是否有脚本解析 sudo 的错误输出;
- 是否通过 sudoers 控制 umask、资源限制或环境变量;
- 是否有 LDAP、PAM、SSSD 等认证集成;
- 是否有自动化部署脚本默认假设传统 sudo 行为。
可以先在测试机上验证:
|
|
再执行关键维护命令,确认权限、环境变量和日志行为都符合预期。
是否应该主动切换到 sudo-rs
如果发行版已经默认切换,普通用户可以直接接受。 如果你使用的是服务器或生产环境,不建议只为了尝鲜手动替换。
更稳妥的做法是:
- 在测试环境安装
sudo-rs; - 对照现有 sudoers 配置逐项验证;
- 检查 PAM、日志、审计和自动化脚本;
- 确认回滚方式;
- 等发行版给出稳定集成后再迁移。
这类工具处在权限链路上,不适合用“能运行几个命令”来判断是否安全。 真正要验证的是边界条件和异常情况。
小结
sudo-rs 是传统 sudo 的 Rust 实现,目标是用更现代、更安全的代码基础承接 sudo 的核心功能。
Ubuntu 25.10 默认启用它,说明主流发行版已经开始认真推动这条路线。
对普通用户来说,变化很小。
你仍然输入 sudo,只是底层实现可能变成了 sudo-rs。
最多会注意到密码输入显示星号,或者错误提示文字略有变化。
对系统管理员来说,重点是兼容性。 如果系统里有复杂 sudoers 规则、sendmail 通知、PAM 集成、参数通配符或依赖 sudo 输出的脚本,就应该在升级前测试。
Rust 重写不是万能药,但对 sudo 这种安全敏感工具来说,减少内存安全风险、降低维护复杂度,是值得认真考虑的方向。
参考来源: