如何使用 sudo 允许执行而不提示输入密码?

如何使用 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

一旦我执行该命令,它会再次询问“[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

运行中不断要求我输入密码,有什么想法吗?

答案1

在终端上输入sudo visudo并在文件末尾添加如下行,指定您想要运行的命令而无需输入 sudo 密码(我建议您在终端中使用您想要使用的每个命令,而不仅仅是允许所有程序以这种方式执行)

<yourusername> ALL=NOPASSWD: <command1>, <command2>

现在,只要在该命令前面加上 ,您就可以运行指定的命令,而无需输入密码sudo

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

  1. sudo visudo在终端上输入。

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

  3. 在您的程序上,您随后即可使用sudo shutdown -r now而不必输入用户密码。

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

这可能会使您的系统面临危险,但我猜您知道自己在做什么并且想要这样做。

您需要确保您设置的权限是在文件末尾这样就不会有任何东西被之前的配置覆盖。

答案2

我可以poweroff在 ssh 提示中为非 sudoers 启用(通常是 sudoer 命令),方法是作为 sudoer,将 +s 标志添加到命令可执行文件中。如下所示:

sudo chmod a+s /usr/sbin/poweroff

此后,非 sudo 用户可以通过 ssh 甚至通过以他们的名义运行的 shell 脚本关闭系统。

相关内容