guardian 3.2.0 以下版本如何构造带有hostname的principal和keytab

  使用配置
内容纲要

背景


越来越多的现场需求对接开源的产品,比如Spark、presto等,如果集群开了Guardian安全,这些开源的可能会用到带hostname的Principal,不带hostname会报错。

  • 在 TDH5.1 中用户可以通过界面来添加相应的用户(带hostname
  • 但是在TDH5.2.x 及 TDH6.0.x 中用户名中不能带hostname了,且添加后的用户的principal不带hostname

从guardian页面下载下来的keyta文件是没有hostname 的,原因是带hostname的principal一般是给底层服务使用,不能作为普通用户的用户名。

注意:本文适用于guardian (5.1,3.2.0)版本,可以通过下面的命令查看容器正在使用的guardian版本。

kubectl describe po $(kubectl get po -o wide | grep -i guardian-server | head -1 | awk '{print $1}') | grep -i "image:"

  • guardian-3.1.3 之前版本,需要手动放置 kadmin.guardian 脚本
  • guardian-3.1.3 及以后版本 kadmin.guardian已经内置在guardian server的镜像中,一般为/usr/lib/guardian/scripts/kadmin.guardian

官方内部链接:https://wiki.transwarp.io/pages/viewpage.action?pageId=23465307

解决方案


这里以realm为TDH的集群为例,需要创建一个 test000/tdh001@TDHBAK的principal,并构造其keytab

1、将guardian-utils-guardian-3.1.3.jar包部署到容器内

可选择持久化目录存放(e.g. /var/log/guardian/),这样就无须持久化镜像;注意不要放到/usr/lib/guardian/lib/下。

下载地址:
链接:https://pan.baidu.com/s/1N9vj7bLh0WqyE0HzKcBdUg
提取码:n3bk

MD5: c47a21240ba0293d17d74535904defaf

2、放置kadmin.guardian脚本,将该jar包的路径添加到classpath最开始

#!/usr/bin/env bash
TRANSWARP_UTILS=/etc/default/transwarp-utils
APACHEDS=/etc/guardian-apacheds
JAVA=java
[ -e "$TRANSWARP_UTILS" ] && source ${TRANSWARP_UTILS}
if [ x"$JAVA_HOME" != x"" ]; then
JAVA=$JAVA_HOME/bin/java
fi
$JAVA -Dguardian.root.logger='INFO, RFA' -cp /var/log/guardian/guardian-utils-guardian-3.1.3.jar:$APACHEDS/conf:/usr/lib/guardian/lib/* io.transwarp.guardian.utils.KadminShell "$@"

3、在使用该脚本构造principal时加上参数-pau,添加带有@域的uid

# -w 后面的密码,可以到manager数据库内执行 SELECT value FROM transwarp_manager.service_config  where name='guardian.ds.root.password' 查看,并不是admin租户的密码哦
> /var/log/guardian/kadmin.guardian -H 172.22.33.2 -P 10389  -b admin -w 123456 -r TDHBAK -q "addprinc -pw 123456 -pau test000/tdh001"

可以通过 ./kadmin.guardian -help 或者./kadmin.guardian -h查看使用说明

 -b    The zookeeper parent znode for HA, guardian is default
 -d    The suffix of the ds server, such as dc=tdh
 -H    The host of ds server, the default is localhost
 -P    The port of ds server, the default is 10389
 -p    The dn used to connect to the ds server, such as
            uid=admin,ou=system
 -Q    The zookeeper quorum for HA
 -q    The kadmin query, must be xst, addprinc, listprincs, addent
 -r    The realm of the kerberos, such as TDH
 -T         Whether TLS should be used
 -w    The password used to connect to the ds server

4、检查principal的uid是否带有<@realm>

# 可以看到新增了一个krbtgt/FFF@TDH
[root@mll01 guardian]# ldapsearch -H ldap://172.22.33.2:10389 -x -D uid=admin,ou=system -w 123456 -b ou=System,ou=People,dc=tdh |grep 'uid: test000/tdh001@TDHBAK'
uid: test000/tdh001@TDHBAK

file

5、生成keytab文件

[root@mll01 guardian]# ./kadmin.guardian -H 172.22.33.2  -P 10389 -w 123456 -q "xst test000/tdh001@TDHBAK -k /var/log/guardian/test000.keytab"

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。