欢迎来到魔据教育大数据学院,专注大数据工程师培养!
当前位置:首页 > 学习资料 > 讲师博文 > hadoop2.6安全认证Kerberos配置

hadoop2.6安全认证Kerberos配置

时间:2017-08-17 17:40:06作者:王鹏

 

配置环境
系统:Centos6.5
软件版本:Hadoop2.6(HA)
Kerberos对应操作系统版本(取自iso镜像)
 
Hadoop环境:环境使用三台机器zyx7zyx8zyx9用户使用zhengyx
 
目的
由于hadoop默认安全配置,用户可以私自接入节点,可用其他用户执行环境这对安全利,所以需要安全配置。
Hadoop提供了两种安全配置simplekerberos
simple简单认证控制用户名和所属很容易被冒充。
Kerberos借助kerberos服务生成秘钥文件所机器公,有秘钥文件才是可信节点。本文主要介绍kerberos的配置。Kerberos存在问题,配置复杂,切更改麻烦,需从新生成秘钥切分发所有机器。
安装
Kerberos分主服务(主)和认证机器(从)
服务安装
安装rpm包(版本对应操作系统iso镜像包)
krb5-auth-dialog
krb5-server
keyutils-libs-devel
libcom_err-devel
libsepol-devel
libselinux-devel
krb5-devel
krb5-libs(镜像已含,不用再安装)
krb5-workstation(镜像已含,不用再安装)
安装
安装rpm包(版本对应操作系统iso镜像包
keyutils-libs-devel
libcom_err-devel
libsepol-devel
libselinux-devel
krb5-devel
krb5-libs(镜像已含,不用再安装)
krb5-workstation(镜像已含,不用再安装)
 
启动命令
chkconfig --level 35 krb5kdc on
chkconfig --level 35 kadmin on
service krb5kdc start
service kadmin start
 
、配置
Kerberos配置
/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 = ZHENGYX.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 clockskew = 120
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 renewable = true
 udp_preference_limit = 1
 default_tgs_enctypes = arcfour-hmac
 default_tkt_enctypes = arcfour-hmac
 
[realms]
 ZHENGYX.COM = {
  kdc = zyx7:88
  admin_server = zyx7:749
 }
 
[domain_realm]
  .zhengyx.com = ZHENGYX.COM
  www.zhengyx.com = ZHENGYX.COM
 
[kdc]
profile=/var/kerberos/krb5kdc/kdc.conf
 
安全域ZHENGYX.COM名称任意,配置一致即可
Kdc为主服务机器
 
注:Kerberos凭证(ticket)有两个属性,ticket_lifetime和renew_lifetime。其中ticket_lifetime表明凭证生效的时限,一般为24小时。在凭证失效前部分凭证可以延期失效时间(即Renewable),renew_lifetime表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。段服务可以用默认设置,如果是长期认证服务凭证时间需要调长。
kdc.conf
Kerberos默认安装目录/var/kerberos/krb5kdc
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88
 
[realms]
 ZHENGYX.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 =  des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3
  max_life = 24h
  max_renewable_life = 10d
  default_principal_flags = +renewable, +forwardable
 }
 
kadm5.acl
Kerberos默认安装目录/var/kerberos/krb5kdc
 
*/admin@ZHENGYX.COM     * 
 
生成kerberos用户
由于本人使用zhengyx用户安装hadoop(包含hdfs和yarn)使用此账户启动环境所以建立zhengyx的kerberos用户。另需建立HTTP的用户,用于环境内部使用默认名称。
 
创建用户
kadmin.local -q "addprinc -randkey zhengyx/zyx7@ZHENGYX.COM"
kadmin.local -q "addprinc -randkey zhengyx/zyx8@ZHENGYX.COM"
kadmin.local -q "addprinc -randkey zhengyx/zyx9@ZHENGYX.COM"
 
kadmin.local -q "addprinc -randkey HTTP/zyx7@ZHENGYX.COM"
kadmin.local -q "addprinc -randkey HTTP/zyx8@ZHENGYX.COM"
kadmin.local -q "addprinc -randkey HTTP/zyx9@ZHENGYX.COM"
 
生成keytab
$ cd /var/kerberos/krb5kdc/
kadmin.local -q "xst  -k zhengyx-unmerged.keytab  zhengyx/zyx7@ZHENGYX.COM"
kadmin.local -q "xst  -k zhengyx-unmerged.keytab  zhengyx/zyx8@ZHENGYX.COM"
kadmin.local -q "xst  -k zhengyx-unmerged.keytab  zhengyx/zyx9@ZHENGYX.COM"
 
kadmin.local -q "xst  -k HTTP.keytab  HTTP/zyx7@ZHENGYX.COM"
kadmin.local -q "xst  -k HTTP.keytab  HTTP/zyx8@ZHENGYX.COM"
kadmin.local -q "xst  -k HTTP.keytab  HTTP/zyx9@ZHENGYX.COM"
 
合并keytab
$ ktutil
ktutil: rkt zhengyx-unmerged.keytab
ktutil: rkt HTTP.keytab
ktutil: wkt zhengyx.keytab
查看
klist -ket  hadoop.keytab
验证是否合并
$ kinit -k -t zhengyx.keytab zhengyx/zyx7@ZHENGYX.COM
$ kinit -k -t zhengyx.keytab HTTP/zyx7@ZHENGYX.COM
 
分发keytab文件
scp zhengyx.keytab zyx7:/data/hadoop/etc/hadoop
scp zhengyx.keytab zyx8:/data/hadoop/etc/hadoop
scp zhengyx.keytab zyx9:/data/hadoop/etc/hadoop
修改所属用户组(hadoop安装用户和组)及权限(本用户只读,其他组无权限)
ssh zyx7 "chown zhengyx:zhengyx /data/hadoop/etc/hadoop/zhengyx.keytab ;chmod 400 /data/hadoop/etc/hadoop/zhengyx.keytab"
ssh zyx8 "chown zhengyx:zhengyx /data/hadoop/etc/hadoop/zhengyx.keytab ;chmod 400 /data/hadoop/etc/hadoop/zhengyx.keytab"
ssh zyx9 "chown zhengyx:zhengyx /data/hadoop/etc/hadoop/zhengyx.keytab ;chmod 400 /data/hadoop/etc/hadoop/zhengyx.keytab"
 
通过文件登录
kinit -k -t /data/hadoop/etc/hadoop/zhengyx.keytab zhengyx/zyx7@ZHENGYX.COM
 
 
Zookeeper配置
由于hadoophdfs配置了ha所以zookeeper需要配置kerberos
zoo.cfg
增加
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
 
zk配置文件目录下建 jaas.conf内容如下
Server {
      com.sun.security.auth.module.Krb5LoginModule required
      useKeyTab=true
      keyTab="/data/hadoop/etc/hadoop/zhengyx.keytab"
      storeKey=true
      useTicketCache=true
      principal="zhengyx/zyx7@ZHENGYX.COM";
  };
 
新建java.env
export JVMFLAGS="-Djava.security.auth.login.config=/data/zookeeper/conf/jaas.conf"
 
Hdfs配置
core-site.xml
<property>
  <name>hadoop.security.authentication</name>
  <value>kerberos</value>
</property>
 
<property>
  <name>hadoop.security.authorization</name>
  <value>true</value>
</property>
 
hdfs-site.xml
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
<description>max number of file which can be opened in a datanode</description>
</property>
 
<property>
  <name>dfs.block.access.token.enable</name>
  <value>true</value>
</property>
<property>
  <name>dfs.namenode.keytab.file</name>
  <value>/data/hadoop/etc/hadoop/zhengyx.keytab</value>
</property>
<property>
  <name>dfs.namenode.kerberos.principal</name>
  <value>zhengyx/_HOST@ZHENGYX.COM</value>
</property>
<property>
  <name>dfs.namenode.kerberos.https.principal</name>
  <value>HTTP/_HOST@ZHENGYX.COM</value>
</property>
<property>
  <name>dfs.datanode.address</name>
  <value>0.0.0.0:1034</value>
</property>
<property>
  <name>dfs.datanode.http.address</name>
  <value>0.0.0.0:1036</value>
</property>
<property>
  <name>dfs.datanode.keytab.file</name>
  <value>/data/hadoop/etc/hadoop/zhengyx.keytab</value>
</property>
<property>
  <name>dfs.datanode.kerberos.principal</name>
  <value>zhengyx/_HOST@ZHENGYX.COM</value>
</property>
<property>
  <name>dfs.datanode.kerberos.https.principal</name>
  <value>HTTP/_HOST@ZHENGYX.COM</value>
</property>
 
 
<!-- datanode SASL配置 -->
<property>
  <name>dfs.http.policy</name>
  <value>HTTPS_ONLY</value>
</property>
<property>
  <name>dfs.data.transfer.protection</name>
  <value>integrity</value>
</property>
 
<!--journalnode 配置-->
<property>
  <name>dfs.journalnode.keytab.file</name>
  <value>/data/hadoop/etc/hadoop/zhengyx.keytab</value>
</property>
<property>
  <name>dfs.journalnode.kerberos.principal</name>
  <value>zhengyx/_HOST@ZHENGYX.COM</value>
</property>
<property>
  <name>dfs.journalnode.kerberos.internal.spnego.principal</name>
  <value>HTTP/_HOST@ZHENGYX.COM</value>
</property>
 
<!--webhdfs-->
<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>
 
<property>
  <name>dfs.web.authentication.kerberos.principal</name>
  <value>HTTP/_HOST@ZHENGYX.COM</value>
</property>
 
<property>
  <name>dfs.web.authentication.kerberos.keytab</name>
  <value>/data/hadoop/etc/hadoop/zhengyx.keytab</value>
</property>
 
<property>
  <name>dfs.datanode.data.dir.perm</name>
  <value>700</value>
</property>
 
SASL配置
此处是用于datanode服务,与kerberos无关,通过此配置不需要jsvc
一台机器(ca)生成key与cert
ca机器相当于主机生成zyx_ca_key与zyx_ca_cert文件
openssl req -new -x509 -keyout zyx_ca_key -out zyx_ca_cert -days 9999
z123456789
将key和cert文件传给所有机器
 
zyx_ca_key与zyx_ca_cert文件传给其他机器,在其他机器执行生成z_keystore与z_truststore
keytool -keystore z_keystore -alias localhost -validity 9999 -genkey
keytool -keystore z_truststore -alias CARoot -import -file zyx_ca_cert
keytool -keystore z_keystore -alias localhost -certreq -file z_cert
openssl x509 -req -CA zyx_ca_cert -CAkey zyx_ca_key -in z_cert -out z_cert_signed -days 9999 -CAcreateserial -passin pass:z123456789
keytool -keystore z_keystore -alias CARoot -import -file zyx_ca_cert
keytool -keystore z_keystore -alias localhost -import -file z_cert_signed
 
将z_keystore与z_truststore
配置到ssl(ssl-server.xml,ssl-client.xml)文件中(hadoop/etc/hadoop)
指定文件与密码即可,无特殊配置不做说明
 
Yarn配置
Yarn-site.xml增加kerberos配置
<!--YARN kerberos security-->
<property>
  <name>yarn.resourcemanager.keytab</name>
  <value>/data/hadoop/etc/hadoop/zhengyx.keytab</value>
</property>
<property>
  <name>yarn.resourcemanager.principal</name>
  <value>zhengyx/_HOST@ZHENGYX.COM</value>
</property>
<property>
  <name>yarn.nodemanager.keytab</name>
  <value>/data/hadoop/etc/hadoop/zhengyx.keytab</value>
</property>
<property>
  <name>yarn.nodemanager.principal</name>
  <value>zhengyx/_HOST@ZHENGYX.COM</value>
</property>
 
三、使用
新建环境使用用户:addprinc zhengyx/hadoop
登录kinit zhengyx/hadoop
登录后可正常使用hadoop命令

5-1.png

不登录kerberos使用hadoop命令会报错

5-2.png

备注
存在问题:kerberos主服务为节点,如果主服务异常会导致机器间无法认证致使环境能正常工作。这可用环境不符,kerberos的高可后续研究。

更多大数据相关资讯敬请关注魔据教育,为您分享最及时的大数据资讯。
学习大数据敬请关注魔据教育微信二维码。
魔据教育微信二维码

【版权与免责声明】如发现内容存在版权问题,烦请提供相关信息发邮件至kefu@mojuedu.com,我们将及时沟通与处理。本站内容除非来源注明魔据教育,否则均为网友转载,涉及言论、版权与本站无关。

全国咨询热线:18501996998,值班手机:18501996998(7*24小时)

在线咨询:张老师QQ 320169340

企业合作服务专线:010-82340234-821, 院校合作洽谈专线:010-82340234

Copyright 2001-2019 魔据教育 - 北京华育兴业科技有限公司 版权所有,京ICP备17018991号-2

免费在线咨询立即咨询

免费索取技术资料立即索取

大数据技术交流QQ:226594285

电话咨询010-82340234