Message Submission Program ファイル submit.cf の作成

sendmail は、いくつかの理由から root として実行する必要があります。 Message Submission Program (MSP) 構成ファイル submit.cf により、コマンド行から実行依頼された電子メールをキュー・ディレクトリーへ書き込むために、sendmail を root として実行する必要がなくなります。

MSP は、全ユーザー書き込み可能ディレクトリーでの問題を避けるために、ユーザー ID 設定/グループ ID 設定プログラムを必要とします。 しかし、グループ ID 設定プログラムとグループ書き込み可能キュー・ディレクトリーがあれば、それで十分です。 これは、root として開始された sendmail デーモンによって実現できます。 このトピックでは、ユーザー ID 設定 root でなく、したがってシステム構成と OS の問題が存在しても問題が少ない sendmail バイナリー・ファイルを持つという目標を、2 つの sendmail 構成を使用して達成する方法について説明します。

デフォルト構成は、sendmail 8.12 で開始し、動作モードと指定されたオプションに基づいて異なる動作をする 1 つの sendmail バイナリー・ファイルを使用します。プログラム制御環境で実行された場合は、/usr/sbin/sendmail と /bin/sendmail の 2 つのバイナリー・ファイルが使用されます。 プログラム制御については、セキュリティー・サーバー (RACF またはそれと同等のもの) 項目の構成を参照してください。

sendmail は、メールをグループ書き込み可能ディレクトリーにキューイングできるようにするためには、グループ ID 設定 (デフォルト・グループ: smmspgrp 、推奨される GID: 25) プログラムでなければなりません。2 つの .cf ファイルが必要で、sendmail.cf はデーモン用、submit.cf は実行依頼プログラム用です。 使用する必要がある許可については、表 1 を参照してください。

SEZAINST(EZARACF) ファイルは、smmsp ユーザーおよびグループを追加する次のようなサンプル・コマンドを示しています。

ADDGROUP SMMSPGRP OMVS(GID(25))
ADDUSER  SENDMAIL DFLTGRP(SMMSPGRP) NOPASSWORD OMVS(UID(0) HOME('/'))
ADDUSER  SMMSP    DFLTGRP(SMMSPGRP) NOPASSWORD OMVS(UID(8000) PROGRAM('/bin/sh')

つまり、sendmail の所有者は root で、グループは smmspgrp、バイナリー・ファイルはグループ ID 設定です。クライアント・メール・キューは、グループ smmspgrp を持つ smmsp によって所有され、グループ書き込み可能です。クライアント・メール・キュー・ディレクトリーは smmspgrp によって書き込み可能であることが必要ですが、それ以外からアクセス可能であってはなりません。つまり、全ユーザーに対する読み取り許可または実行許可を使用しないでください。 submit.cf の中では、オプション UseMSP を設定する必要があり、QueueFileMode を 0660 に設定する必要があります。 submit.cf は、/usr/lpp/tcpip/samples/sendmail/cf/submit.mc から構築された /usr/lpp/tcpip/samples/sendmail/cf の中にあります。 このファイルはそのままの形で使用できますが、オプションを追加したい場合は、/usr/lpp/tcpip/samples/sendmail/cf/submit.mc を開始点として使用してください。

ガイドライン: submit.mc へのオプションの追加は、それらのオプションが必要であるという絶対的な確信がある場合以外、行わないでください。変更が必要となる可能性があるオプションは、以下のとおりです。

一部の機能は、MSP と一緒に使用することを意図して設計されていません。 このような機能として、配信プロセスに影響を及ぼす機能 (mailertable、aliases など) や SMTP サーバーにとってのみ重要な機能 (virtusertable、DaemonPortOptions、複数キューなど) があります。さらに、制限を緩和する機能 (RestrictQueueRun、キュー・ディレクトリーについての許可)、または追加する機能 (プログラム/ファイル・メーラーを使用可能にするなど) はセキュリティーの問題を起こす場合があります。

それ以外にも、MSP と一緒に使用できず、微調整や次善策を必要とするものがあります。 例えば、クライアント認証を可能にするには、単にクライアント証明書とそれに対応する鍵を提供するだけでは不十分であり、次のようにしてキー・グループ (smmsp) を読み取り可能にし、sendmail からそれについて苦情が出ないようにする必要もあります。

define(`confDONT_BLAME_SENDMAIL', `GroupReadableKeyFile')

FEATURE(`msp') がコーディングされている場合、sendmail クライアントは、 すべてのメールをローカル・メール・サーバーに送ります。 sendmail サーバーをローカル・メール・サーバーとして使用する 場合は、sendmail サーバーについて RELAY_DOMAIN() を調べます。 必要ならば、sendmail クライアントを、 この機能を備えた異なるサーバーにメールを送信するように構成することができます。

/usr/lpp/tcpip/samples/sendmail/feature/msp.m4 は、MSP についてのほとんどすべての設定を定義します。 これらの設定の大部分は、何も変更しないでください。 一部の機能とオプションは、本当に必要な場合にオーバーライドできます。 その方法は、そのオプションが実際に feature/msp.m4 の中で定義されている方法によって異なるので、少しややこしい作業になります。 オプションが直接、つまり define() を使用して定義されている場合は、次の行の後に変更後の値を定義する必要があります。

FEATURE(`msp')

オプションが条件付きで、つまり ifdef() を使用して定義されている場合は、求める値を .mc ファイル内の FEATURE 行の前に定義する必要があります。オプションの定義方法を見たい場合は、feature/msp.m4 を参照してください。

.cf ファイル (sendmail.cf または submit.cf) は、動作モードに基づいて選択されます。 -bm (デフォルト)、-bs、および -t の場合は、submit.cf (もしあれば) です。 それ以外の場合は、すべて sendmail.cf です。 この選択は、-Ac (submit.cf を使用したい場合) または -Am (sendmail.cf を使用したい場合) によって変更できます。

デーモンは、通常どおり root によって開始する必要があります。次に例を示します。

/usr/sbin/sendmail -L sm-mta -bd -q1h
注: sendmail を inetd から実行する (一般に、これはお勧めできません) 場合は、-bs に加えて -Am を指定する必要があります。

メールは、デーモンが接続を受け入れないかアドレスが一時的に解決不能である場合、最終的にクライアント・キューに入ります。 後者の問題は、以下の行を使用することによって最小限に抑えることができます。

FEATURE(`nocanonify', `canonify_hosts')
define(`confDIRECT_SUBMISSION_MODIFIERS', `C')

ただし、/usr/lpp/tcpip/samples/sendmail/README.m4 で説明されているように、これらの行には望ましくない副次作用が伴う場合があります。一般的には、cronjob によって、または次のようにデーモンを実行することによって、キューを消去する必要があります。

Cronjob: /usr/sbin/sendmail -L sm-msp-queue -Ac -q
Daemon:  /usr/sbin/sendmail -L sm-msp-queue -Ac -q30m
要件: z/OS® セキュリティー・サーバー・プログラム制御を使用する場合は、cronjob のサブミットは UID 0 から実行する必要があり、FACILITY クラスの BPX.DAEMON リソースへの READ アクセスを保有する必要があります。

オプション UseMSP を設定しなかった場合、sendmail はキューの実行中に bogus ファイル許可について苦情を言ってきます。 クライアント・キュー用のキュー実行プログラムが必要であれば、多く場合、OS 固有のスクリプトを変更してそれを実現する必要があります (詳しくは、使用している OS の man ページを参照)。 このプログラムは root として開始することができ、このプログラムは、そのユーザー ID を RunAsUser (デフォルトでは smmsp、推奨される UID: 25) に変更します。 このように、smmsp は有効なシェルを必要としません。

以下の要約は、2 つの構成ファイルを使用する方法を示しています。

sendmail.cf
MTA (メール転送エージェント) 用。 MTA は、root によって次のようにデーモンとして開始されます。
/usr/sbin/sendmail -L sm-mta -bd -q1h
各 SMTP 接続は、デフォルトではポート 25 および 587 で受け入れられます。 /usr/lpp/tcpip/samples/sendmail/cf/sample.cf を使用している場合は、デフォルトでメインキューの /usr/spool/mqueue by default を実行します。
submit.cf
MSP (メール実行依頼プログラム)。 MSP は、電子メールを実行依頼するために使用されます。 そのため、これはプログラムによって、また場合によってはユーザーによって起動されます。 これは SMTP としては実行されません。 /usr/lpp/tcpip/samples/sendmail/cf/sample.cf を使用している場合は、デフォルトで /usr/spool/clientmqueue を使用し、次のように、そのキューを定期的に実行するために開始できます。
/usr/sbin/sendmail -L sm-msp-queue -Ac -q30m