sudo-rsは、Linuxの権限昇格コマンドsudoとsuをRustで書き直した実装です。Ubuntu 25.10で既定のsudoになり、2026年4月23日リリースのUbuntu 26.04 LTSにもそのまま引き継がれました。普段どおりsudoと打てば、中身はもうRust版です。
この記事では、2026年9月時点の最新版0.2.15と各ディストリビューションの収録版、従来のsudoと挙動が変わる箇所、公表済みの脆弱性6件と修正版、元のsudoへ戻す手順を整理します。根拠はsudo-rsのGitHubリポジトリ(ソースコード・CHANGELOG・セキュリティアドバイザリ)と、Ubuntuの配布パッケージに含まれるインストールスクリプトです。
まとめ:sudo-rsの現状と押さえるべき変更点(2026年9月時点)
- 開発は非営利団体Trifecta Tech Foundation。対応OSはLinuxとFreeBSDのみ
- 最新版は0.2.15(2026年8月31日)。Ubuntu 26.04の収録版は0.2.13をベースに修正を足した
0.2.13-0ubuntu1.2 - Ubuntuでは
update-alternativesの優先度でsudo-rs(50)が従来のsudo(40)に勝つため、既定でRust版が動く - 従来と変わる主な点は、パスワード入力時の
*表示が既定オン、sudo -Eが警告付きで無視、sudoersの引数ワイルドカードは末尾の*だけ、の3つ - 直近の脆弱性はsudoeditのシンボリックリンク競合(GHSA-f42v-x7gq-phc8)。0.2.8〜0.2.14が該当し、0.2.15で修正。Ubuntu 26.04は2026年9月1日の更新で修正済み
- 元のsudoへ戻すには
sudo update-alternatives --config sudoで/usr/bin/sudo.wsを選ぶ
sudoersに正規表現・LDAP・メール通知・入出力ログを使っている環境は、移行前に代替手段を確保する必要があります。設定の書き換えだけでは補えない機能があるため、要件を満たせなければ従来sudoを継続してください。以下で順に根拠を示します。
sudo-rsの開発体制とコード規模
sudo-rsは、Let’s Encryptを運営するISRGのメモリ安全プロジェクト(memorysafety.org)として始まり、Tweede golfとFerrous Systemsが開発しました。現在の所有・保守はTrifecta Tech Foundationで、コアチームはMarc Schoolderman氏とBjörn Baron氏です。ライセンスはMITとApache 2.0のデュアルです。
公式FAQに見るsudo-rsのコード規模とunsafeの割合
公式FAQによると、sudo-rsは約40,000行のRustコードのうち25,000行がテストで、本番コードは約15,000行です。そのうちunsafeブロックは350行未満で、主にsetuidやPAMなどCライブラリとの境界にあります。対して従来のsudo(Todd Miller氏が保守するC実装)は180,000行を超えます。
規模を絞った理由は、使われない機能を最初から実装しない方針にあります。require_ttyのように意味が薄いと判断した設定は入れず、メール送信やネットワーク接続も意図的に持ちません。一方でuse_ptyとenv_resetは、主要ディストリの従来sudoで有効化されていたため既定オンにしています。
監査2回と、原典sudoの脆弱性が波及しなかった例
外部監査はRadically Open Securityが2回実施しています。2023年8月のv0.2.0監査では、セッションファイルのパストラバーサル(CVE-2023-42456)が見つかり、同じ問題が従来のsudoにもあったため双方で修正されました。2025年8月のv0.2.8監査では新しい脆弱性は出ていません。
機能を絞った効果もあります。従来sudoの--chrootを悪用するCVE-2025-32463と、ホスト指定を迂回するCVE-2025-32462は、該当機能を持たないsudo-rsには影響しませんでした。ただし、sudo-rsにも論理バグ由来の脆弱性は出ています(後述)。Rust製だから脆弱性ゼロ、ではありません。
Ubuntu 25.10・26.04でsudo-rsが既定になる仕組み
Ubuntuでは、ソースパッケージrust-sudo-rsから作られるsudo-rsパッケージがRust版を提供します。2026年9月13日時点の収録版は次のとおりです。
| リリース | sudo-rsの版 | サポート |
|---|---|---|
| Ubuntu 26.04 LTS | 0.2.13-0ubuntu1.2(2026-09-01) | 2031年5月まで |
| Ubuntu 25.10 | 0.2.8-1ubuntu5.3(2026-01-27) | 2026-07-09に終了 |
Ubuntu 25.10はサポートが終わっており、後述するsudoeditの脆弱性(0.2.8以降が該当)の修正は配信されません。25.10のまま運用しているマシンは26.04へ上げてください。26.04全体の変更点はUbuntu 26.04 LTS(Resolute Raccoon)の解説、コマンド群のRust実装への切り替えはUbuntu 26.04での変更点を含むLinuxコマンド一覧にまとめています。
update-alternativesの優先度50と40
Ubuntu 26.04のsudo-rsパッケージは、インストール時に/usr/lib/cargo/bin/sudoを優先度50で/usr/bin/sudoの候補に登録します。従来のsudoパッケージ(1.9.17p2)は、C版を/usr/bin/sudo.wsという名前で置き、優先度40で登録します。自動モードでは数値の大きい方が選ばれるので、両方が入っていてもRust版が動きます。
切り替わるのはsudo・visudo・sudoeditとそのmanページだけです。suは対象外で、Rust版はsu-rsというコマンド名で同梱されます。今どちらが動いているかは次で確認できます。
update-alternatives --display sudo
sudo -V | head -n 1
sudo -Vの1行目がsudo-rsで始まればRust版、Sudo version 1.9.17p2のように出れば従来版です。
元のsudo(sudo.ws)へ戻す手順
従来版が入っていなければ先にsudoパッケージを入れ、alternativesでsudo.wsを選びます。
sudo apt install sudo
sudo update-alternatives --config sudo
# 対話なしで固定する場合
sudo update-alternatives --set sudo /usr/bin/sudo.ws
# 優先度どおりの自動選択(sudo-rs)に戻す場合
sudo update-alternatives --auto sudo
--setや--configで選ぶと手動モードになり、パッケージ更新で勝手にsudo-rsへ戻ることはありません。リモートのサーバーで作業するときは、rootシェルを別セッションで開いたまま切り替えてください。sudoersの解釈を誤るとsudo自体が使えなくなり、ログイン中のシェルが唯一の復旧経路になります。
設定ファイルは両実装で共有です。sudo-rsは/etc/sudoers-rsがあればそちらを、無ければ/etc/sudoersを読みます。Rust版だけに別の設定を与えたい場合に使えます。
ディストリビューション別の導入コマンドと収録版
Ubuntu以外の多くのディストリビューションは、従来のsudoと衝突しないようsudo-rsという別名で入れます。各パッケージリポジトリの2026年9月12日時点の版です。
| ディストリビューション | 収録版 | 導入コマンド | 呼び出し名 |
|---|---|---|---|
| Debian 13(trixie) | 0.2.5-5+deb13u1 | apt-get install sudo-rs | sudo-rs |
| Debian testing・unstable | 0.2.15-1 | apt-get install sudo-rs | sudo-rs |
| Arch Linux(extra) | 0.2.15-1 | pacman -S sudo-rs | sudo-rs・su-rs |
| Fedora 43・44 | 0.2.14 | dnf install sudo-rs | sudo-rs・su-rs |
| NixOS | チャネル依存 | security.sudo-rs.enable = true; | sudo(置換) |
| Alpine Linux | community | apk add sudo-rs | sudo(置換) |
| FreeBSD | ports | pkg install sudo-rs | sudo(置換) |
Debian 13の0.2.5は2025年4月の版で、セキュリティ修正は取り込まれているもののsudoeditやNOEXEC:がありません。さらにパッケージの設定不備でsu-rsにsetuidビットが付いておらず使えないと、公式READMEに明記されています。Debianでsudoの名前のまま呼びたい場合は/usr/lib/cargo/binをPATHの先頭に足します。この変更はPATHを継承するスクリプトやプログラムにも影響します。ただし、絶対パスでsudoを呼ぶ処理や、独自のPATHを使うサービスには反映されません。
Fedoraの収録版は0.2.14です。sudoeditを細かく許可するルールをsudo-rsで使う場合は、後述のGHSA-f42v-x7gq-phc8の修正が取り込まれているかをパッケージの更新履歴で確かめてください。公式のビルド済みtarballはx86-64 Linux向けのみで、/usr/localに展開します。従来sudoが入っていない環境では/etc/pam.d/sudoと/etc/pam.d/sudo-iも自分で用意する必要があります。ソースからのビルドにはRust 1.85以降とPAMの開発ファイルが要ります。
従来のsudoと挙動が変わる箇所
既定の設定で使う限り、差はほとんど目に入りません。引っかかるのは、環境変数の引き継ぎに頼るスクリプトと、sudoersを作り込んだサーバーです。
パスワード入力時の*表示(pwfeedback)が既定オン
0.2.13(2026年3月10日)からDefaults pwfeedbackが既定で有効になり、入力した文字数だけ*が出ます。Ubuntuはそれ以前から独自パッチで同じ挙動にしていました。プロンプトは[sudo: authenticate] Password:という表記です。
入力中にTABキーを押すと、その回だけ表示を消せます。常に消したい場合はvisudoで次の1行を足します。
Defaults !pwfeedback
文字数が画面に出ること自体を嫌う組織は、イメージ作成時にこの行を入れておくのが確実です。
sudo -Eは警告付きで無視、env_resetは常に有効
sudo-rs 0.2.15のソースでは、値なしの-E(--preserve-env)を受け取るとpreserving the entire environment is not supported, '-E' is ignoredと警告を出して処理を続けます。エラーで止まらないため、sudo -Eでhttp_proxyなどを丸ごと引き継いでいたスクリプトは、変数が渡らないまま実行されます。
必要な変数は名前を列挙して渡します。
sudo --preserve-env=http_proxy,https_proxy apt update
sudoers側で恒久的に許すならDefaults env_keep += "http_proxy https_proxy"を足します。sudo-rsのmanページには、env_resetは無効化できないと明記されており、Defaults !env_resetを書いても最小限の環境で実行されます。0.2.11からはMAIL環境変数も設定されなくなりました。
sudoersで通らない書き方と無視される設定
sudoersの解釈差は、切り替え後にsudoが通らなくなる直接の原因です。ソースコードとmanページで確認できた扱いを並べます。
| sudoersの記述 | sudo-rsでの扱い |
|---|---|
| 引数の途中のワイルドカード | 構文エラー(0.2.13以降はvisudoが明示) |
| 最後の引数に単独の * | 0個以上の引数として許可 |
| 正規表現(^ で始まる指定) | regular expressions are not supported |
| sha256: 等のダイジェスト指定 | digest specifications are not supported |
| Defaults logfile・log_output・requiretty | unknown setting(設定名が無い) |
| Defaults mail_badpass・insults・lecture | 読み込むが無視 |
| sudoersのLDAP格納 | 非対応 |
引数ワイルドカードの禁止は、引数の途中にワイルドカードを置いた/usr/bin/systemctl restart app-*.serviceのような行は、sudo-rsでは構文エラーになります。manページは、従来sudoでの引数ワイルドカードは設定ミスの兆候だったと説明しています。末尾の単独*も、/usr/bin/systemctl restart *と書けば任意のサービスを再起動できてしまうため、サービス名ごとに1行ずつ書き分けてください。切り替え前にroot権限でsudo-rs版のvisudoを実行して既存のsudoersを検査すると(Ubuntuではsudo /usr/lib/cargo/bin/visudo -c)、通らない行を事前に洗い出せます。
sudo-rsの脆弱性一覧と修正版
sudo-rsのGitHubで公開されているセキュリティアドバイザリは、2026年9月13日時点で6件です。いずれもメモリ安全性の問題ではなく、パスの扱いや認証記録といった論理の誤りです。
| アドバイザリ | CVE | CVSS | 影響版 | 修正版 |
|---|---|---|---|---|
| GHSA-f42v-x7gq-phc8 | 未採番 | 6.4 | 0.2.8〜0.2.14 | 0.2.15 |
| GHSA-q428-6v73-fc4q | CVE-2025-64517 | 4.4 | 0.2.5〜0.2.9 | 0.2.10 |
| GHSA-c978-wq47-pvvw | CVE-2025-64170 | 3.8 | 0.2.7〜0.2.9 | 0.2.10 |
| GHSA-98cv-wqjx-wx8f | CVE-2025-46717 | 3.3 | 0.2.5以前 | 0.2.6 |
| GHSA-w9q3-g4p5-5q2r | CVE-2025-46718 | 3.3 | 0.2.5以前 | 0.2.6 |
| GHSA-2r3c-m6v7-9354 | CVE-2023-42456 | 3.3 | 0.2.0以前 | 0.2.1 |
対策は、利用中のディストリビューションが提供する修正済みパッケージへの更新です。上流版を直接導入している場合は0.2.15以降へ更新してください。以下は影響を受ける設定条件が限られるものの、sudoersの書き方次第で権限昇格に届く2系統です。
sudoeditのシンボリックリンク競合(GHSA-f42v-x7gq-phc8)
公式アドバイザリは2026年8月31日公開。user ALL=sudoedit /etc/hostsのように特定ファイルだけ編集を許すルールで、利用者がシンボリックリンクを高速に付け替えると、別ディレクトリにhostsという名前のファイルを作れてしまいます。原因は、パスの検証処理が誤って2回走り、ポリシー判定に使ったパスと実際に開くパスがずれるTOCTOU(検査時と使用時の食い違い)です。
多くのsudoersは末尾に@includedir /etc/sudoers.dを持つため、そこへファイルを置ければ全権限を得られます。sudoeditを使わない、または全面許可している環境は影響を受けません。Ubuntu 26.04は0.2.13-0ubuntu1.2(2026年9月1日配信のUSN-8708-1)で修正パッチを当てています。報告者はAIモデルを使ってsudo-rsのコードを分析し、この問題を見つけたとアドバイザリに記されています。
targetpw・rootpwの認証記録誤りとタイムアウト時のパスワード露出
CVE-2025-64517は、Defaults targetpwまたはDefaults rootpwを設定した環境の不具合です。認証した相手のUIDではなく呼び出したユーザーのUIDを認証記録に書いていたため、同じ端末で有効期限内に別ユーザーとして実行すると、本来求められるはずのパスワード入力が省かれました。sudoersでrootとしての実行を許可されている利用者は、条件によって自分のパスワードだけでそのコマンドを実行でき、targetpwやrootpwによる追加の認証要件を迂回できます。
CVE-2025-64170は、パスワードを途中まで打ってEnterを押さずに放置し、既定5分のタイムアウトが来ると、入力途中の文字列がそのままシェルに流れ込む問題です。シェル履歴に残る恐れがあります。どちらも0.2.10(2025年11月10日)で修正され、Ubuntu 25.10には0.2.8-1ubuntu5.2で配信されました。
sudoより下の層で起きる権限昇格として、2026年にはLinuxカーネルの脆弱性Copy Fail(CVE-2026-31431)も公表されています。sudo実装を替えてもカーネル側の穴は塞がらないので、パッチ適用は別に追ってください。
sudo-rsで表示されるエラーメッセージの意味
エラー文は従来のsudoと異なるため、そのまま検索しても情報が見つかりにくい部分です。v0.2.15のソース(src/common/error.rs)にある文面と、出る条件を対応させます。
| 表示 | 出る条件 |
|---|---|
| I’m sorry ユーザー名. I’m afraid I can’t do that | sudoersで実行を許可されていない |
| Sorry, user … may not run … | -l で許可されていないコマンドを照会 |
| sudo must be owned by uid 0 and have the setuid bit set | バイナリの所有者やsetuidビットが不正 |
The "no new privileges" flag is set |
コンテナ等でno_new_privsが有効 |
| ‘コマンド’: command not found | secure_path上に実行ファイルが無い |
I'm sorry ... I'm afraid I can't do thatは映画『2001年宇宙の旅』のHAL 9000の台詞で、従来sudoのis not in the sudoers fileやis not allowed to executeに当たる拒否です。管理者が必要な操作を確認し、sudoersにその操作の許可を追加してください。Ubuntuの標準設定で管理者権限全体を与える場合はsudoグループを使えますが、グループ名と付与範囲は環境によって異なります。
setuidのエラーは、ソースからビルドしたバイナリをコピーしただけ、パッケージの設定不備で権限が付かなかった、といった場面で出ます。Ubuntuのパッケージはインストール時に/usr/lib/cargo/bin/sudoを所有者root・モード4755に設定するので、ls -lでその状態になっているかを確認します。
Dockerコンテナ内でsudoが動かない場合は、no_new_privsのメッセージを確認してください。--security-opt no-new-privileges付きで起動したコンテナでは、setuidによる昇格そのものがカーネルに止められます。
sudo-rsへ切り替えないほうがよい環境と、doas・run0との違い
次の要件があるサーバーでは、従来sudoの継続を検討してください。ただし、Ubuntu 26.04ではsudo-ldapパッケージも削除されているため、LDAPでsudoersを管理する環境はsudo.wsへの切替だけで復旧すると考えず、ポリシーの取得方式も確認する必要があります。設定を書き換える工数より、監査要件を満たせないリスクの方が大きいからです。
- sudoersをLDAPで一元管理している
log_outputとsudoreplayで操作の入出力を記録し、監査証跡にしている- 認証失敗をメール(
mail_badpassなど)で通知する運用に依存している - 引数ワイルドカードや正規表現のルールが数十行あり、書き分けを検証する時間が無い
このうち入出力ログは、sudo-rsの設定一覧にlog_output自体が存在しません。記録が止まるのに気付きにくいため、監査対象のサーバーでは最優先で確認してください。個人の開発マシンや短期間だけ使うインスタンスでも、sudo -Eに依存するスクリプトや独自のsudoers設定がある場合は、移行前に動作を確認してください。
doas・run0との設定互換性と権限昇格方式の比較
sudoの代替には、OpenBSD由来のdoasとsystemd 256で入ったrun0もあります。sudo-rsのFAQは、Linux向けのOpenDoasが約5,000行のCで自動テストを持たない点、run0はsetuidを使わない代わりにpolkitのJavaScript形式の規則で権限を書く必要があり、sudoeditも無い点を挙げています。
実務上の分かれ目は既存のsudoersを流用できるかどうかです。doasもrun0も設定を書き直す前提なので、既存のsudoersがsudo-rsの対応範囲に収まり、必要な監査・通知機能も確保できるなら、sudo-rsを優先候補にできます。
よくある質問
Ubuntu 26.04でsudo-rsが動いているか確認するには?
sudo -V | head -n 1を実行し、先頭がsudo-rsならRust版です。update-alternatives --display sudoを使うと、現在のリンク先が/usr/lib/cargo/bin/sudoか/usr/bin/sudo.wsかと、自動モードか手動モードかも分かります。Ubuntu 26.04では既定でRust版が選ばれています。アップグレードした環境で結果が違う場合は、過去に手動モードで従来版を固定していないかを同じ出力で確かめてください。
Arch Linuxでsudo-rsをsudoという名前で使えますか?
pacman -S sudo-rsで入るコマンドはsudo-rs・sudoedit-rs・visudo-rs・su-rsで、従来のsudoとは共存します。alias sudo=sudo-rsを書けば自分の入力は置き換わりますが、スクリプトや他のプログラムが呼ぶsudoは従来版のままです。システム全体で置き換えたい場合は、公式のビルド済みtarballを/usr/localへ展開し、PATHで優先させる方法がREADMEに載っています。Arch Linuxの収録版は2026年9月時点で最新の0.2.15です。
パスワード入力で*を表示させないようにできますか?
できます。sudo visudoでDefaults !pwfeedbackを追加すると、従来のsudoと同じく何も表示しない入力に戻ります。一時的に消すだけなら、パスワード入力中にTABキーを押してください(0.2.13以降)。sudo-rs 0.2.13からは上流の既定がオンになったため、Ubuntuに限らずArch LinuxやFedoraで新しい版を入れても*が表示されます。
sudo-rsのGitHubリポジトリはどこですか?
github.com/trifectatechfoundation/sudo-rsです。リリースノートはCHANGELOG.md、脆弱性はリポジトリのSecurityタブにアドバイザリとして公開され、報告も同じページから受け付けています。監査報告書(2023年と2025年の2本)はdocs/auditにPDFで置かれています。manページのMarkdown版はdocs/manにあり、従来sudoとの設定差を調べるときはsudoers.5.mdが一次情報になります。
Rust製なのに脆弱性が出るのはなぜですか?
Rustが防ぐのはバッファオーバーフローや解放済みメモリの使用といったメモリ破損で、判定ロジックの誤りは防げません。sudo-rsの6件のアドバイザリはすべて、パス検証の二重実行や認証記録のUID取り違えといった論理の誤りです。公式FAQは、これまでsudo-rsでメモリ安全性の脆弱性は見つかっていないとしています。従来sudoで2011年から2021年まで潜んでいたヒープオーバーフローBaron Samedit(CVE-2021-3156)の種類の問題を減らすのが狙いです。