<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>系统管理 on KnightLi的博客</title>
        <link>https://www.knightli.com/tags/%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86/</link>
        <description>Recent content in 系统管理 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Fri, 01 May 2026 19:27:08 +0800</lastBuildDate><atom:link href="https://www.knightli.com/tags/%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>sudo 和 sudo-rs 有什么区别：Rust 版本 sudo 会改变什么</title>
        <link>https://www.knightli.com/2026/05/01/sudo-vs-sudo-rs-rust-linux-command/</link>
        <pubDate>Fri, 01 May 2026 19:27:08 +0800</pubDate>
        
        <guid>https://www.knightli.com/2026/05/01/sudo-vs-sudo-rs-rust-linux-command/</guid>
        <description>&lt;p&gt;&lt;code&gt;sudo&lt;/code&gt; 是 Linux 用户最熟悉的命令之一。
它让普通用户在授权范围内临时以更高权限执行命令，例如安装软件、修改系统配置或重启服务。&lt;/p&gt;
&lt;p&gt;最近 &lt;code&gt;sudo-rs&lt;/code&gt; 受到更多关注，原因是 Ubuntu 25.10 开始默认使用 Rust 实现的 &lt;code&gt;sudo-rs&lt;/code&gt; 来替代传统 sudo。
对普通用户来说，表面上仍然输入 &lt;code&gt;sudo&lt;/code&gt;。
真正变化在系统底层：执行的可能已经是 Rust 版本的 sudo。&lt;/p&gt;
&lt;p&gt;这件事容易引发两个问题：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;传统 sudo 出什么问题了吗？&lt;/li&gt;
&lt;li&gt;sudo-rs 会不会影响日常使用和服务器配置？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;简单结论是：普通桌面用户基本不用担心；如果你维护服务器、写过复杂 sudoers 规则，或者依赖特殊 sudo 行为，就需要认真测试。&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-是什么&#34;&gt;sudo-rs 是什么
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; 是用 Rust 编写的 sudo / su 实现。
它的目标不是创造一个完全不同的新命令，而是重新实现传统 sudo 的主要功能，同时利用 Rust 的内存安全特性降低常见安全风险。&lt;/p&gt;
&lt;p&gt;传统 sudo 主要由 C 语言编写，历史很长，功能也很完整。
这种成熟度带来稳定性，也带来维护负担。
很多代码来自很早的 Unix/Linux 使用场景，后来又叠加了大量兼容逻辑、扩展和边界处理。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; 选择重新实现，是为了获得几个好处：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;借助 Rust 减少内存安全问题；&lt;/li&gt;
&lt;li&gt;用更现代的代码结构降低维护难度；&lt;/li&gt;
&lt;li&gt;去掉部分历史功能和高风险默认行为；&lt;/li&gt;
&lt;li&gt;吸引熟悉 Rust 的新贡献者参与维护；&lt;/li&gt;
&lt;li&gt;为未来权限提升工具提供更容易审计的基础。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;不过，&lt;code&gt;sudo-rs&lt;/code&gt; 不是传统 sudo 的 100% 兼容替代品。
它仍在发展中，一些传统功能暂时没有实现，另一些功能可能不会再实现。&lt;/p&gt;
&lt;h2 id=&#34;普通用户会感觉到什么变化&#34;&gt;普通用户会感觉到什么变化
&lt;/h2&gt;&lt;p&gt;对普通用户来说，变化很少。&lt;/p&gt;
&lt;p&gt;你仍然这样使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或者：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在 Ubuntu 25.10 中，&lt;code&gt;sudo&lt;/code&gt; 会指向 &lt;code&gt;sudo-rs&lt;/code&gt;。
用户输入的命令不需要改成 &lt;code&gt;sudo-rs&lt;/code&gt;，脚本里常见的 &lt;code&gt;sudo&lt;/code&gt; 也不会因为命令名变化而立刻失效。&lt;/p&gt;
&lt;p&gt;比较容易看到的变化是密码输入反馈。
&lt;code&gt;sudo-rs&lt;/code&gt; 默认会在输入密码时显示星号。
传统 sudo 也可以通过配置实现类似效果，但很多发行版默认是不显示任何字符。&lt;/p&gt;
&lt;p&gt;另外，部分错误信息和警告信息的文本可能不同。
例如密码错误、权限不足、配置不兼容时，提示内容可能和以前不完全一样。
这对人类用户影响不大，但如果某些脚本依赖解析 sudo 的错误输出，就需要检查。&lt;/p&gt;
&lt;h2 id=&#34;管理员需要关注哪些差异&#34;&gt;管理员需要关注哪些差异
&lt;/h2&gt;&lt;p&gt;真正需要注意的是系统管理员和高级用户。&lt;/p&gt;
&lt;p&gt;传统 sudo 的生态很大，不少服务器会有复杂的 sudoers 配置。
这些配置可能包含命令参数匹配、环境变量控制、日志、邮件通知、PAM 行为和不同主机组策略。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; 当前和传统 sudo 存在一些差异。
例如，原文提到 &lt;code&gt;sudo-rs&lt;/code&gt; 不包含传统 sudo 的 sendmail 支持。
过去有些环境会通过 sendmail 发送 sudo 使用通知，这类配置迁移时就需要换方案。&lt;/p&gt;
&lt;p&gt;认证方面，&lt;code&gt;sudo-rs&lt;/code&gt; 使用 PAM。
这意味着资源限制、umask 等行为应更多通过 PAM 配置，而不是完全依赖 sudoers 文件。
如果你过去在 sudoers 里处理了很多细节，切换前要确认这些规则是否仍然生效。&lt;/p&gt;
&lt;p&gt;还有一个重要变化是命令参数位置的通配符支持。
&lt;code&gt;sudo-rs&lt;/code&gt; 不支持在命令参数位置使用通配符，以避免 sudoers 文件中常见的配置错误。
这对安全是好事，但可能影响已有规则。&lt;/p&gt;
&lt;h2 id=&#34;ubuntu-里怎么处理-sudo-和-sudo-rs&#34;&gt;Ubuntu 里怎么处理 sudo 和 sudo-rs
&lt;/h2&gt;&lt;p&gt;从 Ubuntu 25.10 开始，系统默认使用 &lt;code&gt;sudo-rs&lt;/code&gt;。
用户继续输入 &lt;code&gt;sudo&lt;/code&gt;，底层会运行 Rust 实现。&lt;/p&gt;
&lt;p&gt;传统 sudo 并没有马上消失。
在 Ubuntu 的过渡设计中，经典 sudo 仍然以 &lt;code&gt;sudo-ws&lt;/code&gt; 的形式保留。
如果确实需要传统实现，可以使用 &lt;code&gt;sudo-ws&lt;/code&gt;，或者通过 alternatives 机制切换默认 sudo。&lt;/p&gt;
&lt;p&gt;切换命令类似这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --config sudo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;不过，不建议普通用户主动切回传统 sudo。
如果你没有定制 sudoers，也没有依赖特殊行为，继续使用发行版默认选择更省心。&lt;/p&gt;
&lt;p&gt;如果你想在旧版本 Ubuntu 上测试，&lt;code&gt;sudo-rs&lt;/code&gt; 从 Ubuntu 24.04 开始已经可以从 universe 仓库获得。
其他发行版也可能提供对应包，但命令名称和集成方式不一定相同。&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-为什么选择-rust&#34;&gt;sudo-rs 为什么选择 Rust
&lt;/h2&gt;&lt;p&gt;sudo 是高权限工具。
一旦这类工具出现漏洞，后果可能比普通命令严重得多。
历史上，sudo 也出现过多个权限提升漏洞。&lt;/p&gt;
&lt;p&gt;Rust 的优势在于内存安全。
它通过所有权、借用检查和类型系统，减少悬空指针、越界访问、use-after-free 等常见问题。
这不能保证程序绝对安全，但可以减少 C/C++ 项目里很常见的一类漏洞。&lt;/p&gt;
&lt;p&gt;对 sudo 这种长期运行在安全敏感位置的工具来说，用更安全的语言重写有现实意义。
它不只是“为了 Rust 而 Rust”，而是试图降低维护和审计成本。&lt;/p&gt;
&lt;p&gt;当然，语言不能解决全部安全问题。
权限检查逻辑、配置解析、PAM 交互、环境变量处理、日志和用户体验，仍然需要严谨设计和长期测试。&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-不是唯一选择&#34;&gt;sudo-rs 不是唯一选择
&lt;/h2&gt;&lt;p&gt;sudo 生态里本来就有其他替代品。&lt;/p&gt;
&lt;p&gt;比较常见的是 &lt;code&gt;doas&lt;/code&gt;。
它来自 OpenBSD，设计更简单，配置也更小。
一些用户喜欢它，是因为它没有 sudo 那么复杂。&lt;/p&gt;
&lt;p&gt;还有一些 Rust 或 systemd 相关的替代方案，例如 RootAsRole、systemd 的 &lt;code&gt;run0&lt;/code&gt; 等。
不过这些工具的目标和适用场景并不完全相同。&lt;/p&gt;
&lt;p&gt;对大多数 Linux 发行版来说，sudo 仍然是默认选择。
&lt;code&gt;sudo-rs&lt;/code&gt; 的意义在于，它尝试在保持用户习惯的同时，把底层实现换成更现代的代码基础。&lt;/p&gt;
&lt;h2 id=&#34;迁移前应该检查什么&#34;&gt;迁移前应该检查什么
&lt;/h2&gt;&lt;p&gt;如果你只是个人桌面用户，可以跟随发行版默认配置。&lt;/p&gt;
&lt;p&gt;如果你维护服务器或工作站，建议检查这些内容：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;是否有复杂的 &lt;code&gt;/etc/sudoers&lt;/code&gt; 或 &lt;code&gt;/etc/sudoers.d/&lt;/code&gt; 规则；&lt;/li&gt;
&lt;li&gt;是否使用了命令参数通配符；&lt;/li&gt;
&lt;li&gt;是否依赖 sudo 的邮件通知；&lt;/li&gt;
&lt;li&gt;是否有脚本解析 sudo 的错误输出；&lt;/li&gt;
&lt;li&gt;是否通过 sudoers 控制 umask、资源限制或环境变量；&lt;/li&gt;
&lt;li&gt;是否有 LDAP、PAM、SSSD 等认证集成；&lt;/li&gt;
&lt;li&gt;是否有自动化部署脚本默认假设传统 sudo 行为。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;可以先在测试机上验证：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;再执行关键维护命令，确认权限、环境变量和日志行为都符合预期。&lt;/p&gt;
&lt;h2 id=&#34;是否应该主动切换到-sudo-rs&#34;&gt;是否应该主动切换到 sudo-rs
&lt;/h2&gt;&lt;p&gt;如果发行版已经默认切换，普通用户可以直接接受。
如果你使用的是服务器或生产环境，不建议只为了尝鲜手动替换。&lt;/p&gt;
&lt;p&gt;更稳妥的做法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在测试环境安装 &lt;code&gt;sudo-rs&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;对照现有 sudoers 配置逐项验证；&lt;/li&gt;
&lt;li&gt;检查 PAM、日志、审计和自动化脚本；&lt;/li&gt;
&lt;li&gt;确认回滚方式；&lt;/li&gt;
&lt;li&gt;等发行版给出稳定集成后再迁移。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这类工具处在权限链路上，不适合用“能运行几个命令”来判断是否安全。
真正要验证的是边界条件和异常情况。&lt;/p&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; 是传统 sudo 的 Rust 实现，目标是用更现代、更安全的代码基础承接 sudo 的核心功能。
Ubuntu 25.10 默认启用它，说明主流发行版已经开始认真推动这条路线。&lt;/p&gt;
&lt;p&gt;对普通用户来说，变化很小。
你仍然输入 &lt;code&gt;sudo&lt;/code&gt;，只是底层实现可能变成了 &lt;code&gt;sudo-rs&lt;/code&gt;。
最多会注意到密码输入显示星号，或者错误提示文字略有变化。&lt;/p&gt;
&lt;p&gt;对系统管理员来说，重点是兼容性。
如果系统里有复杂 sudoers 规则、sendmail 通知、PAM 集成、参数通配符或依赖 sudo 输出的脚本，就应该在升级前测试。&lt;/p&gt;
&lt;p&gt;Rust 重写不是万能药，但对 sudo 这种安全敏感工具来说，减少内存安全风险、降低维护复杂度，是值得认真考虑的方向。&lt;/p&gt;
&lt;p&gt;参考来源：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://itsfoss.com/sudo-vs-sudo-rs/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;It&amp;rsquo;s FOSS：sudo vs sudo-rs: What You Need to Know&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/trifectatechfoundation/sudo-rs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;sudo-rs GitHub 项目&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
