การพิสูจน์ตัวจริงของ LDAP ใน CentOS 7


11

หลังจากอัปเกรดเป็น CentOS 7 แล้วจะไม่สามารถเข้าสู่ระบบผ่าน LDAP ได้อีกต่อไป ด้วย CentOS 6 ฉันใช้แพ็คเกจpam_ldapซึ่งใช้งานได้ดี แต่ตอนนี้ pam_ldap ไม่สามารถใช้ได้สำหรับ CentOS เวอร์ชันใหม่อีกต่อไป

การเชื่อมต่อผ่านldapsearchยังคงใช้งานได้ดี แต่การพยายามตรวจสอบสิทธิ์ผ่าน ssh ไม่ทำงาน

ฉันติดตั้งแพคเกจnss-pam-ldapdใหม่และตรวจสอบความถูกต้องอีกครั้งผ่านauthconfig-tuiแต่ก็ยังไม่ทำงาน

ด้านล่างนี้ผมเปลี่ยนชื่อผู้ใช้ของฉันกับuser.nameและฐานที่มีdc = ย่อย DC = ตัวอย่าง DC = org

โฮสต์ระบบปฏิบัติการของฉันคือ CentOS 7 ติดตั้งการปรับปรุงที่มีอยู่ทั้งหมดในปัจจุบัน

$ uname -a
Linux isfet 3.10.0-123.8.1.el7.x86_64 #1 SMP Mon Sep 22 19:06:58 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

แพคเกจที่ติดตั้ง

$ rpm -qa | grep -i ldap
openldap-2.4.39-3.el7.x86_64
nss-pam-ldapd-0.8.13-8.el7.x86_64
openldap-clients-2.4.39-3.el7.x86_64

เนื้อหาของ/etc/openldap/ldap.conf

URI ldap://172.16.64.25
BASE dc=sub,dc=example,dc=org

เนื้อหาของ/etc/nslcd.conf

ldap_version 3
uri ldap://172.16.64.25
base dc=sub,dc=example,dc=org
ssl no

เอาต์พุตของ/ var / log / secure

Oct  6 12:12:16 isfet sshd[3937]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.16.64.1  user=user.name
Oct  6 12:12:17 isfet sshd[3937]: Failed password for user.name from 172.16.64.1 port 18877 ssh2

ผลลัพธ์ของ/var/log/audit/audit.log

type=USER_AUTH msg=audit(1412590243.286:364): pid=3912 uid=0 auid=4294967295 ses=4294967295 msg='op=PAM:authentication acct="user.name" exe="/usr/sbin/sshd" hostname=172.16.64.1 addr=172.16.64.1 terminal=ssh res=failed'
type=USER_AUTH msg=audit(1412590243.287:365): pid=3912 uid=0 auid=4294967295 ses=4294967295 msg='op=password acct="user.name" exe="/usr/sbin/sshd" hostname=? addr=172.16.64.1 terminal=ssh res=failed'

เอาต์พุตของคำสั่งldapserach

$ ldapsearch -H ldap://172.16.64.25/ -D cn=Manager,dc=sub,dc=example,dc=org -W -x -b dc=sub,dc=example,dc=org -d1

ldap_url_parse_ext(ldap://172.16.64.25/)
ldap_create
ldap_url_parse_ext(ldap://172.16.64.25:389/??base)
Enter LDAP Password:
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP 172.16.64.25:389
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 172.16.64.25:389
ldap_pvt_connect: fd: 3 tm: -1 async: 0
attempting to connect:
connect success
ldap_open_defconn: successful
ldap_send_server_request
ber_scanf fmt ({it) ber:
ber_scanf fmt ({i) ber:
ber_flush2: 61 bytes to sd 3
ldap_result ld 0x7f9b07402110 msgid 1
wait4msg ld 0x7f9b07402110 msgid 1 (infinite timeout)
wait4msg continue ld 0x7f9b07402110 msgid 1 all 1
** ld 0x7f9b07402110 Connections:
* host: 172.16.64.25  port: 389  (default)
  refcnt: 2  status: Connected
  last used: Mon Oct  6 12:04:38 2014


** ld 0x7f9b07402110 Outstanding Requests:
 * msgid 1,  origid 1, status InProgress
   outstanding referrals 0, parent count 0
  ld 0x7f9b07402110 request count 1 (abandoned 0)
** ld 0x7f9b07402110 Response Queue:
   Empty
  ld 0x7f9b07402110 response count 0
ldap_chkResponseList ld 0x7f9b07402110 msgid 1 all 1
ldap_chkResponseList returns ld 0x7f9b07402110 NULL
ldap_int_select
read1msg: ld 0x7f9b07402110 msgid 1 all 1
ber_get_next
ber_get_next: tag 0x30 len 50 contents:
read1msg: ld 0x7f9b07402110 msgid 1 message type bind
ber_scanf fmt ({eAA) ber:
read1msg: ld 0x7f9b07402110 0 new referrals
read1msg:  mark request completed, ld 0x7f9b07402110 msgid 1
request done: ld 0x7f9b07402110 msgid 1
res_errno: 0, res_error: <>, res_matched: <cn=Manager,dc=sub,dc=example,dc=org>
ldap_free_request (origid 1, msgid 1)
ldap_parse_result
ber_scanf fmt ({iAA) ber:
ber_scanf fmt (}) ber:
ldap_msgfree
ldap_err2string
ldap_bind: Success (0)
        matched DN: cn=Manager,dc=sub,dc=example,dc=org
...

เนื้อหาของ _ / etc / pam.d / password-auth

auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

เนื้อหาของ _ / etc / pam.d / system-auth

auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_ldap.so use_first_pass
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

คุณได้รับผลลัพธ์จากการเรียกใช้ "getent passwd user.name" หรือ "su - user.name" หรือไม่
Andy

ผู้ใช้มีอยู่ในเครื่อง แต่ไม่มีรหัสผ่าน การตรวจสอบความถูกต้องกับ LDAP / etc / passwd: user.name:x:1028:1031::/home/user.name:/bin/bash / etc / shadow: user.name: !!: 16348: 0: 99999: 7 :::
Lukas Schulze

ไม่ได้pam_ldapใช้ไฟล์ที่แตกต่างกันกว่า/etc/openldap/ldap.conf? ฉันต้องการที่จะพูด/etc/ldap.confทันที ฉันพยายามที่จะแก้ปัญหาโมดูลโดยการเพิ่มdebugทางเลือกสำหรับการเข้าสู่ระบบเพิ่ม verbosiry auth sufficient pam_ldap.so use_first_pass debugคือ นอกเหนือจากนี้ฉันคิดว่าคำถามดังกล่าวถูกทำให้ขุ่นเคืองโดยคุณตามคำแนะนำของ Joffrey โปรดเปลี่ยนกลับไปใช้การกำหนดค่าดั้งเดิมของคุณหากคุณต้องการให้ผู้อื่นช่วยเหลือคุณได้
Andrew B

คุณสามารถเพิ่มเนื้อหาของได้/etc/ldap.confหรือไม่
Andrew B

ขอบคุณ! การใช้ nslcd ในโหมดแก้ไขข้อบกพร่องช่วยให้ฉันค้นพบข้อผิดพลาด ฉันเขียนมันเป็นคำตอบ
Lukas Schulze

คำตอบ:


4

การรันnslcdในโหมดดีบักจะแสดงปัญหา:

$ $(which nslcd) -d
...
nslcd: [8b4567] <authc="user.name"> DEBUG: myldap_search(base="dc=sub,dc=example,dc=org", filter="(&(objectClass=posixAccount)(uid=user.name))")
...
nslcd: [8b4567] <authc="user.name"> DEBUG: ldap_result(): end of results (0 total)
nslcd: [8b4567] <authc="user.name"> DEBUG: "user.name": user not found: No such object
...

nslcdตั้งค่าตัวกรองตามค่าเริ่มต้น ไม่สามารถลบตัวกรองนี้หรือตั้งค่าเป็นหน้าว่างได้

เนื่องจากไม่มีผู้ใช้ LDAP ของฉันมี objectClass ชื่อposixAccountไม่พบผู้ใช้และการเข้าสู่ระบบถูกปฏิเสธ

เพื่อแก้ไขปัญหานี้ฉันต้องเขียนทับตัวกรองนี้ด้วยตัวเอง เพราะฉันกำลังมองหาuidมันมีประโยชน์ที่จะตั้งค่าตัวกรองบนแอตทริบิวต์ที่จะค้นหา anyways

เนื้อหาใหม่ของ/etc/nslcd.confของฉัน:

filter passwd (uid=*)
uri ldap://172.16.64.25
base dc=sub,dc=example,dc=org
ssl no

หลังจากเปลี่ยนnslcd.confฉันต้องเริ่มบริการ nslcd:systemctl restart nslcd

ที่มา: http://lists.arthurdejong.org/nss-pam-ldapd-users/2014/msg00025.html

.

นี่น่าจะเป็นปัญหาสำหรับ _nss-pam-ldapd-0.8.13-8.el7.x86_64_ บน CentOS 7!

$ nslcd -V
nss-pam-ldapd 0.8.13

ฉันพยายามที่จะทำให้เกิดปัญหาบน CentOS 6 แต่ใน nss-pam-ldapd นี้มีการพึ่งพาpam_ldapซึ่งมีไฟล์ config ใน /etc/pam_ldap.conf และดูเหมือนว่าจะไม่ใช้ /etc/nslcd.conf บน CentOS 7


1
ใช่การpam_ldapชนชื่อนั้นสร้างความสับสนมาก :( มีการใช้งานหลายอย่างที่อ้างสิทธิ์ในชื่อโมดูลนั้น
Andrew B
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.