したがって、次の問題があります。LinuxのTomcat7サーバー内でWebサービスを実行しています。ただし、Webサービスはいくつかのコマンド(主にコピーやマウントなどのファイル操作)を実行する必要があります。コピー私はjava.nioに置き換えましたが、の代わりになるとは思いませんmount
。
そのため、TomcatJavaプロセスからシェルコマンドを実行しようとしています。残念ながら、コマンドは実行されません。以前、Javaでシェルコマンドの実行を実装しました。だから私のコードは正しいはずです:
Process pr = Runtime.getRuntime().exec("mount -o loop -t iso9660 <myimage> <mymountpoint>");
pr.waitFor();
<myimage>
と<mymountpoint>
は絶対パスなので、問題もありません。
- コマンドをデバッグしましたが、コンソールで実行すると機能します。
- 他のコマンドを送ってみました。
id
やなどの簡単なコマンドが機能しpwd
ています! - を使ってみましたが
/bin/bash -c "<command>"
、うまくいきませんでした。 - コマンドを実行するシェルスクリプトを実行しようとしましたが、機能しませんでした。
- コマンドのスペースをエスケープしようとしましたが、機能しませんでした。
それで、私はさらに深く掘り下げました、そして今、私はコマンドを実行することを妨げるいくつかのTomcatセキュリティポリシー(サンドボックス?)を疑っています。セキュリティは私にとって問題ではないので(これは内部システムであり、外界から完全に隔離されています)、最近非常に人気が出たハックを試しました。
System.setSecurityManager(null);
これもうまくいきませんでした。RHEL6でJava7とTomcat7を使用しています。Tomcat7が抽出されました!/ etc/..または/opt/ tomcat /以外のフォルダーにファイルがありません。ここで、Tomcatホームページからzipを抽出しました。/ opt / tomcat / confフォルダーでセキュリティ設定を検索しましたが、見つかったのはファイルcatalina.policyだけで、シェルコマンドにセキュリティレベルを設定できるようには見えませんでした。
何か案は?