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