Выдача себя за пользователя в Linux через Java - PullRequest
0 голосов
/ 08 мая 2019

У меня есть приложение 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.

...