1

我试图了解 Kerberos 并对服务主体感到困惑。假设我想访问由 Kerberos 保护的 NFS 共享。

我有以下三个不同的节点:

  1. 一台客户端机器(有一个名为test的用户)
  2. KDC (AS/TGS)
  3. NFS 服务器

现在 KDC 包含用户名为test的主体数据库。此外,KDC 还包含一个nfs/DOMAINNAMEFROMNFSSERVER主体。此主体还使用密钥表与 NFS 服务器共享。为了建立一个 kerberized nfs 会话,用户测试从 KDC 请求一个 TGT。

但是为什么互联网上的所有示例都告诉客户端机器还需要一个应该包含nfs/DOMAINNAMEFROMNFSSERVER主体的密钥表?

我了解服务主体只需要存在于 KDC 数据库中并直接存在于 NFS 服务器上(使用密钥表)。有人可以澄清为什么密钥表也需要出现在客户端上吗?

在此先感谢您的帮助!

4

1 回答 1

0

参考:man rpc.gssd,它包含了问题的详细答案。顺便说一句,客户端上的主体可以不同于 nfs/@REALM。

从手册页中截取:


   Machine Credentials
   A  user credential is established by a user and is then shared with the kernel and rpc.gssd.  A machine credential is established by rpc.gssd for
   the kernel when there is no user.  Therefore rpc.gssd must already have the materials on hand to establish this credential without requiring user
   intervention.

   rpc.gssd searches the local system's keytab for a principal and key to use to establish the machine credential.  By default, rpc.gssd assumes the
   file /etc/krb5.keytab contains principals and keys that can be used to obtain machine credentials.

   rpc.gssd searches in the following order for a principal to use.  The first matching credential is used.  For the search, <hostname> and  <REALM>
   are replaced with the local system's hostname and Kerberos realm.

      <HOSTNAME>$@<REALM>
      root/<hostname>@<REALM>
      nfs/<hostname>@<REALM>
      host/<hostname>@<REALM>
      root/<anyname>@<REALM>
      nfs/<anyname>@<REALM>
      host/<anyname>@<REALM>
于 2018-11-22T01:51:35.163 回答