安装配置 Kerberos

安装配置 Kerberos

Kerberos 简介

Kerberos 是一款用于非安全环境下的身份认证协议,它通过对称密钥加密方式向网络服务证明用户身份。

术语

  • AS(Authentication Server)= 认证服务器
  • KDC(Key Distribution Center)= 密钥分发中心
  • TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据
  • TGS(Ticket Granting Server)= 票据授权服务器
  • SS(Service Server)= 特定服务提供端

运行环境

三台 CentOS 7.5 虚拟机

  • server1 192.168.78.101 ( Master KDC Server )
  • server2 192.168.78.102 ( Client )
  • server3 192.168.78.103 ( Client )

Java 版本

  • JDK 1.8.0_181

安装配置

安装配置 Kerberos Server

  1. 确保时钟同步和 DNS 解析

​ 留意时钟同步问题,如果 server 与 client 之间时间相差过大(默认是 5 分钟),会导致 client 无法完成认证工作。这可以防止攻击者使用过期的 ticket 伪装成合法用户实施攻击。

​ 开启时钟同步:

[root@server1 ~]# timedatectl set-timezone Asia/Shanghai # 设置时区
[root@server1 ~]# timedatectl set-ntp yes # 开启时钟同步
[root@server1 ~]# timedatectl # 查看时钟同步
  1. 安装 Kerberos Server
[root@server1 ~]# yum install krb5-server krb5-libs krb5-auth-dialog

​ 出于安全考虑,最好将 KDC Server 安装在专门的机器上,并且这台机器不再运行其他服务。另外,由于 KDC Server 是个单点,当压力较大时也要务必保证这台机器的带宽和性能。(目前用于 DEV 环境,故没那么多讲究)

  1. 配置 realm name 和 domain-to-realm 映射

​ 编辑 /etc/krb5.conf,主要是将 EXAMPLE.COM 替换为自定义的 Realm Name,如我们此处将其定义为 DATACENTER.COM,并将 example.com 替换为对应的服务器域名,比如我们此处设置为 server1 。按照约定,Realm Name 均为大写,主机名和域名均为小写。

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 = DATACENTER.COM
 default_ccache_name = KEYRING:persistent:%{uid}
# udp_preference_limit = 1

[realms]
DATACENTER.COM = {
   kdc = server1
   admin_server = server1
}

[domain_realm]
.datacenter.com = DATACENTER.COM
datacenter.com = DATACENTER.COM

​ 编辑 /var/kerberos/krb5kdc/kdc.conf ,将 EXAMPLE.COM 替换为自定义的 *DATACENTER.COM。此处我们禁用了 AED-256 加密,如果启用的话,需要下载 JCE (如对应 Java 1.8 版本)文件,并替换 $JAVA_HOME/jre/lib/security 目录下的 JAR 包。

[root@server1 ~]# vi 

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
DATACENTER.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
  # 移除 aes256-cts:normal
  supported_enctypes = 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
 }
  1. 使用 kdb5_util 创建数据库
[root@server1 ~]# /usr/sbin/kdb5_util create -s

create 创建存储 Kerberos realm 的数据库,-s 参数创建一个 存储主服务器 key 的stash 文件,如果后面没有指定文件,则 Kerberos 会提示输入密码。

  1. 编辑 Kerberos ACL

​ 编辑 /var/kerberos/krb5kdc/kadm5.acl ,该文件用于 kadmind 确定哪个 principal 具有访问 Kerberos 数据库的权限,以及具有何种访问级别。可设置为如下:

*/[email protected]	*

​ 大多数用户在 Kerberos 数据库中都表示为单个的 principal(不带 instance,如 [email protected]);但像 root/[email protected] 这样,拥有第二个 principal且为 admininstance 的用户将能对 Kerberos 数据库行使所有管理权操作。

  1. 在 KDC 终端创建第一个 principal
[root@server1 ~]# /usr/sbin/kadmin.local -q "addprinc root/admin"
  1. 开启 Kerberos 服务
[root@server1 ~]# systemctl start krb5kdc # 开启服务
[root@server1 ~]# systemctl start kadmin
[root@server1 ~]# systemctl enable krb5kdc # 开机启动
[root@server1 ~]# systemctl enable kadmin
  1. 命令行方式添加 pincipal
kadmin.local:  ank -randkey [email protected]

kadmin.localkamdin 是操作 KDC 的命令行接口,可以用来查看、添加和删除 principal 等。 kadmin.local 只能用于 KDC 本地,无需输入密码; kamdin 可用于客户端,需输入密码。

  1. 验证

​ 使用 kinit 获取 ticket 并存入证明缓存文件中,然后使用 klist 查看,或使用 kdestroy 销毁缓存和证明。

[root@server1 ~]# kinit root/[email protected]
[root@server1 ~]# klist

安装配置 Kerberos Client

​ 配置 Kerberos Client 仅需要安装 client 包,并为每台 Client 提供 krb5.conf 配置文件。

  1. 确保时钟同步和域名解析
  2. 在每台 Client 安装 krb5-libskrb5-workstation
[root@server2 ~]# yum install krb5-libs krb5-workstation
[root@server3 ~]# yum install krb5-libs krb5-workstation
  1. 为每台 client 提供 /etc/krb5.conf

​ 文件与 KDC Server 保持一直就可以了,如果服务期间启用了 SSH 登陆,可以使用 scp 命令传输;不然也可以手动拷贝或其他方式。

[root@server1 ~]# scp /etc/krb5.conf root@server2:/etc/krb5.conf
[root@server1 ~]# scp /etc/krb5.conf root@server3:/etc/krb5.conf
  1. 为每台 Client 创建自己的 principal (可选)

​ 如果使用了 Kerberos 提供的 sshd, kshdklogind 等命令,在使用前需要首先为每台 Client 创建自己的 principal。其中 instance 是主机 hostname, -randkey 表示生成随机 key。

kadmin:  ank -randkey host/[email protected] # 创建 host/server1 principal,server2/server3 同理
kadmin:  xst -k /etc/security/keytabs/host.keytab host/[email protected] # 添加 host/server1 principal 至 host.keytab,server2/server3 同理
  1. 验证每台 Client 的 principal 可用 (可选)
[root@server2 ~]# klist -kt /etc/security/keytabs/host.keytab
[root@server2 ~]# kinit -kt /etc/security/keytabs/host.keytab root/[email protected]
[root@server2 ~]# kadmin -p root/admin -q "getprincs" # 如果是 admin,且非随机密码,可使用密码验证

引用

RedHat: USING KERBEROS

MIT Kerberos Documentation

Kerberos 维基百科

猜你喜欢

转载自blog.csdn.net/O_Victorain/article/details/84200981
今日推荐