1. 背景介绍
- 本文档介绍如何配置Hadoop HTTP Web控制台以要求用户身份验证。
- 默认情况下,Hadoop HTTP Web控制台(ResourceManager,NameNode,NodeManagers和DataNodes)允许访问而无需任何形式的身份验证。
- 可以将Hadoop HTTP Web控制台配置为使用HTTP SPNEGO协议(Firefox和Internet Explorer等浏览器支持)进行Kerberos身份验证。
- 此外,Hadoop HTTP Web控制台支持相当于Hadoop的伪/简单身份验证。如果启用此选项,则必须使用user.name查询字符串参数在第一个浏览器交互中指定用户名。例如:http://localhost:8088/cluster?user.name=hadoop。
- 如果HTTP Web控制台需要自定义身份验证机制,则可以实现插件以支持备用身份验证机制(有关编写AuthenticatorHandler的详细信息,请参阅Hadoop hadoop-auth)。
2. 配置
2.1 属性说明
属性名称
默认值
描述
hadoop.http.filter.initializers
将org.apache.hadoop.security.AuthenticationFilterInitializer初始化类添加到此属性
hadoop.http.authentication.type
simple
定义用于HTTPWeb控制台的身份验证,支持的值是:simple|kerberos
hadoop.http.authentication.token.validity
36000
指示身份验证令牌在必须更新之前有效的时间(以秒为单位)
hadoop.http.authentication.token.max-inactive-interval
-1(disabled)
指定客户端请求之间的时间(以秒为单位),服务器将使令牌失效
hadoop.http.authentication.signature.secret.file
$user.home/hadoop-http-auth-signature-secret
用于签署身份验证令牌的签名密钥文件,集群中的所有节点、ResourceManager、NameNode、DataNode和NodeManager都应该使用相同的密钥,只有运行守护进程的Unix用户才能读取该文件
hadoop.http.authentication.cookie.domain
用于存储身份验证令牌的HTTPCookie的域,要使身份验证在集群中的所有节点上正确工作,必须正确设置域。没有默认值,HTTPCookie将不会有只与发出HTTPCookie的主机名一起工作的域
hadoop.http.authentication.cookie.persistent
false(sessioncookie)
指定HTTPCookie的持久性,如果值为真,则Cookie是持久的。否则,它就是会话Cookie。重要提示:当使用IP地址时,浏览器会忽略带有域设置的Cookie。要使此设置正常工作,集群中的所有节点都必须配置为生成具有主机名的url,上面有域名
hadoop.http.authentication.simple.anonymous.allowed
TRUE
指示在使用“简单”身份验证时是否允许匿名请求
hadoop.http.authentication.kerberos.principal
HTTP/_HOST@$LOCALHOST
指示在使用“Kerberos”身份验证时将Kerberos主体用于HTTP端点。根据KerberosHTTPSPNEGO规范,主体短名称必须是HTTP。如果存在,则用HTTP服务器的绑定地址替换_HOST
hadoop.http.authentication.kerberos.keytab
$user.home/hadoop.keytab
带有用于HTTP端点的Kerberos主体凭证的keytab文件的位置
2.2 配置core-site
创建secret目录,用于存放密钥文件
mkdir -p /opt/apache/hadoop/secret
vim /opt/apache/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml
<configuration>
<!-- Authentication for Hadoop HTTP web-consoles -->
<property>
<name>hadoop.http.filter.initializers</name>
<value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
</property>
<property>
<name>hadoop.http.authentication.type</name>
<value>simple</value>
</property>
<property>
<name>hadoop.http.authentication.token.validity</name>
<value>3600</value>
</property>
<property>
<name>hadoop.http.authentication.signature.secret.file</name>
<value>/opt/apache/hadoop/secret/hadoop-http-auth-signature-secret</value>
</property>
<property>
<name>hadoop.http.authentication.cookie.domain</name>
<value></value>
</property>
<property>
<name>hadoop.http.authentication.simple.anonymous.allowed</name>
<value>false</value>
</property>
</configuration>
2.3 创建密钥文件
cd /opt/apache/hadoop/secret
创建hadoop-http-auth-signature-secret密钥文件,并添加test用户
echo “test” > hadoop-http-auth-signature-secret
2.4 同步修改信息至集群其它节点
scp /opt/apache/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml host14:/opt/apache/hadoop/hadoop-2.7.3/etc/hadoop/
scp /opt/apache/hadoop/hadoop-2.7.3/etc/hadoop/core-site.xml host15:/opt/apache/hadoop/hadoop-2.7.3/etc/hadoop/
scp -r /opt/apache/hadoop/secret/ host14:/opt/apache/hadoop/
scp -r /opt/apache/hadoop/secret/ host15:/opt/apache/hadoop/
3. 验证
3.1 重启Hadoop集群
stop-dfs.sh
start-dfs.sh
3.2 HDFS WEB UI
默认访问方式(401错误):http://192.168.233.136:50070
通过用户方式访问(正常访问):http://192.168.233.136:50070?user.name=test