Sudo

如何在沒有密碼提示的情況下以 root 身份執行特定程序?

  • December 17, 2021

我需要在沒有密碼的情況下以 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_resetin/etc/sudoers或者這個選項是編譯時預設的(sudo sudo -V | grep env應該包括Reset the environment to a default set of variables)。

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