catalina.policyのFilePermissionの設定について。
Webアプリケーションがデプロイされているディレクトリ外にあるディレクトリおよびファイルを読み書きする方法としてcatalina.policyファイルにFilePermissionを設定することにしました。
環境説明:
webサーバ: Apache2 Tomcat5
os: CentOS4.4
webアプリのデプロイディレクトリ:/usr/local/tomcat/webapps/myapp
参照したいディレクトリ:/var/local/myapp
catalina.policyの設定:
SYSTEM CODEパーミッションとCATALINA CODEパーミッションの設定はそのまま。
WEB APPLICATION パーミッションの一番最後に
grant codeBase "file:/usr/local/tomcat/webapps/myapp/-" {
permission java.io.FilePermission "/var/local/myapp","read,write,execute,delete" };
と入力しました。これによりmyappディレクトリ以下のclassファイルが/var/local/myappディレクトリ内にアクセスできるようになると思うのですが、/usr/local/tomcat/bin/catalina.sh start -securityとしてTomcatを起動。またApacheも起動して実行すると以下のエラーが発生してしまいます。
java.security.AccessControlException: access denied (java.io.FilePermission /var/local/myapp read)
java.security.AccessControlContext.checkPermission(AccessControlContext.java:264)
java.security.AccessController.checkPermission(AccessController.java:427)
java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
java.lang.SecurityManager.checkRead(SecurityManager.java:871)
java.io.File.canRead(File.java:658)
ShowFile.doGet(ShowFile.java:17)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:585)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
何か指定が違っているのでしょうか?あるいは、catalina.policyファイル内で何か設定するものがほかにあるのでしょうか?ご教授願えればと思います。よろしくお願いいたします。
お礼
ご回答ありがとうございます。 /var/webapps/tomcat/webapps/job は確かに存在しませんので、生成してみました。 Tomcatを再起動しただけでなぜ正常に戻ったのかが不明です。 しばらく様子を見てみたいと思います。