Мой вопрос, возможно ли выполнить вышеупомянутую команду в Java без каких-либо изменений, то есть с настройками по умолчанию?
sudo -u -S pwd
Короткий ответ - нет, вам нужно изменить настройки, чтобы sudo делал что-то не так, как сейчас.
sudo может быть неправильным инструментом для этого. Правила Sudo предназначены для того, чтобы помочь системным администраторам настроить способ получения повышенных привилегий, которые трудно использовать для получения дополнительных / непреднамеренных привилегий.
Если вы считаете, что sudo делает для вас:
- запрашивает пароль для подтверждения личности
- повысить привилегии
- затем при желании получить права как другой пользователь
- журналы sudo используют для получения доступа или запуска команд
Если вы хотите, чтобы ваш java запускал произвольные команды как произвольные пользователи, не предоставляя пароль ни для этих пользователей, ни для вас, вы по сути заменяете sudo. В этом случае вы должны создать свои собственные правила для предотвращения злоупотреблений.
Есть два основных способа сделать это:
- Запустите Java с повышенными привилегиями и тщательно извлекайте и возвращайте необходимые привилегии (см. вызовы функций setuid () seteuid () C).
- запустить внешнюю программу, чтобы получить повышенные привилегии, когда вы хотите их
В случае с # 1 ваша java-программа выполняет то же, что и sudo, и вы должны реализовать свой собственный набор правил для защиты от злоупотреблений.
Есть программы, отличные от sudo, для # 2. Один пример можно найти в https://code.google.com/archive/p/exec-wrapper/downloads
Этот удобный сценарий оболочки создает программу на C для запуска другой команды (обычно сценария). Затем вы компилируете программу на C в двоичный файл и отмечаете, что setuid root, или действительно, он может быть установлен для любого пользователя. (режим: 4555 и владелец: root)
Пока вы находитесь в файловой системе, которая позволяет это, запуск двоичной программы будет запускать настроенную команду в качестве идентификатора пользователя, которому принадлежит сама двоичная программа.