提问者:小点点

Kerberos身份验证。钥匙扣和车票


我有几个关于Kerberos的问题,它是如何工作的。

  1. 是否每个服务(例如使用 Kerberos 身份验证的 Postgres)都必须具有由 KDC 生成的密钥表?或者,也许服务的 kerberos 身份验证可以没有密钥表文件?
  2. 密钥表如何确定添加了用户的新主体?我的意思是,我已经为 Postgres 生成了密钥表,并将其发送到 Postgres 的服务中,并与 postgresql.conf 中的密钥表文件匹配。然后我在Postgres数据库中创建了角色Born(例如),并将其添加到KDC kadmin中。之后,我可以从另一台计算机(在 kinit Born 之后)连接到 Postgres 服务。但是在添加新的校长 Born 之前,我已经制作了密钥表。Postgres的关键表如何设法找到Born?关于从 kadmin 存储到另一台服务器上的密钥选项卡 Postgres 的新添加用户的信息如何?

共1个答案

匿名用户

是否每个服务(例如使用 Kerberos 身份验证的 Postgres)都必须具有由 KDC 生成的密钥表?或者,也许服务的 kerberos 身份验证可以没有密钥表文件?

是的,每个服务都必须有自己的Kerberos标识,并且必须知道其密钥。密钥可能不一定存储在keytab文件中(例如,Windows AD计算机使用密码),但通常是这样。

Postgres仅使用键表与KErberos一起使用。但是有些不整洁的键表。

所有服务都有自己的Kerberos主体和自己的密钥(如果您查看Wikipedia图表,则为KS),只是它并不总是以keytab的特定形式存储。

托管在Windows Server系统上的服务通常不使用keytab,因为它们通过Windows SSPI使用Kerberos,该SSPI使用服务用户帐户的密码或存储在LSASS中的“机器密码”,并从该密码派生Ks(就像用户在kinit期间如何从密码派生密钥一样)。

然而,无论密钥是否来源于密码,本质上都是一样的。该服务仍然有自己的标识和自己的Kerberos密钥。(这也意味着客户端可能有一个keytab,并将其与kinit一起使用,而不是使用密码。)

keytab是如何确定添加了新的用户主体的?

并没有。服务器的keytab根本不关心用户;它标识服务器本身。它的用途有点像服务器的TLS证书和私钥(尽管机制完全不同)。

另外,Kerberos的工作不是关心Postgres用户。Kerberos主体到Postgres角色的映射发生在Kerberos身份验证完成之后。

换句话说,Postgres 不会直接从 Kerberos 接收角色名称,它只接收 Kerberos 主体名称,并且必须通过自己的方式将其映射到 Postgres 角色。对于 Kerberos 身份验证成功,但角色映射(即授权)失败是完全有效的。