Linux+Apache實現用戶身份認證
現在很多網站對用戶的訪問權限進行了嚴格的限制,用戶在訪問某些資源時需要給出“用戶名/口令"來確認自己的身份。
目前,使用最多的身份認證方法是將用戶名、口令存放在一個數據庫中,當用戶要訪問某些受限制的資源時,要在某一個頁面中輸入用戶名和口令,程序將用戶輸入的用戶名和口令與數據庫存放的“用戶名/口令"相比較,如果輸入正確,則正常使用資源,否則,資源訪問被拒絕。但是,這種身份認證方式有兩個很大的問題,一方面只要用戶有一次身份認證成功,就可以記錄下受限資源的鏈接地址,在下一次訪問時只需輸入該地址,而無需通過身份認證過程就可訪問受限資源;另一方面用戶可以在受限制的資源的超級鏈接處點右鍵,選擇“屬性",就可以查看到受限制資源的鏈接地址,直接訪問該地址,使身份認證不能達到預期的效果。
Apache可以很好地解決上述問題。Apache是建立WWW網站的軟件,可運行于Linux、 Unix和Windows操作系統下。下面就以Linux為例介紹Apache是如何完成用戶身份認證功能的。
二、基本原理
Apache實現身份認證的基本原理是:當系統管理員啟動身份認證功能后,可以在要限制的目錄中添加一個默認名“.htaccess"的文件。當用戶訪問該路徑下的資源時,系統就會彈出一個對話框,要求用戶輸入“用戶名/口令"。也就是說,它的身份認證功能不是人為由程序控制,而是由系統直接控制的。這樣就避免了用戶記錄需要認證的資源的超級鏈接,不會下次直接訪問資源。
身份認證的方法有多種,其中包括Apache中預編譯好的mod—auth模塊和Apache自帶的但未編譯好的模塊,如:mod—auth—dbm模塊、mod—auth—db模塊、mod—auth—msql模塊。另外還有一些第三方開發的模塊,如:MySQL數據庫中使用的mod—auth—MySQL模塊,他們都可以對一組用戶或某個用戶進行限制。
三、具體實現
下面主要介紹mod—auth模塊和mod—auth—MySQL模塊的使用。但無論采取何種認證方式,都要先對Apache做一些設置:在配置文件access.conf中作如下的設置:
AccessFileName . htaccess
AllOerride All
(一) mod—auth模塊完成身份認證功能,它主要是把允許訪問資源的組名、用戶名、用戶口令以文本文件的方式存放,具體方法是:
1.編輯認證用的組文件:主要用于存放可以訪問受限制的資源的組名以及其中的用戶,用Vi編輯組文件.htgroup如下
ptisi : lkch
存放在 /sur/local/apache/secrets/.htgroup路徑下,其中ptisi是組名,lkch是組中的用戶名。
2.建立用戶文件:主要用于存放某一組中的用戶名和口令
htpasswd -c /usr/local/apache/secrets/.htpasswd lkch
注:htpasswd是Apache提供用于實現認證功能的程序,-c表示產生新的.htpasswd文件,如果存在同名舊文件,則覆蓋舊文件。該程序將詢問口令,鍵入“hello"然后重新確認口令。
3.在要限制的資源的目錄內編輯 .htaccess文件
AuthName ″This is a test″
AuthType Basic
AuthUserFile /usr/local/apache/secrets/.htpasswd
AuthGroupFile /usr/local/apache/secrets/.htgroup
repuire group ptisi
注:參數require group 指定哪些組的用戶可以訪問認證資源,這樣,當再次訪問需要認證的資源存在的目錄時,系統就會彈出對話框,要求輸入“用戶名/口令"。
(二)mod—auth—mysql模塊完成身份認證功能,由于Apache + PHP + MySQL已經被許多網站的建設者當作是建設中小型網絡數據庫的黃金組合,因而mod—auth—mysql的功能也就顯得尤其強大。它主要是把允許訪問資源的組名、用戶名、用戶口令以文本文件的方式存放。
1.建立認證用的數據庫
prompt〉mysqladmin create http—auth
2.建立認證用的表,并插入一行數據
prompt〉mysql http—auth
mysql〉create table mysql—auth (
-〉sername char(25) NOT NULL,
-〉passwd char(25),
-〉groups char(25),
-〉primary key (usrname)
-〉);
mysql〉insert mysql—auth (username,passwd,groups)
-〉values (″lkch″,PASSWD(″hello″),″ptisi″);
3.配置Apache
在http.cont中加入 Auth—MySQL—Info [host] [username][Password]
其中username和password是MySQL數據庫用戶的用戶名和口令。
4.創建 .htaccess文件
AuthName ″This is a test!″
AuthType Basic
Auth—MySQL on
Auth—MySQL—Db http—auth
Auth—MySQL—Password—Table mysql—auth
Auth—MySQL—Group—Table mysql—auth
Auth—MySQL—Username—Field username
Auth—MySQL—Password—Field passwd
Auth—MySQL—Group—Field groups
Auth—MySQL—Encryption—Types Plaintext,Crypt—DES,MySQL
最后這句話表示認證時口令的形式,分別表示不加密、DES加密方式和MySQL的Password()加密。
使用這種認證方法的最大優點是PHP提供了大量對MySQL數據庫進行操作的函數,可以方便地進行遠程理。
關鍵字:MySQL、數據庫、Apache
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解