Как запускать команды под su, используя Java Processbuilder? - PullRequest
0 голосов
/ 07 апреля 2019

Я настроил свой /etc/pam.d/su файл так, что я могу переключать пользователя с определенного пользователя vs на root без пароля.

Когда я запускаю su - -c "ls -l /tmp" с помощью терминала, он выдает выходные данные и не требует никакого пароля. Но когда я пытаюсь сделать это с помощью Java ProcessBuilder, это не работает. Вот мой код:

import java.io.File;
import java.util.concurrent.TimeUnit;

class a {
    public static void main(String args[]) {
        try {
            String cmd[] = {"su", "-", "-c", "\"ls -l /tmp\""};
            ProcessBuilder pb = new ProcessBuilder(cmd).redirectOutput(new File("a"));
            Process process   = pb.start();
            if(!process.waitFor(5, TimeUnit.SECONDS)){
                process.destroy();
                process.waitFor();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Я проверил мой выходной файл a (как в приведенном выше коде), он пуст. Но когда String cmd[] = {"ls", "-l", "/tmp"}; мой выходной файл a не пустой, он выдает правильный вывод. Я хочу использовать su для запуска других программ, но я просто проверяю его, используя ls.

Есть ли способ правильно запустить вышеуказанный Java-код?

...