如何使用Java ProcessBuilder在Su下运行命令?

时间:2019-04-07 15:06:00

标签: java bash processbuilder su

我已经调整了/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代码?

0 个答案:

没有答案