kerberos入门指南

简介

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

安装

  1. 服务端安装
yum install -y krb5-server krb5-libs krb5-auth-dialog krb5-workstation
  1. 客户端安装
yum install -y krb5-devel krb5-workstation krb5-libs krb5-auth-dialog

  1. 修改配置文件
vim /etc/krb5.conf
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
 pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
 #default_ccache_name = KEYRING:persistent:%{uid}
 default_realm = HADOOP.COM
 dns_lookup_kdc = false
 udp_preference_limit= 1
 clockskew = 120

[realms]
HADOOP.COM = {
 kdc = bigdata11:88
 admin_server = bigdata11:749
 default_domain = hadoop.com
}

[domain_realm]
.hadoop.com = HADOOP.COM
hadoop.com = HADOOP.COM

说明:

这里是引用
[logging]:表示 server 端的日志的打印位置
[libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置
default_realm = HADOOP.COM:设置 Kerberos 应用程序的默认领域。如果您有多个领域,只需向 [realms] 节添加其他的语句。
udp_preference_limit= 1:禁止使用 udp 可以防止一个Hadoop中的错误。
clockskew:时钟偏差是不完全符合主机系统时钟的票据时戳的容差,超过此容差将不接受此票据。通常,将时钟扭斜设置为 300 秒(5 分钟)。这意味着从服务器的角度看,票证的时间戳与它的偏差可以是在前后 5 分钟内。
ticket_lifetime: 表明凭证生效的时限,一般为24小时。
renew_lifetime: 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。
[realms]:列举使用的 realm。
kdc:代表要 kdc 的位置。格式是 机器:端口
admin_server:代表 admin 的位置。格式是 机器:端口
default_domain:代表默认的域名

vim /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
HADOOP.COM = {
#master_key_type =des-cbc-crc
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
kadmind_port = 749
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
default_principal_flags = +renewable, +forwardable
}

说明:

HADOOP.COM: 是设定的 realms。名字随意。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感,一般为了识别使用全部大写。这个 realms 跟机器的 host 没有大关系。

vim /var/kerberos/krb5kdc/kadm5.acl
  • 为了能够不直接访问 KDC 控制台而从 Kerberos 数据库添加和删除主体,请对 Kerberos 管理服务器指示允许哪些主体执行哪些操作。通过编辑文件 /var/lib/kerberos/krb5kdc/kadm5.acl 完成此操作。ACL(访问控制列表)允许您精确指定特权。
*/admin@HADOOP.COM *
  1. 同步配置文件

将 kdc 中的 /etc/krb5.conf 拷贝到集群中其他服务器:

scp /etc/krb5.conf   bigdata11:/etc/krb5.conf
scp /etc/krb5.conf   bigdata12:/etc/krb5.conf
  1. 创建数据库

在 (服务端)上运行初始化数据库命令。其中 -r 指定对应 realm。

kdb5_util create -r HADOOP.COM  -s

该命令会在 /var/kerberos/krb5kdc/ 目录下创建 principal 数据库。
如果遇到数据库已经存在的提示,可以把 /var/kerberos/krb5kdc/ 目录下的 principal 的相关文件都删除掉。默认的数据库名字都是 principal。可以使用 -d 指定数据库名字。

注意:如果删除数据库,需重启kdc服务

kdb5_util destroy
  1. 启动服务
#centos 7
systemctl enable krb5kdc.service
systemctl enable kadmin.service

systemctl start  krb5kdc.service
systemctl start  kadmin.service

#stop
systemctl stop krb5kdc.service
systemctl stop kadmin.service

  1. 创建Kerberos 管理员
  • 关于 kerberos 的管理,可以使用 kadmin.local 或 kadmin,至于使用哪个,取决于账户和访问权限:
  • 如果有访问 kdc 服务器的 root 权限,但是没有 kerberos admin 账户,使用 kadmin.local
  • 如果没有访问 kdc 服务器的 root 权限,但是用 kerberos admin 账户,使用 kadmin
kadmin.local -q "addprinc root/admin"

系统会提示输入密码,密码不能为空,且需妥善保存。

  • 在客户端导入管理员凭据
kinit root/admin@HADOOP.COM
  • 执行成功后使用klist查看当前的凭据
[root@cs91 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: root/admin@HADOOP.COM

Valid starting       Expires              Service principal
04/02/2021 10:17:42  04/03/2021 10:17:42  krbtgt/HADOOP.COM@HADOOP.COM

配置Kerberos HA

目前Kerberos服务器的高可用是通过主备模式实现,数据同步是通过kprop服务,定时将主节点上的数据同步到从节点上

主:bigdata11
备:bigdata12
客户端:bigdata13

备机安装KDC Server

  • 在备机执行:
yum -y install krb5-server krb5-auth-dialog krb5-workstation krb5-devel krb5-libs
  • 修改/etc/krb5.conf(所有节点,主,备,客户端)

realms中添加备机地址:

[realms]
HADOOP.COM = {
 kdc = bigdata11:88
 admin_server = bigdata11:749
 kdc = bigdata12:88
 #admin_server = bigdata12:749
 default_domain = hadoop.com
}
  • 拷贝主节点配置文件到备机

master key stash file(本例中为:.k5.HADOOP.COM)

cd /var/kerberos/krb5kdc
scp .k5.HADOOP.COM bigdata12:`pwd`
scp kadm5.acl bigdata12:`pwd`
scp kdc.conf bigdata12:`pwd`
  • 创建同步账号

为同步数据创建专门的principal,命名规则为 host/@REALM。这里用来做同步的 principal为 host/ bigdata11和 host/ bigdata12。

在主节点执行:

kadmin.local
kadmin.local:  addprinc  -randkey host/bigdata11@HADOOP.COM
kadmin.local:  addprinc  -randkey host/bigdata12@HADOOP.COM
kadmin.local:  ktadd host/bigdata11@HADOOP.COM
kadmin.local:  ktadd host/bigdata12@HADOOP.COM

此时host/bigdata11、host/bigdata12添加到了/etc/krb5.keytab中

  • 拷贝/etc/krb5.keytab到备机

在主节点执行:

scp /etc/krb5.keytab bigdata12:/etc/
  • 备节点上创建 /var/kerberos/krb5kdc/kpropd.acl

数据库通过kpropd守护程序从主KDC传播到备KDC,备KDC需要创建 kpropd.acl文件,kpropd.acl需要填写同步账号principals。

在备节点执行:

vim  /var/kerberos/krb5kdc/kpropd.acl

添加如下内容:

host/bigdata11@HADOOP.COM
host/bigdata12@HADOOP.COM
  • 备节点启动服务
##启动kprop服务:
systemctl start kprop
systemctl status kprop
systemctl enable kprop

##启动krb5kdc
systemctl start krb5kdc.service
systemctl enable krb5kdc.service

注意:
备节点不能启动kadmin,kadmin只有在主节点宕机,需要备节点切换成主时才启动。

  • principal数据同步

在主节点导出 kerberos上的 principal,使用 kprop命令将导出文件同步到备节点上

在主节点执行:

kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
kprop -f /var/kerberos/krb5kdc/slave_datatrans -d bigdata12
  • 在主节点编写同步数据库脚本

需要手动创建数据库同步脚本,并加入到系统crontab中。

vim /var/kerberos/kprop_trans.sh

内容如下:

#!/usr/bin/env bash
DUMP=/var/kerberos/krb5kdc/slave_datatrans
REALM=HADOOP.COM
PORT=754
SLAVE="bigdata12"
LOGFILE=/var/kerberos/jump.log
/usr/sbin/kdb5_util dump $DUMP
CURRENT_TIME=$(date)
SUFFIX=$(date "+%Y.%m.%d")
echo $CURRENT_TIME >> $LOGFILE.${SUFFIX}
/usr/sbin/kprop -r $REALM -f $DUMP -d -P $PORT $SLAVE >> ${LOGFILE}.${SUFFIX} 2>&1

添加到crontab中:

crontab  -e
例如每分钟同步一次:
*/1 * * * * /var/kerberos/kprop_trans.sh
  • 验证

主节点停止服务,任意节点尝试kint ,如果成功表示,kerberos备机能够继续提供认证服务

##停止KDC
systemctl stop krb5kdc.service
systemctl stop kadmin.service

##禁用crontab同步脚本
crontab  -e

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值