บริบท
ฉันมี 2 เครื่องที่แตกต่างกันที่นี่ซึ่งความแตกต่างหลักคือเครื่องหนึ่งรัน CentOS6 และอีกเครื่องหนึ่งใช้ CentOS7
ทั้งคู่เรียกใช้ lib เวอร์ชันล่าสุดที่พร้อมใช้งานสำหรับการแจกจ่าย: 0.8.13 สำหรับ COS7, 0.7.5 สำหรับ CentOS6
ทั้งคู่กำลังเรียกใช้ nss-pam-ldapd ที่กำหนดค่า "ปกติ" :
/etc/nslcd.conf
uid nslcd
gid ldap
uri ldap://ldap.example.org/
ฐาน dc=ตัวอย่าง,dc=org
หมายเลข ssl
tls_cacertdir /etc/openldap/cacerts
idle_timelimit 240
กลุ่มฐาน ou=groups,dc=example,dc=org
binddn cn=อ่านอย่างเดียว,dc=ตัวอย่าง,dc=org
bindpw **************
สิทธิ์ของเซิร์ฟเวอร์:
olcAccess: {0}ถึง attrs=userPassword,shadowLastChange โดย dn="cn=Manager,dc=cube-net,dc=org" เขียนโดย dn="cn=Readonly,dc=example,dc=org" ไม่มีโดยการตรวจสอบสิทธิ์ที่ไม่ระบุตัวตน ด้วยตนเอง เขียนโดย * ไม่มี
olcAccess: {1}ถึง dn.base="cn=Readonly,dc=example,dc=org" โดย dn="cn=Manager,dc=example,dc=org" เขียนโดย * none
olcAccess: {2}ถึง dn.base="" โดย * อ่าน
olcAccess: {3}to * by dn="cn=Manager,dc=example,dc=org" เขียนโดย dn="cn=Readonly,dc=example,dc=org" อ่านเอง เขียนโดย * read
ปัญหา
ฉันสามารถค้นหาผู้ใช้ได้ดี แต่ฉันไม่สามารถเข้าสู่ระบบในฐานะผู้ใช้ได้ สุ
บน CentOS 7
ฉันเข้าใจ :
mveroone@vm:~$ รหัสผ่าน
การเปลี่ยนรหัสผ่านสำหรับผู้ใช้ mveroone
(ปัจจุบัน) รหัสผ่าน LDAP:
รหัสผ่านใหม่:
พิมพ์รหัสผ่านใหม่อีกครั้ง:
passwd: โทเค็นการรับรองความถูกต้องทั้งหมดอัปเดตเรียบร้อยแล้ว
mveroone@vm:~$ su - mveroone
รหัสผ่าน:
su: การอนุญาตถูกปฏิเสธ
mveroone@vm:~$ ssh โลคัลโฮสต์
การใช้งานที่ได้รับอนุญาตเท่านั้น กิจกรรมทั้งหมดอาจได้รับการตรวจสอบและรายงาน
รหัสผ่านของ mveroone@localhost:
เข้าระบบครั้งล่าสุด: ศุกร์ 20 ส.ค. 16:10:24 น. 2021
การใช้งานที่ได้รับอนุญาตเท่านั้น กิจกรรมทั้งหมดอาจได้รับการตรวจสอบและรายงาน
mveroone@vm:~$
ใช่ ฉันเข้าสู่ระบบโดยใช้ SSH เปลี่ยนรหัสผ่านได้ แต่ใช้ su ไม่ได้
สิ่งที่ฉันได้ลอง
การแสดง ก ลดาโวอามี
บนเซิร์ฟเวอร์ทั้งสองทำงานโดยใช้วิธีการผูกอย่างง่าย แต่ไม่ใช่ SASL (ไม่มีกลไกที่พร้อมใช้งาน)
root@vm:~# ldapwhoami -D uid=user,ou=users,dc=example,dc=org -W -H ldap://ldap.example.org
ป้อนรหัสผ่าน LDAP:
dn:uid=user,ou=users,dc=example,dc=org
วิ่ง nslcd -d
ขณะพยายามตรวจสอบรหัสผ่านโดยใช้ สุ
แสดงเฉพาะใน COS7 :
nslcd: DEBUG: ยอมรับ () ล้มเหลว (ละเว้น): ทรัพยากรไม่พร้อมใช้งานชั่วคราว
แม้ว่าดูเหมือนว่าจะเป็นข้อผิดพลาดที่สามารถละเว้นได้ตามเธรดรายชื่อผู้รับจดหมายสองสามรายการ
เมื่อรัน nslcd พร้อมการดีบักเพิ่มเติม (nslcd -dd
) ฉันเห็นว่ามันพยายามผูกมัดกับผู้ใช้ก่อน ซึ่งสำเร็จ แล้วจึงค้นหา '(วัตถุคลาส=*)'
แอตทริบิวต์การกรอง: dn
และฐาน = ตัวมันเองซึ่งใช้งานได้:
ldap_free_request (ต้นฉบับ 1, msgid 1)
ldap_parse_result
ldap_msgfree
ldap_search_ext
put_filter: "(objectClass=*)"
put_filter: ง่าย
put_simple_filter: "objectClass=*"
ldap_build_search_req ATTRS: dn
ldap_send_initial_request
ldap_send_server_request
ldap_result ld 0x7f7a9800cf60 msgid 2
wait4msg ld 0x7f7a9800cf60 msgid 2 (หมดเวลา 10000000 usec)
wait4msg ดำเนินการต่อ ld 0x7f7a9800cf60 msgid 2 ทั้งหมด 0
** การเชื่อมต่อ ld 0x7f7a9800cf60:
* โฮสต์: พอร์ต ldap.example.org: 389 (ค่าเริ่มต้น)
refcnt: 2 สถานะ: เชื่อมต่อแล้ว
ใช้งานล่าสุด: ศุกร์ 20 ส.ค. 11:42:05 น. 2021
** ld 0x7f7a9800cf60 คำขอคงค้าง:
* msgstr 2, ต้นฉบับ 2, สถานะ กำลังดำเนินการ
การอ้างอิงที่โดดเด่น 0 จำนวนผู้ปกครอง 0
ld 0x7f7a9800cf60 จำนวนคำขอ 1 (ละทิ้ง 0)
** ld 0x7f7a9800cf60 คิวตอบกลับ:
ว่างเปล่า
ld 0x7f7a9800cf60 จำนวนการตอบสนอง 0
ldap_chkResponseList ld 0x7f7a9800cf60 msgid 2 ทั้งหมด 0
ldap_chkResponseList ส่งคืน ld 0x7f7a9800cf60 NULL
ldap_int_select
read1msg: ld 0x7f7a9800cf60 msgid 2 ทั้งหมด 0
read1msg: ld 0x7f7a9800cf60 msgid 2 ประเภทข้อความ รายการค้นหา
ldap_get_dn
nslcd: [0e0f76] <authc="user"> DEBUG: ldap_result(): uid=user,ou=users,dc=example,dc=org
ldap_msgfree
ldap_abandon 2
ldap_abandon_ext 2
do_abandon ต้นฉบับ 2, msgstr 2
ldap_msgdelete ld=0x7f7a9800cf60 msgid=2
ldap_free_request (ต้นฉบับ 2, msgid 2)
ldap_free_connection 0 1
ldap_free_connection: refcnt 1
ldap_msgfree
nslcd: [0e0f76] <authc="user"> DEBUG: ldap_unbind()
ldap_unbind
ดังนั้นเส้นทางคือ:
- ผูก (ตกลง)
- ค้นหา DN ของตัวเอง (ตกลง)
- ละทิ้ง
- เลิกผูก
จากนั้นบอกฉันว่าไม่สามารถตรวจสอบสิทธิ์ผู้ใช้ได้ ("การอนุญาตถูกปฏิเสธ" ดังนั้นจึงแตกต่างจาก "การพิสูจน์ตัวตนล้มเหลว")
ฉันทำการจับแพ็คเก็ตและมันแสดงสิ่งเดียวกัน
ฉันได้ลองเรียกใช้ changelogs ของ nslcd เวอร์ชัน 0.8.x เพื่อดูว่ามีอะไรเปลี่ยนแปลงหรือไม่ แต่มีการเปลี่ยนแปลงมากมายโดยไม่มีรายละเอียดเพียงพอ