如何在Linux上不輸入密碼執行sudo指令

您可以透過在 sudoers 政策中新增規則來免密碼執行 sudo 命令NOPASSWD。最安全的做法是僅允許執行所需的特定管理命令,而不是停用所有 sudo 命令的密碼提示。

在更改任何設定之前,請記住此設定的作用:任何獲得您已登入帳戶控制權的人或程式都可能無需再次身份驗證即可以 root 使用者身分執行允許的命令。 sudoers手冊中將此標籤描述NOPASSWD為移除匹配命令的身份驗證。

為什麼 sudo -s 不是一種無密碼 sudo 方法

先前的建議sudo -s其實並沒有配置免密碼 sudo。此-s選項會以 sudo 權限啟動一個 shell,但 sudo 策略仍然可能要求您先進行身份驗證。您可能還會看到一些命令在沒有再次提示的情況下運行,因為 sudo 通常會將成功的身份驗證結果緩存一段時間。這與永久NOPASSWD規則不同。

無需密碼即可執行特定的 sudo 命令

此範例允許使用者alex在無需密碼的情況下重新啟動 Nginx。請將使用者名稱、命令和參數替換為與您的系統相符的值。

1. 確認您的使用者名稱和命令路徑

以一般使用者身分執行以下命令:

whoami
command -v systemctl

第二個命令可能會傳回結果/usr/bin/systemctl。請使用系統報告的路徑。 Sudoers 規則應使用命令的完整路徑來識別它們。

Linux 終端機顯示 whoami 和 -v systemctl 命令,以識別使用者名稱和完整命令路徑。
在撰寫 sudoers 規則之前,請檢查帳戶名稱和命令的完整路徑。

2. 建立一個專用的 sudoers 插入文件

不要/etc/sudoers直接編輯,而是使用visudo以下方式/etc/sudoers.d:

sudo visudo -f /etc/sudoers.d/alex-nopasswd

通常情況下,您需要在此設定步驟中輸入密碼。visudo建議使用 visudo,因為它會在接受更改之前檢查語法。 Ubuntu visudo 手冊也指出,visudovisudo 會在編輯期間鎖定檔案並檢查解析錯誤。

Linux 終端機開啟一個專用的 sudoers.d 文件,並使用 sudo visudo 進行無密碼 sudo 配置。
使用單獨的 sudoers 插入文件,visudo而不是使用普通文字編輯器編輯主策略文件。

3. 增加你需要的最嚴格的 NOPASSWD 規則

例如,在 Nginx 重啟範例中,新增:

alex ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx

此規則僅允許使用指定參數執行該命令,且無需身份驗證。若要允許執行多個特定命令,請用逗號分隔命令。

如果您有意希望某個使用者的所有 sudo 命令都跳過身份驗證,那麼大致的規則是:

alex ALL=(ALL:ALL) NOPASSWD: ALL

這種方式安全性低得多,在工作站或共享系統上通常不是最佳選擇。一旦使用者會話被攻破,攻擊者就能直接獲得不受限制的 root 權限。

Nano 編輯器顯示了一條用於重啟 nginx 的 sudoers NOPASSWD 規則,以及一個帶有註釋的無限示例。
針對特定命令的規則比授予權限更安全NOPASSWD: ALL。

4. 驗證並測試規則

儲存並退出編輯器後,檢查完整的 sudoers 策略:

sudo visudo -c

請勿跳過此檢查。visudo文件解釋說,sudoers 策略是作為一個整體進行評估的,因此檢查完整的配置可以發現可能涉及包含文件的問題。

然後使所有快取的 sudo 憑證失效,並以非互動方式進行測試:

sudo -k
sudo -n /usr/bin/systemctl restart nginx

此-n選項指示 sudo 不要提示輸入密碼。如果符合規則,命令將直接運行,無需輸入密碼。如果仍然需要身份驗證,sudo 將直接退出並報錯,而不是等待輸入。這sudo -n對於那些絕對不能在密碼提示處卡住的腳本來說尤其有用。

Linux 終端機使用 visudo -c 驗證 sudoers,清除快取的憑證,並使用 sudo -n 測試 NOPASSWD 命令。
驗證策略,清除快取的憑證,並sudo -n確認該指令確實不再需要密碼。

故障排除:免密碼 sudo

  • 此命令仍然要求輸入密碼:請確認使用者名稱、命令路徑和參數與 sudoers 條目完全匹配。
  • 該命令不被允許:請執行sudo -l以查看指派給您帳戶的權限。
  • 似乎會忽略插入式檔案:請使用簡單的檔案名,例如alex-nopasswd. 某些 sudoers 設定會忽略檔案/etc/sudoers.d名稱包含點號或以備份風格後綴結尾的檔案。
  • 您需要撤銷此變更:重新開啟插件sudo visudo -f /etc/sudoers.d/alex-nopasswd,刪除或縮小規則,儲存,然後sudo visudo -c再次執行。

最佳實踐

僅在確有必要時才使用無密碼 sudo,例如執行嚴格控制的服務操作或自動化任務。盡量使用精確的指令路徑和參數,盡可能避免使用其他方式NOPASSWD: ALL,並盡可能精簡 sudoers 規則。這樣既能保留 sudo 的大部分安全保護,又能消除真正需要的密碼提示。

留下評論

如何安全地恢復遺失的分區和硬碟數據

如何安全地恢復遺失的分區和硬碟數據

學習如何使用 TestDisk 和 PhotoRec 恢復遺失的分割區和檔案。保護來源驅動器,安全掃描,並將復原的資料儲存到另一個磁碟。

如何在 Linux 桌面系統上掃描二維碼

如何在 Linux 桌面系統上掃描二維碼

使用 CoBang 在 Linux 系統上透過網路攝影機或影像檔案掃描二維碼。查看 Flatpak 攝影機存取的安裝選項、設定步驟和修復方法。

如何在Linux系統上使用Cameractrls更改網路攝影機設置

如何在Linux系統上使用Cameractrls更改網路攝影機設置

使用 Cameractrls 在 Linux 上變更網路攝影機設定:調整曝光、色彩、減少閃爍和其他支援的控件,然後檢查相容的視訊模式。

如何在 Linux 上安裝 PhpStorm:工具箱、Tar.gz、Snap 和 AUR

如何在 Linux 上安裝 PhpStorm:工具箱、Tar.gz、Snap 和 AUR

在 Linux 系統上,您可以使用 JetBrains Toolbox 或獨立的 tar.gz 壓縮套件安裝 PhpStorm,此外還有 Snap 和 Arch AUR 版本可供選擇。 Java 已預先安裝。

如何在 Linux 系統上將 CD-ROM 備份為 ISO 文件

如何在 Linux 系統上將 CD-ROM 備份為 ISO 文件

在 Linux 上使用 GNOME Disks 或 dd 建立 CD-ROM ISO。識別光碟機,監控複製過程,驗證鏡像,並了解何時損壞的光碟或音訊光碟需要其他工具。

如何在 XFCE 4 上設定雙面板

如何在 XFCE 4 上設定雙面板

為每個顯示器建立一個單獨的 XFCE 4 面板,將第二個面板指派給正確的輸出,調整其位置和大小,並新增所需的啟動器和狀態項目。

如何在Linux上安裝Cisco Packet Tracer

如何在Linux上安裝Cisco Packet Tracer

下載適用於 Ubuntu 64 位元系統的 Cisco Packet Tracer 9.0.1,使用 APT 安裝 DEB 軟體包,在終端機中接受許可協議,然後登入以啟動實驗環境。

如何在Linux系統下使用GIMP摳圖

如何在Linux系統下使用GIMP摳圖

在 Linux 系統上使用 GIMP 去除照片背景:描繪主體,刪除選定的背景,保持透明度,並匯出可重複使用的 PNG 檔案。

免費下載 FlightGear:官方安裝指南

免費下載 FlightGear:官方安裝指南

從官方網站免費下載 FlightGear。比較 Windows、macOS 和 Linux 版本的軟體包,安裝資料文件,即可開始您的首次飛行。

Google Tasks桌面應用程式:如何在電腦上使用

Google Tasks桌面應用程式:如何在電腦上使用

在瀏覽器中開啟 Google Tasks,新增 Chrome 捷徑或應用程式啟動,並透過行事曆和 Gmail 管理有日期的待辦事項。