我们使用 Puppet 来配置我们的服务器,但目前为它们创建 Kerberos 密钥表是一个手动过程。我们希望 Unix 计算机的 Kerberos 密钥表自动地在机器首次引导时生成。
各种教程(例如这) 解释一下,新机器如何获取 keytab本身——但是这需要 Samba 和其他工具,而我们希望避免安装这些工具。
现有的 Unix 计算机是否可以请求密钥表其他从 AD 服务器中删除 Unix 计算机?如何删除?我们是否必须编写代码(也许,使用 Samba4 的Python API—— 目前记录不全),或者可以用现有工具来实现吗?
答案1
没有任何透明的方法可以做到这一点。主机密钥表代表主机机密的副本 - 只有 Kerberos 服务器(Active Directory 域控制器)和客户端知道的密码。在正常情况下,密钥表是在客户端加入域时创建的(此时用户对域进行身份验证并为工作站创建新的密钥)。加入域后,计算机(默认情况下)每 30 天更新一次密钥。
Samba 客户端可以生成密钥表,但它通过使用“net join”命令验证用户帐户来实现这一点。验证用户的密码用于创建初始主机密钥。
其他可以从 Linux 客户端“加入域”并创建初始密钥(和匹配的密钥表文件)的程序包括 Dell Authentication Services(以前称为 Quest Authentication Services,以前称为 Vintela Authentication Services,现在仍主要称为“vas”);LikeWise;和 Centrify。
要执行初始加入,客户端需要使用有权创建计算机对象、将工作站加入域或重置现有域成员的计算机帐户密码的域帐户向域进行身份验证。用户帐户可以使用密码进行身份验证,也可以使用现有的用户密钥表文件进行身份验证。
参考实现 MIT Kerberos 可以创建密钥表文件,但据我所知,它无法在域上创建新的计算机帐户。
编辑:如果您的发行版包含“kclient”,那么它应该可以满足您的要求;您仍然需要将凭证嵌入到您的加入脚本中,以便最初向域进行身份验证。请参阅https://docs.oracle.com/cd/E36784_01/html/E36871/kclient-1m.html和
答案2
好的,首先,感谢@Jason-Walker 的指点kclient
-- 一个典型的 Sun 实现(功能齐全但很丑陋),带有ksh
用 C 语言实现的辅助实用程序。显然,加入域包括通过标准 LDAP 创建主机的条目 -- Sun 的脚本使用来自 OpenLDAP 的ldapsearch
、、ldapmodify
和。ldapadd
一旦主机通过脚本注册(与@Jason-Walker的评估相反,这能可以从域中的任何主机完成),它会调用ksetpw
生成密钥表的辅助实用程序。我甚至几乎完成了将其全部移植到 Linux 和 BSD 的工作,然后我安德克利,它已经完全满足了我们的需求,并且可以作为 RPM 使用。我甚至创建了一个实用程序的 FreeBSD 端口(在海姆达尔的支持下),纯粹是出于感激。
有很多的欣喜。