Debian

執行需要 sudo 的非互動式腳本的最安全方法

  • July 8, 2021

sudo我想以非互動方式執行需要 的命令,因此不能選擇輸入密碼。在我的特定情況下,我想在我的手機上創建一個自動/快捷操作,以通過 ssh 登錄在我的伺服器上執行此腳本。

在我的情況下,我想用 啟動一個虛擬機virsh start,我知道我可以配置它以允許非 root 使用者啟動機器,但我一般對這個解決方案很好奇,特別是在非 root 使用者的情況下root 選項不可用。

我還設想非特權使用者只需要能夠執行我定義的單個腳本,而不是任意命令。換句話說,使用者只需要能夠觸發腳本執行——他們不提供任何參數,即使他們找到了這樣做的方法,這些參數也會被忽略。

同樣在我的情況下,伺服器僅供我使用,並且位於防火牆後面。它具有網際網路連接(因為它可以下載東西),但無法從網際網路訪問。我要麼必須在我的 LAN 上,要麼必須通過 VPN 連接才能訪問它,而且我只希望在家裡專門使用這個腳本。仍然-我擔心在這裡學習“良好實踐”。

伺服器本身正在執行 Debian 測試。我擔心允許無密碼 sudo 似乎有風險。有沒有更好的方法來做到這一點,理論上無特權的帳戶可以觸發特權腳本或命令執行?我是否應該只使用執行 as 的腳本root來監視每分鐘左右創建的某個文件,並且只touch使用該文件的腳本?我可以創建一個只能使用sudo該腳本的使用者嗎?

您可以配置sudo為允許特定使用者(或組)執行命名命令;在/etc/sudoers(用於visudo編輯它):

user ALL = NOPASSWD: /path/to/command

將允許使用者usersudo /path/to/command不提示輸入密碼的情況下執行。

我不具體知道 sudo 在這種情況下會如何表現,但是許多依賴使用者互動的程序如果在呼叫時沒有連接到 tty 就會失敗。創建一個沒有“NOPASSWD”的 sudo 權限並通過 cron 或 at 執行它來測試很簡單:

echo "sudo touch /tmp/writtenAsRoot" | at now

(並檢查“ps -ef | grep sudo”的輸出以檢查它是否正在等待輸入)。

如果這是一種潛在的情況,還要測試使用者沒有 sudo 權限的情況。

引用自:https://unix.stackexchange.com/questions/657536