hadoop在用户权限上做的只是像linux用户级别的安全认证,即对文件的访问权限。对于一些数据安全比较重视的公司是不够的,如果对数据安全有要求,而且是认证方式的,可以使用kerberos,但是并不是很好用,当初阿里巴巴在安全上使用kerberos,后来嫌弃太麻烦就抛弃了,自己开发了一套安全认证系统叫宙斯盾已经开源,有兴趣的可以看看。
今天为大家写的实践已经运用到我们单位的大数据平台。不废话去讲kerberos的认证方式和原理,直接进入主题。
kerberos需要跟用户管理系统NIS配合使用。
1、所需安装包:
NIS服务器:
rpcbind-0.2.0-11.el6.x86_64
ypserv-2.19-26.el6_4.2.x86_64
NIS客户端:
yp-tools-2.9-12.el6.x86_64
ypbind-1.20.4-30.el6.x86_64
rpcbind-0.2.0-11.el6.x86_64
KDC服务器:
krb5-server-1.10.3-57.el6.x86_64
krb5-workstation-1.10.3-57.el6.x86_64
krb5-libs-1.10.3-57.el6.x86_64
krb5-devel-1.10.3-57.el6.x86_64
KDC客户端:
krb5-libs-1.10.3-57.el6.x86_64
krb5-devel-1.10.3-57.el6.x86_64
krb5-workstation-1.10.3-57.el6.x86_64
2、角色分类:
3、配置NIS服务器(1.1)
配置NIS区域名称、固定服务端口
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=bigdata022
NISDOMAIN=BIGDATA
YPSERV_ARGS="-p 1011"
设置允许访问NIS服务器的主机
vi /var/yp/securenets
255.255.255.0 192.168.1.0
开启ypserv、rpcbind(portmap)服务,并设置为开机启动
service rpcbind restart;chkconfig rpcbind on
service ypserv restart ; chkconfig ypserv on
创建NIS信息库
//自动识别当前主机名,若无需添加其他NIS服务器,直接按Ctrl+D确认提交就可以了.
#/usr/lib64/yp/ypinit -m
到此,NIS服务器配置完毕
4、配置NIS客户端(1.1、1.2、1.3、1.4)
指定NIS区域、服务器地址信息:
vi /etc/yp.conf
domain BIGDATA server 192.168.1.1
启动ypbind、portmap服务并设置成开机自启
service rpcbind restart ; chkconfig rpcbind on
service ypbind restart ; chkconfig bind on
验证:
ypcat -d BIGDATA -h bigdata022 passwd
5、配置KDC服务器
kerberos配置文件一:
vi /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
[libdefaults]
default_realm = BIGDATA //将文件中的默认领域改为自己的领域
dns_lookup_realm = false
dns_lookup_kdc = 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]
BIGDATA= {
kdc = bigdata022 //指定KDC服务(krb5kdc)的地址
admin_server = bigdata022 //指定KADMIN管理服务(kadmin)的地址
}
[kdc]
profile=/var/kerberos/krb5kdc/kdc.conf //指定KDC配置文件的位置
复制粘贴的时候把//注释去掉。
kerberos配置文件二:
vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
BIGDATA = {
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 des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
kerberos配置文件三:
vi /var/kerberos/krb5kdc/kadm5.acl
*/admin@BIGDATA *
配置完成:
将/etc/krb5.conf传递到客户端机器。
创建KDC票据数据库。
kdb5_utilcreate -r BIGDATA -s
注意:密码一定要牢记。
注:该命令会在 /var/kerberos/krb5kdc/ 目录下创建 principal 数据库。如果遇到数据库已经存在的提示,可以把 /var/kerberos/krb5kdc/ 目录下的 principal 的相关文件都删除掉。默认的数据库名字都是 principal。可以使用 -d 指定数据库名字。
开启kdc服务并设置开机自启:
servicekrb5kdc restart
servicekadmin restart
chkconfig krb5kdcon
chkconfig kadminon
6、配置管理员用户和密码:
kadmin.local
验证:
7、开启cloudera manager的kerberos认证:
点击继续:
点击继续,输入管理员用户和密码:
点击继续,点击继续,重启集群:
集群启用kerberos(比较慢)并重启:
启动完毕后,会发现有错误:
Kerberos Ticket Renewer 运行状况 不良
查看错误:
主要是说,没有设置最大轮转时间。
解决办法:
a、在kerberos主机的/var/kerberos/krb5kdc/kdc.conf配置文件中加入:max_renewable_life=10d
b、找到listprincs中的krbtgt的主题:
kadmin.local:modprinc -maxrenewlife 10days krbtgt/BIGDATA@BIGDATA
重启服务即可。
至此,集群已经开启kerberos认证。
补充:kerberos管理集群的男队较大,若你不想要kerberos管理集群,千万不要随便卸载,cloudera manager并没有关闭kerberos的按钮,需要手动配置安装:
关闭集群kereros认证:
当kerberos服务器故障时,不能提供服务的零时解决办法
当kerberos不提供服务的时候,需要在cloudera manager管理页面对HDFS和zookeeper两个服务的配置进行修改,然后重启集群即可:
对比:
未开启kerberos安全认证时的DataNode收发端口和UI端口以及NameNode的RPC端口如下图:
安全服务及授权:
开启kerberos安全认证后的端口及安全授权:
Zookeeper的配置对比:
未开启kerberos
开启kerberos
综上所述,当kerberos出现故障时,我们可以改回这些配置,将hadoop集群零时调整到非安全状态,从而继续数据分析任务。