Hadoop Web 控制台安全认证——使用用户名 + 密码登陆设置方法 (Hadoop HTTP web-控制台认证 )

Hadoop HTTP WEB-控制台认证

我们安装完hadoop后,默认情况下我们访问UI界面是没有任何安全验证的。现在我想要的是对Hadoop的Web控制台界面加入一些安全机制,最好是能设置用户名和密码,通过用户名密码的方式来访问我们的Hadoop Web控制台。在做之前,我首先想看看官方有没有类似的这样的功能。下面的文档是官方的 《Hadoop HTTP web-控制台认证》 的说明文档:
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/HttpAuthentication.html
从下面的截图可以看到,有一种方法可以进行设置,那我们就先用这种方式来设置一下,看看效果如何。
在这里插入图片描述
通过上面的文档介绍,以及参考其他博客的方法,我们做下面的配置

Hadoop web页面的授权设定

创建并配置秘钥文件

创建 secret 目录,用于存放密钥文件

mkdir /opt/hadoop/secret
vim /opt/hadoop/secret/hadoop-http-auth-signature-secret
在这里插入图片描述
hadoop-http-auth-signature-secret 文件当中我写入了 qazwsx$123

配置 core-site.xml

编辑 core-site.xml 文件 vim /opt/hadoop/hadoop-3.3.1/etc/hadoop/core-site.xml,加入下面的配置

    <property>
        <name>hadoop.http.filter.initializers</name>
        <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
    </property>
    
    <!-- 定义用于HTTP web控制台的身份验证。支持的值是:simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME# -->
    <property>
        <name>hadoop.http.authentication.type</name>
        <value>simple</value>
    </property>
    
    <!-- 
    签名秘密文件,用于对身份验证令牌进行签名。
    对于集群中的每个服务,ResourceManager, NameNode, DataNode和NodeManager,应该使用不同的secret。
    这个文件应该只有运行守护进程的Unix用户可以读。 
    -->
    <property>
        <name>hadoop.http.authentication.signature.secret.file</name>
        <value>/opt/hadoop/secret/hadoop-http-auth-signature-secret</value>
    </property>
     
    <!-- 指示在使用“简单”身份验证时是否允许匿名请求。 -->
    <property>
        <name>hadoop.http.authentication.simple.anonymous.allowed</name>
        <value>false</value>
    </property>

验证效果

我们重启 hadoop,这里我使用的是单机伪集群,直接运行 stop-dfs.sh 脚本先停止服务,再运行 start-dfs.sh 脚本启动 hadoop 服务,访问我们的web界面看看~。
当我访问web界面,http://127.0.0.1:9870,出现了如下所示的页面:
在这里插入图片描述
看起来有效果,按照官方的描述,我们在访问路径后面加user.name参数,值为我们之前设置的值,如:http://127.0.0.1:9870?user.name=qazwsx$123
在这里插入图片描述
可以看到页面访问成功了~,感觉好像配置好了,可以看到浏览器生成了一个cookie,进一步验证一下是否可行,当我把cookie清除,再次访问。
在这里插入图片描述
又没访问成功,哪我们再输入其他的user.name值验证一下是否也行呢?
这一次我访问了 http://127.0.0.1:9870?user.name=aaaa,这里的值和我之前设置的 hadoop-http-auth-signature-secret 里面的值不一样,按其他博客说的和我的理解,这时候应该页面访问不了才对,但是这次也居然访问成功了!
在这里插入图片描述
可以看到,这里我输入的是aaa,但是也通过了验证,哪这和我想要的需求不一样啊,这样的话不是每个人直接随便写几个字符都可以查看该页面了!我之后又反复检测多次,更换浏览器尝试,发现根本不行,索性我就放弃了这种配置方法。按照官方所说还有 Kerberos 方法进行安全设置,这里大家可以参考阅读这篇博客:https://www.cnblogs.com/yinzhengjie2020/p/13506913.html
我是觉得 Kerberos 方式太繁琐了索性也没有尝试,当然我也不想修改 Hadoop 的代码来完成这项需求,没办法只能寻找别的替代方案了。这里我就想能不能先把9870端口给先关了,通过反向代理来映射到对该端口地址的访问,通过Nginx来设置Basic Authentication 方式设置用户名密码来进行安全的校验。

通过Nginx 设置对 Hadoop 的 HTTP Basic Authentication 安全访问机制

安装 httpd 或 安装 httpd-tools

要使用 Nginx 服务首先当然要在我们的服务器上安装 Nginx 了,在此之前我们首先要安装 httpd,因为需要htpasswd命令来生成 用户名/密码

可以直接单独安装 htpasswd 安装命令:
yum install httpd-tools -y

安装 httpd 我这里直接通过yum方式进行安装的:yum -y install httpd

这里简单提一下:
启动 httpd 命令:service httpd restart
httpd 的默认安装目录在:/etc/httpd/
关于其配置可以自行查看 /etc/httpd/httpd.conf 文件
如果启动成功后,访问服务器的80端口会出现apache的welcome界面。

安装 Nginx

这里不在赘述Nginx的安装步骤,大家可以直接参考博客:CentOS 安装 Nginx 服务

通过htpasswd命令生成用户名及对应密码数据库文件

运行下面的命令创建密钥文件

# 设置用户名,密码 生成 db文件
htpasswd -c /usr/local/nginx/passwd.db username password
# 查看生成的db文件内容
cat /usr/nginx/conf/htpasswd.users

配置Nginx代理并设置访问身份验证

编辑 nginx.conf 文件,命令如下:

vim /usr/local/nginx/conf/nginx.conf

增加下面的配置信息:

    server {
            listen 50070;
            server_name localhost;

            location / {
                    auth_basic "hadoop001"; # 虚拟主机认证命名
                    auth_basic_user_file /usr/local/nginx/passwd.db; # 虚拟主机用户名密码认证数据库
                    proxy_pass http://127.0.0.1:9870; # hadoop 访问
            }
    }

由于Hadoop3.0.0以上版本访问WebUI默认端口从50070 改为了 9870,所以这里直接通过 50070 来代理到本机的 9870 端口,这时候我们访问一下服务器的50070端口页面
在这里插入图片描述
可以看到此时页面提示我们输入用户名和密码,我们把之前设置的用户名密码写上,点击登陆。
在这里插入图片描述
成功进入了我们的UI页面,大功告成,最开始的哪些配置就可以去掉了!


参考文档:

Nginx设置身份验证 https://www.bbsmax.com/A/n2d9bZvVzD/

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
「⼤数据⼲货」基于 「⼤数据⼲货」基于Hadoop的⼤数据平台实施 的⼤数据平台实施——整体架构设 整体架构设 计 计 ⼤数据的热度在持续的升温,继云计算之后⼤数据成为⼜⼀⼤众所追捧的新星。我们暂不去讨论⼤数据到底是否适⽤于您的公司或组织, ⾄少在互联⽹上已经被吹嘘成⽆所不能的超级战舰。好像⼀夜之间我们就从互联⽹时代跳跃进了⼤数据时代!关于到底什么是⼤数据,说真 的,到⽬前为⽌就和云计算⼀样,让我总觉得像是在看电影《云图》——云⾥雾⾥的感觉。或许那些正在向你推销⼤数据产品的公司会对您 描绘⼀幅乌托邦似的美丽画⾯,但是您⾄少要保持清醒的头脑,认真仔细的慎问⼀下⾃⼰,我们公司真的需要⼤数据吗? 做为⼀家第三⽅⽀付公司,数据的确是公司最最重要的核⼼资产。由于公司成⽴不久,随着业务的迅速发展,交易数据呈⼏何级增加,随之 ⽽来的是系统的不堪重负。业务部门、领导、甚⾄是集团⽼总整天嚷嚷的要报表、要分析、要提升竞争⼒。⽽研发部门能做的唯⼀事情就是 执⾏⼀条⼀条复杂到⾃⼰都难以想象的SQL语句,紧接着系统开始罢⼯,内存溢出,宕机........简直就是噩梦。OMG!please release me!!! 其实数据部门的压⼒可以说是常⼈难以想象的,为了把所有离散的数据汇总成有价值的报告,可能会需要⼏个星期的时间或是更长。这显然 和业务部门要求的快速响应理念是格格不⼊的。俗话说,⼯欲善其事,必先利其器。我们也该鸟枪换炮了......。 ⽹上有⼀⼤堆⽂章描述着⼤数据的种种好处,也有⼀⼤群⼈不厌其烦的说着⾃⼰对⼤数据的种种体验,不过我想问⼀句,到底有多少⼈多少 组织真的在做⼤数据?实际的效果⼜如何?真的给公司带来价值了?是否可以将价值量化?关于这些问题,好像没看到有多少评论会涉及,可能 是⼤数据太新了(其实底层的概念并⾮新事物,⽼酒装新瓶罢了),以⾄于⼈们还沉浸在各种美妙的YY中。 做为⼀名严谨的技术⼈员,在经过短暂盲⽬的崇拜之后,应该快速的进⼊落地应⽤的研究中,这也是踩着"云彩"的架构师和骑着⾃⾏车的架 构师的本质区别。说了⼀些牢骚话,当做发泄也好,博眼球也好,总之,我想表达的其实很简单:不要被新事物所迷惑,也不要盲⽬的崇拜 任何⼀样新事物,更不要⼈云亦云,这是我们做研究的⼈绝对要不得。 说了很多也是时候进⼊正题了。公司⾼层决定,正式在集团范围内实施⼤数据平台(还特地邀请了⼀些社区的⾼⼿,很期待.......),做为第三 ⽅⽀付公司实施⼤数据平台也⽆可厚⾮,因此也积极的参与到这个项⽬中来。正好之前关于OSGi的企业级框架的研究也告⼀段落, 所以想利⽤CSDN这个平台将这次⼤数据平台实施过程记录下来。我想⼀定能为其它有类似想法的个⼈或公司提供很好的参考资料!需要⼤数 据的可以加我扣扣群⼤数据零基础到项⽬实战,专注⼤数据分析⽅法,⼤数据编程,⼤数据仓库,⼤数据案例,⼈⼯智能,数据挖掘都是纯⼲ 货分享,进群获取永久免费权限410391744 第⼀记,⼤数据平台的整体架构设计 1. 软件架构设计 ⼤数据平台架构设计沿袭了分层设计的思想,将平台所需提供的服务按照功能划分成不同的模块层次,每⼀模块层次只与上层或下层的模块 层次进⾏交互(通过层次边界的接⼝),避免跨层的交互,这种设计的好处是:各功能模块的内部是⾼内聚的,⽽模块与模块之间是松耦合 的。这种架构有利于实现平台的⾼可靠性,⾼扩展性以及易维护性。⽐如,当我们需要扩容Hadoop集群时,只需要在基础设施层添加⼀台 新的Hadoop节点服务器即可,⽽对其他模块层⽆需做任何的变动,且对⽤户也是完全透明的。 整个⼤数据平台按其职能划分为五个模块层次,从下到上依次为: 运⾏环境层: 运⾏环境层为基础设施层提供运⾏时环境,它由2部分构成,即操作系统和运⾏时环境。 (1)操作系统我们推荐安装REHL5.0以上版本(64位)。此外为了提⾼磁盘的IO吞吐量,避免安装RAID驱动,⽽是将分布式⽂件系统的数据⽬ 录分布在不同的磁盘分区上,以此提⾼磁盘的IO性能。 (2)运⾏时环境的具体要求如下表: 名称版本说明 JDK1.6或以上版本Hadoop需要Java运⾏时环境,必须安装JDK。 gcc/g++3.x或以上版本当使⽤Hadoop Pipes运⾏MapReduce任务时,需要gcc编译器,可选。 python2.x或以上版本当使⽤Hadoop Streaming运⾏MapReduce任务时,需要python运⾏时,可选。 基础设施层: 基础设施层由2部分组成:Zookeeper集群和Hadoop集群。它为基础平台层提供基础设施服务,⽐如命名服务、分布式⽂件系统、 MapReduce等。 (1)ZooKeeper集群⽤于命名映射,做为Hadoop集群的命名服务器,基础平台层的任务调度控制台可以通过命名服务器访问Hadoo
这个命令是在 Hadoop 上运行一个计算 pi 的示例程序。其中,参数 10 表示计算的 map 数量,100 表示每个 map 任务要计算的数据量。由于 pi 是一个无限不循环小数,程序采用 Monte Carlo 方法来估算 pi 的值。 如果你想将计算结果保留小数点后 5 位数,可以修改程序代码或者在运行命令时添加一个额外的命令来进行格式化。 修改代码: 1. 打开 `hadoop-mapreduce-examples-3.1.3.jar` 文件,解压 `pi.class` 文件。 2. 打开 `pi.class` 文件,找到 `reduce()` 方法。 3. 在 `reduce()` 方法中添加以下代码: ``` BigDecimal pi = new BigDecimal(4.0 * count / total, new MathContext(6)); ``` 这行代码将计算得到的 pi 值保留小数点后 5 位数,存储在 `pi` 变量中。 4. 重新打包 `pi.class` 文件。 5. 将修改后的 `hadoop-mapreduce-examples-3.1.3.jar` 文件上传到 Hadoop 集群。 6. 运行以下命令: ``` ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 10 100 ``` 这将在 Hadoop 上运行修改后的程序,并输出计算得到的 pi 值。 添加格式化命令: 1. 运行以下命令: ``` ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 10 100 | awk '{printf "%.5f\n", $1}' ``` 这将在 Hadoop 上运行示例程序,并将计算得到的 pi 值输出到标准输出。 2. `awk` 命令将标准输出中的第一个字段(即计算得到的 pi 值)格式化为小数点后 5 位数,并输出到控制台

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stack Stone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值