Hadoop Http Web-控制台认证配置总结

575 阅读2分钟

背景

我们使用的hadoop-3.2.4版本,其hadoop http web-控制台认证,simple认证机制是有问题的。整个simple的认证逻辑是错误的,截止目前仍未修复。

具体分析

具体的认证逻辑在AuthenticationFilter.java类中。 1700785073822.png simple类别对应的PseudoAuthenticationHandler类。其managementOperation方法未做任何逻辑实现,直接返回的true。这个真的很扯淡,网上一堆按官方文档进行的配置,是完全不启任何作用,直接放行的,真不知道是如何通过安全验证的!

image.png 此处逻辑应该完善,基于用户名密码的方式来进行校验。奈何hadoop.http.authentication.signature.secret.file中指定只有密钥信息。完全没有相关的用户名配置,其逻辑直接将密钥当成了用户名,社区感觉一定都不重视simple认证,可是用户角度来看,这种是最简单安全漏洞修复方法,不需要引入任何别的组件。修改的思路:

在hadoop.http.authentication.signature.secret.file指定的文件中,配置用户名和密码对。以行为单位,例如:

hadoop:oxab&^12

一并将相应的逻辑进行修改。

替代方案

当然也可采用,nginx代理的方式来解决。htpasswd命令 是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。

1、安装httpd-tools(只是方便用于生产用户名密码)

#yum安装,也可直接手动下载安装包安装

yum install -y httpd-tools

#生成用户名和密码

htpasswd -c hadoop-http-auth-signature-secret.db hadoop

2、配置Nginx

upstream hadoop-ns {
    server xxx:9870 weight=10;
    #server yyy:9870 weight=1;
}

upstream hadoop-yarn {
    server xxx:8088 weight=10;
    server yyy:8088 weight=1;
}

upstream hadoop-hdfs {
    server xxx:8020 weight=10;
    server yyy:8020 weight=1;
}
server {
    listen       39870;
    server_name  xxx;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        auth_basic "Hadoop HTTP web-consoles";
        auth_basic_user_file /usr/local/nginx/hadoop-http-auth-signature-secret.db;
        proxy_pass http://hadoop-ns;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

}

更进一步

熟悉Hadoop namenode HA机制小伙伴,一定会发现以上配置并不是完美的,其无法感知活跃的namenode。我们可以结合nginx ngx_http_upstream_hc_module模块来实现自定义检测的逻辑。来看下官方的一个配置示例:

1700787301868.png