Ubuntu

子/子 AD 域的 Ubuntu SSSD 身份驗證錯誤

  • October 26, 2021

需要幫助驗證加入子域的 linux (Ubuntu) 伺服器。我可以在域控制器上看到伺服器名稱,並且能夠成功執行身份驗證測試,但是我無法使用我的域帳戶登錄。似乎 SSSD 或 KRB5 配置的某個配置設置需要指定子域。這也不是域信任問題,因為加入子域的 Windows 伺服器正在接受來自父帳戶的憑據。

kinit -V user@DOMAIN.SYS
Authenticated to Kerberos v5

root@SERVER:/var/log/sssd# systemctl status sssd

Oct 22 17:55:09 SERVER [sssd[ldap_child[27928]: Failed to initialize credentials using keytab [MEMORY:/etc/krb5.keytab]: Client 'SERVER$@DOMAIN.SYS' not found in Kerberos database. Unable to create GSSAPI-encrypted LDAP connection.

SSSD 日誌文件中的錯誤

Fri Oct 22 17:32:51 2021) [sssd[be[DOMAIN.SYS]]] [confdb_get_domain_internal] (0x0010): Unknown domain [CHILD.DOMAIN.SYS]
(Fri Oct 22 17:32:51 2021) [sssd[be[DOMAIN.SYS]]] [confdb_get_domains] (0x0010): Error (2 [No such file or directory]) retrieving domain [CHILD.DOMAIN.SYS], skipping!

固態硬碟配置

root@SERVER:cat /etc/sssd/sssd.conf
[sssd]
services = nss, pam
config_file_version = 2
domains = DOMAIN.SYS, CHILD.DOMAIN.SYS

[nss]
default_shell = /bin/bash

[domain/DOMAIN.SYS]
id_provider = ad
access_provider = ad
override_homedir = /home/%d/%u

ad_hostname = server.child.domain.sys
#ad_server = dc.child.domain.sys
#ad_domain = DOMAIN.SYS

KRB5 配置

root@SERVER: cat /etc/krb5.conf
[libdefaults]
       default_realm = DOMAIN.SYS
       ticket_lifetime = 24h #
       renew_lifetime = 7d
       rdns = false

The following krb5.conf variables are only for MIT Kerberos.
       kdc_timesync = 1
       ccache_type = 4
       forwardable = true
       proxiable = true

你是如何設置 SSSD 的?你做了realm discover然後realm join?如果你沒有,這是推薦的方法。我強烈建議您這樣做。

您是否嘗試過以子域中的使用者身份進行身份驗證?*getent passwd myuser@CHILD.DOMAIN.SYS

從我在您提供的格式錯誤的資訊中可以看出,您在 sssd.conf 中有兩個域

[sssd] 
services = nss, pam 
config_file_version = 2 

domains = DOMAIN.SYS, CHILD.DOMAIN.SYS

[nss] 
default_shell = /bin/bash

[domain/DOMAIN.SYS] 
id_provider = ad 
access_provider = ad 

你有一個部分[domain/CHILD.DOMAIN.SYS]。如果你這樣做會發生什麼realm list?這應該向您顯示 sssd.conf 中正確配置的內容。

我不確定您是否需要在父子域情況下列出兩個域,但也許先嘗試自己配置子域。或者至少將孩子放在domains列表的首位。

domains = CHILD.DOMAIN.SYS
...
[domain/CHILD.DOMAIN.SYS] 
id_provider = ad 
access_provider = ad

您如何嘗試對父域使用者進行身份驗證?您是在嘗試 SSH 還是getent在伺服器上嘗試本地?您是否使用完全限定名稱來驗證父域使用者?例如getent passwd myuser@DOMAIN.SYS

此錯誤表明它正在嘗試使用具有錯誤電腦名稱的密鑰表Client 'SERVER$@DOMAIN.SYS'SERVER$@CHILD.DOMAIN.SYS如果它已加入子域,則應該使用它。伺服器密鑰表實際上是否包含子域的正確伺服器名稱?

這就是為什麼我建議通過確保您可以先使用子域憑據登錄來簡化問題。雖然我真的認為realm join如果你不使用這種方法,你應該重新開始。

嘗試按照此處的故障排除步驟進行操作,尤其是“基礎知識”、“後端”和“通用 AD 提供程序”部分:https ://sssd.io/troubleshooting/basics.html

(順便說一句,我真的希望您的域後綴不是真正的 .SYS)

引用自:https://serverfault.com/questions/1081454