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」で起動していることが確認できた。