こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ldapaddについて

ldapaddについて質問があります。
Solaris10の環境にOpenLDAPをインストールしているんですが、1台のマシンにOpenLDAPサーバとSolaris付属のLDAPクライアントして構成します。
ldapaddコマンドで、下記の実行した際に、止まった状態で正常に終了しません。
/usr/local/bin/ldapadd -f userlist.ldif -x -D "cn=Manager,dc=solaristest,dc=com" -W -h localhost
Enter LDAP Password:

Solaris付属のLDAPクライアントのサービスを停止した状態で行っていたことに気づきました。Solaris付属のLDAPクライアントサービスを上げてから
再度、上記のコマンドを実行すると、正常に終了します。
ldapaddコマンドを実行する際に、LDAPクライアントのサービスを起動していないといけないでしょうか?
それとも、slapd.confの設定に問題があるんでしょうか?
勉強不足で申し訳ありませんが、教えていただけたら幸いです。
よろしくお願いします。

slapd.conf
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema

# Define global ACLs to disable default read access.

# Do not enable referrals until AFTER you have a working directory
# service AND an understanding of referrals.
#referral ldap://root.openldap.org

pidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args
# Load dynamic backend modules:
modulepath /usr/local/libexec/openldap
moduleload back_bdb.la
# moduleload back_hdb.la
# moduleload back_ldap.la

# Sample security restrictions
# Require integrity protection (prevent hijacking)
# Require 112-bit (3DES or better) encryption for updates
# Require 63-bit encryption for simple bind
# security ssf=1 update_ssf=112 simple_bind=64

# Sample access control policy:
# Root DSE: allow anyone to read it
# Subschema (sub)entry DSE: allow anyone to read it
# Other DSEs:
# Allow self write access
# Allow authenticated users read access
# Allow anonymous users to authenticate
# Directives needed to implement policy:
# access to dn.base="" by * read
# access to dn.base="cn=Subschema" by * read
# access to *
# by self write
# by users read
# by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn. (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!
#######################################################################
# BDB database definitions
#######################################################################
database bdb
suffix "dc=solaristest,dc=com"
rootdn "cn=Manager,dc=solaristest,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw {SSHA}wlLOtWPPXErPxwL04tNQj2jA3s/fnLEq
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /usr/local/var/openldap-data
# Indices to maintain
index objectClass eq

投稿日時 - 2009-12-23 02:04:25

QNo.5541384

すぐに回答ほしいです

質問者が選んだベストアンサー

/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

投稿日時 - 2009-12-24 10:56:36

お礼

>ちなみに、/etc/nsswitch.ldap の hosts エントリは以下のようになっているので、ldapadd コマンドで -h localhost などとホスト名を指定すると、ホスト名の名前解決をするため、>まず最初に LDAP サーバに問い合わせに行ってしまいます。
>そのため、LDAP クライアントサービス(ldap_cachemgr)が動いていないと、LDAP サーバに問い合わせにいけないので、そこで ldapadd コマンドの処理が止まってしまいます。

解決いたしました。
/etc/hostsの書き方に間違いありました。
それと、端末のIPアドレスをDHCPの取得していた為
/etc/hostsを書き換えても、起動するたびに書き換えが行われていた
ようです。固定IPに変更します。
ありがとうございました。

投稿日時 - 2009-12-25 01:53:20

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(4)

> 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 コマンド実行するとどうなりますか?
さらに、その際パケットをキャプチャし通信状況を確認するとどうなっていますか?

投稿日時 - 2009-12-24 00:33:42

> 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

投稿日時 - 2009-12-23 16:45:21

補足

>userlist.ldif には2つのエントリがありますが、だんまり状態になるのは、どちらのエントリでしょうか?
>それとも、この2つのエントリの組み合わせのときのみだんまり状態になるのでしょうか?

1エントリーでも2つのエントリの組み合わせのときでも、同じ現象が発生します。

>> userPassword:: e01ENX14 ←【これ】

こちらの設定をはずしても、現象は回避できませんでした。

投稿日時 - 2009-12-23 23:48:48

> ldapaddコマンドを実行する際に、LDAPクライアントのサービスを起動していないといけないでしょうか?

ldapadd コマンドと LDAP クライアントサービスには直接関係はありませんので、ldapadd コマンドは LDAP クライアントサービスの起動に関わらず実行できるはずです。
実際に手元の環境で試してみましたが、svcadm disable -t ldap/client を実行後、ldapadd コマンドを実行しても特に問題なく正常終了します。

userlist.ldif の内容はどのようになっていますか?

また、ldapadd コマンドが止まった状態になった際の、LDAP サーバ側のログはどうなっていますか?

投稿日時 - 2009-12-23 10:55:28

補足

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

投稿日時 - 2009-12-23 14:58:07

あなたにオススメの質問