[教學]HTTP 認證使用 MYSQL (mod_auth_mysql)
发表于:2007-07-04来源:作者:点击数:
标签:
HTTPAuthorization使用MYSQL 說明 一般使用Apache的認證,相信大多數人皆使用.htaccess+htpasswd的方式, 這種方式唯一的缺點多是你無法從網頁管理介面去增刪改user,即使有方法亦會較 費事,而mod_auth_ mysql 即提供了從mysql的table來做認證,更增加了系 統的
HTTP Authorization 使用 MYSQL
說明
一般使用 Apache 的認證,相信大多數人皆使用 .hta
clearcase/" target="_blank" >ccess + htpasswd 的方式,
這種方式唯一的缺點多是你無法從網頁管理介面去增刪改user,即使有方法亦會較
費事,而 mod_auth_
mysql 即提供了從 mysql 的 table 來做認證,更增加了系
統的彈性. 不過由於 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
[code:1:f444ff68e9]
$>wget http://heanet.dl.sourceforge.net/sourceforge/modauthmysql/mod_auth_mysql-3.0.0.tar.gz
$>tar -zxvf mod_auth_mysql-3.0.0.tar.gz
$>cd mod_auth_mysql-3.0.0
# 請注意這個 tarball ?]有 autoconf 也?]有 Makefile ,您要仔細看一下 BUILD/
# README/CONFIGURE 的說明,以了解安裝過程,其主要則是以 apxs 程式這個來產生
# DSO 檔
# Apache 1.3.x 的做法 編譯 DSO
$>apxs -c -lmysqlclient -lm -lz mod_auth_mysql.c -L/usr/lib/mysql -I/usr/include/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 做法
$>/www/bin/apxs -c -L/usr/lib/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c
$>apxs -i mod_auth_mysql.so
設定 2.x 的 httpd.conf 中的部份
LoadModule mysql_auth_module modules/mod_auth_mysql.so
[/code:1:f444ff68e9]
設定 .htaccess 組態 (若你用的 mod_auth_mysql 版本太舊,設法稍有不同,請詳見 CONFIGURE)
[code:1:f444ff68e9]
#網頁的 .htaccess 設定 (您也可以設在 httpd.conf 中的 <Directory> 中
# 使用 mod_auth_mysql (on) , 若不使用可用 off
Auth
MySQLEnable On
# Mysql IP 或 hostname
AuthMySQLHost Hostname
# Mysql Listen 的 port
AuthMySQLPort3306
# 登入 mysql 的帳號
AuthMySQLUserID
# 密碼
AuthMySQLPasswordPassword
# 數據庫名稱
AuthMySQLDBusers
# 使用那個 table 做認證的來源
AuthMySQLUserTable table_name
# 條件,例如 where userid>10 , 則下方的條件式為 userid>10
AuthMySQLUserCondition = "userid>10"
# 使用該 table 中那個欄位當 username
AuthMySQlNameFieldusername
# 使用該 table 中那個欄位當密碼欄位
AuthMySQLPasswordFieldpassword
# 可選擇下列密碼編碼方式
# none: not encrypted (plain text)
# crypt:
UNIX crypt() encryption
# scrambled: MySQL PASSWORD encryption
# md5: MD5 hashing
# aes: Advanced Encryption Standard (AES) encryption
# sha1: Secure Hash Algorihm (SHA1)
# 一般
unix/
linux 系統皆使用 crypt 為主,而
phpbb 論壇程式則使用 md5
AuthMySQLPwEncryption crypt
# 群組 table , 若不設則同 AuthMySQLUserTable 所指 table
AuthMySQLGroupTable table_name
# 條件,例如 where group=admin , 則下方的條件式為
AuthMySQLGroupCondition = "group='admin'"
# 群組 table 中的那個欄位做群組名稱
AuthMySQLGroupField
# 是否保持 Mysql Connection , Off 不保持, On 保持
AuthMySQLKeepAliveOff
# 如果 mod_auth_mysql 認證不通過,是否使用巳定義的其他認證(ex: mod_auth)
# On 表示僅使用 mod_auth_mysql , Off 則表示若 mysql 認證失敗,仍可使用其他定義的認證方式
AuthMySQLAuthoritativeOff
require valid-user
#require group xxx
[/code:1:f444ff68e9]
上述的很多功能可用可不用,完全看個人需要,另外,該 DSO 有一些文件沒有寫好,以 3.0 版來說,有的
功能巳經換或拿掉了(Ex:AuthMySQLNoPassword),但文件裏還有提及,這個部份建議您自己多實驗,多去體
會囉
我自己用的內容:
[code:1:f444ff68e9]
AuthName "Mysql Admin"
AuthType Basic
AuthMySQLEnable On
AuthMySQLHost IP
AuthMySQLPort 3306
AuthMySQLUser ID
AuthMySQLPassword password
AuthMySQLDB users
AuthMySQLUserTable user
AuthMySQLNameField user_name
AuthMySQLPasswordField password
AuthMySQLPwEncryption crypt
AuthMySQLAuthoritative On
# 有些網頁要限制人或群組時,可加上名字或群組名稱
require valid-user abel
require valid-group admin
[/code:1:f444ff68e9]
我的資料表結構,這個結構就是
Unix account 的結構, passwd/shadow 的內容,因我將所有的帳號資訊
都存在 mysql , 我所管理幾十台的機器帳號都使用此一認證來源(每台機器有不同的 where 條件,這個功
能需要 libnss_mysql + pam_mysql 你才能做到,若有人有興趣,我再貼出來)
[img:f444ff68e9]
http://211.72.210.251/libnss.bmp[/img:f444ff68e9]所以,透過此一方式,您就可以使用 HTTP Authorization 的機制來做管控,而不用使用 session/cookie
方式,再寫一個可以修改 table 的 cgi/php 程式,就可以讓 user 自己改了個人資訊了,其他網頁則完
全不用檢查 session 或 cookie 是否存在,就按照一般的開發程序來寫,不用檢查是否登錄因為 Apache
會先要求其登入,才可存取網頁或圖片.
我們現在高度發揮所有的認證皆源至 mysql 的資料 , 只要懂得原理及工具,就很容易發揮單一認證
來源的控管,避免的帳號的零散及管理的困難
hongfengyue 回复于:2005-07-22 16:41:38 |
好文章啊! 马上回去试验一下。
|
willsee 回复于:2005-07-23 01:44:12 |
我顶 这么好的东西能不顶吗
|
glider126 回复于:2005-07-23 15:03:27 |
顶!好东西啊~~ “需要 libnss_mysql + pam_mysql 你才能做到,若有人有興趣,我再貼出來”
呵呵,强烈希望楼主贴出这个来~~
|
willsee 回复于:2005-07-26 15:55:20 |
大哥在挖,当我装好这个mod_auth_mysql后,通过他认证没有问题 其他原来基于pam认证的也都没有问题 但是我的phpmyadmin不工作了 你遇到这个问题没 急.请回复谢谢
|
abel 回复于:2005-07-26 16:08:49 |
[quote:e2caa8fe8a="willsee"]大哥在挖,当我装好这个mod_auth_mysql后,通过他认证没有问题 其他原来基于pam认证的也都没有问题 但是我的phpmyadmin不工作了 你遇到这个问题没 急.请回复谢谢[/quote:e2caa8fe8a] 你要看 error_log 寫什麼, 你的 phpmyadmin 目錄的設定等等 我的 mod_auth_mysql 也有用在 phpmyadmin 的目錄上 並沒有這樣的問題呀
|
wind521 回复于:2005-07-26 16:34:10 |
好,支持一下
|
原文转自:http://www.ltesting.net