メイル管理入門

共有メイルスプールディレクトリ下のmboxの危険性

メイルを安全確実に(secure, reliable)受け取るためにはいろいろな注意が必要です。 sendmail/bin-mailシステムで使われている共有メイルスプールディレクトリと そこにあるmbox形式のメイルボックスについての危険性を解説し、 回避方法を説明します。
/bin/mailのセキュリティホール情報(SunOS 4.1.x、1994年)では、
      This problem exists because /var/spool/mail is rwxrwxrwt.
と書かれています。なぜdirectoryのパーミッションがrwxrwxrwtになっているのでしょうか。
どうして危険なのでしょうか。

郵便箱の種類

メイルが配送される先が郵便箱(mailbox)です。郵便箱には mbox形式maildir形式などがあります。

mbox形式mailboxへのメイル配送とロック

ひとつのファイルに複数のメイルを保存するには「排他制御(ロック)」が必要になります。 メイルを配送するプロセスとメイルを読みだしたり、消去したりするプロセスが 喧嘩をしないように、mailboxファイルをロックする必要があります。 ロックのためにはflock, lockfなどのシステムコールが使えます。 また、xxx.lockという名前のファイルを作ることで排他制御することも行われています。

MTAとMUAでロック方式を合わせる必要があること。

いずれの方式もOSが排他制御を保証してくれるものではなく、あくまでも 同じファイルをアクセスするプロセスの間での紳士協定であることに注意してください。
したがって、MTAとMUAで同じ方式のロック使う必要があります。 (qmailはflockを使います。flockがなければ、lockfを使います。)

NFS環境でのロック実装の問題

共有メイルスプールをNFSマウントして使う場合、ロックについて以下の問題があります。

flockはNFSには対応していません。また、lockfはrcp.lockdに依存していますが、 その実装には多くの問題が残っているため、信用できません。 このため、NFS環境では "ロックファイル"を作る方式を採用することになります。 このことが次の問題につながります。

共有ディレクトリのアクセス権限

利用者が使うメイルリーダ(MUA)が "ロックファイル"を作るためには共有ディレクトリに利用者が書き込める必要があります。 そこで、利用者が書き込み出来るようにディレクトリのパーミッションを "777"にしたシステムが存在します。

ディレクトリにだれでも書き込めるようにしたことと /bin/mailの実装の欠陥を利用したセキュリティホールが報告されています。(上述)

この問題を回避しようとして ディレクトリのグループをmailなどにして グループ書き込み可能("775")に設定しているシステムもあります。 このとき、関連プログラム(MUAなど)をsetgidする必要があるので、 MUAをインストールにはシステム管理者の協力が必要になります。 また、プログラムが本当に安全なのかどうか確認する必要があります。 本質的な解決になっているのか、疑問が残ります。

NFSを使わないのであれば、BSD系のOSではflockを使って排他制御できますので、 ディレクトリに対してのユーザ書き込み権限は必要ありません。 (配送時の都合で書き込み出来た方が信頼性が上るという事情はあります。)

結論:mbox形式のmailboxをNFSマウントするのは危険です。

NFSのロック方式の実装には問題が残っているので、 mbox形式のmailboxをNFSマウントして使うと 不完全な排他制御によりメイルが消失する危険があります。 また、セキュリティ上のリスクがあります。

回避方法

問題点を回避するにはどうすればいいでしょうか。 二つの方法をあげておきます。

1)ロックが不要なmaildir形式のmailboxを使う。

2)NFSを使うからロック問題が発生するのですから、NFSマウントを止める。 NFSマウントを止めて、パーミッションを"755"に設定したら問題なく動作するかについては 分かりません。また、性能および信頼性については別問題です。

ホームディレクトリ配送の勧め

最後に

共用スプールディレクトリ(/var/spool/mailなど)に メイルを配送している管理者は「spoolディレクトリ」の permission/ownerがどうなっているか、調べてみましょう。

メイルスプールのNFSマウントは即刻やめましょう。


1998-05-27   前野年紀 Powered by WN, djbdns, qmail, FreeBSD