心无痕的博客

常用链接

统计

积分与排名

JAVA技术文档

JAVA精典网站

开发工具

数据库

最新评论

Tomcat或Resin使用security-manager的问题--转载

我们打算为用户架设单独的虚拟主机服务器,可以让企业自主上传jsp、htm、php等程序。其中resin用来做jsp的容器。
     由于是用户自主通过FTP上传程序,我们必须控制这些程序可以执行的权限,不能让用户随便浏览硬盘上的文件,但又要能让resin可以正常运行。比如:/data/user_a目录中的程序,只能在/data/user_a目录及其子目录中读写,如果想要访问其他目录,就没有权限。
     通过研究resin的文档以及JAVA的机制,我认为要实现以上构想,可以通过使用java权限管理器来构建一个resin的沙箱来对java的具体操作进行授权。
参考文档:http://www.caucho.com/resin-3.0/security/securitymanager.xtphttp://www.jscud.com/srun/news/viewhtml/3_2005_10/148.htm

     当我认为胜利在望的时候,发现resin好像不支持grant codeBase "file:xxxx 。

grant codeBase "file:/data/ftpdata/user01.test.com/-" {
 permission java.io.FilePermission "/data/ftpdata/user01.test.com/-", "read,write,delete";
};
     上面的语句,语法上没有问题,但就是不起作用。那个codebase目录下的文件,对本目录没有任何权限。

        resin的官方论坛里面,有人在2001年,针对resin1.2.5就提出了和我一摸一样的疑问(http://www.caucho.com/support/resin-interest/0105/0106.html),作者发现问题是由于resin的classloader是非安全的,因此改了resin原文件后解决了问题(http://www.caucho.com/support/resin-interest/0105/0112.html),但是我看resin3的源代码,里面已经基于java.security.SecureClassLoader,因此应该不是这个原因了。
     以下是我的resin.policy文件:

grant codeBase "file:${java.home}/lib/-" {
 permission java.security.AllPermission;
};

grant codeBase "file:${java.home}/jre/lib/-" {
 permission java.security.AllPermission;
};

grant codeBase "file:${resin.home}/lib/-" {
 permission java.security.AllPermission;
};

grant {
 permission java.util.PropertyPermission "*", "read";
 permission java.io.SerializablePermission "enableSubstitution";
 permission java.lang.reflect.ReflectPermission "suppressAccessChecks"; 
 permission java.lang.RuntimePermission "accessClassInPackage.*";
 permission java.lang.RuntimePermission "getClassLoader";
 permission java.lang.RuntimePermission "accessDeclaredMembers";
 permission java.lang.RuntimePermission "modifyThreadGroup";
 permission java.lang.RuntimePermission "setContextClassLoader";
 permission java.lang.RuntimePermission "setIO";
 permission java.lang.RuntimePermission "stopThread";
 permission java.lang.RuntimePermission "createClassLoader";
 permission java.lang.RuntimePermission "getProtectionDomain";
 permission java.lang.RuntimePermission "defineClassInPackage";
 permission java.security.SecurityPermission "putProviderProperty.SunJCE";
 permission java.security.SecurityPermission "insertProvider.SunJCE";
 permission java.util.logging.LoggingPermission "control";
 permission java.lang.RuntimePermission "getAttribute";
 permission java.util.PropertyPermission "jaxp.debug", "read";
 permission ognl.OgnlInvokePermission "invoke.*";
 permission java.net.SocketPermission "localhost:3306","connect";
 permission java.io.FilePermission "${resin.home}/-", "read";
 permission java.io.FilePermission "${java.home}/-", "read";
 permission java.io.FilePermission "/tmp/-","read,write,delete";
 permission java.io.FilePermission "/tmp","read,write,delete";
 permission java.io.FilePermission ".","read";
 permission java.io.FilePermission "/home/apps/java/jdk/lib/tools.jar","read";
 permission java.io.FilePermission "/bin/sh", "read,execute";
};

//以下语句没有任何作用,/data/ftpdata/user01.test.com/下的jsp对这个目录没有读的权限
grant codeBase "file:/data/ftpdata/user01.test.com/-" {
 permission java.io.FilePermission "/data/ftpdata/user01.test.com/-", "read,write,delete";
};

posted on 2008-03-08 11:46 心无痕 阅读(834) 评论(0)  编辑  收藏 所属分类: JAVA


只有注册用户登录后才能发表评论。


网站导航: