当前位置:Linux教程 - Ldap - Qmail+LDAP安装配置实例<一>

Qmail+LDAP安装配置实例<一>

万月亮:[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
;;
doqueue|alrm|flush)
echo ""Sending ALRM signal to qmail-send.""
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
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.""
;;
help)
cat < stop -- stops mail service (smtp connections refused, nothing goes out)
start -- starts mail service (smtp connection accepted, mail can go out)
pause -- temporarily stops mail service (connections accepted, nothing leaves)
cont -- continues paused mail service
stat -- displays status of mail service
cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo ""Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}""
exit 1
;;
esac

exit 0

此脚本可以通过http://www.lifewithqmail.org/qmailctl-script-dt70获得
使用vi 生成/var/qmail/bin/qmailctl基本将上面内容放入其中, 然后将其安装在
/etc/init.d
/etc/rc.d/init.d
执行下面命令,产生链接:
ln -s ../init.d/qmail /etc/rc0.d/K30qmail
ln -s ../init.d/qmail /etc/rc1.d/K30qmail
ln -s ../init.d/qmail /etc/rc2.d/S80qmail
ln -s ../init.d/qmail /etc/rc3.d/S80qmail
ln -s ../init.d/qmail /etc/rc4.d/S80qmail
ln -s ../init.d/qmail /etc/rc5.d/S80qmail
ln -s ../init.d/qmail /etc/rc6.d/K30qmail
ln -s /var/qmail/bin/qmailctl /etc/init.d/qmail
使得脚本可以执行 qmailctl且进入系统命令中
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin
supervise 基本
现在产生qmail services目录:
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
chmod +t /var/qmail/supervise/qmail-send
chmod +t /var/qmail/supervise/qmail-smtpd
生成/var/qmail/supervise/qmail-send/run 文件:
#!/bin/sh
exec /var/qmail/rc
生成/var/qmail/supervise/qmail-send/log/run 文件:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail
生成 /var/qmail/supervise/qmail-smtpd/run 文件:
#!/bin/sh
QMAILDUID=``id -u qmaild``
NOFILESGID=``id -g qmaild``
MAXSMTPD=``cat /var/qmail/control/concurrencyincoming``
exec /usr/local/bin/tcpserver -v -R -l 0 -x /etc/tcp.smtp.cdb -c ""$MAXSMTPD""
-u ""$QMAILDUID"" -g ""$NOFILESGID"" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
生成concurrencyincoming 控制文件:
echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
生成/var/qmail/supervise/qmail-smtpd/log/run 文件:
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
使得所生成的脚本可执行:
chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
建立log 目录:
mkdir -p /var/log/qmail/smtpd
chown qmaill /var/log/qmail /var/log/qmail/smtpd
将supervise 链接到/service:
ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service
注: qmail 系统应该自动起来。如果不想此时候启动,执行:
qmailctl stop''