0

在一个完全封闭的系统中管理使用 Kerberos 的 Hortonworks (Ambari) 安装时,我处于一个相当不值得羡慕的位置。

这是问题所在:

我发现服务器 x 上的 keytab 文件(我们称之为 foo)不一致:

$klist -kte /etc/security/keytabs/foo.keytab

KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
12 10/21/15 16:24:27 foo@myrealm (xxxxxxxxxxxxx)
12 10/21/15 16:24:27 foo@myrealm (xxxxxxxxxxxxx)

在 free-ipa 服务器上,我运行以下命令:

$ kadmin.local -q 'get_principal foo'
Authenticating as foo with password.
Principal: 
Expiration date: 
Last password change: 
Password expiration date: [none]
Maximum ticket life: 
Maximum renewable life: 
Last modified: xxxxx (foo)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 4
Key: vno 21, abs-my-security-type, xxxxxx
Key: xxxxxxx
Key: xxxxxxx
Key: xxxxxxx
[snip]
Attributes: REQUIRES_PRE_AUTH
Policy: [none]

“for foo”的版本是不同的。freeipa 服务器上的版本 21。密钥表上的版本 12。

我发现了“ipa-getkeytab”,它会给我一个 keytab,但是每当我运行它时都会增加版本号(在 IPA 服务器上)。

我的 ipa-getkeytab 版本没有 -r, --retrieve 开关(保留版本)。

我需要在 7 个服务器(Hadoop 节点)上获取此密钥表。我不能使用 scp、ssh 作为封闭网络。

有没有办法让我在本地创建(拉出 foo keytab)而不增加版本号?

:0/

谢谢

迈尔斯。

4

2 回答 2

1

如果您的版本ipa-getkeytab不支持-r检索密钥表的选项,那么您唯一的其他选择是在一台服务器上检索一次密钥表并将它们安全地传输到其他服务器。

抱歉,没有其他选择。KDC 数据库驱动程序(DAL 驱动程序)的 FreeIPA 实现不允许为远程 kadmin 连接分配特定的管理员权限,因此您甚至无法执行“getprinc”或“listprincs”命令。

于 2015-10-23T21:21:11.430 回答
0

Kerberos 密钥表故障排除

密钥表是一个包含 Kerberos 主体和加密密钥对(派生自 Kerberos 密码)的文件。您可以使用密钥表文件通过 Kerberos 对各种远程系统进行身份验证,而无需输入密码。

Keytab 文件通常用于允许脚本使用 Kerberos 自动进行身份验证,而无需人工交互或访问存储在纯文本文件中的密码。

Kerberos 密钥表包含“版本号”

keytab 文件中存储的版本必须与Kerberos中的版本相同。错误(在问题中)是由这种情况引起的。

您需要能够对keytab 文件和 Kerberos 进行故障排除。

Keytab 文件 -(在 Hortonworks / Ambari 中)这些文件存储在/etc/security/keytabs目录中:

[root@box keytabs]# ls -ltr
total 24

-r--r-----. 1 hdfs      hadoop    1054 Oct 26 14:24 foo.keytab

“修复” foo.keytab 的实际示例。

使用 klist 命令显示存储的主体和版本 (KVNO):

$ sudo su -
[root@box ~]# cd /etc/security/keytabs/
[root@box keytabs]# klist -kte foo.keytab
Keytab name: FILE:hdfs.headless.keytab
KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
  27 10/26/15 14:08:16 foo@principal(******)
  27 10/26/15 14:08:17 foo@principal(******)
  27 10/26/15 14:08:17 foo@principal (******)
  27 10/26/15 14:08:17 foo@principal(******)

存储在 foo.keytab 中的主体的版本号为 27。

比较 Kerberos 中的版本号

使用kadmin.local命令查询 Kerberos 原理(在您的 Kerberos / freeipa 框中):

[root@kerbbox ~]# kadmin.local
Authenticating as principal admin/admin@***** with password.
kadmin.local:  getprinc foo@principal
Principal: foo@principal
Expiration date: [never]
Last password change: Mon Oct 26 14:08:17 GMT 2015
Password expiration date: Tue Jan 19 14:19:33 GMT 2016
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: Mon Oct 26 14:08:17 GMT 2015 (admin/admin@*********)
Last successful authentication: Mon Oct 26 14:36:33 GMT 2015
Last failed authentication: Mon Oct 26 12:33:14 GMT 2015
Failed password attempts: 0
Number of keys: 4
Key: vno 34, ******, *****
Key: vno 34, ******, *****
Key: vno 34, ******, *****
Key: vno 34, ******, *****
MKey: vno 1
Attributes: REQUIRES_PRE_AUTH
Policy: [none]
kadmin.local:
kadmin.local:

使用 getprinc命令获取以下详细信息:

  • foo@principal(版本 34)

    检查版本号(在 keytab 文件和 Kerberos 中),确保它们相同

重新创建密钥表文件

如果您的密钥表文件中的版本号不同(来自Kerberos)。您将需要重新创建(foo.keytab)。

要检查 keytab 中的原则,请使用klist -kte keytab file 命令

  • 使用 kadmin.local 和ktadd命令创建foo.keytab文件:

    [root@kerbbox ~]# kadmin.local
    
    ktadd -k /root/foo.keytab foo@principal
    

    示例输出(foo@principal 的版本 11 ):

    11 10/09/15 14:41:58 foo@principal (*******)
    11 10/09/15 14:41:58 foo@principal (*******)
    11 10/09/15 14:41:58 foo@principal (*******)
    11 10/09/15 14:41:58 foo@principal (*******)
    

    每次运行ktadd命令时,(原则的)版本号都会递增。

    foo.keytab复制到集群中的服务器,并确保保留权限/所有权:

    # chmod 440 foo.keytab
    # chown hdfs:hadoop foo.keytab
    
    # klist -kte hdfs.headless.keytab
    
    # ls -ltr
    -r--r-----. 1 hdfs      hadoop    1054 Oct 26 14:24 foo.keytab
    

    keytab 中的版本号,和kerberos 需要相同

    重启 Ambari 服务

    您将看到一个“绿色”的 Ambari web-ui。

于 2015-10-27T11:35:24.090 回答