CentOS 7.3环境中部署Kerberos集群

CentOS 7.3环境中部署Kerberos集群

文章目录

官网介绍

环境

Linux版本:Centos 7.3

操作用户:root

Kerberos分为客户端(kerberos client)和服务端(kerberos server)

HA的的实现是主从复制的形式,由主服务将数据库备份,然后发送给从服务。

安装服务包

检查服务器上是否安装kerberos 服务

shell 复制代码
yum list installed | grep krb5

kerberos server安装命令

shell 复制代码
 yum -y install krb5-libs krb5-workstation krb5-server

kerberos client安装安装命令

shell 复制代码
 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
ini 复制代码
# 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\]:日志的位置

    • 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,默认端口可不写

参考支持的日期与时间的格式,时间单位:d代表天数;h代表小时数;m代表分钟数;s代表秒数。

/var/kerberos/krb5kdc/kdc.conf
ini 复制代码
[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 端口号

    • master_key_type:主密钥的密钥类型;默认值为 aes256-cts-hmac-sha1-96。
    • acl_file:用于指定哪些用户可以访问 kdc 数据库的控制文件;如果不需要现在用户访问,该值可以设为空
    • dict_file:字典文件位置,该文件中的单词不能被用于密码;如果文件为空,或者没有为用户分配策略,则不会执行密码字典检查。
    • admin_keytab:KDC 进行校验的 keytab。
    • supported_enctypes:支持的加密方式。
/var/kerberos/krb5kdc/kadm5.acl
ini 复制代码
*/[email protected]     *

示例

kadm5.acl 文件中的以下项授予 HADOOP.COM 领域中包含 admin instance 实例的任何主体对 Kerberos 数据库的所有权限:

ini 复制代码
*/[email protected]     *

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数据库

shell 复制代码
 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

启动与停止服务

启动服务

shell 复制代码
systemctl start krb5kdc;
systemctl start kadmin;

检查服务

shell 复制代码
systemctl status krb5kdc.service;
systemctl status kadmin.service;

停止kdc服务

shell 复制代码
systemctl stop krb5kdc;
systemctl stop kadmin;

创建管理员

Kerberos 服务管理机器上可以使用 kadmin.local来执行各种管理的操作。为了方便密码都是123456。

创建管理员主体,其Instance必然使用admin

shell 复制代码
kadmin.local -q "addprinc root/admin"

或者进入kadmin.local创建管理用户给客户端可以进行管理操作

shell 复制代码
kadmin.local; 
add_principal root/[email protected]
shell 复制代码
[root@hadoop3test1-09 ~]# kadmin.local
Authenticating as principal root/[email protected] with password.
kadmin.local:  add_principal root/[email protected]
WARNING: no policy specified for root/[email protected]; defaulting to no policy
Enter password for principal "root/[email protected]": 
Re-enter password for principal "root/[email protected]": 
Principal "root/[email protected]" created.

Kerberos 客户端机器上可以使用 kadmin 命令与管理员主体与密码进行登录操作。

创建普通用户

shell 复制代码
 # 在EXAMPLE.COM领域下创建用户bigdata与huatuo,指定其密码为123456
 kadmin.local -q "addprinc -pw 123456 [email protected]";
 kadmin.local -q "addprinc -pw 123456 [email protected]";
 # 为bigdata和huatuo用户产生秘钥文件keytab
 kadmin.local -q "ktadd -norandkey -kt /opt/keytabs/bigdata.keytab [email protected]";
 kadmin.local -q "ktadd -norandkey -kt /opt/keytabs/huatuo.keytab [email protected]";
 # 分发秘钥文件供客户端登录使用
 scp /opt/keytabs/huatuo.keytab [email protected]:/opt/keytabs/huatuo.keytab
 scp /opt/keytabs/bigdata.keytab [email protected]:/opt/keytabs/bigdata.keytab

 kadmin.local -q "addprinc -pw 123456 [email protected]";
 kadmin.local -q "ktadd -norandkey -kt /opt/keytabs/gudong.keytab [email protected]";
 scp /opt/keytabs/gudong.keytab [email protected]:/opt/keytabs/gudong.keytab

安装 KDC Salve Server

创建集群的host keytab文件

在KADMIN(Master Server)上创建集群节点主体账户,集群节点host账户格式host/主机名,生成集群的host keytab文件,默认/etc/krb5.keytab

shell 复制代码
# 创建
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
shell 复制代码
 scp [email protected]:/etc/krb5.keytab /root/gd/keytabs
 scp /root/gd/keytabs/krb5.keytab  [email protected]:/etc/krb5.keytab 

创建与主KDC服务相同库密码也相同

shell 复制代码
kdb5_util create -r EXAMPLE.COM -s

新增配置文件kpropd.acl

vim /var/kerberos/krb5kdc/kpropd.acl。文件内容需要master的host账户和此salve的账户。

shell 复制代码
host/[email protected]
host/[email protected]

启动kpropd服务

shell 复制代码
kpropd -S

Master备份账户信息,并发送到salve服务器

在Master Server上执行

shell 复制代码
[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

启动与停止服务

启动服务

shell 复制代码
systemctl start krb5kdc;

检查服务

shell 复制代码
systemctl status krb5kdc.service;

停止kdc服务

shell 复制代码
systemctl stop krb5kdc;

安装KDC Client

配置文件/etc/krb5.conf

这个配置文件可以直接用服务端的。

用户登录

shell 复制代码
 # 命令交互式,输入密码
 kinit [email protected]
 # 秘钥文件认证方式
 kinit -kt /opt/keytab/root.keytab [email protected]

查询登录情况

klist

shell 复制代码
[root@hadoop3test1-06 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]

Valid starting       Expires              Service principal
2025-06-09T17:25:35  2025-06-10T17:25:35  krbtgt/[email protected]
        renew until 2025-06-16T17:25:35

验证刷新票据

kinit -R

shell 复制代码
[root@hadoop3test1-06 ~]# kinit -R
[root@hadoop3test1-06 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]

Valid starting       Expires              Service principal
2025-06-09T17:31:21  2025-06-10T17:31:21  krbtgt/[email protected]
        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,增加随机数采集,从而加快创建库的操作。

shell 复制代码
#使用 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卡主的情况,无法缓解。

相关推荐
编码小笨猪2 小时前
浅谈Linux中一次系统调用的执行过程
linux·服务器·c++
早起鸟儿3 小时前
docker-Dockerfile 配置
java·linux·运维·docker
虚妄狼3 小时前
【Docker Desktop】Windows11安装 Docker Desktop
运维·docker·容器
Hello.Reader4 小时前
NGINX 四层上游模块`ngx_stream_upstream_module` 实战指南
运维·nginx
IT成长日记4 小时前
【Docker基础】Docker核心概念:命名空间(Namespace)与资源隔离联系
运维·docker·namespace·资源隔离·命令空间
Mikhail_G4 小时前
Python应用八股文
大数据·运维·开发语言·python·数据分析
再ZzZ6 小时前
Docker安装PaddleOCR并提供接口服务(CPU)
运维·docker·容器
love530love6 小时前
是否需要预先安装 CUDA Toolkit?——按使用场景分级推荐及进阶说明
linux·运维·前端·人工智能·windows·后端·nlp
m0_694845577 小时前
日本云服务器租用多少钱合适
linux·运维·服务器·安全·云计算
一心0927 小时前
Linux部署bmc TrueSight 监控agent步骤
linux·运维·服务器·监控·bmc truesight