Kerberos KDC主从搭建

基于Hadoop集群安全考虑,需要上线kerberos认证,此章将介绍如果搭建一个主从配置(防止单点故障)的KDC环境。

环境信息:

主机信息:
system: centos7
hosts:
  kdcsrv01    - master kdc
  kdcsrv02    - slave kdc
  kdcsrv01    - master kadmin
相关信息介绍:
HADOOP.COM                               - realm name(域)
/var/kerberos/krb5kdc/.k5.HADOOP.COM     - stash file(数据库自动登陆文件)
/var/kerberos/krb5kdc/principal, /var/kerberos/krb5kdc/principal.ok     - kerberos database file
/var/kerberos/krb5kdc/principal.kadm5    - Kerberos administrative database file
/var/kerberos/krb5kdc/principal.kadm5.lock    - administrative database lock file
/var/kerberos/krb5kdc/kdc.conf           - kdc config file
/var/kerberos/krb5kdc/kadm5.acl          - kdc acl file
/etc/krb5.conf                           - kdc config file

KDCs服务器搭建

1.安装KDC服务程序
sudo yum install -y krb5-server openldap-clients krb5-workstation krb5-libs
2.设置配置文件
$ vi /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 = 1d
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = HADOOP.COM
renewable = true
udp_preference_limit = 1
default_ccache_name = KEYRING:persistent:%{uid}

[realms]
HADOOP.COM = {
kdc = kdcsrv01:88
kdc = kdcsrv02:88
admin_server = kdcsrv01:749
default_domain = HADOOP.COM
}

[domain_realm]
.HADOOP.COM = HADOOP.COM
HADOOP.COM = HADOOP.COM

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

[realms]
HADOOP.COM = {
master_key_type = aes128-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
max_life = 1d
max_renewable_life = 7d
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
}

$ vi /var/kerberos/krb5kdc/kadm5.acl
*/admin@HADOOP.COM  *
3.生成master kdc database(需记录输入的数据库密码)
$ sudo kdb5_util create -r HADOOP.COM -s
# 将在/var/kerberos/krb5kdc/目录下生成多个principal*文件
# 注:生成random随机数时较耗时,所以此步骤执行时间较长。
4.master 服务器添加admin用户
$ sudo kadmin.local
addprinc admin/admin@HADOOP.COM
5.启动kdc 及 kadmin服务
$ sudo service krb5kdc start
$ sudo service kadmin start
$ sudo chkconfig --level 35 krb5kdc on
$ sudo chkconfig --level 35 kadmin on
6.验证admin账户是否能成功认证
$ kinit admin/admin
# 注:
# """
#     Aug 30 14:27:25 kdcsrv01 kadmind[6451](info): Seeding random number generator
#     Aug 30 14:39:14 kdcsrv01 kadmind[6451](info): starting
#     
#     kamdin 启动时需要生成随机数种子导致启动时间较长,执行kadmin命令可能会卡住.
#     以上日志未在kadmin.log中查看kadmin进程启动情况(完成启动耗时12分钟)。
# """

配置slave kdc

7.master服务器生成host keytab文件(需root用户,不能使用普通用户:/etc/目录无权限写入)
$ sudo su - root
$ kadmin.local
addprinc -randkey host/kdcsrv01
ktadd host/kdcsrv01
8.安装slave服务器
$ sudo yum install -y krb5-server openldap-clients krb5-workstation
# 拷贝master /etc/krb5.conf文件: scp kdcsrv01:/etc/krb5.conf /etc/krb5.conf
9.slave 服务器生成host keytab文件(需root用户,不能使用普通用户:/etc/目录无权限写入)
$ sudo su - root
$ kadmin.local
addprinc -randkey host/kdcsrv02
ktadd host/kdcsrv02
10.slave服务器创建kpropd.acl文件
$ sudo touch /var/kerberos/krb5kdc/kpropd.acl
$ sudo vi /var/kerberos/krb5kdc/kpropd.acl
host/kdcsrv01@HADOOP.COM
host/kdcsrv02@HADOOP.COM
11.拷贝master配置文件至slave服务器
$ scp /etc/krb5.conf kdcsrv02:/etc/;
$ cd /var/kerberos/krb5kdc;scp kdc.conf kadm5.acl .k5.HADOOP.COM kdcsrv02:/var/kerberos/krb5kdc/;
12.在slave上启动kpropd服务
$ sudo kpropd
13.在master上将相关数据同步到slave上(需定期手动同步)
$ sudo kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
$ sudo kprop -f /var/kerberos/krb5kdc/slave_datatrans kdcsrv02
# 成功后,会出现以下信息:
# Database propagation to kdcsrv02: SUCCEEDED
# 创建crontab 脚本定期同步数据库:
$ vi /home/dengsc/kdc/sync_db.sh
#!/bin/sh

kdclist="kdcsrv02"
echo `date`"start to sync!"
sudo kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
for kdc in $kdclist;
do
    sudo kprop -f /var/kerberos/krb5kdc/slave_datatrans $kdc
done
echo `date`"end to sync!"

# crontab 信息(master kdc 主机):30 16 * * * /home/dengsc/kdc/sync_db.sh >> /home/dengsc/kdc/sync.log
14.slave上/var/kerberos/krb5kdc/会多出一些文件
  • from_master
  • principal
  • pricipal.kadm5
  • principal.kadmin5.lock
  • principal.ok
15.启动slave kdc服务
$ sudo service krb5kdc start
$ sudo chkconfig --level 35 krb5kdc on

KDC测试主从

16.搭建客户端
$ sudo yum install krb5-workstation krb5-libs krb5-auth-dialog
17.更新客户端/etc/krb5.conf文件
  • 从第三台服务器,使用kinit 获取ticket,正常情况下会从master上获取。
  • 关闭master上的kdc服务(sudo service krb5kdc stop)。
  • 再次从第三台服务器上,使用kinit 获取ticket,如果成功,说明生效。可以观察kdc的日志,在/var/log/krb5kdc.log

Kadmin切换:

先决条件
  • KDC配置为能够用作主KDC或从KDC
如果主KDC仍在运行,在老的主KDC执行以下操作:
  • 杀死kadmind进程(ps -ef | grep kadmin | grep -v grep | awk '{print $2}' | xargs kill)。
  • 禁用同步数据库的crontab作业。
  • 手动运行数据库同步脚本,以确保从kdc都具有数据库的最新副本。
  • 注:必须手动同步数据库至从kdc,否则可能存在数据丢失(kerberos认证时是按照/etc/krb5.conf中主机顺序访问kdc服务器,kdc认证只会读取本地数据库)。
在从KDC上执行
  • 删除/var/kerberos/krb5kdc/kpropd.acl。
  • 启动kadmind守护进程(sudo service kadmin start)。
  • 设置cron作业以传播数据库(将数据库同步到每个从站KDC,需确保从KDC已启动kpropd进程,以及存在/var/kerberos/krb5kdc/kpropd.acl文件)。
  • 在Kerberos领域的每台客户端机器上更改krb5.conf文件中admin_server值。
在客户端主机上:
  • 确保krb5.conf文件中admin_server值正确。
  • 登录kadmin(kadmin -p admin/admin)
  • 验证kadmin功能是否正常。

使用方法:

管理员用户:
常用管理命令:
add_principal, addprinc, ank   - 添加用户
    例: ank dengsc@HADOOP.COM
delete_principal, delprinc     - 删除用户
    例: delprinc dengsc@HADOOP.COM
change_password, cpw           - 修改用户密码
    例: cpw dengsc@HADOOP.COM
list_principals, listprincs, get_principals, getprincs   - 查看所有用户
    例: listprincs
modify_principal, modprinc     - 修改票据属性
    例: modprinc -maxrenewlife 1week dengsc@HADOOP.COM(修改票据可在一周内renew)
get_principal, getprinc        - 查看票据信息
    例: getprinc dengsc@HADOOP.COM
ktadd, xst                     - 导出keytab文件
    例: xst -e aes128-cts-hmac-sha1-96:normal -k /home/dengsc/dengsc.keytab dengsc@HADOOP.COM
        -e 执定加密方式
        -k 指定keytab文件名
        注:导出keytab文件时会重新生成密码.
            kadmin.local模式下可添加参数‘-norandkey’,导出keytab文件时不重置密码.
            egg: xst -norandkey -k /home/dengsc/dengsc.keytab
?                              - help
普通用户:

常用命令:

kinit -kt dengsc.keytab dengsc@HADOOP.COM    - 通过keytab文件认证,获取用户princpal
klist -e                                     - 查看当前生效票据
    -e 显示加密方式
    如果expired值与renew until值相同,则表示该principal的ticket 不是 renwable。
kpasswd <username>                           - 修改密码
kinit -R                                     - 刷新票据

问题:

描述:RHEL 6.x主机执行kinit -kt命令报如下错误
[caijt@nfjd-jpush-portal-test01-248226 ~]$ kinit -kt caijt.keytab caijt
kinit: Bad encryption type while getting initial credentials
原因:
KDC服务器正在RHEL 7.x主机上运行,​​RHEL 6.x该主机对keytab文件中的加密类型有不同的识别。
如<----行所示,两种加密类型在RHEL 6.x和7.x系统中都有不同的名称。这使得KDC服务器在RHEL 6.x主机的kinit请求中无法识别这两种加密类型.
RHEL 6x
[caijt@nfjd-jpush-portal-test01-248226 ~]$ klist -e -kt caijt.keytab 
Keytab name: FILE:caijt.keytab
KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
3 07/06/17 16:48:20 caijt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
3 07/06/17 16:48:20 caijt@HADOOP.COM (des3-cbc-sha1) 
3 07/06/17 16:48:20 caijt@HADOOP.COM (arcfour-hmac) 
3 07/06/17 16:48:20 caijt@HADOOP.COM (etype 26)  <----
3 07/06/17 16:48:20 caijt@HADOOP.COM (etype 25)  <----
3 07/06/17 16:48:20 caijt@HADOOP.COM (des-hmac-sha1) 
3 07/06/17 16:48:20 caijt@HADOOP.COM (des-cbc-md5) 

RHEL 7x
[dengsc@nfjd-hadoop-test01 bash_script]$ klist -e -kt caijt.keytab 
Keytab name: FILE:caijt.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
5 07/06/2017 16:54:15 caijt@HADOOP.COM (aes128-cts-hmac-sha1-96) 
5 07/06/2017 16:54:15 caijt@HADOOP.COM (des3-cbc-sha1) 
5 07/06/2017 16:54:15 caijt@HADOOP.COM (arcfour-hmac) 
5 07/06/2017 16:54:15 caijt@HADOOP.COM (camellia256-cts-cmac)   <----
5 07/06/2017 16:54:15 caijt@HADOOP.COM (camellia128-cts-cmac)   <----
5 07/06/2017 16:54:15 caijt@HADOOP.COM (des-hmac-sha1) 
5 07/06/2017 16:54:15 caijt@HADOOP.COM (des-cbc-md5) 
解决方案:
导出密码时指定加密类型,跳过有差异的加密方法: xst -e "aes128-cts-hmac-sha1-96:normal" -k caijt.keytab caijt
[caijt@nfjd-jpush-portal-test01-248226 ~]$  klist -ekt caijt.keytab 
Keytab name: FILE:caijt.keytab
KVNO Timestamp         Principal
---- ----------------- --------------------------------------------------------
6 07/06/17 17:13:41 caijt@HADOOP.COM (aes128-cts-hmac-sha1-96)

参考:https://discuss.pivotal.io/hc/en-us/articles/214259328-kinit-on-RHEL-6-x-fails-with-keytab-file-generated-on-RHEL-7-x
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • kdc的双击备份,是为了避免某些原因导致KDC主机宕机后,集群都将无法正确得到认证,从而正常访问集群。为了避免出现...
    凡尔Issac阅读 4,990评论 0 0
  • 环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6....
    思梦PHP阅读 2,043评论 0 12
  • 1、复制概述: MySQL内建的复制功能是构建大型,高性能应用程序的基础。将mysql的数据分布到多个系统上去,这...
    魔法师_阅读 5,606评论 0 5
  • 三年零一月。 这么六个字是在一次很随意的一次截屏中看到的五个字,当时满屏就只有这五个字,不知怎么的就入了心,兴许是...
    简小取阅读 537评论 7 3