所以我有以下问题:我有一个在 Linux 上的 Tomcat7 服务器内运行的 Web 服务。然而,Web 服务必须执行一些命令(主要是文件操作,例如复制和挂载)。我已经用 java.nio 替换了,但我认为没有mount
.
所以我试图从我的 Tomcat Java 进程中执行 shell 命令。不幸的是,它不执行我的命令。我之前已经在 Java 中实现了 shell 命令的执行。所以我的代码应该是正确的:
Process pr = Runtime.getRuntime().exec("mount -o loop -t iso9660 <myimage> <mymountpoint>");
pr.waitFor();
<myimage>
并且<mymountpoint>
是绝对路径,所以也没有问题。
- 我已经调试了我的命令,它们在控制台上执行时正在工作。
- 我试过发送其他命令。简单的命令,如
id
和pwd
正在工作! - 我试过使用
/bin/bash -c "<command>"
,没有用。 - 我试过执行一个shell脚本,它执行命令,但没有用。
- 我尝试转义命令中的空格,但没有成功。
所以我已经深入挖掘,现在我怀疑一些 Tomcat 安全策略(沙盒?),它阻止我执行命令。由于安全性对我来说不是问题(它是一个内部系统,与外界完全隔离),我尝试了一种 hack,它最近变得非常流行:
System.setSecurityManager(null);
这也不起作用。我在 RHEL6 上使用 Java7 和 Tomcat7。Tomcat7刚刚解压!我在 /etc/.. 或除 /opt/tomcat/ 之外的任何其他文件夹中没有任何文件,我从 Tomcat 主页中提取了 zip。我在 /opt/tomcat/conf 文件夹中搜索了安全设置,但我能找到的只是文件 catalina.policy,我似乎无法为 shell 命令设置一些安全级别。
有任何想法吗?