Как разрешить выполнение без запроса пароля с помощью 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" в вашем системном вызове. Btw. по соображениям безопасности вы должны использовать sudo visudoвместо vimредактирования файла sudoers. Таким образом, если вы допустите ошибку, программа предупредит вас об этом.
con-f-use
Здесь можно найти то, что именно я попробовал: gist.github.com/1315951

Ответы:

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-использовать
Если он уже сделал это, почему вы объясняете ему, что он должен использовать, sudo visudoа не vimредактировать файл sudoers? Если бы он сделал это, это бы сработало.
Бруно Перейра
1
@goOgle вы печатаете sudoперед командой внутри вашего кода? вам нужно сделать это, даже если вы запустили nopasswd в файле sudoers. т.е. использовать sudo <command>не только <command>.
Бруно Перейра
1
Для меня cmd = "whoami" возвращается brunoи cmd = "sudo whoami"возвращаетсяroot
Бруно Перейра
3
Нашел это! Может воспроизвести это, если моя строка не находится в конце sudoersфайла. После назначения групп и т. Д. Действительно последняя строка! Переместите строку, чтобы быть последней в файле! (надеюсь, что это было так).
Бруно Перейра