Hadoop 默认所有人均可访问操作,这个漏洞可以通过设置“安全访问参数”堵上。

版本基于CDH5.14

2. 解决思路和方法

首先要设置 hadoop.security.authorization = true 开启ServiceLevel Authorization:

 

 这里打完勾后,应该要重启下 scm:sudo systemctl restart cloudera-scm-server

2.1. 控制 hdfs 访问权限

登陆 CDH

在主页上,点 “配置”,选高级代码段

搜索 “hadoop-policy.xml 的 HDFS 服务高级配置代码段(安全阀)”,添加一行,内容如下:

保存后,重启 hdfs 服务即可

还有,别指望用命令行来处理。。。CM 是个黑盒,很多配置都是直接从数据库读取(页面配置存入数据库而不是配置文件),然后动态生成配置文件分配给各个客户端使用的。

 

检测方式:

使用一个不在列表中的用户登陆服务器,然后执行 hdfs 查询命令:

hdfs dfs -ls /

# 使用列表中的用户应该能正常列出根目录的内容

# 如果使用 列表外的用户 报错提示:

# User xxx (auth:SIMPLE) is not authorized for protocol interface org.apache.hadoop.hdfs.protocol.ClientProtocol: denied by configured ACL

# 就说明配置成功了

至此,安全漏洞补上了,下面的 yarn 权限控制属于可选项。。。根据实际需要配置。

2.2. 控制 yarn 任务提交权限

2.2.1. 接口连接访问权限(还没搞定)

有请大神帮忙看下。。。

我具体处理如下:

# 在 hadoop-policy.xml 处,添加以下内容:

key = security.job.client.protocol.acl   value = sa_cluster,mapred,yarn

# 也尝试过废弃的 key = security.job.submission.protocol.acl   value = sa_cluster,mapred,yarn

# 配置完,重启 yarn

然而,并没什么卵用,我使用自建的一个账号 cfcs 依然可以的提交任务(当然,前提是给 cfcs 这个账号添加了 hdfs 访问权限,否则提交任务时,会被卡在 hdfs 的访问控制上)。

2.3. 提交队列访问权限(这个搞定了)

1、在 CDH 的 yarn 主页,点击资源池:

2、然后点击 “编辑” 并在上面配置对应的控制列表,包括 提交访问控制 和 管理访问控制,按字面意思理解就行

3、保存完注意 要点一下 刷新配置

4、分别使用在列表中的用户和不在列表中的用户提交一个任务看看

测试代码:

hadoop jar /data/sa_cluster/cloudera/parcels/CDH-5.14.4-1.cdh5.14.4.p0.3/jars/hadoop-mapreduce-examples-2.6.0-cdh5.14.4.jar wordcount /tmp/mr/imput /tmp/mr/output/21

# 最后两个参数:/tmp/mr/imput 和 /tmp/mr/output/21 需要你在 hdfs 上创建对应目录并配置测试用户的访问权限

# 如果实在不清楚提交过程的,看看这个:http://hadoop.apache.org/docs/r1.0.4/cn/streaming.html

# 使用 列表中的用户应该能正常提交并执行任务

# 使用 不在列表中的用户会报以下错误:

# Failed to submit application_1569556636858_0001 to YARN : User xxx cannot submit applications to queue root.users.xxx

更多推荐