□saslauthdと古い(短い)shadow
古いshadowは、暗号化されている文字列が最近のより短い。
たいていは問題ないのだが、サーバーのシステム一新でsaslauthd(sasl2)とか使おうとすると、せっかくデータを新しいサーバーにrsyncしてめでたしめでたしと思っていたら、いざ移行して運用しようとすると、testsaslauthdとかでテストをしても
size read failed
とか言われて、ログにも
mail kernel: saslauthd[3421]: segfault at…
とかでて悲しくなっちゃいます。原因はshadowの暗号化文字列が短いからみたいで、ココで例えば誰かのパスワードを改めてpasswdで打ち直したりして長い文字列にすると、testsaslauthdでもさっくりと
0: OK “Success.”
とかになってくれる。
ユーザーが少ないとか全部のパスワードを覚えているとか、とにかく管理者として好きに出来る場合はいいけれど、そうではない場合も少なからずあるわけで、ユーザーにパスワードの再設定を促してもしてくれる可能性もあんまりなく、というわけで古いフォーマットと新しいフォーマットを混在して使いたいということになる。
そんな場合に便利なのがPAM認証。
ネット上ではsaslauthdの説明でPAM認証のことがあまり触れられていない(ldapは多いね)ので、一応ココにメモしておきます。
/etc/sysconfig/saslauthdは
> MECH=pam
> #MECH=shadow
としてpamのままでOK。
あとは/etc/pam.d/の下にimap(testsaslauthd用)とsmtp(本番用、ちなみにsubmissionというのは要らない)というファイルを用意して、
#%PAM-1.0
auth required pam_nologin.so
auth include system-auth
account include system-auth
session include system-auth
こんな感じで書いておけばOK。(dovecotのをそのままコピーした)
これであとはsaslauthdとpostfixをrestartすれば、
/usr/sbin/testsaslauthd -u ユーザー名 -p パスワード
や
perl -MMIME::Base64 -e ‘print encode_base64(“username\0username\0password”);’
でのsmtpプロトコル直接叩く方法で動作確認すればOK。
※VineLinux 5.2、Postfix、dovecot、saslauthd、dracdの組み合わせで構築。