0%

Kerberos 配置及基本操作

本文主要介绍了 Kerberos 的单机模式和主备模式的配置方式,以及一些常用的操作命令。

环境信息

集群信息

1
2
3
4
5
[root@manager80 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
10.180.249.80 manager80.bigdata
10.180.249.81 master81.bigdata
10.180.249.82 worker82.bigdata

系统信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@manager80 ~]# cat /etc/*-release
CentOS Linux release 7.4.1708 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.4.1708 (Core)
CentOS Linux release 7.4.1708 (Core)

KDC 节点

KDC 主节点:manager80.bigdata
KDC 备节点:master81.bigdata

单机模式只有 KDC 主节点,主备模式有 KDC 主节点和 KDC 备节点。

基本概念

Principal

认证的主体,可以认为等效于用户名。

principal 的名称格式为:

1
name/role@realm

Realm

类似于编程语言中的 namespace,一个 realm 包含多个 principal,一个 principal 属于一个特定的 realm。

Keytab

二进制文件,包含了 principal 和加密的 principal 秘钥信息,可以用来认证 principal。

Kadmin

kadmin 即 Kerberos administration server,运行在主 Kerberos 节点,负责存储 KDC 数据库,管理 principal 信息。

单机模式配置

单机模式安装在 KDC 主节点:manager80.bigdata,以下简称 KDC 节点。

安装 Kerberos 服务

1
yum -y install krb5-server krb5-libs krb5-workstation

修改配置

krb5.conf

1
vim /etc/krb5.conf

完整内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
includedir /etc/krb5.conf.d/

[logging]
default = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
kdc = FILE:/var/log/krb5kdc.log

[libdefaults]
default_realm = BIGDATA
ticket_lifetime = 1d
renew_lifetime = 7d
forwardable = true
dns_lookup_realm = false
dns_lookup_kdc = false
default_ccache_name = /tmp/krb5cc_%{uid}

[realms]
BIGDATA = {
admin_server = manager80.bigdata
kdc = manager80.bigdata
}

注意 admin_server = manager80.bigdatakdc = manager80.bigdata 要换成对应的 KDC 节点 hostname

配置说明

[logging]:日志配置模块。

[libdefaults]:Kerberos 库使用设置。

  • default_realm:默认安全域。
  • ticket_lifetime:设置初始票证请求的默认生命周期。 默认值为 1 天。
  • renew_lifetime:为初始票证请求设置默认的可更新生命周期。 默认值为 0。
  • forwardable:如果此标志为 true,则默认情况下,如果 KDC 允许,初始票证将是可转发的。 默认值为 false。
  • dns_lookup_realm、dns_lookup_kdc:通过 DNS 查找 realm 或 kdc。
  • default_ccache_name:默认票据缓存名称。

[realms]:安全域相关设置

  • admin_server:主 KDC 服务器,必须设置。
  • kdc:运行 KDC 的主机,可加端口号。

官方配置说明:krb5.conf — MIT Kerberos Documentation
http://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/krb5_conf.html

kdc.conf

1
vim /var/kerberos/krb5kdc/kdc.conf

完整内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88

[realms]
BIGDATA = {
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
max_life = 1d
max_renewable_life = 7d
default_principal_flags = +renewable, +forwardable
}

配置说明:

[kdcdefaults]:KDC 默认值

  • kdc_ports:KDC UDP 默认端口 88。
  • kdc_tcp_ports:KDC tpc 默认端口 88。

[realms]:安全域相关设置

  • acl_file:访问控制列表文件。
  • dict_file:包含不允许作为密码的字符串的字典文件的位置。
  • admin_keytab:admin keytab 文件位置。
  • supported_enctypes:支持的加密算法类型。
  • max_life:票证生命周期,定义了票据的有效期。默认值为24小时。
  • max_renewable_life:票据可再生周期,票据超过有效期后可以更新票据以延长票据的使用周期。默认为 0 。
  • default_principal_flags:默认认证主体的标志。启用标注前有“+”,禁用标志前有“-”。+renewable 允许 principal 获得可更新的票据。+forwardable 允许 principal 获得可转发的票据。

官方配置说明:kdc.conf — MIT Kerberos Documentation
http://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/kdc_conf.html

kadm5.acl

1
vim /var/kerberos/krb5kdc/kadm5.acl

完整内容如下:

1
*/admin@BIGDATA *

ACL 文件用于控制 kadmin数据库的访问权限,以及哪些 principal 可以操作其他的 principal。

设置为 */admin@BIGDATA * 表示所有后缀为 /admin@BIGDATA 的 principal 具有所有权限,充当管理员角色。

官方配置说明:kadm5.acl — MIT Kerberos Documentation
http://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/kadm5_acl.html

创建数据库

1
2
3
4
5
6
7
8
[root@manager80 ~]# kdb5_util create -s -r BIGDATA
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'BIGDATA',
master key name 'K/M@BIGDATA'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: -- 输入密码,可与 MySQL 数据库密码相同
Re-enter KDC database master key to verify: -- 再次输入密码

检查生成的文件

1
2
3
4
5
6
7
8
9
[root@manager80 ~]# cd /var/kerberos/krb5kdc/
[root@manager80 krb5kdc]# ll
total 24
-rw-------. 1 root root 18 Sep 28 14:02 kadm5.acl
-rw-------. 1 root root 478 Sep 28 14:01 kdc.conf
-rw-------. 1 root root 8192 Sep 28 14:06 principal
-rw-------. 1 root root 8192 Sep 28 14:06 principal.kadm5
-rw-------. 1 root root 0 Sep 28 14:06 principal.kadm5.lock
-rw-------. 1 root root 0 Sep 28 14:06 principal.ok

创建 KDC 超级管理员

1
2
3
4
5
6
[root@manager80 krb5kdc]# kadmin.local -q "addprinc admin/admin@BIGDATA"
Authenticating as principal root/admin@BIGDATA with password.
WARNING: no policy specified for admin/admin@BIGDATA; defaulting to no policy
Enter password for principal "admin/admin@BIGDATA": -- 输入密码,可与 root 密码一致
Re-enter password for principal "admin/admin@BIGDATA": -- 再次输入密码
Principal "admin/admin@BIGDATA" created.

启动服务

启动

1
2
systemctl start krb5kdc.service
systemctl start kadmin.service

正常情况下,没有任何输出

设置开机自启

1
2
systemctl enable krb5kdc.service 
systemctl enable kadmin.service

查看启动状态

1
2
systemctl status krb5kdc.service
systemctl status kadmin.service

查看开机自启状态

1
2
systemctl is-enabled krb5kdc.service
systemctl is-enabled kadmin.service

以上操作命令及正常输出为:

1
2
3
4
5
6
7
8
9
10
11
[root@manager80 krb5kdc]# systemctl start krb5kdc.service
[root@manager80 krb5kdc]# systemctl start kadmin.service
[root@manager80 krb5kdc]# systemctl enable krb5kdc.service
Created symlink from /etc/systemd/system/multi-user.target.wants/krb5kdc.service to /usr/lib/systemd/system/krb5kdc.service.
[root@manager80 krb5kdc]# systemctl enable kadmin.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kadmin.service to /usr/lib/systemd/system/kadmin.service.
[root@manager80 krb5kdc]# systemctl is-enabled krb5kdc.service
enabled
[root@manager80 krb5kdc]# systemctl is-enabled kadmin.service
enabled
[root@manager80 krb5kdc]#

测试

简单测试下是否可用

1
2
3
4
5
6
7
8
9
[root@manager80 krb5kdc]# kinit admin/admin
Password for admin/admin@BIGDATA:
[root@manager80 krb5kdc]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@BIGDATA

Valid starting Expires Service principal
09/28/2021 14:21:34 09/29/2021 14:21:34 krbtgt/BIGDATA@BIGDATA
renew until 10/05/2021 14:21:34

服务端口

1
2
3
4
5
6
7
8
9
[root@manager ~]# netstat -ntlp | grep kdc
tcp 0 0 0.0.0.0:88 0.0.0.0:* LISTEN 1338/krb5kdc
tcp6 0 0 :::88 :::* LISTEN 1338/krb5kdc
[root@manager ~]#
[root@manager ~]# netstat -ntlp | grep kadmin
tcp 0 0 0.0.0.0:749 0.0.0.0:* LISTEN 1498/kadmind
tcp 0 0 0.0.0.0:464 0.0.0.0:* LISTEN 1498/kadmind
tcp6 0 0 :::749 :::* LISTEN 1498/kadmind
tcp6 0 0 :::464 :::* LISTEN 1498/kadmind

主备模式配置

KDC 主节点:manager80.bigdata
KDC 备节点:master81.bigdata

安装服务

在 KDC 主节点:manager80.bigdata 和 KDC 备节点:master81.bigdata 都要执行

1
yum -y install krb5-server krb5-libs krb5-workstation

修改配置

以下修改配置操作都在 KDC 主节点:manager80.bigdata 执行

krb5.conf

修改 krb5.conf

1
vim /etc/krb5.conf

完整内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
includedir /etc/krb5.conf.d/

[logging]
default = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
kdc = FILE:/var/log/krb5kdc.log

[libdefaults]
default_realm = BIGDATA
ticket_lifetime = 1d
renew_lifetime = 7d
forwardable = true
dns_lookup_realm = false
dns_lookup_kdc = false
default_ccache_name = /tmp/krb5cc_%{uid}

[realms]
BIGDATA = {
admin_server = manager80.bigdata
kdc = manager80.bigdata
kdc = master81.bigdata
}

注意 admin_server = manager80.bigdatakdc = manager80.bigdatakdc = master81.bigdata 要换成对应的 KDC 主节点和备节点的 hostname,而且主的 hostname 在前,备的 hostname 在后。

kdc.conf

修改 kdc.conf

1
vim /var/kerberos/krb5kdc/kdc.conf

完整内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88

[realms]
BIGDATA = {
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
max_life = 1d
max_renewable_life = 7d
default_principal_flags = +renewable, +forwardable
}

kadm5.acl

修改 kadm5.acl

1
vim /var/kerberos/krb5kdc/kadm5.acl

完整内容如下:

1
*/admin@BIGDATA *

复制配置文件

将上述修改的 KDC 主节点的配置复制到 KDC 备节点。

1
2
3
scp /etc/krb5.conf root@master81.bigdata:/etc/
scp /var/kerberos/krb5kdc/kdc.conf root@master81.bigdata:/var/kerberos/krb5kdc/
scp /var/kerberos/krb5kdc/kadm5.acl root@master81.bigdata:/var/kerberos/krb5kdc/

注意: master81.bigdata 要换成对应的 KDC 备节点的 hostname。

创建数据库

在 KDC 主节点:manager80.bigdata 和 KDC 备节点:master81.bigdata 都要执行,数据库密码要一样。

1
2
3
4
5
6
7
8
[root@manager80 ~]# kdb5_util create -s -r BIGDATA
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'BIGDATA',
master key name 'K/M@BIGDATA'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key: -- 输入密码
Re-enter KDC database master key to verify: -- 再次输入密码

查看生成的文件

1
2
3
4
5
6
7
8
9
[root@manager80 ~]# cd /var/kerberos/krb5kdc/
[root@manager80 krb5kdc]# ll
total 24
-rw-------. 1 root root 18 Oct 3 14:27 kadm5.acl
-rw-------. 1 root root 512 Oct 3 14:26 kdc.conf
-rw-------. 1 root root 8192 Oct 3 14:38 principal
-rw-------. 1 root root 8192 Oct 3 14:38 principal.kadm5
-rw-------. 1 root root 0 Oct 3 14:38 principal.kadm5.lock
-rw-------. 1 root root 0 Oct 3 14:38 principal.ok

也可以直接使用 -P 加密码的方式创建数据库。

1
2
3
4
[root@master81 ~]# kdb5_util create -s -r BIGDATA -P Bigdata123
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'BIGDATA',
master key name 'K/M@BIGDATA'

此命令中 Bigdata123 为密码。

查看 KDC 备节点生成的文件。

1
2
3
4
5
6
7
8
9
[root@master81 ~]# cd /var/kerberos/krb5kdc/
[root@master81 krb5kdc]# ll
total 24
-rw-------. 1 root root 18 Oct 3 14:32 kadm5.acl
-rw-------. 1 root root 512 Oct 3 14:32 kdc.conf
-rw-------. 1 root root 8192 Oct 3 14:41 principal
-rw-------. 1 root root 8192 Oct 3 14:41 principal.kadm5
-rw-------. 1 root root 0 Oct 3 14:41 principal.kadm5.lock
-rw-------. 1 root root 0 Oct 3 14:41 principal.ok

设置同步

安装服务

在 KDC 主节点:manager80.bigdata 和 KDC 备节点:master81.bigdata 都要执行

1
yum install crontabs cronie -y

设置定时任务

在 KDC 主节点:manager80.bigdata 执行

使用 root 用户编辑定时任务

1
crontab -e

添加以下内容:

1
2
*/2 * * * * /usr/sbin/kdb5_util dump /var/kerberos/krb5kdc/dump
*/2 * * * * scp /var/kerberos/krb5kdc/dump root@master81.bigdata:/var/kerberos/krb5kdc/

注意: master81.bigdata 要换成对应的 KDC 备节点的 hostname。

在 KDC 备节点:master81.bigdata 执行

使用 root 用户编辑定时任务

1
crontab -e

添加以下内容:

1
*/2 * * * * /usr/sbin/kdb5_util load /var/kerberos/krb5kdc/dump

启动及自启

在 KDC 主节点:manager80.bigdata 和 KDC 备节点:master81.bigdata 都要执行

1
2
3
4
systemctl start krb5kdc.service
systemctl start kadmin.service
systemctl enable krb5kdc.service
systemctl enable kadmin.service

创建超级管理员

在 KDC 主节点:manager80.bigdata 执行

1
2
3
4
[root@manager80 krb5kdc]# kadmin.local -q "addprinc -pw admin admin/admin"
Authenticating as principal root/admin@BIGDATA with password.
WARNING: no policy specified for admin/admin@BIGDATA; defaulting to no policy
Principal "admin/admin@BIGDATA" created.

注意:此命令中,密码为:admin(可自行配置),用户为:admin/admin

登录验证

1
2
3
4
5
6
7
8
9
[root@manager80 krb5kdc]# kinit admin/admin
Password for admin/admin@BIGDATA: -- 输入上步设置的密码
[root@manager80 krb5kdc]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@BIGDATA

Valid starting Expires Service principal
10/03/2021 15:09:34 10/04/2021 15:09:34 krbtgt/BIGDATA@BIGDATA
renew until 10/10/2021 15:09:34

验证主备同步

等待一段时间(大于 2 分钟,约 5 分钟),在 KDC 备节点验证

1
2
3
4
5
6
7
8
9
[root@master81 krb5kdc]# kinit admin/admin
Password for admin/admin@BIGDATA:
[root@master81 krb5kdc]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@BIGDATA

Valid starting Expires Service principal
10/03/2021 15:09:49 10/04/2021 15:09:49 krbtgt/BIGDATA@BIGDATA
renew until 10/10/2021 15:09:49

如果出现以上信息,说明主备同步正常。

Kerberos 基本操作

kadmin 数据库操作

在运行 kadmin 的节点上执行 kadmin.local 命令进入 kadmin 操作模式,输入 “?” 可查看所有的命令及解释。

如果有访问 KDC 服务器的 root 权限,但没有 kerberos admin 账户,使用 kadmin.local

如果没有访问 KDC 服务器的 root 权限,但有 kerberos admin 账户,使用 kadmin

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
[root@manager80 ~]# kadmin.local 
Authenticating as principal admin/admin@BIGDATA with password.
kadmin.local: ?
Available kadmin.local requests:

add_principal, addprinc, ank
Add principal
delete_principal, delprinc
Delete principal
modify_principal, modprinc
Modify principal
rename_principal, renprinc
Rename principal
change_password, cpw Change password
get_principal, getprinc Get principal
list_principals, listprincs, get_principals, getprincs
List principals
add_policy, addpol Add policy
modify_policy, modpol Modify policy
delete_policy, delpol Delete policy
get_policy, getpol Get policy
list_policies, listpols, get_policies, getpols
List policies
get_privs, getprivs Get privileges
ktadd, xst Add entry(s) to a keytab
ktremove, ktrem Remove entry(s) from a keytab
lock Lock database exclusively (use with extreme caution!)
unlock Release exclusive database lock
purgekeys Purge previously retained old keys from a principal
get_strings, getstrs Show string attributes on a principal
set_string, setstr Set a string attribute on a principal
del_string, delstr Delete a string attribute on a principal
list_requests, lr, ? List available requests.
quit, exit, q Exit program.

listprincs

列出所有的 principal。

以下为在大数据集群中的部分 principal。

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
kadmin.local:  listprincs 
admin/admin@BIGDATA
ambari-qa-cluster_80@BIGDATA
ambari-server-cluster_80@BIGDATA
dn/manager80.bigdata@BIGDATA
dn/master81.bigdata@BIGDATA
dn/worker82.bigdata@BIGDATA
hbase-cluster_80@BIGDATA
hbase/manager80.bigdata@BIGDATA
hbase/worker82.bigdata@BIGDATA
hdfs-cluster_80@BIGDATA
kadmin/admin@BIGDATA
kadmin/changepw@BIGDATA
kadmin/manager80.bigdata@BIGDATA
nm/manager80.bigdata@BIGDATA
nm/master81.bigdata@BIGDATA
nm/worker82.bigdata@BIGDATA
nn/manager80.bigdata@BIGDATA
nn/master81.bigdata@BIGDATA
rm/manager80.bigdata@BIGDATA
yarn-ats-cluster_80@BIGDATA
yarn-ats-hbase/manager80.bigdata@BIGDATA
yarn-ats-hbase/master81.bigdata@BIGDATA
yarn-ats-hbase/worker82.bigdata@BIGDATA
yarn/manager80.bigdata@BIGDATA
yarn/master81.bigdata@BIGDATA
zookeeper/manager80.bigdata@BIGDATA
zookeeper/master81.bigdata@BIGDATA
zookeeper/worker82.bigdata@BIGDATA

addprinc

添加一个 principal。

1
2
3
4
5
kadmin.local:  addprinc test/localhost
WARNING: no policy specified for test/localhost@BIGDATA; defaulting to no policy
Enter password for principal "test/localhost@BIGDATA": -- 输入密码
Re-enter password for principal "test/localhost@BIGDATA": -- 再次输入密码
Principal "test/localhost@BIGDATA" created.

查看新增 principal

1
2
3
4
5
6
7
8
9
[root@manager80 ~]# kinit test/localhost@BIGDATA
Password for test/localhost@BIGDATA: -- 输入刚才输入的密码
[root@manager80 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: test/localhost@BIGDATA

Valid starting Expires Service principal
10/04/2021 10:24:44 10/05/2021 10:24:44 krbtgt/BIGDATA@BIGDATA
renew until 10/11/2021 10:24:44

change_password

修改 principal 的密码。

1
2
3
4
kadmin.local:  change_password test/localhost@BIGDATA
Enter password for principal "test/localhost@BIGDATA": -- 输入新的密码
Re-enter password for principal "test/localhost@BIGDATA": -- 重新输入新的密码
Password for "test/localhost@BIGDATA" changed.

delprinc

删除 principal。

1
2
3
4
kadmin.local:  delprinc test/localhost
Are you sure you want to delete the principal "test/localhost@BIGDATA"? (yes/no): yes
Principal "test/localhost@BIGDATA" deleted.
Make sure that you have removed this principal from all ACLs before reusing.

Kerberos 基本操作

kinit

获取并缓存一个初始票据。

通过 kinit -h 命令查看帮助信息。

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
[root@manager80 ~]# kinit -h
kinit: invalid option -- 'h'
Usage: kinit [-V] [-l lifetime] [-s start_time]
[-r renewable_life] [-f | -F | --forwardable | --noforwardable]
[-p | -P | --proxiable | --noproxiable]
-n [-a | -A | --addresses | --noaddresses]
[--request-pac | --no-request-pac]
[-C | --canonicalize]
[-E | --enterprise]
[-v] [-R] [-k [-i|-t keytab_file]] [-c cachename]
[-S service_name] [-T ticket_armor_cache]
[-X <attribute>[=<value>]] [principal]

options:
-V verbose
-l lifetime
-s start time
-r renewable lifetime
-f forwardable
-F not forwardable
-p proxiable
-P not proxiable
-n anonymous
-a include addresses
-A do not include addresses
-v validate
-R renew
-C canonicalize
-E client is enterprise principal name
-k use keytab
-i use default client keytab (with -k)
-t filename of keytab to use
-c Kerberos 5 cache name
-S service
-T armor credential cache
-X <attribute>[=<value>]

使用密码认证

直接输入 kinit principal,然后根据提示输入密码进行认证。

1
2
[root@manager80 ~]# kinit admin/admin
Password for admin/admin@BIGDATA: -- 输入密码

使用 keytab 认证

  • 查看 keytab

一般通过 keytab 文件进行认证,首先切换到 keytab 所在文件夹,默认为 /etc/security/keytabs/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@manager80 ~]# cd /etc/security/keytabs/
[root@manager80 keytabs]# ll
total 72
-r--------. 1 infra-solr hadoop 393 Oct 3 15:19 ambari-infra-solr.service.keytab
-r--------. 1 root root 368 Oct 3 15:19 ambari.server.keytab
-r--------. 1 ams hadoop 373 Oct 3 15:19 ams-monitor.keytab
-r--------. 1 hdfs hadoop 353 Oct 3 15:19 dn.service.keytab
-r--r-----. 1 hbase hadoop 328 Oct 3 15:19 hbase.headless.keytab
-r--------. 1 hbase hadoop 368 Oct 3 15:19 hbase.service.keytab
-r--------. 1 hdfs hadoop 323 Oct 3 15:19 hdfs.headless.keytab
-rw-r-----. 1 ambari-qa hadoop 333 Oct 3 15:16 kerberos.service_check.100321.keytab
-r--------. 1 yarn hadoop 353 Oct 3 15:19 nm.service.keytab
-r--------. 1 hdfs hadoop 353 Oct 3 15:19 nn.service.keytab
-r--------. 1 yarn hadoop 353 Oct 3 15:19 rm.service.keytab
-r--r-----. 1 ambari-qa hadoop 348 Oct 3 15:19 smokeuser.headless.keytab
-r--r-----. 1 root hadoop 363 Oct 3 15:19 spnego.service.keytab
-r--------. 1 yarn-ats hadoop 343 Oct 3 15:19 yarn-ats.hbase-client.headless.keytab
-r--------. 1 yarn-ats hadoop 413 Oct 3 15:19 yarn-ats.hbase-master.service.keytab
-r--------. 1 yarn-ats hadoop 413 Oct 3 15:19 yarn-ats.hbase-regionserver.service.keytab
-r--------. 1 yarn hadoop 363 Oct 3 15:19 yarn.service.keytab
-r--------. 1 zookeeper hadoop 388 Oct 3 15:19 zk.service.keytab

这里有所有可用的 keytab,注意所用用户要有使用该 keytab 的权限

  • 查看 principal

这里以 hdfs 用户使用 hdfs.headless.keytab 为例。

首先切换到 hdfs 用户,并查看 keytab 的 principal。

1
2
3
4
5
6
7
8
9
10
[root@manager80 keytabs]# su hdfs
[hdfs@manager80 keytabs]$ klist -ket hdfs.headless.keytab
Keytab name: FILE:hdfs.headless.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
2 10/03/2021 15:19:03 hdfs-cluster_80@BIGDATA (aes128-cts-hmac-sha1-96)
2 10/03/2021 15:19:03 hdfs-cluster_80@BIGDATA (aes256-cts-hmac-sha1-96)
2 10/03/2021 15:19:03 hdfs-cluster_80@BIGDATA (des3-cbc-sha1)
2 10/03/2021 15:19:03 hdfs-cluster_80@BIGDATA (des-cbc-md5)
2 10/03/2021 15:19:03 hdfs-cluster_80@BIGDATA (arcfour-hmac)
  • 认证并查看当前票据
1
2
3
4
5
6
7
8
[hdfs@manager80 keytabs]$ kinit -kt hdfs.headless.keytab hdfs-cluster_80@BIGDATA
[hdfs@manager80 keytabs]$ klist
Ticket cache: FILE:/tmp/krb5cc_1007
Default principal: hdfs-cluster_80@BIGDATA

Valid starting Expires Service principal
10/04/2021 15:04:54 10/05/2021 15:04:54 krbtgt/BIGDATA@BIGDATA
renew until 10/11/2021 15:04:54

可以看到已经通过 keytab 进行认证。

  • 查看 HDFS 文件
1
2
3
4
5
[hdfs@manager80 keytabs]$ hadoop fs -ls /tmp
Found 3 items
drwxr-xr-x - hdfs hdfs 0 2021-03-31 15:29 /tmp/entity-file-history
-rw-r--r-- 3 hdfs hdfs 1024 2021-03-31 15:28 /tmp/idb40a50f9_date283121
-rw-r--r-- 3 hdfs hdfs 1024 2021-10-03 15:26 /tmp/idb40a52f9_date260321

可以查看 HDFS 数据,说明已认证成功。

kdestroy

销毁当前认证票据,删除凭据缓存。使用 kdestroy -A 清除所有缓存凭据。

1
2
3
[hdfs@manager80 keytabs]$ kdestroy
[hdfs@manager80 keytabs]$ klist
klist: No credentials cache found (filename: /tmp/krb5cc_1007)

ktutil

ktutil 是操作 keytab 文件的工具集。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@manager80 ~]# ktutil
ktutil: ?
Available ktutil requests:

clear_list, clear Clear the current keylist.
read_kt, rkt Read a krb5 keytab into the current keylist.
read_st, rst Read a krb4 srvtab into the current keylist.
write_kt, wkt Write the current keylist to a krb5 keytab.
write_st, wst Write the current keylist to a krb4 srvtab.
add_entry, addent Add an entry to the current keylist.
delete_entry, delent Delete an entry from the current keylist.
list, l List the current keylist.
list_requests, lr, ? List available requests.
quit, exit, q Exit program.

参考资料