Solaris のシステム管理 (第 3 巻)

メールサービスのプログラムとファイル

メールサービスには、相互に対応する数多くのプログラムやデーモンが含まれています。この節では、電子メールの管理に関するプログラムや用語、あるいは概念について述べます。表 35-5 には、メールサービスに使用する /usr/bin ディレクトリの内容を示します。

表 35-5 メールサービスに使用する /usr/bin ディレクトリの内容

名前 

形式 

説明 

aliasadm

ファイル 

NIS+ 別名マップを処理するプログラム 

mail

ファイル 

ユーザーエージェント 

mailcompat

ファイル 

メールを SunOS 4.1 メールボックスフォーマットに格納するフィルタ 

mailq

リンク 

/usr/lib/sendmail へのリンクで、メール待ち行列の表示に使用

mailstats

ファイル 

/etc/mail/sendmail.st ファイルに格納されたメール統計情報の読み込みに使用するプログラム (存在する場合のみ)

mailx

ファイル 

ユーザーエージェント 

mconnect

ファイル 

アドレスの検証とデバッグのためメールプログラムに接続するプログラム 

newaliases

リンク 

/usr/lib/sendmail へのリンクで、別名ファイルのバイナリ形式を作成するのに使用

praliases

ファイル 

エイリアスデータベースを表示するコマンド 

rmail

リンク 

/usr/bin/mail へのリンクで、メールの送信だけを許可するのによく使用されるコマンド

vacation

ファイル 

メールへの自動応答を設定するコマンド 

表 35-6 に、/etc/mail ディレクトリの内容を示します。

表 35-6 /etc/mail ディレクトリの内容

名前 

形式 

説明 

Mail.rc

ファイル 

mailtool ユーザーエージェントのデフォルトの設定値

aliases

ファイル 

メール転送情報 

aliases.dir

ファイル 

メール転送情報のバイナリ形式 (newaliases の実行によって作成される)

aliases.pag

ファイル 

メール転送情報のバイナリ形式 (newaliases の実行によって作成される)

mailx.rc

ファイル 

mailx ユーザーエージェントのデフォルトの設定値

main.cf

ファイル 

メインシステム用の構成ファイルの例 

relay-domains

ファイル 

リレーが可能なドメインの全リストが含まれている。デフォルトでは、ローカルドメインだけが使用できる 

sendmail.cf

ファイル 

メールルーティング用の構成ファイル 

sendmail.cw

ファイル 

メールホスト用の別名の数が多すぎるときに作成可能なオプションファイル 

sendmail.hf

ファイル 

SMTP HELP コマンドで使用するヘルプファイル

sendmail.pid

ファイル 

リスニングデーモンの PID を表示するファイル 

sendmail.st

ファイル 

sendmail 統計情報ファイル。このファイルが存在すると、sendmail は各メールプログラムのトラフィック量をログする

sendmailvars

ファイル 

sendmail.cf からの名前空間の検索用のマクロとクラス定義を格納する

subsidiary.cf

ファイル 

下位システムに対する構成ファイルの例

表 35-7 にメールサービスに使用する /usr/lib ディレクトリの内容を示します。

表 35-7 メールサービスに使用する /usr/lib ディレクトリの内容

名前 

形式 

説明 

mail.local

ファイル 

メールボックスにメールを配信するメールプログラム 

sendmail

ファイル 

メール転送エージェントとしても知られるルーティングプログラム 

smrsh

ファイル 

sendmail が実行できるプログラムを、 /var/adm/sm.bin 内にあるプログラムに限定するシェルプログラム

/usr/lib ディレクトリ内は、sendmail.cf ファイルの構築に必要なファイルをすべて含むサブディレクトリです。このディレクトリの内容は、表 35-8 に示すとおりです。

表 35-8 メールサービスに利用する /usr/lib/mailディレクトリの内容

名前 

形式 

説明 

README

ファイル 

構成ファイルを説明する文書 

cf

ディレクトリ 

ホストのサイトに依存する、およびサイトに依存しない説明 

cf/main-v7sun.mc

ファイル 

主要な構成ファイル 

cf/makefile

ファイル 

新しい構成ファイルを作成する場合の規則が含まれている 

cf/subsidiary-v7sun.mc

ファイル 

/var/mail を別のホストから NFS マウントするホストの構成ファイル

domain

ディレクトリ 

サイトに依存するサブドメインの説明 

domain/generic.m4

ファイル 

Berkeley からのジェネリックドメインファイル 

domain/solaris-antispam.m4

ファイル 

sendmail 関数を以前の Solaris 版のようにする変更を伴うドメインファイル。リレーがまったく使用できない場合を除いて、ホスト名が指定されていない送信側アドレスは拒否され、また解決されないドメインは拒否される

domain/solaris-generic.m4

ファイル 

sendmail 関数を以前の Solaris 版のようにする変更を伴うドメインファイル (デフォルト)

feature

ディレクトリ 

特定のホスト用の特別な機能の定義 (機能の詳細な説明は README を参照)

m4

ディレクトリ 

サイトに依存しないインクルードファイル 

mailer

ディレクトリ 

ローカル、smtp、および uucp を含むメールプログラムの定義 

ostype

ディレクトリ 

いろいろなオペレーティングシステム環境を説明する定義 

ostype/solaris2.m4

ファイル 

ローカルメールプログラムを mail に定義する

ostype/solaris2.ml.m4

ファイル 

ローカルメールプログラムを mail.local に定義する (デフォルト)

sh

ディレクトリ 

m4 作成プロセスと移行支援プログラムで使用するシェルスクリプト

sh/check-permissions

ファイル 

include: エイリアスと .forward ファイルのアクセス権、および正確なアクセス権に必要なこれらの親ディレクトリのパスを確認する

sh/check-hostname

ファイル 

sendmail が完全指定のホスト名を判別できることを確認する

メールサービスは、その他のいくつかのファイルおよびディレクトリを使用します。これらを表 35-9 に示します。

表 35-9 メールサービスに使用するその他のファイル

名前 

形式 

説明 

sendmailvars.org_dir

テーブル 

sendmailvars ファイルの NIS+ バージョン

/etc/default/sendmail

ファイル 

sendmail 用の環境変数を示す

/etc/shells

ファイル 

有効なログインシェルをリストする 

/usr/sbin/in.comsat

ファイル 

メール通知デーモン 

/usr/sbin/makemap

ファイル 

入力されたマップのバイナリフォーマットを構築する 

/usr/sbin/syslogd

ファイル 

sendmail が使用するエラーメッセージログをとるデーモン

/usr/dt/bin/dtmail

ファイル 

CDE メールユーザーエージェント 

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

ファイル 

配信されたメールのメールボックス 

/var/spool/mqueue

ディレクトリ 

配信されないメール用の記憶領域 

$OPENWINHOME/bin/mailtool

ファイル 

ウィンドウベースのメールユーザーエージェント 

これらのプログラムの組み合わせによるメールサービスが提供されていますが、その相互作用を図 35-2 に簡略に示します。

図 35-2 メールプログラムの相互作用

Graphic

ユーザーは、mailxmailtool などのプログラムを使用してメッセージを送信します。これらのプログラムについては、mailx(1) または mailtool(1) のマニュアルページを参照してください。

メッセージは、メッセージを生成するのに使用されたプログラムにより収集され、sendmail デーモンに渡されます。sendmail デーモンは、メッセージのアドレスを「解釈」し (識別可能なセグメントに分割)、構成ファイル /etc/mail/sendmail.cf からの情報を使用して、ネットワークの名前構文、別名、転送情報、およびネットワークトポロジを決定します。sendmail はこの情報を使用して、メッセージが受信者に到達する経路を決定します。

sendmail デーモンはメッセージを適切なシステムに渡します。ローカルシステムの /usr/lib/mail.local プログラムは、メッセージの受信者の /var/mail/username ディレクトリのメールボックスにメールを配信します。

受信者は、メールが届いたことが通知されるので、mailmailxmailtool などのプログラムを使用してこれを受け取ります。

sendmail プログラム

sendmail プログラムは、TCP/IP や UUCP などの異なる通信プロトコルを使用できます。また SMTP サーバー、メッセージキュー、メーリングリストも実装します。名前の解釈は、ドメインベースのネーミングとその環境で指定されている規則の両方を処理できるパターンマッチングシステムで制御されます。

sendmail プログラムは、ドメインベースのネーミングと任意の (古い) 名前構文を受け入れて、指定されている補完方法を使用して曖昧さを解決します。sendmail は共通点のないネーミングスキーマ間でメッセージを変換することもできます。ドメインの手法は、物理的なネーミング対論理的なネーミングの問題を分離します。インターネットドメインのネーミングの規則の詳細は、「ドメイン名」を参照してください。

他のネットワーク上のホストに対してローカルのように見えるネットワーク名を提供するなど、その環境で指定されている技法によって特殊な場合を処理できます。

Solaris オペレーティング環境では、sendmail プログラムをメールルーターとして使用します。sendmail は、電子メールメッセージの受信と配信を担当します。これは、mailmailxmailtool といったメール読み取りプログラムと、uucp のようなメールトランスポートプログラムの間のインタフェースです。sendmail プログラムは、ユーザーが送った電子メールメッセージを制御し、受信者のアドレスを判断し、適切な配信プログラムを選び、配信エージェントが処理できるフォーマットにアドレスを書き直し、必要に応じてメールヘッダーをフォーマットし直し、最後に変換したメッセージを配信のためのメールプログラムに渡します。


注 -

Solaris 2.4 以前の旧リリース版には、sendmail.mx と呼ばれるバイナリが含まれていました。現在このプログラムは sendmail プログラムに含まれており、これを有効にするには、/etc/nsswitch.conf のホストエントリに dns フラグを追加します。詳細は、sendmail で DNS を使用する方法」 を参照してください。


sendmail プログラムでは、メールルーティングに必要な 3 つのメカニズムをサポートしています。どのメカニズムを選択するかは、サーバーまたはドメイン全体の変更なのか、または単に 1 人のユーザーの変更であるかによって決まります。また、異なる再ルーティングメカニズムを選択することにより、必要な管理レベルに変更できます。

1 つ目の再ルーティングメカニズムはエイリアシングです。エイリアシングとは、使用するファイルのタイプに基づいて、サーバー全体、または名前空間全域ごとに名前をアドレスに対応させるメカニズムです。名前空間の別名ファイルを使用すると、メール再ルーティングの変更を単一のソースで管理できますが、この変更が伝達されるときに、遅延時間が発生する可能性があります。また、名前空間管理は、通常、システム管理者の選択グループに限定されるため、一般ユーザーが実行できる変更ではありません。サーバーの別名ファイルを通じて処理された再ルーティングは、そのサーバーのスーパーユーザーによって管理されます。通常、この変更の伝達に関連した遅延時間はほとんどみられませんが、この変更はローカルサーバーにしか反映されません。この制約事項は、メールのほとんどが 1 つのサーバーに送信される場合には問題ありませんが、この変更を多数のメールサーバーに配信する場合には、ネームサービスを使用した方が簡単です。これも一般ユーザーが実行できる変更ではありません。

次のメカニズムは、転送と取り込みです。このメカニズムを使用すると、ユーザーはメールの再ルーティングを実行できます。転送を使用すると、ローカルユーザーは、着信メールを他のメールボックス、別のメールプログラム、あるいは他のメールホストにルーティングし直すことができます。このメール再ルーティングの形式は、.forward ファイルを使用することによりサポートされます。これらのファイルの詳細は、.forward ファイル」を参照してください。

最後の再ルーティングメカニズムは取り込みで、これを使用すると、別名リストを、ルートアクセスを要求する代わりに、ユーザーによって保守できます。このメカニズムを提供するには、スーパーユーザーは、サーバー上の別名ファイル内に適切なエントリを作成する必要があります。このエントリが作成されると、ユーザーは必要に応じてメールをルーティングし直すことができるようになります。取り込みの詳細は、/etc/mail/aliasesを参照してください。

図 35-3 は、sendmail がユーザー別名をどのように使用するかを示します。/usr/bin/mailx のようなメールを読み取るプログラムは、プログラム自身の別名を持つことができ、それらはメッセージが sendmail に達する前に展開されます。sendmail の別名は、多くの名前空間ソース (ローカルファイル、NIS、NIS+) からのものでも構いません。検索順序は nsswitch.conf ファイルによって決定されます。nsswitch.conf(4) のマニュアルページを参照してください。

図 35-3 sendmail が別名を使用する方法

Graphic

sendmail プログラムの機能

sendmail プログラムには、次のような機能があります。

図 35-4 には、sendmail がメールシステムで他のプログラムと対話する方法を示します。

図 35-4 sendmail と他のメールプログラムとの相互作用

Graphic

ユーザーは、メール生成プログラムおよび送信プログラムと対話します。メール送信が依頼されると、メール生成プログラムは sendmail を呼び出し、sendmail は適切なメールプログラムにメッセージを送ります。発信者の一部はネットワークサーバーであったり、またメールプログラムの一部はネットワーククライアントであるため、sendmail は、インターネットメールゲートウェイとしても使用できます。

sendmail 構成ファイル

「構成ファイル」は、sendmail がその機能を実行する方法を制御します。構成ファイルにより、配信エージェント、アドレスの変換の規則、およびメールヘッダーのフォーマットが選択されます。

sendmail プログラムは、/etc/mail/sendmail.cf ファイルの情報を使用して、その機能を実行します。各システムには、/etc/mail ディレクトリにインストールされたデフォルトの sendmail.cf ファイルがあります。メールサーバーまたはメールクライアントのためにデフォルト構成ファイルを編集または変更する必要はありません。カスタマイズされた構成ファイルを必要とするシステムは、メールホストとメールゲートウェイだけです。

Solaris オペレーティング環境には、以下に示すように、/etc/mail ディレクトリに 2 つのデフォルト構成ファイルがあります。

  1. メールホストまたはメールゲートウェイとして使用する 1 つのシステム (または複数のシステム) を指定するための main.cf という名前の構成ファイル

  2. subsidiary.cf という名前の構成ファイル (デフォルト sendmail.cf ファイルの複製コピー)

システムで使用する構成ファイルは、システムがメールサービスで果たす役割によって異なります。

次に、サイトの要求に応じて変更が可能な構成パラメータをいくつか説明します。

メール別名ファイル

下記の任意のファイルを使用して、別名を管理できます。使用するファイルのタイプは、別名を使用する人と別名を変更する必要がある人によって決まります。別名ファイルのタイプにはそれぞれ固有の形式要件があります。これについては、以下で定義します。

.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 ファイルにすべてのメールクライアントのエントリを入れておく必要があります。各システムのファイルを編集するか、1 つのシステムのファイルを編集してからそのファイルを他のシステムに個々にコピーします。

/etc/mail/aliases ファイルの別名は、テキスト形式で保存されます。/etc/mail/aliases ファイルを編集するときに、newaliases プログラムを実行してデータベースを再コンパイルし、sendmail プログラムでその別名がバイナリ形式で使用できるようにします。あるいは Administration Tool の Database Manager を使用して、ローカルの /etc ファイルに保存されているメール別名を管理できます。

エイリアスを作ることができるのは、ローカル名、つまり現在のホスト名に対してのみ、またはホスト名は指定できません。たとえば、システム saturn 上にメールボックスを持っているユーザー ignatz に対するエイリアスエントリは、下記エントリを /etc/mail/aliases ファイル内に持っています。


ignatz: ignatz@saturn

各メールサーバー上で管理用アカウントを作ると便利です。このアカウントを作成する場合は、メールサーバー上にメールボックスのルートを割り当て、ルートについての /etc/mail/aliases ファイルにエントリを追加します。たとえば、システム saturn がメールボックスサーバーの場合は、エントリ root: sysadmin@saturn/etc/mail/aliases ファイルに追加します。

通常、このファイルを編集できるのはスーパーユーザーだけです。admintool を使用する場合は、sysadmin グループであるグループ 14 のすべてのユーザーが、ローカルファイルを変更できます。別のオプションとしては、以下のようなエントリが作成できます。


aliasname: :include:/path/aliasfile

aliasname は、ユーザーがメールを送信するときに使用する名前であり、/path/aliasfile は別名リストを含むファイルへの完全なパスになります。別名ファイルには、各行に 1 つの電子メールエントリを入れ、その他の表記は付けないでください。


user1@host1
user2@host2

/etc/mail/aliases に追加のメールファイルを定義して、ログやバックアップコピーの管理もできます。以下のエントリでは、filenamealiasname に送信されるすべてのメールを格納します。


aliasname: /home/backup/filename

また、メールを他のプロセスにルーティングすることもできます。次のように入力すると、メールメッセージのコピーが filename 内に格納され、コピーが出力されます。


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

NIS 別名マップ

NIS 別名マップに含まれているエントリは、ローカルドメインのすべてのユーザーが利用できます。sendmail プログラムは、ローカルの /etc/mail/aliases ファイルの代わりに NIS 別名マップを使用して、メールアドレスを決定できます。詳細は、nsswitch.conf(4) のマニュアルページを参照してください。

NIS 別名 マップの別名は、以下のようになります。


aliasname: value,value,value...

aliasname は、ユーザーがメールを送信するときに使用する名前であり、value は有効な電子メールアドレスです。

NIS 別名マップには、すべてのメールクライアント用のエントリを含めてください。一般にこれらのエントリを変更できるのは、NIS マスターのスーパーユーザーだけです。このタイプの別名は、頻繁に変更される別名としては適していないかもしれませんが、次の構文例のように、別名が他の別名ファイルを指している場合は便利です。


aliasname: aliasname@host

aliasname はユーザーがメールを送信するときに使用する名前であり、host/etc/mail/alias ファイルを含むサーバー用のホスト名です。

NIS+ mail_aliases テーブル

NIS+ mail_aliases テーブルには名前が含まれていて、それによってローカルドメインにおけるシステムや個人が登録されています。sendmail プログラムは、ローカルの /etc/mail/aliases ファイルの代わりに NIS+ mail_aliases テーブルを使用して、メールアドレスを決定できます。詳細は、aliasadm(1M)nsswitch.conf(4) のマニュアルページを参照してください。

NIS+ mail_aliases テーブルの別名は次のようになります。


alias:			expansion					[options		# "comments"]

表 35-10 に 4 つの列を記載します。

表 35-10 NIS+ mail_aliases テーブルの列

列 

説明 

alias

別名の名前 

expansion

sendmail /etc/mail/aliases ファイルに現れる別名の値または別名のリスト

options

将来の使用のために確保 

comments

個々の別名に関するコメント 

NIS+ mail_aliases テーブルには、すべてのメールクライアントのエントリを含めてください。NIS+ aliases テーブルでは、aliasadm コマンドで、エントリの表示、作成、変更、および削除ができます。あるいは admintool の Database Manager を使用して、NIS+ メール別名を管理できます。

新規の NIS+ 別名テーブルを作成する場合は、エントリを作成する前にテーブルを初期設定する必要があります。テーブルが存在するときは、初期設定は不要です。

aliasadm コマンドを使用するには、別名テーブルを所有する NIS+ グループのメンバーか、テーブルを作成したユーザーでなければなりません。

.forward ファイル

ユーザーは、システム管理者の手を借りることなくプログラムのカスタムセットにメールをリダイレクトまたは送信するために、ホームディレクトリに、sendmail が使用する .forward ファイルを作成できます。メールの問題、特に所定のアドレスに配信されないメールに関する問題の解決の際、ユーザーのホームディレクトリに .forward ファイルがあるかどうかを常に確認してください。

よくある間違いは、host1 上のホームディレクトリの .forward ファイルに、user@host2 にメールを転送する設定を入れてしまうことです。メールが host2 に送られると、sendmail は NIS や NIS+ 別名で user を検索し、user@host1 にメッセージを送り返すので、ループが発生し、メールは返送されてしまいます。


注 -

root および bin アカウントは、.forward ファイルを所有できません。.forward ファイルを作成すると、セキュリティ上の問題が生じます。必要な場合には、代わりに別名ファイルを使用してメールを転送してください。


メールの配信中に .forward ファイルを調べるためには、このファイルを、ファイルの所有者によってのみ書き込み可能な状態にしておく必要があります。これにより、他のユーザーによるファイルへのアクセスを防ぎます。また、ホームディレクトリのパスは、root だけが所有し、書き込める状態にしておく必要があります。特に、.forward ファイルが /export/home/terry 内にある場合には、/export/export/homeroot だけが所有し、書き込める状態にしておかなければなりません。また実際のホームディレクトリに書き込めるのは、そのユーザーだけである必要があります。.forward ファイルにはこの他にも制約があります。このファイルはシンボリックリンクにすることはできず、また複数のハードリンクも実行できません。

標準の .forward ファイルに加えて、.forward.hostname ファイルを作成し、特定のホストに送信されたメールを転送できます。たとえば、ユーザーの別名を sandy@phoenix.eng.acme.com から sandy@eng.acme.com に変更した場合、sandy のホームディレクトリ内に .forward.phoenix ファイルがあると便利です。


% cat .forward.phoenix
sandy@eng.acme.com
"|/usr/bin/vacation sandy"
% cat .vacation.msg
From: sandy@eng.acme.com (via the vacation program)
Subject: my alias has changed

My alias has changed to sandy@eng.acme.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 プログラムではメッセージファイルは 1 つしか使用できないため、この場合 1 回につき 1 つのメッセージしか実行できません。ただし、メッセージがホスト固有のものではない場合には、1 つの vacation メッセージファイルを、複数のホストの .forward ファイルで使用できます。

転送メカニズムの拡張機能にはこの他に、.forward+detail ファイルがあります。detail は、オペレータ文字以外の文字を自由に並べることができます。オペレータ文字とは、.:%&!^[]+ です。このようなファイルを使用すると、第三者によって自分の電子メールアドレスが使用されたかどうかを判別することが可能になります。たとえば、あるユーザーが、誰かに電子メールアドレス sandy+test1@eng.acme.com を使用するように指示した場合、ユーザーは、この別名に配信されるメールを、アドレスに送信されるメールの中から識別できます。デフォルトにより、sandy+test1@eng.acme.com の別名に送信されたメールはすべて、この別名と .forward+detail ファイルと突き合わせて検査されます。ここで一致しない場合は、そのメールは最終的に sandy@eng.acme.com に配信されますが、ユーザーは、これらのメールの To: ヘッダー内の変更箇所を調べることができます。

/etc/default/sendmail

このファイルは sendmail のための初期設定用オプションを保存し、ホストをアップグレードしたときに除去されないようにするために使用します。次の変数を使用することができます。

MODE=-bd

sendmail を起動するためのモードを選択します。-bd オプションを使用するか、未定義のままにしておきます。

QUEUEINTERVAL=#

実行するメールキューのための間隔を設定します。# は正の整数とし、その後に秒の場合は s、分の場合は m、時の場合は h、日の場合は d、週の場合は w を付けます。この構文は sendmail の起動前に確認されます。この間隔が負の場合、またはエントリの最後の文字が不適当な場合、この間隔は無視され、sendmail は 15 分のキュー間隔で起動します。

OPTIONS=string

sendmail コマンドで使用する追加のオプションを選択します。構文の確認は行われないため、この変数を変更するときは間違えないように注意してください。