歡迎來到魔據教育大數據學院,專注大數據工程師培養!
當前位置:首頁 > 學習資料 > 講師博文 > hadoop2.6安全認證Kerberos配置

hadoop2.6安全認證Kerberos配置

時間:2017-08-17 17:40:06作者:[!--zuozhe--]

 

配置環境
系統: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
 
*/[email protected]     * 
 
生成kerberos用戶
由于本人使用zhengyx用戶安裝hadoop(包含hdfs和yarn)使用此賬戶啟動環境所以建立zhengyx的kerberos用戶。另需建立HTTP的用戶,用于環境內部使用默認名稱。
 
創建用戶
kadmin.local -q "addprinc -randkey zhengyx/[email protected]"
kadmin.local -q "addprinc -randkey zhengyx/[email protected]"
kadmin.local -q "addprinc -randkey zhengyx/[email protected]"
 
kadmin.local -q "addprinc -randkey HTTP/[email protected]"
kadmin.local -q "addprinc -randkey HTTP/[email protected]"
kadmin.local -q "addprinc -randkey HTTP/[email protected]"
 
生成keytab
$ cd /var/kerberos/krb5kdc/
kadmin.local -q "xst  -k zhengyx-unmerged.keytab  zhengyx/[email protected]"
kadmin.local -q "xst  -k zhengyx-unmerged.keytab  zhengyx/[email protected]"
kadmin.local -q "xst  -k zhengyx-unmerged.keytab  zhengyx/[email protected]"
 
kadmin.local -q "xst  -k HTTP.keytab  HTTP/[email protected]"
kadmin.local -q "xst  -k HTTP.keytab  HTTP/[email protected]"
kadmin.local -q "xst  -k HTTP.keytab  HTTP/[email protected]"
 
合并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/[email protected]
$ kinit -k -t zhengyx.keytab HTTP/[email protected]
 
分發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/[email protected]
 
 
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/[email protected]";
  };
 
新建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/[email protected]</value>
</property>
<property>
  <name>dfs.namenode.kerberos.https.principal</name>
  <value>HTTP/[email protected]</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/[email protected]</value>
</property>
<property>
  <name>dfs.datanode.kerberos.https.principal</name>
  <value>HTTP/[email protected]</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/[email protected]</value>
</property>
<property>
  <name>dfs.journalnode.kerberos.internal.spnego.principal</name>
  <value>HTTP/[email protected]</value>
</property>
 
<!--webhdfs-->
<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>
 
<property>
  <name>dfs.web.authentication.kerberos.principal</name>
  <value>HTTP/[email protected]</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/[email protected]</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/[email protected]</value>
</property>
 
三、使用
新建環境使用用戶:addprinc zhengyx/hadoop
登錄kinit zhengyx/hadoop
登錄后可正常使用hadoop命令

5-1.png

不登錄kerberos使用hadoop命令會報錯

5-2.png

備注
存在問題:kerberos主服務為節點,如果主服務異常會導致機器間無法認證致使環境能正常工作。這可用環境不符,kerberos的高可后續研究。

更多大數據相關資訊敬請關注魔據教育,為您分享最及時的大數據資訊。
學習大數據敬請關注魔據教育微信二維碼。
魔據教育微信二維碼

【版權與免責聲明】如發現內容存在版權問題,煩請提供相關信息發郵件至[email protected],我們將及時溝通與處理。本站內容除非來源注明魔據教育,否則均為網友轉載,涉及言論、版權與本站無關。

全國咨詢熱線:18501996998,值班手機:18501996998(7*24小時)

在線咨詢:張老師QQ 320169340

企業合作服務專線:010-82340234-821, 院校合作洽談專線:010-82340234

Copyright 2001-2019 魔據教育 - 北京華育興業科技有限公司 版權所有,京ICP備17018991號-2

免費在線咨詢立即咨詢

免費索取技術資料立即索取

大數據技術交流QQ:226594285

電話咨詢010-82340234

119期两码中特免费公开