文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>理解qmail

理解qmail

时间:2006-06-02  来源:李某人

作者:Yiming Gong
http://security.zz.ha.cn

声明:任何形式的摘抄必须保留上述作者和http地址

理解qmail


一直以来,Unix系统的邮件系统一般都使用的是sendmail,但sendmail系统在性能,易用性,安全构架等方面表现相对很难令管理员满意。在这种情况下qmail作为一个很好的邮件服务器替代产品在互联网上得到了日益广泛的应用,与sendmail相比,qmail在安全,性能,模块化,可靠性等诸多方面都要明显优于传统的sendmail。
目前qmail在国内已经得到了非常广泛的应用,但是qmail毕竟与传统的sendmail有着较大的差别,几个典型问题反复的被邮件管理员提出,本文就qmail中几个关键概念进行阐述。
注意,本文直接介绍相关问题,而不涉及到必须的unix知识和qmail基本安装使用方法,这些资料读者可以从相关资料获得。

1:工作流程
qmail安装启动完毕后,检查系统可以看到有5个进程被启动,分别是splogger、qmail-send、qmail-lspawn、qmail-rspawn和qmail-clean,这和sendmail的单一进程有很大的区别,下面一一来介绍:
splogger:splogger是完成qmail和syslog的日志交互的。
qmail-send:用来处理qmail-queue队列的邮件队列,我们从下图中可以看出当队列中的邮件目的地址是本地收件人时,qmail-send会调用qmail-lspawn,当队列中的邮件目的地址非本地收件人时,它调用qmail-rpawn,当遇到目的邮件服务器临时故障,邮件暂时无法投递等情况,qmail-send还负责随后的尝试重发工作。
qmail-lspawn和qmail-rspawn:由上面的qmail-send我们就可以理解这两个进程的意思了。
qmail-clean:qmail-clean负责清除邮件队列。

在qmail工作中,可以按照下面的流程图来理解

解释如下:
当本地用户发送邮件时,首先由qmail-inject完成对消息的处理,增加必要的邮件头,然后调用qmail-queue,将邮件放到队列中,随后qmail-send读取邮件,根据收件人的邮件地址判断是否是本地用户,如果是本地用户,则将邮件交给qmail-lspawn,并完成后续的工作。如果非本地用户,则交给qmail-rspawn;
当外面的用户利用服务器发送邮件时,则先调用qmail-smtpd,如果该邮件允许relay,则向后进行,工作同上。如果不允许relay,则邮件被拒绝。

2:邮件存储格式
在qmail安装运行过程中,有三种邮件存储的格式可以供管理员选择,vsm,Maildir和mbox。
这是安装中很多人都容易混淆的地方,建议管理员可以参看程序包中的INSTALL.mbox,INSTALL.vsm,INSTALL.maildir文件。
vsm其实就是var spool mail的缩写,我们知道一般unix都是默认将所有用户的信件存放在/var/spool/mail或者是/var/mail下的,也就是说对每个用户来讲无论他有多少邮件对系统而言都是被存放为以用户名命名的单个文件中。(有的系统如solaris使用的是/var/mail目录),
如果管理员打算使用这种邮件存储方式的话,将/var/qmail/boot/下和自己系统相符的以bin打头的文件拷贝为/var/qmail/rc文件就可以了。

Mailbox是指使用~user/Mailbox方式替换unix默认的/var/spool或是/var/spool/mail存放方式,如果采用这种方式的话每个用户的所有邮件都存放在自己家目录下的一个名为Mailbox文件的文件中。
Qmail在安装时默认是使用这种存储方式的,这里就不多介绍了。

Maildir是qmail提出的一种新的更加可靠的邮件存储方式的文件,采用这种存储方式的时候,每个用户的每封邮件都是单独存放在自己的独享的邮件目录中的。在获得稳定性的同时,Maildir这种存储方式在速度上和传统的mbox方式不相上下,可参见"Benchmarking mbox versus maildir"一文,见http://www.courier-mta.org/mbox-vs-maildir/ 关于Maildir更细的内容可以从http://cr.yp.to/proto/maildir.html获得。如果打算使用这种邮件存储方式的话,可以将/var/qmail/boot/home文件拷贝为/var/qmail/rc,并将rc文件中./Mailbox修改为./Maildir/,不妨看看修改后的rc文件,
#Cat /var/qmail/rc
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir splogger qmail

此外,在用户的家目录下如下执行
maildirmake ~user/Maildir
echo ./Maildir/ > ~/.qmail
这样的话Maildir的格式就设置好了。

3:dot-qmail
qmail中的.qmail是掌握qmail的问题较多的地方之一。
从上面第一部分的流程图中我们可以看到邮件收到本地后最终交给了qmail-local来处理,那么qmail-local是如何又是怎样完成随后的邮件投递工作呢-通过.qmail。
首先要明白对系统内的用户而言,每个用户的.qmail文件应该位于每个用户的家目录里,通过改动相应的.qmail文件,就可以控制对应用户的邮件的投递行为,常见对.qmail的改动如:
将邮件传递给一个程序,常用的有vacation;转发;
将发给.qmail所属用户的mail转发给指定的本系统或其他远端的email账户;
将邮件发送到用户主目录的Mailbox文件中;
将邮件发送到用户主目录的Maildir目录。
举例说明,现在假设系统内有用户yiming,他的家目录为/yiming,配置qmail为vsm方式接收邮件,我们知道,此时,发送给yiming用户的邮件会放在/var/mail下。
现在我们通过改动.qmail文件可以方便的修改默认的投递属性,实现对实际投递行为的控制。
首先如果/yiming目录下不存在.qmail文件,那么给用户yiming的邮件都会被按照默认配置投递到/var/mail下的yiming文件中。
如果想把给用户yiming的邮件转发到[email protected] ,那么在在yiming的家目录下生成.qmail文件,内容是以&打头的邮件地址(也可以不要&),如下:&[email protected]就可以了。如果想同时转发给多个人呢?一行行的写下来就是。要注意的必须是单纯的邮件地址,不能有任何的其他符号,包括空格。
上面我们看到qmail配置的是vsm形式的,如果想保证其他用户投递属性不变,但对特别的用户yiming使用Maildir格式该怎么做?很简单,修改/yiming目录下的.qmail,将内容改为./Maildir/,同时执行maildirmake生成Maildir目录结构就可以了,此时发给用户yiming的新邮件不再被投递到/var/mail而是按照.qmail文件的指示被投递到/yiming/Maildir/new下。
有一点提醒一下,对.qmail的内容改动后不需要重新启动任何进程,改动直接生效。

4:users/assign
除了.qmail外,assign也是一个比较难以理解的点,在qmail默认安装中,users目录下是没有assign文件的,但在实际的使用中,为了更好的发挥qmail的功用,assign的用法又是必须理解的。
assign文件的格式如下:address:user:uid:gid:directory:dash:extension: 我们可以理解为发送到收件地址address的消息,会以uid和gid身份的user接受,并根据directory目录下的.qmaildashextension来决定投递行为。这样讲有点不好理解,还是不妨举例来解释一下,下面通过修改assign文件来对系统默认的邮件属性进行修改。
我们假设assign文件内容如下
=yiming:yiming:101:100:/yiming/1:::
注意,虽然我们上面说过用户yiming的家目录是/yiming,但此时发送给用户yiming的邮件的去向不再由用户yiming家目录/yiming下的.qmail决定,而是由/yiming/1目录下的.qmail决定了。
=yiminggong:yiming:101:100:/yiming/:::
此时发送给用户yiminggong的邮件等同于发送给yiming用户。
+test-:yiming:101:100:/yiming/test:-::
此时所有发送给test-x的邮件都由/yiming/test目录下.qmail-x来决定,如test-info的邮件由/yiming/test下的.qmail-info,test-go由/yiming/test下.qmail-go来决定投递属性。
+haha-:yiming:101:100:/yiming/test:-::
基本原理同上。
+:yiming:101:100:/yiming/test:-::
注意,此时所有邮件都会被/yiming/test下面相关的.qmail-x处理,如发送给test的邮件会由/yiming/test下的.qmail-test来决定。
注意,生成和修改assign文件后需要执行qmail安装目录下bin子文件夹内的qmail-newu改动才会生效。

结束语
上面是我们讨论了邮件服务器软件的几个重要概念,包括工作流程、邮件存储格式、dot-qmail概念、assign文件用法,作为邮件系统管理员,如果能掌握这几个概念会对熟练的驾驭qmail有很大的帮助。

相关阅读 更多 +
排行榜 更多 +
空中跑酷汉化版

空中跑酷汉化版

赛车竞速 下载
修仙传说

修仙传说

角色扮演 下载
魔界零之迷宫

魔界零之迷宫

冒险解谜 下载