vkill'blog 何永鹏

archlinux SBS--mail server(4):virtual users with dovecot,mysql

12:05 , vkill
环境:
2.6.25-ARCH  dovecot-1.0.15  mysql 5.0.60
目的:
实现dovecot使用mysql数据库中的用户

注意:本文的操作是在《archlinux SBS--mail server(3):virtual users and domains with postfix,mysql》http://blog.vkill.net/read.php?109后的,所以建议先看完那篇文章,做好实验再来做这篇文章。

实现步骤:

mysql数据结构和数据信息如下:
[root@myhost ~]# mysql -u vmail -ppass123456 vmail
mysql> desc users;
+--------+-----------+------+-----+---------+-------+
| Field  | Type      | Null | Key | Default | Extra |
+--------+-----------+------+-----+---------+-------+
| name   | char(16)  | NO   |     | NULL    |       |
| pass   | char(48)  | NO   |     | NULL    |       |
| domain | char(255) | NO   |     | NULL    |       |
| active | char(1)   | NO   |     | 0       |       |
+--------+-----------+------+-----+---------+-------+
mysql> select * from users;
+------+----------------------------------+--------+--------+
| name | pass                             | domain | active |
+------+----------------------------------+--------+--------+
| aaa  | e10adc3949ba59abbe56e057f20f883e | v1.net | 0      |
| bbb  | e10adc3949ba59abbe56e057f20f883e | v1.net | 1      |
| ccc  | e10adc3949ba59abbe56e057f20f883e | v2.net | 1      |
| ddd  | e10adc3949ba59abbe56e057f20f883e | v2.net | 1      |
+------+----------------------------------+--------+--------+
####pass字段使用了md5()函数,原始密码都是123456

1、先查看postfix存储邮件文件的路径和特点

[root@myhost ~]# ll /var/vmail/v1.net/bbb/Maildir/
total 12
drwx------ 2 vmail vmail 4096 Sep 28 00:59 cur
drwx------ 2 vmail vmail 4096 Sep 28 01:09 new
drwx------ 2 vmail vmail 4096 Sep 28 01:09 tmp
[root@myhost ~]# ll /var/vmail/v2.net/ccc/Maildir/
total 12
drwx------ 2 vmail vmail 4096 Sep 28 01:25 cur
drwx------ 2 vmail vmail 4096 Sep 28 01:25 new
drwx------ 2 vmail vmail 4096 Sep 28 01:25 tmp

从以上信息可以知道
邮箱文件的存储路径是:基础邮箱目录/域名/用户名/Maildir/

2、修改dovecot.conf,这里只是是一些简单设置
[root@myhost ~]# vi /etc/dovecot/dovecot.conf
base_dir = /var/run/dovecot/
protocols = imap imaps pop3 pop3s
listen = *
disable_plaintext_auth = no
ssl_disable = yes
##因我们前面设置用来创建/读取邮件的虚拟用户UID为401,小于500,所以这里要修改下
first_valid_uid = 401
protocol imap {
}
protocol pop3 {
  pop3_uidl_format = %u
}
protocol lda {
  postmaster_address = postmaster@example.com
}
##主要是修改auth default这段,定义userdb和passdb都使用sql
auth default {
  mechanisms = plain
  passdb sql {
    args = /etc/dovecot/dovecot-sql.conf
  }
  userdb sql {
    args = /etc/dovecot/dovecot-sql.conf
  }
  user = root
}
dict {
}
plugin {
}

3、修改dovecot-sql.conf

[root@myhost ~]# vi /etc/dovecot/dovecot-sql.conf
##下面个参数的意思在 dovecot-sql.conf 文件注释中都说的很清楚的,不难理解
driver = mysql
connect = host=localhost dbname=vmail user=vmail password=pass123456
default_pass_scheme = PLAIN-MD5
password_query = select pass as password from users where concat(name,'@',domain)='%u' and active='1'
###password_query也可以使用下面这句,不过这样会明文提交密码,相对不安全
###password_query = select null as password from users where concat(name,'@',domain)='%u' and pass=md5('%w') and active='1'
##user_query返回 邮箱文件存储路径、读取邮箱文件的UID和GID
user_query = select '/var/vmail/%d/%n/Maildir/' as mail, 401 as uid, 401 as gid from users where concat(name,'@',domain)='%u' and active='1'


4、现在收信看看,就可以使用了

[root@myhost ~]# ktelnet localhost pop3
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Dovecot ready.
user bbb@v1.net
+OK
pass 123456
+OK Logged in.
stat
+OK 5 3330
quit
+OK Logging out.
Connection closed by foreign host.


相关资料:
AuthDatabase-SQL - Dovecot Wiki :http://wiki.dovecot.org/AuthDatabase/SQL
Last modified by vkill on2008/10/11 16:01
类别:linux system | Tags: , , , , , , , , , , , | 0 条评论, 827 次阅读
网友评论(0):
发表评论:

Nickname: 
Email:
Site URI: