2006年11月2日木曜日

(FreeBSD )slapdが OTP unavailable because can't read/write key database /etc/opiekeys: Permission denied というメッセージをたくさん出す

ログメッセージがたくさん出すぎて、うざったいシリーズ、第3弾?!





今日は、openldapのslapdです。



slapdが、/var/log/messagesに、こんなログをたくさんだしてました。



Nov  1 11:52:45 SERVER slapd[17176]: OTP unavailable because can't read/write key database /etc/opiekeys: Permission denied



googleで検索したら、slapdの話ではなかったのでしたが、すぐ見つかりました。cyrus-sasl2が出しているそうです。



ネットで情報を探す以外の手段としては、とりあえず、こんな力技で探す方法もあります・・・(笑)



# grep -R "OTP unavailable" /usr/local/lib
・・・
Binary file /usr/local/lib/compat/pkg/libotp.so.2 matches
Binary file /usr/local/lib/sasl2/libotp.a matches
Binary file /usr/local/lib/sasl2/libotp.so matches
Binary file /usr/local/lib/sasl2/libotp.so.2 matches
Binary file /usr/local/lib/libsasl2.a matches
・・・



あとは、pkg_which /usr/local/lib/sasl2/libotp.so してみればcyrus-sasl2だと解る、というわけ。



とりあえず、ソースコードを確認してみました。



ports/security/cyrus-sasl2/work/cyrus-sasl-2.1.22/plugins/otp.c



static int opie_mech_avail(void *glob_context __attribute__((unused)),
                           sasl_server_params_t *sparams,
                           void **conn_context __attribute__((unused)))
{
    const char *fname;
    unsigned int len;
   
    sparams->utils->getopt(sparams->utils->getopt_context,
                           "OTP", "opiekeys", &fname, &len);
   
    if (!fname) fname = OPIE_KEYFILE;
   
    if (access(fname, R_OK|W_OK) != 0) {
        sparams->utils->log(NULL, SASL_LOG_ERR,
                            "OTP unavailable because "
                            "can't read/write key database %s: %m",
                            fname, errno);
        return SASL_NOMECH;
    }
   
    return SASL_OK;
}



まあ、これは、眺めただけです(笑)。いや、なんか手当てしようとしても無駄かな、って瞬間的に思いました。



OTPってのは、One Time Passwordの略で、セキュリティ向上のための技術の一種なんですが・・・えーと、私たちは、OTPは使ってません。だからOTP関係の設定は、まったくしていません。する気にもなれません。



でも、cyrus-sasl2のOTPプラグインが、なんかしようとして、で、勝手にエラーだと、わめいているわけですね。なんか、またか!って感じで、cyrus-sasl2のプラグインの完成度って・・・って感じがしてしまいます。



解決方法は、とりあえず応急処置としては、libotp*を削除してしまうだけでもよさそうです。



# rm /usr/local/lib/sasl2/libotp*



(slapdを再起動しないと、反映されなかったみたいなので)
# /usr/local/etc/rc.d/slapd.sh restart



cyrus-sasl2のプラグインといえば、ずいぶん前に、gssapiなんとかってのがあって、kerberos関係のものらしいんですが、kerberosなんてものも使ってませんので、エラーがでてました。そのときも、



# rm /usr/local/lib/sasl2/libgssapi*



とか、やった記憶があります。



portsの、/usr/ports/security/cyrus-sasl2 でインストールするときに、



# make WITHOUT_GSSAPI=yes WITHOUT_OTP=yes



とやってビルドすれば、libgssapi*、libotp*はインストールされないようです。さっそく、pkgtools.confのMAKE_ARGSに追加しました。WITHOUT_GSSAPIは入れてあったのですが・・・



☆ ☆ ☆ ☆ ☆ ☆ 



今日、ようやく、すべてのLDAPサーバを、openldap-sasl-client-2.2.30 から、openldap-sasl-client-2.3.27 へアップデートしました。



2.2から2.3にするだけで、こんなに苦労するとは・・・
(苦労するだろうと思ってたから、ずーっとアップデートしなかったんですが)



slapd.confの書き方が微妙に違ってたりするのは、エラーメッセージが出るのでわかりました。



もう1つ、こんなメッセージがでてましたが、



bdb_db_open: Warning - No DB_CONFIG file found in directory /var/db/openldap-data: (2)
Expect poor performance for suffix dc=ほげ,dc=ほげ,・・・



/usr/local/etc/openldap/DB_CONFIG.example というのがあったので、これをコピーしました。



# cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG



0 件のコメント:

コメントを投稿