Rust

sudo-rsとは|Ubuntu 26.04既定のRust製sudoとの違い・脆弱性・元に戻す手順

sudo-rsとは|Ubuntu 26.04既定のRust製sudoとの違い・脆弱性・元に戻す手順

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_ptyenv_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版が動きます。

切り替わるのはsudovisudosudoeditとその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/binPATHの先頭に足します。この変更は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 -Ehttp_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 fileis 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-rssudoedit-rsvisudo-rssu-rsで、従来のsudoとは共存します。alias sudo=sudo-rsを書けば自分の入力は置き換わりますが、スクリプトや他のプログラムが呼ぶsudoは従来版のままです。システム全体で置き換えたい場合は、公式のビルド済みtarballを/usr/localへ展開し、PATHで優先させる方法がREADMEに載っています。Arch Linuxの収録版は2026年9月時点で最新の0.2.15です。

パスワード入力で*を表示させないようにできますか?

できます。sudo visudoDefaults !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)の種類の問題を減らすのが狙いです。

関連記事

資料請求

RELATED POSTS 関連記事