概述
所谓邮件服务器,通常指运行如下一种或几种服务的服务器,即运行IMAP服务,POP3服务,POP2服务或者SMTP服务,下面我所讲述的涉及IMAP4,POP3,POP2服务,所有的这些均来自一个软件包,而Sendmail是一种被广泛采用SMTP服务器。
POP 是Post Office Protocol 缩写,中文即“邮局协议”,它允许用户列出邮件,接收邮件,删除邮件,在Linux 中提供了多种POP服务器。对大多数用户来说,各种Linux发行版中自带软件包已经足够用了,IMAP服务是POP服务的扩展与延伸,可以方便地管理多个邮件帐号,也可以让多个用户共用一个帐号,或者是只把邮件留在服务器上,把邮件头部或邮件体下载到客户机上而不必下载附件,等等增强特性。
对于比较严格的邮件服务需求而言,IMAP是一种理想的选择。大多数Linux发行版本带有的缺省POP和IMAP服务器(它们被捆绑在一种称为Imapd的软件包之中),足以满足绝大部分要求。
注意事项
下面所有的命令都是Unix兼容的命令。
源路径都为“/var/tmp”(当然在实际情况中也可以用其它路径)。
安装在RedHat Linux 6.1下测试通过。
要用“root”用户进行安装。
Imap的版本号是4.5;
软件包的来源
Imap主页:http://www.washington.edu/imap
必须确保下载:imap-4.5.tar.Z
安装软件包需要注意的问题
在安装imap前后保存一下文件列表对你也许是一个好主意,而后用diff比较一下两个文件列表从而找出imap的文件被安装到哪里去了,方法是在安装imap之前运行一下 “find /*>imap1”,而在安装imap服务之后运行“find /* > imap2”,接着执行命令“diff imap1 imap2 >imap”,从而得到安装文件列表。
编译和安装
把软件包(tar.Z)解压缩:
[root@deep]# cp imap-version.tar.Z /var/tmp
[root@deep]# cd /var/tmp
[root@deep]# tar xzpf imap-version.tar.Z
编译与优化
使用cd 命令进入Imap目录,而后在终端上键入如下命令:
编辑“Makefile”文件(vi+689 src/osdep/unix/Makefile)并做如下改动:
sh -c (test -f /usr/include/sys/statvfs.h -a $(OS) != sc5 -a $(OS) != sco) && $(LN) flocksun.c flockbsd.c || $(LN) flocksv4.c flockbsd.c
改为:
sh -c (test -f /usr/include/sys/statvfs.h -a $(OS) != sc5 -a $(OS) != sco -a $(OS) != lnx) && $(LN) flocksun.c flockbsd.c || $(LN) flocksv4.c flockbsd.c
这会更改sys/starvfs文件,在linux中的glibc 2.1中所带的这个文件与Sun中所带的文件不同。
编辑一下“Makefile”文件。(vi+355 src/osdep/unix/Makefile),并做如下改动:
BASECFLAGS="-g -fno-omit-frame-pointer -O6 -DNFSKLUDGE"
改为:
BASECFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -DNFSKLUDGE"
这是编译IMAP/POP服务器的一种优化设置
编辑“Makefile”文件(vi+112 src/osdep/unix/Makefile),并做如下改动:
BUILDOPTIONS= EXTRACFLAGS=" $(EXTRACFLAGS)"
改为:
BUILDOPTIONS= EXTRACFLAGS= -DDISABLE_POP_PROXY=1 -DIGNORE_
LOCK_EACCES_ERRORS=1" $(EXTRACFLAGS)"
在缺省情况下,ipop2d/ipop3d服务器提供的POP→IMAP访问代理,允许POP的客户通过一个POP服务器访问IMAP的邮件,可以通过设定“DDISABL-POP-PROXY=1”选项禁止这项功能。
“_D IGNORE_LOCK_EACCES_ERRORS=1”选项禁止在因为试图创建一个邮箱加锁文件失败时而产生EACCES错误时出现的“Mailbax vulneralbe – directory must have 1777 protection”警告信息。
编辑“Makefile”文件(vi+58 svc/osdep/unix/Makefile),并做如下改动:
ACTIVEFILE=/usr/lib/news/active
改为:
ACTIVEFILE=/var/lib/news/active
SPOOLDIR=/usr/spool
改为:
SPOOLDIR=/var/spool
RSHPATH=/usr/ucb/rsh
改为:
RSHPATH=/usr/bin/rsh
“ACTIVEFILE=”这行表明Linux中IMAP/POP活动目录的路径,“SPOOLDIR=”是Linux IMAP/POP服务器的缓冲池目录路径。“RSHPATH=”表明了系统中的rsh目录的路径,必须指出的是,尽管我们不用rsh服务,但仍要指明了rsh目录的正确路径。
编辑“Makefile”文件(vi+85 src/osdep/unix/Makefile)并做如下改动:
CC=cc
改为:
CC=egcs
这一行代表我们编译IMAP/POP服务器所用的GCC编译器的名称,此时是(egcs)
[root@deep]# make lnp
[root@deep]# mv ./c-client/c-client.a ./c-client/libimap.a
[root@deep]# install -m 644 c-client/libimap.a /usr/lib/
[root@deep]# install -m 644 ./src/ipopd/ipopd.8c /usr/man/man8/ipopd.8c
[root@deep]# install -m 644 ./src/imapd/imapd.8c /usr/man/man8/imapd.8c
[root@deep]# install -s -m 755 ./ipopd/ipop2d /usr/sbin/
[root@deep]# install -s -m 755 ./ipopd/ipop3d /usr/sbin/
[root@deep]# install -s -m 755 ./imapd/imapd /usr/sbin/
[root@deep]# mkdir -p /usr/include/imap
[root@deep]# install -m 644 ./c-client/*.h /usr/include/imap/
[root@deep]# install -m 644 ./src/osdep/tops-20/shortsym.h /usr/include/imap/
[root@deep]# chown root.mail /usr/sbin/ipop2d
[root@deep]# chown root.mail /usr/sbin/ipop3d
[root@deep]# chown root.mail /usr/sbin/imapd
上面的命令完成:配制软件以确保在系统中能够有成功编译本软件包所需的函数和类库;把源文件编译成二进制执行码;把可执行文件和支持文件安装到正确的位置。
注意一下上面“make Inp”命令,它将使你的Linux系统具有插入认证模块(Pluggable Authentication Modules(PAM))能力,这样就有更好的安全性。
“mkdir”命令在usr/include目录下创建一下叫Imap的新目录,这个新目录用于存储与C-Client/*及shartsym.h,这些是与imapd程序有关的头文件。
“chown”命令把pop2d,pop3d和imapd的所有权改为超级用户root及mail用户组。
注意:出于安全考虑:如果只打算使用imapd服务,请把pop2d,pop3d删除,如果想同时使用ipop服务请把imapd删除,如果想同时使用imapd和 ipopd服务,就把两个都保留下来。
清除不必要的文件
[root@deep]# cd /var/tmp
[root@deep]# rm -rf imap-version/ imap-version.tar.Z
rm命令把用于编译安装IMAP/POP服务的所有源文件清除,同时也把IMAP/POP的压缩文件从“var/tmp”目录中删除。
配置
可以到这去下载“floppy.tgz”文件:http://pages.infinit.net/lotus1/doc/opti/floppy.tgz。把“floppy.tgz”文件解开之后,在相应的目录下会发现我们在这本书中介绍的所有软件的配置文件。这样就没有必要手工重新生成这些文件,或者用拷贝粘贴的方法把它们粘贴到配置文件中去。不管是打算自己动手生成配置文件还是拷贝现成的,你都要学会自己修改配置文件并且把配置文件拷贝到正确的目录下。下面将具体说明。
对于运行IMAP/POP服务器而言,下面这些文件必须存在而且必须把它们创建或拷贝到在适当的目录中。
l 如果打算用imapd服务,拷贝imapd文件到etc/pam.d目录。
l 如果打算用popd服务,拷贝pop文件到etc/pam.d目录。
可以从floppy.tgz压缩文件中找到下列配置文件,把它们从解压的floppy.tgz文件中到适当的目录中,或者直接从书中剪帖到相关文件中。
配制“etc/pam.d/imap”文件
配制“/etc/pam.d/imap”文件使其可以使用pam认证。
创建“imap”文件(touch /etc/pam.d/imap)并加上如下几行:
#%PAM-1.0
auth required /lib/security/pam_pwdb.so shadow nullok
account required /lib/security/pam_pwdb.so
注意:本文件只有在使用IMAP服务时才是必须的。
配制“/etc/pam.d/pop”文件
配制“/etc/pam.d/pop” 文件使其通过pam认证。
创建pop文件(touch /etc/pam.d/pop)并加上如下几行:
#%PAM-1.0
auth required /lib/security/pam_pwdb.so shadow nullok
account required /lib/security/pam_pwdb.so
注意:本文件只有在使用POP服务时才是必须的。
IMAP/POP的安全信息
是否真的需要IMAP/POP服务?
某些版的IMAP/POP程序中存在严重的缓冲区溢出错误,可以被黑客利用来以“root”身份执行一些命令。确保已经把软件的版本升级到4.5或更高。有些版本的POP服务器不报告登录失败信息,这样有的攻击者就可以在你完全不知情的情况下强行破解密码。如果出现这种情况,请尽快升级软件。
应当清醒地知到IMAP/POP程序在缺省的情况下使用明文方式传送密码,任何一个人都可以利用网络嗅探程序(sniffer)监听网络从而获取你的用户名和密码,进而以之登录。在使用linux系统的邮件阅读器的时候,并不需要运行一个本地的IMAP/POP服务程序。检查一下你的配置,如果在使用远程或外部IMAP/POP服务器,请关闭或删除本地的守护程序(daemon)。
而且如果打算通过Internet使用Web界面来阅读邮件,采用SSL协议来加密你与IMAP/POP服务器之间的信息交流将是一种不错的主意。参见第五部分,软件相关的参考手册,第十章,服务器软件,在Linux Apache服务器一节有更详细的介绍。
更多的资料
为获取更加详细的信息,可以参见下面几个man说明。
$ man imapd (8C) - Internet Message Access Protocol server
$ man ipopd (8C) - Post Office Protocol server
安装到系统中的文件
> /usr/include/imap
> /usr/include/imap/dummy.h
> /usr/include/imap/env.h
> /usr/include/imap/env_unix.h
> /usr/include/imap/fdstring.h
> /usr/include/imap/flstring.h
> /usr/include/imap/fs.h
> /usr/include/imap/ftl.h
> /usr/include/imap/imap4r1.h
> /usr/include/imap/linkage.h
> /usr/include/imap/lockfix.h
> /usr/include/imap/mail.h
> /usr/include/imap/mbox.h
> /usr/include/imap/mbx.h
> /usr/include/imap/mh.h
> /usr/include/imap/misc.h
> /usr/include/imap/mmdf.h
> /usr/include/imap/mtx.h
> /usr/include/imap/mx.h
> /usr/include/imap/netmsg.h
> /usr/include/imap/news.h
> /usr/include/imap/newsrc.h
> /usr/include/imap/nl.h
> /usr/include/imap/nntp.h
> /usr/include/imap/os_a32.h
> /usr/include/imap/os_a41.h
> /usr/include/imap/os_aix.h
> /usr/include/imap/os_aos.h
> /usr/include/imap/os_art.h
> /usr/include/imap/os_asv.h
> /usr/include/imap/os_aux.h
> /usr/include/imap/os_bsd.h
> /usr/include/imap/os_bsi.h
> /usr/include/imap/os_cvx.h
> /usr/include/imap/os_d-g.h
> /usr/include/imap/os_drs.h
> /usr/include/imap/os_dyn.h
> /usr/include/imap/os_hpp.h
> /usr/include/imap/os_isc.h
> /usr/include/imap/os_lnx.h
> /usr/include/imap/os_lyn.h
> /usr/include/imap/os_mct.h
> /usr/include/imap/os_mnt.h
> /usr/include/imap/os_nxt.h
> /usr/include/imap/os_os4.h
> /usr/include/imap/os_osf.h
> /usr/include/imap/os_ptx.h
> /usr/include/imap/os_pyr.h
> /usr/include/imap/os_qnx.h
> /usr/include/imap/os_s40.h
> /usr/include/imap/os_sc5.h
> /usr/include/imap/os_sco.h
> /usr/include/imap/os_sgi.h
> /usr/include/imap/os_shp.h
> /usr/include/imap/os_slx.h
> /usr/include/imap/os_sol.h
> /usr/include/imap/os_sos.h
> /usr/include/imap/os_sun.h
> /usr/include/imap/os_sv2.h
> /usr/include/imap/os_sv4.h
> /usr/include/imap/os_ult.h
> /usr/include/imap/os_vu2.h
> /usr/include/imap/osdep.h
> /usr/include/imap/phile.h
> /usr/include/imap/pop3.h
> /usr/include/imap/pseudo.h
> /usr/include/imap/rfc822.h
> /usr/include/imap/smtp.h
> /usr/include/imap/tcp.h
> /usr/include/imap/tcp_unix.h
> /usr/include/imap/tenex.h
> /usr/include/imap/unix.h
> /usr/include/imap/utf8.h
> /usr/include/imap/shortsym.h
> /usr/lib/libimap.a
> /usr/man/man8/ipopd.8c
> /usr/man/man8/imapd.8c
> /usr/sbin/ipop2d
> /usr/sbin/ipop3d
> /usr/sbin/imapd
> /etc/pam.d/imap
> /etc/pam.d/pop