【问题标题】:Setting catalina.policy to allow file access by servlets设置 catalina.policy 以允许 servlet 访问文件
【发布时间】:2010-10-09 10:00:50
【问题描述】:

我们有一个本地开发的基于 b-trees 的三元存储,我想在许多 servlet 应用程序中将其用于持久存储。我不想将 b-tree 索引文件嵌入到 servlet .war 中,而是希望将它们存储在已知位置并让 servlet 直接访问它们。这一切都适用于 Jetty,但当我在 Tomcat 中尝试时会引发安全异常。有人告诉我,Tomcat 的安全模型需要明确的 servlet 权限才能访问解压缩 .war 的目录树之外的文件。如果我正确理解了 Tomcat(5.5 版)文档,添加到 catalina.policy 的以下内容应该允许 servlet 访问索引文件所在的目录:

grant codeBase "jar:file:${catalina.home}/webapps/mytestapp/-"
{
  permission java.io.FilePermission "/var/data/tdb/-", "read, write, delete"; 
}

但是,我仍然遇到安全异常:

java.io.FileNotFoundException: 
                    /var/data/tdb/kb/node2id.idn (Permission denied)
    at java.io.RandomAccessFile.open(Native Method)
    ...

勾选明显的愚蠢错误:我检查了索引文件位于正确的位置,具有正确的权限,并且没有损坏。任何关于我在安全设置中出错的建议或提示将不胜感激。

【问题讨论】:

  • 您能否发布您打开文件的方式/您使用的代码?
  • 你在运行 selinux 吗?如果是这样,您可能需要配置 selinux 以便它允许 Java 访问该目录。

标签: java security configuration tomcat


【解决方案1】:
java.io.FileNotFoundException: 
                /var/data/tdb/kb/node2id.idn (Permission denied)

这是您的操作系统拒绝访问,而不是 Java 安全。如果是 Java 安全性,您会得到一个AccessControlException(或其他形式的SecurityException)。您运行 Tomcat 进程的用户可能无权访问该文件。

【讨论】:

  • 嗨,汤姆,感谢您提供的信息。这是我的第一个想法,但我已经将文件和它们所在的目录chown'ed和chgrp'ed到与Tomcat进程相同的用户和组。不过,它给了我一个调查的指针。谢谢。
  • Tom 是对的,这是操作系统文件权限问题,而不是 Tomcat。我还没有完全深入,但是暂时将测试服务器上的文件权限打开到 a+rw 可以消除异常。现在我只需要找出一个更严格的设置,不会让商店大开!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
相关资源
最近更新 更多