vkill'blog 何永鹏

how to use pam_mysql

11:29 , vkill
关于pam_mysql 的安装参见 http://blog.vkill.net/read.php?103
pam_mysql的使用在源码包中README文件已说的很清楚了,这里只是用图表的形式来简单的说一下:

pam_mysql的工作流程如下:
1、读取参数
2、连接mysql
3、提交查询,得到一字符串
4、比对,提交的密码经处理后是否和刚得到的字符串一致

pam_mysql最终提交给mysql的查询语句是下面这句,这个查询语句可以通过查看mysql通用查询日志或者查看pam_mysql调试日志来获得。
                                              __________xxx7
SELECT xxx1, xxx2 FROM xxx3 WHERE xx4 = 'xx5' AND (xxx6)
其中:
xxx1:users.status_column (非必须参数),如不定义值为0,只有这里是0时用户才会被验证通过
xxx2:users.password_column(必须参数)
xxx3:users.table(必须参数)
xxx4:users.user_column(必须参数),可以这样定义 concat(fa,'@',fb) ,意思就是可以拿多个字段的组合来用。
xxx5:用户提交的用户名
xxx6:users.where_clause (非必须参数),可以定义为 fa='a' 也可以定义为 fa='a' and fb='b' ,意思就是说可以嵌套and
xxx7:AND (...),只有当users.where_clause参数被定义了后,这才会有,否则不显示

总之,pam_mysql很灵活的,只要各参数的值组合起来的sql查询语句正确就行。

附:
附:
下面是postfix smtp-->saslauthd-->pam-->pam_mysql配置:
关于postfix smtp-->saslauthd-->pam-->pam_mysql 参见http://blog.vkill.net/read.php?106 和 http://blog.vkill.net/read.php?107
[root@myhost ~]# cat /etc/pam.d/smtp
#%PAM-1.0
auth required pam_mysql.so config_file=/etc/security/pam_smtp_mysql.conf
account required pam_mysql.so config_file=/etc/security/pam_smtp_mysql.conf
[root@myhost ~]# cat /etc/security/pam_smtp_mysql.conf
users.host    =  localhost
users.database    =  test
users.db_user    =  mail
users.db_passwd    =  pass123456
users.table    =  users
users.status_column  =  status
users.user_column  =  concat(name,'@',domain)
users.password_column  =  pass
users.password_crypt  =  3
verbose      =  1
mysql数据结构与数据信息如下:
[root@myhost ~]# mysql -u mail -ppass123456 test
mysql> desc users;
+--------+-----------+------+-----+---------+-------+
| Field  | Type      | Null | Key | Default | Extra |
+--------+-----------+------+-----+---------+-------+
| name   | char(16)  | YES  |     | NULL    |       |
| pass   | char(48)  | YES  |     | NULL    |       |
| domain | char(255) | YES  |     | NULL    |       |
| status | int(1)    | YES  |     | NULL    |       |
+--------+-----------+------+-----+---------+-------+
mysql> select * from users;
+------+----------------------------------+----------+--------+
| name | pass                             | domain   | status |
+------+----------------------------------+----------+--------+
| aaa  | 123456                           | test.net |      0 |
| bbb  | e10adc3949ba59abbe56e057f20f883e | test.net |      0 |
| ccc  | e10adc3949ba59abbe56e057f20f883e | test.net |      1 |
+------+----------------------------------+----------+--------+
Last modified by vkill on2008/10/23 13:29
类别:linux system | Tags: , , , , , , , | 0 条评论, 621 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: