MajordomoをCentOS7/RHEL7で動かす

2018年2月19日月曜日

Linux smtp

t f B! P L

CentOS と RHEL の 7.4 で動作確認済み。SELINUX は無効、firewalld は普通にメール送受信に必要なポート開けた状態で確認してます。 インストール時のパッケージ選択は「最小限」を選択した状態からのスタート。 MTA は postfix と sendmail で試してます。 MTA は普通にメール送受信できる設定まではしてある前提ですのでまだの方は postfix 設定sendmail 設定 を参考に設定&普通にメール送受信できることを確認しておいてください。

まず必要なパッケージやらライブラリやらを入れていきます。

# yum install wget cpan mailx
※wget と mailx は Majordomo の動作に必須ではないです。
# yum groupinstall 'Development tools'
# cd /tmp
# wget http://www.cc.rim.or.jp/~ikuta/mime_pls/mime_pls202.tgz
# mkdir mime_pls
# cd mime_pls
# tar vxzf ../mime_pls202.tgz
# mv mime?.pl /usr/lib64/perl5/
# cpan
色々聞かれるが全部デフォルト回答(Enter押すだけ)でOK
cpan> exit
# source ~/.bashrc
# cpan install Perl4::CoreLibs
# mv /root/perl5/lib/perl5/IPC/Cmd.pm /usr/lib64/perl5/IPC/
# rm -rf /root/perl5/lib/perl5/IPC
# mv /root/perl5/lib/perl5/* /usr/lib64/perl5/

Majordomo 用のアカウントとグループを作成しておきます。 UID と GID は何でも良いですがここでは 2000 として作成しています。

# groupadd -g 2000 majordomo
# useradd -M -s /sbin/nologin -g 2000 -u 2000 majordomo

ではいよいよ Majordomo を入れていきます。

# cd /usr/local/src/
# wget http://www.greatcircle.com/majordomo/1.94.5/majordomo-1.94.5.tar.gz
# tar vxzf majordomo-1.94.5.tar.gz
# cd /usr/local
# mkdir majordomo-1.94.5
# chown majordomo.majordomo majordomo-1.94.5
# ln -s majordomo-1.94.5 majordomo
# ll
# cd /usr/local/src/majordomo-1.94.5
# vi Makefile
以下の項目だけ書き換えます。
W_USER と W_GROUP は上で作成したアカウントとグループの UID, GID です。
CC = gcc
W_HOME = /usr/local/majordomo-1.94.5
W_USER = 2000
W_GROUP = 2000
# cp sample.cf majordomo.cf
# vi majordomo.cf
以下の項目だけ書き換えます。
example.com は実際はメールの @ の後ろにくるドメインに置き換えてください。
$whereami = "example.com";
$homedir = "/usr/local/majordomo";
$digest_work_dir = "$homedir/digest";
# make wrapper
# make install
# make install-wrapper
# cd /usr/local/majordomo
# chown -R majordomo.majordomo *
# cp -ip Tools/sequencer ./

ここでこのパッチをあてます。 scp でホームディレクトリに置いてある前提です。 ちなみにパッチで行われる改変の中には必須でないものもあるのですが個々には説明しませんので気になる方は解読してください。 必須なものもあるので、全く何も当てない状態ではうまくいきません。

# patch --ignore-whitespace < ~/sequencer_cf_majordomopl.patch
# ./wrapper config-test
テストがうまくいくと最後に登録するか質問されますがNOで答えるのが無難かと思います。

これで Majordomo のインストール自体は終わりですが、 /etc/aliases でパイプかまして wrapper に渡すにあたって、MTA それぞれで追加設定しないとデフォ設定のままでは配送してくれません。

postfix の場合、main.cf の中の default_privs に設定されているアカウントで wrapper が動作することになります。 デフォルトでは nobody なので、リストディレクトリの中のシーケンスファイルとかに書き込めないわけですね。

# vi /etc/postfix/main.cf
#default_privs = nobody
となっている部分を↓に書き換えます。追記でも勿論OK
default_privs = majordomo
# systemctl restart postfix

sendmail の場合は wrapper が root 権限で動作するようにしてやることと、 リストディレクトリのパーミッション変更が必要です。 リストディレクトリは Majordomo をインストールしたときにデフォルトでパーミッション 770 で作られていますが、 グループに書き込み権限があると sendmail がエラー吐いて配送してくれません。

# cd /usr/local/majordomo
# chown root wrapper
# chmod 4755 wrapper
# chmod 755 lists

もしかしたら sendmail の場合、smrsh を無効にしないと動かないかもしれません。 試した環境では元々無効にしていて、有効の場合どうなるか確認できていないので、 もしテストしてみてエラー吐くようであれば無効にしてみてください。

# cd /etc/mail
# vi sendmail.mc
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
となっている部分を↓に書き換えます。
dnl FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
# m4 sendmail.mc > sendmail.cf
# systemctl restart sendmail

これでOKです。テストしてみましょう。 user1 と user2 というアカウントが既に存在すると仮定します。適当に読み替えてください。

# cd /usr/local/majordomo/lists
# echo user1@example.com > testml
# echo user2@example.com >> testml
# echo 00001 > testml.seq
# chown majordomo.majordomo testml*
# vi /etc/aliases
majordomo: "|/usr/local/majordomo/wrapper majordomo"
owner-majordomo:root
majordomo-owner:root
testml:"|/usr/local/majordomo/wrapper sequencer -l testml -n -h example.com testml-list"
testml-list::include:/usr/local/majordomo/lists/testml
testml-request:owner-testml
testml-owner:owner-testml
testml-approval:owner-testml
owner-testml:root
# newaliases
# mailx testml@example.com

user1 と user2 にメール届きましたかね。 メールを1通出すとリストディレクトリ内に testml.config ができるので、 シーケンサーの動作確認したい場合はそのファイル内の subject_prefix を編集してもう一度メールを出してみてください。

# vi testml.config
subject_prefix = [testml $SEQNUM]
# mailx testml@example.com

QooQ