前面談到 Samba 服務(wù)器的 MySQL 用戶認(rèn)證,實(shí)際上我老早就寫過(guò) Apache 針對(duì) MySQL 的認(rèn)證。不過(guò)以前只是測(cè)試而已,沒(méi)有實(shí)際使用。前文提到知識(shí)管理,實(shí)際上在公司內(nèi)部我們運(yùn)行著一個(gè)基于 pLog 的博客系統(tǒng)。原先的系統(tǒng)沒(méi)有發(fā)布到互聯(lián)網(wǎng),后來(lái)為了能讓公司異地的各分支機(jī)構(gòu)也能使用該博客系統(tǒng),所以,決定發(fā)布到互聯(lián)網(wǎng)。為了最小程度的降低對(duì)博客系統(tǒng)的 Hack ,所以我決定采用外掛的 mod_auth_mysql 模塊來(lái)實(shí)現(xiàn)用戶認(rèn)證,從而降低公司內(nèi)部系統(tǒng)暴露給非授權(quán)用戶的風(fēng)險(xiǎn)。
在這次安裝中,才發(fā)現(xiàn)原來(lái) mod_auth_mysql 有好幾種版本,而且文檔幾乎都是殘缺不全的。本文下載的程序來(lái)自 sourceforge.net (sf.net)
http://modauthmysql.sourceforge.net/
目前的版本為 2.9.0 ,下載后,建立目錄 mod_auth_mysql ,然后進(jìn)入該目錄解壓。(不要直接在 /usr/local/src 下解壓) ,根據(jù) BUILD 文件的指示,安裝步驟如下:
apxs -c -lmysqlclient -lm -lz mod_auth_mysql.c
apxs -i mod_auth_mysql.la
然后把下面這行加入 httpd.conf
LoadModule mysql_auth_module modules/mod_auth_mysql.so
實(shí)際上編譯和安裝并不困難,配置才是比較大的挑戰(zhàn),特別是要已經(jīng)現(xiàn)有的用戶表結(jié)合起來(lái)。我的 plog 數(shù)據(jù)庫(kù)的用戶表是 plog_users ,我設(shè)置的配置如下:
<IfModule mod_auth_mysql.c>
<Location />
AuthType Basic
# 連接數(shù)據(jù)庫(kù)的主機(jī)地址,一般用本地連接,所以為 localhost
AuthMySQLHost localhost
AuthMySQLPort nnnn
# 數(shù)據(jù)庫(kù)的名字
AuthMySQLDB plog
# 連接數(shù)據(jù)庫(kù)的用戶?
AuthMySQLUser plogdb_user
# 連接數(shù)據(jù)庫(kù)的口令
AuthMySQLPassword password
# 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)`
AuthMySQLPwEncryption md5
AuthMySQLEnable On
AuthMySQLUserTable plog_users
AuthMySQLNameField user
AuthMySQLPasswordField password
AuthMySQLGroupTable plog_users
AuthMySQLGroupField user_group
</Location>
</IfModule>
從以上配置可以知道,這個(gè)模塊實(shí)際上對(duì)用戶表沒(méi)有特別的要求,只要能找到 用戶名和對(duì)應(yīng)的口令即可,如果需要對(duì)一個(gè)組作驗(yàn)證,那么需要 group 那個(gè)列。
由于公司內(nèi)部所有的用戶都具有相同的組,所以,在驗(yàn)證時(shí)一般采用組用戶來(lái)驗(yàn)證,因此要在 plog_user 表添加列: user_group ,并把所有行的 user_group 列 update 為某固定值,例如 mygroup 。
在這里 groupTable 和 UserTable 是同一張表,如果需要一個(gè)用戶屬于多個(gè) group ,那么必須另外建立 group 表。
做好以上工作后,在需要加密的目錄添加 .htaccess 文件如下:
Authname "請(qǐng)用管理博客的口令和密碼登陸"
Authtype Basic
Require group mygroup
這樣一個(gè)外掛的驗(yàn)證系統(tǒng)部署完畢,這種部署對(duì)于電子商務(wù)應(yīng)用中,多個(gè)不同應(yīng)用的用戶表整合具有很好的效果。修改的代碼不多。
修改用戶口令可以用 PHP 的 $_SERVER["PHP_AUTH_USER"] 來(lái)判斷用戶名,然后作相應(yīng)的判斷。
采用這種認(rèn)證措施后,用戶的瀏覽記錄都能在 Apache 日志中保留下來(lái),利用 awstats 等日志統(tǒng)計(jì)軟件,都可以查看到用戶的瀏覽量,使公司內(nèi)部的知識(shí)流向都能清楚地查看到
在這次安裝中,才發(fā)現(xiàn)原來(lái) mod_auth_mysql 有好幾種版本,而且文檔幾乎都是殘缺不全的。本文下載的程序來(lái)自 sourceforge.net (sf.net)
http://modauthmysql.sourceforge.net/
目前的版本為 2.9.0 ,下載后,建立目錄 mod_auth_mysql ,然后進(jìn)入該目錄解壓。(不要直接在 /usr/local/src 下解壓) ,根據(jù) BUILD 文件的指示,安裝步驟如下:
apxs -c -lmysqlclient -lm -lz mod_auth_mysql.c
apxs -i mod_auth_mysql.la
然后把下面這行加入 httpd.conf
LoadModule mysql_auth_module modules/mod_auth_mysql.so
實(shí)際上編譯和安裝并不困難,配置才是比較大的挑戰(zhàn),特別是要已經(jīng)現(xiàn)有的用戶表結(jié)合起來(lái)。我的 plog 數(shù)據(jù)庫(kù)的用戶表是 plog_users ,我設(shè)置的配置如下:
<IfModule mod_auth_mysql.c>
<Location />
AuthType Basic
# 連接數(shù)據(jù)庫(kù)的主機(jī)地址,一般用本地連接,所以為 localhost
AuthMySQLHost localhost
AuthMySQLPort nnnn
# 數(shù)據(jù)庫(kù)的名字
AuthMySQLDB plog
# 連接數(shù)據(jù)庫(kù)的用戶?
AuthMySQLUser plogdb_user
# 連接數(shù)據(jù)庫(kù)的口令
AuthMySQLPassword password
# 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)`
AuthMySQLPwEncryption md5
AuthMySQLEnable On
AuthMySQLUserTable plog_users
AuthMySQLNameField user
AuthMySQLPasswordField password
AuthMySQLGroupTable plog_users
AuthMySQLGroupField user_group
</Location>
</IfModule>
從以上配置可以知道,這個(gè)模塊實(shí)際上對(duì)用戶表沒(méi)有特別的要求,只要能找到 用戶名和對(duì)應(yīng)的口令即可,如果需要對(duì)一個(gè)組作驗(yàn)證,那么需要 group 那個(gè)列。
由于公司內(nèi)部所有的用戶都具有相同的組,所以,在驗(yàn)證時(shí)一般采用組用戶來(lái)驗(yàn)證,因此要在 plog_user 表添加列: user_group ,并把所有行的 user_group 列 update 為某固定值,例如 mygroup 。
在這里 groupTable 和 UserTable 是同一張表,如果需要一個(gè)用戶屬于多個(gè) group ,那么必須另外建立 group 表。
做好以上工作后,在需要加密的目錄添加 .htaccess 文件如下:
Authname "請(qǐng)用管理博客的口令和密碼登陸"
Authtype Basic
Require group mygroup
這樣一個(gè)外掛的驗(yàn)證系統(tǒng)部署完畢,這種部署對(duì)于電子商務(wù)應(yīng)用中,多個(gè)不同應(yīng)用的用戶表整合具有很好的效果。修改的代碼不多。
修改用戶口令可以用 PHP 的 $_SERVER["PHP_AUTH_USER"] 來(lái)判斷用戶名,然后作相應(yīng)的判斷。
采用這種認(rèn)證措施后,用戶的瀏覽記錄都能在 Apache 日志中保留下來(lái),利用 awstats 等日志統(tǒng)計(jì)軟件,都可以查看到用戶的瀏覽量,使公司內(nèi)部的知識(shí)流向都能清楚地查看到