あなたの習慣について教えてください!!

OpenLDAPを使ったログインについて質問があります。
OpenLDAPサーバを利用したユーザー認証で、OpenLDAPサーバにエントリした
ユーザでログインできません。また、/etc/passwdに登録してあるユーザをツールを使用して、OpenLDAPサーバに移行したユーザでは、ログインできます。ユーザの追加方法または設定ファイルに誤りがあるんでしょうか?

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

ldifファイル
dn: uid=hogehoge,ou=People,dc=solaristest,dc=com
uid: hogehoge
cn: hogehoge
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
loginShell: /bin/sh
uidNumber: 119
gidNumber: 1
homeDirectory: /export/home/hogehoge
userPassword: {SSHA}KzPlKEL6i7Sw0Br5BmgMr0OuW4WcXFJk

勉強不足で申し訳ありませんが、教えて頂けたら幸いです。
ご指導よろしくお願いします。

A 回答 (6件)

> ログ情報は、残っていませんでした。


>>/usr/bin/ldapsearch -b ou=people,dc=solaristest,dc=com -D uid=hogehoge,ou=people,dc=solaristest,dc=com -h LDAPサーバ uid=hogehoge
> 実行したところ、下記のメッセージが表示されました。
> バインドパスワードを入力してください:
> ldap_simple_bind: 資格が無効です。

上記 ldapsearch コマンドが正常に実行できない限り、LDAP クライアントでの pam_ldap による認証は通りません。
入力したパスワードは本当に正しいものですか?

上記 ldapsearch コマンドを実行した際も、LDAP サーバにログは残っていなかったのでしょうか?
また、OpenLDAP サーバのログが残るように slapd.conf と /etc/syslog.conf をきちんと設定していますか?
あと、userPassword: {SSHA}KzPlKEL6i7Sw0Br5BmgMr0OuW4WcXFJk の {SSHA}..... の部分はどのようにして生成しましたか?

> ためしに、LDAP認証ができているCRYPTでパスワード設定したユーザで試したところ、同じメッセージが表示されました。
> クライアントからログインできていることは、確認しています。
> これってまったくLDAP認証がされていないってことですか?

LDAP クライアントでログイン認証できている CRYPT でパスワード設定したユーザでも bind できないのはおかしいです。
ちょっと気になるのは、以下のようにユーザによって DN が uid=... だったり、cn=.... だったり統一されていないようなのですが...
ldapsearch コマンドを実行する際、正しく DN を指定していますか?

> dn: uid=hogehoge,ou=People,dc=solaristest,dc=com
> dn: cn=test,ou=People,dc=solaristest,dc=com

> ldapclient list コマンドの結果
> NS_LDAP_FILE_VERSION= 2.0
> NS_LDAP_SERVERS= 192.168.24.52
> NS_LDAP_SEARCH_BASEDN= dc=solaristest,dc=com
> NS_LDAP_CACHETTL= 0

serviceAuthenticationMethod または authenticationMethod 属性の設定が足りていません。
以下 Sun のドキュメントからの抜粋です。

http://docs.sun.com/app/docs/doc/819-0382/ldapse …
----ここから----
pam_ldap は、認証方式 none をサポートしません。このため、クライアントが pam_ldap を使用できるように、serviceAuthenticationMethod または authenticationMethod 属性を定義する必要があります。詳細については、pam_ldap(5) のマニュアルページを参照してください。
----ここまで----

/etc/pam.conf は問題ないみたいです。

この回答への補足

>上記 ldapsearch コマンドが正常に実行できない限り、LDAP クライアントでの pam_ldap による認証は通りません。
>入力したパスワードは本当に正しいものですか?

再度、ユーザを作成し、ldapclientコマンドにてserviceAuthenticationMethodを追加し、ldapsearch コマンドがとおりました。また、ログインもできました。

>LDAP クライアントでログイン認証できている CRYPT でパスワード設定したユーザでも bind できないのはおかしいです。

ldapaddコマンドで、エントリーファイルのパスワードの部分でおかしい所を発見しました。
userPassword: {crypt}x
ツールを使って出来上がったエントリーファイルの中身を見てませんでした。ユーザを作った際のパスワードだと思い込んでました。ってことは
ldapクライアントからもともとログインなんて出来ていなかったですかね??

補足日時:2009/12/19 23:02
    • good
    • 0

>>もしかして、ツールを使うと /etc/passwd ファイル中のパスワードフィールドの内容である x をそのまま userPassword としてしまうということでしょうか?(つまり、/etc/shadow ファイルの中にある crypt 形式のパスワードが userPassword として設定されない。

)
> その通りでした。

えーと、それでは /etc/passwd に対してツールを使ったユーザで認証できるわけがありません。
ログインできたというのは何かの間違い(勘違い)ではないでしょうか?

あと念のため確認ですが、結局当初の質問の問題については解決した(SSHA 形式の userPassword でログイン可能になった)という認識でよいのですよね?
    • good
    • 0
この回答へのお礼

>えーと、それでは /etc/passwd に対してツールを使ったユーザで認証できるわけがありません。
ログインできたというのは何かの間違い(勘違い)ではないでしょうか?

確認します。

>あと念のため確認ですが、結局当初の質問の問題については解決した(SSHA 形式の userPassword でログイン可能になった)という認識でよいのですよね?

はい、ログインできたことを確認しましたので、解決したと認識でよいです。
ありがとうございました。

お礼日時:2009/12/20 11:50

> ldapaddコマンドで、エントリーファイルのパスワードの部分でおかしい所を発見しました。


> userPassword: {crypt}x
> ツールを使って出来上がったエントリーファイルの中身を見てませんでした。ユーザを作った際のパスワードだと思い込んでました。ってことは

今ひとつ上記の意味がわかりませんが、ツールを使うと userPassword が正しく生成されない({crypt}x という固定値になる)ということですか?
もしかして、ツールを使うと /etc/passwd ファイル中のパスワードフィールドの内容である x をそのまま userPassword としてしまうということでしょうか?
(つまり、/etc/shadow ファイルの中にある crypt 形式のパスワードが userPassword として設定されない。)

> ldapクライアントからもともとログインなんて出来ていなかったですかね??

結局 LDAP サーバ側のログは確認できたのでしょうか?
LDAP サーバ側のログが残っていれば全てわかるのですが....

なお、LDAP クライアント側のローカルアカウントに LDAP サーバと同じアカウントがあると、LDAP を使わずにローカルアカウントだけで認証できてしまいますけど、そういう可能性はありませんか?

この回答への補足

>もしかして、ツールを使うと /etc/passwd ファイル中のパスワードフィールドの内容である x をそのまま userPassword としてしまうということでしょうか?(つまり、/etc/shadow ファイルの中にある crypt 形式のパスワードが userPassword として設定されない。)

わかりにくい説明で申し訳ありません。
その通りでした。

>結局 LDAP サーバ側のログは確認できたのでしょうか?
ログの設定ができたのですが、ものすごい量だったのでログの内容を貼り付けることができませんでした。

>なお、LDAP クライアント側のローカルアカウントに LDAP サーバと同じアカウントがあると、LDAP を使わずにローカルアカウントだけで認証できてしまいますけど、そういう可能性はありませんか?

それは、ありません。確認しています。

後、slappasswdでcryptのバスワードが設定できないので、インストール時にcryptを指定してインストールしていなかったので、再度、インストール
しているのですが、make testでエラーが出たので、再度、新規投稿で聞いて見ます。

補足日時:2009/12/20 02:18
    • good
    • 0

> 教えていただいた例をもとに、設定したのですが、結局ログインできませんでした。



そのような時は LDAP サーバのログを確認して下さい。

pam_ldap では認証しようとするユーザの DN と LDAP クライアント側で入力されたパスワードで LDAP サーバに bind して成功するかどうかで認証しますので、LDAP クライアントから該当ユーザの DN による bind のログが残っているはずです。
もし、LDAP サーバ側に該当するログが残っていない場合は、LDAP クライアント側の設定をミスしている可能性が高いです。

また、LDAP クライアント側から、以下のようにパスワードを SSHA 形式にしたユーザで ldapsearch コマンドを実行し、正常に値を返すか(すなわち正常に bind できるか)どうか確認してみてください。

/usr/bin/ldapsearch -b ou=people,dc=solaristest,dc=com -D uid=hogehoge,ou=people,dc=solaristest,dc=com -h LDAPサーバ uid=hogehoge

あと、可能なら LDAP クライアント側の以下の情報を公開してもらえると何かアドバイスできるかもしれません

・ldapclient list コマンドの結果
・/etc/pam.conf の内容

この回答への補足

xinuさん、

ログ情報は、残っていませんでした。

>/usr/bin/ldapsearch -b ou=people,dc=solaristest,dc=com -D uid=hogehoge,ou=people,dc=solaristest,dc=com -h LDAPサーバ uid=hogehoge

実行したところ、下記のメッセージが表示されました。
バインドパスワードを入力してください:
ldap_simple_bind: 資格が無効です。

ためしに、LDAP認証ができているCRYPTでパスワード設定したユーザで試したところ、同じメッセージが表示されました。
クライアントからログインできていることは、確認しています。
これってまったくLDAP認証がされていないってことですか?

ldapclient list コマンドの結果
NS_LDAP_FILE_VERSION= 2.0
NS_LDAP_SERVERS= 192.168.24.52
NS_LDAP_SEARCH_BASEDN= dc=solaristest,dc=com
NS_LDAP_CACHETTL= 0

/etc/pam.conf の内容
pam.conf
login auth requisite pam_authtok_get.so.1
login auth required pam_dhkeys.so.1
login auth required pam_dial_auth.so.1
login auth required pam_unix_cred.so.1
login auth sufficient pam_unix_auth.so.1
login auth required pam_ldap.so.1
#
# rlogin service (explicit because of pam_rhost_auth)
#
rlogin auth sufficient pam_rhosts_auth.so.1
rlogin auth requisite pam_authtok_get.so.1
rlogin auth required pam_dhkeys.so.1
rlogin auth required pam_unix_cred.so.1
rlogin auth sufficient pam_unix_auth.so.1
rlogin auth required pam_ldap.so.1
#
# rsh service (explicit because of pam_rhost_auth,
# and pam_unix_auth for meaningful pam_setcred)
#
rsh auth sufficient pam_rhosts_auth.so.1
rsh auth required pam_unix_cred.so.1
#
# PPP service (explicit because of pam_dial_auth)
#
ppp auth requisite pam_authtok_get.so.1
ppp auth required pam_dhkeys.so.1
ppp auth required pam_dial_auth.so.1
ppp auth sufficient pam_unix_auth.so.1
ppp auth required pam_ldap.so.1
#
# Default definitions for Authentication management
# Used when service name is not explicitly mentioned for authentication
#
other auth requisite pam_authtok_get.so.1
other auth required pam_dhkeys.so.1
other auth required pam_unix_cred.so.1
other auth sufficient pam_unix_auth.so.1
other auth required pam_ldap.so.1
#
# passwd command (explicit because of a different authentication module)
#
passwd auth sufficient pam_passwd_auth.so.1
passwd auth required pam_ldap.so.1
#
# cron service (explicit because of non-usage of pam_roles.so.1)
#
cron account required pam_unix_account.so.1
#
# Default definition for Account management
# Used when service name is not explicitly mentioned for account management
#
other account requisite pam_roles.so.1
other account required pam_unix_account.so.1
#
# Default definition for Session management
# Used when service name is not explicitly mentioned for session management
#
other session required pam_unix_session.so.1
#
# Default definition for Password management
# Used when service name is not explicitly mentioned for password
よろしくお願いします。

補足日時:2009/12/19 18:43
    • good
    • 0

> solaris で SSHA のパスワードを使用するには、pam_ldap.so を PAM のところで指定する必要がありますよ。



上記の No.1 さんの回答は、/etc/pam.conf で pam_ldap の設定をする必要があるという意味だと思います。

> PAM の設定ができない

質問者の上記補足は、/etc/pam.conf が設定できないという意味でしょうか?

> 平文で指定して確認したところ、やはり駄目でした。

/etc/pam.conf はデフォルトのままで変更していないのでしょうか?
もしそうなら、デフォルトの /etc/pam.conf では pam_unix の設定しかされていませので、パスワードは crypt 形式で LDAP サーバ側に格納されていないといけません。
(No.1 さんの平文でパスワード指定は何か認識違いをしていると思います。)
Sun のマニュアルにも以下の記述があります。

http://docs.sun.com/app/docs/doc/819-0382/ldapse …
から抜粋
----ここから----
pam_unix を使用する場合、次の 2 つの制限が存在します。
パスワードは、平文を含むほかの暗号化方式ではなく、UNIX crypt 形式で格納する必要があります。
(中略)
pam_ldap をアカウント管理に対して使用するのとは異なり、pam_unix をアカウント管理に対して使用する場合は、/etc/pam.conf ファイルの変更は必要ありません。デフォルトの /etc/pam.conf ファイルで十分です。
----ここまで----

下記 Sun のマニュアルを参考に /etc/pam.conf を設定すれば、SSHA でもログインできるようになるはずです。

・pam_ldap に対応した pam.conf ファイルの例
http://docs.sun.com/app/docs/doc/819-0382/schema …

この回答への補足

xinuさん、

ご回答ありがとうございます。

>質問者の上記補足は、/etc/pam.conf が設定できないという意味でしょうか?

OpenLDAPのことを色々調べていたときに、/etc/pamd/以下がないと設定出来ないと思っていました。/etc/pam.confは存在します。

>下記 Sun のマニュアルを参考に /etc/pam.conf を設定すれば、SSHA でもログインできるようになるはずです。

教えていただいた例をもとに、設定したのですが、結局ログインできませんでした。

補足日時:2009/12/19 16:20
    • good
    • 0

solaris で SSHA のパスワードを使用するには、pam_ldap.so を PAM のところで指定する必要がありますよ。


PAM の設定ができない場合は、{CRYPT} か平文でパスワードを指定してください。

この回答への補足

junkUserさん、

ご回答ありがとうございます。
PAM の設定ができないのと後、OpenLDAPのインストール時に
configureで、--enable-cryptを指定しなかったので
平文で指定して確認したところ、やはり駄目でした。

補足日時:2009/12/18 23:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報