Sudo
如何在沒有密碼提示的情況下以 root 身份執行特定程序?
我需要在沒有密碼的情況下以 sudo 執行某些東西,所以我使用
visudo
並將其添加到我的sudoers
文件中:MYUSERNAME ALL = NOPASSWD: /path/to/my/program
然後我試了一下:
$ sudo /path/to/my/program [sudo] password for MYUSERNAME:
為什麼它要求輸入密碼?如何在不詢問密碼的情況下以非 root 使用者身份以 root 身份執行/使用命令?
您在文件中有另一個條目
sudoers
,通常位於/etc/sudoers
,它也與您的使用者匹配。規則必須在該NOPASSWD
規則之後才能優先。完成此操作後,
sudo
通常會提示輸入除 之外的所有命令的密碼/path/to/my/program
,它始終允許您在不詢問密碼的情況下執行。
如果 中存在多個匹配條目
/etc/sudoers
,則 sudo 使用最後一個。因此,如果您可以執行任何帶有密碼提示的命令,並且您希望能夠在沒有密碼提示的情況下執行特定命令,那麼您最後需要例外。myusername ALL = (ALL) ALL myusername ALL = (root) NOPASSWD: /path/to/my/program
請注意使用
(root)
, 以允許程序以 root 身份執行,但不能以其他使用者身份執行。(除非您已經考慮過其中的含義,否則不要授予超過最低要求的權限。)未執行 Ubuntu 或更改了預設 sudo 配置(預設情況下 Ubuntu 的 sudo 可以)的讀者註意:以提升的權限執行 shell 腳本是有風險的,您需要從乾淨的環境開始(一旦 shell 啟動,為時已晚(請參閱Allow setuid on shell scripts),因此您需要 sudo 來處理它)。確保你有
Defaults env_reset
in/etc/sudoers
或者這個選項是編譯時預設的(sudo sudo -V | grep env
應該包括Reset the environment to a default set of variables
)。