本文以最新發布的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、下次啟動后即可生效。