Xác thực LDAP trên CentOS 7


11

Sau khi nâng cấp lên CentOS 7, không thể đăng nhập qua LDAP nữa. Với CentOS 6, tôi đã sử dụng gói pam_ldap hoạt động tốt, nhưng bây giờ pam_ldap không còn có sẵn cho phiên bản mới của CentOS.

Kết nối qua ldapsearch vẫn hoạt động tốt, nhưng cố gắng xác thực qua ssh không hoạt động.

Tôi đã cài đặt lại gói nss-pam-ldapd và xác thực lại cấu hình thông qua authconfig-tui , nhưng nó vẫn không hoạt động.

Dưới đây tôi thay thế tên người dùng của mình bằng user.name và cơ sở bằng dc = sub, dc = example, dc = org .

Hệ điều hành máy chủ của tôi là một CentOS 7. Tất cả các bản cập nhật hiện có đã được cài đặt.

$ 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

Gói đã cài đặt

$ 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

Nội dung của /etc/openldap/ldap.conf

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

Nội dung của /etc/nslcd.conf

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

Đầu ra của / var / log / safe

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

Đầu ra của /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'

Đầu ra của lệnh 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
...

Nội dung của _ / 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

Nội dung của _ / 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

Bạn có nhận được bất kỳ kết quả nào từ việc chạy "getent passwd user.name" hoặc "su - user.name" không?
Andy

Người dùng tồn tại cục bộ, nhưng không có mật khẩu. Việc xác thực là chống lại LDAP. / etc / passwd: user.name:x:1028:1031::/home/user.name:/bin/bash / etc / bóng: user.name: !!: 16348: 0: 99999: 7 :::
Lukas Schulze

Không pam_ldapsử dụng một tập tin khác hơn /etc/openldap/ldap.conf? Tôi muốn nói /etc/ldap.conf, bằng tay. Tôi sẽ cố gắng gỡ lỗi mô-đun bằng cách thêm debugtùy chọn để thêm động từ ghi nhật ký, tức là auth sufficient pam_ldap.so use_first_pass debug. Ngoài ra, tôi nghĩ rằng câu hỏi đã bị nhầm lẫn bởi lời khuyên của Joffrey. Vui lòng trở lại cấu hình ban đầu của bạn nếu bạn muốn người khác có thể giúp bạn.
Andrew B

Bạn có thể thêm nội dung của /etc/ldap.conf?
Andrew B

Cảm ơn bạn! Chạy nslcd trong chế độ gỡ lỗi giúp tôi tìm ra lỗi. Tôi đã viết nó như một câu trả lời.
Lukas Schulze

Câu trả lời:


4

Chạy nslcd trong chế độ gỡ lỗi cho thấy vấn đề:

$ $(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 đặt bộ lọc theo mặc định. Không thể xóa bộ lọc này hoặc đặt thành trống.

Bởi vì không ai trong số những người dùng LDAP của tôi có một objectClass được gọi là posixAccount , người dùng không thể tìm thấy và đăng nhập bị từ chối.

Để khắc phục vấn đề này, tôi đã phải ghi đè lên bộ lọc này bằng một bộ lọc riêng. Bởi vì tôi đang tìm kiếm uid, thật hữu ích khi đặt bộ lọc trên một thuộc tính được tìm kiếm bằng mọi cách.

Nội dung mới của /etc/nslcd.conf :

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

Sau khi thay đổi nslcd.conf tôi phải khởi động lại dịch vụ nslcd:systemctl restart nslcd

Nguồn: http://lists.arthurdejong.org/nss-pam-ldapd-users/2014/msg00025.html

.

Đây dường như là một vấn đề đối với _nss-pam-ldapd-0.8.13-8.el7.x86_64_ trên CentOS 7!

$ nslcd -V
nss-pam-ldapd 0.8.13

Tôi đã cố gắng tái tạo sự cố trên CentOS 6, nhưng trên nss-pam-ldapd này có các phụ thuộc vào pam_ldap có tệp cấu hình của nó trong /etc/pam_ldap.conf và dường như không sử dụng /etc/nslcd.conf theo cách nó hoạt động trên CentOS 7.


1
Vâng, các pam_ldapva chạm đặt tên rất khó hiểu. :( Có nhiều triển khai mà tất cả đều yêu cầu đối với tên mô-đun đó.
Andrew B
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.