ttt

getttyent

(FreeBSD )slapdが OTP unavailable because can't rea

2006-11-02 00:10:28 | デジタル・インターネット

ログメッセージがたくさん出すぎて、うざったいシリーズ、第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