如何使用sudo在不提示输入密码的情况下允许执行?

17 command-line sudo

我正在编写一个 Java 应用程序,我需要在其中执行命令行并返回结果,但是当我执行命令时,它要求输入 sudo 密码。到目前为止,我尝试过:

$ sudo -s
$ vim /etc/sudoers
# User privilege specification
root         ALL=(ALL:ALL) NOPASSWD: ALL
javauser     ALL=(ALL:ALL) NOPASSWD: ALL

:wq
$ 4 -r--r-----   1 root root     615 2011-10-26 09:23 sudoers
Run Code Online (Sandbox Code Playgroud)

一旦我执行命令,它再次询问“[javauser] javauser 的密码:”。但我已经提到了 noPASSWD。

whoami返回alex,我将它添加到sudoers文件中

# User privilege specification
root    ALL=(ALL:ALL) ALL
alex ALL=NOPASSWD: ALL


# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
Run Code Online (Sandbox Code Playgroud)

跑步一直问我密码,有什么想法吗?

Bru*_*ira 31

您需要在终端类型上执行以下操作,sudo visudo并在文件末尾添加这样的行,指定要运行的命令而不输入 sudo 密码(我建议您使用要在程序中使用的每个命令和不只是允许所有程序由此执行)

<yourusername> ALL=NOPASSWD: <command1>, <command2>
Run Code Online (Sandbox Code Playgroud)

现在你可以在没有密码的情况下运行指定的命令,只要你用sudo.

即:假设您想运行shutdown -r now而不必每次都输入 sudo 密码并且您的用户名是“joedoe”

  1. 键入sudo visudo一个终端上

  2. 在文件末尾添加joedoe ALL=NOPASSWD: /usr/sbin/shutdown -r now一个新行,使用您尝试使用的程序的绝对路径。

  3. 在您的程序中,您sudo shutdown -r now无需输入 sudo 密码即可使用。

您可以通过which <program name>在终端上使用来找到程序的绝对路径。

这是一个非常肮脏的伎俩,希望让您的系统对其他危险保持开放,但我猜您知道自己在做什么并且想要这个。

编辑

您确实需要确保您设置的许可位于文件的末尾,以便组权限不会覆盖任何内容。

  • 找到了!如果我的行不在“sudoers”文件的末尾,则可以重现这一点。等小组作业后,真的是最后一行!将该行移动到文件中的最后一行!(希望是这样)。 (3认同)