前言
前文已经梳理完成Kerberos概念、安装、配置、源码编译等偏向理论知识的内容。本文主要从实战案例角度出发,对Kerberos安装配置使用进行详细演示解答。
安装
Kerberos服务端节点
[root@felixzh1 home]# yum install -ykrb5-server krb5-libs krb5-workstation
Kerberos客户端节点
[root@felixzh2 ~]# yum install -y krb5-develkrb5-workstation
服务端节点需要修改三个配置文件:
/etc/krb5.conf
/var/kerberos/krb5kdc/kdc.conf
/var/kerberos/krb5kdc/kadm5.acl
修改krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm = FELIXZH.COM
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
FELIXZH.COM = {
kdc = felixzh1
admin_server = felixzh1
}
[domain_realm]
.felixzh.com = FELIXZH.COM
felixzh.com = FELIXZH.COM
修改kdc.conf
强调一点:krb5.conf文件需要分发到所有kerberos客户端节点。
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
FELIXZH.COM = {
#master_key_type = aes256-cts
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
}
修改kadm5.acl
*/admin@FELIXZH.COM *
创建数据库
Kerberos数据库保存所有realm中principals、对应密码及其他信息。
目前Kerberos支持三种数据库:db2(默认使用)、klmdb、kldap,本章节实战使用默认db2。
服务端节点使用kdb5_util工具创建数据库,数据库默认路径为/var/kerberos/krb5kdc。
创建数据库,使用如下命令(自行设置数据库密码):
[root@felixzh1 krb5kdc]# kdb5_util create-r FELIXZH.COM –s
启动Kerberos服务
服务端节点,启动Kerberos服务的两个进程:krb5kdc、kadmind。
启动进程,命令如下:
systemctl start krb5kdc kadmin
加入开机启动项,命令如下:
systemctl enable krb5kdc kadmin
查看进程状态,命令如下:
systemctl status krb5kdc kadmin
Kadmin管理系统
服务端节点,进入kadmin管理系统有两种方式:kadmin.local、kadmin。
两者都是Kerberos管理系统的命令行工具,功能几乎完全相同。不同之处在于:kadmin.local直接操作KDC数据库,而kadmin通过kadmind进程操作KDC数据库。Kadmind是Kerberos管理服务进程。如果使用默认的db2数据库,kadmind通常部署在主KDC数据库节点。如果使用LDAP数据库,并不要求kadmind与KDC服务必须部署在同一节点。
说明:
Kadmin.local适用于有KDC 服务器的root权限,但没有kerberosadmin账户。
Kadmin适用于没有KDC服务器的root权限,但有kerberosadmin账户。
Kadmin.local可以用来创建kerberos admin账户(默认不存在)。
kadmin.local和kadmin都支持REPL操作(即交互式)和Shell操作(即-q "cmd")。
REPL操作举例:执行kadmin.local后,再执行命令listprincs。
shell操作举例:执行kadmin.local -q"listprincs"。
本案例使用新部署的环境,需要设置admin账户,否则直接执行kadmin命令会失败(提示数据库不存在root/admin用户):
设置admin账户,执行如下命令(如果没指定-randkey或-nokey参数,需要设置密码):
[root@felixzh1 krb5kdc]# kadmin.local -q"addprinc root/admin"
根据kadm5.acl内容设置,root/admin拥有administrative privileges。
可以看到,超级用户root/admin账户已经创建成功。
客户端演示
Kerberos客户端支持两种认证方式:Principal+Password,Principal+KeyTab。
Principal+Password方式适用于REPL操作(即交互式),如hadoop fs -ls /。
Principal+KeyTab方式适用于服务(即常驻进程),如Kafka,类似于ssh免密码登录。
注意:服务端节点既可以做为单独的服务端,也可以同时做为服务端和客户端。
1. Principal+Password使用方式
执行命令kinit principal_name。
本案例测试如下:
[root@felixzh1 krb5kdc]# kinit root/admin
可以看到已经生成票据信息。
如果是在客户端节点操作,先拷贝服务端节点/etc/krb5.conf到本节点/etc目录,并配置服务端ip与hostname映射关系到本节点/etc/hosts。
可以看到已经生成票据信息。
2. Principal+KeyTab使用方式
先在服务端将principal添加到keytab文件,然后客户度使用生成的keytab文件进行认证。
本案例测试如下:
[root@felixzh1 krb5kdc]# kadmin.local -q"ktadd -norandkey -k /home/admin.keytab root/admin@FELIXZH.COM"
[root@felixzh1 krb5kdc]# kinit -kt/home/admin.keytab root/admin
注意:如果没有使用-norandkey,会导致root/admin密码被随机重置。
可以看到已经生成票据信息。
如果是在客户端节点操作。同样的,先拷贝服务端节点/etc/krb5.conf到本节点/etc目录,并配置服务端ip与hostname映射关系到本节点/etc/hosts。