Linux下apache安全配置策略
Apache具有靈活的設定,所有Apache的安全特性都要經過周密的設計與規劃,進行認真地配置才能夠實現。Apache安全配置包括很多層面,有執行環境、認證與授權設定等。 |
所有Apache的安全特性都要經過周密的設計與規劃,進行認真地配置才能夠實現。Apache安全配置包括很多層面,有執行環境、認證與授權設定等。Apache的安裝配置和執行示例如下:
- 1 修改apache的版本資訊,使外部訪問看到的apache資訊是經過偽裝或錯誤的,這個可以儘可能的保證apache的安全。
2 建立安全的apache的目錄結構。ServerRoot DocumentRoot ScripAlias Customlog Errorlog 均放在單獨的目錄環境中。以上主要目錄相互獨立並且不存在父子邏輯關係。
ServerRoot目錄只能具有管理許可權使用者訪問;DocumentRoot能夠被管理Web站點內容的使用者訪問和使用Apache伺服器的Apache使用者和Apache使用者組訪問;只有admin組的使用者可以訪問日誌目錄。 各個目錄設定獨立的許可權
4、禁止預設訪問的存在,只對指定的目錄開啟訪問許可權。
5 更改apache的預設路徑,單獨建立路徑提供apache檔案的存放
6、通過使用例如“Apache DoS Evasive Maneuvers Module ”等工具來實現Apache伺服器對DoS攻擊的防範。其工具可以快速拒絕來自相同地址對同一URL的重複請求。
7、以Nobody使用者執行
一般情況下,Apache是由Root 來安裝和執行的。如果Apache Server程序具有Root使用者特權,那麼它將給系統的安全構成很大的威脅,應確保Apache Server程序以最可能低的許可權使用者來執行。通過修改httpd.conf檔案中的下列選項,以Nobody使用者執行Apache 達到相對安全的目的。
為了確保所有的配置是適當的和安全的,需要嚴格控制Apache 主目錄的訪問許可權,使非超級使用者不能修改該目錄中的內容。Apache 的主目錄對應於Apache Server配置檔案httpd.conf的Server Root控制項中,應為:
Server Root /usr/local/apache3、SSI的配置
在配置檔案access.conf 或httpd.conf中的確Options指令處加入Includes NO EXEC選項,用以禁用Apache Server 中的執行功能。避免使用者直接執行Apache 伺服器中的執行程式,而造成伺服器系統的公開化。
Options Includes Noexec4、阻止使用者修改系統設定
在Apache 伺服器的配置檔案中進行以下的設定,阻止使用者建立、修改 .htaccess檔案,防止使用者超越能定義的系統安全特性。
AllowOveride None Options None Allow from all
然後再分別對特定的目錄進行適當的配置。
5、改變Apache 伺服器的確省訪問特性Apache 的預設設定只能保障一定程度的安全,如果伺服器能夠通過正常的對映規則找到檔案,那麼客戶端便會獲取該檔案,如http://local host/~ root/ 將允許使用者訪問整個檔案系統。在伺服器檔案中加入如下內容:
order deny,ellow Deny from all
將禁止對檔案系統的預設訪問。
6、CGI指令碼的安全考慮CGI指令碼是一系列可以通過Web伺服器來執行的程式。為了保證系統的安全性,應確保CGI的作者是可信的。對CGI而言,最好將其限制在一個特定的 目錄下,如cgi-bin之下,便於管理;另外應該保證CGI目錄下的檔案是不可寫的,避免一些欺騙性的程式駐留或混跡其中;如果能夠給使用者提供一個安全 性良好的CGI程式的模組作為參考,也許會減少許多不必要的麻煩和安全隱患;除去CGI目錄下的所有非業務應用的指令碼,以防異常的資訊洩漏。
以上這些常用的舉措可以給Apache Server 一個基本的安全執行環境,顯然在具體實施上還要做進一步的細化分解,制定出符合實際應用的安全配置方案。
Apache Server基於主機的訪問控制
Apache Server預設情況下的安全配置是拒絕一切訪問。假定Apache Server內容存放在/usr/local/apache/share 目錄下,下面的指令將實現這種設定:
Deny from all Allow Override None
則禁止在任一目錄下改變認證和訪問控制方法。
同樣,可以用特有的命令Deny、Allow指定某些使用者可以訪問,哪些使用者不能訪問,提供一定的靈活性。當Deny、Allow一起用時,用命令Order決定Deny和Allow合用的順序,如下所示:
如:Deny from all Deny from test.cnn.com Deny from 204.168.190.13 Deny from 10.10.10.0/255.255.0.02、 允許某類地址的使用者對伺服器的訪問權(Allow)
如:Allow from all Allow from test.cnn.com Allow from 204.168.190.13 Allow from 10.10.10.0/255.255.0.0
Deny和Allow指令後可以輸入多個變數。
3、簡單配置例項:Order Allow, Deny Allow from all Deny from www.test.com
指想讓所有的人訪問Apache伺服器,但不希望來自www.test.com的任何訪問。
Order Deny, Allow Deny from all Allow from test.cnn.com
指不想讓所有人訪問,但希望給test.cnn.com網站的來訪。
Apache Sever的使用者認證與授權
概括的講,使用者認證就是驗證使用者的身份的真實性,如使用者帳號是否在資料庫中,及使用者帳號所對應的密碼是否正確;使用者授權表示檢驗有效使用者是否被許可訪 問特定的資源。在Apache中,幾乎所有的安全模組實際上兼顧這兩個方面。從安全的角度來看,使用者的認證和授權相當於選擇性訪問控制。
建立使用者的認證授權需要三個步驟:
使用者名稱和口令列表需要存在於檔案(mod_auth模組)或資料庫(mod_auth_dbm模組)中。基於安全的原因,該檔案不能存放在文擋的根目 錄下。如,存放在/usr/local/etc/httpd下的users檔案,其格式與UNIX口令檔案格式相似,但口令是以加密的形式存放的。應用程 序htpasswd可以用來新增或更改程式:
htpasswd –c /usr/local/etc/httpd/users martin
-c表明新增新使用者,martin為新新增的使用者名稱,在程式執行過程中,兩次輸入口令回答。使用者名稱和口令新增到users檔案中。產生的使用者檔案有如下的形式:
martin:WrU808BHQai36 jane:iABCQFQs40E8M art:FadHN3W753sSU
第一域是使用者名稱,第二個域是使用者密碼。
2、配置伺服器的保護域為了使Apache伺服器能夠利用使用者檔案中的使用者名稱和口令資訊,需要設定保護域(Realm)。一個域實際上是站點的一部分(如一個目錄、文件等) 或整個站點只供部分使用者訪問。在相關目錄下的.htaccess檔案或httpd.conf ( acces.conf ) 中的段中,由AuthName來指定被保護層的域。在.htaccess檔案中對使用者檔案有效使用者的授權訪問及指定域保護有如下指定:
AuthName “restricted stuff” Authtype Basic AuthUserFile /usr/local/etc/httpd/users Require valid-user
其中,AuthName指出了保護域的域名(Realm Name)。valid-user引數意味著user檔案中的所有使用者都是可用的。一旦使用者輸入了一個有效的使用者/口令時,同一個域內的其他資源都可以利 用同樣的使用者/口令來進行訪問,同樣可以使兩個不同的區域共用同樣的使用者/口令。
3、告訴伺服器哪些使用者擁有資源的訪問許可權如果想將一資源的訪問許可權授予一組客戶,可以將他們的名字都列在Require之後。最好的辦法是利用組(group)檔案。組的操作和標準的UNIX的組的概念類似,任一個使用者可以屬於一個和數個組。這樣就可以在配置檔案中利用Require對組賦予某些許可權。如:
Require group staff Require group staff admin Require user adminuser
指定了一個組、幾個組或一個使用者的訪問許可權。