操作步驟 1 安裝 Apache 2.0
//查看是否安裝了 Apache
# rpm -qa|grep httpd
//將 Red Hat Linux 9 的第 1 張安裝光盤放入光驅(qū)后掛裝
# mount /mnt/cdrom
//進入光盤的 Red Hat/RPMS 目錄
# cd /mnt/cdrom/Red Hat/RPMS
//安裝所需的 RPM 包
# rpm –ivh httpd-2.0.40-21.i386.rpm
# rpm -ivh httpd-manual-2.0.40-21.i386.rpm
//彈出光盤
# cd;eject
操作步驟 2 啟動并檢驗 Apache 是否被運行
// 立即啟動
# service httpd start
//下面的操作用于檢驗 httpd 是否被啟動
# pstree|grep httpd
|- httpd---8*[httpd] //表示已經(jīng)啟動
#
//可以使用下面的命令檢測配置文件語法的正確性
# apachectl configtest
httpd: Could not determine the server‘s fully qualified domain name,
using 127.0.0.1 for ServerName
Syntax OK
注意:檢測配置文件語法時,還可以使用下面的命令:
# httpd -t
//可以使用如下命令查看運行狀態(tài)
# service httpd status
httpd (pid 2759 2758 2757 2756 2755 2754 2753 2752 2749) 正在運行...
#
操作步驟 3 查看 Apache 在 Red Hat 9 中的默認配置
//查看配置文件
# grep -v "#" /etc/httpd/conf/httpd.conf
//當服務器響應主機頭(header)信息時顯示 Apache 的版本和操作系統(tǒng)名稱
ServerTokens OS
//設置服務器的根目錄
ServerRoot "/etc/httpd"
//設置運行 Apache 時使用的 PidFile 的路徑
PidFile run/httpd.pid
//若 300 秒后沒有收到或送出任何數(shù)據(jù)就切斷該連接
Timeout 300
//不使用保持連接的功能,即客戶一次請求連接只能響應一個文件
/建議用戶將此參數(shù)的值設置為 On,即允許使用保持連接的功能
KeepAlive Off
//在使用保持連接功能時,設置客戶一次請求連接能響應文件的最大上限
MaxKeepAliveRequests 100
//在使用保持連接功能時,兩個相鄰的連接的時間間隔超過 15 秒,就切斷連接
KeepAliveTimeout 15
//設置使用 prefork MPM 運行方式的參數(shù),此運行方式是 Red Hat 默認的方式
<IfModule prefork.c>
//設置服務器啟動時運行的進程數(shù)
StartServers 8
//Apache 在運行時會根據(jù)負載的輕重自動調(diào)整空閑子進程的數(shù)目,
//若存在低于 5 個空閑子進程,就創(chuàng)建一個新的子進程準備為客戶提供服務
MinSpareServers 5
//若存在高于 20 個空閑子進程,就創(chuàng)建逐一刪除子進程來提高系統(tǒng)性能
MaxSpareServers 20
//限制同一時間的連接數(shù)不能超過 150
MaxClients 150
//限制每個子進程在結(jié)束處理請求之前能處理的連接請求為 1000
MaxRequestsPerChild 1000
</IfModule>
//設置使用 worker MPM 運行方式的參數(shù)
<IfModule worker.c>
…………
</IfModule>
//設置使用 perchild MPM 運行方式的參數(shù)
<IfModule perchild.c>
…………
</IfModule>
//設置服務器的監(jiān)聽端口
Listen 80
//將/etc/httpd/conf.d 目錄下的所有以 conf 結(jié)尾的配置文件包含進來
Include conf.d/*.conf
//動態(tài)加載模塊(DSO)
LoadModule access_module modules/mod_access.so
LoadModule auth_module modules/mod_auth.so
………………………………
LoadModule proxy_connect_module modules/mod_proxy_connect.so
//當使用內(nèi)置模塊 prefork.c 時動態(tài)加載 cgi_module
<IfModule prefork.c>
LoadModule cgi_module modules/mod_cgi.so
</IfModule>
//當使用內(nèi)置模塊 worker.c 時動態(tài)加載 cgid_module
<IfModule worker.c>
LoadModule cgid_module modules/mod_cgid.so
</IfModule>
//設置運行 Apache 服務器的用戶和組
User apache
Group apache
//設置 Apache 服務器管理員的 E-mail 地址
ServerAdmin root@localhost
//關閉此選項,當 Apache 服務器需要指向本身的連接時使用
//ServerName:Port 作為主機名,例如
www.jamond.net:80 //若打開此選項將使用
www.jamond.net port 80 作為主機名
UseCanonicalName Off
//設置根文檔路徑
DocumentRoot "/var/www/html"
//設置 Apache 服務器根的訪問權(quán)限
<Directory />
//允許符號鏈接跟隨,訪問不在本目錄下的文件
Options FollowSymLinks
//禁止讀取.htaccess 配置文件的內(nèi)容
AllowOverride None
</Directory>
//設置根文檔目錄的訪問權(quán)限
<Directory "/var/www/html">
//Indexes:當在目錄中找不到 DirectoryIndex 列表中指定的文件
就生成當前目錄的文件列表
//FollowSymLinks:允許符號鏈接跟隨,訪問不在本目錄下的文件
Options Indexes FollowSymLinks
//禁止讀取.htaccess 配置文件的內(nèi)容
AllowOverride None
//指定先執(zhí)行 Allow(允許)訪問規(guī)則,再執(zhí)行 Deny(拒絕)訪問規(guī)則
Order allow,deny
//設置 Allow(允許)訪問規(guī)則,允許所有連接
Allow from all
</Directory>
//對 Apache 服務器根的訪問不生成目錄列表,同時指定錯誤輸出頁面
<LocationMatch "^/$>
Options -Indexes
ErrorDocument 403 /error/noindex.html
</LocationMatch>
//不允許每用戶的服務器配置
<IfModule mod_userdir.c>
UserDir disable
</IfModule>
//當訪問服務器時,依次查找頁面 index.html、index.html.var
DirectoryIndex index.html index.html.var
//指定保護目錄配置文件的名稱
AccessFileName .htaccess
//拒絕訪問以.ht 開頭的文件,即保證.htaccess 不被訪問
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
//指定負責處理 MIME 對應格式的配置文件的存放位置
TypesConfig /etc/mime.types
//指定默認的 MIME 文件類型為純文本或 HTML 文件
DefaultType text/plain
//當 mod_mime_magic.c 模塊被加載時,指定 Magic 信息碼配置文件的存放位置
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>
//只記錄連接 Apache 服務器的 IP 地址,而不記錄主機名
HostnameLookups Off
//指定錯誤日志存放位置
ErrorLog logs/error_log
//指定記錄的錯誤信息的詳細等級為 warn 級別
LogLevel warn
//定義四種記錄日志的格式
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
//指定訪問日志的記錄格式為 combined(混合型),并指定訪問日志存放位置
CustomLog logs/access_log combined
//設置 Apache 自己產(chǎn)生的頁面中使用 Apache 服務器版本的簽名
ServerSignature On
//設置內(nèi)容協(xié)商目錄的訪問別名
Alias /icons/ "/var/www/icons/"
//設置/var/www/icons 目錄的訪問權(quán)限
<Directory "/var/www/icons">
// MultiViews:使用內(nèi)容協(xié)商功能決定被發(fā)送的網(wǎng)頁的性質(zhì)
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
//設置 Apche 手冊的訪問別名
Alias /manual "/var/www/manual"
//設置/var/www/manual 目錄的訪問權(quán)限
<Directory "/var/www/manual">
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
//指定 DAV 加鎖數(shù)據(jù)庫文件的存放位置
<IfModule mod_dav_fs.c>
DAVLockDB /var/lib/dav/lockdb
</IfModule>
//設置 CGI 目錄的訪問別名
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
//由于 Red Hat 中不使用 worker MPM 運行方式,所以不加載 mod_cgid.c 模塊
<IfModule mod_cgid.c>
Scriptsock run/httpd.cgid
</IfModule>
//設置 CGI 目錄的訪問權(quán)限
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
//設置自動生成目錄列表的顯示方式
// FancyIndexing:對每種類型的文件前加上一個小圖標以示區(qū)別
// VersionSort:對同一個軟件的多個版本進行排序
// NameWidth=*:文件名子段自動適應當前目錄下最長文件名
IndexOptions FancyIndexing VersionSort NameWidth=*
//當使用 IndexOptions FancyIndexing 之后,配置下面的參數(shù),
//用于告知服務器在遇到不同的文件類型或擴展名時采用 MIME 編碼格式
//辨別文件類型并顯示相應的圖標
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
//當使用 IndexOptions FancyIndexing 之后,配置下面的參數(shù),
//用于告知服務器在遇到不同的文件類型或擴展名時采用所指定的格式
//并顯示所對應的圖標
AddIcon /icons/binary.gif .bin .exe
………………
AddIcon /icons/blank.gif ^^BLANKICON^^
//當使用 IndexOptions FancyIndexing 之后,且無法識別文件類型時
//顯示此處定義的圖標
DefaultIcon /icons/unknown.gif
//當服務器自動列出目錄列表時,在所生成的頁面之后顯示 README.html 的內(nèi)容
ReadmeName README.html
//當服務器自動列出目錄列表時,在所生成的頁面之前顯示 HEADER.html 的內(nèi)容
HeaderName HEADER.html
//設置在線瀏覽用戶可以實時解壓縮.Z .gz .tgz 類型的文件
//并非所有瀏覽器都支持
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
//設置網(wǎng)頁內(nèi)容的語言種類(瀏覽器要啟用內(nèi)容協(xié)商)
//對中文網(wǎng)頁,此項無實際意義
AddLanguage da .dk
…………
AddLanguage hr .hr
//當啟用內(nèi)容協(xié)商時,設置語言的先后順序
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw
// Prefer:當有多種語言可以匹配時,使用 LanguagePriority 列表的第 1 項
// Fallback:當沒有語言可以匹配時,使用 LanguagePriority 列表的第 1 項
ForceLanguagePriority Prefer Fallback
//設置默認字符集
AddDefaultCharset ISO-8859-1
//設置各種字符集
AddCharset ISO-8859-1 .iso8859-1 .latin1
……………………
AddCharset shift_jis .sjis
//添加新的 MIME 類型(避免用戶編輯/etc/mime.types)
AddType application/x-tar .tgz
//設置 Apache 對某些擴展名的處理方式
AddHandler imap-file map
AddHandler type-map var
//使用過濾器執(zhí)行 SSI
AddOutputFilter INCLUDES .shtml
//設置錯誤頁面目錄的別名
Alias /error/ "/var/www/error/"
//設置/var/www/error 目錄的訪問權(quán)限
<IfModule mod_negotiation.c>
<IfModule mod_include.c>
<Directory "/var/www/error">
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en es de fr
ForceLanguagePriority Prefer Fallback
</Directory>
//設置錯誤輸出頁面
ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
………………
ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
</IfModule>
</IfModule>
//設置瀏覽器匹配
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Microsoft Data Access Internet Publishing Provider"
redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
#
重點
下面將 Red Hat 9 的 Apache 的默認重要配置信息匯總?cè)缦拢?br> 配置文件:/etc/httpd/conf/httpd.conf
服務器的根目錄: /etc/httpd
根文檔目錄: /var/www/html
訪問日志文件:/var/log/httpd/access_log
錯誤日志文件:/var/log/httpd/error_log
運行 Apache 的用戶:apache
運行 Apache 的組: apache
端口:80
模塊存放路徑:/usr/lib/httpd/modules
prefork MPM 運行方式的參數(shù):
StartServers 8
MinSpareServers 5
MaxSpareServers 20
MaxClients 150
MaxRequestsPerChild 1000
操作步驟 4 配置 Apache
默認配置為用戶提供了一個良好的模板?;镜呐渲脦缀醪恍枰M行修改。但用戶應
該考慮修改或添加如下的基本配置指令。
1.KeepAlive
將 KeepAlive 的值設為 On,以便提高訪問性能。
2.MaxClients
根據(jù)服務容量修改此值。
3.ServerAdmin
將 ServerAdmin 的值設為 Apache 服務器管理員的 E-mail 地址。
4.ServerName
首先刪除 ServerName 前的注釋符號“#” ,然后設置服務器的 FQDN。
5.DirectoryIndex
在此指令后添加其他的默認主頁文件名,例如可以添加 index.htm 等。
6.IndexOptions
可以在此指令后添加 FoldersFirst 表示讓目錄列在前面(類似于資源管理器) 。
分割配置任務
1.使用 Include 指令
可以使用 Include 指令將主配置文件進行分割。例如可以將所有與虛擬主機配置相關的
配置單獨存成一個配置文件,然后在主配置文件中將其包含進來。
在 Red Hat Linux 9 的默認配置中,就包含了一個 Include 指令 Include conf.d/*.conf,用
于將/etc/httpd/conf.d 目錄下的所有以 conf 結(jié)尾的配置文件包含進來。
2.使用.htaccess 文件
可以使用.htaccess 文件改變主配置文件中的配置,但是它只能設置對目錄的訪問控制,
這個目錄就是.htaccess 文件存放的目錄。與使用 Include 指令不同,.htaccess 文件中的配置
可以覆蓋主配置文件中的配置,而使用 Include 指令只是將子配置文件簡單的包含進主配置
文件之中。
(1)何時使用.htaccess 文件。有如下兩種情況需要使用.htaccess 文件:
Ø 在多個用戶之間分割配置。
Ø 想在不重新啟動服務器的情況下改變服務器配置。
在可能的情況下盡量避免使用.htaccess 文件,因為使用.htaccess 文件會降低
服務器的運行性能。
提示
(2)要使用.htaccess 文件必須經(jīng)過兩個配置步驟:
Ø 首先在主配置文件中啟用并控制對.htaccess 文件的使用。
Ø 然后在需要覆蓋主配置文件的目錄下生成.htaccess 文件。
3.啟用并控制使用.htaccess 文件
(1)設置文件名稱。必須保證在主配置文件中包含如下的配置語句:
AccessFileName .htaccess
<Files ~ "^\.htaccess">
Order allow,deny
Deny from all
</Files>
(2)控制在.htaccess 文件中可以使用的指令組。要控制在.htaccess 文件中可以使用的
指令組,需要在主配置文件中使用 AllowOverride 指令。
以下列出了可以在 AllowOverride表
指令所使用的指令組。
AllowOverride 指令所使用的指令組
指令組 可 用 指 令 說 明
AuthConfig AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, 進行認證、授權(quán)以及安全的相
AuthName, AuthType, AuthUserFile, Require 關指令
FileInfo DefaultType, ErrorDocument, ForceType, 控制文件處理方式的相關指令
LanguagePriority,SetHandler, SetInputFilter,
SetOutputFilter
Indexes AddDescription, AddIcon, AddIconByEncoding, 控制目錄列表方式的相關指令
AddIconByType, DefaultIcon, DirectoryIndex,
FancyIndexing, HeaderName,IndexIgnore,
IndexOptions, ReadmeName
Limit Allow,Deny,Order 進行目錄訪問控制的相關指令
Options Options, XBitHack 啟用不能在主配置文件中使用的各種選項
All 全部指令組 可以使用以上所有指令
None 禁止使用所有 禁止處理.htaccess 文件
4.生成.htaccess 文件
當在主配置文件中配置了對.htaccess 文件的啟用和控制之后,接下來就可以在需要覆
蓋主配置文件的目錄下生成.htaccess 文件。.htaccess 文件中可以使用的配置指令取決于主
配置文件中 AllowOverride 指令的設置。
下面舉一個簡單的例子說明.htaccess 文件的使用。
//首先在文檔根目錄下生成一個 private 目錄,并創(chuàng)建測試文件
# cd /var/www/html
# mkdir private
# cd private
# touch test
//修改配置前,在客戶瀏覽器查看結(jié)果,可以見到進入了列表模式目錄
//修改主配置文件
# vi /etc/httpd/conf/httpd.conf
//添加如下配置語句
<Directory "/var/www/html/private">
AllowOverride Options
</Directory>
#
//重新啟動 httpd
# service httpd restart
//在/var/www/html/private 目錄下生成.htaccess 文件
# vi /var/www/html/private/.htaccess
//添加如下配置語句
Options –Indexes
#
//在客戶瀏覽器中查看結(jié)果, 可以看到是不允許訪問的頁面出現(xiàn)
//通過查看配置結(jié)果,可以證明.htaccess 已經(jīng)生效。即對 private 目錄
//的訪問不生成文件列表
注意
在上面的例子中,是先重新啟動了 Apache 服務器,然后才生成.htaccess 文
件。也就是說,對.htaccess 文件的修改不用重新啟動服務器即可生效。
配置每個用戶的 Web 站點
1.配置步驟
配置每個用戶的 Web 站點的意圖是使在安裝了 Apache 的本地計算機上,擁有用戶賬
號的每個用戶都能夠架設自己單獨的 Web 站點。
要配置每個用戶的 Web 站點,要經(jīng)過下面的配置步驟:
Ø 修改主配置文件啟用每個用戶的 Web 站點配置。
Ø 修改主配置文件為每個用戶的 Web 站點目錄配置訪問控制。
下面舉例說明配置步驟。
//修改主配置文件
# vi /etc/httpd/conf/httpd.conf
//修改如下部分的配置
<IfModule mod_userdir.c>
//基于安全考慮,禁止 root 用戶使用自己的個人站點
UserDir disable root
//配置對每個用戶 Web 站點目錄的設置
UserDir public_html
</IfModule>
//設置每個用戶 Web 站點目錄的訪問權(quán)限,將下面配置行前的“#”去掉
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
//重新啟動 httpd
# service httpd restart
下面說明每個用戶要創(chuàng)建自己的 Web 站點,需要執(zhí)行的步驟。以 osmond 用戶為例,
想要創(chuàng)建自己的 Web 站點的每個用戶都要執(zhí)行下面的步驟。
//查看當前用戶
$ whoami
osmond
//回到自家目錄的根
$ cd
//創(chuàng)建目錄 public_html
$ mkdir public_html
//修改 osmond 目錄的權(quán)限
$ cd ..
$ chmod 711 osmond
//創(chuàng)建 index.html
$ cd ~/public_html/
$ vi index.html
//顯示 index.html 的內(nèi)容
$ cat index.html
Osmond‘s Web Site.
//使用客戶瀏覽器訪問自己的主頁,是否已經(jīng)看到你的網(wǎng)頁啦。哈哈。。
提示
(1)上例中直接用 vi 編輯了一個 index.html 文件用于測試。實際應該使用
ftp 或 DAV 方式上傳文件。
(2)使用瀏覽器訪問自己的主頁時,使用下面格式的 URL:
http://IP 地址或 FQDN/~用戶名
若主機的 IP 地址為 192.168.1.100,用戶名為 osmond,URL 為
http://192.168.1.100/~osmond。
1.訪問控制的配置指令
Apache 使用下面的 3 個指令配置訪問控制:
Ø Order:用于指定執(zhí)行允許訪問規(guī)則和執(zhí)行拒絕訪問規(guī)則的先后順序。
Ø Deny:定義拒絕訪問列表。
Ø Allow:定義允許訪問列表。
(1)Order。Order 指令有兩種形式:
Ø Order Allow,Deny:在執(zhí)行拒絕訪問規(guī)則之前先執(zhí)行允許訪問規(guī)則,默認情況下將
會拒絕所有沒有明確被允許的客戶。
Ø Order Deny,Allow:在執(zhí)行允許訪問規(guī)則之前先執(zhí)行拒絕訪問規(guī)則,默認情況下將
會允許所有沒有明確被拒絕的客戶。
注意 在書寫 Allow,Deny 和 Deny,Allow 時,中間不能添加空格字符。
(2)Deny 和 Allow。Deny 和 Allow 指令的后面需要跟訪問列表,訪問列表可以使用
如下的幾種形式:
Ø All:表示所有客戶。
Ø 域名:表示域內(nèi)的所有客戶,如 jamond.net。
Ø IP 地址:可以指定完整的 IP 地址或部分 IP 地址。
Ø 網(wǎng)絡/子網(wǎng)掩碼:如 192.168.1.0/255.255.255.255.0 。
Ø CIDR 規(guī)范:如 192.168.1.0/24。
2.訪問控制配置舉例
下面將以查看服務器配置信息為例講解訪問控制的使用。
//修改主配置文件
# vi /etc/httpd/conf/httpd.conf
//將下面配置行前的“#”去掉
<Location /server-info>
//由 mod_info 模塊生成服務器配置信息
SetHandler server-info
//先執(zhí)行 deny 規(guī)則再執(zhí)行 allow 規(guī)則
Order deny,allow
//拒絕所有的客戶,只允許來自 192.168.1.77 的訪問
Deny from all
Allow from 192.168.1.77
</Location>
#
//重新啟動 httpd
# service httpd restart
//下面在客戶瀏覽器上進行測試
//在 IP 地址為 192.168.1.77 的主機上的結(jié)果可以看到一大堆的SERVER-INFO.]
//在其他主機上的結(jié)果就是不允許訪問。
提示 雖然上例中的訪問控制是在 Location 容器中設置的,但這種方法也
適用于其他容器,如 Directory 容器和 Files 容器。
3 論證和授權(quán)
1.認證
(1)兩種認證類型。
在 RFC 2617 中定義了兩種認證方式,分別為:
Ø 基本(Basic)認證
Ø 摘要(Digest)認證
摘要認證比基本認證更加安全,但遺憾的是目前并非所有的瀏覽器都支持摘要認證,
所以大多數(shù)情況下用戶只使用基本認證。本節(jié)主要介紹基本認證。
(2)認證的配置指令。
所有的認證配置指令既可以出現(xiàn)在主配置文件的 Directory 容
器中,也可以出現(xiàn)在./htaccess 文件中。以下列出了可用的認證配置指令。
指 令 指 令 語 法 說 明
AuthName AuthName 領域名稱 定義受保護領域的名稱
AuthType AuthType Basic 或 Digest 定義使用的認證方式
AuthGroupFile AuthGroupFile 文件名 指定認證口令文件的位置
AuthUserFile AuthUserFile 文件名 指定認證組文件的位置
2.授權(quán)
當使用認證指令配置了認證之后,還需要為指定的用戶或組進行授權(quán)。為用戶或組進
行授權(quán)的指令是 Require。Require 指令的三種使用格式如下
指令語法格式 說 明
Require user 用戶名 [用戶名] …… 授權(quán)給指定的一個或多個用戶
Require group 組名 [組名] …… 授權(quán)給指定的一個或多個組
Require valid-user 授權(quán)給認證口令文件中的所有用戶
3.管理認證口令文件和認證組文件
本節(jié)講述基于文本文件的認證口令文件和認證組文件,關于基于數(shù)據(jù)庫的認證口令文
件和認證組文件的相關內(nèi)容請參考 Apache 手冊。
(1)管理認證口令文件
1)創(chuàng)建新的認證口令文件
可以使用如下命令,在添加一個認證用戶的同時創(chuàng)建認證口令文件:
# htpasswd –c 認證口令文件名 用戶名
2)修改認證口令文件
可以使用如下命令,向現(xiàn)存的口令文件中添加用戶或修改已存在的用戶的口令:
# htpasswd 認證口令文件名 用戶名
3)認證口令文件的格式
與系統(tǒng)中的/etc/shadow 文件類似,認證口令文件中每一行包含一個用戶的用戶名和加
密的口令:
用戶名:加密的口令
注意 (1)基于安全因素的考慮,認證口令文件和下面講述的認證組文件不應該
與 Web 文檔存在于相同的目錄下, 建議存放在/var/www/目錄或其子目錄下,
也可以存放在配置目錄/etc/httpd/目錄或其子目錄下。
(2)htpasswd 沒有提供刪除用戶的選項,要想刪除用戶,可以直接使用文
本編輯器對認證口令文件進行編輯,刪除指定用戶的行即可。
(2)管理認證組文件。Apache 沒有提供創(chuàng)建認證組文件的命令,它只是一個文本文
件,用戶可以使用任何的文本編輯器創(chuàng)建并修改此文件。該文件中每一行的格式如下:
組名:用戶名 用戶名 ……
注意 在認證組文件中指定的用戶名,必須先添加到認證口令文件中。
4、論證和授權(quán)配置舉例
1.在主配置文件中配置認證和授權(quán)
下面舉例說明具體的配置步驟。
//修改主配置文件
# vi /etc/httpd/conf/httpd.conf
//添加如下的配置行
<Directory "/var/www/html/private">
//不使用.htaccess 文件
AllowOverride None
//指定使用基本認證方式
AuthType Basic
//指定認證領域名稱
AuthName "jamond"
//指定認證口令文件的存放位置
AuthUserFile /var/www/passwd/jamond
//授權(quán)給認證口令文件中的所有用戶
require valid-user
</Directory>
#
//創(chuàng)建認證口令文件,并添加兩個用戶
# mkdir /var/www/passwd
# cd /var/www/passwd
# htpasswd -c jamond osmond
New password:
Re-type new password:
Adding password for user osmond
# htpasswd jamond jason
New password:
Re-type new password:
Adding password for user jason
#
//將認證口令文件的屬主改為 apache
# chown apache.apache jamond
#
//重新啟動 httpd
# service httpd restart
#
//在客戶端使用瀏覽器檢測配置,結(jié)果彈出一個要你輸入用戶名和密碼的對話框,當核對正確后就會
看到一個列表式的網(wǎng)頁。。。
注意 由于 Apache 的子進程以 apache 用戶運行,所以認證口令文件和認證組文件
的屬主應該設為 apache。只有這樣才能讓 apache 子進程在認證過程中讀取
這兩個文件的內(nèi)容。
2.在.htaccess 文件中配置認證和授權(quán)
下面舉例說明具體的配置步驟。
//修改主配置文件
# vi /etc/httpd/conf/httpd.conf
//將/var/www/html/private 目錄的訪問權(quán)限設為
<Directory "/var/www/html/private">
//允許在.htaccess 文件中使用認證和授權(quán)指令
AllowOverride AuthConfig
</Directory>
#
//重新啟動 httpd
# service httpd restart
//繼續(xù)使用以上操作步驟生成的認證口令文件
//接下來,在/var/www/html/private 目錄下生成.htaccess 文件
# vi .htaccess
//添加如下內(nèi)容
AuthType Basic
AuthName "jamond"
AuthUserFile /var/www/passwd/jamond
//授權(quán)給用戶 osmond 和 jason
require user osmond Jason
#
//在客戶端使用瀏覽器檢測配置,結(jié)果與上面說的一樣
通過以上例子可知使用兩種方法都可以使指定的用戶訪問授權(quán)區(qū),它們具有
相同的效果。具體使用哪種方法將由管理員做出權(quán)衡。
5、訪問控制、認證和授權(quán)的綜合應用
1.對訪問控制和認證授權(quán)進行控制
在對一個容器(Directory 或 Files 或 Location)同時配置了訪問控制和認證授權(quán)之后,
這兩類指令是否都會起作用,將由一個指令進行控制,這個指令是 Satisfy。Satisfy 指令
只有在對一個容器同時設置了訪問控制和認證授權(quán)后才起作用。Satisfy 指令有兩種可能的
取值:
Ø Satisfy all:訪問控制和認證授權(quán)兩類指令均起作用(默認值) 。
Ø Satisfy any:只要一類指令滿足條件即可以訪問。
下面舉例說明 Satisfy 指令的使用。
2.配置指定的用戶在指定的網(wǎng)段上訪問資源
下面將以查看服務器運行狀態(tài)信息為例說明 Satisfy all 的使用。
//修改主配置文件
# vi /etc/httpd/conf/httpd.conf
//添加如下的配置行
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
//允許 192.168.1 網(wǎng)段內(nèi)主機的訪問
Allow from 192.168.1
//配置認證授權(quán)
AuthType Basic
AuthName "Admin"
AuthUserFile /var/www/passwd/jamond
AuthGroupFile /var/www/passwd/admingrp
require group admin
Satisfy all
</Location>
#
//創(chuàng)建認證組文件并更改屬主
# vi /var/www/passwd/admingrp
//添加下面的行
admin: osmond jason
# chown apache.apache /var/www/passwd/admingrp
#
//重新啟動 httpd
# service httpd restart
#
//在客戶端使用瀏覽器檢測配置, 192.168.1 網(wǎng)段上的主機的訪問結(jié)果輸入用戶名和密碼就可以訪問
//當通過用戶認證之后即可看到服務器運行狀態(tài)信息
//而非 192.168.1 網(wǎng)段的主機以及沒有 Admin 組身份的人都不能訪問
3.允許網(wǎng)段內(nèi)用戶無條件訪問而其他用戶授權(quán)訪問
只要將操作步驟 7.10 中的 Satisfy all 改為 Satisfy any 就可以實現(xiàn) 192.168.1 網(wǎng)段內(nèi)的用
戶無需認證即可訪問,而在外網(wǎng)上可以允許 admin 組內(nèi)的用戶經(jīng)過認證后訪問。
6、WebDAV
1.WebDAV 簡介
DAV 是分布式授權(quán)和版本控制的縮寫,而 WebDAV 是基于 Web 的分布式授權(quán)和版本
控制。傳統(tǒng)情況下,用戶使用 FTP 或 NFS 對站點內(nèi)容進行上傳或更新。但是有許多人士認
為 FTP 和 NFS 是不安全的協(xié)議,盡量不要在運行 Web 服務器的計算機上運行 FTP 和 NFS
服務器。然而不運行這兩種服務器,用戶就無法對自己的站點內(nèi)容進行維護,WebDAV 提
供了一種新的基于 HTTP 協(xié)議的解決方案。WebDAV 的官方網(wǎng)站是
http://www.webdav.org。
當對 Apache 配置了對 WebDAV 支持以后,用戶就可以在支持 WebDAV 的客戶端上對
站點內(nèi)容進行上傳和維護。
2.限制應用認證授權(quán)的時機
在介紹下面的內(nèi)容之前有必要先了解一下 HTTP 的請求方法。當 HTTP 客戶端與服務
器建立連接后就要發(fā)送請求,請求可以分為 3 部分:方法、 請求資源和 HTTP 版本號。 HTTP
請求方法通常是 GET、POST 和 HEAD,但 HTTP 規(guī)范(RPC 2616)中還定義了許多 HTTP
請求方法。 這些方法包括: GET、 POST、PUT、DELETE、CONNECT、OPTIONS、TRACE、
PATCH、PROPFIND、PROPPATCH、MKCOL、COPY、MOVE、LOCK 和 UNLOCK。
要告知 Apache 為指定 HTTP 的請求方法進行配置,可以使用<Limit>和<LimitExcept>
指令。 例如下面的指令片斷可以允許任何人瀏覽網(wǎng)站,但是只允許一組特殊的用戶應答 CGI
程序。
AuthType Basic
AuthName "Example"
AuthUserFile /var/www/passwd/jamond
AuthGroupFile /var/www/passwd/admingrp
<Limit POST>
require group admin
</Limit>
在對 Apache 配置 WebDAV 時也要使用類似的配置,從而讓任何人都能瀏覽網(wǎng)站,指
定的用戶才能對網(wǎng)站進行上傳和更新。
3.配置 WebDAV
在 Apache 2.0 中默認包含了支持 WebDAV 的模塊 mod_dav。下面講述配置過程。
//修改主配置文件
# vi /etc/httpd/conf/httpd.conf
//將文檔根目錄的訪問控制改為
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
//啟用 WebDAV
Dav On
//配置認證指令
AuthType Basic
AuthName "Admin"
AuthUserFile /var/www/passwd/jamond
AuthGroupFile /var/www/passwd/admingrp
//配置條件授權(quán),即對非瀏覽的 HTTP 請求方法進行認證授權(quán)
<LimitExcept GET OPTIONS>
require group admin
</LimitExcept>
</Directory>
#
//重新啟動 httpd
# service httpd restart
#
//將服務器根文檔目錄的屬主設為 apache
# chown -R apache.apache /var/www/html/
#
注意 必須將 WebDAV 所管理的目錄的屬主設為 apache,以便以 apache 用戶運行
的 Apache 子進程能對目錄內(nèi)容進行更新。
7、組織衙管理站點內(nèi)容的方法
Web 服務器是更新量最大的服務器之一,隨著時間的推移站點內(nèi)容將越來越多。在維
護方面會帶來兩方面的問題:
(1)如何在文檔根目錄空間不足的情況下繼續(xù)添加站點內(nèi)容。
(2)如何在文件移動位置之后使得用戶仍然能夠訪問。
對于第 1 個問題有 3 種解決方法:
Ø 掛裝新的磁盤分區(qū)到文檔目錄(可以是本地磁盤分區(qū)或遠程 NFS 分區(qū))
Ø 在文檔目錄下使用符號鏈接使文檔目錄之外的內(nèi)容被訪問。
Ø 使用別名機制使文檔目錄之外的內(nèi)容被訪問。
對于第 2 個問題的解決方法是使用頁面重定向。
8、符號鏈接和別名
關于掛裝磁盤分區(qū)的方法屬于系統(tǒng)管理的范疇,本書不做過多敘述。下面舉例講解符
號鏈接和別名的使用。
1.符號鏈接
在 Apache 的默認配置中已經(jīng)包含了符號鏈接的指令:
<Directory />
Options FollowSymLinks
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
</Directory>
所以只要在根文檔目錄下使用 ln –s 命令創(chuàng)建符號鏈接即可。
# cd /var/www/html
# ln -s /usr/share/doc doc
//可以使用客戶端瀏覽器進行測試
http://192.168.1.100/doc/ 符號鏈接對站點內(nèi)容進行擴展
2.別名
使用別名是另一種將根文檔目錄以外的內(nèi)容加入站點的方法。在 Apache 的默認配置
中,由于 error 目錄和 manual 目錄都在文檔根目錄 html 之外,所以設置了這兩個目錄的別
名訪問,同時還使用 Directory 容器配置了對別名目錄的訪問權(quán)限。下面再舉一個簡單的使
用別名的例子。
//編輯主配置文件
# vi /etc/httpd/conf/httpd.conf
//添加如下的配置
Alias /ftp /var/ftp/pub
<Directory "/var/ftp/pub">
AllowOverride None
Options Indexes
Order allow,deny
Allow from all
</Directory>
#
//重新啟動 apache 之后可以使用客戶端瀏覽器進行測試