分类:
2009-04-12 14:35:03
|
许英杰 (), UNIX 技术支持工程师, 国际商业机器科技(深圳)有限公司
2008 年 9 月 04 日
Sendmail 是在 UNIX/Linux 平台下被广泛应用的 E-mail 邮件服务器,作为一种免费软件,它的稳定性和可移植性,一直就受到广大系统管理员的青睐。另外一方面,它也有一个重要缺点就是安全性较差。Internet 用户的要求比较高,所以系统管理员应当足够重视这方面。而最主要的修补手段就是从 Sendmail 官方网站 () 下载并编译安装最新稳定版本(目前的版本是 v8.14.3)。本文主要介绍如何在 AIX 平台上编译安装 Sendmail 以及相关的技巧与排错。
Sendmail 软件是在 UNIX/Linux 平台下被广泛应用的邮件服务器系统,如在 IBM AIX 平台下的 bos.net.tcp.client 文件集就已经内置包括了 Sendmail v8.11.6p2(AIX 5.2), Sendmail v8.13.4 (AIX 5.3)。但是另外一方面 Sendmail 的安全性较差,由于邮件系统需要处理的是外部发送来的各种各样的信息,甚至包含一些恶意数据,然而 Sendmail 在大多数系统中都是以 root 身份运行,一旦出现问题,就会对系统安全造成严重影响。所以对于 Sendmail 的安全问题必须得到 UNIX 系统管理员的重视,而最主要的修补手段就是安装新版本的 Sendmail。
由于 IBM 并不提供编译过后的 bff 或者 rpm for AIX 的 Sendmail 安装包,通过对 AIX 的 Technology Level 及 Service Pack 的升级也不会提高其内置 Sendmail 的版本。所以我们只能自行从 Sendmail 官方网站 () 下载并编译安装最新稳定版本(目前的版本是 v8.14.3)
|
为了在 AIX 平台下成功编译 Sendmail 源码,我们必须先准备好编译器以及相应 AIX 环境参数。在 IBM 平台下有两种编 C++ 译器,一种是需要付费购买的 XLC 或者 VAC,另外一种就是免费的开源 GCC g++ 编译器。本文中就采用这种免费的 GCC 编译器来安装 Sendmail。注意:以下安装操作都在 root 系统管理员用户下完成。
GCC g++ 编译器:
AIX 5.2 平台:pware.gcc-g++.4.2.4.0.bff.gz
下载地址:
AIX 5.3 平台:pware53.gcc-g++.4.2.4.0.bff.gz
下载地址:
Sendmail v8.14.3 软件:sendmail.8.14.3.tar.gz
下载地址:ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.14.3.tar.gz
采用 FTP 或者其它方式把这些软件包传到拟安装 Sendmail 的主机上,如 /tmp/sendmail 目录下,并且使用相关命令进行解压:
# gunzip -d pware.gcc-g++.4.2.4.0.bff.gz (AIX 5.2) # gunzip -d pware53.gcc-g++.4.2.4.0.bff.gz (AIX 5.3) # gunzip -d sendmail.8.14.3.tar.gz # tar -xvf sendmail.8.14.3.tar |
自从 Sendmail v8.12.0 以后,Sendmail 的编译安装、后台进程运行都需要一个专用组和用户名:smmsp。(AIX 5.3 内置版本是 v8.13.4,但是它并没有使用 smmsp 用户)
使用 smitty group 和 smitty user 命令分别创建名为 smmsp 的组和 smmsp 的用户,smmsp 用户属于 smmsp 组。由于该用户仅用于 Sendmail 后台服务进程使用,且为了安全起见,系统管理员可以把“User can LOGIN”和“User can LOGIN REMOTELY(rsh,tn,rlogin)”设置为 false,禁止有人使用该用户 ID 直接登陆系统。以下为使用 SMIT 创建用户的实例。
Add a User Type or select values in entry fields. Press Enter AFTER making all desired changes. [TOP] [Entry Fields] * User NAME [smmsp] User ID [] # ADMINISTRATIVE USER? false + Primary GROUP [smmsp] + Group SET [staff,smmsp] + ADMINISTRATIVE GROUPS [] + ROLES [] + Another user can SU TO USER? true + SU GROUPS [ALL] + HOME directory [/home/smmsp] Initial PROGRAM [] User INFORMATION [This user is belong to Sendmail.] EXPIRATION date (MMDDhhmmyy) [0] Is this user ACCOUNT LOCKED? false + User can LOGIN? false + User can LOGIN REMOTELY(rsh,tn,rlogin)? false + Allowed LOGIN TIMES [] Number of FAILED LOGINS before [0] # user account is locked Login AUTHENTICATION GRAMMAR [compat] Valid TTYs [ALL] Days to WARN USER before password expires [0] # Password CHECK METHODS [] Password DICTIONARY FILES [] NUMBER OF PASSWORDS before reuse [0] # WEEKS before password reuse [0] # Weeks between password EXPIRATION and LOCKOUT [-1] Password MAX. AGE [0] # Password MIN. AGE [0] # [MORE...22] F1=Help F2=Refresh F3=Cancel F4=List Esc+5=Reset Esc+6=Command Esc+7=Edit Esc+8=Image Esc+9=Shell Esc+0=Exit Enter=Do |
另外要把 /etc/passwd 中 smmsp 中这行的“*”改成“!”,使其激活该用户 ID,如下:
# cat /etc/passwd |grep smmsp smmsp:!:207:205:This user is belong to Sendmail.:/home/smmsp:/usr/bin/ksh |
由于 GCC g++ 编译器默认安装路径在 /opt,所以需要适当调整 /opt 文件系统的大小,使其保证空余空间大于 256MB。
另外备份 AIX 原内置 Sendmail 相关文件:
# mkdir /tmp/sendmail/bak # 创建备份目录 # cp -R /usr/sbin/sendmail /tmp/sendmail/bak # cp -pR /etc/mail /tmp/sendmail/bak |
|
进入 GCC g++ bff 安装包的目录,直接通过 smitty installp 进行安装,在这里不做过多叙述。
然后修改相关环境变量,如果系统管理员以后仍然要使用该编译器,可以把该信息加入到 /etc/profile 文件内。
# export PATH=$PATH:/usr/local/bin # export LIBPATH=$LIBPATH:/usr/local/lib # export MANPATH=$MANPATH:/usr/local/man |
# cd /tmp/sendmail/sendmail-8.14.3 # 这个目录由 sendmail v8.14.3 解压后产生
# cd devtools/OS
# chmod +w AIX.5.3 # 如果是 AIX 5.2 平台请修改“AIX .5.2”文件的属性
# vi AIX.5.3 # 如果是 AIX 5.2 平台请编辑“AIX .5.2”文件
# 修改这一行 : “define(`confCC', `/usr/vac/bin/xlc')”为 :
define(`confCC', `gcc')
保存退出。
# cd ../.. # 回到 sendmail-8.14.3 解压后目录 .
# sh Build # 开始编译,在编译过程中请注意请忽略类似以下错误提示 :
……( 省略 ) Making dependencies in /tmp/sendmail/sendmail-8.14.3/obj.AIX.5.3.7.PPC/vacation rm -f sm_os.h ln -f -s ../../include/sm/os/sm_os_aix.h sm_os.h for i in vacation.c ; do gcc -M -E -I. -I../../sendmail -I../../include -DNDBM -DNIS -DMAP_REGEX -D_AIX5=50300 -DNOT_SENDMAIL $i > /dev/null; cat `basename $i .c`.u >> Makefile ; rm -f `basename $i .c`.u ; done; cat: cannot open vacation.u make: The error code from the last command is 2. Stop. |
# mkdir /var/spool/clientmqueue # 如果这个目录不存在请手动创建它
# chown -R smmsp:smmsp /var/spool/clientmqueue
# chmod 770 /var/spool/clientmqueue
# sh Build install # 继续编译安装
在编译的最后阶段您可以看到如输出信息,表示安装已经成功 :
…… ( 省略 ) Making all in: /tmp/sendmail/sendmail-8.14.3/vacation Configuration: pfx=, os=AIX, rel=5.3.7, rbase=5, rroot=5.3, arch=PPC, sfx=, variant=optimized Making in /tmp/sendmail/sendmail-8.14.3/obj.AIX.5.3.7.PPC/vacation /usr/ucb/install -c -o bin -g bin -m 555 vacation /usr/bin /usr/ucb/install -c -o bin -g bin -m 444 vacation.0 /usr/share/man/cat1/vacation.1 Target "install" is up to date. |
由于 AIX 平台原已内置安装 Sendmail 软件并且成为了后台服务,所以在编译安装新版本以后必须要重启这个服务:
[xyztest:root:/tmp/sendmail/sendmail-8.14.3:] sendmail -d0 Version 8.14.3 Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NDBM NETINET NETUNIX NIS PIPELINING SCANF XDEBUG ============ SYSTEM IDENTITY (after readcf) ============ (short domain name) $w = xyztest (canonical domain name) $j = xyztest.test.ibm.com (subdomain name) $m = test.ibm.com (node name) $k = xyztest ======================================================== |
表示您已经成功地安装了 Sendmail v8.14.3
如果 Sendmail 安装运行正常,稍等片刻,在您的邮箱中就可以收到该邮件了。
另外您还可以使用这个命令发送邮件:mail -v your_mail_address,您可以看到如下非常详细的邮件发送信息:
xuyingj@cn.ibm.com... Connecting to [127.0.0.1] via relay... 220 testforme ESMTP Sendmail Wed, 25 Jun 2008 04:20:06 -0500 >>> EHLO testforme 250-testforme Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-EXPN 250-VERB 250-8BITMIME 250-SIZE 250-DSN 250-ONEX 250-ETRN 250-XUSR 250 HELP >>> VERB 250 2.0.0 Verbose mode >>> MAIL From: |
|
……( 省略 ) # Start up the sendmail daemon. # # Sendmail will automatically build the configuration and alias # data bases the first time it is invoked. You may wish to update # the alias source file /usr/lib/aliases with local information, # and then rebuild the alias data base by issuing the command # "/usr/lib/sendmail -bi" or "/usr/ucb/newaliases". # # When the configuration or alias data bases are changed, the # sendmail daemon can be made to rebuild and re-read them by # issuing the command "kill -1 `cat /etc/sendmail.pid`" or, if # SRC was used to start the daemon, "refresh -s sendmail". # # The "qpi", or queue processing interval, determines how # frequently the daemon processes the message queue. # qpi=30m # 30 minute interval # start /usr/lib/sendmail "$src_running" "-bd -q${qpi}" # 请注意这一行开头并没有注释符“#” 则表示系统开机自动在后台启用 Sendmail。 |
# mail -v ql Subject: test Just a test . Cc: WARNING: The local host name (testserver) does not have a domain; fix $j in config file ql... Connecting to local... ql... Sent |
如何处理这种情况?
这种错误是由于 /etc/mail/sendmail.cf 文件中域名配置错误引起的。如果您的系统使用的是空域名,既没有域名,您可以采用如下方法解决:
# vi /etc/hosts
ipaddress hostname hostname. # 即在主机名后面再加一个点“.”
divert(0)dnl OSTYPE(aix5)dnl FEATURE(genericstable)dnl FEATURE(mailertable)dnl FEATURE(allmasquerade)dnl DOMAIN(generic)dnl define(`confSMTP_LOGIN_MSG', `$j Sendmail $b') MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp) |
# m4 ../m4/cf.m4 aix5.mc > /tmp/sendmail/mysendmail.cf # 开始编译 sendmail.cf 文件
# cp /tmp/sendmail/mysendmail.cf /etc/sendmail.cf # 复制该文件到系统 /etc 目录下
|
本文为读者简单介绍了在 AIX 平台下如何进行 GCC g++ 编译器的安装配置、Sendmail v8.14.3 的编译安装,以及相关需要注意的地方。对于 Sendmail 的功能细节,以及 sendmail.cf 的深入配置,本文没有提及,读者有兴趣的话可以参考下面的资源列表