【大数据安全】Kerberos集群安装配置

1. 概述

Kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。它也指由麻省理工实现此协议,并发布的一套免费软件。它的设计主要针对客户-服务器模型,并提供了一系列交互认证——用户和服务器都能验证对方的身份。Kerberos协议可以保护网络实体免受窃听和重复攻击。

Kerberos协议基于对称密码学,并需要一个值得信赖的第三方。Kerberos协议的扩展可以为认证的某些阶段提供公钥密码学支持。

2. 环境说明:

  • CDH版本:5.11.2
  • Linux版本:Centos 7
  • Docker版本:Docker version 18.06.0-ce
  • JDK版本:1.8
  • 操作用户:root

机器部署:

# IP 主机名 Server Client
1 192.168.101.232 cdh-server-1 N/A N/A
2 192.168.101.233 cdh-node-1 Kerberos server Kerberos client
3 192.168.101.234 cdh-node-2 N/A Kerberos client
4 192.168.101.235 cdh-node-3 N/A Kerberos client

各节点之间可以通过ssh免密码登录

Kerberos服务器和客户之间的时间同步

3. Kerberos 安装

cdh-node-1作为Kerberos主节点安装服务:

yum install krb5-libs krb5-server krb5-workstation

通过命令查看安装列表rpm -qa|grep krb5:

[[email protected] /]# rpm -qa  | grep krb5
krb5-workstation-1.15.1-19.el7.x86_64
krb5-devel-1.15.1-19.el7.x86_64
krb5-server-1.15.1-19.el7.x86_64
krb5-libs-1.15.1-19.el7.x86_64
[[email protected] /]#

4. 配置

kdc服务器包含三个配置文件:

# 集群上所有节点都有这个文件而且内容同步
/etc/krb5.conf
# 主服务器上的kdc配置
/var/kerberos/krb5kdc/kdc.conf
# 能够不直接访问 KDC 控制台而从 Kerberos 数据库添加和删除主体,需要添加配置
/var/kerberos/krb5kdc/kadm5.acl

1. 首先配置/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 = EXAMPLE.COM  #此处需要进行配置,把默认的EXAMPLE.COM修改为自己要定义的值
 dns_lookup_kdc = false
 dns_lookup_realm = false
 ticket_lifetime = 86400
 renew_lifetime = 604800
 forwardable = true
 default_tgs_enctypes = rc4-hmac
 default_tkt_enctypes = rc4-hmac
 permitted_enctypes = rc4-hmac
 udp_preference_limit = 1
 kdc_timeout = 3000

[realms]
 EXAMPLE.COM = {
 kdc = cdh-node-1   #此处配置的为主机名
 admin_server = cdh-node-1  #同上
 }

配置项说明:

更多参数设置请参考:官方文档。

以下是几个核心参数的说明:

  • [logging]:日志输出设置 (可选)
  • [libdefaults]:连接的默认配置
    • default_realm:Kerberos应用程序的默认领域,所有的principal都将带有这个领域标志
    • ticket_lifetime: 表明凭证生效的时限,一般为24小时
    • renew_lifetime: 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败
    • clockskew:时钟偏差是不完全符合主机系统时钟的票据时戳的容差,超过此容差将不接受此票据。通常,将时钟扭斜设置为 300 秒(5 分钟)。这意味着从服务器的角度看,票证的时间戳与它的偏差可以是在前后 5 分钟内
    • udp_preference_limit= 1:禁止使用 udp 可以防止一个 Hadoop 中的错误
    • default_ccache_name:credential缓存名,默认值为
  • [realms]:列举使用的 realm
    • kdc:代表要 kdc 的位置。格式是 机器:端口
    • admin_server:代表 admin 的位置。格式是 机器:端口
    • default_domain:代表默认的域名
  • [domain_realm]:域名到realm的关系 (可选)

2.配置/var/kerberos/krb5kdc/kdc.conf文件

此处为EXAMPLE.COM与/etc/krb5.conf中的配置保持一致。

[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
  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相关配置,这里只设置了端口信息
- `realms`:realms的配置
    - `EXAMPLE.COM`:设定的realms领域
    - `master_key_type`:和 supported_enctypes 默认使用 aes256-cts。JAVA 使用 aes256-cts 验证方式需要安装 JCE包(推荐不使用)
    - `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

3. 创建/var/kerberos/krb5kdc/kadm5.acl

内容为:*/[email protected] *

代表名称匹配/[email protected] COM 都认为是admin,权限是 * 代表全部权限。

在KDC上我们需要编辑acl文件来设置权限,该acl文件的默认路径是 /var/kerberos/krb5kdc/kadm5.acl(也可以在文件kdc.conf中修改)。

Kerberos的kadmind daemon会使用该文件来管理对Kerberos database的访问权限。对于那些可能会对pincipal产生影响的操作,acl文件也能控制哪些principal能操作哪些其他pricipals。

4. 创建Kerberos数据库

此步可能用时较长,创建完成会在/var/kerberos/krb5kdc/下面生成一系列文件。并且会提示输入数据库管理员的密码。

db5_util create -r EXAMPLE.COM –s # 此处为EXAMPLE.COM与/etc/krb5.conf中的配置保持一致。

其中,[-s]表示生成stash file,并在其中存储master server key(krb5kdc);还可以用[-r]来指定一个realm name —— 当krb5.conf中定义了多个realm时才是必要的。

如果需要重建数据库,将/var/kerberos/krb5kdc目录下的principal相关的文件删除即可.

当Kerberos database创建好后,可以看到目录 /var/kerberos/krb5kdc 下生成了几个文件:

kadm5.acl
kdc.conf
principal
principal.kadm5
principal.kadm5.lock
principal.ok

5. 添加database administrator

为Kerberos database添加administrative principals (即能够管理database的principals) —— 至少要添加1个principal来使得Kerberos的管理进程kadmind能够在网络上与程序kadmin进行通讯。

创建管理员并输入密码admin。kadmin.local可以直接运行在KDC上,而无需通过Kerberos认证。

为用户设置密码:

[[email protected] /]# kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/[email protected]MPLE.COM with password.
WARNING: no policy specified for admin/[email protected]; defaulting to no policy
Enter password for principal "admin/[email protected]":
Re-enter password for principal "admin/[email protected]":
Principal "admin/[email protected]" created.

6. 设置kerberos服务为开机启动,关闭防火墙

chkconfig krb5kdc on
chkconfig kadmin on
chkconfig iptables off

7. 启动krb5kdc和kadmind进程

/usr/sbin/kadmind
/usr/sbin/krb5kdc

service krb5kdc start
service kadmin start
service krb5kdc status

现在KDC已经在工作了。这两个daemons将会在后台运行,可以查看它们的日志文件(/var/log/krb5kdc.log 和 /var/log/kadmind.log)。

8. 检查Kerberos正常运行

kinit admin/admin

9. 集群中的其他主机安装Kerberos Client

yum install krb5-workstation krb5-libs krb5-auth-dialog

配置这些主机上的/etc/krb5.conf,这个文件的内容与KDC中的文件保持一致即可。

10. 在cm节点安装ldap客户端

yum install openldap-clients

5. Kerberos使用

常用命令:

kinit admin/[email protected] # 初始化证书
klist # 查看当前证书
kadmin.local -q "list_principals"   # 列出Kerberos中的所有认证用户
kadmin.local -q "addprinc user1"  # 添加认证用户,需要输入密码
kinit user1  # 使用该用户登录,获取身份认证,需要输入密码
klist  # 查看当前用户的认证信息ticket
kinit –R  # 更新ticket
kdestroy  # 销毁当前的ticket
kadmin.local -q "delprinc user1"  # 删除认证用户

5.1 管理员使用

1. 登录

登录到管理员账户,如果在本机上,可以通过kadmin.local直接登录:

[[email protected] /]# kadmin.local
Authenticating as principal root/[email protected] with password.
kadmin.local:

其它机器的,先使用kinit进行验证:

[[email protected] /]# kinit admin/admin
Password for admin/[email protected]:
[[email protected] /]# kadmin
Authenticating as principal admin/[email protected] with password.
Password for admin/[email protected]:
kadmin:

2. 增删改查账户

在管理员的状态下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。

[[email protected] /]# kadmin.local
Authenticating as principal root/[email protected] with password.
kadmin.local:  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.local:  listprincs
HTTP/[email protected]
HTTP/[email protected]
HTTP/[email protected]
...

3. 生成keytab:使用xst命令或者ktadd命令

[[email protected] /]# kadmin:xst -k /xxx/xxx/kerberos.keytab hdfs/hadoop1

5.2 用户使用

1. 查看当前认证用户

[[email protected] /]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]

Valid starting       Expires              Service principal
08/08/2018 17:49:41  08/09/2018 17:49:41  krbtgt/[email protected]

2. 认证用户

[[email protected] /]# kinit -kt /xx/xx/kerberos.keytab hdfs/hadoop1

3. 删除当前的认证的缓存

[[email protected] /]# kdestroy
[[email protected] /]# klist
klist: No credentials cache found (filename: /tmp/krb5cc_0)

6. 一些概念

1. Principal

Kerberos principal用于在kerberos加密系统中标记一个唯一的身份。

kerberos为kerberos principal分配tickets使其可以访问由kerberos加密的hadoop服务。

对于hadoop,principals的格式为username/[email protected]

2. Keytab

keytab是包含principals和加密principal key的文件。

keytab文件对于每个host是唯一的,因为key中包含hostname。keytab文件用于不需要人工交互和保存纯文本密码,实现到kerberos上验证一个主机上的principal。

因为服务器上可以访问keytab文件即可以以principal的身份通过kerberos的认证,所以,keytab文件应该被妥善保存,应该只有少数的用户可以访问。

原文地址:https://www.cnblogs.com/mantoudev/p/9460712.html

时间: 2024-11-02 16:42:12

【大数据安全】Kerberos集群安装配置的相关文章

高可用RabbitMQ集群安装配置

RabbitMQ集群安装配置+HAproxy+Keepalived高可用 rabbitmq 集群 消息队列 RabbitMQ简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现. AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然.AMQP的主

elk集群安装配置详解

#  一:简介 ``` Elasticsearch作为日志的存储和索引平台: Kibana 用来从 Elasticsearch获取数据,进行数据可视化,定制数据报表: Logstash 依靠强大繁多的插件作为日志加工平台: Filebeat 用来放到各个主机中收集指定位置的日志,将收集到日志发送到 Logstash: Log4j 直接与 Logstash 连接,将日志直接 Logstash(当然此处也可以用 Filebeat 收集 tomcat 的日志). ``` ####  port ```

spark集群安装配置

spark集群安装配置 一. Spark简介 Spark是一个通用的并行计算框架,由UCBerkeley的AMP实验室开发.Spark基于map reduce 算法模式实现的分布式计算,拥有Hadoop MapReduce所具有的优点:但不同于Hadoop MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,节省了磁盘IO耗时,性能比Hadoop更快. 所以,相对来说Hadoop更适合做批处理,而Spark更适合做需要反复迭代的机器学习.下面是我在ubuntu1

Hadoop集群安装配置文档

Hadoop集群安装配置文档 日期 内容 修订人 2015.6.3 文档初始化 易新             目录 1 文档概要... 5 1.1软件版本... 5 1.2机器配置... 5 2 虚拟机配置... 5 2.1新建虚拟机... 5 2.2虚拟网络配置... 8 3 CentOS安装及配置... 9 3.1系统安装... 9 3.2系统配置... 10 3.2.1防火墙配置... 10 3.2.2 SElinux配置... 10 3.2.3 IP配置... 11 3.2.4安装vim

Hadoop2.2集群安装配置-Spark集群安装部署

配置安装Hadoop2.2.0 部署spark 1.0的流程 一.环境描写叙述 本实验在一台Windows7-64下安装Vmware.在Vmware里安装两虚拟机分别例如以下 主机名spark1(192.168.232.147),RHEL6.2-64 操作系统,usernameRoot 从机名spark2(192.168.232.152).RHEL6.2-64 操作系统,usernameRoot 二.环境准备 1.防火墙禁用.SSH服务设置为开机启动.并关闭SELINUX 2.改动hosts文件

集群安装配置Hadoop详细图解

集群安装配置Hadoop 集群节点:node4.node5.node6.node7.node8.具体架构: node4 Namenode,secondnamenode,jobtracker node5 Datanode,tasktracker node6 Datanode,tasktracker node7 Datanode,tasktracker node8 Datanode,tasktracker 操作系统为:CentOS release 5.5 (Final) 安装步骤 一.创建Hadoo

Etcd集群安装配置

本次测试集群为2各节点 一. Etcd集群安装配置 安装包:etcd-3.3.11-2.el7.centos.x86_64.rpm 配置文件: #[Member] #ETCD_CORS="" ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #ETCD_WAL_DIR="" ETCD_LISTEN_PEER_URLS="http://192.168.218.146:2380" ETCD_LI

Hadoop多节点集群安装配置

目录: 1.集群部署介绍 1.1 Hadoop简介 1.2 环境说明 1.3 环境配置 1.4 所需软件 2.SSH无密码验证配置 2.1 SSH基本原理和用法 2.2 配置Master无密码登录所有Salve 3.Java环境安装 3.1 安装JDK 3.2 配置环境变量 3.3 验证安装成功 3.4 安装剩余机器 4.Hadoop集群安装 4.1 安装hadoop 4.2 配置hadoop 4.3 启动及验证 4.4 网页查看集群 5.常见问题FAQ   5.1 关于 Warning: $H

MongoDB 3 分片集群安装配置

操作系统:CentOS 6   x86_64 MongoDB版本:3.4.3 集群主机拓扑: 主机 mongo shardsvr & ReplSetName mongo configsvr & ReplSetName mongos test1.lan shard-a    shard-b test2.lan shard-a    shard-b test3.lan shard-a    shard-b test4.lan cfgshard test5.lan cfgshard test6.