Ranger管理HDFS安全
我们还可以使用Ranger对HDFS进行目录权限访问控制。这里需要添加“HDFS-Plugin”插件。
一、安装“HDFS-Plugin”插件
安装“HDFS-Plugin”插件步骤如下:
1)将编译好的“ranger-2.1.0-hdfs-plugin.tar.gz”发送到node1节点,并解压
代码语言:javascript复制#将node3上编译好的HDFS插件发送到node1上
[root@node3 ~]# cd /software/apache-ranger-2.1.0/target
[root@node3 target]# scp ./ranger-2.1.0-hdfs-plugin.tar.gz node1:/software/
#登录node1,解压
[root@node1 ~]# cd /software/
[root@node1 software]# tar -zxvf ./ranger-2.1.0-hdfs-plugin.tar.gz
2)配置“install.properties”文件
代码语言:javascript复制#配置Ranger-Admin访问地址
POLICY_MGR_URL=http://node1:6080
#配置HDFS仓库,用于Ranger页面配置
REPOSITORY_NAME=hdfs_repo
#配置HDFS安装目录
COMPONENT_INSTALL_DIR_NAME=/software/hadoop-3.1.4/
#配置操作HDFS插件的用户和所属组
CUSTOM_USER=root
CUSTOM_GROUP=root
3)执行“enable-hdfs-plugin.sh”开启“HDFS Plugin”
代码语言:javascript复制[root@node1 ~]# cd /software/ranger-2.1.0-hdfs-plugin
[root@node1 ranger-2.1.0-hdfs-plugin]# enable-hdfs-plugin.sh
4)开启HDFS权限验证
配置HDFS的“/software/hadoop-3.1.4/etc/hadoop/hdfs-site.xml”文件,在每台HDFS节点上配置:
代码语言:javascript复制<property>
<!-- 启用权限 -->
<name>dfs.permissions.enabled</name>
<value>true</value>
</property>
<property>
<!-- 开启ACL -->
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
<property>
<!-- 文件操作时,检查权限 -->
<name>dfs.permissions</name>
<value>true</value>
</property>
<!-- 以下两项是关于Ranger安全检查配置 -->
<property>
<name>dfs.namenode.inode.attributes.provider.class</name>
<value>org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer</value>
</property>
<property>
<name>dfs.permissions.ContentSummary.subAccess</name>
<value>true</value>
</property>
5)重启HDFS
代码语言:javascript复制[root@node1 ~]# stop-all.sh
[root@node1 ~]# start-all.sh
二、验证HDFS权限控制
1)在Ranger中添加“HDFS Service”服务
配置好之后:
2)在HDFS中创建测试目录
代码语言:javascript复制#在node1节点上创建HDFS目录
[root@node1 ~]# hdfs dfs -mkdir /rangertest
代码语言:javascript复制#向HDFS此目录下上传一个有内容的txt文件:
[root@node1 ~]# hdfs dfs -put ./data.txt /rangertest
3)测试用户“user1”读取“rangertest”数据和上传文件
在node1中切换用户user1,读取HDFS中的数据,有只读权限
代码语言:javascript复制[root@node1 ~]# su user1
[user1@node1 root]$ hdfs dfs -cat /rangertest/data.txt
代码语言:javascript复制#使用user1用户上传数据文件到HDFS“/rangertest/”下,没有操作权限
[user1@node1 ~]$ hdfs dfs -put ./user2data.txt /rangertest
put: Permission denied: user=user1, access=WRITE, inode="/rangertest":root:supergroup:drwxr-xr-x
4)使用Ranger 控制user1可以操作HDFS“/rangertest”目录
5)再次使用“user1”向HDFS目录“/rangertest”中上传数据
再次执行,权限通过,通过Ranger已经可以对HDFS进行权限管理。
代码语言:javascript复制[user1@node1 ~]$ hdfs dfs -put ./user2data.txt /rangertest
[user1@node1 ~]$ hdfs dfs -cat /rangertest/user2data.txt
hello a
hello b
hello c