歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux文化 >> Linux+Apache實現用戶身份認證

Linux+Apache實現用戶身份認證

日期:2017/2/27 12:19:08   编辑:Linux文化

一、序言

現在很多網站對用戶的訪問權限進行了嚴格的限制,用戶在訪問某些資源時需要給出“用戶名/口令”來確認自己的身份。目前,使用最多的身份認證方法是將用戶名、口令存放在一個數據庫中,當用戶要訪問某些受限制的資源時,要在某一個頁面中輸入用戶名和口令,程序將用戶輸入的用戶名和口令與數據庫存放的“用戶名/口令"相比較,如果輸入正確,則正常使用資源,否則,資源訪問被拒絕。但是,這種身份認證方式有兩個很大的問題,一方面只要用戶有一次身份認證成功,就可以記錄下受限資源的鏈接地址,在下一次訪問時只需輸入該地址,而無需通過身份認證過程就可訪問受限資源;另一方面用戶可以在受限制的資源的超級鏈接處點右鍵,選擇“屬性",就可以查看到受限制資源的鏈接地址,直接訪問該地址,使身份認證不能達到預期的效果。

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數據庫進行操作的函數,可以方便地進行遠程管理。


——摘自:賽迪網


Copyright © Linux教程網 All Rights Reserved