Ubuntu 16.04의 ldap - 잘못된 자격 증명 (49)

Ubuntu 16.04의 ldap - 잘못된 자격 증명 (49)

인증을 위해 LDAP를 사용하는 일부 소프트웨어를 디버깅할 수 있도록 로컬 LDAP 인스턴스를 설정하려고 합니다. Ubuntu 14.04 LTS에서 이것이 올바르게 작동했지만 상자별로 Nuked Ubuntu 16.04 LTS로 업그레이드하려고 시도하고 스크래치 Ubunut 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)

또한 dpkg-reconfigure slapdLDAP 루트 비밀번호를 설정하곤 했습니다. 그러나 재구성 전과 후에 모두 동일한 오류가 발생합니다. 데이터베이스를 채우는 데 사용된 원본 파일은 다음과 같습니다.

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옵션은 내가 관리자(또는 -D 뒤에 따옴표 안에 있는 사람)로 실행 중임을 LDAP에 알려줍니다. dc물론 당신의 가치는 다를 수 있습니다. 이 -W옵션은 LDAP에 관리자 비밀번호를 묻는 메시지를 표시하도록 지시합니다.

위에서 재설정한 LDAP 관리자 비밀번호를 입력한 후 사용자 비밀번호를 설정하라는 명령을 내렸습니다. 내가 실행한 내용은 다음과 같습니다.

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

첫 번째 줄은 비밀번호 재설정이 필요한 사용자를 지정하는 dn입니다. 두 번째 줄은 adduserPassword가 설정되지 않은 경우 명령이고 replaceuserPassword가 이미 설정된 경우 명령입니다. 세 번째 줄은 LDAP가 사용해야 하는 새 비밀번호 해시입니다. 세 번째 줄 뒤에 빈 줄을 입력하여 ldapmodify에 명령 입력이 완료되었으며 명령을 실행해야 함을 알립니다. 다음과 같은 결과를 얻을 수 있기를 바랍니다.

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

이제 내 사용자의 새 비밀번호도 생겼습니다.

관련 정보