本文以最新发布的Ant 1.5.1为例,介绍这款优秀的Build工具的安装配置、基本应用和一些高级话题。最新的Ant下载地址是 http://jakarta.apache.org/ant/ 。
Ant是一种基于Java的Build工具。理论上来说,它有些类似于C中的make,但比make优越。现在存在的大多数Build工具,如make、gnumake、nmake、jam等都存在这样或那样的不足,比如依赖于特定的平台、配置文件过于复杂或者对格式无法检查而容易出错等。与这些工具相比较,Ant的两个特性决定了它是一款优秀的Build工具:
1. 基于Java的实现。具有良好的跨平台性,同时可以通过增加新的Java类来扩展Ant的功能,而无需去了解不同平台上不同的脚本语言。
2.基于XML的配置文件。Ant以XML树来描述Target/Task的关系,文件结构清晰、易读易写,并且利用XML对格式的控制来避免由于配置文件的错误造成的Build操作失败。
安装与配置
Ant的安装非常简单,把从网上下载的jakarta-ant-1.5.1-bin.zip解开到一个目录下即可(以下假定安装在目录D:\jakarta-ant-1.5.1)。接下来需要进行环境变量配置:
SET ANT_HOME=D:\jakarta-ant-1.5.1 //注意是Ant的安装目录,不是bin子目录 SET PATH=%PATH%;%ANT_HOME%\bin; |
在配置环境变量之前,请确认已经正确设置了JAVA_HOME系统变量。输入ant命令,看到如下输出说明已成功安装了Ant工具:
Buildfile: build.xml does not exist! Build failed |
提示信息表明在当前目录不存在build.xml配置文件,但这本身已经说明Ant成功运行了。
快速入门
下面用一个最简单也是最经典的例子-HelloWorld来感受一下Ant吧。
//HelloWorld.java package com.sharetop.antdemo; public class HelloWorld { public static void main( String args[] ) { System.out.println("Hello world. "); } } |
要让Ant编译这个文件,首先需要编写一个Build配置文件。在一般情况下,这个文件被命名为build.xml。
<?xml version="1.0" encoding="UTF-8" ?> <project name="HelloWorld" default="run" basedir="." > <property name="src" value="src"/> <property name="dest" value="classes"/> <property name="hello_jar" value="hello.jar" /> <target name="init"> <mkdir dir="${dest}"/> </target> <target name="compile" depends="init"> <javac srcdir="${src}" destdir="${dest}"/> </target> <target name="build" depends="compile"> <jar jarfile="${hello_jar}" basedir="${dest}"/> </target> <target name="run" depends="build"> <java classname="com.sharetop.antdemo.HelloWorld" classpath="${hello_jar}"/> </target> </project> |
来看一下这个文件的内容,它描述了以下信息:工程的名字为HelloWorld,工程有四个target,分别是init、compil、build和run,缺省是run。compile只有一个任务javac,源文件位于src目录下,输出的类文件要放在classes目录下。build的任务是jar,生成的jar文件为hello.jar,它打包时以classes为根目录。而run则是执行这个HelloWorld类,用hello.jar作为classpath。这四个target之间有一个依赖关系,这种关系用depends来指定。即如果Target A依赖于Target B,那么在执行Target A之前会首先执行Target B。所以从下面运行缺省Target(run)的输出看,这四个Target的执行顺序是:init→compile→build→run。文件目录结构如图1所示。HelloWorld.java文件在src\com\sharetop\antdemo子目录下。
在命令行输入命令:ant,然后运行,可以看到如下输出:
如果配置文件名不是build.xml,比如是build_front.xml,那么,可以使用-buildfile命令参数指定:
G:\myDoc\ant_demo>ant -buildfile build_front.xml |
也可以单独执行指定的某个target,比如,只编译不打包执行,可以使用下面输入命令即可:
G:\myDoc\ant_demo>ant compile |
在相应的目录下会找到编译出的HelloWorld.class文件。
再看看上面的build.xml配置文件,文件开头定义了3个属性,分别指定了源文件输出路径、类文件输出路径和生成的Jar文件名,后面对这些路径的引用都通过一个${property name}来引用。所以,要注意这样一个原则“目录的定义与目录的引用应该分开”。
基本应用
建立工程的目录 一般要根据工程的实际情况来建立工程的目录结构。但是,有一些比较通用的组织形式可供参考,比如所有的jakarta项目都使用类似的目录结构。下面让我们来看一下这种目录结构的特点。
表1
目录 | 文件 |
bin | 公共的二进制文件,以及运行脚本 |
build | 临时创建的文件,如类文件等 |
dist | 目标输出文件,如生成Jar文件等。 |
doc/javadocs | 文档。 |
lib | 需要导出的Java包 |
src | 源文件 |
对于一个简单的工程,一般包括表1的几个目录。其中bin、lib、doc和src目录需要在CVS的控制之下。当然在这样的目录结构上,也可以做一些调整,例如,可以建立一个extra目录来放置需要发布的Jar文件、Inf文件及图像文件等。同样,如果开发Web应用可以建立一个Web目录放置JSP、HTML等文件。
如果我们开发的是一个比较复杂的项目,包括多个子项目,并且各个子项目是由不同的开发人员来完成的,那么要如何来设计它的目录结构?首先有一点是需要确定的,不同的子项目应该拥有不同的Build文件,并且整个项目也应该有一个总的Build文件。可以通过Ant任务或是AntCall任务调用子项目的Build文件,如下例:
<target name="core" depends="init"> <ant dir="components" target="core"/> <ant dir="waf/src" target="core"/> <ant dir="apps" target="core"/> </target> |
在各个子项目的耦合不是非常紧密的情况下,各个子项目应该有各自独立的目录结构,也就是说它们可以有自己的src、doc、build、dist等目录及自己的build.xml文件,但是可以共享lib和bin目录。而对于那些耦合紧密的子项目,则推荐使用同一个src目录,但是不同的子项目有不同的子目录,各个子项目的build.xml文件可以放在根目录下,也可以移到各个子项目的目录下。
编写Build文件 要用好Ant工具,关键是要编写一个build.xml文件。要编写出一个结构良好、灵活可扩展的Build文件,有两个问题要考虑,一是了解Build文件的基本结构,二是了解Ant定义的大量任务。
Ant的Build文件是一个标准的XML文件,它包含一个根节点Project,每个Project定义了至少一个或多个Target,每个Target又是一系列Task的集合。它们之间的关系如图2所示。
每个Task是一段可被执行的代码,比如,前例中的javac、jar就是两个最常用的Task。Ant定义了大量的核心Task,我们要考虑的第二个问题正是如何去掌握这大量的Task。其实唯一的方法就是边学习边实践,这方面最好的参考就是官方的Ant使用手册。
外部文件的使用 使用外部的Property文件可以保存一些预设置的公共属性变量。这些属性可以在多个不同的Build文件中使用。
可以将一个外部的XML文件导入Build文件中,这样多个项目的开发者可以通过引用来共享一些代码,同样,这也有助于Build文件的重用,示例代码如下所示:
<!DOCTYPE project [ <!ENTITY share-variable SYSTEM "file:../share-variable.xml"> <!ENTITY build-share SYSTEM "file:../build-share.xml"> ]> <project name="main" default="complie" basedir="."> &share-variable; &build-share; ... ... |
在J2EE项目中的应用
只要掌握了Ant的使用方法,在J2EE项目中的应用与在其它项目中的应用并没有太大的不同,但是仍有几点是需要注意的。
一是要清楚War和Jar文件的目录结构,主要是War的配置文件web.xml文件的位置和EJB的配置文件(ejb-jar.xml和weblogic-ejb-jar.xml等)的位置,在调用Jar任务打包文件时一定要记得把它们也包含进来。一般在编译之前就要注意把这些需打包的文件拷入相应目录下。二是在J2EE项目中可能会涉及到一些特殊的任务,比如在Weblogic中会调用ejbc预编译EJB的代码存根,或者需要在Ant中同时发布Jar到相应的服务器中等。可以用两种途径实现这些任务,一是扩展Ant任务实现这些任务,二是直接用Java任务来执行这些命令。下面是打包、发布一个EJB的build.xml配置文件片断,代码如下:
<target name="deploy_HelloEJB" depends="compile"> <delete dir="${temp}/ejb_make"/> <!-- 首先删除临时目录 --> <delete file="${temp}/helloEJB.jar"/> <!-- 删除WebLogic域中老版本的EJB --> <delete file="${weblogic.deploy.dest}/helloEJB.jar"/> <!-- 创建META-INF目录,放置ejb-jar.xml和weblogic-ejb-jar.xml --> <mkdir dir="${temp}/ejb_make/META-INF"/> <!-- 拷贝ejb-jar.xml和weblogic-ejb-jar.xml 到临时目录--> <copy todir="${temp}/ejb_make/META-INF"> <fileset dir="etc/baseinfo"> <include name="*.xml"/> </fileset> </copy> <!-- 拷贝所有的helloEJB类到临时目录 --> <copy todir="${temp}/ejb_make/"> <fileset dir="${dest.classes}/"> <!-- dest.classes是输出的类文件目录 --> <include name="${dest.classes}/helloEJB/**"/> </fileset> </copy> <!-- 将所有这些文件打包成helloEJB.jar --> <jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/> <!-- 进行weblogic.ejbc编译 --> <java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" > <classpath> <fileset dir="lib"> <include name="*.jar" /> </fileset> </classpath> <arg value="${temp}/helloEJB.jar" /> <arg value="${temp}/helloEJB_deploy.jar" /> </java> <!-- 拷贝/发布到WebLogic的{DOMAIN}\applications目录 --> <copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/> </target> |
用Ant配合JUnit实现单元测试
Ant 提供了JUnit任务,可以执行单元测试代码。如何使用JUnit,以及如何编写测试用例(TestCase),感兴趣的读者可以参阅JUnit的相关文档。在Ant中使用JUnit的方法非常简单,首先需要把junit.jar拷入ANT_HOME\lib下,确认在这个目录下有optional.jar,因为JUnit是Ant的扩展任务,需要引用这个扩展包。然后就是在Build文件中加入JUnit的任务,代码如下:
<target name="run" depends="client"> <junit printsummary="yes" fork="yes" haltonfailure="yes"> <classpath> <pathelement location="client.jar" /> </classpath> <formatter type="plain" /> <test name="com.sharetop.antdemo.HelloWorldTest" /> </junit> </target> |
高级话题
为Ant开发扩展任务 为Ant实现扩展任务其实是非常容易的,只需按照以下几个步骤即可:
1. 创建一个Java类继承org.apache.tools.ant.Task类;
2. 对每个属性实现set方法。Ant会根据需要自动完成类型转换;
3. 如果扩展的任务需要嵌套其它的Task,那么这个Java类必需实现接口org.apache.tools.ant.TaskContainer;
4. 如果扩展的任务要支持Text,需要增加一个方法void addText(String);
5. 对每个嵌套的元素,实现create、add 或 addConfigured 方法;
6. 实现public void execute方法;
7. 在build.xml文件中使用 <taskdef> 来引用自定义的Task。
下面以一个简单的例子来说明如何为Ant增加一个hello任务,它可以连续打印多条信息,打印的次数由属性count指定,而打印的内容则由它内嵌的一个helloinfo任务的message属性指定,看上去这非常类似JSP中自定义标签的一些概念,实现代码如下:
//HelloInfoTask.java package com.sharetop.antdemo; import org.apache.tools.ant.*; public class HelloInfoTask { private String msg; public void execute() throws BuildException { System.out.println(msg); } public void setMessage(String msg) { this.msg = msg; } } |
下面是外部Task类的代码:
//HelloTask.java package com.sharetop.antdemo; import org.apache.tools.ant.*; public class HelloTask extends Task implements org.apache.tools.ant.TaskContainer { private Task info; private int count; public void execute() throws BuildException { for(int i=0;i<count;i++) info.execute(); } public void setCount(int c){ this.count=c; } public void addTask(Task t){ this.info=t; } } |
实现了这两个Task,在build.xml文件中定义它的task name,就可以在Target中执行它了。如果你不想使用 <taskdef> 标签来定义Task,也可以通过修改default.properties文件来实现引入新Task,这个文件位于org.apache.tools.ant.taskdefs 包里。下例是一个使用 标签来引入新Task的Build文件部分:
<target name="hello" depends="client"> <taskdef name="hello" classname="com.sharetop.antdemo.HelloTask" classpath="client.jar"/> <taskdef name="helloinfo" classname="com.sharetop.antdemo.HelloInfoTask" classpath="client.jar"/> <hello count="3" > <helloinfo message="hello world" /> </hello> </target> |
每个Task是一段可被执行的代码,比如,前例中的javac、jar就是两个最常用的Task。Ant定义了大量的核心Task,我们要考虑的第二个问题正是如何去掌握这大量的Task。其实唯一的方法就是边学习边实践,这方面最好的参考就是官方的Ant使用手册。
外部文件的使用 使用外部的Property文件可以保存一些预设置的公共属性变量。这些属性可以在多个不同的Build文件中使用。
可以将一个外部的XML文件导入Build文件中,这样多个项目的开发者可以通过引用来共享一些代码,同样,这也有助于Build文件的重用,示例代码如下所示:
<!DOCTYPE project [ <!ENTITY share-variable SYSTEM "file:../share-variable.xml"> <!ENTITY build-share SYSTEM "file:../build-share.xml"> ]> <project name="main" default="complie" basedir="."> &share-variable; &build-share; ... ... |
在J2EE项目中的应用
只要掌握了Ant的使用方法,在J2EE项目中的应用与在其它项目中的应用并没有太大的不同,但是仍有几点是需要注意的。
一是要清楚War和Jar文件的目录结构,主要是War的配置文件web.xml文件的位置和EJB的配置文件(ejb-jar.xml和weblogic-ejb-jar.xml等)的位置,在调用Jar任务打包文件时一定要记得把它们也包含进来。一般在编译之前就要注意把这些需打包的文件拷入相应目录下。二是在J2EE项目中可能会涉及到一些特殊的任务,比如在Weblogic中会调用ejbc预编译EJB的代码存根,或者需要在Ant中同时发布Jar到相应的服务器中等。可以用两种途径实现这些任务,一是扩展Ant任务实现这些任务,二是直接用Java任务来执行这些命令。下面是打包、发布一个EJB的build.xml配置文件片断,代码如下:
<target name="deploy_HelloEJB" depends="compile"> <delete dir="${temp}/ejb_make"/> <!-- 首先删除临时目录 --> <delete file="${temp}/helloEJB.jar"/> <!-- 删除WebLogic域中老版本的EJB --> <delete file="${weblogic.deploy.dest}/helloEJB.jar"/> <!-- 创建META-INF目录,放置ejb-jar.xml和weblogic-ejb-jar.xml --> <mkdir dir="${temp}/ejb_make/META-INF"/> <!-- 拷贝ejb-jar.xml和weblogic-ejb-jar.xml 到临时目录--> <copy todir="${temp}/ejb_make/META-INF"> <fileset dir="etc/baseinfo"> <include name="*.xml"/> </fileset> </copy> <!-- 拷贝所有的helloEJB类到临时目录 --> <copy todir="${temp}/ejb_make/"> <fileset dir="${dest.classes}/"> <!-- dest.classes是输出的类文件目录 --> <include name="${dest.classes}/helloEJB/**"/> </fileset> </copy> <!-- 将所有这些文件打包成helloEJB.jar --> <jar jarfile="${temp}/helloEJB.jar" basedir="${temp}/ejb_make"/> <!-- 进行weblogic.ejbc编译 --> <java classpath="${wl_cp}" classname="weblogic.ejbc" fork="yes" > <classpath> <fileset dir="lib"> <include name="*.jar" /> </fileset> </classpath> <arg value="${temp}/helloEJB.jar" /> <arg value="${temp}/helloEJB_deploy.jar" /> </java> <!-- 拷贝/发布到WebLogic的{DOMAIN}\applications目录 --> <copy file="${temp}/helloEJB_deploy.jar" todir="${weblogic.deploy.dest}"/> </target> |
用Ant配合JUnit实现单元测试
Ant 提供了JUnit任务,可以执行单元测试代码。如何使用JUnit,以及如何编写测试用例(TestCase),感兴趣的读者可以参阅JUnit的相关文档。在Ant中使用JUnit的方法非常简单,首先需要把junit.jar拷入ANT_HOME\lib下,确认在这个目录下有optional.jar,因为JUnit是Ant的扩展任务,需要引用这个扩展包。然后就是在Build文件中加入JUnit的任务,代码如下:
<target name="run" depends="client"> <junit printsummary="yes" fork="yes" haltonfailure="yes"> <classpath> <pathelement location="client.jar" /> </classpath> <formatter type="plain" /> <test name="com.sharetop.antdemo.HelloWorldTest" /> </junit> </target> |
下载http://www.apache.org/dist/ant/binaries下的apache-ant-1.6.1-bin.zip
接压安装。
ant的配法:
1。解压ant的包到本地目录。
2。在环境变量中设置ANT_HOME,值为你的安装目录。
3。在环境变量中设置JAVA_HOME,值为你的jdk安装目录。
4。把ANT_HOME/bin加到你系统的path目录中去。
在cmd模式下输入 ant -version回车,看到输出说明配置成功。
一:Apache的主要缺陷
1:HTTP拒绝服务
2:缓冲区溢出
3:被攻击者获得root权限
4:配置文件的保护
5:服务器访问控制
6:密码保护
7:Apache日志文件
8:安全相关的指令
9:SSI(Server-Side Includes)的安全
10:其它安全工具
11:总结
综述
本文将讨论UNIX平台下,Apache WEB服务器安装和配置的安全问题。我们假定阅读本文的系统管理员已经针对自己站点的情况选择了相关的模块,并且能够进行配置、创建和排除故障。本文的主要目的是帮助你简历一个安全的Apache歪脖(web icon_razz.gif)服务器。
在众多的Web服务器产品中,Apache是应用最为广泛的一个产品,同时也是一个设计上非常安全的程序。但是,同其它应用程序一样,Apache也存在安全缺陷。本文主要针对三个安全缺陷进行讨论,包括:使用HTTP协议进行的拒绝服务攻击(denial of service)、3缓冲区溢出攻击以及被攻击者获得root权限。注意:合理的配置能够保护Apache免遭多种攻击,但是在网络层上的拒绝服务攻击则不是调整Apache的配置所能够防止的。本文所涉及的是使用HTTP(应用层)协议进行的拒绝服务攻击。
一:Apache的主要缺陷
1:HTTP拒绝服务攻击者通过某些手段使服务器拒绝对HTTP应答。这会使Apache对系统资源(CPU时间和内存)需求的剧增,最终造成系统变慢甚至完全瘫痪。
2:缓冲区溢出
攻击者利用程序编写的一些缺陷,使程序偏离正常的流程。程序使用静态分配的内存保存请求数据,攻击者就可以发送一个超长请求使缓冲区溢出。比如一些Perl编写的处理用户请求的网关脚本。一旦缓冲区溢出,攻击者可以执行其恶意指令或者使系统宕机。
3:被攻击者获得root权限
Apache一般以root权限运行(父进程),攻击者通过它获得root权限,进而控制整个系统。
获得最新的Apache
使用最安全版本对于加强Apache Web服务器的安全是至关重要的。
你可以从Apache的官方网站http://www.apache.org获得Apache的最新版本。
4:配置文件的保护
Apache Web服务器有三个主要的配置文件,它们一般位于/usr/local/apache/conf目录。这三个文件是:httpd.con、srm.conf和access.conf。这些文件是整个Apache的控制中心,因此需要对三个配置文件有所了解。httpd.conf文件是主配置文件;srm.conf允许你填加资源文件;access.conf设置文件的访问权限。这些文件的配置可以参考http://httpd.apache.org/docs/mod/core.html
5:服务器访问控制
access.conf文件包含一些指令控制允许什么用户访问Apache目录。应该把deny from all作为初始化指令,然后使用allow from指令打开访问权限。你可以允许来自某个域、IP地址或者IP段的访问。例如:
order deny,allow
deny from all
allow from sans.org
6:密码保护
使用.htaccess文件,可以把某个目录的访问权限赋予某个用户。系统管理员需要在httpd.conf或者srm.conf文件中使用AccessFileName指令打开目录的访问控制。以下是一个.htaccess示例文件:
AuthName PrivateFiles
AuthType Basic
AuthUserFile /path/to/httpd/users
require foo <---一个有效的用户名
然后,使用如下命令填加一个用户:
# htpasswd -c /path/to/httpd/users foo
7:Apache日志文件
系统管理员可以使用日志格式指令来控制日志文件的信息。使用LogFormat "%a %l"指令,可以把发出HTTP请求浏览器的IP地址和主机名记录到日志文件。出于安全的考虑,你至少应该那些验证失败的WEB用户,在http.conf文件中加入LogFormat "%401u"指令可以实现这个目的。这个指令还有其它的许多参数,用户可以参考Apache的文档。另外,Apache的错误日志文件对于系统管理员来说也是非常重要的,错误日志文件中包括服务器的启动、停止以及CGI执行失败等信息。
8:安全相关的指令
在Apache配置文件中,有一些安全相关的指令可以使用。这些指令的详细用法可以参考http://httpd.apache.org/docs/mod/directives.html。
使用以下指令可以帮助你减小拒绝服务的威胁:
LimitRequestbody: 数字参数,控制HTTP请求的大小。
LimitRequestFields: 数字参数,控制请求头的数目。
KeepAlive: 设置连接的生存期。
KeepAliveTimeout: 限制等待请求的时间。
使用以下指令可以帮助你叫嚣缓冲区溢出的危险:
LimitRequestFieldSize: 限制每个请求头的大小。
LimitRequestLine: 限制每个请求行的大小。
CGI(ommon Gateway Interface,通用网关接口)的安全威胁
CGI的安全性非常重要,攻击者可以利用CGI的缺陷获得系统信息、执行系统命令、占用系统资源。如果一个CGI程序使用静态分配的内存,就可能为缓冲区溢出攻击提供机会。为了减少这种风险,程序员应该在CGI代码中使用动态分配内存。除了CGI编写人员应该注意外,系统管理员可以采取对CGI进行封装(例如:suEXEC或者CGI Wrap)的办法加强CGI的安全性。通过这种方式可以使CGI程序以某个独立的用户权限运行,即使发生缓冲区溢出,也只影响那个用户的目录/文件。
perl是一种功能非常强大的脚本语言。主要用于文本的处理,程序员还可以通过perl脚本使用系统调用。如果程序编写的不好,就会为攻击者闯入服务器大开方便之门。因此,使用perl脚本一定要小心,以免出现此类漏洞。在perl脚本中,处理请求数据之前,最好能够调用专门的检查例程对输入的合法性进行检查。除此之外,还要确保Apache不是以root的权限运行的,Perl脚本被限制在某个特定的目录下运行。
9:SSI(Server-Side Includes)的安全
使用SSI,程序员可以建立一些常用的例程,在需要时把这些例程包含进他们的代码中。SSI还允许有条件地执行外部程序,攻击者可能利用这个条件让服务器执行他们的恶意程序。在access.conf文件中使用IncludesNoEXEC指令,可以关闭执行SSI文件的功能。不过这条指令会造成服务器不执行CGI脚本或者程序。
10:其它安全工具
使用TCP Wrappers和Tripwire可以为你的系统提供额外的保护。你可以使用TCP Wrappers来控制Telnet或者FTP的访问权限。Tripwire是一个数据完整性检测工具,可以帮助系统管理员监视系统是否被改动过,你可以在Tripwire的配置文件中编制特定的策略,监视Web服务器的配置文件、数据和CGI文件是否被修改。
11:总结
Apache是一个优秀的歪脖服务器,虽然Apache的开发者非常注重其安全性,但是由于Apache非常庞大,难免会存在安全隐患。Apache的安装维护中需要注意以下问题:
1: 检查文件和目录的权限是否恰当。
2: httpd.conf、srm.conf和access.conf的设置是否适当
3: 使服务器日志文件能够记录尽可能详细的信息。
4: 对某些需要特别保护的目录使用密码保护(.htaccess)。
5: 对CGI脚本或者程序进行封装。
6: 如果CGI使用Perl编写,要详细检查其安全性
7: 检查SSI指令
8: 使用TCP Wrappers和Tripwire。(linux知识宝库)
1.把C:\bea\weblogic81\server\bin\mod_wl_20.so拷贝到C:\Program Files\Apache Group\Apache2\modules下;
2.修改C:\Program Files\Apache Group\Apache2\conf\httpd.conf文件
增加
LoadModule weblogic_module modules/mod_wl_20.so
# WEBLOGIC MODULE
<IfModule mod_weblogic.c>
WebLogicHost 127.0.0.1
WebLogicPort 7001
MatchExpression *.jsp
</IfModule>
把
DocumentRoot "C:/Program Files/Apache Group/Apache2/htdocs"
改为
DocumentRoot "C:\bea\user_projects\applications\mydomain\DefaultWebApp"
把
<Directory "C:/Program Files/Apache Group/Apache2/htdocs">
改为
<Directory "C:\bea\user_projects\applications\mydomain\DefaultWebApp">
3 在C:\Program Files\Apache Group\Apache2\bin下输入
apache -t
测试
如果ok,则成功
4.重启apache服务
也许大家都知道网上有些扫描器如letmein.exe,whoisadmin.exe等,是通过TCP的139和445端口来获取一些计算机相关信息,如计算机的名称,管理员帐号。这样便可以通过相应的攻击工具进行入侵了。当知道了管理员的帐号后,可以猜测或暴力破解其密码来获得计算机的控制权。怎么办呢?利用win2000自身的策略设置,就能解决。我们采取对本地安全设置里的"IP安全设置,在本地机器" 来进行设置,禁止TCP的139/445连接。
在进行策略设置前,首先来了解一下相应的原理吧!
一、基本原理SMB(Server Message Block) Windows协议族,用于文件和打印共享服务。NBT(NetBIOS over TCP/IP) 使用137(UDP), 138(UDP) and 139 (TCP)来实现基于TCP/IP的NETBIOS网际互联。
在Windows NT中SMB基于NBT实现。 而在Windows2000中,SMB除了基于NBT的实现,还有直接通过445端口实现。 当Win2000(允许NBT)作为client来连接SMB服务器时,它会同时尝试连接139和445端口,如果445端口有响应,那么就发送RST包给139端口断开连接,以455端口通讯来继续.当445端口无响应时,才使用139端口。当Win2000(禁止NBT)作为client来连接SMB服务器时,那么它只会尝试连接445端口,如果无响应,那么连接失败。(注意可能对方是NT4.0服务器。) 如果win2000服务器允许NBT, 那么UDP端口137, 138, TCP 端口 139, 445将开放。 如果 NBT 被禁止, 那么只有445端口开放。
二、实战操作简单的原理就这些了,那如何实现呢?方法如下
1. 通过对开始->设置->控制面版->管理工具 -> 本地安全策略 ->(鼠标右击)IP安全策略,在本地机器。点击"管理IP筛选器表和筛选器操作",如图1所示。
2.在"管理IP筛选器列表"选项卡上点击"添加"。
3.弹出"IP筛选器列表"窗口。
4.分别添入名称和描述,如禁用139连接。并点击"添加",接着会出现一个IP"筛选器向导",单击下一步。
5.到"指定IP源地址"窗口,在"源地址"中选择"任何IP地址",点击下一步。
6.在"IP通信目标"的"目标地址"选择"我的IP地址",点击下一步。
7.在"IP协议类型"的"选择协议类型"选择"TCP",点击下一步。
8.在"筛选器向导"的"设置IP协议端口"里第一栏为"从任意端口",第二栏为"到此端口"并添上"139",点击下一步。
9.接着点击"完成" ->然后再单击"关闭" 回到"管理IP筛选器表和筛选器操作"窗口。
10.选择"管理筛选器操作"选项卡点击"添加"。
11.同样会出现一个"筛先器操作向导"的窗口,点击"下一步",在"名称"里添上"禁用139连接"。
12.按"下一步",并选择"阻止",再按"下一步"。
点击"完成"和"关闭"。
到这里"禁止139连接"的策略算是制定好了。不用多说了,禁用445端口的"筛选器列表"和"筛选器操作"的添加是和"禁止139连接"的方法一样的! 有一点,是需要注意的在添加139和445的筛选器操作时,不能为了省事用同一个"阻止"筛选器操作,这样制定出的规则将无法使用。
13.当禁止139/445的操作都完成后,回到"IP安全策略,在本地机器" ,通过右击创建"IP安全策略"
14.会出现一个"IP安全策略向导"的窗口,直接点击"下一步",在"名称"添入"禁用139/445连接",一直点击"下一步"到"完成"。
15.在"禁用139/445连接 属性"里点击"添加"。
16.会出现一个"安全规则向导"窗口,一直点击"下一步"到"IP筛选器列表"选择"禁用139连接",点击"下一步"。
17.在"筛选器操作"选择"禁用139连接",点击"下一步",接着点去"完成"和"确定"。
18. 此时,可以通过"添加"将禁用445端口的筛选器列表和操作也加进去。
19.接着是一直点击"下一步",到"IP筛选器列表",选择"禁用445连接",点击"下一步"。
20.此时,已经完成了所有的配置。点击"关闭"。回到"属性"窗口,设置好的窗口呈现如下 。
21.最后,将我们刚才配置好的"禁用139/445连接"的安全策略指派即可。大功告成啦!
当然,如果你已有了自己的策略或使用系统自代的策略也是可以通过添加规则的方法来实现禁用139/445的目的,但创建"IP筛选器列表"和"管理筛选器操作"是一定要作的。同理你也可以通过IP安全设置里,对ICMP进行策略的制定,限制ping工具的使用。现用在用letmein之类的扫描器再试试吧!
附:这是未作禁用139/445策略时,用letmein.exe和whoisadmin.exe的探测结果,如下图:
作过禁用139/445策略后的探测结果就变成了这样,如下图:
注:以上的测试是在域控制器上作的,如果不是的话,在2000server上操作的过程中会有如下的提示:
不需要去管它,点击"是"就可以了!
事件类型: 错误
事件来源: Service Control Manager
事件种类: 无
事件 ID: 7000
日期: 2006-1-6
事件: 9:00:30
用户: N/A
计算机: AFLY
描述:
由于下列错误,npkcrypt 服务启动失败:
系统找不到指定的文件。
有关更多信息,请参阅在 http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。
QQ2005 Beta3 整合了一个叫做 npkcrypt 的键盘加密程序,美其明曰保护用户密码输入安全,其实是不经用户同意擅自在用户系统中安装莫名其妙驱动程序。安装此版本后,密码不能通过粘贴的方法输入,密码为中文的QQ用户没法登录。
如果手动删除QQ或转移QQ目录或正常路径卸载该版本后 npkcrypt 也可能没有正常卸载,就会出现以上的“npkcrypt 服务启动失败: 系统找不到指定的文件”错误。
解决方法:
1、在“我的电脑”上点右键,选“管理”->“设备管理器”。
2、选择“查看”/“显示隐藏的设备”,在“非即插即用驱动程序”中选择“npkcrypt”,卸载之。
3、运行“regedit”,可能存在键项:“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\npkcrypt”或“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\npkcrypt”等,删除之。
4、如果QQ目录存在:npkcrypt.sys、npkcrypt.vxd、npkcusb.sys 三个文件,删除之。
5、下次启动后即可生效。