CentOS 7.3环境中部署Kerberos集群
文章目录
官网介绍
环境
Linux版本:Centos 7.3
操作用户:root
Kerberos分为客户端(kerberos client)和服务端(kerberos server)
HA的的实现是主从复制的形式,由主服务将数据库备份,然后发送给从服务。
安装服务包
检查服务器上是否安装kerberos 服务
yum list installed | grep krb5
kerberos server安装命令
yum -y install krb5-libs krb5-workstation krb5-server
kerberos client安装安装命令
yum -y install krb5-devel krb5-workstation
Kerberos MS 规划
IP地址 | hostname、域名 | 服务包 | 启动服务 |
---|---|---|---|
192.168.1.1 | hadoop3test1-09.test.com | kerberos server、kerberos client | KDC、 KADMIN |
192.168.1.2 | hadoop3test1-10.test.com | kerberos server、kerberos client | KDC |
192.168.1.3 | hadoop3test1-11.test.com | kerberos client |
realm就采用EXAMPLM.COM
安装 KDC Master Server
配置文件
kdc服务涉及三个配置文件/etc/krb5.conf
,/var/kerberos/krb5kdc/kdc.conf
,/var/kerberos/krb5kdc/kadm5.acl
/etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[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
default_realm = EXAMPLE.COM
# default_ccache_name = KEYRING:persistent:%{uid}
[realms]
EXAMPLE.COM = {
kdc = 192.168.1.1
kdc = 192.168.1.2
admin_server = 192.168.1.1
# default_domain = kerberos.com
}
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
相关参数说明:
- [logging]:日志的位置
- [libdefaults]:每种连接的默认配置
dns_lookup_realm
:是否通过 dns 查找需使用的 realm。false代表禁用。ticket_lifetime
:凭证的有效时限renew_lifetime
:凭证最长可以被延期的时限forwardable
:ticket 是否可以被转发(如果用户已经有了一个TGT,当他登入到另一个远程系统,KDC会为他重新创建一个TGT,而不需要让用户重新进行身份认证)rdns
:如果为 true,则除根据 hostname 正向查找外,同时反向查找对应的 principal。如果 dns_canonicalize_hostname 设置为 false,则此标志不起作用。pkinit_anchors
:受信任锚(根)证书的位置;如果用户在命令行上指定X509_anchors,则不使用该配置。在KDC中配置pkinit的位置default_realm
:默认的 realm,必须跟要配置的 realm 名称一致default_ccache_name
:指定默认凭据缓存的名称。默认值为 DEFCCNAME。不推荐使用该参数。
- [realms]:列举使用的 realm
kdc
:kdc服务器地址。格式 [主机名或域名]:端口, 默认端口是88,默认端口可不写admin_server
:kdc 数据库管理服务运行的机器,地址格式 [主机名或域名]:端口, 默认端口749,默认端口可不写
- [domain_realm]:指定DNS域名和Kerberos域名之间映射关系。配置 domain name 或 hostname 对应的 releam
参考支持的日期与时间的格式,时间单位:
d
代表天数;h
代表小时数;m
代表分钟数;s
代表秒数。
/var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EXAMPLE.COM = {
#master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
max_renewable_life = 7d
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
}
相关参数说明:
- [kdcdefaults]:KDC 默认配置
kdc_ports
:UDP 端口号kdc_tcp_ports
:TCP 端口号
- [realms]:realm 数据库配置
master_key_type
:主密钥的密钥类型;默认值为 aes256-cts-hmac-sha1-96。acl_file
:用于指定哪些用户可以访问 kdc 数据库的控制文件;如果不需要现在用户访问,该值可以设为空dict_file
:字典文件位置,该文件中的单词不能被用于密码;如果文件为空,或者没有为用户分配策略,则不会执行密码字典检查。admin_keytab
:KDC 进行校验的 keytab。supported_enctypes
:支持的加密方式。
/var/kerberos/krb5kdc/kadm5.acl
*/admin@EXAMPLE.COM *
示例
kadm5.acl 文件中的以下项授予 HADOOP.COM 领域中包含 admin instance 实例的任何主体对 Kerberos 数据库的所有权限:
*/admin@HADOOP.COM *
Kerberos kadmind 使用该文件来管理对 Kerberos 数据库的访问权限。对于影响 principa 的操作,ACL 文件还控制哪些 principa 可以对哪些其他 principa 进行操作。文件格式如下:principal permissions [target_principal [restrictions] ]
。
ACL 文件中的行顺序很重要,会使用第一个匹配的行来设置用户权限。
principal
:设置该 principal 的权限;principal 的每个部分都可以使用 *
。
permissions
: 权限,见下表。如果字符是大写,则不允许该操作。如果字符是小写,则允许该操作。
target_principal
:目标 principal,目标 principal 的每个部分都可以使用 *
。【可选】
restrictions
:针对权限的一些补充限制,如:限制创建的 principal 的票据最长时效。【可选】
权限 | 说明 |
---|---|
a | 允许添加 principals 或policies |
c | 允许更改 principals 的密码 |
d | 允许删除 principals 或policies |
e | 允许提取principal 的的keys信息 |
i | 允许查询 principals 或policies |
l | 允许列出所有 principals 或policies |
m | 允许修改 principals 或policies |
p | 允许主数据库的传播(用于增量数据库传播) |
s | 允许显式设置 principal 的密钥 |
x | admcilsp的缩写。所有权限(e 除外) |
* | 同x |
服务端和客户端的
/etc/krb5.conf
配置一致。
创建Kerberos数据库
kdb5_util create -r EXAMPLE.COM -s
-s
:表示生成 stash file,并在其中存储 master server key(krb5kdc)
-r
:指定 realm name
Kerberos 数据库的目录为:/var/kerberos/krb5kdc
,如果需要重建数据库,可删除改目录/var/kerberos/krb5kdc/principal
。
启动与停止服务
启动服务
systemctl start krb5kdc;
systemctl start kadmin;
检查服务
systemctl status krb5kdc.service;
systemctl status kadmin.service;
停止kdc服务
systemctl stop krb5kdc;
systemctl stop kadmin;
创建管理员
Kerberos 服务管理机器上可以使用 kadmin.local
来执行各种管理的操作。为了方便密码都是123456。
创建管理员主体,其Instance必然使用admin
kadmin.local -q "addprinc root/admin"
或者进入kadmin.local
创建管理用户给客户端可以进行管理操作
kadmin.local;
add_principal root/admin@EXAMPLE.COM
[root@hadoop3test1-09 ~]# kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local: add_principal root/admin@EXAMPLE.COM
WARNING: no policy specified for root/admin@EXAMPLE.COM; defaulting to no policy
Enter password for principal "root/admin@EXAMPLE.COM":
Re-enter password for principal "root/admin@EXAMPLE.COM":
Principal "root/admin@EXAMPLE.COM" created.
Kerberos 客户端机器上可以使用 kadmin 命令与管理员主体与密码进行登录操作。
创建普通用户
# 在EXAMPLE.COM领域下创建用户bigdata与huatuo,指定其密码为123456
kadmin.local -q "addprinc -pw 123456 bigdata@EXAMPLE.COM";
kadmin.local -q "addprinc -pw 123456 huatuo@EXAMPLE.COM";
# 为bigdata和huatuo用户产生秘钥文件keytab
kadmin.local -q "ktadd -norandkey -kt /opt/keytabs/bigdata.keytab bigdata@EXAMPLE.COM";
kadmin.local -q "ktadd -norandkey -kt /opt/keytabs/huatuo.keytab huatuo@EXAMPLE.COM";
# 分发秘钥文件供客户端登录使用
scp /opt/keytabs/huatuo.keytab root@192.168.1.3:/opt/keytabs/huatuo.keytab
scp /opt/keytabs/bigdata.keytab root@192.168.1.3:/opt/keytabs/bigdata.keytab
kadmin.local -q "addprinc -pw 123456 gudong@EXAMPLE.COM";
kadmin.local -q "ktadd -norandkey -kt /opt/keytabs/gudong.keytab gudong@EXAMPLE.COM";
scp /opt/keytabs/gudong.keytab root@192.168.1.3:/opt/keytabs/gudong.keytab
安装 KDC Salve Server
创建集群的host keytab
文件
在KADMIN(Master Server)上创建集群节点主体账户,集群节点host账户格式host/主机名
,生成集群的host keytab文件,默认/etc/krb5.keytab
。
# 创建
kadmin.local -q "addprinc -randkey host/hadoop3test1-06.test.com";
kadmin.local -q "addprinc -randkey host/hadoop3test1-07.test.com";
# 生成keytab文件,在/etc/krb5.keytab.
kadmin.local -q "ktadd host/hadoop3test1-06.test.com";
kadmin.local -q "ktadd host/hadoop3test1-07.test.com";
分发文件到KDC Salve Servers
将Master上的下列文件分发到salves
/etc/krb5.conf
/var/kerberos/krb5kdc/kdc.conf
/var/kerberos/krb5kdc/kadm5.acl
/etc/krb5.keytab
scp root@192.168.1.1:/etc/krb5.keytab /root/gd/keytabs
scp /root/gd/keytabs/krb5.keytab root@192.168.1.2:/etc/krb5.keytab
创建与主KDC服务相同库密码也相同
kdb5_util create -r EXAMPLE.COM -s
新增配置文件kpropd.acl
vim /var/kerberos/krb5kdc/kpropd.acl
。文件内容需要master的host账户和此salve的账户。
host/hadoop3test1-06.test.com@EXAMPLE.COM
host/hadoop3test1-07.test.com@EXAMPLE.COM
启动kpropd服务
kpropd -S
Master备份账户信息,并发送到salve服务器
在Master Server上执行
[root@hadoop3test1-09 ~]# kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
[root@hadoop3test1-09 ~]# ll /var/kerberos/krb5kdc/
总用量 56
-rw-r--r-- 1 root root 26 6月 9 11:42 kadm5.acl
-rw-r--r-- 1 root root 452 6月 9 10:41 kdc.conf
-rw------- 1 root root 2922 6月 9 11:47 krb5.keytab
-rw------- 1 root root 20480 6月 9 14:59 principal
-rw------- 1 root root 8192 6月 9 14:25 principal.kadm5
-rw------- 1 root root 0 6月 9 14:25 principal.kadm5.lock
-rw------- 1 root root 0 6月 9 14:59 principal.ok
-rw------- 1 root root 11135 6月 9 15:01 slave_datatrans
-rw------- 1 root root 1 6月 9 15:01 slave_datatrans.dump_ok
[root@hadoop3test1-09 ~]# kprop -f /var/kerberos/krb5kdc/slave_datatrans hadoop3test1-07.test.com
Database propagation to hadoop3test1-07.test.com: SUCCEEDED
启动与停止服务
启动服务
systemctl start krb5kdc;
检查服务
systemctl status krb5kdc.service;
停止kdc服务
systemctl stop krb5kdc;
安装KDC Client
配置文件/etc/krb5.conf
这个配置文件可以直接用服务端的。
用户登录
# 命令交互式,输入密码
kinit gudong@EXAMPLE.COM
# 秘钥文件认证方式
kinit -kt /opt/keytab/root.keytab gudong@EXAMPLE.COM
查询登录情况
klist
[root@hadoop3test1-06 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: gudong@EXAMPLE.COM
Valid starting Expires Service principal
2025-06-09T17:25:35 2025-06-10T17:25:35 krbtgt/EXAMPLE.COM@EXAMPLE.COM
renew until 2025-06-16T17:25:35
验证刷新票据
kinit -R
[root@hadoop3test1-06 ~]# kinit -R
[root@hadoop3test1-06 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: gudong@EXAMPLE.COM
Valid starting Expires Service principal
2025-06-09T17:31:21 2025-06-10T17:31:21 krbtgt/EXAMPLE.COM@EXAMPLE.COM
renew until 2025-06-16T17:25:35
遇到的问题
1、执行创建库kdb5_util create -r EXAMPLE.COM -s
,长时间卡在loading random data
网上建议:因为/dev/random
的随机数据产生的很少,可以适当的让网卡传输数据,这样有助于产生随机数据。解决:在等待loading random data
,期间重新开启一个创建控制台窗口,执行cat /dev/vda > /dev/urandom
命令,加快消耗CPU,增加随机数采集,从而加快创建库的操作。
#使用 lsblk 命令可以列出所有可用的块设备 找到i系统盘对于的块名称
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 434K 0 rom
vda 252:0 0 75G 0 disk
├─vda1 252:1 0 500M 0 part /boot
└─vda2 252:2 0 74.5G 0 part
├─systemvg-rootlv 253:0 0 10G 0 lvm /
├─systemvg-swaplv 253:1 0 10G 0 lvm
├─systemvg-usrlv 253:2 0 10G 0 lvm /usr
├─systemvg-homelv 253:3 0 2G 0 lvm /home
├─systemvg-tmplv 253:4 0 2G 0 lvm /tmp
├─systemvg-varlv 253:5 0 8G 0 lvm /var
└─systemvg-optlv 253:6 0 32.5G 0 lvm /opt
vdb 252:16 0 100G 0 disk
└─datavg1-datalv 253:7 0 100G 0 lvm /data
但是无效果。
当服务器执行了一次创建Kerberos数据库之后,清理/var/kerberos/krb5kdc/principal
后,再次执行创建库的操作,必然出现loading random data
卡主的情况,无法缓解。