tomcat 7 apps 目录访问权限 io 拒绝访问

 

                    描述:测试如何进行控制Tomcat目录访问权限
方法二可行
 
测试环境:安装java虚拟机,tomcat5.0,配置环境变量catalina.home=C:\Program Files\Apache Software Foundation\Tomcat 5.0java.home=C:\j2sdk1.4.2_08
 
文件目录结构:
虚拟目录指向test目录,目录aa位于test目录下
配置server.xml文件,添加两个虚拟目录,两个虚拟目录下内容相同,如下:<Context path="/test" docBase="C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\test" debug="5" reloadable="true"></Context><Context path="/tt" docBase="E:\tt" debug="5" reloadable="true"></Context>

  

测试文件:  testFilee.jsp可以在e盘根目录创建名为testtestFile222.txt的文件,需要“read”权限;  testFile.jsp可以在虚拟目录跟目录下创建名为testtestFile.txt的文件,需要“read”权限;  testBat.jsp调用批处理文件在E:\tt目录下创建名为new1的文件夹,批处理文件位于E:\tt目录下,需要“execute”权限
 
    可以直接编辑目录conf下的catalina.policy文件,对程序的访问权限进行控制,也可以使用C:\j2sdk1.4.2_08\bin下的policytool工具对该文件进行编辑,具体内容请看附件。
    测试的是 java.io.FilePermission, 控制对文件和目录的读/写/执行操作,有以下权限:read, write, delete和execute说明:directory/* :目录下的所有文件;
    * : 当前目录的所有文件;
    directory/- : 目录下的所有文件,包括子目录;
   - :当前目录下的所有文件,包括子目录;   <<ALL FILES>>:文件系统中的所有文件
1.对testFile.jsp和testBat.jsp文件进行测试,在catalina.policy文件中添加以下语句:
 
1)grant codeBase "file:${catalina.home}/webapps/test/-" {   permission java.io.FilePermission "C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\test\\-", "write";   permission java.io.FilePermission "<<ALL FILES>>", "execute";};运行结果:test/testFile.jsp可以执行;test/testBat.jsp可以执行test/aa/testFile.jsp可以执行;test/aa/testBat.jsp可以执行----------------------------------------------------------
2)grant codeBase "file:${catalina.home}/webapps/test/*" {   permission java.io.FilePermission "C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\test\\*", "write";   permission java.io.FilePermission "<<ALL FILES>>", "execute";};运行结果:test/testFile.jsp可以执行;test/testBat.jsp不可执行,因为运行testBat.jsp文件需要调用子目录中的class文件test/aa/testFile.jsp可以执行;test/aa/testBat.jsp不可执行-----------------------------------------------------------
3)grant codeBase "file:${catalina.home}/webapps/test/aa/-" {   permission java.io.FilePermission "C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\test\\aa\\-", "write";   permission java.io.FilePermission "<<ALL FILES>>", "execute";};运行结果:test/testFile.jsp不可执行;test/testBat.jsp不可执行;test/aa/testFile.jsp不可执行;test/aa/testBat.jsp不可执行;---------------------------------------------------------- 
4)grant codeBase "file:${catalina.home}/webapps/test/aa/-" {   permission java.io.FilePermission "C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\test\\-", "write";   permission java.io.FilePermission "<<ALL FILES>>", "execute";};运行结果:test/testFile.jsp不可执行;test/testBat.jsp不可执行;test/testFile.jsp不可执行;test/testBat.jsp不可执行;
---------------------------------------------------------- 
5)grant codeBase "file:${catalina.home}/webapps/test/-" {   permission java.security.AllPermission; };运行结果:test/testFile.jsp可以执行test/testBat.jsp可以执行test/aa/testFile.jsp可以执行test/aa/testBat.jsp可以执行----------------------------------------------------------
 6)grant codeBase "file:${catalina.home}/webapps/test/aa/-" {permission java.security.AllPermission; };运行结果:test/testFile.jsp不可执行test/testBat.jsp不可执行test/aa/testFile.jsp不可执行test/aa/testBat.jsp不可执行--------------------------------------------------------------------------------------------------------------------
 
 
2.对testFile.jsp和testFilee.jsp文件进行测试,在catalina.policy文件中添加以下语句:
 
1)grant codeBase "file:${catalina.home}/webapps/test/-" {   permission java.io.FilePermission "C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\test\\-", "write";   permission java.io.FilePermission "E:\\-", "write";};运行结果:可以在e盘和test下创建出文件。--------------------------------------------------------2)grant codeBase "file:${catalina.home}/webapps/test/-" {// permission java.io.FilePermission "C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\test\\-", "write";  permission java.io.FilePermission "E:\\-", "write";};运行结果:可以在e盘创建出文件,test下不可。
---------------------------------------------------------3)grant codeBase "file:${catalina.home}/webapps/test/-" {  permission java.io.FilePermission "C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\test\\-", "write";//permission java.io.FilePermission "E:\\-", "write";};运行结果:可以在test下创建出文件,e盘下不可。------------------------------------------------------------------------------------------------------------------
 
3.在catalina.policy文件中添加以下语句:
grant {permission java.security.AllPermission; };//所有虚拟目录下的应用程序代码都可以运行,相当于未做控制
运行结果:所有文件都可以正常运行。
 
 
测试结果:可以针对某个虚拟目录下的代码进行访问控制,控制对其它目录的“读、写、删除、执行”权限,但不能控制jsp文件的运行。
 
 
    编辑conf/web.conf 文件也可以做一些安全控制,如下:
 
   1)“listings”参数可以控制是否允许对目录进行列表;
 
   2)“readonly”参数可以控制页面的GET和POST权限,说明如下:
   正常情况下,web服务器的应用目录只有GET和POST权限,没有PUT和DELETE,可以在tomcat x.x/conf/web.xml内添加一个readonly属性值,这个属性缺省是true,就是只有GET和POST权限,这里需要修改为false。   在web.xml里找到以下代码     <servlet>         <servlet-name>default</servlet-name>         <servlet-class>           org.apache.catalina.servlets.DefaultServlet         </servlet-class>         <init-param>             <param-name>debug</param-name>             <param-value>0</param-value>         </init-param>         <init-param>             <param-name>listings</param-name>             <param-value>true</param-value>         </init-param>         <load-on-startup>1</load-on-startup>   </servlet>   1.将     <init-param>             <param-name>listings</param-name>             <param-value>true</param-value>         </init-param> 中的 “true”改为“false”后,将不能对目录进行列表。
 
  2.添加   <init-param>             <param-name>readonly</param-name>             <param-value>false</param-value>         </init-param> 
参数后,web应用程序将具有PUT和DELETE权限。
 
 
 

2.使用系统权限进行安全控制:
 
   tomcat默认安装完成后其服务使用的是system帐户,具有很大的权限,所以应该使用另外一个权限较小的帐户。
 
1)新建帐户tom,不属于任何组
2)将tomcat服务启动账户更换为tom帐户
3)使用组策略编辑器,赋予tom账户加入“作为服务登陆”权限
4)赋予tom用户tomcat程序安装目录的完全控制权限
5)赋予tom用户网站程序目录的读权限,如需要写权限则进行相应的添加
6)删除其它驱动器的everyone权限,加入tom用户的拒绝权限
 
 
windows下apache与tomcat的整合
 
方法一:
 
1.软件安装版本:Apache 2.2.4, Tomcat 5.0.24, j2sdk-1_4_2_08-windows-i586-p.exe,mod_jk-1.2.30-httpd-2.2.3.so
注意JK的版本一定要与Apache版本相同,可以去官网下载,有多种版本,适用于各种操作系统,下载适用的既可,地址:http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/
2.软件安装:
1)安装JDK,JDK一定要在Tomcat之前安装
2)安装tomcat
3)安装apache,无需停止tomcat的服务。
  在IIS存在的时候,由于apache默认使用80端口,apache在安装完成后服务无法启动,需需要修改httpd.conf配置文件,更改端口,有两处需要更改。
4)JK的安装:把 mod_jk-1.2.26-httpd-2.2.4.so 拷贝到 C:\Program Files\Apache2.2\modules下即可.
测试:
访问 http://localhost/,显示 It works!,表示apache安装成功。
访问 http://localhost:8080,显示tomcat主页面,表示tomcat安装成功。
3.安装完毕后:
 
1)在tomcat目录下,进入conf目录,创建文件workers.properties,文件内容如下:
workers.tomcat_home=C:\Program Files\Apache Software Foundation\Tomcat 5.0 #让mod_jk模块知道Tomcat的位置workers.java_home=C:\Program Files\Java\j2re1.4.2_08 #让mod_jk模块知道jre的位置ps=\worker.list=ajp13 #模块版本worker.ajp13.port=8009 #工作端口,若没占用则不用修改worker.ajp13.host=localhost #本机,若上面的Apache主机不为localhost,作相应修改worker.ajp13.type=ajp13 #类型worker.ajp13.lbfactor=1 #代理数,不用修改
 
2)进入apache目录,在conf目录下找到httpd.conf文件,在文件末尾加入以下内容:
#设置Apache与Tomcat之间的连接,让Apache遇到jsp文件时,在后台将其交由Tomcat去处理LoadModule jk_module modules/mod_jk-1.2.30-httpd-2.2.3.so#此处mod_jk的文件为你下载的文件JkWorkersFile "C:\Program Files\Apache Software Foundation\Tomcat 5.0\conf\workers.properties"#指定tomcat监听配置文件地址JkLogFile "C:\Program Files\Apache Software Foundation\Apache2.2\logs\mod_jk2.log" #指定日志存放位置JkLogLevel info
ErrorLog logs/shsc-error_log.txtCustomLog logs/shsc-access_log.txt commonJkMount /servlet/* ajp13 #让Apache支持对servlet传送,用以Tomcat解析JkMount /*.jsp ajp13 #让Apache支持对jsp传送,用以Tomcat解析JkMount /*.do ajp13 #让Apache支持对.do传送,用以Tomcat解析
 
3)配置apache中conf下的httpd.conf文件,添加虚拟目录如下:Alias /test "C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\test"   #虚拟目录名为test  <Directory "C:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\test">  AllowOverride None        Order allow,deny        Allow from all       <FilesMatch "\.(html)$">                Deny from all        </FilesMatch></Directory> 
Alias /tt "e:\tt" #虚拟目录名为tt<Directory "e:\tt">  AllowOverride None       Order allow,deny       Allow from all       <FilesMatch "\.(html|jsp|asp)$">               Deny from all       </FilesMatch></Directory> 
其虚拟目录与tomcat中虚拟目录配置要一致。
 
4)配置完成后进行测试:在地址栏中分别输入
http://localhost/test/index.jsp
http://localhost:8080/test/index.jsp
后,显示页面相同,表示tomcat和apache整合成功。
 
注意:
在此,apache只解析htm之类的静态页面,jsp页面都被转发到tomcat,由tomcat执行,apache只是起到一个转发的作用。
apache比tomcat执行静态页面的效率要高。
 
 
修改apahce下的配置文件httpd.conf中的
JkMount /*.jsp ajp13 改为  JkMount /tt/mm/*.jsp ajp13,则只能将mm目录下的jsp转发到tomcat。
测试结果:
访问 http://172.16.20.63/tt/index.jsp 无法解析
访问 http://172.16.20.63/tt/nn/index.jsp 无法解析访问 http://172.16.20.63/tt/mm/index.jsp 可以正常解析
 
测试结果说明:
控制apache转发的jsp文件目录,不转发的目录中的jsp则无法执行。
 
 
方法二:
 
1.软件安装方法同上,但不需要拷贝mod_jk-1.2.30-httpd-2.2.3.so 文件
 
2.软件安装完毕后,修改apache下的httpd.conf文件,将
   LoadModule proxy_module modules/mod_proxy.so   LoadModule proxy_ajp_module modules/mod_proxy_ajp.so前面的#号去掉
 
 在文件末尾添加如下语句:
  ProxyPass /tt/mm/ !   ProxyPass / ajp://127.0.0.1:8009/   ProxyPassReverse / ajp://127.0.0.1:8009/
 
测试结果:

访问 http://172.16.20.63/tt/index.jsp 可以正常解析
访问 http://172.16.20.63/tt/2.htm 可以正常解析
访问 http://172.16.20.63/tt/nn/index.jsp 可以正常解析
访问 http://172.16.20.63/tt/2.htm 可以正常解析访问 http://172.16.20.63/tt/mm/index.jsp 无法解析
访问 http://172.16.20.63/tt/2.htm 可以正常解析
 
测试结果说明:
控制apache转发的jsp文件目录,可以分别对需要转发或不转发的目录进行设置。
 
apache的访问控制权限:
1.    Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权。
 
所以,最常用的是:Order Deny,AllowAllow from All 
 
    注意“Deny,Allow”中间只有一个逗号,也只能有一个逗号,有空格都会出错;单词的大小写不限。上面设定的含义是先设定“先检查禁止设定,没有禁止的全部允许”,而第二句没有Deny,也就是没有禁止访问的设定,直接就是允许所有访问了。这个主要是用来确保或者覆盖上级目录的设置,开放所有内容的访问权。
 
按照上面的解释,下面的设定是无条件禁止访问:Order Allow,DenyDeny from All
 
如果要禁止部分内容的访问,其他的全部开放:Order Deny,AllowDeny from ip1 ip2或者Order Allow,DenyAllow from allDeny from ip1 ip2
 
apache会按照order决定最后使用哪一条规则,比如上面的第二种方式,虽然第二句allow允许了访问,但由于在order中allow不是最后规则,因此还需要看有没有deny规则,于是到了第三句,符合ip1和ip2的访问就被禁止了。注意,order决定的“最后”规则非常重要,下面是两个错误的例子和改正方式:
 
Order Deny,AllowAllow from allDeny from domain.org错误:想禁止来自domain.org的访问,但是deny不是最后规则,apache在处理到第二句allow的时候就已经匹配成功,根本就不会去看第三句。解决方法:Order Allow,Deny,后面两句不动,即可。
 
Order Allow,DenyAllow from ip1Deny from all错误:想只允许来自ip1的访问,但是,虽然第二句中设定了allow规则,由于order中deny在后,所以会以第三句deny为准,而第三句的范围中又明显包含了ip1(all include ip1),所以所有的访问都被禁止了。解决方法一:直接去掉第三句。解决方法二:Order Deny,AllowDeny from allAllow from ip1
.htaccess还未进行测试。
 
在使用Order allow,deny进行页面类型过滤的时候,可以控制对htm,html文件类型的访问控制,但是对jsp文件不能过滤,猜测可能是因为jsp文件被转发到tomcat去执行。
 
           

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值