我正在编写一个 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”
sudo visudo
在终端上输入。添加
joedoe ALL=NOPASSWD: /usr/sbin/shutdown -r now
为新行在文件末尾,使用您尝试使用的程序的绝对路径。在您的程序上,您随后即可使用
sudo shutdown -r now
而不必输入用户密码。
which <program name>
您可以在终端上使用来找到程序的绝对路径。
这可能会使您的系统面临危险,但我猜您知道自己在做什么并且想要这样做。
您需要确保您设置的权限是在文件末尾这样就不会有任何东西被之前的配置覆盖。
答案2
我可以poweroff
在 ssh 提示中为非 sudoers 启用(通常是 sudoer 命令),方法是作为 sudoer,将 +s 标志添加到命令可执行文件中。如下所示:
sudo chmod a+s /usr/sbin/poweroff
此后,非 sudo 用户可以通过 ssh 甚至通过以他们的名义运行的 shell 脚本关闭系统。