系统管理指南:安全性服务

管理密钥表文件

提供服务的每台主机都必须包含称为 keytab(密钥表)的本地文件,keytab(密钥表)是“key table(密钥表)”的缩写。密钥表包含相应服务的主体,称为服务密钥。服务使用服务密钥向 KDC 进行自我验证,并且只有 Kerberos 和服务本身知道服务密钥。例如,如果您有基于 Kerberos 的 NFS 服务器,则该服务器必须具有包含其 nfs 服务主体的密钥表文件。

要将服务密钥添加至密钥表文件,应使用 kadmin 的 ktadd 命令,将相应的服务主体添加至主机的密钥表文件。由于要将服务主体添加至密钥表文件,因此该主体必须已存在于 Kerberos 数据库中,以便 kadmin 可验证其存在。在主 KDC 上,密钥表文件的缺省位置为:/etc/krb5/kadm5.keytab。在提供基于 Kerberos 的服务的应用程序服务器上,密钥表文件的缺省位置为:/etc/krb5/krb5.keytab。

密钥表类似于用户的口令。正如用户保护其口令很重要一样,应用程序服务器保护其密钥表文件同样也很重要。应始终将密钥表文件存储在本地磁盘上,并且只允许 root 用户读取这些文件。另外,绝不要通过不安全的网络发送密钥表文件。

还有一种特殊情况需要将 root 主体添加至主机的密钥表文件。如果希望 Kerberos 客户机用户挂载基于 Kerberos 的 NFS 文件系统(要求与超级用户等效的权限),则必须将客户机的 root 主体添加至客户机的密钥表文件。否则,每当用户要使用 root 权限挂载基于 Kerberos 的 NFS 文件系统时,即使正在使用自动挂载程序,也必须以 root 身份使用 kinit 命令来获取客户机 root 主体的凭证。


注 –

设置主 KDC 时,需要将 kadmind 和 changepw 主体添加至 kadm5.keytab 文件。


可用于管理密钥表文件的另一个命令是 ktutil 命令。使用此交互式命令,可在没有 Kerberos 管理权限的情况下管理本地主机的密钥表文件,因为 ktutil 不会像 kadmin 那样与 Kerberos 数据库交互,因此,将主体添加至密钥表文件后,可使用 ktutil 来查看密钥表文件中的密钥列表,或临时禁用对服务的验证。


注 –

使用 kadmin 中的 ktadd 命令更改密钥表文件中的主体时,将生成一个新的密钥并将其添加至密钥表文件。


管理密钥表文件(任务列表)

任务 

说明 

参考 

将服务主体添加至密钥表文件。 

使用 kadmin 的 ktadd 命令将服务主体添加至密钥表文件。

如何将 Kerberos 服务主体添加至密钥表文件

从密钥表文件中删除服务主体。 

使用 kadmin 的 ktremove 命令从密钥表文件中删除服务主体。

如何从密钥表文件中删除服务主体

显示密钥表文件中的密钥列表(主体列表)。 

使用 ktutil 命令来显示密钥表文件中的密钥列表。

如何显示密钥表文件中的密钥列表(主体)

临时禁用对主机上的服务的验证。 

此过程可以快速地临时禁用对主机上的服务的验证,而不需要 kadmin 权限。

使用 ktutil 从服务器的密钥表文件中删除服务主体之前,应将原始密钥表文件复制到一个临时位置。如果要再次启用该服务,请将原始密钥表文件复制回其相应的位置。

如何临时禁用对主机上的服务的验证

Procedure如何将 Kerberos 服务主体添加至密钥表文件

  1. 确保 Kerberos 数据库中已存在该主体。

    有关更多信息,请参见如何查看 Kerberos 主体列表。

  2. 成为需要将主体添加至其密钥表文件的主机的超级用户。

  3. 启动 kadmin 命令。


    # /usr/sbin/kadmin
    
  4. 使用 ktadd 命令将主体添加至密钥表文件。


    kadmin: ktadd [-e enctype] [-k keytab] [-q] [principal | -glob principal-exp]
    -e enctype

    覆盖 krb5.conf 文件中定义的加密类型列表。

    -k keytab

    指定密钥表文件。缺省情况下,使用 /etc/krb5/krb5.keytab。

    -q

    显示简要信息。

    principal

    指定要添加至密钥表文件的主体。可以添加以下服务主体:host、root、nfs 和 ftp。

    -glob principal-exp

    指定主体表达式。与 principal-exp 匹配的所有主体都将添加至密钥表文件。主体表达式的规则与 kadmin 的 list_principals 命令的规则相同。

  5. 退出 kadmin 命令。


    kadmin: quit
    

示例 24–16 将服务主体添加至密钥表文件

在以下示例中,kadmin/admin 和 kadmin/changepw 主体被添加至主 KDC 的密钥表文件。对于该示例,密钥表文件必须是在 kdc.conf 文件中指定的文件。


kdc1 # /usr/sbin/kadmin.local

kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/admin kadmin/changepw

EnEntry for principal kadmin/admin@example.com with kvno 3, encryption type AES-128 CTS mode

          with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.

Entry for principal kadmin/admin@example.com with kvno 3, encryption type Triple DES cbc

          mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab.

Entry for principal kadmin/admin@example.com with kvno 3, encryption type ARCFOUR

          with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.

Entry for principal kadmin/admin@example.com with kvno 3, encryption type DES cbc mode

          with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.

Entry for principal kadmin/changepw@example.com with kvno 3, encryption type AES-128 CTS

          mode with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.

Entry for principal kadmin/changepw@example.com with kvno 3, encryption type Triple DES cbc

          mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab.

Entry for principal kadmin/changepw@example.com with kvno 3, encryption type ARCFOUR

          with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.

Entry for principal kadmin/changepw@example.com with kvno 3, encryption type DES cbc mode

          with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.

kadmin.local: quit

在以下示例中,denver 的 host 主体被添加至 denver 的密钥表文件,以便 KDC 验证 denver 的网络服务。


denver # /usr/sbin/kadmin

kadmin: ktadd host/denver@example.com@EXAMPLE.COM

Entry for principal host/denver@example.com with kvno 3, encryption type AES-128 CTS mode

          with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/krb5.keytab.

Entry for principal host/denver@example.com with kvno 3, encryption type Triple DES cbc mode

          with HMAC/sha1 added to keytab WRFILE:/etc/krb5/krb5.keytab.

Entry for principal host/denver@example.com with kvno 3, encryption type ARCFOUR

          with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab.

Entry for principal host/denver@example.com with kvno 3, encryption type DES cbc mode

          with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab.

kadmin: quit

Procedure如何从密钥表文件中删除服务主体

  1. 成为包含必须从其密钥表文件中删除的服务主体的主机的超级用户。

  2. 启动 kadmin 命令。


    # /usr/sbin/kadmin
    
  3. (可选的)要显示密钥表文件中的当前主体(密钥)列表,请使用 ktutil 命令。

    有关详细说明,请参见如何显示密钥表文件中的密钥列表(主体)。

  4. 使用 ktremove 命令从密钥表文件中删除主体。


    kadmin: ktremove [-k keytab] [-q] principal [kvno | all | old ]
    -k keytab

    指定密钥表文件。缺省情况下,使用 /etc/krb5/krb5.keytab。

    -q

    显示简要信息。

    principal

    指定要从密钥表文件中删除的主体。

    kvno

    删除密钥版本号与 kvno 匹配的指定主体的所有项。

    all

    删除指定主体的所有项。

    old

    删除指定主体(具有最高密钥版本号的主体除外)的所有项。

  5. 退出 kadmin 命令。


    kadmin: quit
    

示例 24–17 从密钥表文件中删除服务主体

在以下示例中,从 denver 的密钥表文件中删除了 denver 的 host 主体。


denver # /usr/sbin/kadmin

kadmin: ktremove host/denver.example.com@EXAMPLE.COM

kadmin: Entry for principal host/denver.example.com@EXAMPLE.COM with kvno 3

  removed from keytab WRFILE:/etc/krb5/krb5.keytab.

kadmin: quit

Procedure如何显示密钥表文件中的密钥列表(主体)

  1. 成为包含密钥表文件的主机的超级用户。


    注 –

    尽管可以创建由其他用户拥有的密钥表文件,但使用密钥表文件的缺省位置需要 root 拥有权。


  2. 启动 ktutil 命令。


    # /usr/bin/ktutil
    
  3. 使用 read_kt 命令将密钥表文件读入密钥列表缓冲区。


    ktutil: read_kt keytab
    
  4. 使用 list 命令显示密钥列表缓冲区。


    ktutil: list
    

    此时会显示当前的密钥列表缓冲区。

  5. 退出 ktutil 命令。


    ktutil: quit
    

示例 24–18 显示密钥表文件中的密钥列表(主体)

以下示例显示了 denver 主机的 /etc/krb5/krb5.keytab 文件中的密钥列表。


denver # /usr/bin/ktutil

    ktutil: read_kt /etc/krb5/krb5.keytab

    ktutil: list

slot KVNO Principal

---- ---- ---------------------------------------

   1    5 host/denver@EXAMPLE.COM

    ktutil: quit

Procedure如何临时禁用对主机上的服务的验证

有时可能需要在网络应用程序服务器上,临时禁用对服务(如 rlogin 或 ftp)的验证机制。例如,可能希望在执行维护过程时禁止用户登录到系统。使用 ktutil 命令,可以通过从服务器的密钥表文件中删除服务主体来完成此任务,而不需要 kadmin 权限。要再次启用验证,只需要将保存的原始密钥表文件复制回其原始位置。


注 –

缺省情况下,大多数服务都被设置为要求验证。如果某服务未设置为要求验证,则即使对该服务禁用验证,该服务仍然会运行。


  1. 成为包含密钥表文件的主机的超级用户。


    注 –

    尽管可以创建由其他用户拥有的密钥表文件,但使用密钥表文件的缺省位置需要 root 拥有权。


  2. 将当前密钥表文件保存到临时文件。

  3. 启动 ktutil 命令。


    # /usr/bin/ktutil
    
  4. 使用 read_kt 命令将密钥表文件读入密钥列表缓冲区。


    ktutil: read_kt keytab
    
  5. 使用 list 命令显示密钥列表缓冲区。


    ktutil: list
    

    此时会显示当前的密钥列表缓冲区。请注意要禁用的服务的槽号。

  6. 要临时禁用主机的服务,请使用 delete_entry 命令从密钥列表缓冲区中删除特定的服务主体。


    ktutil: delete_entry slot-number
    

    其中,slot-number 指定要删除的服务主体的槽号,可使用 list 命令来显示它。

  7. 使用 write_kt 命令,将密钥列表缓冲区写入新的密钥表文件。


    ktutil: write_kt new-keytab
    
  8. 退出 ktutil 命令。


    ktutil: quit
    
  9. 移动新的密钥表文件。


    # mv new-keytab keytab
    
  10. 如果要再次启用该服务,请将临时(原始)密钥表文件复制回其原始位置。


示例 24–19 临时禁用主机上的服务

在以下示例中,临时禁用了 denver 主机上的 host 服务。要重新启用 denver 上的主机服务,应将 krb5.keytab.temp 文件复制到 /etc/krb5/krb5.keytab 文件中。


denver # cp /etc/krb5/krb5.keytab /etc/krb5/krb5.keytab.temp

denver # /usr/bin/ktutil

    ktutil:read_kt /etc/krb5/krb5.keytab

    ktutil:list

slot KVNO Principal

---- ---- ---------------------------------------

   1    8 root/denver@EXAMPLE.COM

   2    5 host/denver@EXAMPLE.COM

    ktutil:delete_entry 2

    ktutil:list

slot KVNO Principal

---- ---- --------------------------------------

   1    8 root/denver@EXAMPLE.COM

    ktutil:write_kt /etc/krb5/new.krb5.keytab

    ktutil: quit

denver # cp /etc/krb5/new.krb5.keytab /etc/krb5/krb5.keytab