Kerberos常用命令行
在对接一些大数据常用组件时,经常要使用Kerberos认证,下面整理一些常用的常用的命令行
服务端安装
服务端使用
假设你是Kerberos的服务端的运维人员,现在你需要给一个新团队分配一个租户,以提供访问一些大数据组件,你需要执行一些命令完成,一个租户的初始化。
这里假设你已经有一个Kerberos服务端相关服务、管理员信息;那么你直接在KDC节点,执行如下脚本即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#!/bin/bash
# file_name: init_k_user.sh
# create_time: 2024/07/11
# author:heeeee
# description: 创建principal的脚本,需要在kdc节点,用root用户执行
# 配置租户名、域
K_USER=yourname
# Kerberos域,由Kerberos服务初始化时决定,不可随意更改
K_REALM=EXAMPLE.COM
echo "即将创建 $K_USER@$K_REALM 租户"
# 为该租户创建家目录(建议在每个节点都执行一下,为了保证租户和linux用户能对应起来)
useradd $K_USER
# 创建一个新的租户,随机生成密码
# kadmin.local -q "addprinc -randkey $K_USER@$K_REALM"
# 创建一个新的租户,也可手动配置密码
kadmin.local -q "addprinc -pw $K_USER@pass $K_USER@$K_REALM"
echo "$K_USER@$K_REALM 租户创建成功,密码 $K_USER@pass"
# 导出keytab文件
kadmin.local -q "xst -norandkey -k /home/$K_USER/$K_USER.keytab $K_USER"
echo "$K_USER@$K_REALM 租户导出keytab文件成功"
# keytab文件权限修改
chmod 400 /home/$K_USER/$K_USER.keytab
chown $K_USER:$K_USER /home/$K_USER/$K_USER.keytab
# 建议在hdfs上为该租户创建一个目录,需要hdfs用户权限
echo "切换到hdfs用创建$K_USER 用户的家目录"
su - hdfs <<EOF
hdfs dfs -mkdir /user/$K_USER;
hdfs dfs -chown -R $K_USER:$K_USER /user/$K_USER;
exit;
EOF
|
下面时脚本执行后的样例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@localhost kerberos]# sh init_k_user.sh
即将创建 [email protected] 租户
Authenticating as principal example/[email protected] with password.
WARNING: no policy specified for [email protected]; defaulting to no policy
add_principal: Principal or policy already exists while creating "[email protected]".
[email protected] 租户创建成功,密码 yourname@pass
Authenticating as principal example/[email protected] with password.
Entry for principal yourname with kvno 1, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/home/yourname/yourname.keytab.
Entry for principal yourname with kvno 1, encryption type des3-cbc-sha1 added to keytab WRFILE:/home/yourname/yourname.keytab.
Entry for principal yourname with kvno 1, encryption type arcfour-hmac added to keytab WRFILE:/home/yourname/yourname.keytab.
Entry for principal yourname with kvno 1, encryption type camellia256-cts-cmac added to keytab WRFILE:/home/yourname/yourname.keytab.
Entry for principal yourname with kvno 1, encryption type camellia128-cts-cmac added to keytab WRFILE:/home/yourname/yourname.keytab.
Entry for principal yourname with kvno 1, encryption type des-hmac-sha1 added to keytab WRFILE:/home/yourname/yourname.keytab.
Entry for principal yourname with kvno 1, encryption type des-cbc-md5 added to keytab WRFILE:/home/yourname/yourname.keytab.
[email protected] 租户导出keytab文件成功
切换到hdfs用创建yourname 用户的家目录
|
至此,你已经创建了一个yourname的租户,接下来,将这两个文件,提供给使用方即可
- krb5.conf :
/etc/krb5.conf 这个文件是Kerberos服务端初始化时确立的,一般不会修改
- keytab :
/home/yourname/yourname.keytab yourname用户的密钥文件
客户端安装
1
2
|
# 如果要通过Kerberos认证,有的要确保机器有kerberos相关命令,如kinit klist,如果没有命令可以手动安装一下,需要root权限
sudo yum install krb5-workstation
|
客户端使用
一般情况下下,服务端会提供两个配置问题,用来通过Kerberos认证
- krb5.conf 此文件主要用于指明kdc地址、Kerberos域、以及一些时间配置(如默认过期时间等)
- keytab 此文件主要用于存储租户的认证信息,这里的租户,你可以简单理解为就是一个Kerberos用户,你的用户信息是在kerberos服务端配置的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# krb5.conf文件需要放置在/etc/krb5.conf,如果你没有root权限,则无法修改/etc/krb5.conf
# 可以使用如下命令修改环境变量实现切换, 这个小技巧,在很多生产环境还是很实用的
export KRB5_CONFIG=/path/krb5.conf
# 登录,如果没有报错则证明登录成功
kinit -kt yourname.keytab yourname
# 某些时候,可能服务端并没有提供给你租户名,或者提供不准确,你也可以通过命令行查看该yourname.keytab存储的用户信息,实际上一个keytab文件可以存储多个Kerberos租户信息
[yourname@localhost ~]$ klist -ket yourname.keytab
Keytab name: FILE:yourname.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
1 07/11/2024 20:02:06 [email protected] (aes128-cts-hmac-sha1-96)
1 07/11/2024 20:02:06 [email protected] (des3-cbc-sha1)
1 07/11/2024 20:02:06 [email protected] (arcfour-hmac)
1 07/11/2024 20:02:06 [email protected] (camellia256-cts-cmac)
1 07/11/2024 20:02:06 [email protected] (camellia128-cts-cmac)
1 07/11/2024 20:02:06 [email protected] (des-hmac-sha1)
1 07/11/2024 20:02:06 [email protected] (des-cbc-md5)
# 通过如上命令你就可以准确的判断出,该yourname.keytab文件的租户名是 [email protected]
# 所以, 你也可以通过如下命令进行登录
kinit -kt yourname.keytab [email protected]
# 还有,你可以通过用户名密码进行登录,这种方式用的较少
kinit [email protected]
# 最后可以通过klist命令查看登录状态
[yourname@localhost ~]$ klist
Ticket cache: FILE:/tmp/krb5cc_2009
Default principal: [email protected]
Valid starting Expires Service principal
07/11/2024 20:32:47 07/12/2024 20:32:47 krbtgt/[email protected]
|
其他常见问题
网上已经整理的很多了, 我这里就简单提一下,我常遇到的问题
- [常见] krb5.conf没有正确配置
- [常见] 租户名没有正确配置
- [常见] 本地时间和远程KDC时钟差距过大
- [不常见] 踩过坑,就是kinit已经登录成功(没有报错),但是klist会报错
- 解决方案:
klist -c /tmp/krb5cc_<UID> 其实原理就是指定缓存表票据文件
1
2
3
4
5
6
7
8
|
[yourname@localhost ~]$ id -u yourname
2009
[yourname@localhost ~]$ klist -c /tmp/krb5cc_2009
Ticket cache: FILE:/tmp/krb5cc_2009
Default principal: [email protected]
Valid starting Expires Service principal
07/11/2024 20:32:47 07/12/2024 20:32:47 krbtgt/[email protected]
|
参考连接