У меня есть приложение Java, которое работает на сервере Linux и выполняет ряд действий (создание каталога, копирование нескольких файлов, проверка, запущено ли приложение и т. Д.). Я использую log4j2 для регистрации сообщений, и он работает нормально.
У меня есть требование прочитать учетную запись и выдать себя за эту учетную запись (без пароля пользователя sudo switch), а затем выполнить ряд вышеуказанных действий. Доступ к sudo без пароля был взят.
Я уже сделал это с помощью оболочки (сначала переключите пользователя, а затем запустите программу Java), однако я поднял этот вопрос, чтобы понять, можно ли это сделать в программе Java?
Execution: java -jar xyz.jar parm1
Для оценки я изменил код Java для запуска команды оболочки, как показано ниже (я использую Processbuilder):
Когда я запускаю Java-программу, журналы появляются только до момента выполнения команды оболочки sudo, и после этого шага журналы не отображаются.
Есть ли способ сохранить все журналы до и после смены пользователя (олицетворение)? (Я использую log4j2 и пишу в файл журнала, у которого есть права на запись для других пользователей).
Пожалуйста, поделитесь, если есть какое-либо известное решение?
[EDIT] Добавление фрагмента кода Java, используемого для запуска sudo
public boolean switchUser(String account) {
ShellCommand shellCommand = new ShellCommand();
List<String> cmd = new ArrayList<String>();
cmd.add("su");
//....I construct asu command for the passed account here. I have passwordless sudo su access and tested fine manually
//I've some logger messages here
shellCommand.runCommand(cmd); //Class with method that uses ProcessBuilder and executes shell command
}
[EDIT] Я думаю, что когда я запускаю su из Java, он открывает новую оболочку, в то время как Java ждет его завершения. Возможно, это причина того, что после этого журналы не видны. Так что одним из решений будет завернуть его в оболочку, выполнить команду su для запуска jar.