Sudo
我如何“sudo -i”特定命令
我需要像 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…