为Qmail增加smtp用户认证功能(3)
来源:asp之家 时间:2010-03-13 19:16:00
3. 在 /usr/ports/mail/vpopmail/下面增加 files 目录,并建立下面两个 patch 文件
文件patch-aa,内容如下:
+++ vmysql.h
27c27
#define MYSQL_PASSWD gipgap
---
#define MYSQL_PASSWD mypassword
文件 patch-bb,内容如下:
+++ vchkpw.c
310a311
311a313
313a316,317
#ifdef AUTH_VCHKPW
359a364,365
#endif
然后make -D WITHOUT_ROAMING -D WITH_MYSQL DEFAULT_DOMAIN=sczg.net,重新编译拷贝新的vchkpw到qmail的bin目录。
4.设置 /bin/checkpassword 或 /home/vpopmail/bin/vchkpw 可以SetUID和SetGID。这点很重要,否则认证无法通过。这是因为smtpd 的进程是由qmaild 执行的。而密码验证程序原来只使用于pop3进程,分别由root或vpopmail执行,为的是读shadow或数据库中的密码,并取出用户的邮件目录。这些操作qmaild 都没有权限去做。如果smtp进程要调用密码验证程序,则必须要使用 setuid 和setgid 。其实这点大可放心,这两个密码验证程序都是带源代码的,本身非常安全,只需要放在安全的目录里就可以了(设置其他用户除qmaild 可执行外都没有权限执行;其实如果没有其他SHELL帐户,也就不用这么麻烦了)。
chmod 4755 /bin/checkpassword 或
chmod 4755 /home/vpopmail/bin/vchkpw 使用vpopmail。
5.测试.如果使用的是vpopmail,要把下面的 /bin/checkpassword 换成 /home/vpopmail/bin/vchkpw 。
#su - qmaild -c /var/qmail/bin/qmail-popup localhost /bin/checkpassword pwd〈回车
+OK ,〈18789.978689240@localhost
user realuser〈回车
+OK
pass password〈回车
如果结果显示的是用户目录,说明成功了;如果显示-ERR authorization failed,除检查 密码外,还要检查用户上级的各个目录是否可读,还有密码验证程序的权限是否设置正确。
6. 把 smtp 的 tcpserver 命名改为:
/usr/local/bin/tcpserver -H -R -l 0 -t 1 -c 100 -x/etc/tcp.smtp.cdb -u604 -g601
0 smtp /var/qmail/bin/qmail-smtpd /bin/checkpassword /bin/true 21
| /var/qmail/bin/splogger smtpd 3
或者是
/usr/local/bin/tcpserver -H -R -l 0 -t 1 -c 100 -x/etc/tcp.smtp.cdb -u604 -g601
0 smtp /var/qmail/bin/qmail-smtpd /usr/local/vpopmail/bin/vchkpw
21 | /var/qmail/bin/splogger smtpd 3
注:/usr/local/vpopmail/bin/vchkpw是重新编译的。以上的全在一行。重新启动所有的qmail进程。