Kerberos主从配置文档

Kerberos主从配置文档

 

1. Kerberos主从同步机制

在Master上通过以下命令同步数据:

kdb5_util dump /var/kerberos/krb5kdc/slave_db

kprop -f  /var/kerberos/krb5kdc/slave_db kerberos2.hadoop.com

2. 搭建 Kerberos

3.1 环境

我们在两个备用NameNode节点上实现Kerberos主从,并在其它需要接入认证的主机上安装Kerberos客户端。

  • 操作系统:CentOS 6.7/RedHart 6.7
  • 运行用户:root

3.2 安装包

我们是基于RedHart 6.7/CentOS 6.7操作系统,相关Kerberos安装包可在系统包中获取,相关rpm包列表如下:

krb5-app1-clients*.rpm

krb5-libs*.rpm

krb5-app1-servers*.rpm

krb5-pkinit-openssl*.rpm

krb5-auth-dialog*.rpm

krb5-server*.rpm

krb5-dev1*.rpm

krb5-server-ldap*.rpm

krb5-workstation*.rpm

3.2 安装过程

3.2.1 准备工作

确认添加主机名解析到 /etc/hosts 文件中。

$ cat /etc/hosts

127.0.0.1       localhost

111.111.241.210  kerberos.hadoop.com     - master KDC

111.111.241.211  kerberos2.hadoop.com  - slave  KDC

注意:hostname 请使用小写,要不然在集成 kerberos 时会出现一些错误。

3.2.2 安装 kdc server

KDC (这里是master 和 slave) 上安装包 krb5krb5-server krb5-client

rpm -ivh krb5-server*.rpm

rpm – ivh krb5-libs*.rpm

rpm -ivh krb5-auth-dialog*.rpm

rpm -ivh  krb5-workstation*.rpm

 

在其他节点(kerberos 所有认证客户端)安装 krb5-libs、krb5-workstation

rpm – ivh krb5-libs*.rpm

rpm -ivh  krb5-workstation*.rpm

 

3.2.3 修改配置文件

kdc 服务器涉及到三个配置文件:

/etc/krb5.conf

/var/kerberos/krb5kdc/kdc.conf

/var/kerberos/krb5kdc/kadm5.acl

配置 Kerberos 的一种方法是编辑配置文件 /etc/krb5.conf。默认安装的文件中包含多个示例项。

$ cat /etc/krb5.conf

[logging]

default = FILE:/var/log/krb5libs.log

kdc = FILE:/var/log/krb5kdc.log

admin_server = FILE:/var/log/kadmind.log

[libdefaults]

default_realm = HADOOP.COM

dns_lookup_realm = false

dns_lookup_kdc = false

clockskew = 120

ticket_lifetime = 24h

renew_lifetime = 7d

forwardable = true

renewable = true

udp_preference_limit = 1

default_tgs_enctypes = arcfour-hmac

default_tkt_enctypes = arcfour-hmac

[realms]

HADOOP.COM = {

kdc = kerberos.hadoop.com:88

kdc = kerberos2.hadoop.com:88

admin_server = kerberos.hadoop.com:749

}

[domain_realm]

.hadoop.com = HADOOP.COM

www.hadoop.com = HADOOP.COM

[kdc]

profile=/var/kerberos/krb5kdc/kdc.conf

说明:

  • [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:代表默认的域名
  • [appdefaults]:可以设定一些针对特定应用的配置,覆盖默认配置。

修改 /var/kerberos/krb5kdc/kdc.conf ,该文件包含 Kerberos 的配置信息。例如,KDC 的位置,Kerbero 的 admin 的realms 等。需要所有使用的 Kerberos 的机器上的配置文件都同步。这里仅列举需要的基本配置。详细参考:http://web.mit.edu/~kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html

$ cat /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]

v4_mode = nopreauth

kdc_ports = 88

kdc_tcp_ports = 88

[realms]

HADOOP.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

supported_enctypes =  des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3

max_life = 24h

max_renewable_life = 10d

default_principal_flags = +renewable, +forwardable

}

说明:

  • HADOOP.COM: 是设定的 realms。名字随意。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感,一般为了识别使用全部大写。这个 realms 跟机器的 host 没有大关系。
  • master_key_type:和 supported_enctypes 默认使用 aes256-cts。由于,JAVA 使用 aes256-cts 验证方式需要安装额外的 jar 包(后面再做说明)。推荐不使用,并且删除 aes256-cts。
  • acl_file:标注了 admin 的用户权限,需要用户自己创建。文件格式是:Kerberos_principal permissions [target_principal] [restrictions]
  • supported_enctypes:支持的校验方式。
  • admin_keytab:KDC 进行校验的 keytab。

关于AES-256加密

对于使用 centos5. 6及以上的系统,默认使用 AES-256 来加密的。这就需要集群中的所有节点上安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File

下载的文件是一个 zip 包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security

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

$ cat /var/kerberos/krb5kdc/kadm5.acl

*/[email protected] *

3.2.4 同步配置文件

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

$ scp /etc/krb5.conf hods-d01:/etc/krb5.conf

$ scp /etc/krb5.conf hods-d02/etc/krb5.conf

$ scp /etc/krb5.conf hods-d03:/etc/krb5.conf

请确认集群如果关闭了 selinux。

3.2.5 创建数据库

在 cdh1 上运行初始化数据库命令。其中 -r 指定对应 realm。

$ kdb5_util create -r HADOOP.COM -s

出现 Loading random data 的时候另开个终端执行点消耗CPU的命令如 cat /dev/sda > /dev/urandom 可以加快随机数采集。

该命令会在 /var/kerberos/krb5kdc/ 目录下创建 principal 数据库。

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

3.2.6 启动服务

在 master 节点上运行:

$ chkconfig --level 35 krb5kdc on

$ chkconfig --level 35 kadmin on

$ service krb5kdc start

$ service kadmin start

3.2.7 创建 kerberos 管理员

关于 kerberos 的管理,可以使用 kadmin.local 或 kadmin,至于使用哪个,取决于账户和访问权限:

  • 如果有访问 kdc 服务器的 root 权限,但是没有 kerberos admin 账户,使用 kadmin.local
  • 如果没有访问 kdc 服务器的 root 权限,但是用 kerberos admin 账户,使用 kadmin

在 master 上创建远程管理的管理员:

#手动输入两次密码,这里密码为root

$ kadmin.local -q "addprinc root/admin"

# 也可以不用手动输入密码

$ echo -e "root\nroot" | kadmin.local -q "addprinc root/admin"

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

3.2.8 Slave KDC配置

 1 创建host  keytab 文件

在master服务器上

[[email protected] ~]#  kadmin

kadmin: addprinc  -randkey  host/kerberos.hadoop.com  #添加principal

kadmin:ktadd  host/kerberos.hadoop.com    #生成keytab文件

在slave服务器上

[[email protected] ~]#  kadmin

kadmin: addprinc  -randkey  host/kerberos2.hadoop.com  #添加principal

kadmin: ktadd host/kerberos2.hadoop.com    #生成keytab文件

 2 将master上的几个文件拷贝到从服务器

文件: krb5.conf、kdc.conf、kadmin5.acl、master key stash file

[[email protected] ~]# scp /etc/krb5.conf  kerberos2:/etc/.

[[email protected] ~]# cd /var/kerberos/krb5kdc

[[email protected] ~]# scp kdc.conf kadmin5.acl .k5.HADOOP.COM

Kerberos2:/var/kerberos/krb5kdc/.

 3 在slave服务器上创建kpropd.acl文件

[[email protected] ~]# touch /var/kerberos/krb5kdc/kpropd.acl

添加如下内容:

host/[email protected] .COM

host/[email protected] .COM

     4 在slave上启动kpropd服务

[[email protected] ~]#  kpropd –S

至此,slave上的kdc服务还不能启动,因为无kdc的database数据

     5  在master上将相关数据同步到slave

[[email protected] ~]#kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans

[[email protected] ~]#kprop -f /var/kerberos/krb5kdc/slave_db kerberos2.hadoop.com

成功后,会出现以下信息:

Database propagation to kerberos2.hadoop.com: SUCCEEDED

以上命令,可以封装成一个bash,定时运行,即定时更新slave上的database。

6 slave上/var/kerberos/krb5kdc/会多出一些文件,如:

from_master、principal、pricipal.kadm5、principal.kadmin5.lock、            principal.ok

至此,可以启动slave上的kdc服务

  7 测试主从是否生效

1)从第三台服务器,使用kinit 获取ticket,正常情况下会从master上获取

2)关闭master上的kdc服务

3)再次从第三台服务器上,使用kinit 获取ticket,如果成功,说明生效。

也可以观察kdc的日志,在 /var/log/krb5kdc.log

3.2.9 测试 kerberos

查看当前的认证用户:

# 查看principals

$ kadmin: list_principals

# 添加一个新的principal

kadmin:  addprinc test

WARNING: no policy specified for [email protected]; defaulting to no policy

Enter password for principal "[email protected]":

Re-enter password for principal "[email protected]":

Principal "[email protected]" created.

# 删除principal

kadmin:  delprinc test

Are you sure you want to delete the principal "[email protected]"? (yes/no): yes

Principal "[email protected]" deleted.

Make sure that you have removed this principal from all ACLs before reusing.

kadmin: exit

也可以直接通过下面的命令来执行:

# 提示需要输入密码

$ kadmin -p root/admin -q "list_principals"

$ kadmin -p root/admin -q "addprinc test"

$ kadmin -p root/admin -q "delprinc test"

# 不用输入密码

$ kadmin.local -q "list_principals"

$ kadmin.local -q "addprinc test"

$ kadmin.local -q "delprinc test"

创建一个测试用户 test,密码设置为 test:

$ echo -e "test\ntest" | kadmin.local -q "addprinc test"

获取 test 用户的 ticket:

# 通过用户名和密码进行登录

$ kinit test

Password for [email protected]:

a$ klist  -e

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: [email protected]

Valid starting     Expires            Service principal

11/07/14 15:29:02  11/08/14 15:29:02  krbtgt/[email protected]

renew until 11/17/14 15:29:02, Etype (skey, tkt): AES-128 CTS mode with 96-bit SHA-1 HMAC, AES-128 CTS mode with 96-bit SHA-1 HMAC

Kerberos 4 ticket cache: /tmp/tkt0

klist: You have no tickets cached

销毁该 test 用户的 ticket:

$ kdestroy

$ klist

klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_0)

Kerberos 4 ticket cache: /tmp/tkt0

klist: You have no tickets cached

更新 ticket:

$ kinit root/admin

Password for root/[email protected]:

$  klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: root/[email protected]

Valid starting     Expires     Service principal

11/07/14 15:33:57  11/08/14 15:33:57  krbtgt/[email protected]

renew until 11/17/14 15:33:57

Kerberos 4 ticket cache: /tmp/tkt0

klist: You have no tickets cached

$ kinit -R

$ klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: root/[email protected]

Valid starting     Expires            Service principal

11/07/14 15:34:05  11/08/14 15:34:05  krbtgt/[email protected]

renew until 11/17/14 15:33:57

Kerberos 4 ticket cache: /tmp/tkt0

klist: You have no tickets cached

抽取密钥并将其储存在本地 keytab 文件 /etc/krb5.keytab 中。这个文件由超级用户拥有,所以您必须是 root 用户才能在 kadmin shell 中执行以下命令:

$ kadmin.local -q "ktadd kadmin/admin"

$ klist -k /etc/krb5.keytab

Keytab name: FILE:/etc/krb5.keytab

KVNO Principal

---- --------------------------------------------------------------------------

3 kadmin/[email protected]

3 kadmin/[email protected] .COM

3 kadmin/[email protected] .COM

3 kadmin/[email protected] .COM

3 kadmin/[email protected] .COM

3.2.10 CDH集群启用kerberos(略)

时间: 2024-11-09 08:50:38

Kerberos主从配置文档的相关文章

redis.conf 配置文档详解

redis 配置文档详解. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411

Hadoop配置文档

预节 在这一节中,笔者主要向大家介绍了该配置文档中,所用到的Linux命令和Linux的帮助. 终端提示信息 在Linux中,终端的每一行都有提示信息,其包含了当前终端登录的用户,当前登录的主机,当前终端所在的目录. 如:[[email protected] ~]$其格式为:[[用户名]@[hosts主机名或主机ip [当前所在路径]]$解析后可以知道,例子给的提示,实际上代表的是:当前终端登录的主机为master,所有的操作都是针对master的,登录主机的用户为frank,当前终端cd命令进

Nginx配置文档具体解释

Nginx的配置文档具体解释.在这儿做个总结,以便以后使用的时间查看. 下面大部分自己整理.部分来自參考 #设置用户 #user  nobody; #启动进程数(一般和server的CPU同样) #能够使用 $ cat /proc/cpuinfo 查看内核数 worker_processes  2; #设置错误文件存放的路径 #error_log  logs/error.log; #error_log  logs/error.log  notice; #error_log  logs/error

IIS配置文档

IIS配置文档: 1.安装IIS.控制面板→程序→打开关闭Windows功能,Web管理服务和万维网服务都勾上. 2.部署网站:ASP.Net项目的发布:项目中点右键“发布”,选择“文件系统”,发布到一个文件夹下. 3.在IIS中新建网站,设定域名,这样多个域名可以放到一个IIS服务器上.需要绑定域名. 4.模拟域名,如果启用了UAC,则用管理员权限运行记事本,打开 C:\Windows\System32\drivers\etc下的hosts文件 做一下域名协议的欺骗.伪造一些域名出来. 5.如

OpenCV+VS2013+Win8+64位配置文档

配置环境 编程平台:VS2013 系统:Windows8 64位 X64架构 ? 安装OpenCV 1 下载OpenCV-2.4.9,下载网址 http://opencv.org/ 2 解压OpenCV到 D:\Program Files\OpenCV\opencv249 3 配置系统变量 添加OpenCV变量: D:\Program Files\OpenCV\opencv249\build 在Path后添加: D:\Program Files\OpenCV\opencv249\build\x6

【VMware虚拟化解决方案】VMware Horizon View Client 各平台配置文档

云桌面用户手册 XXXX部 2014年05月18日 文档版本 文档名称 XXXX公司云桌面用户手册 保密级别 商密 文档版本编号 1.0 制作人 制作日期 2014-04-24 复审人 复审日期 扩散范围 公司内部使用人员 变更记录 版本编号 版本日期 修改者 说明 文档说明 此文档为XXXX公司内部员工关于<云桌面用户手册>培训文档. 此文档只对公司内部员工传阅,并只针对公司内部员工问题给予解决. 目录 1.VMware Horizon View Client下载地址... 4 2.桌面连接

微信开发配置文档

微信开发配置文档 请求SDK接口 1, 绑定域名 公众号设置 菜单 --> 功能设置 绑定域名 : http://www.xxxxx.com2, 记录应用ID : AppID(应用ID)wxd9c94eba232190a1 应用密码: 8ff9f1fd268bdb643fc27354811d973a3, 找到开发者工具 --> 开发者文档 -->微信网页开发 -->JS-SDK说明文档 页面底部 下载 sample.php 示例DEMO 打开sample.php 设置 APPID

maven工程web层的web.xml配置文档内容

下面是web层,web.xml配置文档里面需要配置的东西: 1.lo4j配置 2.读取spring文件配置 3.设计路径变量值 4.spring字符集过滤器 5.登陆过滤器 6.springMVC核心配置 7.session过期时间 8.错误页面跳转 以下是实例: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSch

maven工程web层的spring配置文档

1.引入jdbc配置文档 2.扫描文件 3.上传文件的设置 下面是例子: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi