Sudo 命令适用于 unix,但不适用于 java 代码



我在unix sudo命令下运行,它在那里完美运行。
sudo -u xfbcft -i
问题是,当我尝试同样为什么 java 进程生成器的东西时,我在 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 程序的用户和单个命令是相同的。请指导。

我按如下方式更改了我的代码,它就像魅力一样工作。

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

所以重要的是从 bin/sh 执行它

最新更新