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


15

我正在编写一个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

跑步不断询问我的密码,有什么想法吗?


看起来已经有一个非常相似的问题:askubuntu.com/questions/39281/…-您是否尝试过那里的答案?
谢尔盖

确保在您的Java代码中,在系统调用中使用“ sudo / absolute / path / to / command”。顺便说一句。出于安全原因,您应该使用sudo visudo而不是vim编辑sudoers文件。这样,如果您犯了一个错误,程序会警告您。
CON-F使用的

可以在这里找到我到底尝试了什么:gist.github.com/1315951

Answers:


28

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

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

现在,只要使用键入该命令,就可以运行不带密码的指定命令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>在终端上使用来找到程序的绝对路径。

这是一个很肮脏的把戏,希望您的系统能够承受其他危险,但我想您知道自己在做什么,并希望这样做。

编辑

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


好像他已经做到了。
con-f-use

如果他已经这样做了,那么为什么要向他解释他应该使用sudo visudo而不是vim编辑sudoers文件?如果他做到了,那就行得通。
布鲁诺·佩雷拉

1
@goOgle您是否sudo在代码内的命令前面输入?即使您在sudoers文件中强制nopasswd,也需要这样做。即:sudo <command>不仅使用<command>
布鲁诺·佩雷拉

1
对我来说cmd =“ whoami”返回,bruno而cmd = "sudo whoami“”返回root
Bruno Pereira

3
找到了!如果我的行不在sudoers文件末尾,则可以重现此内容。分组后等。真的是最后一行!将行移动到文件的最后一行!(希望是这样)。
布鲁诺·佩雷拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.