Sudo

我如何“sudo -i”特定命令

  • March 1, 2016

我需要像 sudo -i 一樣在沒有密碼的情況下執行 important_script.sh。

如果我有 sudoers:

apache ALL = (root) NOPASSWD:    /blah/important_script.sh

並執行“sudo /blah/important_script.sh”我可以在沒有密碼的情況下執行它。

但是,如果我執行“sudo -i /blah/important_script.sh”,我需要輸入 apache 的密碼。

如果我將 sudoers 中的行更改為:

apache ALL = (root) NOPASSWD:ALL

我可以在沒有密碼的情況下執行命令“sudo -i /blah/important_script.sh”。

但我希望能夠只執行 /blah/important_script.sh,而不是所有命令。

那麼,我如何設置只有 /blah/important_script.sh 可以使用 sudo -i 執行而無需密碼。

當我嘗試這個時,我收到一條錯誤消息,它提供了問題的線索

Sorry, user bob is not allowed to execute '/bin/bash -c /blah/important_script.sh' as root on host.

請注意,我們被拒絕訪問與/bin/bash -c...我們在 sudoers 文件中指定的命令不同的命令/blah/important_script...。當您告訴 sudo 允許使用者執行特定命令時,他們必須使用 sudoers 中指定的確切命令行,因此我們需要適當地更改 sudoers。

bob   ALL=(root) NOPASSWD: /bin/bash -c /blah/important_script.sh

這現在適用於鮑勃

$ sudo -i /bin/bash -c /blah/important_script.sh

那麼它為什麼要這樣做呢?那麼 sudo 的手冊頁有答案

-一世

$$ command $$ ‑i(模擬初始登錄)選項將目標使用者的密碼數據庫條目指定的 shell 作為登錄 shell 執行。這意味著 shell 將讀取特定於登錄名的資源文件,例如 .profile 或 .login。**如果指定了命令,則通過 shell 的 ‑c 選項將其傳遞給 shell 以執行。**如果未指定命令,則執行互動式 shell…

引用自:https://serverfault.com/questions/601940