명령 줄을 통해 LDAP로 인증하는 방법


35

LDAP 서버는 Solaris에서 호스팅됩니다. 클라이언트는 CentOS입니다. LDAP를 통한 OpenLDAP / NSLCD / SSH 인증은 정상적으로 작동하지만 ldapsearch 명령을 사용하여 LDAP 문제를 디버깅 할 수 없습니다.

[root@tst-01 ~]# ldapsearch
SASL/EXTERNAL authentication started
ldap_sasl_interactive_bind_s: Unknown authentication method (-6)
        additional info: SASL(-4): no mechanism available:
[root@tst-01 ~]# cat /etc/openldap/ldap.conf
TLS_CACERTDIR /etc/openldap/cacerts
URI ldap://ldap1.tst.domain.tld ldap://ldap2.tst.domain.tld
BASE dc=tst,dc=domain,dc=tld
[root@tst-01 ~]# ls -al /etc/openldap/cacerts
total 12
drwxr-xr-x. 2 root root 4096 Jun  6 10:31 .
drwxr-xr-x. 3 root root 4096 Jun 10 10:12 ..
-rw-r--r--. 1 root root  895 Jun  6 10:01 cacert.pem
lrwxrwxrwx. 1 root root   10 Jun  6 10:31 cf848aa4.0 -> cacert.pem
[root@tst-01 ~]#

매개 변수로 /etc/openldap/cacerts/cacert.pem을 제공하는 ldapsearch를 통해 인증서로 인증을 시도했지만 인증을 위해이 인증서를 수락하지 않았습니다.

답변:


60

SASL을 끄고 "-x"옵션을 사용하여 간단한 인증을 사용할 수 있습니다. 예를 들어 특정 사용자를 찾기위한 검색

ldapsearch -x -D "uid=search-user,ou=People,dc=example,dc=com" \
           -W -H ldap://ldap.example.com -b "ou=People,dc=example,dc=com" \
           -s sub 'uid=test-user'

에 의해 "테스트 사용자"를 찾을 수 있습니다

  • -D- 바인드 사용자 "검색 사용자"사용
  • -W- 비밀번호 묻기
  • -H -LDAP 서버의 URL입니다. 이 경우 비 SSL; SSL에 "ldaps : //"사용
  • -b- 검색 기반
  • -s - 예 - 범위 검색 기반을 트리의 기본에 대해 하나 아래 수준에 대한 하위 (시간이 걸릴 수 있습니다) 재귀 적으로 나무를 검색하는
  • 마지막으로 검색 옵션을 비 옵션 인수로 사용하십시오. 이 경우 "test-user"의 uid를 검색합니다

2
Fred는 당신이 지정한 것에 만족한다면 검색 기반이나 호스트를 지정할 필요가 없다는 것을 제외하고는 옳 /etc/openldap/ldap.conf습니다. ldapsearch -x -D "<bind dn>"-W <query >
Jason Tan

ldap login의 사용자 이름을 지정하는 방법
myloginid

"사용자 이름"의 의미에 따라 다릅니다. 바인드 DN (실제로 쿼리 실행을 인증하기위한)은 -D 인수로 제공됩니다. 이 예에서 사용자 레코드에 대한 실제 검색은 필터에서 마지막 인수로 제공됩니다.
Fred Clausen

1
많은 감사합니다! 당신은 내 생명을 구했습니다 :)
Marslo

6

https://stackoverflow.com/questions/27571558/how-was-authentication-built-on-ldap 에서 동일한 질문을하는 것 같습니다.

http://thecarlhall.wordpress.com/2011/01/04/ldap-authentication-authorization-dissected-and-digested/를 참조하십시오 .

  • LDAP 서버에 연결하십시오.
  • 애플리케이션 사용자로 바인드하십시오.
  • 인증 할 사용자의 DN (고유 이름)을 검색하십시오.
  • 3 단계에서 DN을 사용하여 인증 할 사용자로 바인드하십시오.

이것은 (명령 행 실험)으로 요약 될 수 있습니다 :

$ ldapsearch -x -h ldap.company.com -s sub -b 'dc=europe,dc=com' "uid=XYZ"
....
dn: uid=XYZ,dc=sales,dc=europe,dc=com
...
$ ldapsearch -W -h ldap.company.com -D 'uid=XYZ,dc=sales,dc=europe,dc=com' \
    -s sub -b 'dc=europe,dc=com' "uid=XYZ"

1

전체 바인드 DN을 모르는 경우 일반 사용자 이름이나 이메일을 사용하여 -U

ldapsearch -v -h contoso.com -U turiya.gouw@contoso.com -w 'MY_PASSWORD' -b 'DC=contoso,DC=com' '(objectClass=computer)'

0

우리는 FreeIPA / IDM을 사용하고 있으며 다음을 사용하여 이에 대해 인증 할 수있었습니다.

$ ldapsearch -h idm-01a.somednsdom.com \
    -D 'uid=<my username>,cn=users,cn=accounts,dc=somedcdom,dc=com' \
    -o ldif-wrap=no \
    -b 'cn=accounts,dc=somedcdom,dc=com' \
    -W uid=<my username>
설명
  • 이것은 주변의 모든 세부 정보를 반환합니다 uid=<my username>
  • uid=<my username> 필터입니다 (RFC 4515 호환 LDAP 검색 필터).
  • uid=<my username>수행하는 질의 / 필터 인
  • o ldif-wrap=no 결과 줄 바꿈 비활성화
  • -Wldapsearch바인드 구별 이름의 암호에 대한 질의uid=<my username>,cn=users,cn=accounts,dc=somedcdom,dc=com
  • 이 사용자의 비밀번호를 묻는 프롬프트가 표시되면 다음과 같이 표시됩니다.

    Enter LDAP Password:
    
추천

ldapsearch맨 페이지 및 CLI 도움말 에서 참조하십시오 .

   -D binddn
          Use the Distinguished Name binddn to bind to the LDAP directory.  
          For SASL binds, the server is expected to ignore this value.

   -b searchbase
          Use searchbase as the starting point for the search instead of the 
          default.

   -W     Prompt for simple authentication.  This is used instead of specifying 
          the password on the command line.

  -o <opt>[=<optparam] general options
             nettimeout=<timeout> (in seconds, or "none" or "max")
             ldif-wrap=<width> (in columns, or "no" for no wrapping)

전체 예

$ ldapsearch -h idm-01a.somednsdom.com \
    -D 'uid=joeuser,cn=users,cn=accounts,dc=somedcdom,dc=com' \
    -o ldif-wrap=no \
    -b 'cn=accounts,dc=somedcdom,dc=com' \
    -W uid=joeuser

# extended LDIF
#
# LDAPv3
# base <cn=accounts,dc=somedcdom,dc=com> with scope subtree
# filter: uid=joeuser
# requesting: ALL
#

# joeuser, users, accounts, somedcdom.com
dn: uid=joeuser,cn=users,cn=accounts,dc=somedcdom,dc=com
memberOf: cn=ipausers,cn=groups,cn=accounts,dc=somedcdom,dc=com
memberOf: cn=sysadmin,cn=groups,cn=accounts,dc=somedcdom,dc=com
memberOf: ipaUniqueID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX,cn=sudorules,cn=sudo,dc=somedcdom,dc=com
memberOf: cn=eng-systems,cn=groups,cn=accounts,dc=somedcdom,dc=com
memberOf: ipaUniqueID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX,cn=hbac,dc=somedcdom,dc=com
memberOf: cn=admins,cn=groups,cn=accounts,dc=somedcdom,dc=com
memberOf: ipaUniqueID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX,cn=sudorules,cn=sudo,dc=somedcdom,dc=com
memberOf: cn=User Administrator,cn=roles,cn=accounts,dc=somedcdom,dc=com
memberOf: cn=User Administrators,cn=privileges,cn=pbac,dc=somedcdom,dc=com
memberOf: cn=System: Add User to default group,cn=permissions,cn=pbac,dc=somedcdom,dc=com
...
...
krbLoginFailedCount: 0
krbLastFailedAuth: 20190320223946Z
loginShell: /bin/bash
krbExtraData:: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
krbPasswordExpiration: 20190829144625Z
krbLastPwdChange: 20190302144625Z
krbLastAdminUnlock: 20190111080021Z
ipaSshPubKey: ssh-rsa A....XXXXXXXXXXXX...jelByox0PM5Q== joeuser@somednsdom.com
mepManagedEntry: cn=joeuser,cn=groups,cn=accounts,dc=somedcdom,dc=com
displayName: Joe User
uid: joeuser
krbCanonicalName: joeuser@SOMEDCDOM.COM
objectClass: top
objectClass: person
objectClass: organizationalperson
objectClass: inetorgperson
objectClass: inetuser
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: ipaobject
objectClass: ipasshuser
objectClass: ipaSshGroupOfPubKeys
objectClass: mepOriginEntry
initials: JU
gecos: Joe User
sn: Mingolelli
homeDirectory: /home/joeuser
mail: joeuser@somednsdom.com
krbPrincipalName: joeuser@SOMEDCDOM.COM
givenName: Joe
cn: Joe User
ipaUniqueID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
uidNumber: 900000000
gidNumber: 900000000
krbPwdPolicyReference: cn=admins,cn=SOMEDCDOM.COM,cn=kerberos,dc=somedcdom,dc=com

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.