mailman で Group mismatch error と言われた件

状況説明

今の環境は次の通り。

  • FreeBSD 10.1-RELEASE-p14

  • ja-mailman-2.1.14.j7_2,1 (japanese/mailman)
    • pkg install でバイナリパッケージをインストールして使っている
    • pkg upgrade で更新するときもある。
  • MTA は Postfix を使っている。

今回は、mailman で directory traversal の脆弱性が発見されて、 ports パッケージとしても追随してリビジョンが上がったわけだけれど、 こういう時には毎回こんなエラーが出て困る。

"/usr/local/mailman/mail/mailman post mailman". Command output: Group
mismatch error.  Mailman expected the mail wrapper script to be executed as
group "mailnull", but the system's mail server executed the mail script as
group "mailman".  Try tweaking the mail server to run the script as group
"mailnull", or re-run configure,  providing the command line option
`--with-mail-gid=mailman'.

要するに、この mailman は group id = mailnull で動作しているが、 システム側 (主に MTA だと思われる) は group id = mailnull を想定していて、 まさに group mismatch が起きているというわけだ。 (まぁ、書いてある通りなんだけどね)

さてどうする?というのが今日のお題。

対策

もし僕が ja-mailman を自分でコンパイルしてインストールしているなら 話は単純だ。 /usr/ports/japanese/mailman で make や make ([dr]e)install する時に MAIL_GID=mailman を渡せば良いはず。 これで mailman が group id = mailman で動作するようになって mismatch は解消である。 例えばこんな感じ。

# cd /usr/ports/japanese/mailman
# MAIL_GID=mailman make
# MAIL_GID=mailman make install

(↑:試してないので間違っているかも)

今回はバイナリパッケージを使っているので、コンパイル時の設定に 手をいれるわけには行かないし、素直にコンパイルすることにするのも 負けた気がする。

じゃあ、どうするか。バイナリパッチである。

さっきのエラーメッセージにも書いてあるが、文句を言っているのは /usr/local/mailman/mail/mailman なので、こいつが group id = mailnull を内部にデータとして持っているだろうと推測した。

$ strings /usr/local/mailman/mail/mailman | grep mailnull
mailnull

あたり。一個だけ mailnull という文字列があるようだ。

vim にはバイナリモード (-b) もあるので、こいつで問題のファイルを開いてみる。

mailman を vi で開いたところ

mailnull 文字列を検索すると、確かに一個しかなくてこんな感じ。

mailnull を発見

そして、この mailnull をmailman に書き換えるわけだが、 一文字短いので null 文字 (^@) を補っておく。 (短くて助かった)

mailnull を mailman^@ に書き換え

これでめでたくエラーも出ないし、(どうやら)動作も正常なようだ。 まあ、でも、偶然にうまく行ってるだけですので、真似はしないでください。

備考

  • 2015/Jul/12 ごろ書いた。