概述
注意事項
軟件包的來源
安裝軟件包需要注意的問題
編譯和安裝
編譯與優化
清除不必要的文件
配置
配制“etc/pam.d/imap”文件
配制“/etc/pam.d/pop”文件
IMAP/POP的安全信息
更多的資料
安裝到系統中的文件
概述
所謂郵件服務器,通常指運行如下一種或幾種服務的服務器,即運行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主頁:
必須確保下載: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服務器的緩沖池目錄路徑?!癛SHPATH=”表明了系統中的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”文件:。把“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