Команда Sudo работает на Unix, но не из Java-кода - PullRequest
0 голосов
/ 20 сентября 2018

Я использую команду Unix sudo, и она отлично работает там.
sudo -u xfbcft -i
Проблема заключается в том, что когда я пытаюсь сделать то же самое, почему я использую Java Builder, яв разрешении отказано в исключении в Unix.

public class Test {
public static void main(String args[]){
    System.out.println("Going to execute:");
    runUnixComand();
}

private static void runUnixComand() {
    Process p;
    StringBuffer output = new StringBuffer();

    try {
        String [] cmdArray ={"sudo -u xfbcft -i ","cftping -v","exit"};

        ProcessBuilder builder = new ProcessBuilder(cmdArray);
        builder.redirectErrorStream(true);
        //builder.redirectOutput();
        Process process = builder.start();
        InputStream is = process.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));

        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println("op:"+line);
        }
    } catch (Exception e) {
        System.out.println(e);
        e.printStackTrace();
    }
}}

Ниже приведена строка исключения, которую я получаю на терминале Unix.

java.io.IOException: Cannot run program "sudo -u xfbcft -i ": error=13, Permission denied
java.io.IOException: Cannot run program "sudo -u xfbcft -i ": error=13, Permission denied
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
        at JdbcTest.runUnixComand(JdbcTest.java:23)
        at JdbcTest.main(JdbcTest.java:8)
Caused by: java.io.IOException: error=13, Permission denied
        at java.lang.UNIXProcess.forkAndExec(Native Method)
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
        at java.lang.ProcessImpl.start(ProcessImpl.java:134)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)

Примечание. У меня есть записи в файле sudoers, а отдельные команды работают в Unix.Кроме того, пользователь, выполняющий эту Java-программу и отдельную команду, является тем же.Пожалуйста, руководство.

1 Ответ

0 голосов
/ 21 сентября 2018

Я изменил свой код, как показано ниже, и он работает как шарм.

ProcessBuilder builder = new ProcessBuilder("/bin/sh", "-c", "sudo -H -u xfbcft -i");
            builder.redirectErrorStream(true);

, поэтому важно было выполнить его из bin / sh

...