萬月亮:
[email protected]
許 霆:
[email protected]
目前網上關於qmail+LDAP的配置不是很多,而且大多數是英文的。而qmail和openldap的配置沒有詳細的配置文檔。前一段時間因為工作關系配置了qmail+LDAP的服務器。現在將其整理處理,以供大家參考。希望對於大家有所幫助。
Qmail 是基於類似UNIX操作系統的Internet Mail Transfer Agent (MTA) 。我的安裝環境是Linux7.1 內核是2.4.2,gcc version 2.96,組件全部安裝。
安裝步驟
1.操作系統:
Red Hat Linux 7.1 kernel 2.4.2 gcc 2.96
2.所需軟件包:
qmail-1.03.tar.gz (http://www.qmail.org)
UCspi-tcp-0_88_tar.gz (http://cr.yp.to/ucspi-tcp.Html)
checkpassWord-0_90_tar.gz (http://cr.yp.to/checkpwd.html)
qmail-ldap-1_03-20010301_patch.gz (http://www.nrg4u.com/)
openldap-2_0_7.tgz (http://www.openldap.org)
daemontools, FTP://cr.yp.to/daemontools/daemontools-0.70.tar.gz
3.主機IP地址和域名配置,在本例中為:
IP:172.18.6.111
域名:longshine.com
4. System requirements
5. 安裝步驟
將所有需要安裝的包拷貝到/usr/local/src/qmail目錄項目
mkdir -p /usr/local/src/qmail
mv *.tar.gz /usr/local/src/qmail
然後解開安裝下面步驟解開這些包
su -
umask 022
cd /usr/local/src/qmail
tar zxvf qmail-1.03.tar.gz
tar xvf ucspi-tcp-0.88.tar.gz
tar zxvf daemontools-0.70.tar.gz
tar zxvf checkpassword-0.90.tar.gz
解開的數據包應該處在qmail-1.03, ucspi-tcp-0.88, daemontools-0.70和checkpassword-0.90目錄下,進入qmail目錄。
cd qmail-1.03
建立相應的安裝目錄
由於qmail安裝程序會產生其需要的子目錄,所以只要生成安裝所需的"home" 目錄:
mkdir /var/qmail
ln -s /usr/man /var/qmail/man
mkdir /etc/qmail
ln -s /etc/qmail /var/qmail/control
ln -s /usr/sbin /var/qmail/bin
生成qmail安裝需要的用戶以及組
# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails
編譯安裝
現在可以編譯安裝qmail:
make setup check
在編譯安裝完成,需要進行配置如果DNS配置正確,只需執行下面的命令:
./config
如果config在DNS中不能找到主機名,則需要執行config-fast 腳本:
./config-fast longshine. com
qmail 現在已經安裝起來了,下面開始是啟動和配置qmail。
安裝 ucspi-tcp
進入 ucspi-tcp 目錄:
cd /usr/local/src/qmail/ucspi-tcp-0.88
make
make setup check
這樣ucspi-tcp 安裝起來了。
安裝daemontools
進入 daemontools 目錄:
cd /usr/local/src/qmail/daemontools-0.70
make
make setup check
安裝checkpassword
進入 checkpassword 目錄:
cd /usr/local/src/qmail/checkpassword-0.90
make
make setup check
注: 在某些LINUX版本中(我的安裝環境redhat 7.1), 如Red Hat 7,可能在編譯過程中會生成錯誤:
./compile tai64nlocal.c
tai64nlocal.c: In function `main':
tai64nlocal.c:54: warning: assignment makes pointer from integer without a cast
tai64nlocal.c:55: dereferencing pointer to incomplete type
等等….
如果這樣按照下面說明編輯tai64nlocal.c
#include
更改為:
#include
生成/service 目錄:
mkdir /service
最後配置svscan 使得當系統啟動時候自動允許。編輯 /etc/inittab 文件將下面一行加入文件最後(注意是在一行中):
SV:123456:respawn:env - PATH=/usr/local/bin:/usr/sbin:/usr/bin:/bin svscan /service /dev/console 2>/dev/console
然後執行下面命令重新讀人/etc/inittab:
kill -HUP 1
可以使用"ps -ef grep svscan" 或者 "ps waux grep svscan" 證實svscan 正在運行。
啟動qmail
2.8.1. /var/qmail/rc
編輯產生/var/qmail/rc文件將下面命令進入其中
#!/bin/sh
# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default
exec env - PATH="/var/qmail/bin:$PATH"
qmail-start "`cat /var/qmail/control/defaultdelivery`"
chmod 755 /var/qmail/rc
mkdir /var/log/qmail
在qmail中,支持三種郵件存儲方式,分別是典型的/var/spool/mail方式、傳統的Unix user/Mailbox方式和新的 user/Maildir方式,其中前兩種方式為大多數的郵件客戶端所支持,但是它們均存在安全上的隱患,所以在這裡使用了第三種方式,下面分別敘述三種方式的建立方法:
/var/spool/mail 方式
#cp /var/qmail/boot/proc /var/qmail/rc
user/Mailbox 方式
#cp /var/qmail/boot/home /var/qmail/rc
user/Maildir 方式
1)#cp /var/qmail/boot/home /var/qmail/rc
2)建立相應的郵件用戶,例如:
#useradd test
#passwd test
3)使用qmail提供的工具建立Maildir,命令如下:
$ /var/qmail/bin/maildirmake Maildir
$ echo ./Maildir/ >.qmail
(注意這裡必須以用戶權限建立郵箱)
4) 為了使root用戶也能收發郵件,使用如下命令:
# su alias
$ cd
$ /var/qmail/bin/maildirmake Maildir
$ echo ./Maildir/ >.qmail
# echo ./Mailbox/ >/var/qmail/control/defaultdelivery
系統start-up 文件
生成qmailctl 腳本
#!/bin/sh
# For Red Hat chkconfig
# chkconfig: - 30 80
# description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
eXPort PATH
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
case "$1" in
start)
echo "Starting qmail"
if svok /service/qmail-send ; then
svc -u /service/qmail-send
else
echo qmail-send service not running
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd
else
echo qmail-smtpd service not running
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -d /service/qmail-smtpd
echo " qmail-send"
svc -d /service/qmail-send
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
qmail-qstat
;;
doqueuealrmflush)
echo "Sending ALRM signal to qmail-send."
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reloadhup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
echo "Reloaded /etc/tcp.smtp."
;;
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
echo "Reloaded /etc/tcp.smtp."
;;
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
echo "Reloaded /etc/tcp.smtp."
;;