亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Linux: Apache 安全設(shè)定

系統(tǒng) 2405 0

1. AutoIndex

?

預(yù)設(shè)安裝好 Apache 之后,其預(yù)設(shè)目錄是在 /var/www/html/,如果沒(méi)有設(shè)定 index.html 的話,那么就會(huì)印出目前目錄里的所有檔案和目錄,基於安全理由,希望把 AutoIndex 這個(gè)取消,如此在別人打入網(wǎng)址后,就會(huì)出現(xiàn) 403 的存取權(quán)限不足,只有在很“明確”的指出檔案時(shí)才可以瀏覽。

?

關(guān)閉 /var/www/html 里(含子目錄)的自動(dòng)印出首頁(yè)功能

      [root@rhel conf]# vi httpd.conf
_______________________________
<Directory "/var/www/html">
#把 Options Indexes FollowSymLinks 注解起來(lái)
#Options Indexes FollowSymLinks
#修改成只剩 FollowSymLinks
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
_______________________________
[root@rhel conf]#
    

?

注意:

如果你是從Windows轉(zhuǎn)過(guò)來(lái)Ubuntu的話,可能都會(huì)有一個(gè)疑問(wèn),為什么在Ubuntu上找不到httpd.conf檔哩?? 因?yàn)閁buntu上根本就不用httpd.conf這個(gè)名稱了。

?

在裝好Apache2之后,Apache2的設(shè)定檔會(huì)存放在 /etc/apache2 ,里面有一個(gè)apache2.conf檔是整個(gè)Apache2的設(shè)定 檔,一般來(lái)說(shuō)是不用去動(dòng)它的,如果要調(diào)設(shè)定的話,是要到 /etc/apache2/sites-available 里去調(diào)的,預(yù)設(shè)的網(wǎng)站是調(diào) /etc /apache2/sites-available/default 這個(gè)檔的,而這個(gè)檔就等同是httpd.conf,只是命名方式不同而已哩!!

?

/etc/apache2/sites-available和/etc/apache2/sites-enabled有什么不同?沒(méi)有不同,只要是在sites-available有用a2ensite指令啟用的虛擬主機(jī),就會(huì)在sites-enabled建立一個(gè)連結(jié)。

?

重新啟動(dòng) httpd

      [root@rhel conf]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@rhel conf]#
    

?

或者:

      // Apache
//Task: Start Apache 2 Server /啟動(dòng)apache服務(wù)
# /etc/init.d/apache2 start
//or
$ sudo /etc/init.d/apache2 start
//Task: Restart Apache 2 Server /重啟apache服務(wù)
# /etc/init.d/apache2 restart
//or
$ sudo /etc/init.d/apache2 restart
//Task: Stop Apache 2 Server /停止apache服務(wù)
# /etc/init.d/apache2 stop
//or
$ sudo /etc/init.d/apache2 stop 
// Mysql
/etc/init.d/mysql start
/etc/init.d/mysql stop
/etc/init.d/mysql restart
    

?

      // httpd是Apache超文本傳輸協(xié)議(HTTP)服務(wù)器的主程序。被設(shè)計(jì)為一個(gè)獨(dú)立運(yùn)行的后臺(tái)進(jìn)程,它會(huì)建立一個(gè)處理請(qǐng)求的子進(jìn)程或線程的池。
// 通常,httpd不應(yīng)該被直接調(diào)用,而應(yīng)該在類Unix系統(tǒng)中由 apachectl 調(diào)用
// man apache2 中介紹
// apache2 is the Apache HyperText Transfer Protocol (HTTP) server program.
// It is designed to be run as a standalone daemon process. When  used  like
// this it will create a pool of child processes or threads to handle requests.
// In general, apache2 should not be invoked directly,
// but rather should be invoked via /etc/init.d/apache2 or apache2ctl.
// The default Debian config-uration requires environment variables
// that are defined in /etc/apache2/envvars and are not available if apache2 is  started  directly.
// However,apache2ctl can be used to pass arbitrary arguments to apache2.
//
// apache2ctl = apache2 ConTroL
//
apache2ctl -restart
apache2ctl -stop
apache2ctl -t
// 詳細(xì)見(jiàn) man apache2
    

?

2. 虛擬目錄

?

一般特別重要或有特別作用的目錄,會(huì)放在 /var/www/html 之外的其它目錄,比方說(shuō)現(xiàn)在 /file/download/ 目錄,要在使用者打入 http://www.abc.com.tw/download/ 時(shí),可以自動(dòng)對(duì)應(yīng)到 /file/download/ 這個(gè)目錄,就好像是在 /var/www/html 里面一樣,這時(shí)我們可以使用 alias 的方式做出一個(gè)虛擬目錄,使用 Alias 就可以辦得到了。

      [root@rhel conf]# vi httpd.conf
_______________________________
Alias /download/ "/file/download/"
_______________________________
[root@rhel conf]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@rhel conf]#
    

?

注意:Alias 語(yǔ)法為 Alias {target} {source} ,在 {target} 的描述中(以 download),如果打了一個(gè) "/" 符號(hào),那么使用者在輸入網(wǎng)址時(shí)只能是 http://www.abc.com.tw/download / 后面就要多帶一個(gè) "/",否則會(huì)出現(xiàn) 404 的找不到檔案錯(cuò)誤。

?

3. ServerName 的設(shè)定

?

其實(shí) ServerName 在大部份的情況下可以不設(shè)定,但是如果有做重新導(dǎo)向的話,那么如果這個(gè)值不存在,Apache 在啟動(dòng)時(shí)會(huì)以 127.0.0.1 來(lái)做預(yù)設(shè)的 ServerName。因此等到有預(yù)到重新導(dǎo)向的情況時(shí),就會(huì)出現(xiàn)問(wèn)題。要更正這個(gè)問(wèn)題,只要加入一個(gè) ServerName 的值就可以了。

      [root@rhel conf]# vi httpd.conf
_______________________________
ServerName www.abc.com.tw
_______________________________
[root@rhel conf]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@rhel conf]#
    

?

4. 修改預(yù)設(shè)目錄

?

Apache 安裝好之后,預(yù)設(shè)全是在 /var/www/html 里面,如果要修改這個(gè)目錄,只要修改 DocumentRoot 就可以了。

      [root@rhel conf]# vi httpd.conf
_______________________________
DocumentRoot "/project/web"
_______________________________
[root@rhel conf]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@rhel conf]#
    

?

5. 預(yù)設(shè)聆聽(tīng)埠

?

Apache 安裝之后,會(huì)聆聽(tīng) 80 的標(biāo)準(zhǔn) http 埠,但是當(dāng)這臺(tái) http 有特別功用時(shí),可能會(huì)修改其 Port,要修改 Port,只要修改 Listen 這個(gè)值就可以了。

      [root@rhel conf]# vi httpd.conf
_______________________________
Listen 8080
_______________________________
[root@rhel conf]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@rhel conf]#
    

?

注意:修改預(yù)設(shè)的聆聽(tīng)埠,如果在 Firewall 沒(méi)有允許連入的情況下會(huì)出現(xiàn)連線不到的情形,所以在修改完之后還必需檢查 firewall 是否允許。

?

6. 保護(hù)你的目錄資料 - 密碼驗(yàn)證

?

是否想過(guò),某些特別的目錄,只有特別的人才可以進(jìn)去,但又不想再設(shè)定 / 加裝其它的功能,這時(shí)候就 Apache 可以提供你一個(gè)登入帳號(hào)密碼的機(jī)制,只有通過(guò)的人才可以看到這“特別”的地區(qū)。

?

要編輯的檔案:

?

  • /etc/httpd/conf/httpd.conf (以 Redhat 為列)
  • .htaccess (設(shè)定檔)
  • .htpasswd (帳號(hào) / 密碼檔)

首先,要使用這個(gè)認(rèn)證機(jī)制,就要允許可以做 AuthConfig,比方說(shuō)我要對(duì) http://www.abc.com.tw/secure_data/ 這個(gè) URL 做認(rèn)證,那么就需要使用到 AuthConfig

      [root@rhel conf]# vi /etc/httpd/conf/httpd.conf
_______________________________________
# 做 Alias 到 /home/secure_data/
Alias "/secure_data" "/home/secure_data"

<Directory "/home/secure_data">
# 允許做 AuthConfig 的設(shè)定
AllowOverride AuthConfig
</Directory>
_______________________________________

#重新啟動(dòng) Apache
[root@rhel secure_data]# service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@rhel secure_data]#
    

?

接下來(lái),在 /home/secure_data/ 建立一個(gè) .htaccess

      [root@rhel conf]# cd /home/secure_data; touch .htaccess; vi .htaccess
________________________________________
AuthName "ABC Secure Area"
AuthType Basic
# 指定帳號(hào)密碼檔的位置
AuthUserFile "/home/http_auth_users/.htpasswd"
require valid-user
    

?

最后一步,就是建立一個(gè)帳號(hào)密碼檔啦!承於本篇的忠旨-安全理由,所以千萬(wàn)不要把帳號(hào) / 密碼檔這種高度敏感的檔案放到 Public 的區(qū)域,尤其是可經(jīng)由 http、ftp 等方式可取得的管道。本篇我們裝放在 /home/http_auth_user/.htpasswd 里。

      [root@rhel conf]# mkdir /home/http_auth_users; cd /home/http_auth_users; touch .htpasswd
    

?

檔案建立好了,再來(lái)如何建立使用者呢?這時(shí)候就必需使用 htpasswd 這個(gè)指令來(lái)幫我們完成了!

htpasswd 說(shuō)明:

htpasswd -{option} {passwd_file} {user}

option 可使用:

  • -m 使用 MD5 編碼
  • -c 建立新的密碼檔
  • -b 附帶有 "密碼" (不用再輸入一次密碼)

建立 steven 的帳號(hào)密碼:

      [root@mailgw http_auth_users]# htpasswd -m .htpasswd steven
New password:
Re-type new password:
Adding password for user steven
[root@mailgw http_auth_users]#
    

?

現(xiàn)在開(kāi)啟您的 Broser,輸入 http://{Your_URL}/{Need_Password_Dir} 本例為 http://www.abc.com.tw/secure_data 時(shí)就會(huì)出現(xiàn)認(rèn)證畫面了。

?

來(lái)源:http://www.l-penguin.idv.tw/l-penguin.s/article/apache2_security.htm

?

?另一篇來(lái)自:http://www.ibm.com/developerworks/cn/linux/l-cn-apache-secure/

?

Apache 服務(wù)簡(jiǎn)介

?

Web 服務(wù)器也稱為 WWW 服務(wù)器或 HTTP 服務(wù)器 (HTTP Server),它是 Internet 上最常見(jiàn)也是使用最頻繁的服務(wù)器之一,Web 服務(wù)器能夠?yàn)橛脩籼峁┚W(wǎng)頁(yè)瀏覽、論壇訪問(wèn)等等服務(wù)。

?

由于用戶在通過(guò) Web 瀏覽器訪問(wèn)信息資源的過(guò)程中,無(wú)須再關(guān)心一些技術(shù)性的細(xì)節(jié),而且界面非常友好,因而 Web 在 Internet 上一推出就得到了爆炸性的發(fā)展。現(xiàn)在 Web 服務(wù)器已經(jīng)成為 Internet 上最大的計(jì)算機(jī)群,Web 文檔之多、鏈接的網(wǎng)絡(luò)之廣,也令人難以想像。因此,Web 服務(wù)器軟件的數(shù)量也開(kāi)始增加,Web 服務(wù)器軟件市場(chǎng)的競(jìng)爭(zhēng)也越來(lái)越激烈。本文所討論的就是一款最常用的 Web 服務(wù)器軟件—— Apache。

?

Apache 是一個(gè)免費(fèi)的軟件,用戶可以免費(fèi)從 Apache 的官方網(wǎng)站下載。任何人都可以參加其組成部分的開(kāi)發(fā)。Apache 允許世界各地的人對(duì)其提供新特性。當(dāng)新代碼提交到 Apache Group 后,Apache Group 對(duì)其具體內(nèi)容進(jìn)行審查并測(cè)試和質(zhì)量檢查。如果他們滿意,該代碼就會(huì)被集成到 Apache 的主要發(fā)行版本中。

?

Apache 的其他主要特征有:

  • 支持最新的 HTTP 協(xié)議:是最先支持 HTTP1.1 的 Web 服務(wù)器之一,其與新的 HTTP 協(xié)議完全兼容,同時(shí)與 HTTP1.0、HTTP1.1 向后兼容。Apache 還為支持新協(xié)議做好了準(zhǔn)備。
  • 簡(jiǎn)單而強(qiáng)大的基于文件的配置:該服務(wù)器沒(méi)有為管理員提供圖形用戶界面,提供了三個(gè)簡(jiǎn)單但是功能異常強(qiáng)大的配置文件。用戶可以根據(jù)需要用這三個(gè)文件隨心所欲地完成自己希望的 Apache 配置。
  • 支持通用網(wǎng)關(guān)接口(CGI):采用 mod_cgi 模塊支持 CGI。Apache 支持 CGI/1.1 標(biāo)準(zhǔn),并且提供了一些擴(kuò)充。
  • 支持虛擬主機(jī):是首批既支持 IP 虛擬主機(jī)又支持命名虛擬主機(jī)的 Web 服務(wù)器之一。
  • 支持 HTTP 認(rèn)證:支持基于 Web 的基本認(rèn)證。它還有望支持基于消息摘要的認(rèn)證。
  • 內(nèi)部集成 Perl:Perl 是 CGI 腳本編程的事實(shí)標(biāo)準(zhǔn)。Apache 對(duì) Perl 提供了良好的支持,通過(guò)使用其 mod_perl 模塊,還可以將 Perl 的腳本裝入內(nèi)存。
  • 集成代理服務(wù)器:用戶還可以選擇 Apache 作為代理服務(wù)器。
  • 支持 SSL:由于版本法和美國(guó)法律在進(jìn)出口方面的限制,Apache 本身不支持 SSL。但是用戶可以通過(guò)安裝 Apache 的補(bǔ)丁程序集合(Apache-SSL)使得 Apache 支持 SSL。
  • 支持 HTTP Cookie:通過(guò)支持 Cookie,可以對(duì)用戶瀏覽 Web 站點(diǎn)進(jìn)行跟蹤。

Apache 服務(wù)面臨的網(wǎng)絡(luò)威脅

?

一般說(shuō)來(lái),Apache 服務(wù)器主要面臨如下幾種網(wǎng)絡(luò)威脅:

  1. 使用 HTTP 協(xié)議進(jìn)行的拒絕服務(wù)攻擊:攻擊者會(huì)通過(guò)某些手段使服務(wù)器拒絕對(duì) HTIP 應(yīng)答。這樣會(huì)使 Apache 對(duì)系統(tǒng)資源(CPU 時(shí)間和內(nèi)存)需求巨增,造成 Apache 系統(tǒng)變慢甚至完全癱瘓,從而引起 HTTP 服務(wù)的中斷或者合法用戶的合法請(qǐng)求得不到及時(shí)地響應(yīng);
  2. 緩沖區(qū)溢出攻擊:由于 Apache 源代碼完全開(kāi)放,攻擊者就可以利用程序編寫的一些缺陷,使程序偏離正常流程。程序使用靜態(tài)分配的內(nèi)存保存請(qǐng)求數(shù)據(jù),攻擊者就可以發(fā)送一個(gè)超長(zhǎng)請(qǐng)求使緩沖區(qū)溢出,從而導(dǎo)致緩沖區(qū)溢出攻擊;
  3. 被攻擊者獲得 root 權(quán)限,威脅系統(tǒng)安全:由于 Apache 服務(wù)器一般以 root 權(quán)限運(yùn)行,攻擊者通過(guò)它獲得 root 權(quán)限,進(jìn)而控制整個(gè) Apache 系統(tǒng);
  4. Apache 服務(wù)器與客戶端通信安全:如果采用明文傳輸,則服務(wù)器與客戶端的敏感通信信息將有可能被黑客或者不法用戶獲取;
  5. 由于 Apache 配置文件設(shè)置不當(dāng)引起的安全問(wèn)題:惡意者可以隨意下載或修改刪除系統(tǒng)文件。這主要涉及到對(duì)訪問(wèn)者的內(nèi)容和權(quán)限的限制。

要應(yīng)對(duì)上述這些安全威脅,要從 Apache 服務(wù)器端配置、運(yùn)行環(huán)境、通信鏈路安全保障、安全模塊使用、日志管理等各方面、全方位的進(jìn)行保障,下面將進(jìn)行分門別類的詳細(xì)介紹。

Apache 服務(wù)器端安全設(shè)置

?

限制 root 用戶運(yùn)行 Apache 服務(wù)器

一般情況下,在 Linux 下啟動(dòng) Apache 服務(wù)器的進(jìn)程 httpd 需要 root 權(quán)限。由于 root 權(quán)限太大,存在許多潛在的對(duì)系統(tǒng)的安全威脅。一些管理員為了安全的原因,認(rèn)為 httpd 服務(wù)器不可能沒(méi)有安全漏洞,因而更愿意使用普通用戶的權(quán)限來(lái)啟動(dòng)服務(wù)器。http.conf 主配置文件里面有如下 2 個(gè)配置是 Apache 的安全保證,Apache 在啟動(dòng)之后,就將其本身設(shè)置為這兩個(gè)選項(xiàng)設(shè)置的用戶和組權(quán)限進(jìn)行運(yùn)行,這樣就降低了服務(wù)器的危險(xiǎn)性。

      User apache

Group apache
    
?

需要特別指出的是:以上 2 個(gè)配置在主配置文件里面是默認(rèn)選項(xiàng),當(dāng)采用 root 用戶身份運(yùn)行 httpd 進(jìn)程后,系統(tǒng)將自動(dòng)將該進(jìn)程的用戶組和權(quán)限改為 apache,這樣,httpd 進(jìn)程的權(quán)限就被限制在 apache 用戶和組范圍內(nèi),因而保證了安全。

?

向客戶端隱藏 Apache 服務(wù)器的相關(guān)信息

Apache 服務(wù)器的版本號(hào)可以作為黑客入侵的重要信息進(jìn)行利用,他們通常在獲得版本號(hào)后,通過(guò)網(wǎng)上搜索針對(duì)該版本服務(wù)器的漏洞,從而使用相應(yīng)的技術(shù)和工具有針對(duì)性的 入侵,這也是滲透測(cè)試的一個(gè)關(guān)鍵步驟。因此,為了避免一些不必要的麻煩和安全隱患,可以通過(guò)主配置文件 httpd.conf 下的如下兩個(gè)選項(xiàng)進(jìn)行:

?

(1)ServerTokens:該選項(xiàng)用于控制服務(wù)器是否響應(yīng)來(lái)自客戶端的請(qǐng)求,向客戶端輸出服務(wù)器系統(tǒng)類型或者相應(yīng)的內(nèi)置模塊等重要信 息。Red Hat Enterprise Linux 5 操作系統(tǒng)在主配置文件中提供全局默認(rèn)控制閾值為 OS,即 ServerTokens OS。它們將向客戶端公開(kāi)操作系統(tǒng)信息和相關(guān)敏感信息,所以保證安全情況下需要在該選項(xiàng)后使用“ProductOnly”,即 ServerTokens ProductOnly。

?

(2)ServerSignature:該選項(xiàng)控制由系統(tǒng)生成的頁(yè)面(錯(cuò)誤信息等)。默認(rèn)情況下為 off,即 ServerSignature off,該情況下不輸出任何頁(yè)面信息。另一情況為 on,即 ServerSignature on,該情況下輸出一行關(guān)于版本號(hào)等相關(guān)信息。安全情況下應(yīng)該將其狀態(tài)設(shè)為 off。

?

圖 1 和圖 2 為安全設(shè)定這兩個(gè)選項(xiàng)前后正常情況下和錯(cuò)誤情況下的輸出頁(yè)面(通過(guò) Rhel5 中的 Mozilla Firefox 瀏覽器訪問(wèn) Rhel5 中的 Apache 服務(wù)器)的詳細(xì)對(duì)比。可以清楚看到,安全設(shè)定選項(xiàng)后,可以充分地向客戶端用戶隱藏 Linux 操作系統(tǒng)信息和 Apache 服務(wù)器版本信息。


圖 1. 錯(cuò)誤情況下未設(shè)定安全選項(xiàng)前示意
圖 1. 錯(cuò)誤情況下未設(shè)定安全選項(xiàng)前示意

圖 2. 操作情況下使用安全設(shè)定后的對(duì)比
圖 2. 操作情況下使用安全設(shè)定后的對(duì)比

設(shè)置虛擬目錄和目錄權(quán)限

要從主目錄以外的其他目錄中進(jìn)行發(fā)布,就必須創(chuàng)建虛擬目錄。虛擬目錄是一個(gè)位于 Apache 的主目錄外的目錄,它不包含在 Apache 的主目錄中,但在訪問(wèn) Web 站點(diǎn)的用戶看來(lái),它與位于主目錄中的子目錄是一樣的。每個(gè)虛擬目錄都有一個(gè)別名,用戶 Web 瀏覽器中可以通過(guò)此別名來(lái)訪問(wèn)虛擬目錄,如 http:// 服務(wù)器 IP 地址 / 別名 / 文件名,就可以訪問(wèn)虛擬目錄下面的任何文件了。

?

使用 Alias 選項(xiàng)可以創(chuàng)建虛擬目錄。在主配置文件中,Apache 默認(rèn)已經(jīng)創(chuàng)建了兩個(gè)虛擬目錄。這兩條語(yǔ)句分別建立了“/icons/”和“/manual”兩個(gè)虛擬目錄,它們對(duì)應(yīng)的物理路徑分別是“/var/www /icons/”和“/var/www/manual”。在主配置文件中,用戶可以看到如下配置語(yǔ)句:

      Alias /icons/ "/var/www/icons/"

Alias /manual "/var/www/manual"
    

?

在實(shí)際使用過(guò)程中,用戶可以自己創(chuàng)建虛擬目錄。比如,創(chuàng)建名為 /user 的虛擬目錄,它所對(duì)應(yīng)的路徑為上面幾個(gè)例子中常用的 /var/www/html/rhel5:

Alias /test "/var/www/html/rhel5"

?

如果需要對(duì)其進(jìn)行權(quán)限設(shè)置,可以加入如下語(yǔ)句:

      <Directory “/var/www/html/rhel5”> 
	 AllowOverride None 
	 Options Indexes 
	 Order allow,deny 
	 Allow from all 
 </Directory> 
    
?

設(shè)置該虛擬目錄和目錄權(quán)限后,可以使用客戶端瀏覽器進(jìn)行測(cè)試驗(yàn)證,采用別名對(duì)該目錄中的文件進(jìn)行訪問(wèn),瀏覽結(jié)果如圖 3 所示。


圖 3. 使用虛擬目錄的測(cè)試結(jié)果
圖 3. 使用虛擬目錄的測(cè)試結(jié)果

限制 Apache 服務(wù)的運(yùn)行環(huán)境

Apache 服務(wù)器需要綁定到 80 端口上來(lái)監(jiān)聽(tīng)請(qǐng)求,而 root 是唯一有這種權(quán)限的用戶,隨著攻擊手段和強(qiáng)度的增加,這樣會(huì)使服務(wù)器受到相當(dāng)大的威脅,一但被利用緩沖區(qū)溢出漏洞,就可以控制整個(gè)系統(tǒng)。為了進(jìn)一步提高系 統(tǒng)安全性,Linux 內(nèi)核引入 chroot 機(jī)制,chroot 是內(nèi)核中的一個(gè)系統(tǒng)調(diào)用,軟件可以通過(guò)調(diào)用函數(shù)庫(kù)的 chroot 函數(shù),來(lái)更改某個(gè)進(jìn)程所能見(jiàn)到的根目錄。

?

chroot 機(jī)制即將某軟件運(yùn)行限制在指定目錄中,保證該軟件只能對(duì)該目錄及其子目錄的文件有所動(dòng)作,從而保證整個(gè)服務(wù)器的安全。在這種情況下,即使出現(xiàn)黑客或者不法 用戶通過(guò)該軟件破壞或被侵入系統(tǒng),Linux 系統(tǒng)所受的損壞也僅限于該設(shè)定的根目錄,而不會(huì)影響到整個(gè)系統(tǒng)的其他部分。

?

將軟件 chroot 化的一個(gè)問(wèn)題是該軟件運(yùn)行時(shí)需要的所有程序、配置文件和庫(kù)文件都必須事先安裝到 chroot 目錄中,通常稱這個(gè)目錄為 chroot“監(jiān)牢”。如果在“監(jiān)牢”中運(yùn)行 httpd,那么用戶根本看不到 Linux 文件系統(tǒng)中那個(gè)真正的目錄,從而保證了 Linux 系統(tǒng)的安全。

?

在使用該技術(shù)的時(shí)候,一般情況下需要事先創(chuàng)建目錄,并將守護(hù)進(jìn)程的可執(zhí)行文件 httpd 復(fù)制到其中。同時(shí),由于 httpd 需要幾個(gè)庫(kù)文件,所以需要把 httpd 程序依賴的幾個(gè) lib 文件同時(shí)也拷貝到同一個(gè)目錄下,因此手工完成這一工作是非常麻煩的。幸運(yùn)的是,用戶可以通過(guò)使用開(kāi)源的 jail 軟件包來(lái)幫助簡(jiǎn)化 chroot“監(jiān)牢”建立的過(guò)程,具體步驟如下所示:Jail 官方網(wǎng)站是: http://www.jmcresearch.com/projects/

?

首先將其下載,然后執(zhí)行如下命令進(jìn)行源代碼包的編譯和安裝:

       #tar xzvf jail_1.9a.tar.gz 
 #cd jail/src 
 #make 
    
?

jail 軟件包提供了幾個(gè) Perl 腳本作為其核心命令,包括 mkjailenv、addjailuser 和 addjailsw,他們位于解壓后的目錄 jail/bin 中。這幾個(gè)命令的基本用途如下所示:

  • mkjailenv:用于創(chuàng)建 chroot“監(jiān)牢”目錄,并且從真實(shí)文件系統(tǒng)中拷貝基本的軟件環(huán)境。
  • addjailsw:用于從真實(shí)文件系統(tǒng)中拷貝二進(jìn)制可執(zhí)行文件及其相關(guān)的其它文件(包括庫(kù)文件、輔助性文件和設(shè)備文件)到該“監(jiān)牢”中。
  • addjailuser:創(chuàng)建新的 chroot“監(jiān)牢”用戶。

采用 jail 創(chuàng)建監(jiān)牢的步驟如下所示;

(1)首先需要停止目前運(yùn)行的 httpd 服務(wù),然后建立 chroot 目錄,命令如下所示。該命令將 chroot 目錄建立在路徑 /root/chroot/httpd 下:

       # service httpd stop 
 # mkjailenv /root/chroot/httpd 
 kjailenv 
 A component of Jail (version 1.9 for linux) 
 http://www.gsyc.inf.uc3m.es/~assman/jail/ 
 Juan M. Casillas <assman@gsyc.inf.uc3m.es> 

 Making chrooted environment into /root/chroot/httpd 
        Doing preinstall() 
        Doing special_devices() 
        Doing gen_template_password() 
        Doing postinstall() 
 Done. 
    
?

(2)為“監(jiān)牢”添加 httpd 程序,命令如下:

       # ./addjailsw  /root/chroot/httpd/ -P /usr/sbin/httpd 

 addjailsw 
 A component of Jail (version 1.9 for linux) 
 http://www.gsyc.inf.uc3m.es/~assman/jail/ 
 Juan M. Casillas <assman@gsyc.inf.uc3m.es> 

 Guessing /usr/sbin/httpd args(0) 
 Warning: can't create /proc/mounts from the /proc filesystem 

 Done. 
    
?

在上述過(guò)程中,用戶不需要在意那些警告信息,因?yàn)?jail 會(huì)調(diào)用 ldd 檢查 httpd 用到的庫(kù)文件。而幾乎所有基于共享庫(kù)的二進(jìn)制可執(zhí)行文件都需要上述的幾個(gè)庫(kù)文件。

?

(3)然后,將 httpd 的相關(guān)文件拷貝到“監(jiān)牢”的相關(guān)目錄中,命令如下所示:

       # mkdir -p /root/chroot/httpd/etc 
 # cp – a /etc/httpd /root/chroot/httpd/etc/ 

    
?

添加后的目錄結(jié)構(gòu)如下所示:

      # ll 
總計(jì) 56 
 drwxr-xr-x 2 root root 4096 03-23 13:44 dev 
 drwxr-xr-x 3 root root 4096 03-23 13:46 etc 
 drwxr-xr-x 2 root root 4096 03-23 13:46 lib 
 drwxr-xr-x 2 root root 4096 03-23 13:46 selinux 
 drwsrwxrwx 2 root root 4096 03-23 13:46 tmp 
 drwxr-xr-x 4 root root 4096 03-23 13:46 usr 
 drwxr-xr-x 3 root root 4096 03-23 13:46 var 
    
?

(4)重新啟動(dòng) httpd,并使用 ps 命令檢查 httpd 進(jìn)程,發(fā)現(xiàn)該進(jìn)程已經(jīng)運(yùn)行在監(jiān)牢中,如下所示:

       # ps -aux | grep httpd 
 Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ 
 root      3546  0.6  0.3   3828  1712 pts/2   S    13:57   0:00 /usr/sbin/nss_pcache off
 /etc/httpd/alias 
 root      3550 14.2  3.6  49388 17788 ?       Rsl  13:57   0:00 /root/chroot/httpd/httpd
 apache    3559  0.2  1.4  49388  6888 ?       S    13:57   0:00 /root/chroot/httpd/httpd
 apache    3560  0.2  1.4  49388  6888 ?       S    13:57   0:00 /root/chroot/httpd/httpd
 apache    3561  0.2  1.4  49388  6888 ?       S    13:57   0:00 /root/chroot/httpd/httpd
 apache    3562  0.2  1.4  49388  6888 ?       S    13:57   0:00 /root/chroot/httpd/httpd
 apache    3563  0.2  1.4  49388  6888 ?       S    13:57   0:00 /root/chroot/httpd/httpd
 apache    3564  0.2  1.4  49388  6888 ?       S    13:57   0:00 /root/chroot/httpd/httpd
 apache    3565  0.2  1.4  49388  6888 ?       S    13:57   0:00 /root/chroot/httpd/httpd
 apache    3566  0.2  1.4  49388  6888 ?       S    13:57   0:00 /root/chroot/httpd/httpd
 root      3568  0.0  0.1   4124   668 pts/2   R+   13:57   0:00 grep httpd 
    
?
啟用 Apache 自帶安全模塊保護(hù)

Apache 的一個(gè)優(yōu)勢(shì)便是其靈活的模塊結(jié)構(gòu),其設(shè)計(jì)思想也是圍繞模塊(module)概念而展開(kāi)的。安全模塊是 Apache Server 中的極其重要的組成部分。這些安全模塊負(fù)責(zé)提供 Apache server 的訪問(wèn)控制和認(rèn)證,授權(quán)等一系列至關(guān)重要的安全服務(wù)。

?

Apache 下有如下幾類與安全相關(guān)的模塊:

  • mod_access 模塊能夠根據(jù)訪問(wèn)者的 IP 地址(或域名,主機(jī)名等)來(lái)控制對(duì) Apache 服務(wù)器的訪問(wèn),稱之為基于主機(jī)的訪問(wèn)控制。
  • mod_auth 模塊用來(lái)控制用戶和組的認(rèn)證授權(quán)(Authentication)。用戶名和口令存于純文本文件中。
  • mod_auth_db 和 mod_auth_dbm 模塊則分別將用戶信息(如名稱、組屬和口令等)存于 Berkeley-DB 及 DBM 型的小型數(shù)據(jù)庫(kù)中,便于管理及提高應(yīng)用效率。
  • mod_auth_digest 模塊則采用 MD5 數(shù)字簽名的方式來(lái)進(jìn)行用戶的認(rèn)證,但它相應(yīng)的需要客戶端的支持。
  • mod_auth_anon 模塊的功能和 mod_auth 的功能類似,只是它允許匿名登錄,將用戶輸入的 E-mail 地址作為口令。
  • mod_ssl 被 Apache 用于支持安全套接字層協(xié)議,提供 Internet 上安全交易服務(wù),如電子商務(wù)中的一項(xiàng)安全措施。通過(guò)對(duì)通信字節(jié)流的加密來(lái)防止敏感信息的泄漏。但是,Apache 的這種支持是建立在對(duì) Apache 的 API 擴(kuò)展來(lái)實(shí)現(xiàn)的,相當(dāng)于一個(gè)外部模塊,通過(guò)與第三方程序(如 openssl)的結(jié)合提供安全的網(wǎng)上交易支持。

為了能夠使用模塊功能,模塊通常以 DSO(Dynamic Shared Object)的方式構(gòu)建,用戶應(yīng)該在 httpd.conf 文件中使用 LoadModule 指令,使得能夠在使用前獲得模塊的功能。如下為主配置文件中各個(gè)模塊的情況,開(kāi)啟安全模塊非常簡(jiǎn)單,即去掉在各安全模塊所在行前的“#”符號(hào)即可,如下所 示:

       LoadModule auth_basic_module modules/mod_auth_basic.so 
 LoadModule auth_digest_module modules/mod_auth_digest.so 
 LoadModule authn_file_module modules/mod_authn_file.so 
 LoadModule authn_alias_module modules/mod_authn_alias.so 
....

    
?

只有將上述安全模塊進(jìn)行開(kāi)啟后 ,Apache 才能實(shí)現(xiàn)相應(yīng)的訪問(wèn)控制和通信加密功能。

Apache 訪問(wèn)控制策略設(shè)置

在開(kāi)啟了相應(yīng)的安全模塊后,還需要對(duì) Apache 的訪問(wèn)控制策略進(jìn)行設(shè)定。

?

認(rèn)證和授權(quán)指令

目前,有兩種常見(jiàn)的認(rèn)證類型,基本認(rèn)證和摘要認(rèn)證:

(1)基本認(rèn)證(Basic):使用最基本的用戶名和密碼方式進(jìn)行用戶認(rèn)證。

(2)摘要認(rèn)證(Digest):該認(rèn)證方式比基本認(rèn)證要安全得多,在認(rèn)證過(guò)程中額外使用了一個(gè)針對(duì)客戶端的挑戰(zhàn)(challenge)信息,可以有效地避免基本認(rèn)證方式可能遇到的“重放攻擊”。值得注意的是:目前并非所有的瀏覽器都支持摘要認(rèn)證方式。

?

所有的認(rèn)證配置指令既可以出現(xiàn)在主配置文件 httpd.conf 中的 Directory 容器中,也可以出現(xiàn)在單獨(dú)的 .htaccess 文件中,這個(gè)可以由用戶靈活地選擇使用。在認(rèn)證配置過(guò)程中,需要用到如下指令選項(xiàng):

  • AuthName:用于定義受保護(hù)區(qū)域的名稱。
  • AuthType:用于指定使用的認(rèn)證方式,包括上面所述的 Basic 和 Digest 兩種方式。
  • AuthGroupFile:用于指定認(rèn)證組文件的位置。
  • AuthUserFile:用戶指定認(rèn)證口令文件的位置。

使用上述的認(rèn)證指令配置認(rèn)證之后,需要為 Apache 服務(wù)器的訪問(wèn)對(duì)象,也就是指定的用戶和組進(jìn)行相應(yīng)的授權(quán),以便于他們對(duì) Apache 服務(wù)器提供的目錄和文件進(jìn)行訪問(wèn)。為用戶和組進(jìn)行授權(quán)需要使用 Require 指令,它主要可以使用如下三種方式進(jìn)行授權(quán):

  • 授權(quán)給指定的一個(gè)或者多個(gè)用戶:使用 Require user 用戶名 1 用戶名 2 …。
  • 授權(quán)給指定的一個(gè)或者多個(gè)組:使用 Require group 用戶名 1 用戶名 2 …。
  • 授權(quán)給指定口令文件中的所有用戶:使用 Require valid-user。

?

管理認(rèn)證口令文件和認(rèn)證組文件

要實(shí)現(xiàn)用戶認(rèn)證功能,首先要建立保存用戶名和口令的文件。Apache 自帶的 htpasswd 命令提供了建立和更新存儲(chǔ)用戶名、密碼的文本文件的功能。需要注意的是,這個(gè)文件必須放在不能被網(wǎng)絡(luò)訪問(wèn)的位置,以避免被下載和信息泄漏。建議將口令文件 放在 /etc/httpd/ 目錄或者其子目錄下。

?

下面的例子在 /etc/httpd 目錄下創(chuàng)建一個(gè)文件名為 passwd_auth 的口令文件,并將用戶 rhel5 添加入認(rèn)證口令文件。使用以下命令建立口令文件(過(guò)程中還會(huì)提示輸入該用戶的口令):

       # touch passwd_auth 
 # htpasswd -c /etc/httpd/passwd_auth rhel5 
 New password: 
 Re-type new password: 
 Adding password for user rhel5 
    
?

命令執(zhí)行的過(guò)程中系統(tǒng)會(huì)要求用戶為 rhel5 用戶輸入密碼。上述命令中的 -c 選項(xiàng)表示無(wú)論口令文件是否已經(jīng)存在,都會(huì)重新寫入文件并刪去原有內(nèi)容。所以在添加第 2 個(gè)用戶到口令文件時(shí),就不需要使用 -c 選項(xiàng)了,如下命令所示

      # htpasswd /etc/httpd/passwd_auth testuser 
    
?

認(rèn)證和授權(quán)使用實(shí)例

配置指令

Apache 實(shí)現(xiàn)訪問(wèn)控制的配置指令包括如下三種:

(1)order 指令:用于指定執(zhí)行允許訪問(wèn)控制規(guī)則或者拒絕訪問(wèn)控制規(guī)則的順序。order 只能設(shè)置為 Order allow,deny 或 Order deny,allow,分別用來(lái)表明用戶先設(shè)置允許的訪問(wèn)地址還是先設(shè)置禁止訪問(wèn)的地址。Order 選項(xiàng)用于定義缺省的訪問(wèn)權(quán)限與 Allow 和 Deny 語(yǔ)句的處理順序。Allow 和 Deny 語(yǔ)句可以針對(duì)客戶機(jī)的域名或 IP 地址進(jìn)行設(shè)置,以決定哪些客戶機(jī)能夠訪問(wèn)服務(wù)器。Order 語(yǔ)句設(shè)置的兩種值的具體含義如下:

  • allow, deny:缺省禁止所有客戶機(jī)的訪問(wèn),且 Allow 語(yǔ)句在 Deny 語(yǔ)句之前被匹配。如果某條件既匹配 Deny 語(yǔ)句又匹配 Allow 語(yǔ)句,則 Deny 語(yǔ)句會(huì)起作用(因?yàn)?Deny 語(yǔ)句覆蓋了 Allow 語(yǔ)句)。
  • deny, allow:缺省允許所有客戶機(jī)的訪問(wèn),且 Deny 語(yǔ)句在 Allow 語(yǔ)句之前被匹配。如果某條件既匹配 Deny 語(yǔ)句又匹配 Allow 語(yǔ)句,則 Allow 語(yǔ)句會(huì)起作用(因?yàn)?Allow 語(yǔ)句覆蓋了 Deny 語(yǔ)句)。

(2)allow 指令:指明允許訪問(wèn)的地址或地址序列。如 allow from all 指令表明允許所有 IP 來(lái)的訪問(wèn)請(qǐng)求。

(3)deny 指令:指明禁止訪問(wèn)的地址或地址序列。如 deny from all 指令表明禁止所有 IP 來(lái)的訪問(wèn)請(qǐng)求。

?

應(yīng)用實(shí)例

下面舉幾個(gè)簡(jiǎn)單的例子對(duì)上述 order、allow 和 deny 命令的使用進(jìn)行示范。

?

(1)在下面的例子中,admin.org 域中所有主機(jī)都允許訪問(wèn)網(wǎng)站,而其他非該域中的任何主機(jī)訪問(wèn)都被拒絕,因?yàn)?Deny 在前,Allow 在后,Allow 語(yǔ)句覆蓋了 Deny 語(yǔ)句:

      Order Deny,Allow 
 Deny from all 
 Allow from admin.org 
    
?

(2)下面例子中,admin.org 域中所有主機(jī),除了 db.admin.org 子域包含的主機(jī)被拒絕訪問(wèn)以外,都允許訪問(wèn)。而所有不在 admin.org 域中的主機(jī)都不允許訪問(wèn),因?yàn)槿笔顟B(tài)是拒絕對(duì)服務(wù)器的訪問(wèn)(Allow 在前,Deny 在后,Deny 語(yǔ)句覆蓋了 Allow 語(yǔ)句):

       Order Allow,Deny 
 Allow from admin.org 
 Deny from db.admin.org 
    
?

使用主配置文件配置用戶認(rèn)證及授權(quán)

在本例子中,用戶可以在 Apache 的主配置文件 httpd.conf 中加入以下語(yǔ)句建立對(duì)目錄 /var/www/html/rhel5 訪問(wèn)的用戶認(rèn)證和授權(quán)機(jī)制:

       <Directory "/var/www/html/rhel5"> 
	 AllowOverride None 
 AuthType Basic 
 AuthName "rhel5"
 AuthUserFile /etc/httpd/passwd_auth 
 Require user rhel5 testuser 
 </Directory> 
    
?

在上述例子中,使用了如下指令:

  • AllowOverride:該選項(xiàng)定義了不使用 .htaccess 文件。
  • AuthType Basic:AuthType 選項(xiàng)定義了對(duì)用戶實(shí)施認(rèn)證的類型,最常用的是由 mod_auth 提供的 Basic。
  • AuthName:定義了 Web 瀏覽器顯示輸入用戶 / 密碼對(duì)話框時(shí)的領(lǐng)域內(nèi)容。
  • AuthUserFile:定義了口令文件的路徑,即使用 htpasswd 建立的口令文件。
  • Require user:定義了允許哪些用戶訪問(wèn),各用戶之間用空格分開(kāi)。

需要注意的是:在 AuthUserFile 選項(xiàng)定義中,還需要使用如下語(yǔ)句事先建立認(rèn)證用戶 patterson 和 testuser,該選項(xiàng)中的定義才能生效:

       #htpasswd -c /etc/httpd/passwd_auth rhel5 
 #htpasswd /etc/httpd/passwd_auth testuser 
    
?

使用 .htaccess 文件配置用戶認(rèn)證和授權(quán)

在本例子中,為了完成如上述例子同樣的功能,需要先在主配置文件中加入如下語(yǔ)句:

      <Directory “/var/www/html/rhel5”> 
	 AllowOverride AuthConfig 
 </Directory> 
    
?

上述語(yǔ)句中的 AllowOverride 選項(xiàng)允許在 .htaccess 文件中使用認(rèn)證和授權(quán)指令。、、然后,在 .htaccess 文件中添加如下語(yǔ)句即可:

       AuthType Basic 
 AuthName "Please Login:"
 AuthUserFile /etc/httpd/passwd_auth 
 Require user rhel5 testuser、
    
?

同理,在 AuthUserFile 選項(xiàng)定義中,還需要使用如下語(yǔ)句事先建立認(rèn)證用戶 patterson 和 testuser,該選項(xiàng)中的定義才能生效:

      #htpasswd -c /etc/httpd/passwd_auth rhel5

#htpasswd /etc/httpd/passwd_auth testuser
    
?

保證 Apache 服務(wù)通信安全

?

Apache 中 SSL 原理

在 SSL 通信中,首先采用非對(duì)稱加密交換信息,使得服務(wù)器獲得瀏覽器端提供的對(duì)稱加密的密鑰,然后利用該密鑰進(jìn)行通信過(guò)程中信息的加密和解密。為了保證消息在傳遞 過(guò)程中沒(méi)有被篡改,可以加密 Hash 編碼來(lái)確保信息的完整性。服務(wù)器數(shù)字證書主要頒發(fā)給 Web 站點(diǎn)或其他需要安全鑒別的服務(wù)器,證明服務(wù)器的身份信息,同樣客戶端數(shù)字證書用于證明客戶端的身份。

?

使用公用密鑰的方式可以保證數(shù)據(jù)傳輸沒(méi)有問(wèn)題,但如果瀏覽器客戶訪問(wèn)的站點(diǎn)被假冒,這也是一個(gè)嚴(yán)重的安全問(wèn)題。這個(gè)問(wèn)題不屬于加密本身,而是 要保證密鑰本身的正確性問(wèn)題。要保證所獲得的其他站點(diǎn)公用密鑰為其正確的密鑰,而非假冒站點(diǎn)的密鑰,就必須通過(guò)一個(gè)認(rèn)證機(jī)制,能對(duì)站點(diǎn)的密鑰進(jìn)行認(rèn)證。當(dāng) 然即使沒(méi)有經(jīng)過(guò)認(rèn)證,仍然可以保證信息傳輸安全,只是客戶不能確信訪問(wèn)的服務(wù)器沒(méi)有被假冒。如果不是為了提供電子商務(wù)等方面對(duì)安全性要求很高的服務(wù),一般 不需要如此嚴(yán)格的考慮。

?

下面給出使用 SSL 進(jìn)行通信的過(guò)程(參見(jiàn)圖 4):

(1)客戶端向服務(wù)器端發(fā)起對(duì)話,協(xié)商傳送加密算法。例如:對(duì)稱加密算法有 DES、RC5,密鑰交換算法有 RSA 和 DH,摘要算法有 MD5 和 SHA。

(2)服務(wù)器向客戶端發(fā)送服務(wù)器數(shù)字證書。比如:使用 DES-RSA-MD5 這對(duì)組合進(jìn)行通信。客戶端可以驗(yàn)證服務(wù)器的身份,決定是否需要建立通信。

(3)客戶端向服務(wù)器傳送本次對(duì)話的密鑰。在檢查服務(wù)器的數(shù)字證書是否正確,通過(guò) CA 機(jī)構(gòu)頒發(fā)的證書驗(yàn)證了服務(wù)器證書的真實(shí)有效性之后,客戶端生成利用服務(wù)器的公鑰加密的本次對(duì)話的密鑰發(fā)送給服務(wù)器。

(4)服務(wù)器用自己的私鑰解密獲取本次通信的密鑰。

(5)雙方的通信正式開(kāi)始。


圖 4. SSL 通信流程示意
圖 4. SSL 通信流程示意

在一般情況下,當(dāng)客戶端是保密信息的傳遞者時(shí),他不需要數(shù)字證書驗(yàn)證自己身份的真實(shí)性,如用戶通常使用的網(wǎng)上銀行交易活動(dòng),客戶需要將自己的 隱秘信息——賬號(hào)和密碼發(fā)送給銀行,因此銀行的服務(wù)器需要安裝數(shù)字證書來(lái)表明自己身份的有效性,否則將會(huì)使得信息泄露。當(dāng)然,在某些安全性要求極高的 B2B(Business to Business)應(yīng)用,服務(wù)器端也需要對(duì)客戶端的身份進(jìn)行驗(yàn)證,這時(shí)客戶端也需要安裝數(shù)字證書以保證通信時(shí)服務(wù)器可以辨別出客戶端的身份,驗(yàn)證過(guò)程類似 于服務(wù)器身份的驗(yàn)證過(guò)程。另外,在一些電子商務(wù)的應(yīng)用中,可能還會(huì)使用到電子簽名,或者為了信息交換的更加安全,會(huì)增加電子簽名和消息校驗(yàn)碼(MAC)。 而在通常情況下,瀏覽器都會(huì)通過(guò)交互的方式來(lái)完成上述的通信過(guò)程,下面在 Linux 中對(duì) Apache 采用 SSL 也會(huì)作詳細(xì)地介紹。

?

安裝和啟動(dòng) SSL

?

安裝 SSL

雖然 Apache 服務(wù)器不支持 SSL,但 Apache 服務(wù)器有兩個(gè)可以自由使用的支持 SSL 的相關(guān)計(jì)劃,一個(gè)為 Apache-SSL,它集成了 Apache 服務(wù)器和 SSL,另一個(gè)為 Apache+mod_ssl,它是通過(guò)可動(dòng)態(tài)加載的模塊 mod_ssl 來(lái)支持 SSL,其中后一個(gè)是由前一個(gè)分化出的,并由于使用模塊,易用性很好,因此使用范圍更為廣泛。還有一些基于 Apache 并集成了 SSL 能力的商業(yè) Web 服務(wù)器,然而使用這些商業(yè) Web 服務(wù)器主要是北美,這是因?yàn)樵谀抢?SSL 使用的公開(kāi)密鑰的算法具備專利權(quán),不能用于商業(yè)目的,其他的國(guó)家不必考慮這個(gè)專利問(wèn)題,而可以自由使用 SSL。

?

Apache+mod_ssl 依賴于另外一個(gè)軟件:OpenSSL,它是一個(gè)可以自由使用的 SSL 實(shí)現(xiàn),首先需要安裝這個(gè)軟件。用戶可以從網(wǎng)站 http://www.openssl.org/source/ 上下載 Linux 下 OpenSSL 的最新穩(wěn)定版本:openssl-1.0.1c.tar.gz。

?

下載源代碼安裝包后,使用如下的步驟安裝即可:

(1)用 openssl-1.0.1c.tar.gz 軟件包安裝 OpenSSL 之前,首先須要對(duì)該軟件包進(jìn)行解壓縮和解包。用以下命令完成軟件包的解壓縮和解包:

#tar xvfz openssl-1.0.1c.tar.gz

(2)解壓縮后,進(jìn)入源碼的目錄 openssl-1.0.1c ,并使用配置腳本進(jìn)行環(huán)境的設(shè)置。相應(yīng)的命令為:

       // 改變當(dāng)前目錄為 openssl-1.0.1c 目錄
 #cd openssl-1.0.1c 				

 // 執(zhí)行該目錄下配置腳本程序
 #./configure 
    
?

(3)在執(zhí)行 ./configure 之后,配置腳本會(huì)自動(dòng)生成 Makefile。如果在設(shè)置的過(guò)程中沒(méi)有任何的錯(cuò)誤,就可以開(kāi)始編譯源碼了。相應(yīng)的命令及其顯示結(jié)果如下:

      #make & make install 
    
?

安裝好 OpenSSL 之后,就可以安裝使用 Apache+mod_ssl 了。然而為了安裝完全正確,需要清除原先安裝的 Apache 服務(wù)器的其他版本,并且還要清除所有的設(shè)置文件及其缺省設(shè)置文件,以避免出現(xiàn)安裝問(wèn)題。最好也刪除 /usr/local/www 目錄(或更名),以便安裝程序能建立正確的初始文檔目錄。如果是一臺(tái)沒(méi)有安裝過(guò) Apache 服務(wù)器的新系統(tǒng),就可以忽略這個(gè)步驟,而直接安裝 Apache+mod_ssl 了。

?

啟動(dòng)和關(guān)閉 SSL

啟動(dòng)和關(guān)閉該服務(wù)器的命令如下所示:

  • #apachectl start:?jiǎn)?dòng) apache。
  • #apachectl startssl:?jiǎn)?dòng) apache ssl。
  • #apachectl stop:停止 apache。
  • #apachectl restart:重新啟動(dòng) apache。
  • #apachectl status:顯示 apache 的狀態(tài)。
  • #apachectl configtest:測(cè)試 httpd.conf 配置是否正確。
  • # /usr/local/sbin/apachectl startssl

此時(shí)使用 start 參數(shù)為僅僅啟動(dòng)普通 Apache 的 httpd 守護(hù)進(jìn)程,而不啟動(dòng)其 SSL 能力,而 startssl 才能啟動(dòng) Apache 的 SSL 能力。如果之前 Apache 的守護(hù)進(jìn)程正在運(yùn)行,便需要使用 stop 參數(shù)先停止服務(wù)器運(yùn)行。

?

為 OpenSSL 產(chǎn)生證書

在采用 OpenSSL 進(jìn)行 Apache 通信加密前,需要先產(chǎn)生與加密相關(guān)的認(rèn)證憑證(也就是證書),如下步驟所示:

       # openssl genrsa -out apache.key 1024 
 Generating RSA private key, 1024 bit long modulus 
 ..........................................++++++ 
 .....................++++++ 
 e is 65537 (0x10001) 

 # openssl req -new -key apache.key -out apache.csr 
 You are about to be asked to enter information that will be incorporated 
 into your certificate request. 
 What you are about to enter is what is called a Distinguished Name or a DN. 
 There are quite a few fields but you can leave some blank 
 For some fields there will be a default value, 
 If you enter '.', the field will be left blank. 
 ----- 
 Country Name (2 letter code) [GB]:CN 
 State or Province Name (full name) [Berkshire]:China  
 Locality Name (eg, city) [Newbury]:Beijing 
 Organization Name (eg, company) [My Company Ltd]:CSO 
 Organizational Unit Name (eg, section) []:CSO 
 Common Name (eg, your name or your server's hostname) []:localhost 
 Email Address []:CSO@ittf.org.cn 

 Please enter the following 'extra' attributes 
 to be sent with your certificate request 
 A challenge password []:apacheserver 
 An optional company name []:apacheserver 

 # openssl x509 -req -days 365 -in apache.csr -signkey apache.key -out apache.crt 
 Signature ok 
 subject=/C=CN/ST=China/L=Beijing/O=CSO/OU=CSO/CN=localhost/emailAddress=CSO@ittf.org.cn 
 Getting Private key 
    
?

經(jīng)過(guò)上述步驟后,將會(huì)產(chǎn)生三個(gè)文件 apache.csr, apache.key 和 apache.crt,然后把這三個(gè)文件拷貝到 /etc/httpd/conf/ca 目錄下即可。

?

然后,就可以啟動(dòng) Mozilla、IE 或其他支持 SSL 的瀏覽器,輸入 URL 為: https://ssl_server/ 來(lái)查看服務(wù)器是否有相應(yīng),https 使用的缺省端口為 443,如果一切正常,服務(wù)器將會(huì)返回給客戶端證書,由客戶端進(jìn)行驗(yàn)證并且判斷,是否接受該證書并進(jìn)行下一步的通信過(guò)程。

?

下面以 Linux 下的 Mozilla Firefox 瀏覽器為例,來(lái)簡(jiǎn)要說(shuō)明使用 Apache+SSL 服務(wù)器的過(guò)程。首先,圖 5 給出了查看和驗(yàn)證該證書的相關(guān)提示;最后,圖 6 則給出了證書驗(yàn)證成功后,采用 SSL 進(jìn)行保密傳輸?shù)木唧w界面示意:


圖 5. 驗(yàn)證證書示意
圖 5. 驗(yàn)證證書示意

圖 6. 證書通過(guò)驗(yàn)證,正常通信開(kāi)始
圖 6. 證書通過(guò)驗(yàn)證,正常通信開(kāi)始

Apache 日志管理

?

日志管理分類

日志文件是用戶管理和監(jiān)控 Apache 安全的非常好的第一手資料,它清晰地記錄了客戶端訪問(wèn) Apache 服務(wù)器資源的每一條記錄,以及在訪問(wèn)中出現(xiàn)的錯(cuò)誤信息,可以這樣說(shuō),Apache 可以記錄 Web 訪問(wèn)中感興趣的幾乎所有信息。

?

當(dāng)運(yùn)行 Apache 服務(wù)器時(shí)生成 4 個(gè)標(biāo)準(zhǔn)的日志文件:

  • 錯(cuò)誤日志
  • 訪問(wèn)日志
  • 傳輸日志
  • Cookie 日志

其中比較常見(jiàn)的是訪問(wèn)日志(access_log)和錯(cuò)誤日志(error_log),其中傳輸日志和 cookie 日志被 Apache 2.0 以上的版本丟棄,所以本文不討論這兩種日志。當(dāng)然,如果使用 SSL 服務(wù)的話,還可能存在 ssl_access_log、ssl_error_log 和 ssl_request_log 三種日志文件。

?

另外,值得注意的是:上述幾種日志文件如果長(zhǎng)度過(guò)大,還可能生成注入 access_log.1,error_log.2 等的額外文件,其格式與含義與上述幾種文件相同,只不過(guò)系統(tǒng)自動(dòng)為其進(jìn)行命名而已。

?

日志相關(guān)的配置指令

Apache 中提供如下 4 條與日志相關(guān)的配置指令:

  • ErrorLog 指令:用于指定錯(cuò)誤日志的存放路徑,使用語(yǔ)法為:ErrorLog 文件名;
  • LogLevel:用于指定錯(cuò)誤日志的錯(cuò)誤登記,使用語(yǔ)法為:Loglevel 等級(jí);
  • LogFormat:用于為日志記錄格式命名,使用語(yǔ)法為:LogFormat 記錄格式說(shuō)明字符串 格式稱謂;
  • CustomLog:用于指定訪問(wèn)日志存放路徑和記錄格式,指定訪問(wèn)日志由指定的程序生成并指定日志的記錄格式,使用語(yǔ)法為:CustomLog 日志文件名 格式稱謂。

在上述幾個(gè)文件當(dāng)中,除了 error_log 和 ssl_error_log 之外,所有日志文件以由 CustomLog 和 LogFormat 指令指定的格式生成。這些指令在 httpd.conf 文件中出現(xiàn)。使用 LogFormat 指令可以定義新的日志文件格式:

      LogFormat “%h  %l  %u  %t  \ “%> %s %b “common 
    
?

假定使用的是 common 日志格式或者 combined 日志格式,這兩種格式都在默認(rèn)的配置文件中定義。表 1 列出了 LogFormat 語(yǔ)句可以使用的變量:

表 1. LogFormat 語(yǔ)句的變量

變 量 含 義
%b 發(fā)送字節(jié),不包括 HTTP 標(biāo)題
%f 文件名
%{VARIABLE}e 環(huán)境變量 VARIABLE 的內(nèi)容
%h 遠(yuǎn)程主機(jī)
%a 遠(yuǎn)程 IP 地址
%{HEADER}i HEADER 內(nèi)容;發(fā)送到服務(wù)器的請(qǐng)求的標(biāo)題行
%l 遠(yuǎn)程登錄名(如果提供該值,則從 identd 獲得)
%{NOTE}n 來(lái)自另一個(gè)模塊的 NOTE 通知的內(nèi)容
%{HEADER}o HEADER 的內(nèi)容,回復(fù)中的標(biāo)題行
%p 服務(wù)器服務(wù)于請(qǐng)求的規(guī)范端口
%P 服務(wù)于請(qǐng)求的子進(jìn)程的 ID
%r 請(qǐng)求的第一行
%s 狀態(tài)。對(duì)于內(nèi)部重定向的請(qǐng)求,該狀態(tài)為初始請(qǐng)求—最后是 %>s
%t 時(shí)間,格式為 common 日志格式中的時(shí)間格式
%{format}t 時(shí)間,格式由 format 給出。可以是 strftime(3)格式
%T 服務(wù)請(qǐng)求花費(fèi)的時(shí)間,以秒計(jì)
%u 來(lái)自 auth 的遠(yuǎn)程用戶;如果返回的狀態(tài)(%s)為 401 則可能是假的
%U 請(qǐng)求的 URL 路徑
%v 服務(wù)于該請(qǐng)求的服務(wù)器的規(guī)范 ServerName

在每個(gè)變量中,可以在前面設(shè)置一個(gè)條件,決定是否顯示該變量。如果不顯示,則顯示 -。這些條件是數(shù)值返回值列表的形式。另外,還可以使用 CustomLog 指令指定日志文件的位置和格式。如果沒(méi)有指定日志文件的絕對(duì)路徑,則日志文件的位置假定為相對(duì)于 ServerRoot。下面是 httpd.conf 文件中指定日志文件的語(yǔ)句:

       // 
 // The location and format of the access logfile(Common Logfile Format). 
 // If you do not define any access logfiles within a <VirtualHost> 
 // container, they will be logged here.  Contrariwise, if you *do* 
 // define per-<VirtualHost> access logfiles, transactions will be 
 // logged therein and *not* in this file. 
 // 
 CustomLog logs/access_log common 

 ErrorLog logs/error_log 
    
?

日志記錄等級(jí)和分類

?

一般說(shuō)來(lái),Apache 中的錯(cuò)誤日志記錄等級(jí)有如表 2 所示的八類:

?

表 2. 錯(cuò)誤日志記錄的等級(jí)

緊急性 等級(jí) 解釋
1 Emerg 出現(xiàn)緊急狀況使得系統(tǒng)不可用
2 Alert 需要立即引起注意的狀況
3 Crit 危險(xiǎn)情況的警告
4 Error 除上述 3 種情況之外的其他錯(cuò)誤
5 Warn 警告信息
6 Notice 需要引起注意的情況,不如第 4 和第 5 類重要
7 Info 需要報(bào)告的一般消息
8 Debug 運(yùn)行于 debug 模式的程序產(chǎn)生的消息

另外,在 Apache 中,將訪問(wèn)日志分為如下 4 類:

  • 普通日志格式(common log format,CLF):大多數(shù)日志分析軟件都支持這種格式,其在 LogFormat 指定中定義的昵稱為 common;
  • 參考日志格式(referer log format):記錄客戶訪問(wèn)站點(diǎn)的用戶身份,其在 LogFormat 指定中定義的昵稱為 referer;
  • 代理日志格式(agent log format):記錄請(qǐng)求的用戶代理,其在 LogFormat 指定中定義的昵稱為 agent;
  • 綜合日志格式(combined log format):即結(jié)合上述三種格式的日志信息,其在 LogFormat 指定中定義的昵稱為 combined。

在實(shí)際的使用過(guò)程中,由于綜合日志格式有效地結(jié)合了其他 3 種日志格式和信息,所以在配制訪問(wèn)日志時(shí),可以有

?

兩種方式:

(1)分別使用 3 個(gè)文件進(jìn)行分別記錄,相應(yīng)配置示例如下:

       LogFormat “%h %l %u %t \ “%r\” %>s %b” common 
 LogFormat “%{Referer}i->%U” referer 
 LogFormat “%{Apache User-agent}i” agent 
 CustomLog logs/access_log common 
 CustomLog logs/referer_log referer 
 CustomLog logs/agent_log agent 
    
?

(2)使用一個(gè)綜合文件進(jìn)行記錄,相應(yīng)配置示例如下:

      LogFormat “%h %l %u %t \ “%r\” %>s %b \”%{Referer}i\” \ 
  “%{Apache User-Agent}i\””combined
CustomLog logs/access_log combined
    
?

參考資料

學(xué)習(xí)

討論

?

?

Linux: Apache 安全設(shè)定


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 九九精品国产 | 国产成人精品免费视 | 欧美交换乱理伦片120秒 | 久久久综合中文字幕久久 | 国产精品美女视频 | 狠狠干夜夜| 日韩一区二区在线视频 | 最新中文字幕在线观看 | 波多野结衣高清在线播放 | 日韩欧美国产高清在线观看 | 欧美性啪啪| 91久久亚洲精品一区二区 | 99久久精品费精品国产一区二区 | 在线免费看a | 婷婷中文网 | 亚洲欧美色综合精品 | 狠狠色噜噜狠狠狠888奇米 | 欧美毛片性视频区 | 国产精品久久久免费视频 | 日韩一区二区视频在线观看 | 国产成人一区二区三区免费观看 | 国产人伦视频在线观看 | 国内精品免费久久影院 | 国产高清亚洲 | 色综合视频在线 | 国产精品_国产精品_国产精品 | 黑人巨大vs日本妞 | 国产一区在线观看免费 | 亚洲第一视频在线播放 | 欧美大胆一级视频 | 精品久久久久久久久久久久久久久 | 久久国产精品一区二区三区 | 国产高清国产精品国产k | 欧美性色xo影院69 | 亚洲成人国产 | 国产精品婷婷久久爽一下 | 免费午夜剧场 | 分分操这里只有精品 | 天天弄| 99精品在线免费 | 狠狠躁夜夜躁人人爽天天不 |