Điểm:0

KDC has no support for encryption type while authentication to OpenLDAP

lá cờ fr

I'm running a Kerberos / LDAP authentication server for many years. Kerberos data is stored inside LDAP. Now, I have a second site and want to mirror the server to the new site. This basically works, but there is a strange side effect. Each server has a KDC and a LDAP running. KDC talks to LDAP using local ldapi:///.

If I use the original KDC krb1.example.com I can authenticate to the master LDAP and the replica. If I use the replicated KDC krb2.example.com, I can still authenticate to the master LDAP, but trying the replica I get

SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Local error (-2)
        additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.  Minor code may provide more information (KDC has no support for encryption type)

Which is strange, since krb2 is literally a clone on the LXC container krb1 i.e. the configurations are identical safe for the changes required for replication. But still more puzzeling is a look into the ticket caches after trying to query either LDAP server. With a TGT from krb1

root@krb2:/# klist -e
Ticket cache: FILE:/tmp/krb5_cc_0.tkt
Default principal: [email protected]

Valid starting       Expires              Service principal
04.02.2022 01:05:29  04.02.2022 11:05:29  krbtgt/[email protected]
        renew until 05.02.2022 01:05:26, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 
04.02.2022 01:05:42  04.02.2022 11:05:29  ldap/[email protected]
        renew until 05.02.2022 01:05:26, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 
04.02.2022 01:05:53  04.02.2022 11:05:29  ldap/[email protected]
        renew until 05.02.2022 01:05:26, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96

and from krb2:

root@krb2:/# klist -e
Ticket cache: FILE:/tmp/krb5_cc_0.tkt
Default principal: [email protected]

Valid starting       Expires              Service principal
04.02.2022 00:53:45  04.02.2022 10:53:45  krbtgt/[email protected]
        renew until 05.02.2022 00:53:41, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96 
04.02.2022 00:53:47  04.02.2022 10:53:45  ldap/[email protected]
        renew until 05.02.2022 00:53:41, Etype (skey, tkt): aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96

which has no entry for ldap/krb2.example.com due to the error. But apparently there is no difference in the encryption types required. So, why does it complain?

Currently both LDAP servers refer to krb1. But due to the LDAP replication all keys should be identical i.e. a key from krb1 should be the same as from krb2, shouldn't it? And if keys from krb1 work for both LDAP servers, why does the key from the replica server only work for the master LDAP?

supported_enctypes for the realm in both /etc/krb5kdc/kdc.conf are supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3. There are no enctype directives in either /etc/krb5.conf. There are no ssf configuration used in either LDAP. The krbPrincipalName entries for krb2 exist in both LDAP.

Even if I obtain the TGT from krb2 and then switch the krb5.conf to krb1 for the service ticket, I can authenticate to LDAP on krb2.

OpenLDAP is in version 2.4.47, Kerberos 1.17 on both machines (current Debian stable).

Update: It turned out that replication is incomplete i.e., krbPrincipalKey is not (reliably) replicated. I checked the slapd debugging output:

Feb  9 19:14:52 krb1 slapd[19560]: conn=1300 op=3 BIND authcid="sync/[email protected]" authzid="dn:uid=sync/krb2.example.com,cn=example.com,cn=gssapi,[email protected]"
Feb  9 19:14:52 krb1 slapd[19560]: conn=1300 op=3 BIND dn="cn=admin,dc=example,dc=com" mech=GSSAPI sasl_ssf=256 ssf=256

So, synprov apparently binds as cn=admin,dc=example,dc=com, which is intended.However, if I do

root@krb1:~# ldapsearch -b 'cn=KERBEROS,dc=example,dc=com' -D 'cn=admin,dc=example,dc=com' -Wx 'krbPrincipalName=ldap/[email protected]'

then I see krbPrincipalKey. So why doesn't it get replicated?

I restart slapd on krb2 with options -c rid=1,csn=0, which I understood should sync the entire database. But since some entries have a key and some don't, I do not trust that this is true.

user1686 avatar
lá cờ fr
Chính xác ý của bạn là gì khi "Hiện tại cả hai máy chủ LDAP đều đề cập đến krb1"? Bạn đang nói về KDC trong krb5.conf hay về keytab hay cái gì khác?
user1686 avatar
lá cờ fr
Bạn có thể hiển thị quy trình xác thực thực tế không thành công không? Nếu các vùng chứa là bản sao chính xác, thì dịch vụ LDAP trên kdc2 _know_ rằng nó hiện được gọi là `ldap/kdc2` thay vì `ldap/kdc1`, tức là ít nhất nó có một keytab mới cho tên mới của nó hay nó vẫn đang sử dụng bàn phím gốc?
lá cờ fr
Có, tên máy chủ, địa chỉ IP, mục nhập DNS, keytab, chứng chỉ TLS đã được điều chỉnh để phù hợp với phiên bản mới.
lá cờ fr
Vì vậy, những gì tôi đã làm là: ldapsearch -b "cn=admin,dc=example,dc=com" -H ldap://kdc?.uac.microsult.de. Đặt /etc/krb5.conf thành kdc2, tôi có thể thực hiện kinit, tôi có thể truy vấn kdc1, nhưng kdc2 không thành công. Sau đó, nếu tôi thay đổi kdc thành krb1 trong /etc/krb5.conf, thì truy vấn tới kdc2 cũng thành công khi sử dụng chính vé đó.
user1686 avatar
lá cờ fr
Bạn có thể yêu cầu vé từ KDC 'kdc2' theo cách thủ công bằng cách sử dụng `KRB5_TRACE=/dev/stderr kvno ldap/kdc2.uac.microsult.de` không và nếu không thành công, krb5kdc sẽ báo cáo điều gì cho tệp nhật ký của nó? Bạn có thể xác minh rằng cả hai KDC đều có cùng thông tin trong các bản sao LDAP của chúng (ví dụ: bằng cách kết xuất cả hai thông qua slapcat hoặc qua ldapsearch với xác thực rootdn/rootpw)? Bạn có thể chạy `kadmin.local` trong cả hai KDC để kiểm tra những gì họ biết về hiệu trưởng ldap/kdc2 không?
user1686 avatar
lá cờ fr
À, và bạn thực sự không nên có cài đặt "supported_enctypes" đó... nó có thể không _hurt_ (chưa), nhưng danh sách này đã khá cũ và việc nó được định cấu hình rõ ràng không phục vụ bất kỳ mục đích tốt nào.
lá cờ fr
Gợi ý ```kadmin.local``` cho thấy rằng máy chủ bản sao thực sự không có khóa cho một số nguyên tắc chính. Tôi không thấy điều này vì hiệu trưởng quản trị viên của tôi cho LDAP không nhìn thấy các khóa do ACL, tức là các mục trông giống nhau trên cả hai máy chủ. Tuy nhiên, hiệu trưởng sao chép sẽ thấy các khóa. Vì vậy, có vẻ như tôi phải khắc phục sự cố ```slapd``` ACL và Authzid. Tôi chưa tìm thấy bất kỳ giá trị gỡ lỗi phù hợp nào để xem, người dùng nào sử dụng authzid nào cho DN nào. Nhưng điều này ít nhất là một vấn đề cấu hình LDAP thuần túy.
user1686 avatar
lá cờ fr
Cấp nhật ký `thống kê` sẽ là một khởi đầu tốt.
Điểm:0
lá cờ fr

Vấn đề đã được giải quyết bằng cách cái tát cơ sở dữ liệu chủ và tát từ đầu trên người tiêu dùng.

Cảm ơn user1686 đã chỉ ra những điều cần kiểm tra để giúp tôi thoát khỏi những suy nghĩ vòng vo.

Nguyên nhân của vấn đề là một số hiệu trưởng Kerberos trong LDAP không có krbPrincipalKey thuộc tính. ldap/krb2.example.com là một trong số đó. Điều này trở nên rõ ràng bằng cách sử dụng get_principal Trong kadmin.local trên mỗi máy chủ. Sự nhầm lẫn nảy sinh do sử dụng DN liên kết không phù hợp và ACL được liên kết với những DN đó. Hơn nữa, tôi tin tưởng rằng tôi đã sử dụng quyền chọn cho tát để tìm nạp lại toàn bộ cơ sở dữ liệu khi khởi động, điều này đã không xảy ra.

Một số cạm bẫy khiến tôi bị mắc kẹt: Vì đã bật TLS -Y BÊN NGOÀI không hoạt động, tôi sử dụng các hiệu trưởng Kerberos đặc biệt để bảo trì cơ sở dữ liệu. Hiệu trưởng của tôi cho cn=cấu hình không có quyền truy cập vào thông tin đăng nhập được lưu trữ trong cơ sở dữ liệu chính mà tôi không biết nữa. Vì vậy, việc so sánh các mục nhập của hai LDAP mang lại kết quả giống hệt nhau. Mặc dù hiệu trưởng sao chép thực tế có quyền truy cập vào thông tin đăng nhập, nhưng ban đầu tôi có thể đã sử dụng DN liên kết khác, tức là trước khi tôi thiết lập Kerberos để sao chép. Do đó, các mục được tạo trong khoảng thời gian này được sao chép mà không có thông tin xác thực và đồng bộ hóa không khắc phục điều này sau này.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.