<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Rust on KnightLiブログ</title>
        <link>https://www.knightli.com/ja/tags/rust/</link>
        <description>Recent content in Rust on KnightLiブログ</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>ja</language>
        <lastBuildDate>Fri, 01 May 2026 19:27:08 +0800</lastBuildDate><atom:link href="https://www.knightli.com/ja/tags/rust/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>sudo と sudo-rs の違い：Rust 版 sudo は何を変えるのか</title>
        <link>https://www.knightli.com/ja/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/ja/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 が従来の sudo を置き換える形で、Rust 実装の &lt;code&gt;sudo-rs&lt;/code&gt; をデフォルトで使い始めるためだ。
一般ユーザーから見ると、表面上は引き続き &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 サポートを含まないことに触れている。
過去に sudo 使用通知を sendmail で送っていた環境では、移行時に別の方法を用意する必要がある。&lt;/p&gt;
&lt;p&gt;認証面では、&lt;code&gt;sudo-rs&lt;/code&gt; は PAM を使う。
そのため、リソース制限や umask などの挙動は、sudoers ファイルだけに頼るのではなく、より PAM 側で設定する必要がある。
以前 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;ほかにも、RootAsRole や systemd の &lt;code&gt;run0&lt;/code&gt; など、Rust や systemd 関連の代替案がある。
ただし、これらのツールの目的や適用場面は完全には同じではない。&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;automation やデプロイスクリプトが従来 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、ログ、監査、automation スクリプトを確認する。&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>
