- ベストアンサー
OpenLDAPのldapaddコマンドの実行についての質問
- Solaris10の環境にOpenLDAPをインストールし、ldapaddコマンドでデータの追加を行おうとした際に、正常に終了しなかった。
- サービスを停止した状態で行っていたことに気づき、サービスを起動した後に再度実行すると、正常に終了した。
- 質問者は、ldapaddコマンドの実行時にLDAPクライアントのサービスの状態について疑問を持っており、設定またはサービスの起動に問題があるのかどうか知りたい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
/etc/nsswitch.conf を適切に設定していますか? Sun のマニュアルにも記述がありますが、ldapclient コマンドを使用して LDAP クライアントを初期化すると、自動的に /etc/nsswitch.ldap が/etc/nsswitch.conf に上書きコピーされます。 そのため、認証に必要な passwd, group 以外のエントリも LDAP を参照するように設定されてしまいます。 (/etc/nsswitch.ldap がそのような設定になっているため。) LDAP クライアントの初期化後、/etc/nsswitch.conf を適切に変更していますか? ちなみに、/etc/nsswitch.ldap の hosts エントリは以下のようになっているので、ldapadd コマンドで -h localhost などとホスト名を指定すると、ホスト名の名前解決をするため、まず最初に LDAP サーバに問い合わせに行ってしまいます。 そのため、LDAP クライアントサービス(ldap_cachemgr)が動いていないと、LDAP サーバに問い合わせにいけないので、そこで ldapadd コマンドの処理が止まってしまいます。 % grep '^hosts' /etc/nsswitch.ldap hosts: ldap [NOTFOUND=return] files
その他の回答 (3)
> ldapaddコマンドで、下記の実行した際に、止まった状態で正常に終了しません。 > /usr/local/bin/ldapadd -f userlist.ldif -x -D "cn=Manager,dc=solaristest,dc=com" -W -h localhost > 後、ldapadd コマンドが止まった状態のログですが、tail -fで確認したんですが、何も出力されていませんでした。 本当にログに何も出力されていないのでしょうか? 最初にクライアントから LDAP bind しに行きますが、それすらもログに残っていないのでしょうか? 念のため確認しますが、ログのレベルはちゃんと debug に設定してますか? ・syslog.conf の設定例 local4.debug /var/log/slapd.log また、-h localhost を指定しているので、LDAP サーバの動いているホスト上で ldapadd コマンドを実行していると思いますが、LDAP サーバが動いているホスト以外のホストから ldapadd コマンド実行するとどうなりますか? さらに、その際パケットをキャプチャし通信状況を確認するとどうなっていますか?
> LDAPクライアントサービスをオンラインで上げた状態で、svcadm disable -t ldap/clientを実行し、ldapadd コマンドを実行したら問題なく正常終了しました。 > また、LDAPクライアントサービスをオフラインの状態で起動した場合、ldapadd コマンドを実行したら、正常に終了せず、ダンマリ状態になります。 私の環境では同じような現象は確認できず、特に問題なく ldapadd が実行できました。 userlist.ldif には2つのエントリがありますが、だんまり状態になるのは、どちらのエントリでしょうか? それとも、この2つのエントリの組み合わせのときのみだんまり状態になるのでしょうか? あと、下記 objectClass: posixGroup にアトリビュート userPassword を設定しているのはおかしくないですか? > dn: cn=hogehoge,ou=Group,dc=solaristest,dc=com > gidNumber: 10002 > userPassword:: e01ENX14 ←【これ】 > memberUid: hogehoge > objectClass: posixGroup
補足
>userlist.ldif には2つのエントリがありますが、だんまり状態になるのは、どちらのエントリでしょうか? >それとも、この2つのエントリの組み合わせのときのみだんまり状態になるのでしょうか? 1エントリーでも2つのエントリの組み合わせのときでも、同じ現象が発生します。 >> userPassword:: e01ENX14 ←【これ】 こちらの設定をはずしても、現象は回避できませんでした。
> ldapaddコマンドを実行する際に、LDAPクライアントのサービスを起動していないといけないでしょうか? ldapadd コマンドと LDAP クライアントサービスには直接関係はありませんので、ldapadd コマンドは LDAP クライアントサービスの起動に関わらず実行できるはずです。 実際に手元の環境で試してみましたが、svcadm disable -t ldap/client を実行後、ldapadd コマンドを実行しても特に問題なく正常終了します。 userlist.ldif の内容はどのようになっていますか? また、ldapadd コマンドが止まった状態になった際の、LDAP サーバ側のログはどうなっていますか?
補足
xinuさん、 ご回答ありがとうございます。 >ldapadd コマンドと LDAP クライアントサービスには直接関係はありませんので、ldapadd コマンドは LDAP クライアントサービスの起動に関わらず実行できるはずです。 >実際に手元の環境で試してみましたが、svcadm disable -t ldap/client を実行後、ldapadd コマンドを実行しても特に問題なく正常終了します。 LDAPクライアントサービスをオンラインで上げた状態で、svcadm disable -t ldap/clientを実行し、ldapadd コマンドを実行したら問題なく正常終了しました。 また、LDAPクライアントサービスをオフラインの状態で起動した場合、ldapadd コマンドを実行したら、正常に終了せず、ダンマリ状態になります。 後、ldapadd コマンドが止まった状態のログですが、tail -fで確認したんですが、何も出力されていませんでした。 userlist.ldif dn: uid=hogehoge,ou=People,dc=solaristest,dc=com objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount cn: hogehoge uid: hogehoge uidNumber: 10002 gidNumber: 10002 homeDirectory: /export/home/hogehoge loginShell: /bin/bash gecos: system userPassword: {CRYPT}0s/OiOuhVqom. dn: cn=hogehoge,ou=Group,dc=solaristest,dc=com gidNumber: 10002 userPassword:: e01ENX14 memberUid: hogehoge objectClass: posixGroup objectClass: top cn: hogehoge
お礼
>ちなみに、/etc/nsswitch.ldap の hosts エントリは以下のようになっているので、ldapadd コマンドで -h localhost などとホスト名を指定すると、ホスト名の名前解決をするため、>まず最初に LDAP サーバに問い合わせに行ってしまいます。 >そのため、LDAP クライアントサービス(ldap_cachemgr)が動いていないと、LDAP サーバに問い合わせにいけないので、そこで ldapadd コマンドの処理が止まってしまいます。 解決いたしました。 /etc/hostsの書き方に間違いありました。 それと、端末のIPアドレスをDHCPの取得していた為 /etc/hostsを書き換えても、起動するたびに書き換えが行われていた ようです。固定IPに変更します。 ありがとうございました。