Bối cảnh
Tôi có 2 máy khác nhau ở đây, điểm khác biệt chính là một máy chạy CentOS6, máy kia chạy CentOS7.
Cả hai đều chạy phiên bản lib có sẵn phân phối mới nhất: 0.8.13 cho COS7, 0.7.5 cho CentOS6
Cả hai đều đang chạy nss-pam-ldapd được cấu hình "bình thường":
/etc/nslcd.conf
uid nslcd
gid ldap
uri ldap://ldap.example.org/
cơ sở dc=ví dụ,dc=org
ssl không
tls_cacertdir /etc/openldap/cacerts
nhàn rỗi_timelimit 240
nhóm cơ sở ou=groups,dc=example,dc=org
binddn cn=Chỉ đọc,dc=ví dụ,dc=org
liên kết **************
Quyền của máy chủ:
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=cube-net,dc=org" write by dn="cn=Readonly,dc=example,dc=org" none by auth ẩn danh tự viết bởi * none
olcAccess: {1}to dn.base="cn=Readonly,dc=example,dc=org" bởi dn="cn=Manager,dc=example,dc=org" viết bởi * none
olcAccess: {2}đến dn.base="" của * đọc
olcAccess: {3}tới * bởi dn="cn=Manager,dc=example,dc=org" do dn="cn=Readonly,dc=example,dc=org" tự đọc viết bởi * read
Vấn đề
Tôi có thể tìm kiếm người dùng tốt, nhưng tôi không thể đăng nhập với tư cách người dùng bằng cách sử dụng su
trên CentOS 7.
Tôi có :
mveroone@vm:~$ passwd
Thay đổi mật khẩu cho người dùng mveroone.
(hiện tại) Mật khẩu LDAP:
Mật khẩu mới:
Gõ lại mật khẩu mới:
passwd: tất cả các mã thông báo xác thực được cập nhật thành công.
mveroone@vm:~$ su - mveroone
Mật khẩu:
su: Quyền bị từ chối
mveroone@vm:~$ ssh máy chủ cục bộ
Chỉ sử dụng được ủy quyền. Tất cả hoạt động có thể được giám sát và báo cáo.
mật khẩu của mveroone@localhost:
Lần đăng nhập cuối: Thứ Sáu, ngày 20 tháng 8, 16:10:24, 2021
Chỉ sử dụng được ủy quyền. Tất cả hoạt động có thể được giám sát và báo cáo.
mveroone@vm:~$
VẬY, tôi có thể đăng nhập bằng SSH, thay đổi mật khẩu của mình, nhưng không thể sử dụng su.
Những gì tôi đã thử
thực hiện một ldapwhoami
trên cả hai máy chủ đều hoạt động bằng phương pháp liên kết đơn giản, nhưng không phải SASL (không có cơ chế khả dụng)
root@vm:~# ldapwhoami -D uid=user,ou=users,dc=example,dc=org -W -H ldap://ldap.example.org
Nhập mật khẩu LDAP:
dn:uid=user,ou=users,dc=example,dc=org
Đang chạy nslcd -d
trong khi cố gắng xác thực mật khẩu bằng cách sử dụng su
chỉ hiển thị điều này trong COS7:
nslcd: GỠ LỖI: accept() không thành công (bị bỏ qua): Tài nguyên tạm thời không khả dụng
Mặc dù nó có vẻ là một lỗi có thể được bỏ qua theo một số chuỗi danh sách gửi thư.
Khi chạy nslcd với gỡ lỗi bổ sung (nslcd -dd
), tôi có thể thấy rằng nó lần đầu tiên cố gắng liên kết với người dùng, thành công, sau đó nó tìm kiếm '(objectClass=*)'
, lọc thuộc tính: dn
và cơ sở = chính nó hoạt động:
ldap_free_request (gốc 1, msgid 1)
ldap_parse_result
ldap_msgfree
ldap_search_ext
put_filter: "(objectClass=*)"
put_filter: đơn giản
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 (thời gian chờ 10000000 usec)
wait4msg continue ld 0x7f7a9800cf60 msgid 2 all 0
** ld 0x7f7a9800cf60 Kết nối:
* máy chủ: cổng ldap.example.org: 389 (mặc định)
refcnt: 2 trạng thái: Đã kết nối
sử dụng lần cuối: Thứ Sáu, ngày 20 tháng 8, 11:42:05, 2021
** ld 0x7f7a9800cf60 Yêu cầu chưa xử lý:
* msgstr 2, gốc 2, trạng thái Đang tiến hành
giới thiệu nổi bật 0, phụ huynh đếm 0
ld 0x7f7a9800cf60 yêu cầu đếm 1 (bỏ qua 0)
** ld 0x7f7a9800cf60 Hàng đợi phản hồi:
Trống rỗng
số lượng phản hồi ld 0x7f7a9800cf60 0
ldap_chkResponseList ld 0x7f7a9800cf60 msgid 2 all 0
ldap_chkResponseList trả về ld 0x7f7a9800cf60 NULL
ldap_int_select
read1msg: ld 0x7f7a9800cf60 msgid 2 all 0
read1msg: ld 0x7f7a9800cf60 msgid 2 mục nhập tìm kiếm loại thông báo
ldap_get_dn
nslcd: [0e0f76] <authc="user"> GỠ LỖI: ldap_result(): uid=user,ou=users,dc=example,dc=org
ldap_msgfree
ldap_abandon 2
ldap_abandon_ext 2
do_abandon gốc 2, msgid 2
ldap_msgdelete ld=0x7f7a9800cf60 msgid=2
ldap_free_request (gốc 2, msgid 2)
ldap_free_connection 0 1
ldap_free_connection: refcnt 1
ldap_msgfree
nslcd: [0e0f76] <authc="user"> GỠ LỖI: ldap_unbind()
ldap_unbind
Vì vậy, con đường là:
- Ràng buộc (OK)
- Tìm kiếm DN riêng của mình (ok)
- Bỏ rơi
- Bỏ ràng buộc
Sau đó cho tôi biết nó không thể xác thực người dùng. ("Quyền bị từ chối" vì vậy nó khác với "lỗi xác thực")
Tôi đã thực hiện chụp gói và nó hiển thị điều tương tự.
Tôi đã thử chạy qua các thay đổi của phiên bản 0.8.x của nslcd để xem có gì thay đổi không, nhưng có rất nhiều thay đổi mà không có đủ chi tiết.