在 Linux 中運行特定命令而無需 sudo 密碼

在 Linux 中運行特定命令而無需 sudo 密碼

今天,在這個簡短的指南中,我將教你如何在類 Unix 的操作系統中運行特定命令而無需 sudo 密碼。

-- Sk

我有一臺部署在 AWS 上的 Ubuntu 系統,在它的裡面有一個腳本,這個腳本的原有目的是以一定間隔(準確來說是每隔 1 分鐘)去檢查某個特定服務是否正在運行,如果這個服務因為某些原因停止了,就自動重啟這個服務。但問題是我需要 sudo 權限來開啟這個服務。正如你所知道的那樣,當我們以 sudo 用戶運行命令時,我們應該提供密碼,但我並不想這麼做,實際上我想做的是以 sudo 用戶的身份運行這個服務但無需提供密碼。假如你曾經經歷過這樣的情形,那麼我知道一個簡單的方法來做到這點。今天,在這個簡短的指南中,我將教你如何在類 Unix 的操作系統中運行特定命令而無需 sudo 密碼。

就讓我們看看下面的例子吧。

$ sudo mkdir /ostechnix

[sudo] password for sk:


在 Linux 中運行特定命令而無需 sudo 密碼


正如上面的截圖中看到的那樣,當我在根目錄(/)中創建一個名為 ostechnix 的目錄時,我需要提供 sudo 密碼。每當我們嘗試以 sudo 特權執行一個命令時,我們必須輸入密碼。而在我的預想中,我不想提供 sudo 密碼。下面的內容便是我如何在我的 Linux 機子上運行一個 sudo 命令而無需輸入密碼的過程。

在 Linux 中運行特定命令而無需 sudo 密碼

基於某些原因,假如你想允許一個用戶運行特定命令而無需提供 sudo 密碼,則你需要在 sudoers 文件中添加上這個命令。

假如我想讓名為 sk 的用戶去執行 mkdir 而無需提供 sudo 密碼,下面就讓我們看看該如何做到這點。

使用下面的命令來編輯 sudoers 文件:

$ sudo visudo

將下面的命令添加到這個文件的最後。

sk ALL=NOPASSWD:/bin/mkdir


在 Linux 中運行特定命令而無需 sudo 密碼


其中 sk 是用戶名。根據上面一行的內容,用戶 sk 可以從任意終端執行 mkdir 命令而不必輸入 sudo 密碼。

你可以用逗號分隔的值來添加額外的命令(例如 chmod),正如下面展示的那樣。

sk ALL=NOPASSWD:/bin/mkdir,/bin/chmod

保存並關閉這個文件,然後註銷(或重啟)你的系統。現在以普通用戶 sk 登錄,然後試試使用 sudo 來運行這些命令,看會發生什麼。

$ sudo mkdir /dir1


在 Linux 中運行特定命令而無需 sudo 密碼


看到了嗎?即便我以 sudo 特權運行 mkdir 命令,也不會彈出提示讓我輸入密碼。從現在開始,當用戶 sk 運行 mkdir 時,就不必輸入 sudo 密碼了。

當運行除了添加到 sudoers 文件之外的命令時,你將被提示輸入 sudo 密碼。

讓我們用 sudo 來運行另一個命令。

$ sudo apt update


在 Linux 中運行特定命令而無需 sudo 密碼


看到了嗎?這個命令將提示我輸入 sudo 密碼。

假如你不想讓這個命令提示你輸入 sudo 密碼,請編輯 sudoers 文件:

$ sudo visudo

像下面這樣將 apt 命令添加到 sudoers 文件中:

sk ALL=NOPASSWD:/bin/mkdir,/usr/bin/apt

你注意到了上面命令中 apt 二進制執行文件的路徑與 mkdir 的有所不同嗎?是的,你必須提供一個正確的可執行文件路徑。要找到任意命令的可執行文件路徑,例如這裡的 apt,可以像下面這樣使用 whichis 命令來查看:

$ whereis apt

apt: /usr/bin/apt /usr/lib/apt /etc/apt /usr/share/man/man8/apt.8.gz

如你所見,apt 命令的可執行文件路徑為 /usr/bin/apt,所以我將這個路徑添加到了 sudoers 文件中。

正如我前面提及的那樣,你可以添加任意多個以逗號分隔的命令。一旦你做完添加的動作,保存並關閉你的 sudoers 文件,接著註銷,然後重新登錄進你的系統。

現在就檢驗你是否可以直接運行以 sudo 開頭的命令而不必使用密碼:

$ sudo apt update


在 Linux 中運行特定命令而無需 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 選題: lujun9972 譯者: FSSlc 校對: 校對者ID

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: