针对 samba 4 DC 的密钥表身份验证:获取初始凭据时在 Kerberos 数据库中找不到客户端

Hei*_*ert 8 ubuntu active-directory kerberos samba4

我按照Samba AD DC HOWTO在 ubuntu 14.04 上设置了一个 samba 4 活动目录。原则上一切正常,但我坚持使用 SPN 为 Web 应用程序运行 kerberos 身份验证。当我尝试跑步时

kinit -k -t keytabfile http/myserver.mycompany.com 
Run Code Online (Sandbox Code Playgroud)

我总是得到一个

kinit: Client not found in Kerberos database while getting initial credentials
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经检查过的内容:

  • DNS 正在双方向前和向后返回 FQN
  • kinit 使用用户名工作
  • myserver.mycompany.com 由 dc 和 web 服务器上的 nslookup 返回
  • myserver 已经加入域并列在
    CN=Computers,DC=mycompany,DC=com
  • 没有重复的 SPN

我创建了服务帐户/SPNs/keytabs,如下所示:

samba-tool user create $ADS_USER $ADS_PW --userou=$USER_OU
samba-tool user setexpiry --noexpiry $ADS_USER

samba-tool spn add ${SERVICE_TYPE}/${SERVICE_HOST}.${MY_DOMAIN} $ADS_USER
samba-tool spn add ${SERVICE_TYPE}/${SERVICE_HOST} $ADS_USER

samba-tool spn list $ADS_USER
rm -f $MY_KEYTAB
samba-tool domain exportkeytab $MY_KEYTAB --principal=${SERVICE_TYPE}/${SERVICE_HOST}.${MY_DOMAIN}
samba-tool domain exportkeytab $MY_KEYTAB --principal=${SERVICE_TYPE}/${SERVICE_HOST}
Run Code Online (Sandbox Code Playgroud)

运行 klist -k -e $MY_KEYTAB 时,一切看起来都不错:

root@myhost:~# klist -ke ./test.keytab
Keytab name: FILE:./test.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   1 http/myserver.mycompany.com@MYCOMPANY.COM (des-cbc-crc)
   1 http/myserver.mycompany.com@MYCOMPANY.COM (des-cbc-md5)
   1 http/myserver.mycompany.com@MYCOMPANY.COM (arcfour-hmac)
   1 http/myserver@MYCOMPANY.COM (des-cbc-crc)
   1 http/myserver@MYCOMPANY.COM (des-cbc-md5)
   1 http/myserver@MYCOMPANY.COM (arcfour-hmac)
Run Code Online (Sandbox Code Playgroud)

我迷路了,在谷歌研究了几个小时,不知道如何解决/修复“在 Kerberos 数据库中找不到客户端”错误。欢迎任何提示!

谢谢

我在客户端上的“/etc/krb5.conf”

[libdefaults]
    debug = true
        default_realm = MYCOMPANY.COM
        dns_lookup_realm = false
        dns_lookup_kdc = false
        default_tkt_enctypes = rc4-hmac
        default_tgs_enctypes = rc4-hmac
[realms]
        MYCOMPANY.COM = {
                kdc = dc01.mycompany.com
                admin_server = dc01.mycompany.com
                kpasswd_server = dc01.mycompany.com

                #ktpasswd_server = dc01.mycompany.com
                #admin_server = dc01.mycompany.com
        }
[domain_realm]
        .mycompany.com = MYCOMPANY.COM
        mycompany.com = MYCOMPANY.COM
Run Code Online (Sandbox Code Playgroud)

在 dc 服务器上 /etc/samba/smb.conf

[global]
        debug level = 1
        syslog = 1
        max log size = 0

        workgroup = MYCOMPANY
        realm = MYCOMPANY.COM
        netbios name = DC01
        server role = active directory domain controller
        server string = MYCOMPANY domain controller
        server role check:inhibit = yes
        dns forwarder = 192.168.22.1
        idmap_ldb:use rfc2307 = yes
Run Code Online (Sandbox Code Playgroud)

Hei*_*ert 5

最后我明白了!

samba-tool spn add ...
Run Code Online (Sandbox Code Playgroud)

不会(重新)命名目录中的 UPN。我通过与 MS ADS 条目进行比较找到了它。因此,解决方法是在发出 exportkeytab 命令之前手动更改值:

  • 使用 ldap-tool(我使用 Apache Directory Studio)打开服务用户条目,然后
  • 找到刚刚创建的用户编辑“userPrincipalName”以反映 servicePrincipleName + REALM(在我的情况下为 http/myserver.mycompany.com@MYCOMPANY.COM)
  • 导出密钥表,一切正常

在目标机器上

kinit -k -t http/myserver.mycompany.com
Run Code Online (Sandbox Code Playgroud)

没有任何抱怨的工作!希望这有助于其他人尝试使用 Samba4 设置 SSO ...