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.bigdata 和 kdc = 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.bigdata 、 kdc = manager80.bigdata 和 kdc = 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.

参考资料