標籤:apache 認證 使用者權限
背景介紹
有時我們使用Apache搭建出來的web網站僅給內部某些主機訪問,或者訪問時需要通過身分識別驗證後才可以顯示,如監控主機的web頁面等,此時就需要控制訪問者的許可權和進行身分識別驗證了,本章就以此來進行介紹
一、使用者權限設定
在/etc/httpd/conf/httpd.conf設定檔中,DocumentRoot是指明web網站的根目錄所在的路徑(預設DocumentRoot "/var/www/html"),而其下的Directory容器中的部分<Directory "/var/www/html">則是對問目錄使用者權限的設定。如果我們要修改web網站的根目錄位置,在httpd-2.2版本中,只需要修改DocumentRoot後的路徑即可,不必給每一個web網站的根目錄設定許可權,而在httpd-2.4以後,每一個web網站的根目錄都需要設定許可權(即每一個DocumentRoot下面都需要有對應的<Directory "/path/to/">設定),此處就以DocumentRoot "/var/www/html"為例說明
使用yum -y install httpd 後,並在預設的DocumentRoot下面添加一些檔案,在httpd的配置文/etc/httpd/conf/httpd.conf檔案中,可以看到預設的使用者權限為
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
避免Apache預設歡迎首頁的幹擾,刪除/etc/httpd/conf.d/welcome.conf,使用瀏覽器登入本機,可以看到此時會將/var/www/html/目錄內的內容以列表的形式顯示650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/89/37/wKiom1gMhlfx6oF7AAA1aNM3diA513.png" title="1.png" style="float:none;" alt="wKiom1gMhlfx6oF7AAA1aNM3diA513.png" />
此處需要解釋下<Directory "/var/www/html">容器內的常用選項
1.options:定義資源展示方式,後跟空白字元分隔的參數,建議設定為None
(1)Indexes:當網頁不存在時目錄中的檔案已索引方式顯示
(2)FollowSymLinks:允許跟蹤網站資源下的符號連結對應的原檔案
(3)None:所有都不啟用
(4)All:所有的都啟用
(5)ExecCGI:允許使用mod_cgi模組執行CGI指令碼
(6)Includes:允許使用mod_include模組實現伺服器端包含(SSI)
(7)ncludesNOEXEC:允許包含但不允許執行指令碼
(8)MultiViews:允許使用mod_negotiation實現內容協商
(9)SymLinksIfOwnerMatch:在連結檔案屬主屬組與原始檔案的屬主屬組相同時,允許跟隨符號串連所指向的原始檔案
將Options 後面的參數改為None後再次重新整理瀏覽器,可以看到不在以索引顯示了650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/89/37/wKiom1gMhlezBg1VAAAqaGOcGRg331.png" title="2.png" style="float:none;" alt="wKiom1gMhlezBg1VAAAqaGOcGRg331.png" />
2.AllowOverride:表示當前容器的認證授權如Order allow deny等是否被覆蓋,None表示不覆蓋,如果在www/htdocs目錄下有一個/www/htdocs/fin子目錄,在<Directory "/var/www/html/fin">中AllowOverride AuthConfig則表明該容器要實現認證配置650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/89/35/wKioL1gMhliTeqKsAADpZjBkwIk153.png" title="3.png" style="float:none;" alt="wKioL1gMhliTeqKsAADpZjBkwIk153.png" />
3.Order allow|deny:設定允許、拒絕對象次序,需要注意的是allow、deny有先後順序,如果是Order Allow,Deny 則預設是拒絕;如果是Order Deny, Allow預設是允許,Allow from all 是允許所有人訪問。允許、拒絕的對象可以是IP/NETMASK,也可以是FQDN
首先建立一個index.html首頁,可以看到訪問正常(首頁必須命名為index.html
的原因是在/etc/httpd/conf/httpd.conf由設定檔中DirectoryIndex決定)650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/89/37/wKiom1gMhljBYYVuAAAd5e8hKOA293.png" title="4.png" style="float:none;" alt="wKiom1gMhljBYYVuAAAd5e8hKOA293.png" />
而後修改Director容器中的Order選項,拒絕我的本機電腦IP地址訪問650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/89/35/wKioL1gMhliQPQnRAAAUfavMb7s284.png" title="5.png" style="float:none;" alt="wKioL1gMhliQPQnRAAAUfavMb7s284.png" />
此時再重新整理頁面則無法正常顯示650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/89/35/wKioL1gMhljCs5B8AAAqaGOcGRg293.png" title="6.png" style="float:none;" alt="wKioL1gMhljCs5B8AAAqaGOcGRg293.png" />
二、路徑別名
如果一個圖片在瀏覽器顯示的資源位置為:www.contoso.com/images/picture,按照常規路徑,picture檔案應該是在/var/www/html/images目錄下,有時候我們也可以將images目錄放在別的地方,使用別名的方式重新導向,在主設定檔/etc/httpd/conf/httpd.conf中,使用Alias /images/ "/data/images/"設定重新導向,需要注意的是如果fakename與realname結尾要麼都帶/,要麼都不帶650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/89/37/wKiom1gMhlign3LzAABMhyyHf9Y473.png" title="7.png" style="float:none;" alt="wKiom1gMhlign3LzAABMhyyHf9Y473.png" />
三、使用者認證
用於認證的模組必須是存在於主設定檔並載入的模組,並使用mkdir -p建立/etc/httpd/conf/.htpasswd隱藏檔案存放認證賬戶和密碼650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/89/35/wKioL1gMhlihre3jAAA5HA3iOgY197.png" title="8.png" style="float:none;" alt="wKioL1gMhlihre3jAAA5HA3iOgY197.png" />
然後再到主設定檔的<Directory "/var/www/html/fin">容器中添加如下內容:
<Directory "/var/www/html/fin">
Options None
AllowOverride AuthConfig
AuthType basic #基於basic的明文認證方式,也可以是digest認證,認證資訊存放於檔案系統、資料庫、Ldap中
AuthName "Private web" #安全區域的提示名稱資訊
AuthBasicProvider file#存放認證的方式,預設是系統檔案格式,可以不寫
AuthUserFile "/etc/httpd/conf/.htpasswd" #基於使用者密碼認證檔案存放位置,檔案中存放的使用者可以訪問該網站
Require valid-user #所有存在於AuthUserFile中的使用者都可以訪問該網站,或者使用Require user $username 指定AuthUserFile中的那些使用者可以訪問,多個使用者名稱空格隔開
</Directory>
此時再重新整理頁面,就會出現輸入帳號密碼的彈窗650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/89/37/wKiom1gMhliw1nMjAABe3GUYzGY843.png" title="9.png" style="float:none;" alt="wKiom1gMhliw1nMjAABe3GUYzGY843.png" />
使用命令建立tom、jerry、andy使用者,資訊存放在.htpasswd檔案中,重讀設定檔
htpasswd -c -m /etc/httpd/conf/.htpasswd tom
htpasswd -c -m /etc/httpd/conf/.htpasswd jerry
htpasswd -c -m /etc/httpd/conf/.htpasswd andy
-c :首次建立使用者密碼檔案的時候需要指定-c,僅第一次需要,以後就不需要指定了
-d :使用CRYPT密碼編譯演算法對使用者密碼檔案加密
-m :強制指定使用md5密碼編譯演算法對密碼進行密碼檔案加密
-p :不加密使用者密碼檔案
-s :強制使用SHA加密啊演算法對使用者密碼檔案進行加密
-D :刪除指定使用者
建立/var/www/html/fin目錄,再在其中建立一個index.html檔案,此時重新整理瀏覽器
會看到在<Directory "/var/www/html/fin">容器中定義的AuthName在此處顯示(Google瀏覽器不會顯示)
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/89/37/wKiom1gMhlnidIj_AAAxQK__TXc096.png" title="10.png" style="float:none;" alt="wKiom1gMhlnidIj_AAAxQK__TXc096.png" />
輸入用htpasswd建立的帳號和密碼後,網頁就正常開啟了
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/89/35/wKioL1gMhlmjc0VYAAAn38zImkI463.png" title="11.png" style="float:none;" alt="wKioL1gMhlmjc0VYAAAn38zImkI463.png" />
四、Http伺服器常見響應報文代碼含義
1XX:資訊性狀態代碼
100:Continue
2XX:成功狀態代碼
200:OK
201:Created OK
3XX:重新導向狀態代碼
301:Moved Permanebtly 永久重新導向,在響應報文中使用首部“Location:URL”指定資源現在所在的位置
302:Found 臨時重新導向,在響應報文中使用首部“Location:URL”指定臨時資源位置
304:Not Modified,條件式請求中使用
4XX:用戶端的錯誤
403:Forbidden,請求被伺服器拒絕
404:Not Found,伺服器無法找到請求的URL
405:Method Not Allowed,不允許使用此方法請求響應的URL
5XX:伺服器類的錯誤
500:Internal Server Error,伺服器內部錯誤
502:Bad Gateway:Proxy 伺服器從上遊收到一條偽響應
503:Service Unavailable,伺服器此時無法提供服務,但將來可能可用
本文出自 “兔樣兔森破” 部落格,請務必保留此出處http://arkling.blog.51cto.com/2844506/1864759
Apache-2.2使用者權限設定與認證