Як дозволити виконання без запрошення пароля за допомогою 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 / absolut / 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-use

Якщо він це вже робив, чому ви пояснюєте йому, що він повинен використовувати, sudo visudoа не vimредагувати файл sudoers? Якби він це зробив, це працювало б.
Бруно Перейра

1
@goOgle Ви набираєте sudoперед командою всередині коду? вам потрібно це зробити, навіть якщо ви змусили nopasswd у файлі sudoers. тобто: використовувати sudo <command>не тільки <command>.
Бруно Перейра

1
Для мене cmd = "whoami" повертається, brunoа cmd = "sudo whoami"повертаєтьсяroot
Бруно Перейра

3
Знайшов це! Можна відтворити це, якщо мій рядок не знаходиться в кінці sudoersфайлу. Після призначення груп тощо. Дійсно останній рядок! Перемістіть рядок, щоб він був останнім у файлі! (сподіваюся, що це було).
Бруно Перейра
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.