sendmail の smrsh 制限を手軽に取り除く方法

 Fedora Core 付属の sendmail では、smrsh 制限というものがかかっています。これはメールがサーバに配送されるとき .forward でプログラムに引き渡す際に制限をかけるための仕組みです。登録されていないスクリプトの実行を阻止することが目的です。

 許可されていないスクリプトが実行されようとすると、sendmail は以下のようなエラーを出し処理を許可しません。

   ----- Transcript of session follows -----
smrsh: "xxx.pl" not available for sendmail programs (stat failed)
554 5.0.0 Service unavailable

 セキュリティ面を考えると非常に有り難いのですが、大人数でサーバを共用している場合など、ちょっと面倒な場合もあるかと思います。セキュリティ的にリスクを負うことになりますが、設定を単純にさせる方法を紹介します(自己責任でお願いします)。

方法1:シェルスクリプトに置き換える

 smrsh の実体は /usr/sbin/smrsh です。

 smrsh はフィルタの役割(安全なプログラムかどうか判断します)なので、これを簡単に置き換える方法としては、何もフィルタしない方法です。この方法のメリットは sendmail.cf の再構築を必要としません。また、必要があれば、ファイルを戻すことで、すぐに制限をかけなおすことも可能です。

# mv /usr/sbin/smrsh /usr/sbin/smrsh.org
# ln -s /bin/sh /usr/sbin/smrsh

方法2:sendmail.mc の編集(こちらが正攻法)

 sendmail.mc で smrsh を無効にする設定を行い、sendmail.cf を再構築する方法を紹介します。

 まずはエディタなどで /etc/mail/sendmail.mc を開きます。初期状態では 73 行目が対象となっている箇所です。

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

 この行を無効にするために、コメント(dnl を先頭につける)をします

dnl FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

 ファイルを保存後、sendmail.cf を再構築します。

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

 最後に sendmail のプロセスを再起動して設定は完了します。

# /sbin/service sendmail restart
sendmail を停止中:                                         [  OK  ]
sm-client を停止中:                                        [  OK  ]
sendmail を起動中:                                         [  OK  ]
sm-client を起動中:                                        [  OK  ]

 これで smrsh の制限は無くなりました。

 再び制限をかけたいときは sendmail.mc を編集して dnl を消して有効な行にして、sendmail.cf の再構築後、sendmail の再起動を行うことで有効になります。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Fri, 01 Jul 2005 17:46:04 JST (6873d)