我有一臺部署在 AWS 上的 Ubuntu 系統,在它的裡面有一個腳本,這個腳本的原有目的是以一定間隔(準確來說是每隔 1 分鐘)去檢查某個特定服務是否正在運行,如果這個服務因為某些原因停止了,就自動重啟這個服務。但問題是我需要 sudo 權限來開啟這個服務。正如你所知道的那樣,當我們以 sudo 用戶運行命令時,我們應該提供密碼,但我並不想這麼做,實際上我想做的是以 sudo 用戶的身份運行這個服務但無需提供密碼。假如你曾經經歷過這樣的情形,那麼我知道一個簡單的方法來做到這點。今天,在這個簡短的指南中,我將教你如何在類 Unix 的作業系統中運行特定命令而無需 sudo 密碼。
就讓我們看看下面的例子吧。
正如上面的截圖中看到的那樣,當我在根目錄(/)中創建一個名為 ostechnix 的目錄時,我需要提供 sudo 密碼。每當我們嘗試以 sudo 特權執行一個命令時,我們必須輸入密碼。而在我的預想中,我不想提供 sudo 密碼。下面的內容便是我如何在我的 Linux 機子上運行一個 sudo 命令而無需輸入密碼的過程。
在 Linux 中運行特定命令而無需 sudo 密碼
基於某些原因,假如你想允許一個用戶運行特定命令而無需提供 sudo 密碼,則你需要在 sudoers 文件中添加上這個命令。
假如我想讓名為 sk 的用戶去執行 mkdir 而無需提供 sudo 密碼,下面就讓我們看看該如何做到這點。
使用下面的命令來編輯 sudoers 文件:
將下面的命令添加到這個文件的最後。
sk ALL=NOPASSWD:/bin/mkdir
其中 sk 是用戶名。根據上面一行的內容,用戶 sk 可以從任意終端執行 mkdir 命令而不必輸入 sudo 密碼。
你可以用逗號分隔的值來添加額外的命令(例如 chmod),正如下面展示的那樣。
sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod
保存並關閉這個文件,然後註銷(或重啟)你的系統。現在以普通用戶 sk 登錄,然後試試使用 sudo 來運行這些命令,看會發生什麼。
看到了嗎?即便我以 sudo 特權運行 mkdir 命令,也不會彈出提示讓我輸入密碼。從現在開始,當用戶 sk 運行 mkdir 時,就不必輸入 sudo 密碼了。
當運行除了添加到 sudoers 文件之外的命令時,你將被提示輸入 sudo 密碼。
讓我們用 sudo 來運行另一個命令。
看到了嗎?這個命令將提示我輸入 sudo 密碼。
假如你不想讓這個命令提示你輸入 sudo 密碼,請編輯 sudoers 文件:
像下面這樣將 apt 命令添加到 sudoers 文件中:
sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt
你注意到了上面命令中 apt 二進位執行文件的路徑與 mkdir 的有所不同嗎?是的,你必須提供一個正確的可執行文件路徑。要找到任意命令的可執行文件路徑,例如這裡的 apt,可以像下面這樣使用 whichis 命令來查看:
apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz
如你所見,apt 命令的可執行文件路徑為 /usr/bin/apt,所以我將這個路徑添加到了 sudoers 文件中。
正如我前面提及的那樣,你可以添加任意多個以逗號分隔的命令。一旦你做完添加的動作,保存並關閉你的 sudoers 文件,接著註銷,然後重新登錄進你的系統。
現在就檢驗你是否可以直接運行以 sudo 開頭的命令而不必使用密碼:
看到了嗎?apt 命令沒有讓我輸入 sudo 密碼,即便我用 sudo 來運行它。
下面展示另一個例子。假如你想運行一個特定服務,例如 apache2,那麼就添加下面這條命令到 sudoers 文件中:
sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt,/bin/systemctl restart apache2
現在用戶 sk 就可以運行 sudo systemctl restart apache 命令而不必輸入 sudo 密碼了。
我可以再次讓一個特別的命令提醒輸入 sudo 密碼嗎?當然可以!只需要刪除添加的命令,註銷然後再次登錄即可。
除了這種方法外,你還可以在命令的前面添加 PASSWD: 指令。讓我們看看下面的例子:
在 sudoers 文件中添加或者修改下面的一行:
sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod,PASSWD:/usr/bin/apt
在這種情況下,用戶 sk 可以運行 mkdir 和 chmod 命令而不用輸入 sudo 密碼。然而,當他運行 apt 命令時,就必須提供 sudo 密碼了。
免責聲明:本篇指南僅具有教育意義。在使用這個方法的時候,你必須非常小心。這個命令既可能富有成效但也可能帶來摧毀性效果。例如,假如你允許用戶執行 rm 命令而不輸入 sudo 密碼,那麼他們可能無意或有意地刪除某些重要文件。我警告過你了!
那麼這就是全部的內容了。希望這個能夠給你帶來幫助。更多精彩內容即將呈現,請保持關注!
乾杯!
via: https://www.ostechnix.com/run-particular-commands-without-sudo-password-linux/
作者:SK[2] 選題:lujun9972 譯者:FSSlc 校對:校對者ID
本文由 LCTT 原創編譯,Linux中國 榮譽推出