作者 主題: [分享] Apache+mysql 認證介紹  (閱讀 3849 次)

0 會員 與 1 訪客 正在閱讀本文。

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[分享] Apache+mysql 認證介紹
« 於: 2004-02-24 17:30 »
[分享] Apache+mysql 認證介紹

說明
一般使用 Apache 的認證,相信大多數人皆使用 .htaccess + htpasswd 的方式,
這種方式唯一的缺點多是你無法從網頁管理介面去增刪user,即使有方法亦會較
費事,而 mod_auth_mysql 即提供了從 mysql 的 table 來做認證,更增加了系
統的彈性,若有心再加上 libnss-mysql 即可同享同一個認證來源.
不過由於 Apache 有兩種版本 1.3.x 及 2.x,而這兩個版本的 DSO 的 hook API
不同,所以 mod_auth_mysql 也就有編譯即有兩種版本,以下分別依序介紹 1.3.x 及 2.x


下載與安裝
http://heanet.dl.sourceforge.net/sourceforge/modauthmysql/mod_auth_mysql.tgz

代碼: [選擇]

$>wget http://heanet.dl.sourceforge.net/sourceforge/modauthmysql/mod_auth_mysql.tgz
$>tar -zxvf mod_auth_mysql.tgz
$>cd mod_auth_mysql
# 請注意這個 tarball 沒有 autoconf 也沒有 Makefile , 您要仔細看一下 README 的說明
# 其主要則是以 apxs 程式這個來產生 DSO 檔
# Apache 1.3.x 的做法 編譯 DSO
$>apxs -c -D APACHE1 -lmysqlclient -lm -lz mod_auth_mysql.c -L/usr/lib/mysql
# 安裝 DSO
$>apxs -i mod_auth_mysql.so

設定 1.3.x 的 httpd.conf 中的部份
LoadModule mysql_auth_module modules/mod_auth_mysql.so
AddModule mod_auth_mysql.c

#-------------------------------2.X----------------------
# Apache 2.x 做法
$>apxs -c -D APACHE2 -L/usr/lib/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c

設定 2.x 的 httpd.conf 中的部份
LoadModule mysql_auth_module modules/mod_auth_mysql.so



設定 .htaccess 組態

代碼: [選擇]

#網頁的 .htaccess 設定

AuthName "mod_auth_mysql 測試登入"
AuthType Basic
# 以下為連結 mysql 參數
AuthMySQLHost Mysql_IP
AuthMySQLDB auth
AuthMySQLUser nss
AuthMySQLPassword nss-password
# 使用認證的 TABLE , 及其中的 username 及 passwd 欄位
AuthMySQLUserTable users
AuthMySQLNameField username
AuthMySQLPasswordField password
# 下列三種選一,建議您使用 Crypt
AuthMySQLCryptedPasswords On
#AuthMySQLScrambledPasswords Off
#AuthMySQLMD5Passwords Off
# KeepAlive 請參考 README 的說明,我的理解是在同一個網站下,
# .htaccess 皆使用 mod_auth_mysql ,不同的 AuthName 可不用再認證
# 一般不建議如此做
AuthMySQLKeepAlive Off
# 如果 mod_auth_mysql 認證不成功,還可以使用其他認證
AuthMySQLAuthoritative On
# 只要 user 在 TABLE 中,可以沒有 password 的設定(On)
AuthMySQLNoPasswd Off
# 以下我個人覺得不常用,您參考看看

AuthMySQLGroupField gid
AuthMySQLGroupTable users
# User 認證的額外條件 , 如 shell 需為 bash
AuthMySQLUserCondition shell='/bin/bash'
#AuthMySQLGroupCondition <no default>
<Limit GET POST PUT>
require valid-user
#require group xxx
</Limit>

DirectoryIndex index.php

Order allow,deny
Allow from all


結語
使用 mod_auth_mysql,因為以這種方式可以使用遠端的認證來源,
且每一部機器一些條件則可達到存取控制條件,個人覺得是一種很好的方法.

abelyang

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 1097
    • 檢視個人資料
[分享] Apache+mysql 認證介紹
« 回覆 #1 於: 2004-02-24 17:40 »
僅以此三方享獻給 ZMAN 兄及大家,並感謝 ZMAN 兄半買半送我一些東西

wilson

  • 俺是博士!
  • *****
  • 文章數: 1821
  • 帥氣柴老大
    • 檢視個人資料
[分享] Apache+mysql 認證介紹
« 回覆 #2 於: 2004-02-24 18:53 »
感謝abelyang學長分享~~

Kevin

  • 活潑的大學生
  • ***
  • 文章數: 207
    • 檢視個人資料
[分享] Apache+mysql 認證介紹
« 回覆 #3 於: 2004-03-11 17:24 »
請教:

   
引用

 # Apache 1.3.x 的做法 編譯 DSO
$>apxs -c -D APACHE1 -lmysqlclient -lm -lz mod_auth_mysql.c -L/usr/lib/mysql
# 安裝 DSO
$>apxs -i mod_auth_mysql.so

設定 1.3.x 的 httpd.conf 中的部份
LoadModule mysql_auth_module modules/mod_auth_mysql.so
AddModule mod_auth_mysql.c
 


1.   我用是 Apache 1.3.29 tar ball來實作, 在 httpd.conf 內的LoadModule , 應
    是libexec/mod_auth_mysql.so 吧?

2.  在Mysql 內, 認證 table 的使用者密碼欄位,我是使用明碼, 及配合.htaccess 內的設定: AuthMySQLCryptedPasswords Off

    如使用者密碼欄位是用 Password("xxx")加密過的話, .htaccess內的參數應如何設定呢? 我 try 了好幾個設定都沒成功.   :roll:

謝謝.