Я уже задавал этот вопрос в переполнении стека , но меня попросили опубликовать его здесь. Так и поступаю так же.
Я выполнил эту команду, используя мою программу Java
sudo -u <username> -S pwd
Я получил этот вывод-
command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo
Я пытался редактировать / etc / sudoers, но он уже содержит
<username> ALL=(ALL) NOPASSWD: ALL
Затем я узнал, что это можно сделать, закомментировав следующий код в / etc / sudoers
# Defaults requiretty
Кроме того, по умолчанию при попытке выполнить команду, используя другого пользователя sudo
, мы должны предоставить собственный пароль. Но это можно изменить, сделав следующее изменение в / etc / sudoers-
Defaults targetpw
Мой вопрос, возможно ли выполнить вышеупомянутую команду в Java без каких-либо изменений, то есть с настройками по умолчанию ?
requiretty
включен по умолчанию. Согласноsudo
собственной документации он по умолчанию выключен.Ответы:
Я не знаю, как запускать команды оболочки в Java, но посмотрите опцию -t для команды ssh
Это то, что я делаю, когда мне нужно запустить команду от имени пользователя root через ssh (прямое отключение учетной записи root и tty требуется для sudo)
источник
Короткий ответ - нет, вам нужно изменить настройки, чтобы sudo делал что-то не так, как сейчас.
sudo может быть неправильным инструментом для этого. Правила Sudo предназначены для того, чтобы помочь системным администраторам настроить способ получения повышенных привилегий, которые трудно использовать для получения дополнительных / непреднамеренных привилегий.
Если вы считаете, что sudo делает для вас:
Если вы хотите, чтобы ваша java запускала произвольные команды как произвольные пользователи, не предоставляя пароль ни для этих пользователей, ни для ваших собственных, вы по сути заменяете sudo. В этом случае вы должны создать свои собственные правила для предотвращения злоупотреблений.
Есть два основных способа сделать это:
В случае # 1 ваша java-программа выполняет то же, что и sudo, и вы должны реализовать свой собственный набор правил для защиты от злоупотреблений.
Есть программы, отличные от sudo, для # 2. Один пример можно найти в https://code.google.com/archive/p/exec-wrapper/downloads
Этот удобный сценарий оболочки создает программу на C для запуска другой команды (обычно сценария). Затем вы компилируете программу на C в двоичный файл и отмечаете, что setuid root, или действительно, он может быть установлен для любого пользователя. (режим: 4555 и владелец: root)
Пока вы находитесь в файловой системе, которая позволяет это, запуск двоичной программы будет запускать настроенную команду как идентификатор пользователя, которому принадлежит сама двоичная программа.
источник