Score:0

การตรวจสอบรหัสผ่าน nss-pam-ldapd ไม่ทำงานบน CentOS 7 เมื่อใช้ `su` เท่านั้น

ธง cn

บริบท

ฉันมี 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 เพื่อดูว่ามีอะไรเปลี่ยนแปลงหรือไม่ แต่มีการเปลี่ยนแปลงมากมายโดยไม่มีรายละเอียดเพียงพอ

Score:0
ธง cn

เอาล่ะมันไม่เกี่ยวข้องกันโดยสิ้นเชิง nslcd หรือ PAM-LDAP ในที่สุด...

/etc/pam.d/su มีบรรทัดนี้ในตอนท้าย (ออกจากบล็อก "รับรองความถูกต้อง")

การตรวจสอบสิทธิ์ต้องการ pam_wheel.so use_uid

ซึ่งไม่ได้อยู่ใน /etc/pam.d/sshd ตัวอย่างเช่น.

การแสดงความคิดเห็นช่วยแก้ไขปัญหาได้

บรรทัดนี้มีอยู่ใน CentOS 6 แต่ก็มี รวม คำสั่งข้างต้นซึ่งข้ามบรรทัดต่อไปซึ่งตรงข้ามกับ กองย่อย ซึ่งไม่

Michael Hampton avatar
cz flag
นี่เป็นการเปลี่ยนแปลงครั้งสำคัญที่เกี่ยวข้องกับความปลอดภัย ตรวจสอบให้แน่ใจว่านี่คือ _really_ สิ่งที่คุณต้องการก่อนที่จะทำ
cn flag
จริงอยู่ แต่เรากำลังควบคุมว่าใครสามารถเข้าถึงเครื่องได้บ้าง สามารถเรียกใช้ `su` หรือ `sudo` ด้วยกลุ่ม LDAP

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา