Làm cách nào để xác thực với LDAP qua dòng lệnh?


35

Máy chủ LDAP được lưu trữ trên Solaris. Khách hàng là CentOS. Xác thực OpenLDAP / NSLCD / SSH thông qua LDAP hoạt động tốt, nhưng tôi không thể sử dụng các lệnh ldapsearch để gỡ lỗi các vấn đề 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 ~]#

Tôi đã thử xác thực bằng chứng chỉ qua ldapsearch cho /etc/openldap/cacerts/cacert.pem làm tham số, nhưng nó không chấp nhận chứng chỉ này để xác thực.

Câu trả lời:


60

Bạn có thể muốn tắt SASL và sử dụng xác thực đơn giản với tùy chọn "-x". Ví dụ: tìm kiếm để tìm một người dùng cụ thể

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'

Sẽ tìm thấy "người dùng thử" bởi

  • -D - Sử dụng liên kết người dùng "tìm kiếm-người dùng"
  • -W - Nhắc mật khẩu
  • -H - URL của máy chủ LDAP. Không SSL trong trường hợp này; sử dụng "ldaps: //" cho SSL
  • -b - Cơ sở tìm kiếm
  • -s - Phạm vi tìm kiếm - tức là cơ sở cho cơ sở của cây, một cho cấp độ xuống và phụ để tìm kiếm đệ quy xuống cây (có thể mất một lúc)
  • Cuối cùng, bộ lọc tìm kiếm dưới dạng đối số không tùy chọn. Trong trường hợp này, chúng tôi sẽ tìm kiếm uid của "người dùng thử"

2
Fred có quyền, ngoại trừ việc bạn không cần chỉ định cơ sở tìm kiếm hoặc máy chủ lưu trữ nếu bạn hài lòng với các cơ sở được chỉ định trong /etc/openldap/ldap.confnghĩa là những điều sau đây có thể sẽ hoạt động: ldapsearch -x -D "<bind dn>" -W <truy vấn >
Jason Tan

Làm cách nào để chỉ định tên người dùng cho đăng nhập ldap
myloginid

Nó phụ thuộc vào những gì bạn có nghĩa là "tên người dùng". Liên kết DN (để xác thực để thực sự chạy truy vấn) được đưa ra bởi đối số -D. Tìm kiếm thực tế, trong ví dụ này cho một bản ghi người dùng, được đưa ra trong bộ lọc làm đối số cuối cùng.
Fred Clausen

1
cảm ơn nhiều! bạn đã cứu mạng tôi :)
Marslo

6

Có vẻ như tôi hỏi cùng một câu hỏi tại: https://stackoverflow.com/questions/27571558/how-was-authentication-built-on-ldap

Xem để http://thecarlhall.wordpress.com/2011/01/04/ldap-authentication-masterization-dissected-and-digested/ :

  • Nhận kết nối đến máy chủ LDAP.
  • Ràng buộc như người dùng ứng dụng.
  • Tìm kiếm DN (tên phân biệt) của người dùng sẽ được xác thực.
  • Ràng buộc là người dùng được xác thực bằng cách sử dụng DN từ bước 3.

Điều đó có thể được tóm tắt là (thử nghiệm trong dòng lệnh):

$ 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

Lưu ý, nếu bạn không biết DN ràng buộc đầy đủ của mình, bạn cũng có thể sử dụng tên người dùng hoặc email thông thường với -U

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

0

Chúng tôi đang sử dụng FreeIPA / IDM và tôi đã có thể xác thực điều này bằng cách sử dụng như sau:

$ 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>
Giải trình
  • Điều này sẽ trả về tất cả các chi tiết xung quanh uid=<my username>
  • uid=<my username> là bộ lọc (bộ lọc tìm kiếm LDAP tuân thủ RFC 4515)
  • Đây uid=<my username>là truy vấn / bộ lọc để thực hiện
  • o ldif-wrap=no vô hiệu hóa gói kết quả
  • Các -Wlực lượng ldapsearchđể truy vấn mật khẩu cho tên phân biệt ràng buộcuid=<my username>,cn=users,cn=accounts,dc=somedcdom,dc=com
  • Khi được nhắc nhập mật khẩu cho người dùng này, lời nhắc sẽ như sau:

    Enter LDAP Password:
    
Tài liệu tham khảo

Để tham khảo từ ldapsearchmanpage & CLI trợ giúp:

   -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)

Ví dụ đầy đủ

$ 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.