Hadoop2.x安全:hadoop集群之kerberos认证(一、原理+安装配置)

微信公众号:大数据开发运维架构

关注可了解更多大数据相关的资讯。问题或建议,请公众号留言;

如果您觉得“大数据开发运维架构”对你有帮助,欢迎转发朋友圈

从微信公众号拷贝过来,格式有些错乱,建议直接去公众号阅读


一、为什么启用Kerberos安全认证

    大家都知道,Hadoop1.0.0或者CDH3版本以前,并没有安全认证的概念,用户与HDFS文件系统或者提交分布式任务(Mapreduce、Spark)都是不需要认证的,这样就导致任意用户都可以智联集群进行操作和任务提交;测试环境的恶意操作我们还能接受,如果是生产环境恶意的提交作业,修改文件和数据将会造成严重的后果。

    鉴于安全认证的迫切性,Hadoop1.0.0或CDH3b版本以后都加入了Kerberos认证机制。开启Kerberos认证的集群运行时,集群内的节点使用密钥得到认证。只有被认证过节点才能正常使用。企图冒充的节点由于没有事先得到的密钥信息,无法与集群内部的节点通信。防止了恶意的使用或篡改Hadoop集群的问题,确保了Hadoop集群的可靠安全。

二、Kerberos认证解决的问题

1.集群节点之间的认证

    kerberos实现是服务器节点之间的认证,首先由管理员在KDC服务器节点将集群所有节点加到Kerberos认证数据库中,然后生成主机与各个节点的Keytab文件,并分发到集群各个节点,然后通过认证文件和认证密钥进行通信认证。

2.client与服务器端的认证

与服务器节点间认证原理相同,客户端通过keytab文件和密钥连接集群,与集群进行通信。

3.未实现用户级别的认证

Kerberos只是控制集群的登录,相当于一把钥匙打开了进入集群操作的大门,并没有实现用户操作权限的管理,这一点要搞清楚,举个例子:有一个房间,Kerberos相当于房间的钥匙,有了钥匙之后才可以进行房间,这是Kerberos干的事,进入之后至于你干什么这个不在Kerberos管理的范围之内,这是权限认证的东西,一般我们生产上是通过Ranger去做权限认证。

二、Kerberos认证基本原理

基本认证原理请参考CSDN这位大牛的分析:

    参考链接:

    https://blog.csdn.net/kwame211/article/details/78728989

三、Kerberos安装和配置

1.环境信息

Ambari2.6.0

HDP版本:2.6.3

Linux版本:Centos 7.2

JDK版本:1.8

操作用户:root

集群节点信息,如下表:

主机IP

主机名

描述

192.168.1.98

master98.hadoop.ljs

主节点(安装KDC)

192.168.1.158salver158.hadoop.ljssalver158

192.168.1.31salver31.hadoop.ljssalver31

192.168.1.32salver32.hadoop.ljssalver32

2.Kerberos  Server端安装配置(这里只在Master98节点执行):

    1).选择一个节点安装KDC,这里用master98节点安装,首先我们已经通过yum源将kerberos的rpm包挂载上去了,如果没有rpm包可直接从这里下载:

http://rpm.pbone.net/:

执行命令,安装KDC:

yum -y install krb5-server krb5-libs krb5-workstation

2).修改配置文件/etc/krb5.conf,修改其中的realm,把默认的EXAMPLE.COM修改为自己要定义的值,这里我们一般是CHINAUNICOM

[libdefaults] udp_preference_limit=1

renew_lifetime = 7d  -这里时间一般都是10年  3650d  

forwardable = true 

 default_realm = CHINAUNICOM  

ticket_lifetime = 24h   -这里时间一般都是10年  3650d  

dns_lookup_realm = false  

dns_lookup_kdc = false  

default_ccache_name = /tmp/krb5cc_%{uid}  #走tcp协议而不是走udp协议,这一行一定要添加  

udp_preference_limit = 1      //Switching kerberos to use TCP rather than UDP  

 #default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5 

 #default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5

[domain_realm]

.chinaunicom=CHINAUNICOM

chinaunicom=CHINAUNICOM

[logging]

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

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

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

[realms]

CHINAUNICOM={

admin_server=master98.hadoop.ljs    

kdc = master98.hadoop.ljs 

}

配置说明:

[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的关系 (可选)

3).修改/var/kerberos/krb5kdc目录下的两个文件(注意添加:max_renewable_life和default_principal_flags配置项),KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。

kdc.conf

[kdcdefaults]

 kdc_ports = 88 

kdc_tcp_ports = 88

[realms] 

CHINAUNICOM = {

 --这里跟krb5.conf中realms对应  #master_key_type = aes256-cts  max_life = 3650d   --修改 证书最大时间10年  max_renewable_life = 3650d  --修改 这里也是10年 

 acl_file = /var/kerberos/krb5kdc/kadm5.acl  

dict_file = /usr/share/dict/words  

admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab  

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}

配置说明:

CHINAUNICOM:是设定的realms。名字随意。Kerberos可以支持多个realms,一般设置一个。大小写敏感,一般为了识别使用全部大写。

max_renewable_life = 7d 涉及到是否能进行ticket的renew必须配置。 

master_key_type:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包。推荐不使用。 

acl_file:标注了admin的用户权限,需要用户自己创建。文件格式是 

     Kerberos_principal permissions [target_principal]  [restrictions]

    支持通配符等。最简单的写法是

    */[email protected]      *

    代表名称匹配*/admin@CHINAUNICOM都认为是admin,权限是 *。代表全部权限。

admin_keytab:KDC进行校验的keytab。后文会提及如何创建。 

supported_enctypes:支持的校验方式。注意把aes256-cts去掉。

修改kadm5.acl ,给数据库管理员添加ACL权限,修改kadm5.acl文件,*代表全部权限, 这里表示凡是/admin  斜划线后面有admin的都是管理员用户:

*/admin@CHINAUNICOM  *

4).创建KDC数据库,其中需要设置管理员密码,创建完成会在/var/kerberos/krb5kdc/下面生成一系列文件,若重建数据库则需先删除/var/kerberos/krb5kdc下面principal相关文件,只保留kdc.conf、kadm5.acl文件即可,其他文件都会自动生成。

/usr/sbin/kdb5_util create -r CHINAUNICOM -s

5).添加数据库管理员,注意kadmin.local可以直接运行在KDC上,而无需通过Kerberos认证

 /usr/sbin/kadmin.local -q "addprinc admin/admin"

中间需要输入你刚才初始化KDC数据库时,输入密码:

6).启动Kerberos进程并,通过/var/log/krb5kdc.log 和 /var/log/kadmind.log查看日志,通过kinit检查Kerberos正常运行

[root@master98 krb5kdc]# /bin/systemctl start  krb5kdc.service

[root@master98 krb5kdc]# /bin/systemctl start  kadmin.service

查看状态:

[root@master98 krb5kdc]# /bin/systemctl status  krb5kdc.service

[root@master98 krb5kdc]# /bin/systemctl status  kadmin.service

设置开机启动:

[root@master98 ~]# systemctl enable  krb5kdc.service

[root@master98 ~]# systemctl enable  kadmin.service

至此服务端Kerberos安装完成。

3.Kerberos Client安装,比较简单(如果通过ambari从界面启用kerberos,这一步可以忽略,因为ambari会自动都配置好):

yum install krb5-workstation krb5-libs

客户端也需要配置/etc/krb5.conf,直接把kerberos Server端的krb5.conf文件复制过来即可,直接从master98拷贝到salver158、salver31、slaver32节点/etc/目录下即可。

重要的事情说三遍:

重要的事情说三遍:

重要的事情说三遍:

    特别提醒:所有kerberos节点,不管是server、client还是租户客户端都需要配置JCE

   配置JCE,这是因为CentOS6.5及以上系统默认使用AES-256加密,因此需要在所有节点安装并配置JCE,JCE下载路径: 

JDK1.7 下载:

http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

JDK1.8 下载

http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

解压到自己JDK对应的目录下,解压命令:

unzip -o -j -q /opt/jce_policy-8.zip -d /usr/jdk64/jdk1.8.0_60/jre/lib/security/

其实就是替换了jdk自带的那个jar:

采坑记录:

1.之前没有在/etc/kr5.conf中没有添加:

[libdefaults]

//没添加这一行,这里意思是走tcp协议通信,不走udp

udp_preference_limit = 1

 之前没配置上面一行zookeeper一直启动报错,就报这一个错误,其他完全看不出错误来,切记,切记,报错信息:

至此Kerberos服务端和客户端安装已经完成,接下来我要分享两篇文章:

1.通过Ambari界面对HDP集群开启Kerberos认证

 2.Kerberos常用操作、命令及票据有效期管理

你可能感兴趣的:(Hadoop2.x安全:hadoop集群之kerberos认证(一、原理+安装配置))