我想在wildfly中的servlet中使用sudo运行特定的命令。
我知道我可以使用tomcat用户运行特定命令:
tomcat ALL=(root) NOPASSWD: /home/jur/virt.sh, /home/jur/createdisk.sh
我尝试了用户'widlfly',但这不起作用。 现在我不知道wildfly用户的名字是什么。我的servlet无法使用sudo运行命令。
在我的servlet中,我有这个:
ProcessBuilder pb = new ProcessBuilder("sudo /home/jur/createdisk.sh " + parameter);
wildfly给出错误:“Java.io.IOExeption:无法运行程序”sudo /home/jur/createdisk.sh参数“:error = 2,没有这样的文件或目录”
当我在终端中使用用户“jur”执行相同操作时,它的效果非常好。
答案 0 :(得分:3)
ProcessBuilder类的构造函数接受多个参数,第一个需要是程序名,以下是程序的参数。
例如,调用ProcessBuilder pb = new ProcessBuilder("ls -l")
会出现与您提到的相同的错误,但调用ProcessBuilder pb = new ProcessBuilder("ls", "-l")
将会成功。
在你的情况下应该是正确的语法
ProcessBuilder pb = new ProcessBuilder("sudo", "/home/jur/createdisk.sh", parameter);