系统管理指南:网络服务

邮件服务程序和文件

邮件服务包括许多彼此交互的程序和守护进程。本节介绍了与管理电子邮件相关的文件、程序、术语和概念。

vacation 实用程序的增强功能

从 Solaris 10 发行版开始,vacation 实用程序进行了增强,允许用户指定哪些传入邮件可以接收自动生成的回复。使用此增强功能,用户可以避免与不认识的人共享机密信息或联系人信息。来自垃圾邮件发件人或不认识的人的邮件将不会收到回复。

此增强功能可将传入的发件人电子邮件地址与 .vacation.filter 文件中的域或电子邮件地址的列表进行比较。该文件由用户创建,并保存在用户的起始目录中。如果找到了匹配的域或电子邮件地址,则会发送回复。如果没有找到,则不发送回复。

.vacation.filter 可能包含以下类似项:


company.com

mydomain.com

onefriend@hisisp.com

anotherfriend@herisp.com

请注意,每一行包含一个域或一个电子邮件地址。每项必须位于单独的一行中。要使发件人的电子邮件地址与某个电子邮件地址项匹配,除大小写之外,该匹配必须是精确匹配。发件人地址中的字母是大写还是小写将会忽略。要使发件人的电子邮件地址与某个域项匹配,该发件人的地址必须包含列出的域。例如,somebody@dept.company.comsomeone@company.com 都可与域项 company.com 匹配。

有关更多信息,请参见 vacation(1) 手册页。

/usr/bin 目录的内容

下表显示了用于邮件服务的 /usr/bin 目录的内容。

名称 

类型 

说明 

aliasadm

文件 

用于处理 NIS+ 别名映射的程序。 

mail

文件 

用户代理。 

mailcompat

文件 

用于以 SunOS 4.1 邮箱格式存储邮件的过滤器。 

mailq

文件 

用于列出邮件队列内容的程序。 

mailstats

文件 

用于读取 /etc/mail/statistics 文件(如果存在)中存储的邮件统计信息的程序。

mailx

文件 

用户代理。 

mconnect

文件 

用于连接至邮件程序以进行地址验证和调试的程序。 

praliases

文件 

用于“取消编译”别名数据库的命令。请参阅 praliases(1) 手册页中提供的取消编译信息。

rmail

符号链接 

指向 /usr/bin/mail 的符号链接。通常用于仅允许发送邮件的命令。

vacation

文件 

用于设置自动回复邮件的命令。 

/etc/mail 目录的内容

下表显示了 /etc/mail 目录的内容。

名称 

类型 

说明 

Mail.rc

文件 

mailx 用户代理的缺省设置。

aliases

文件 

邮件转发信息。 

aliases.db

文件 

通过运行 newaliases 创建的缺省二进制形式的邮件转发信息。

aliases.dir

文件 

通过运行 newaliases 创建的二进制形式的邮件转发信息。仍然可以使用,但从 Solaris 9 发行版开始,缺省情况下不会再使用该文件。

aliases.pag

文件 

通过运行 newaliases 创建的二进制形式的邮件转发信息。仍然可以使用,但从 Solaris 9 发行版开始,缺省情况下不会再使用该文件。

mailx.rc

文件 

mailx 用户代理的缺省设置。

main.cf

符号链接 

提供从主系统的此样例配置文件到 sendmail.cf 的符号链接是为了实现向下兼容。在 sendmail 版本 8.13 中,无需此文件。

relay-domains

文件 

允许进行中继的所有域的列表。缺省情况下,仅本地域允许进行中继。 

sendmail.cf

文件 

用于邮件路由的配置文件。 

submit.cf

文件 

用于邮件提交程序 (mail submission program, MSP) 的新配置文件。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf

local-host-names

文件 

在邮件主机的别名数太长时可以创建的可选文件。 

helpfile

文件 

SMTP HELP 命令使用的帮助文件。

sendmail.pid

文件 

用于列出侦听守护进程的 PID 并且现在位于 /var/run 中的文件。

statistics

文件 

sendmail 统计文件。如果存在此文件,sendmail 会记录通过每个邮件程序的流量。以前,此文件名为 sendmail.st

subsidiary.cf

符号链接 

提供从辅助系统的此样例配置文件到 sendmail.cf 的符号链接是为了实现向下兼容。在 sendmail 版本 8.13 中,无需此文件。

trusted-users

文件 

用于列出执行某些邮件操作时可信任的用户(每行一个用户)的文件。缺省情况下,此文件中仅包含 root。不可信用户执行某些邮件操作时,将产生以下警告 X-Authentication-Warning:header being added to a message

/etc/mail/cf 目录的内容

/etc/mail 目录中有一个子目录 cf,其中包含生成 sendmail.cf 文件所需的全部文件。表 14–9 中显示了 cf 的内容。

从 Solaris 10 发行版开始,为支持只读的 /usr 文件系统,/usr/lib/mail 目录的内容已移至 /etc/mail/cf 目录。但是,请注意以下例外情况。Shell 脚本 /usr/lib/mail/sh/check-hostname/usr/lib/mail/sh/check-permissions 现在位于 /usr/sbin 目录中。请参见用于邮件服务的其他文件。为了实现向下兼容,符号链接指向每个文件的新位置。

表 14–9 用于邮件服务的 /etc/mail/cf 目录的内容

名称 

类型 

说明 

README

文件 

介绍配置文件。 

cf/main.mc

文件 

以前名为 cf/main-v7sun.mc。它是主配置文件。

cf/Makefile

文件 

提供生成新配置文件的规则。 

cf/submit.mc

文件 

邮件提交程序 (mail submission program, MSP) 的配置文件,用于提交邮件。 

cf/subsidiary.mc

文件 

以前名为 cf/subsidiary-v7sun.mc。它是 NFS 挂载了其他主机中的 /var/mail 的主机的配置文件。

domain

目录 

提供与站点有关的子域说明。 

domain/generic.m4

文件 

来自 Berkeley 软件分发机构的普通域文件。 

domain/solaris-antispam.m4

文件 

域文件,可将 sendmail 的功能更改为类似于以前的 Solaris 版本的 sendmail。但是完全禁用了中继,因此将拒绝没有主机名的发件人地址和无法解析的域。

domain/solaris-generic.m4

文件 

缺省的域文件,可将 sendmail 的功能更改为类似于以前的 Solaris 版本的 sendmail

feature

目录 

包含对特定主机的特定功能的定义。有关这些功能的完整说明,请参见 README

m4

目录 

包含与站点无关的头文件。 

mailer

目录 

包含邮件程序的定义,包括 localsmtpuucp 的定义。

ostype

目录 

介绍各种操作系统环境。 

ostype/solaris2.m4

文件 

用于将缺省的本地邮件程序定义为 mail.local

ostype/solaris2.ml.m4

文件 

用于将缺省的本地邮件程序定义为 mail.local

ostype/solaris2.pre5.m4

文件 

用于将本地邮件程序定义为 mail

ostype/solaris8.m4

文件 

用于将本地邮件程序定义为 mail.local(在 LMTP 模式下),启用 IPv6,将 /var/run 指定为 sendmail.pid 文件的目录。

/usr/lib 目录的内容

下表显示了用于邮件服务的 /usr/lib 目录的内容。

表 14–10 /usr/lib 目录的内容

名称 

类型 

说明 

mail.local

文件 

用于将邮件传送到邮箱的邮件程序。 

sendmail

文件 

路由程序,也称为邮件传输代理。 

smrsh

文件 

Shell 程序(限制 sendmail 的 shell),该程序使用 sendmail“|program” 语法将 sendmail 可以运行的程序限制为 /var/adm/sm.bin 目录中列出的程序。有关对 /var/adm/sm.bin 中所包括内容的建议,请参阅 smrsh(1M) 手册页。要启用该程序,请在 mc 文件中包括此 m4 命令 FEATURE(`smrsh')。

mail

符号链接 

指向 /etc/mail/cf 目录的符号链接。有关更多信息,请参阅/etc/mail/cf 目录的内容

用于邮件服务的其他文件

表 14–11 所示,还有几个其他文件和目录可用于邮件服务。

表 14–11 用于邮件服务的其他文件

名称 

类型 

说明 

/etc/default/sendmail

文件 

用于列出 sendmail 的启动脚本的环境变量。

/etc/shells

文件 

用于列出有效的登录 shell。 

/etc/mail/cf/sh

目录 

包含 m4 生成过程和迁移帮助使用的 shell 脚本。

/usr/sbin/check-permissions

文件 

用于检查 :include: 别名的权限以及 .forward 文件及其父目录路径是否具有正确权限。

/usr/sbin/check-hostname

文件 

用于验证 sendmail 是否可确定全限定主机名。

/usr/sbin/editmap

文件 

在数据库映射中查询和编辑用于 sendmail 的单个记录。

/usr/sbin/in.comsat

文件 

邮件通知守护进程。 

/usr/sbin/makemap

文件 

生成二进制形式的加密映射。 

/usr/sbin/newaliases

符号链接 

指向 /usr/lib/sendmail 的符号链接。用于创建二进制形式的别名数据库。以前位于 /usr/bin 中。

/usr/sbin/syslogd

文件 

sendmail 使用的错误消息记录程序。

/usr/sbin/etrn

文件 

用于启动客户端远程邮件队列的 Perl 脚本。 

/usr/dt/bin/dtmail

文件 

CDE(公用桌面环境)邮件用户代理 

/var/mail/mailbox1, /var/mail/mailbox2

文件 

用于已传送邮件的邮箱。 

/var/spool/clientmqueue

目录 

客户机守护进程传送的邮件的存储器。 

/var/spool/mqueue

目录 

主守护进程传送的邮件的存储器。 

/var/run/sendmail.pid

文件 

用于列出侦听守护进程的 PID 的文件。 

邮件程序的交互

邮件服务由以下程序的组合提供,这些程序按图 14–2 的简图中所示进行交互。

图 14–2 邮件程序的交互

文中对该图形进行了说明。

下面对邮件程序的交互进行了说明。

  1. 用户使用程序(如 mailx)发送邮件。有关更多信息,请参见 mailx(1) 手册页。

  2. 邮件由生成它的程序收集,然后传递给 sendmail 守护进程。

  3. sendmail 守护进程解析邮件中的地址(将其划分为可识别的段)。该守护进程使用配置文件 /etc/mail/sendmail.cf 中的信息来确定网络名的语法、别名、转发信息和网络拓扑。通过使用此信息,sendmail 可以确定邮件要到达收件人所必须采用的路由。

  4. sendmail 守护进程将邮件传递给相应系统。

  5. 本地系统中的 /usr/lib/mail.local 程序将邮件传送至邮件收件人在 /var/mail/ username 目录中的邮箱。

  6. 通知收件人邮件已到达,收件人使用 mailmailx 或类似程序检索邮件。

sendmail 程序

以下列表介绍了 sendmail 程序的一些功能。

Solaris 操作系统使用 sendmail 程序作为邮件路由器。以下列表介绍了该程序的一些功能。

有关 sendmail 程序的更多信息,请参阅以下主题。

sendmail 及其重新路由机制

sendmail 程序支持三种邮件重新路由机制。您选择的机制取决于涉及的更改类型。

此外,您选择的重新路由机制还会影响所需要的管理级别。请考虑以下选项。

  1. 一种重新路由机制是别名

    根据使用的文件类型,别名可在服务器范围内或名称服务范围内将名称映射为地址。

    请考虑名称服务别名的以下优点和缺点。

    • 使用名称服务别名文件允许从单个源中管理邮件重新路由更改。但是传播重新路由更改时,名称服务别名会产生延迟时间。

    • 名称服务管理通常限制为一组选定的系统管理员。普通用户将不能管理此文件。

    请考虑使用服务器别名文件的以下优点和缺点。

    • 通过使用服务器别名文件,指定的服务器上能够成为 root 的任何用户都可管理重新路由。

    • 传播重新路由更改时,服务器别名会产生很短的延迟时间或消除延迟时间。

    • 更改仅会影响本地服务器,这在大多数邮件都发送至一台服务器时可以接受。但是,如果需要将此更改传播至许多邮件服务器,请使用名称服务。

    • 普通用户将不能管理此更改。

    有关更多信息,请参阅本章中的邮件别名文件。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)

  2. 第二种机制是转发

    通过此机制,用户可以管理邮件重新路由。本地用户可将其传入邮件重新路由至以下位置。

    • 其他邮箱

    • 不同的邮件程序

    • 其他邮件主机

    通过使用 .forward 文件可支持此机制。有关这些文件的更多信息,请参阅本章中的.forward 文件。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理 .forward 文件(任务列表)

  3. 最后一种重新路由机制是包含

    通过此机制,用户可维护别名列表而不会要求 root 访问。要提供此功能,root 用户必须在服务器上的别名文件中创建相应的项。创建该项之后,用户即可根据需要重新路由邮件。有关包含的更多信息,请参阅本章中的/etc/mail/aliases 文件。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)


    注 –

    读取邮件的程序(如 /usr/bin/mailx)可以有自己的别名,该别名在邮件到达 sendmail 之前会进行扩展。sendmail 的别名可以来自许多名称服务源,如本地文件、NIS 或 NIS+。查找的顺序由 nsswitch.conf 文件确定。请参阅 nsswitch.conf(4) 手册页。


sendmail 功能

sendmail 程序提供了以下功能。

sendmail 配置文件

配置文件控制 sendmail 执行其功能的方法。配置文件可确定要选择的传送代理、地址重写规则以及邮件头格式。sendmail 程序使用 /etc/mail/sendmail.cf 文件中的信息来执行其功能。

Solaris 操作系统在 /etc/mail 目录中提供了两个缺省配置文件。

  1. sendmail.cf,用于在守护进程模式下运行 sendmail 的配置文件。

  2. submit.cf,用于在邮件提交程序模式而非守护进程模式下运行 sendmail 的配置文件。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf

设置邮件客户机、邮件服务器、邮件主机或邮件网关时,请考虑以下情况:

以下列表介绍了可以根据站点的要求来更改的一些配置参数。

邮件别名文件

可以使用以下任何文件、映射或表来维护别名。

维护别名的方法取决于使用别名的用户以及需要可更改别名的用户。每种别名类型都具有唯一的格式要求。

如果要查找任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)

.mailrc 别名

.mailrc 文件中列出的别名仅能由拥有该文件的用户进行访问。借助此限制,用户可以建立由其控制并且仅能由属主使用的别名文件。.mailrc 文件中的别名遵循以下格式。


alias aliasname value value value ...

aliasname 是用户在发送邮件时使用的名称,value 是有效的电子邮件地址。

如果用户为 scott 建立的个人别名在名称服务中与 scott 的电子邮件地址不匹配,则会出现错误。人们尝试回复此用户生成的邮件时,邮件会路由至错误的人员。唯一的解决方法是使用其他任一别名机制。

/etc/mail/aliases 文件

知道别名名称和包含该文件的系统的主机名的任何用户都可以使用 /etc/mail/aliases 文件中建立的任何别名。本地 /etc/mail/aliases 文件中的分发列表格式遵循以下格式。


aliasname: value,value,value ...

aliasname 是用户向此别名发送邮件时使用的名称,value 是有效的电子邮件地址。

如果网络未运行名称服务,则每个系统的 /etc/mail/aliases 文件都应包含用于所有邮件客户机的项。可以在每个系统中编辑该文件,也可在一个系统中编辑该文件,然后再将其复制到其他所有系统中。

/etc/mail/aliases 文件中的别名以文本形式存储。编辑 /etc/mail/aliases 文件时,需要运行 newaliases 程序。此程序将重新编译数据库并使别名可以二进制形式供 sendmail 程序使用。有关任务信息,请参阅第 13 章,邮件服务(任务)中的如何设置本地邮件别名文件。或者,也可以使用 Solaris Management Console 中的邮递列表功能来管理本地 /etc 文件中存储的邮件别名。

可以仅为本地名称(当前主机名或无主机名)创建别名。例如,如果用户 ignatz 在系统 saturn 中有一个邮箱,则 /etc/mail/aliases 文件中可包含该用户的以下别名项。


ignatz: ignatz@saturn

应为每台邮件服务器创建一个管理帐户。创建此类帐户的方法是在邮件服务器上为 root 指定一个邮箱并在 /etc/mail/aliases 文件中为 root 添加一项。例如,如果系统 saturn 是邮箱服务器,则可向 /etc/mail/aliases 文件中添加项 root: sysadmin@saturn

通常,仅有 root 用户才能编辑此文件。但是,使用 Solaris Management Console 时,组 14(sysadmin 组)中的所有用户都可以更改该本地文件。另外,还可选择创建以下项。


aliasname: :include:/path/aliasfile

aliasname 是用户在发送邮件时使用的名称,/path/aliasfile 是包含别名列表的文件的全路径。该别名文件应包括电子邮件项(每行一项),并且不包括任何其他符号。


user1@host1

user2@host2

可在 /etc/mail/aliases 中定义附加的邮件文件,以保留日志或备份副本。 以下项会将发送给 aliasname 的所有邮件都存储在 filename 中。


aliasname: /home/backup/filename

另外,还可以将邮件路由至其他进程。以下示例将邮件副本存储在 filename 中并列显副本。


aliasname: "|tee -a /home/backup/filename |lp"

有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)

NIS aliases 映射

本地域中的所有用户都可以使用 NIS aliases 映射中的各项。原因是 sendmail 程序可以使用 NIS aliases 映射而非本地 /etc/mail/aliases 文件来确定邮件地址。有关更多信息,请参阅 nsswitch.conf(4) 手册页。

NIS aliases 映射中的别名遵循以下格式。


aliasname: value,value,value ...

aliasname 是用户发送邮件时使用的名称,value 是有效的电子邮件地址。

NIS aliases 映射应包含用于所有邮件客户机的各项。通常,仅有主 NIS 中的超级用户才能更改这些项。对于经常更改的别名,最好不要选择此类型。但是,如果这些别名指向其他别名文件,则这类别名将很有用,如以下语法示例所示。


aliasname: aliasname@host

aliasname 是用户发送邮件时使用的名称,host 是包含 /etc/mail/alias 文件的服务器的主机名。

有关任务信息,请参阅第 13 章,邮件服务(任务)中的如何设置 NIS mail.aliases 映射

NIS+ mail_aliases

NIS+ mail_aliases 表包含在本地域中用于标识系统或个人的名称。sendmail 程序可以使用 NIS+ mail_aliases 表而非本地 /etc/mail/aliases 文件来确定邮件地址。有关更多信息,请参阅 aliasadm(1M)nsswitch.conf(4) 手册页。

NIS+ mail_aliases 表中的别名遵循以下格式:


alias: expansion # ["options" # "comments"]

表 14–12 介绍了 NIS+ mail_aliases 表中的四列。

表 14–12 NIS+ mail_aliases 表的各列

列 

说明 

alias

别名的名称 

expansion

别名或别名列表的值,与 sendmail /etc/mail/aliases 文件中显示的值类似

options

保留供将来使用的列 

comments

有关单个别名的注释列 

NIS+ mail_aliases 表应包含用于所有邮件客户机的项。可以使用 aliasadm 命令列出、创建、修改和删除 NIS+ aliases 表中的各项。要使用 aliasadm 命令,您必须是拥有 aliases 表的 NIS+ 组的成员。有关任务信息,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)。或者,也可以使用 Solaris Management Console 来管理 NIS+ 邮件别名。


注 –

如果要创建新的 NIS+ aliases 表,必须在创建项之前先初始化该表。如果该表已存在,则无需进行初始化。


.forward 文件

用户可在其起始目录中创建一个 .forward 文件,以供 sendmail 以及其他程序用于重定向邮件或发送邮件。请参阅以下主题。

有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理 .forward 文件(任务列表)

应避免的情况

以下列表介绍了可以避免或轻松解决问题的一些情况。

.forward 文件的控制

要使 .forward 文件成为邮件传送中的有效部分,请确保正确应用以下控制(主要是权限设置)。

.forward.hostname 文件

可以创建一个 .forward.hostname 文件,以重定向发送至特定主机的邮件。例如,如果用户的别名已从 sandy@phoenix.example.com 更改为 sandy@example.com,请在 sandy 的起始目录中放入一个 .forward.phoenix 文件。


% cat .forward.phoenix

sandy@example.com

"|/usr/bin/vacation sandy"

% cat .vacation.msg

From: sandy@example.com (via the vacation program)

Subject: my alias has changed



My alias has changed to sandy@example.com.

Please use this alias in the future.

The mail that I just received from you

has been forwarded to my new address.



Sandy

在本示例中,在通知发件人发生别名更改后,可将邮件转发至正确地址。由于 vacation 程序仅允许一个邮件文件,因此每次仅能转发一封邮件。但是,如果邮件不是特定于主机,则 .forward 文件可将一个休假邮件文件用于多台主机。

.forward+detail 文件

对转发机制的另一种扩展是 .forward+ detail 文件。detail 字符串可以是除运算符字符之外的任意字符序列。运算符字符包括 .:%&!^[]+。通过使用此类型的文件,可以确定是否有其他人在您不知情的情况下使用您的电子邮件地址。例如,如果某个用户告诉其他人使用电子邮件地址 sandy+test1@example.com,该用户将能够识别将来传送给此别名的任何邮件。缺省情况下,将根据别名和 .forward+detail 文件对发送至 sandy+test1@example.com 别名的所有邮件进行检查。如果未找到任何匹配项,邮件将转而传送至 sandy@example.com,但用户可以看到 To: 邮件头中的更改。

/etc/default/sendmail 文件

此文件用于存储 sendmail 的启动选项,以免在升级主机时删除这些选项。可以使用以下变量。

CLIENTOPTIONS=“string

选择要用于客户机守护进程的其他选项,该守护进程会查看仅客户机队列 (/var/spool/clientmqueue) 并可用作客户机队列运行程序。不会进行任何语法检查,因此在更改此变量时请务必小心。

CLIENTQUEUEINTERVAL=#

QUEUEINTERVAL 选项类似,CLIENTQUEUEINTERVAL 用于设置邮件队列运行的时间间隔。但是,CLIENTQUEUEINTERVAL 选项将控制客户机守护进程的功能而非主守护进程的功能。通常,主守护进程可将所有邮件都传送至 SMTP 端口。但是,如果邮件负荷过高或主守护进程未运行,则邮件会进入仅客户机队列 /var/spool/clientmqueue。然后,检查仅客户机队列的客户机守护进程将用作客户机队列处理器。

ETRN_HOSTS=“string

可使 SMTP 客户机和服务器立即交互,而无需等待达到队列运行间隔,该间隔是固定的。服务器可以立即传送队列中转至指定主机的部分。有关更多信息,请参阅 etrn(1M) 手册页。

MODE=-bd

选择用于启动 sendmail 的模式。使用 -bd 选项或不予以定义。

OPTIONS=string

选择要用于主守护进程的其他选项。不会进行任何语法检查,因此在更改此变量时请务必小心。

QUEUEINTERVAL=#

设置邮件队列在主守护进程中的运行间隔。# 可以是一个正整数,后跟 s(秒)、m(分钟)、h(小时)、d(天)或 w(星期)。在启动 sendmail 之前会先检查语法。如果间隔为负或者该项不是以合适字母结尾,则会忽视该间隔,sendmail 将以 15 分钟的队列间隔启动。

QUEUEOPTIONS=p

启用一个在队列运行间隔之间休眠的持久性队列运行程序,而不是为每个队列运行间隔启用一个新队列运行程序。可将此选项设置为 p,这是唯一可用的设置。否则,将不设置此选项。