sudo 和 sudo-rs 有什麼差異:Rust 版本 sudo 會改變什麼

整理 sudo-rs 與傳統 sudo 的差異、Ubuntu 25.10 的預設切換、普通使用者體驗變化,以及系統管理員需要關注的相容性問題。

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% 相容替代品。 它仍在發展中,一些傳統功能暫時沒有實現,另一些功能可能不會再實現。

普通使用者會感覺到什麼變化

對普通使用者來說,變化很少。

你仍然這樣使用:

1
sudo apt update

或者:

1
sudo systemctl restart nginx

在 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。

切換命令類似這樣:

1
sudo update-alternatives --config 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 的意義在於,它嘗試在保持使用者習慣的同時,把底層實現換成更現代的程式碼基礎。

遷移前應該檢查什麼

如果你只是個人桌面使用者,可以跟隨發行版預設設定。

如果你維護伺服器或工作站,建議檢查這些內容:

  1. 是否有複雜的 /etc/sudoers/etc/sudoers.d/ 規則;
  2. 是否使用了命令參數萬用字元;
  3. 是否依賴 sudo 的郵件通知;
  4. 是否有腳本解析 sudo 的錯誤輸出;
  5. 是否透過 sudoers 控制 umask、資源限制或環境變數;
  6. 是否有 LDAP、PAM、SSSD 等認證整合;
  7. 是否有自動化部署腳本預設假設傳統 sudo 行為。

可以先在測試機上驗證:

1
sudo -l

再執行關鍵維護命令,確認權限、環境變數和日誌行為都符合預期。

是否應該主動切換到 sudo-rs

如果發行版已經預設切換,普通使用者可以直接接受。 如果你使用的是伺服器或生產環境,不建議只為了嘗鮮手動替換。

更穩妥的做法是:

  • 在測試環境安裝 sudo-rs
  • 對照現有 sudoers 設定逐項驗證;
  • 檢查 PAM、日誌、稽核和自動化腳本;
  • 確認回滾方式;
  • 等發行版給出穩定整合後再遷移。

這類工具處在權限鏈路上,不適合用「能執行幾個命令」來判斷是否安全。 真正要驗證的是邊界條件和異常情況。

小結

sudo-rs 是傳統 sudo 的 Rust 實現,目標是用更現代、更安全的程式碼基礎承接 sudo 的核心功能。 Ubuntu 25.10 預設啟用它,說明主流發行版已經開始認真推動這條路線。

對普通使用者來說,變化很小。 你仍然輸入 sudo,只是底層實現可能變成了 sudo-rs。 最多會注意到密碼輸入顯示星號,或者錯誤提示文字略有變化。

對系統管理員來說,重點是相容性。 如果系統裡有複雜 sudoers 規則、sendmail 通知、PAM 整合、參數萬用字元或依賴 sudo 輸出的腳本,就應該在升級前測試。

Rust 重寫不是萬靈丹,但對 sudo 這種安全敏感工具來說,減少記憶體安全風險、降低維護複雜度,是值得認真考慮的方向。

參考來源:

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計