![]() |
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(87):基于用戶的訪問控制 |
![]() |
基于用戶的訪問控制更嚴格、有效的控制方法還是基于用戶和對應的口令對瀏覽客戶進行控制。這使得對這個目錄進行強制性的保護,瀏 覽器用戶必須輸入合法的用戶名和正確的口令才能瀏覽網頁。如果要針對用戶對訪問服務器的客戶進行控制,首先就要設置訪 問控制文件為對用戶進行認証,因此要允許目錄訪問控制文件中具備AuthConfig的設置。 設置用戶認証需要為這個目錄指定AuthName、AuthType和AuthUserFile 指令,AuthUserFile定義一個口令文件,那么此后就可以使用require valid-user命令讓客戶 輸入名字和正確的口令,根據這個口令文件對用戶的身份進行驗証。AuthName定義這個認証的 標識,用于返回給瀏覽器用戶,起到提示作用。AuthType定義使用的認証加密類型,通常使用 Basic,即使用Unix的標准加密算法進行加密。
這個例子里,使用/usr/local/etc/htpasswd作口令文件,使用Basic的加密認証方法 ,并定義AuthName為SecurityAuth。 雖然瀏覽器訪問每個使用這種認証方式保護的網頁都需要先進行認証,然而不會每訪問一次網頁都讓用戶輸入用戶名 和口令,因為瀏覽器會將用戶輸入的用戶和口令數據保存起來,每次需要認証的時候就自動進行認証操作。由于認証是通過H EAD請求來完成的,因此它不會影響瀏覽器顯示的網頁。然而,用戶有可能使用瀏覽器訪問了多個不同的對用戶進行認証的 網頁,那么瀏覽器就會保存了多個不同的用戶和口令對,當自動進行認証的時候,瀏覽器必須區分出應該使用哪個用戶名和口 令進行認証,而區分就是通過AuthName的值進行的,服務器將首先將AuthName的值傳遞給客戶瀏覽器,此后 瀏覽器就能發送正確的用戶和口令進行認証了。 要使用口令文件來認証合法用戶,首先就必須生成這個口令文件。當認証類型為Basic時,口令文件與Unix 的passwd文件非常類似,甚至可以直接使用系統passwd文件來作認証文件,當然由于現代Unix使用了sha dow技朮,/etc/passwd中并沒有保存真實的加密口令,因此直接使用系統passwd文件進行認証只能適合 那些沒有使用shadow技朮的Unix系統。而使用shadow技朮的Unix系統的真實口令文件(FreeBSD 下為master.passwd)被保護起來,讀取它需要root權限,而Web服務器通常以普通用戶的權限運行,不 能直接使用系統口令對用戶進行認証。如果強制使用root權限啟動httpd守護進程來訪問shadow之后的口令, 那么必然會帶來嚴重的安全漏洞。 因此一般使用與系統口令相分離的口令文件來認証Web服務器用戶,這樣即使口令被泄露,并被破譯,造成的安全 影響也很小,不至于影響系統的正常運行。可以使用Apache附帶的htpasswd命令來創建口令文件,并設置用戶 及其口令。
htpasswd的-c選項告訴htpasswd創建一個新口令文件為.htpasswd,如果沒有這個選項 ,htpasswd就將用戶及其口令加入已經存在的口令文件中。此后的參數就是口令文件名和需要增加或改變口令的用戶 名。 為了便于管理,可以進一步將這些用戶分組,組文件的每一行定義了一個組及其成員的名字,然后在.htaccess 中使用AuthGroupFile指定這個目錄使用的組文件的名字,例如:
這條內容創建了一個口令組group1,包括user1,user2,user3,user4成員。 除了可以使用require valid-user要求輸入的用戶必須為口令文件中的合法用戶之外,也可以設 置要求只有特定的合法用戶才能訪問的目錄,這就需要使用require user或require group指令。 例如使用require user user1要求只有user1用戶才能訪問,使用require group g roup1就要求必須是group1組的合法成員才能訪問。針對具體用戶和組的訪問控制就進一步增加了訪問控制的靈活 性。 當基于用戶的認証和基于地址的認証綜合使用時,可以通過使用satify參數指定不同的限制條件,如果設置 satify all,那么必須同時通過用戶和地址認証才能訪問網頁,而設置satify any,只需要通過一個認証 客戶就能訪問這個目錄了。缺省情況下Satify參數的值為all。下面為一個綜合了地址認証和用戶認証的.htaccess 的例子,這個例子允許private.site的計算機可以不需認証訪問這台服務器,而其他位置的用戶必須是 group1組中的合法用戶,或者是user1、user2、user3用戶,才能訪問這台服務器。
Apache使用AuthType指定加密的方式,AuthType設為Basic時為使用命令htpasswd 創建口令文件并進行口令加密。然而這種方式有兩個缺點,一個為瀏覽器將在Internet上使用明文發送用戶名和 口令信息,另一個是htpasswd的口令文件為普通文本文件,這樣當用戶數目較多時,查找用戶的效率就很低。 為了彌補安全性的缺點,可以將AuthType設置為Digest,這樣就會使用Digest鑒別方式進行認 証,此時認証口令文件要使用AuthDigestFile來規定,而口令文件必須使用另一個加密程序htdigest 產生和維護,而hdigest的使用方法和htpasswd相同。在Digest認証方式下,瀏覽器不會直接發送口令 的明文信息,而是在傳輸口令之前先使用MD5算法進行編碼處理。注意,不是所有類型的瀏覽器都支持Digest類型的 鑒別方式的,只有在瀏覽器和服務器同時都支持Digest方式時,這種認証才可行。 AuthType為Basic時,是使用系統加密方法,一般是使用DES算法,但在FreeBSD下有可能是 使用的MD5算法,但除非管理員希望在不同系統間共享口令文件,否則不必考慮他們使用的到底是何種算法。需要與其他系 統兼容時,可以重新安裝DES算法。但在系統使用時重新安裝加密算法,就無法重建整個口令文件,因此不推荐在系統使用 過程中更換認証算法,而應該在系統安裝時就確定使用的認証算法。 為了減少用戶數量較多時服務器的處理開銷,就必須使用數據庫技朮,這是因為數據庫使用了索引技朮,對數據的查 找就比較快速。Unix下最簡單的數據庫為使用系統提供的DB(或DBM)庫進行創建數據庫文件的技朮,Apache 服務器中使用模塊mod_auth_db.so對這種數據庫口令文件提供支持。htpasswd產生的文本文件在有几 百個用戶時就會花費相當大的服務器開銷,而DBM格式的認証方式可以高效的支持上萬個用戶。 BSD風格的Unix系統通常使用DB庫,而其他Unix通常使用DBM庫。因此其他Unix使用的命令和設 置中應該為dbm而非db。 為了支持這種認証方式,應載入mod_auth_db.so模塊,使用Ports Collection安裝 的Apache服務器缺省情況就支持這個模塊而不需要改動。可以讓Apache同時支持多種認証方式,而不會發生沖突 。 此外,配置文件中的認証方式也需要改變,首先要創建數據庫文件,這會在通過使用dbmmanage命令第一次 增加用戶時創建。
這個命令將創建/usr/local/etc/usersdbm數據庫文件,并使用pass123為口令在數 據庫中增加用戶user1。然后就可以針對現有的數據庫文件,增加、刪除和查看用戶信息了:
在擁有了數據庫文件和用戶數據之后,就可以使用這種認証方式了:
可以使用dbmmanage命令也可以用來管理組,例如將user1加入group1組,但必須添加用戶的同 時進行設置,需要使用dhmmanage的另一個參數: # dbmmanage /usr/local/etc/users adduser user1 pass123 group1 這樣就能使用AuthDBGroupFile和require group1進行認証管理。 除了使用DBM之外,Apache還可以配置成與匿名ftp認証方式類似的方式,或者使用mSql、Oracle 等SQL數據庫進行認証,或者使用Kerboros、LDAP服務器進行認証,這些認証方式更為強大,能使Web 認証與其他網絡服務的認証方式相統一。但是這些額外的認証方式必須使用相應的認証模塊進行支持。 未完,待續。。。 |
||||||||||
| 新浪首頁 > 科技時代 > FreeBSD使用大全連載 > FreeBSD連載(87):基于用戶的訪問控制 | |||||||||||
Copyright(C) 1999 SINA.com, Stone Rich Sight. All Rights Reserved
版權所有 四通利方 新浪網