Sendmailの子プロセスの起動ユーザを指定する




Sendmailが悪意のユーザにより不正に操作された場合など、
意図しない動作をした時のシステムへの影響を考慮して、
Sendmailの子プロセスをrootではない一般ユーザで起動するように設定する。

Sendmailに外部から接続があった場合、デフォルトではrootで子プロセスが起動します。

子プロセスを一般ユーザで起動するように設定する方法は次の通り。

sendmail.mcにて以下を追記
define(`confRUN_AS_USER', `sendmail:sendmail')dnl

あとは、sendmail.cfを作り直して、Sendmailを再起動して設定反映。

この設定により、子プロセスが「sendmail:sendmail」で起動するようになるが、
このままでは、mqueueやhoststatが書き込めずうまく動かない。

権限を適切に設定する必要がある。
# chown sendmail:sendmail /var/spool/mqueue
# chown -R sendmail:sendmail /var/spool/hoststat

Sendmailの起動スクリプト内でmqueueの権限を変更している場合は、
そちらも併せて修正しておく。

ちなみに、当環境ではhoststatをsendmail.mcで以下のように指定しています。
define(`confHOST_STATUS_DIRECTORY',`/var/spool/hoststat')dnl


○確認
外部ホストからポート25にtelnetして起動する子プロセスを確認する。

telnet前(待機状態)
# ps -ef | grep sendmail
   smmsp  6858     1  0 11:05:19 ?        0:00 /usr/lib/sendmail -Ac -q15m
    root  6860     1  0 11:05:19 ?        0:00 /usr/lib/sendmail -bd -q15m

telnet中(SMTPセッション中)
# ps -ef | grep sendmail
   smmsp  6858     1  0 11:05:19 ?        0:00 /usr/lib/sendmail -Ac -q15m
sendmail  6955  6860  0 11:46:17 ?        0:00 /usr/lib/sendmail -bd -q15m
    root  6860     1  0 11:05:19 ?        0:00 /usr/lib/sendmail -bd -q15m

子プロセスがユーザ「sendmail」で起動していることが確認できた。