Hadoop Kerberos配置


创建Hadoop系统用户

为Hadoop开启Kerberos,
  1. 需为不同服务准备不同的用户。
  2. 启动服务时需要使用相应的用户。
  3. 须在所有节点创建以下用户和用户组。
  用户划分: User:       Group Daemons hdfs:       hadoop NameNode, Secondary NameNode, JournalNode, DataNode yarn:       hadoop ResourceManager, NodeManager mapred:  hadoop MapReduce JobHistory Server     创建:
#创建hadoop组
groupadd hadoop   

#创建各用户并设置密码
useradd hdfs -g hadoop
echo hdfs | passwd --stdin  hdfs

useradd yarn -g hadoop
echo yarn | passwd --stdin yarn

useradd mapred -g hadoop
echo mapred | passwd --stdin mapred
   

为Hadoop各服务创建Kerberos主体(Principal)

主体格式如下:ServiceName/HostName@REALM,例如: dn/hadoop01@HADOOP.COM

1、各服务所需主体如下

环境:主机名为hadoop01
服务               所在主机    主体(Principal) NameNode          hadoop01   nn/hadoop01 DataNode           hadoop01   dn/hadoop01 SecondaryNameNode       hadoop01   sn/hadoop01 ResourceManager        hadoop01       rm/hadoop01 NodeManager                      hadoop01   nm/hadoop01 JobHistory Server         hadoop01   jhs/hadoop01 Web UI           hadoop01   HTTP/hadoop01


2, 创建主体说明


1)路径准备 为服务创建的主体,需要通过密钥文件keytab文件进行认证,故需为各服务准备一个安全的路径用来存储keytab文件。
mkdir /etc/security/keytab/
chown -R root:hadoop /etc/security/keytab/
chmod 770 /etc/security/keytab/
2)管理员主体认证 为执行创建主体的语句,需登录Kerberos 数据库客户端,登录之前需先使用Kerberos的管理员用户进行认证,执行以下命令并根据提示输入密码。
kinit root/admin
3)执行创建主体的语句   格式:
主体格式如下:ServiceName/HostName@REALM  例如: dn/hadoop01@HADOOP.COM kadmin: addprinc -randkey xx/hadoop01 kadmin: xst -k /etc/security/keytab/nn.keytab xx/hadoop01
# 说明: # (1)addprinc test/test:作用是新建主体 # addprinc:增加主体 # -randkey:密码随机,因hadoop各服务均通过keytab文件认证,故密码可随机生成 # test/test:新增的主体 # (2)xst -k /etc/security/keytab/test.keytab test/test:作用是将主体的密钥写入keytab文件 # xst:将主体的密钥写入keytab文件 # -k /etc/security/keytab/test.keytab:指明keytab文件路径和文件名 # test/test:主体 # (3)为方便创建主体,可使用如下命令 # kadmin -proot/admin -wpassword -q"addprinc -randkey test/test" # kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/test.keytab test/test" # 说明: # -p:主体 # -w:密码 # -q:执行语句 # (4)操作主体的其他命令,可参考官方文档,地址如下:http://web.mit.edu/kerberos/krb5-current/doc/admin/admin_commands/kadmin_local.html#commands   执行:

以下命令在hadoop01节点执行:

#NameNode(hadoop01)
kadmin -proot/admin -wpassword -q"addprinc -randkey nn/hadoop01"
kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/nn.service.keytab nn/hadoop01"

#DataNode(hadoop01)
kadmin -proot/admin -wpassword -q"addprinc -randkey dn/hadoop01"
kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/dn.service.keytab dn/hadoop01"

#Secondary NameNode(hadoop01)
kadmin -proot/admin -wpassword -q"addprinc -randkey sn/hadoop01"
kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/sn.service.keytab sn/hadoop01"


#ResourceManager(hadoop01)
kadmin -proot/admin -wpassword -q"addprinc -randkey rm/hadoop01"
kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/rm.service.keytab rm/hadoop01"

#NodeManager(hadoop01)
kadmin -proot/admin -wpassword -q"addprinc -randkey nm/hadoop01"
kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/nm.service.keytab nm/hadoop01"

#JobHistory Server(hadoop01)
kadmin -proot/admin -wpassword -q"addprinc -randkey jhs/hadoop01"
kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/jhs.service.keytab jhs/hadoop01"

#Web UI(hadoop01)
kadmin -proot/admin -wpassword -q"addprinc -randkey HTTP/hadoop01"
kadmin -proot/admin -wpassword -q"xst -k /etc/security/keytab/spnego.service.keytab HTTP/hadoop01"
  4).修改所有节点keytab文件的所有者和访问权限
chown -R root:hadoop /etc/security/keytab/
chmod 660 /etc/security/keytab/*

3、修改Hadoop配置文件

需要修改的内容如下,修改完毕需要分发所改文件。 (1)、core-site.xml 增加以下内容:

<property>
  <name>hadoop.security.authorizationname>
  <value>truevalue>
property>


<property>
  <name>hadoop.security.authenticationname>
  <value>kerberosvalue>
property>


<property>
  <name>hadoop.rpc.protectionname>
  <value>authenticationvalue>
property>


<property>
  <name>hadoop.security.auth_to_local.mechanismname>
  <value>MITvalue>
property>


<property>
  <name>hadoop.security.auth_to_localname>
  <value>
    RULE:[2:$1/$2@$0]([ndj]n\/.*@HADOOP\.COM)s/.*/hdfs/
    RULE:[2:$1/$2@$0]([rn]m\/.*@HADOOP\.COM)s/.*/yarn/
    RULE:[2:$1/$2@$0](jhs\/.*@HADOOP\.COM)s/.*/mapred/
    DEFAULT
  value>
property>
   (2)、hdfs-site.xml  


  

<property>
  <name>dfs.block.access.token.enablename>
  <value>truevalue>
property>


<property>
  <name>dfs.namenode.kerberos.principalname>
  <value>nn/_HOST@HADOOP.COMvalue>
property>


<property>
  <name>dfs.namenode.keytab.filename>
  <value>/etc/security/keytab/nn.service.keytabvalue>
property>


<property>
  <name>dfs.secondary.namenode.keytab.filename>
  <value>/etc/security/keytab/sn.service.keytabvalue>
property>


<property>
  <name>dfs.secondary.namenode.kerberos.principalname>
  <value>sn/_HOST@HADOOP.COMvalue>
property>


<property>
  <name>dfs.namenode.kerberos.internal.spnego.principalname>
  <value>HTTP/_HOST@HADOOP.COMvalue>
property>


<property>
  <name>dfs.web.authentication.kerberos.principalname>
  <value>HTTP/_HOST@HADOOP.COMvalue>
property>


<property>
  <name>dfs.secondary.namenode.kerberos.internal.spnego.principalname>
  <value>HTTP/_HOST@HADOOP.COMvalue>
property>


<property>
  <name>dfs.web.authentication.kerberos.keytabname>
  <value>/etc/security/keytab/spnego.service.keytabvalue>
property>


<property>
  <name>dfs.datanode.kerberos.principalname>
  <value>dn/_HOST@HADOOP.COMvalue>
property>


<property>
  <name>dfs.datanode.keytab.filename>
  <value>/etc/security/keytab/dn.service.keytabvalue>
property>


<property>
  <name>dfs.data.transfer.protectionname>
  <value>authenticationvalue>
property>


<property>
  <name>dfs.http.policyname>
  <value>HTTPS_ONLYvalue>
  <description>所有开启的web页面均使用https, 细节在ssl server 和client那个配置文件内配置description>
property>
  (3)、yarn-site.xml
增加以下内容:

<property>
  <name>yarn.resourcemanager.principalname>
  <value>rm/_HOST@HADOOP.COMvalue>
property>


<property>
  <name>yarn.resourcemanager.keytabname>
  <value>/etc/security/keytab/rm.service.keytabvalue>
property>


<property>
  <name>yarn.nodemanager.principalname>
  <value>nm/_HOST@HADOOP.COMvalue>
property>


<property>
  <name>yarn.nodemanager.keytabname>
  <value>/etc/security/keytab/nm.service.keytabvalue>
property>
(4)、mapred-site.xml vi etc/hadoop/mapred-site.xml 增加以下内容:

<property>
<name>mapreduce.jobhistory.keytabname>
<value>/etc/security/keytab/jhs.service.keytabvalue>
property>


<property>
<name>mapreduce.jobhistory.principalname>
<value>jhs/_HOST@HADOOP.COMvalue>
property>
 

配置HDFS使用HTTPS安全传输协议

1,生成密钥对 Keytool是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。 -keystore 指定密钥库的名称及位置(产生的各类信息将存在.keystore文件中) -genkey(或者-genkeypair) 生成密钥对 -alias 为生成的密钥对指定别名,如果没有默认是mykey -keyalg 指定密钥的算法 RSA/DSA 默认是DSA
(1)、生成 keystore的密码及相应信息的密钥库
[root@hadoop01 ~]# keytool -keystore /etc/security/keytab/keystore -alias jetty -genkey -keyalg RSA


(2)、修改keystore文件的所有者和访问权限
[root@hadoop01 ~]# chown -R root:hadoop /etc/security/keytab/keystore
[root@hadoop01 ~]# chmod 660 /etc/security/keytab/keystore

(3)、将该证书分发到集群中的每台节点的相同路径

scp

(4)、修改hadoop配置文件ssl-server.xml.example

 mv ssl-server.xml.example ssl-server.xml 

修改配置项:


<property>
  <name>ssl.server.keystore.locationname>
  <value>/etc/security/keytab/keystorevalue>
property>


<property>
  <name>ssl.server.keystore.passwordname>
  <value>passwordvalue>
property>


<property>
  <name>ssl.server.truststore.locationname>
  <value>/etc/security/keytab/keystorevalue>
property>


<property>
  <name>ssl.server.keystore.keypasswordname>
  <value>passwordvalue>
property>


<property>
  <name>ssl.server.truststore.passwordname>
  <value>passwordvalue>
property>

Linux-Container-executor

Kerberos需要使用基于cgroup工作的一个名为Linux-container-executer的容器来运行YARN任务,这个容器需要我们自己编译源码来构建出来如果编译不出来可以在网络上找找, 编译步骤就不详细说明了.  

1)修改所有节点的container-executor所有者和权限:

要求其所有者为root,所有组为hadoop(启动NodeManger的yarn用户的所属组),权限为6050。 其默认路径为$HADOOP_HOME/bin
chown root:hadoop $HADOOP_HOME/bin/container-executor
chmod 6050 $HADOOP_HOME/bin/container-executor

2)修改所有节点的 container-executor.cfg 文件 的所有者和权限:

要求该文件及其所有的上级目录的所有者均为root,所有组为hadoop(启动NodeManger的yarn用户的所属组),权限为400。其默认路径为$HADOOP_HOME/etc/hadoop
chmod 777 $HADOOP_HOME/etc/hadoop/container-executor.cfg
chown root:hadoop $HADOOP_HOME/etc/hadoop/container-executor.cfg

3)修改$HADOOP_HOME/etc/hadoop/container-executor.cfg

vim $HADOOP_HOME/etc/hadoop/container-executor.cfg 内容如下:
#NM 的 Unix 用户组, 需要与 yarn-site.xml 里一致
yarn.nodemanager.linux-container-executor.group=hadoop
#禁止使用的用户,多个用户使用 ‘,’ 分隔:
banned.users=hdfs,yarn,mapred
#允许使用的用户的 uid 最小值,防止有其他超级用户:
min.user.id=1
#允许使用的系统用户,多个用户使用 ‘,’ 分隔,可以不设置,即允许所有用户:
allowed.system.users=
#
feature.tc.enabled=false

4)修改$HADOOP_HOME/etc/hadoop/yarn-site.xml文件


<property>
<name>yarn.nodemanager.container-executor.classname>
<value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutorvalue>
property>


<property>
<name>yarn.nodemanager.linux-container-executor.groupname>
<value>hadoopvalue>
property>


<property>
<name>yarn.nodemanager.linux-container-executor.pathname>
<value>/data/software/hadoop-3.3.2/bin/container-executorvalue>
property>

参考:https://blog.csdn.net/weixin_45417821/article/details/122759955

参考:https://blog.csdn.net/zhanglong_4444/article/details/115268262