【大数据安全】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
:
[root@cdh-node-1 /]# 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
[root@cdh-node-1 /]#
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]
:列举使用的 realmkdc
:代表要 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
来加密的。这就需要集群中的所有节点上安装 JavaCryptography Extension (JCE) Unlimited Strength Jurisdiction Policy File
。
下载的文件是一个 zip 包,解开后,将里面的两个文件放到下面的目录中:$JAVA_HOME/jre/lib/security
3. 创建/var/kerberos/krb5kdc/kadm5.acl
内容为:*/admin@EXAMPLE.COM *
代表名称匹配/admin@EXAMPLE 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认证。
为用户设置密码:
[root@cdh-node-1 /]# kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/admin@EXAMPLE.COM with password.
WARNING: no policy specified for admin/admin@EXAMPLE.COM; defaulting to no policy
Enter password for principal "admin/admin@EXAMPLE.COM":
Re-enter password for principal "admin/admin@EXAMPLE.COM":
Principal "admin/admin@EXAMPLE.COM" 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/admin@EXAMPLE.COM # 初始化证书
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直接登录:
[root@cdh-node-1 /]# kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local:
其它机器的,先使用kinit进行验证:
[root@cdh-server-1 /]# kinit admin/admin
Password for admin/admin@EXAMPLE.COM:
[root@cdh-server-1 /]# kadmin
Authenticating as principal admin/admin@EXAMPLE.COM with password.
Password for admin/admin@EXAMPLE.COM:
kadmin:
2. 增删改查账户
在管理员的状态下使用addprinc
,delprinc
,modprinc
,listprincs
命令。使用?
可以列出所有的命令。
[root@cdh-node-1 /]# kadmin.local
Authenticating as principal root/admin@EXAMPLE.COM with password.
kadmin.local: delprinc test
Are you sure you want to delete the principal "test@EXAMPLE.COM"? (yes/no): yes
Principal "test@EXAMPLE.COM" deleted.
Make sure that you have removed this principal from all ACLs before reusing.
kadmin.local: listprincs
HTTP/cdh-node-1@EXAMPLE.COM
HTTP/cdh-node-2@EXAMPLE.COM
HTTP/cdh-node-3@EXAMPLE.COM
...
3. 生成keytab:使用xst
命令或者ktadd
命令
[root@cdh-node-1 /]# kadmin:xst -k /xxx/xxx/kerberos.keytab hdfs/hadoop1
5.2 用户使用
1. 查看当前认证用户
[root@cdh-node-2 /]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: hdfs@EXAMPLE.COM
Valid starting Expires Service principal
08/08/2018 17:49:41 08/09/2018 17:49:41 krbtgt/EXAMPLE.COM@EXAMPLE.COM
2. 认证用户
[root@cdh-node-2 /]# kinit -kt /xx/xx/kerberos.keytab hdfs/hadoop1
3. 删除当前的认证的缓存
[root@cdh-node-2 /]# kdestroy
[root@cdh-node-2 /]# 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/fully.qualified.domain.name@YOUR-REALM.COM.
2. Keytab
keytab是包含principals和加密principal key的文件。
keytab文件对于每个host是唯一的,因为key中包含hostname。keytab文件用于不需要人工交互和保存纯文本密码,实现到kerberos上验证一个主机上的principal。
因为服务器上可以访问keytab文件即可以以principal的身份通过kerberos的认证,所以,keytab文件应该被妥善保存,应该只有少数的用户可以访问。
【大数据安全】Kerberos集群安装配置的更多相关文章
- CentOS下Hadoop-2.2.0集群安装配置
对于一个刚开始学习Spark的人来说,当然首先需要把环境搭建好,再跑几个例子,目前比较流行的部署是Spark On Yarn,作为新手,我觉得有必要走一遍Hadoop的集群安装配置,而不仅仅停留在本地 ...
- hbase单机环境的搭建和完全分布式Hbase集群安装配置
HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境. @hbase单机环境的搭建 ...
- RabbitMQ集群安装配置+HAproxy+Keepalived高可用
RabbitMQ集群安装配置+HAproxy+Keepalived高可用 转自:https://www.linuxidc.com/Linux/2016-10/136492.htm rabbitmq 集 ...
- hive集群安装配置
hive 是JAVA写的的一个数据仓库,依赖hadoop.没有安装hadoop的,请参考http://blog.csdn.net/lovemelovemycode/article/details/91 ...
- 集群安装配置Hadoop具体图解
集群安装配置Hadoop 集群节点:node4.node5.node6.node7.node8. 详细架构: node4 Namenode,secondnamenode,jobtracker node ...
- spark集群安装配置
spark集群安装配置 一. Spark简介 Spark是一个通用的并行计算框架,由UCBerkeley的AMP实验室开发.Spark基于map reduce 算法模式实现的分布式计算,拥有Hadoo ...
- 原创:centos7.1下 ZooKeeper 集群安装配置+Python实战范例
centos7.1下 ZooKeeper 集群安装配置+Python实战范例 下载:http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeepe ...
- hbase和ZooKeeper集群安装配置
一:ZooKeeper集群安装配置 1:解压zookeeper-3.3.2.tar.gz并重命名为zookeeper. 2:进入~/zookeeper/conf目录: 拷贝zoo_sample.cfg ...
- 集群 安装 配置FastDFS
FastDFS 集群 安装 配置 这篇文章介绍如何搭建FastDFS 集群 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载 ...
随机推荐
- BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树
BZOJ_1828_[Usaco2010 Mar]balloc 农场分配_线段树 Description Input 第1行:两个用空格隔开的整数:N和M * 第2行到N+1行:第i+1行表示一个整数 ...
- BZOJ_3223: Tyvj 1729 文艺平衡树 _splay
题意: 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 分析: ...
- 三元运算符 与 return
有三元运算符可以很好的代替if else简单语句 但是在使用的时候发现 与 return使用的时候 需要用这种形式 错误形式: $a ? return 1 ? return 0; 正确形式: retu ...
- CentOS7.3上部署简单的网站(Tomcat)
本文转载自:沙师弟专栏 https://blog.csdn.net/u014597198/article/details/79649219 [ 感谢郭大大 ] 服务器版本:CentOS 7.3 64 ...
- Charles模拟网络请求页面的网络超时测试
正常情况下网络连接超时可能的原因有以下几点: 1.网络断开,手动的关掉了网络的连接 2.网络阻塞,导致你不能在程序默认等待时间内得到回复数据包. 3.网络不稳定,网络无法完整传送服务器信息. 4.系统 ...
- 从壹开始前后端 [vue后台] 之一 || 权限后台系统 1.0 正式上线
缘起 哈喽各位小伙伴周三好,春节已经过去好多天了,群里小伙伴也各种催搞了,新年也接了新项目,比较忙,不过还是终于赶上这个二月的尾巴写了这篇文章,也把 vue 权限后台上线了(项目地址:http://1 ...
- Boosting(提升方法)之XGBoost
XGBoost是一个机器学习味道非常浓厚的模型,在数学上非常规范,运用正则化.L2范数.二阶梯度.泰勒公式和分布式计算方法,对GBDT等提升树模型进行优化,不仅能处理更大规模的数据,而且运行效率特别高 ...
- python接口自动化(八)--发送post请求的接口(详解)
简介 上篇介绍完发送get请求的接口,大家必然联想到发送post请求的接口也不会太难,被聪明的你又猜到了.答案是对的,虽然发送post请求的参考例子很简单,但是实际遇到的情况却是很复杂的,因为所有系统 ...
- 《k8s-1.13版本源码分析》- Informer 机制
源码分析系列文章已经开源到github,地址如下: github:https://github.com/farmer-hutao/k8s-source-code-analysis gitbook:ht ...
- 一个经典的 HTTP协议详解
1引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1 ...