我目前正在学习 Kerberos,但有些东西我不太明白:看起来,管理服务器:kadmind
- 不必与 KDC 在同一台机器上运行。但这听起来很奇怪 - 因为kadmind
通过直接访问数据库文件principal
或principal.ok
(不确定具体哪个做了什么,但总的来说,它们是保存数据库本身的那些)。
因此,我可以理解,我可以使用 kadmin 实用程序从其他机器运行管理任务kadmin
- kadmin 实用程序仅与kadmind
主 KDC 机器上运行的 进行通信。但是 本身怎么可能kadmind
在另一台机器上运行呢?
答案1
嗯,一种可能性是,kadmind
可以有自己的副本数据库的主副本,并且所有 KDC 都只有它的副本。
MIT Krb5 和 Heimdal Kerberos 都具有复制工具,例如kpropd
,用于构建冗余 KDC 集群。因此,在最简单的情况下,您可以拥有三个 KDC,但其中只有一个运行 kadmind,用于kprop
传输更改。(除了可选地跟踪“上次登录”时间外,KDC 本身不会进行永久性的数据库更新,因此复制可以是单向的。)
同样,您也可以在 DNS 中拥有类似于“隐形主机”的设置,其中主副本由未暴露给客户端的机器进行管理,并且所有更改都通过 kprop(或 rsync,或通过 SSH 的基本转储+加载)推送到 KDC。
另一种可能性是 KDC不使用基于文件的 BerkeleyDB 存储首先。MIT Kerberos 和 Heimdal 实际上都可以使用LDAP 服务器作为 KDC 数据库,一旦拥有它,该kadmind
进程就可以远程连接到 LDAP 服务器——根本没有principal
文件。
(一些 LDAP 服务器还支持多主复制,可用于全部副本可写,例如,您可以有 3 台机器运行 OpenLDAP + KDC + kadmind,它们都同样是“主”机器。
事实上,如果您查看 Microsoft 的 Active Directory,它完全基于包含所有信息(包括 KDC 和 DNS 数据)的 LDAP 目录,并且所有 DC 都会向所有方向复制更改。它没有单独的“kadmin”进程;相反,Kerberos 主体是通过 LDAP 作为整体用户或机器帐户的一部分创建的,您只需在您想要的任何 DC 上创建该条目即可。)