我在一个完全封闭的系统中管理使用Kerberos的Hortonworks(Ambari)安装处于一个相当不利的位置。
以下是问题:
我发现服务器x上的密钥表文件(让我们称之为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, - reveve开关(保留版本)。
我需要在7台服务器(Hadoop节点)上获取此密钥表。我不能使用scp,ssh作为封闭网络。
有没有办法让我在本地创建(拉动foo keytab)而不增加版本号?
:0/
谢谢
数。
答案 0 :(得分:1)
如果你的ipa-getkeytab
版本不支持-r
选项来检索keytabs,那么你唯一的另一个选择是在一台服务器上检索一次keytabs并将它们安全地传输到其他服务器。
抱歉,没有其他选择。 FreeIPA实现的KDC数据库驱动程序(DAL驱动程序)不允许为远程kadmin连接分配特定的管理权限,因此您甚至无法执行'getprinc'或'listprincs'命令。
答案 1 :(得分:0)
keytab 是一个包含Kerberos主体和加密密钥对(从Kerberos密码派生)的文件。 您可以使用密钥表文件在不输入密码的情况下使用Kerberos对各种远程系统进行身份验证。
Keytab文件通常用于允许脚本使用Kerberos自动进行身份验证,而无需人工交互或访问存储在纯文本文件中的密码。
Kerberos keytabs包含"版本号"
存储在keytab 文件中的版本必须与内部 Kerberos相同。 ERROR (问题中)是由这种情况引起的。
您需要能够对密钥表文件和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版)
检查版本号(在密钥表文件和Kerberos中),确保它们是相同。
如果密钥表文件中的版本号不同(来自 in Kerberos)。您需要重新创建(foo.keytab)。
要检查密钥表中的原则,请使用 klist -kte密钥表文件命令
使用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
密钥表中的版本号和kerberos必须相同。
重新启动Ambari服务
你会看到一个"绿色" Ambari web-ui。