Я настроил свой /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-код?