CDH 安全
hadoop的HDFS和mapreduce均缺乏相应的安全机制,比如在HDFS中,用户只要知道某个block的blockID,便可以绕过NameNode直接从DataNode上读取该block,用户可以向任意DataNode上写block;在MapReduce中,用户可以修改或者杀掉任意其他用户的作业等。为了增强hadoop的安全机制,从2009年起,Apache专门抽出一个团队,从事为hadoop增加基于kerberos和Deletion token的安全认证和授权机制工作。
下面我就会通过实际的配置案例来演示hadoop的认证(kerberos)和授权(sentry)实现。
特别说明:本次试验环境,基于上一篇博文(CDH和CM介绍及搭建)的环境进行操作。
hadoop集群的认证安全kerberos
Kerberos 介绍
Kerberos 几乎是hadoop集群唯一可用的安全认证的保证机制。为什么我要需要kerberos呢?因为hadoop集群默认采用基于操作系统账号的simple认证,基本没有安全性保证,用户只需要在客户端的操作系统上建立一个同名账号,就可以伪装成任何用户访问集群。为此我们就需要更强的认证机制。
Kerberos的认证过程如下图所示:
kerberos几个重要的基础概念如下表:
kerberos 的配置
在Hadoop1上执行以下操作,安装kerberos服务器和客户端
# yum -y install krb5-server krb5-libs krb5-workstation
修改kdc.conf配置文件,设置租约续期的最长时间,其余均为默认设置
[root@hadoop1-fblinux ~]# cat /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
HADOOP.COM = {# 起的名字
#master_key_type = aes256-cts# 此配置项是加密的算法,如果启用aes256,需要JDK上打过JCE补丁,我们已经打过,实际上可以启用。
max_renewable_life = 7d 0h 0m 0s# 为租约续期的最长时间
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
}
修改krb5配置文件,设置kdc server信息和认证的域
[root@hadoop1-fblinux ~]# cat /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 = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
default_realm = HADOOP.COM
[realms]
HADOOP.COM = {
kdc = 192.168.201.151
admin_server = 192.168.201.151
}
[domain_realm]
.hadoop.com = HADOOP.COM
hadoop.com = HADOOP.COM
初始化kerberos数据库,这里会要求输入一个密码,这个密码是kbs的管理员密码,一定要记住,忘记是很难办的
[root@hadoop1-fblinux ~]# kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'HADOOP.COM',
master key name 'K/M@HADOOP.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
创建管理员用户,创建张三李四用户,并导出证书
[root@hadoop1-fblinux ~]# kadmin.local
Authenticating as principal root/admin@HADOOP.COM with password.
kadmin.local: addprinc admin/admin# 创建管理员用户
WARNING: no policy specified for admin/admin@HADOOP.COM; defaulting to no policy
Enter password for princi