使用Java processBuilder运行sudo命令
我需要在java中运行sudo命令,并使用processbuilder或类似工具将输出重定向到文件 两个问题:使用Java processBuilder运行sudo命令,java,java-8,iptables,processbuilder,Java,Java 8,Iptables,Processbuilder,我需要在java中运行sudo命令,并使用processbuilder或类似工具将输出重定向到文件 两个问题: 使用echo设置sudo密码是否可以按如下方式工作 尽管创建了该文件,但从未向其写入任何内容。你知道为什么吗 ProcessBuilder conntrack_process = new ProcessBuilder("/bin/bash", "-c", "echo '<passwordhere>' | sudo conntrack -L"); conntrack_proc
ProcessBuilder conntrack_process = new ProcessBuilder("/bin/bash", "-c", "echo '<passwordhere>' | sudo conntrack -L");
conntrack_process.redirectOutput(new java.io.File("/home/<homedir>/conntrack_out.txt"));
Process ct_process = conntrack_process.start();
ct_process.waitFor();
ct_process.destroy();
ProcessBuilder conntrack\u process=newprocessbuilder(“/bin/bash”、“-c”、“echo”| sudo conntrack-L”);
重定向输出(新的java.io.File(“/home//conntrack\u out.txt”);
Process ct_Process=conntrack_Process.start();
ct_进程。waitFor();
ct_process.destroy();
我正在使用Ubuntu 16.04。首先,您需要将
-S
与sudo
一起使用,以使其从其stdin读取密码。第二,您应该读取或重定向错误流到某个地方,以了解任何错误。旧问题,但您应该设置sudoers文件,只允许该命令,而不允许该用户使用密码
myusername ALL=(root)NOPASSWD:/path/to/my/program
从某个.sh文件运行java并使用setuid位并将root作为文件所有者,可以解决您的任务吗?只是问一下,因为你不需要为sudo操心。谢谢,我愿意接受Roman的回答,但是根据文档没有复选标记:“点击答案旁边的复选标记”。你知道为什么吗?那是因为这是一个评论,不是答案。现在我添加了一个答案。虽然通过
echo
进行管道传输可能会起作用,但强烈建议不要这样做,因为其他进程可以在进程运行时看到命令行,从而看到密码。由于Java进程
API已经为您提供了一个管道,因此无需创建另一个管道。只需将sudo
作为子进程运行,并使用process.getInput()。写入(/*密码为字节加\n*/)
。@the.Legend-Setuid根脚本非常危险。