QSECOFR 回復于:2004-04-27 19:40:40 |
Apache用戶認證方法匯總
http://www.chinaunix.net 作者:南非蜘蛛 發表于:2003-01-16 13:34:28 http://sinbad.dhs.org 作者:吳阿亭 一.基本的Apache用戶認證方法: 若對某一目錄下的文件如/home/ftp/pub需要做到用戶認證,則在httpd.conf 中加入下面的行 <> options indexes followsymlinks allowoverride authconfig order allow,deny allow from all <> 用在目錄/home/ftp/pub下放文件.htaclearcase/" target="_blank" >ccess,內容如下: authname "shared files" authtype basic authuserfile /etc/.passwd require valid-user 用隨Apache來的程序htpasswd 生成文件/etc/.passwd,每行一個用戶名:密碼 只要能提供正確的用戶名和密碼對,就允許登錄訪問,這是針對任何地址來的 請求都要求提供用戶名和密碼認證?!?nbsp; 二.針對部分網段或地址要求認證?!?nbsp; 若公司LAN所在網段為192.168.0.0/24,且有一防火墻專線接入Internet, 內部網卡的地址為192.168.0.1/32,則現在希望所有通過撥本地163通過 防火墻上的apache反向代理向LAN上的另一WWW服務器訪問時需要認證,而本地 LAN上的用戶不需認證??梢栽趆ttpd.conf中放入: 〈Directory /home/ftp/pub> Options Indexes FollowSymLinks AllowOverride AuthConfig order deny,allow deny from 192.168.0.1 〈/Directory> 且在/home/ftp/pub/.htaccess中放入: AuthName "shared files" AuthType Basic AuthUserFile /etc/.passwd require valid-user satisfy any 三.對同一目錄及其下的子目錄有不同的權限,僅某些人可以存取一目錄下的 子目錄?!?nbsp; 如有一目錄/home/ftp/pub/sales,有三個用戶user1,user2,user3都需要用戶名 和密碼進入/home/ftp/pub,但僅user1,user2能進入/home/ftp/pub/sales.則 放下面的行到httpd.conf 〈Directory /home/ftp/pub> Options Indexes AllowOverride AuthConfig order allow,deny allow from all 〈/Directory> 〈Directory /home/ftp/pub/sales> Options Indexes AllowOverride AuthConfig order allow,deny allow from all 〈/Directory> 且看/home/ftp/pub/.htaccess為: AuthName "shared files" AuthType Basic AuthUserFile /etc/.passwd require valid-user 且看/home/ftp/pub/sales/.htaccess AuthName "shared files" AuthType Basic AuthUserFile /etc/.passwd AuthGroupFile /etc/.salesgroup require group manager 且文件/etc/.passwd內容為: user1:passwd1 user2:passwd2 user3:passwd3 且文件/etc/.salesgroup內容為: manager: user1 user2 |
wuerhe 回復于:2004-04-28 16:51:05 |
為什么照樓上做不行呢,提示如下:
但頁面是真實存在的。 Object not found! The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again. If you think this is a server error, please contact the webmaster. Error 404 xxx.xxx.xxx.xx Wed Apr 28 16:48:11 2004 Apache/2.0.46 (Unix) DAV/2 PHP/4.3.4 |
wuerhe 回復于:2004-04-28 16:54:40 |
是不是apache2 有些特殊的地方呢? |
icekernel 回復于:2004-04-28 21:33:17 |
啟用認證
先介紹用密碼來保護服務器上的目錄。 首先需要建立一個密碼文件。這個文件應該放在不能被網絡訪問的位置,以避免被下載, 例如,如果,/usr/local/apache/htdocs以外的空間不能被網絡訪問, 那么可以考慮把密碼文件放在/usr/local/apache/passwd目錄中。 Apache在其安裝目錄的bin子目錄中提供了叫htpasswd的工具,以建立密碼文件,可以這樣使用: htpasswd -c /usr/local/apache/passwd/passwords rbowen htpasswd會要你輸入密碼,并要求重新輸入以確認: # htpasswd -c /usr/local/apache/passwd/passwords rbowen New password: mypassword Re-type new password: mypassword Adding password for user rbowen 如果htpasswd不在搜索路徑中,則必須使用完整路徑, 如,/usr/local/apache/bin/htpasswd 然后,需要修改httpd.conf或.htaccess文件, 以指示服務器允許哪些用戶訪問并向用戶索取密碼。 例如,要保護 /usr/local/apache/htdocs/secret 目錄, 則可以將下列指令寫入 /usr/local/apache/htdocs/secret/.htaccess, 或者httpd.conf的 <Directory /usr/local/apache/apache/htdocs/secret> 段。 AuthType Basic AuthName "Restricted Files" AuthUserFile /usr/local/apache/passwd/passwords Require user rbowen 其中,AuthType指令選擇了對用戶實施認證的方法, 最常用的是由mod_auth提供的Basic。 很重要的必須認識到的一點是,Basic認證方法并不加密來自用戶瀏覽器的密碼, 因此,不應該用于高度敏感的數據。Apache在最近的版本中還有另一種更安全的認證方法, 即由mod_auth_digest提供的AuthType Digest。 AuthName指令設置了使用認證的領域, 它起兩個作用,首先,此領域說明會出現在顯示給用戶的密碼提問對話框中, 其次,也幫助客戶端程序確定應該輸入哪個密碼。 所以,如果一個用戶已經在"Restricted Files"領域通過了認證, 則客戶端就可以嘗試使用"Restricted Files"的密碼來訪問同一個服務器的其他任何領域, 從而使多個受限領域共享密碼,以避免用戶重復輸入。 當然,考慮到安全,如果服務器變了,客戶端始終會要求重新輸入密碼。 AuthUserFile指令設置了密碼文件, 也就是剛才我們已經用htpasswd建立的。 如果用戶很多則認證速度會很慢,因為對每個請求都必須搜索這個純文本文件, 對此,Apache還支持把用戶信息存入快速數據庫, mod_auth_dbm模塊提供了指令AuthDBMUserFile, 并可以用dbmmanage程序建立和操作這些數據庫。 Apache模塊數據庫中還提供了其他許多認證選項。 最后,Require指令設置了允許訪問的用戶, 下一節將對Require指令作詳細說明。 允許多人訪問 上述指令只允許一個人(一個叫rbowen的用戶)訪問這個目錄, 但是多數情況下,都需要允許多人訪問,所以就要用到AuthGroupFile。 首先,需要建立一個組文件以確定組中的用戶。 其格式很簡單,可以用你喜歡的編輯器建立,例如: GroupName: rbowen dpitts sungo rshersey 它只是每組一行的一個用空格分隔的組成員列表。 向已有的密碼文件中增加一個用戶,可以輸入: htpasswd /usr/local/apache/passwd/password dpitts 程序的提示和上面的一樣,但是,它會附加到已有的文件中, 而不是建一個新的(參數-c可以強制建立新的密碼文件)。 現在,需要修改.htaccess文件如這樣: AuthType Basic AuthName "By Invitation Only" AuthUserFile /usr/local/apache/passwd/passwords AuthGroupFile /usr/local/apache/passwd/groups Require group GroupName 如此,GroupName組中的成員都在密碼文件中有一個相應的記錄, 從而允許他們輸入正確的密碼以進入。 除了建立組文件,還有另一種途徑允許多人訪問,即使用如下指令: Require valid-user 使用上述指令,而不是require user rbowen, 可以允許密碼文件中的所有用戶以正確的密碼進行訪問。 這里甚至允許列舉各個組,而為每個組建立密碼文件, 其優點是,Apache只需要校驗一個文件,而缺點是,必須維護眾多密碼文件, 而且要確保AuthUserFile指令指定了一個正確的密碼文件。 可能的問題 由于采用了Basic認證的方法, 每次向服務器請求甚至刷新一個受保護的頁面或圖片時都必須校驗用戶名和密碼, 為此,必須打開密碼文件并逐行搜索用戶名,因此,服務器響應速度會受一些影響, 其程度與密碼文件大小成正比。 所以,對密碼文件中的用戶總數存在一個實際上的上限, 此上限取決于特定的服務器機器的性能,但是一般有幾百個用戶就會對響應速度有明顯的影響, 在這種情況下,可以考慮用其他認證方法。 其他認證方法 基于用戶名和密碼的認證只是方法之一,時常會有不需要知道來訪者是誰, 只需要知道來自哪里的情況。 Allow和Deny指令可以允許或拒絕來自特定主機名或主機地址的訪問, 同時,Order指令告訴Apache處理這兩個指令的順序, 以改變過濾器。 這些指令的用法: Allow from address 這里的address可以是一個IP地址(或者IP地址的一部分), 也可以是一個完整的域名(或者域名的一部分),還可以同時指定多個IP地址和域名。 比如,要拒絕兜售垃圾的站點: Deny from 205.252.46.165 如此,這個指令所管轄的區域將拒絕來自該地址的訪問。 除了指定IP地址,也可以指定域名,如: Deny from host.example.com 另外,還可以指定地址或域名的一部分來阻止一個群體: Deny from 192.101.205 Deny from cyberthugs.com moreidiots.com Deny from ke Order可以組合Deny和Allow指令, 以保證在允許一個群體訪問的同時,對其中的一些又加以限制: Order deny,allow Deny from all Allow from dev.example.com 上例首先拒絕任何人,然后允許來自特定主機的訪問。 |