無需密碼執行Sudo命令
在基於Linux/Unix的系統中,sudo命令允許受信任的使用者以擴充套件許可權執行命令,無論是超級使用者(root)還是安全策略中定義的其他使用者。
安全策略也決定了分配給使用者的許可權。它可能要求使用者使用密碼或其他身份驗證機制進行身份驗證。如果需要密碼,系統將提示使用者輸入其帳戶密碼,並設定超時時間。否則,將根據安全策略執行指定的命令,無需任何提示。
在某些情況下,需要自動化工作流程並避免像上面討論的sudo使用互動式提示。這就是無密碼sudo選項的用武之地,它可以配置為在沒有任何提示的情況下執行sudo命令。
在本教程中,我們將解釋如何配置sudo以避擴音示使用者輸入密碼。
sudo配置以執行任何命令
在您的系統上開啟一個終端視窗,或透過SSH遠端連線到它。
在對sudoers配置檔案進行任何更改之前,最好先備份一份。您可以使用cp命令將sudoers檔案的備份複製到您的主目錄或任何其他安全位置。
$ sudo cp /etc/sudoers ~/sudoers.bak
現在使用推薦的visudo工具開啟sudoers檔案進行編輯(不要直接使用vi/vim/nano編輯`/etc/sudoers`,因為visudo包含基本的語法檢查,以在儲存之前驗證sudoers檔案的語法,避免任何意外更改或與語法相關的錯誤)。
$ sudo visudo
新增/修改使用者的行以包含NOPASSWD關鍵字(其中username應該是系統上正在為其配置sudo的使用者的實際使用者名稱)。
username ALL=(ALL) NOPASSWD:ALL
這是一張新增abhisheknair使用者行後的配置檔案截圖。
儲存檔案並退出到終端/SSH會話提示符。現在,如果在命令前加上sudo,您應該能夠以超級使用者(root)身份執行任何命令,並且它將在不提示您輸入帳戶密碼的情況下執行。
sudo配置以執行特定命令
如果您只想允許使用者執行一個或多個給定的命令,而不提示輸入密碼,而不是允許執行任何命令,請在您的sudoers檔案中使用如下所示的修改後的語法:
username ALL=(ALL) NOPASSWD: /usr/sbin/fdisk -l, /usr/bin/apt update, /usr/bin/apt upgrade
使用/etc/sudoers.d/目錄進行sudo配置
/etc/sudoers檔案受Linux發行版的包管理器控制。如果系統的包管理器更新此檔案,您的更改可能會被修改或丟失。
為了避免這種情況,現代Linux系統允許將您本地對sudo配置的更改新增到/etc/sudoers.d/目錄中,該目錄不會被系統或軟體包的升級所觸及。
要使此方法有效,您的/etc/sudoers檔案必須包含以下指令,以包含/etc/sudoers.d/目錄的內容(通常在sudoers檔案的底部預設找到)。
正如我們所看到的,我們在/etc/sudoers檔案中找到了@includedir指令。
@includedir /etc/sudoers.d
如果一切設定正確,我們可以新增以下包含所需sudo命令的檔案:
$ sudo visudo -f /etc/sudoers.d/somefilename
這裡,somefilename可以是任何名稱。通常為了標識其用途,您可以使用使用者名稱或用途等直觀的名稱命名它。
$ sudo cat /etc/sudoers.d/90-abhisheknair abhisheknair ALL=(ALL) NOPASSWD:ALL $
如果您想在幾個步驟中實現這一點,而不執行上述所有步驟,您可以簡單地定義USERNAME變數並執行命令來建立包含所需行的檔案。類似這樣:
$ USERNAME=abhisheknair $ echo "$USERNAME ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/90-$USERNAME
如果您想為當前使用者執行此操作,則shell中已經定義了USER變數,您可以簡單地執行以下命令來為當前使用者新增NOPASSWD sudo配置:
$ echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/90-$USER
這假設執行上述命令的使用者具有在/etc/sudoers.d內建立或修改檔案的所需sudo許可權。
結論
在本教程中,我們解釋瞭如何修改Linux系統中的sudo配置,以允許使用者在不提示輸入密碼的情況下執行命令。這可以透過使用visudo命令更新sudo配置檔案,即/etc/sudoers,或透過在/etc/sudoers.d目錄中新增新的配置檔案來完成。