萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> 保護Linux下的Apache網站

保護Linux下的Apache網站

class="22958"> ;;;Linux的廣泛應用和快速發展得益於互聯網的飛速發展。對於Internet上應用廣泛的Web服務來說,Linux表現出色。很難說清目前Internet上究竟有多少個網站在使用Linux系統,但眾多網站中采用Apache服務器的無疑占據了極大的市場份額。

如何為網站提供保護,防止非法用戶登入呢?通常可以采用身份認證方式。身份認證是防止非法用戶使用資源的有效手段,也是管理注冊用戶的有效方法。現在很多網站都使用身份認證來管理用戶資源,對用戶的訪問權限進行嚴格地限制。傳統的身份認證方法是通過檢驗用戶的注冊名、口令,來決定是否允許用戶使用資源,但這種認證方法在某些情況下作用並不十分有效。特別是在Linux平台下的Apache服務器,完全可以用Linux的方法來實現密碼驗證和保護。

Linux下最常見的密碼保護方法是利用.htaccess文件,即目錄配置實現密碼保護,這也是.htaccess文件的功能之一。這種方法可以使沒有授權的浏覽者不能進入.htaccess文件所設置的限制區域。一般地,使用JavaScript技術進行設置的密碼太簡單,很容易就被破解,造成了不安全。而使用.htaccess文件保護目錄比使用其它程序(Java/HTML/ASP/CGI)更為有效和安全。更重要的是,使用.htaccess的方式進行設置,不需要編寫程序就可以實現,具體操作比較容易。

下面就來介紹和演示Linux+Apache下密碼保護的方法,全面實現網站保護。

什麼是.htaccess文件

.htaccess文件是Apache服務器上的一個設置文件。它是一個文本文件,可以使用任何文本編輯器進行編寫。.htaccess文件提供了針對目錄改變配置的方法,即通過在一個特定的文檔目錄中放置一個包含一個或多個指令的文件(.htaccess文件),以作用於此目錄及其所有子目錄。.htaccess的功能包括設置網頁密碼、設置發生錯誤時出現的文件、改變首頁的文件名(如index.html)、禁止讀取文件名、重新導向文件、加上MIME類別、禁止列目錄下的文件等。

在需要針對目錄改變服務器的配置,而對服務器系統沒有root權限時,應該使用.htaccess文件。如果服務器管理員不願意頻繁修改配置, 則可以允許用戶通過.htaccess文件自己修改配置,尤其是ISP在一台機器上提供多個用戶站點,而又希望用戶可以自己改變配置的情況下,一般會開放部分.htaccess的功能給使用者自行設置。

注意,.htaccess是一個完整的文件名,不是***.htaccess或其它格式(當然也有管理員把其設置成其它名字,但一般都是使用.htaccess)。另外,上傳.htaccess文件時,必須使用ASCⅡ模式,並使用chmod命令改變權限為:644(RW_R__R__)。每一個放置.htaccess的目錄和其子目錄都會被.htaccess影響。例如,在/abc/目錄下放置了一個.htaccess文件,那麼/abc/和/abc/def/內所有的文件都會被它影響,但/index.html不會被它影響,這一點是很重要的。

實現密碼保護

1.建立.htpasswd文件
首先在要設置存取控制的目錄(如htdocs)下建立一個文件,文件名可以自行設定,一般服務器都會設置為.htpasswd,該文件是不能由HTTP讀取的。.htpasswd文件中的每一行代表一個使用者,使用者的名字及經過加密的密碼以冒號:分隔。

2..htaccess文件實現保護
.htaccess文件的內容如下:

authtype basic
authuserfile /usr/home/***/htdocs/.abcname1
authgroupfile /usr/home/***/htdocs/.abcname2
authname information
<limit get post>
require valid-user
</limit>


其中第二行和第三行中的***可以改為個人的FTP登錄名。.abcname1和.abcname2可以是任意的文件名,如.htpasswd、.htpass,但不能是.htaccess。將.htaccess上傳到要進行密碼保護的目錄(如htdocs)中。

.htaccess文件最後的“require”告訴服務器哪些用戶可以進入。require valid-user是指只要是.htpasswd中的任何一個都可以進入。也可以指定名單上的某人或某幾人可以通過,使用require user username或require user username1 username2 username3。還可以指定某組人可以通過,使用require group groupname。

3.增加新的許可用戶
進入htdocs目錄,在命令行狀態輸入以下命令生成.abcname1文件。

echo > .abcname1
/var/www/bin/htpasswd .abcname1 abc


abc表示要增加的用戶名。輸入此命令後,系統會提示輸入此用戶密碼,這樣該用戶名就生效了。以後如要再增加用戶,運行第二行的命令時換一個用戶名即可。如果這個用戶名存在,則會提示修改密碼。

4.建立允許訪問的組
組的設置方法是建立一個名為.htgroup的文本文件,內容如下:

groupname1: username1 username2 username3
groupname2: username1 username3 username4


並在.htaccess中加上“AuthGroupFile /absolute/path/.htgroup”。以ASCⅡ模式上傳所有文件後,該目錄中的所有文件都會被保護起來。

設置錯誤文件

如果希望在找不到文件時不出現“找不到網頁”的頁面提示,而是打開另一個HTML文件,方法也很簡單。首先編寫一個新的頁面,然後用文本編輯器打開.htaccess,在文件最後加上:ErrorDocument 404 404.html。這裡,404.html是錯誤文件的名字,即所顯示的頁面;404是錯誤代碼。一般常見的錯誤代碼和所代表的錯誤原因如下:

401 Authorization failed 授權失敗,即密碼錯誤。
403 Access denied 存取錯誤,即不可以讀取該文件。
404 File not found 找不到文件。
500 Internal Server Error
服務器內部錯誤,可能是Web服務器本身存在問題,也可能是編寫的程序出錯。


禁止讀取文件

如果將某些內容如密碼,存放在一個文件中,那麼別人只需知道該文件的對應位置,就可以一目了然,這樣太不安全。其實完全可以不改變其它設置,也不用將文件移到其它地方就可解決這個問題,只需在.htaccess文件中加入以下幾行:

<Files filename.ext>
order allow,deny
deny from all
</Files>


如果系統安裝的是Apache 1.3以後的版本,更可以支持regular expression的filesmatch。

<filesmatch ".tmp">
order allow,deny
deny from all
</filesmatch>


files和filesmatch表示只對符合要求的部分文件生效。“order deny,allow”表示先找出禁止(deny)的,然後去找許可的(allow)。如果將它們的順序顛倒“order allow,deny”則表示先找出許可的,後才去找禁止的。“deny from all”則表示全部IP地址都不許可。相對地,“allow from all”表示全部都允許。可以這樣設置:

order allow,deny
allow from all
deny from 111.222


deny from 111.222是指禁止所有以111.222開始的IP地址(如111.222.0.1)。除了設置IP地址外,也可以設置成hostname(如:***.com)。“Files”和“Filesmatch”的用途很多,不但可以設置deny,也可以設置個別文件的密碼,如:

<files 123>
require user 123
</files>
<files abc>
require user abc
</files>


使用.htaccess文件也會存在一些問題,比如性能。如果使用.htaccess文件,則Apache需要在每個目錄中查找該文件,還必須在所有更高級的目錄中查找它,另外,每次請求一個頁面時,也都需要讀取.htaccess文件。因此,允許使用.htaccess文件都會導致性能的下降。

例如,對/usr/hq/htdocs中頁面的請求,Apache必須查找以下文件:

/.htaccess
/usr/.htaccess
/usr/hq/.htaccess
/usr/hq/htdocs/.htaccess


總的來說,通過.htaccess來保護網站更為方便和安全。因為它不像利用程序實現密碼保護時,有可能通過猜測的方法獲取密碼。利用.htaccess文件實現密碼保護,一般是很難破解的。鑒於.htaccess方式的優缺點,讀者可以根據具體的情況選擇適合的方法來保證網站的安全。(T111)
copyright © 萬盛學電腦網 all rights reserved