Ubuntu 16.04 の ldap - 無効な資格情報 (49)

Ubuntu 16.04 の ldap - 無効な資格情報 (49)

認証に LDAP を使用するソフトウェアをデバッグできるように、ローカル LDAP インスタンスをセットアップしようとしています。Ubuntu 14.04 LTS では正常に動作していましたが、Ubuntu 16.04 LTS にアップグレードしようとしたところ、ボックスから削除され、最初から Ubuntu 16.04 LTS を再インストールしましたが、非常にイライラした後も LDAP を正常に動作させることができません。

slapd をインストールし、slapadd -l <file>データベースにデータを入力するのに使用しました。次のようにファイルがロードされたことがわかりますldapsearch -x

# extended LDIF
#
# LDAPv3
# base <dc=nodomain> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# nodomain
dn: dc=nodomain
objectClass: top
objectClass: dcObject
objectClass: organization
o: nodomain
dc: nodomain

# admin, nodomain
dn: cn=admin,dc=nodomain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# People, nodomain
dn: ou=People,dc=nodomain
objectClass: organizationalUnit
ou: People

# Groups, nodomain
dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups

# miners, Groups, nodomain
dn: cn=miners,ou=Groups,dc=nodomain
objectClass: posixGroup
cn: miners
gidNumber: 5000

# smm, People, nodomain
dn: uid=smm,ou=People,dc=nodomain
uid: smm
sn: McCants
givenName: Stephen
cn: Stephen McCants
displayName: Stephen McCants
uidNumber: 10000
gidNumber: 5000
gecos: Stephen McCants
loginShell: /bin/bash
homeDirectory: /home/smm
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: person

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6

しかし、私のコードはユーザー 'smm' に対して認証できず、 でユーザーにパスワードを設定することもできませんldappasswd -D "uid=smm,ou=People,dc=nodomain" -A -S -W。パスワードの入力を求められ、同じエラーで失敗します。

Old password: 
Re-enter old password: 
New password: 
Re-enter new password: 
Enter LDAP Password: 
ldap_bind: Invalid credentials (49)

以前は LDAP ルート パスワードも設定していましたdpkg-reconfigure slapd。しかし、再設定の前後で同じエラーが発生します。データベースにデータを入力するのに使用した元のファイルは次のとおりです。

n: ou=People,dc=nodomain
objectClass: organizationalUnit
ou: People
structuralObjectClass: organizationalUnit
entryUUID: 03a28690-1834-1033-87f5-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.559226Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z

dn: ou=Groups,dc=nodomain
objectClass: organizationalUnit
ou: Groups
structuralObjectClass: organizationalUnit
entryUUID: 03b017e2-1834-1033-87f6-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.648148Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z

dn: cn=miners,ou=Groups,dc=nodomain
objectClass: posixGroup
cn: miners
gidNumber: 5000
structuralObjectClass: posixGroup
entryUUID: 03b537ae-1834-1033-87f7-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123043856Z
entryCSN: 20140123043856.681730Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123043856Z

dn: uid=smm,ou=People,dc=nodomain
uid: smm
sn: <my name>
givenName: <my name>
cn: <my name>
displayName: <my name>
uidNumber: 10000
gidNumber: 5000
gecos: <my name>
loginShell: /bin/bash
homeDirectory: /home/smm
structuralObjectClass: inetOrgPerson
entryUUID: 983bd260-1835-1033-87fb-8b9136017cf0
creatorsName: cn=admin,dc=nodomain
createTimestamp: 20140123045015Z
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: person
userPassword: <redacted>
entryCSN: 20140123054441.631096Z#000000#000#000000
modifiersName: cn=admin,dc=nodomain
modifyTimestamp: 20140123054441Z

もちろん、 には私の本名が含まれており、 によって生成された SSHA 文字列が含まれていますslappasswd

この時点で、なぜ機能しないのか、何が問題なのかがわかりません。

答え1

つまり、問題は、パスワードが、私が知らないか、または紛失した状態でロードされたことにあるようです。ldapmodify コマンドを使用して、最初に LDAP 管理者パスワードを、次にユーザー アカウント パスワードを効果的にリセットできました。他の人の役に立つことを願って、私が行った操作を以下にリストします。

LDAP管理者パスワードをリセットする

まず、slappasswd を使用してパスワード ハッシュを生成しました。

root@laptop:/etc/ldap/slapd.d# slappasswd 
New password: 
Re-enter new password: 
{SSHA}<hash redacted>

次に、管理者パスワードが設定されている場所を見つける必要がありました。私は次のようにしました。

root@laptop:/etc/ldap/slapd.d# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b  cn=config olcRootDN=cn=admin,dc=nodomain dn olcRootDN olcRootPW
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={1}mdb,cn=config
olcRootDN: cn=admin,dc=nodomain
olcRootPW: {SSHA}<hash redacted>

設定方法によっては、コマンド内の dc が異なる場合があります。dc が何であるべきかについて、これよりも良い回答ができればよいのですが、LDAP を完全に理解しているわけではありません。基本的に、私が行ったことはすべて dc=nodomain の下で行われています。設定は異なる可能性があります。

次に、ldapmodify を使用して、管理者パスワードを自分が知っているものにリセットしました。コマンドと、「dc:」、「replace:」、および「olcRootPw:」で始まる行の両方を入力したことに注意してください。ldapmodify に前のコマンドを適用させるには、最後の行の後に空白行を入れる必要があります。

root@laptop:/etc/ldap/slapd.d# ldapmodify -Y EXTERNAL -H ldapi:///
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0

dn: olcDatabase={1}mdb,cn=config
replace: olcRootPW
olcRootPW: {SSHA}<new hash from slappasswd>

値はコマンドoldcDatabaseから取得されるldapsearchため、私の値とは異なる場合があります。検索結果に以前の olcRootPw がない場合は、上記の変更コマンドでaddの代わりにを使用する必要がある場合があります。replace

Ctrl + C を押すと、ldapmodify セッションが終了します。

これで、LDAP 管理者パスワードがわかり、ユーザー アカウントのリセットに進むことができます。

LDAPユーザーパスワードをリセットする

slappasswd を使用して、ユーザーのパスワードの新しいパスワード ハッシュを生成しました。このコマンドは、両方のパスワード リセットで同じです。

root@laptop:/etc/ldap/slapd.d# slappasswd 
New password: 
Re-enter new password: 
{SSHA}<hash redacted>

次に、ldapmodify コマンドを実行しましたが、今回は少しやり方が異なります。

ldapmodify -H ldapi:/// -D "cn=admin,dc=nodomain" -W

この-Dオプションは、LDAP に管理者 (または -D の後の引用符で囲まれたユーザー) として実行していることを伝えます。dcもちろん、値は異なる場合があります。この-Wオプションは、LDAP に管理者パスワードの入力を求めるように伝えます。

LDAP 管理者パスワード (上記でリセットしたもの) を入力した後、ユーザーのパスワードを設定するコマンドを実行しました。実行したコマンドは次のとおりです。

dn: uid=smm,ou=People,dc=nodomain
add: userPassword
userPassword: {SSHA}<new password hash>

最初の行は、パスワードのリセットが必要なユーザーを指定するための dn です。2 行目は、adduserPassword が設定されていない場合はコマンド、replaceuserPassword がすでに設定されている場合はコマンドです。3 行目は、LDAP が使用する新しいパスワード ハッシュです。3 行目の後に空白行を入力して、ldapmodify にコマンドの入力が完了したことを伝え、コマンドを実行します。次のような結果が得られるはずです。

modifying entry "uid=smm,ou=People,dc=nodomain"

これで、ユーザー用の新しいパスワードも作成できました。

関連情報