Ranger配置HDFS权限并测试 作者: sysit 分类: d 发表于 2018-10-26 1187人围观 > 我们在[Ranger同步OpenLDAP用户](http://www.kkops.com/blog/post/kkops/Ranger%E5%90%8C%E6%AD%A5OpenLDAP%E7%94%A8%E6%88%B7%E5%8F%8A%E7%BB%84%E4%BF%A1%E6%81%AF)一文中,完成了对Ranger 用户的同步。本文主要介绍如何让HDFS开启Ranger认证。 ## 1. Ranger是怎么在HDFS上工作的 * 为了在HDP发行版中加强安全性,建议安装和配置Kerberos, Apache Knox和Apache Ranger。 * Apache Ranger提供了一个和HDFS原生权限相匹配适应的授权模型。 HDFS Ranger插件会首先检测是否存在对应的授权策略对应用户授权,如果存在那么用户权限检测通过。如果没有这样的策略,那么Ranger插件会启用HDFS原生的权限体系进行权限检查(POSIX or HDFS ACL)。这种模型在Ranger中适用于HDFS和YARN服务。对于其它服务,比如Hive或者HBase,Ranger是作为唯一的有效授权依据  ## 2. 如何配置 ### 2.1 环境配置 * OpenLDAP中创建了两个用户hdp1和hdp2,并同步到了Ranger中。 * 正确安装了Ranger ### 2.2 在Gateway的服务器上启用ldap认证 * 本例选用node3作为临时gateway,生产环境中,应该有独立的操作服务器。 ``` yum install openldap-clients nss-pam-ldapd authconfig --enableldap \ --enableldapauth \ --ldapserver=ldap1.kkops.com,ldap2.kkops.com \ --ldapbasedn="dc=hdp,dc=kkops,dc=com" \ --enablemkhomedir \ --update vi /etc/nslcd.conf #修改 #binddn cn=proxyuser,dc=example,dc=com binddn uid=manager,dc=hdp,dc=kkops,dc=com #修改 #bindpw secret bindpw manager.hdp.kkops.com #重启 systemctl restart nslcd # 测试用户切换 [root@node3 ~]# su - hdp1 Creating directory '/home/hdp1'. [hdp1@node3 ~]$ [root@node3 ~]# su - hdp2 Creating directory '/home/hdp2'. [hdp2@node3 ~]$ ``` ### 2.3 HDFS配置 * 确认`xasecure.add-hadoop-authorization`的配置为true  * Ranger开启HDFS Plugin  * 将HDFS的permissions配置为700  * 将HDFS的umask配置为077  ### 2.4 HDFS用户路径创建 ``` #切换到hdfs账号 su - hdfs #创建用户目录并授予对用用户的权限 [hdfs@node3 ~]$ hdfs dfs -mkdir /user/hdp1 [hdfs@node3 ~]$ hdfs dfs -mkdir /user/hdp2 [hdfs@node3 ~]$ hdfs dfs -chown hdp1:hdp1 /user/hdp1 [hdfs@node3 ~]$ hdfs dfs -chown hdp2:hdp2 /user/hdp2 # 查看 [hdfs@node3 ~]$ hdfs dfs -ls /user Found 7 items drwxrwx--- - ambari-qa hdfs 0 2017-11-28 16:15 /user/ambari-qa drwxr-xr-x - hbase hdfs 0 2017-11-28 15:20 /user/hbase drwxr-xr-x - hcat hdfs 0 2017-11-28 16:14 /user/hcat drwx------ - hdfs hdfs 0 2017-12-14 14:53 /user/hdfs drwx------ - hdp1 hdp1 0 2017-12-14 14:55 /user/hdp1 drwx------ - hdp2 hdp2 0 2017-12-14 14:56 /user/hdp2 drwxr-xr-x - hive hdfs 0 2017-11-28 16:14 /user/hive # 切换到hd1用户查看目录 [hdp1@node3 ~]$ hdfs dfs -ls /user/hdp1 [hdp1@node3 ~]$ hdfs dfs -ls /user/hdfs ls: Permission denied: user=hdp1, access=READ_EXECUTE, inode="/user/hdfs":hdfs:hdfs:drwx------ [hdp1@node3 ~]$ hdfs dfs -ls /user/hive ``` * 以上可以看到我们创建并授权成功了,这里还是调用的HDFS的ACL权限。hdp1可以正确查看自己的目录。 * 对于不属于自己的目录,如/user/hdfs目录则报权限拒绝。 * 对于755的目录,hdp1用户依然具有读取权限,因此,Ranger对于HDFS的最佳实践是将其他所有的目录修改为属主的rwx权限,即700权限。 ### 2.5 Ranger授权hdp1读权限 * 对于上一节,hdp1用户不具有/user/hdfs目录的读取权限,因此我们先来通过Ranger授予hdp1用户的读权限。 * 登录Ranger Admin UI,如下图:  * 由于我们只开启了HDFS的Plugin,因此这里只能看到HDFS的信息。点击“kkopscluster_hadoop”,这个是Ranger自动配置的。  * 这里默认有两条规则,这是默认的规则,不可以删除,也不可以减少权限。  * 点击“Add New Policy”增加规则  * 在Ranger的配置过程中,我发现,一个[Resource Path]既是一条规则,[Resource Path]可以有多个资源地址。 * recursive 表示是否递归。比如是否可以访问路径的下级目录。 * 对于一个Policy,可以授予用户或者组。这里授予hdp1的权限。 * Permissions要注意,如果是针对目录,一定要给与Execute权限,否则还是会报权限错误。至于原因,懂Linux目录权限的人都懂。  * 保存后返回如上图所示的界面。表示权限添加成功。接下来进行验证。 * 切换到hdp1用户,执行如下命令。 ``` [hdp1@node3 ~]$ hdfs dfs -ls /user/hdfs Found 1 items drwx------ - hdfs hdfs 0 2017-12-14 14:53 /user/hdfs/.Trash ``` * 可以看到已经可以访问`/user/hdfs`目录了 * 如果在配置Permissions的时候,如给于Execute权限。则出现如下所示信息。 ``` [hdp1@node3 ~]$ hdfs dfs -ls /user/hdfs ls: Permission denied: user=hdp1, access=READ_EXECUTE, inode="/user/hdfs":hdfs:hdfs:drwx------ ``` ## 2.6 授予hdp2用户写权限。 * 按照如上步骤,我们再次对hdp2用户给与/user/hdfs目录的写权限。  * 同样需要Execute权限。切换到hdp2用户执行命令。 ``` [hdp2@node3 ~]$ touch hdp2.txt [hdp2@node3 ~]$ hdfs dfs -put hdp2.txt /user/hdfs [hdp2@node3 ~]$ hdfs dfs -ls /user/hdfs ls: Permission denied: user=hdp2, access=READ_EXECUTE, inode="/user/hdfs":hdfs:hdfs:drwx------ ``` * 因为没有给与hdp2用户读取的权限,因此报错了。 * 我们切换到hdp1用户再次查看。 ``` [hdp1@node3 ~]$ hdfs dfs -ls /user/hdfs Found 2 items drwx------ - hdfs hdfs 0 2017-12-14 14:53 /user/hdfs/.Trash -rw------- 3 hdp2 hdfs 0 2017-12-14 15:09 /user/hdfs/hdp2.txt [hdp1@node3 ~]$ hdfs dfs -get /user/hdfs/hdp2.txt [hdp1@node3 ~]$ ls hdp2.txt ``` * hdp1可以查看并获取hdp2上传的文件。 ## 注意 * 对于集群,需要开启kerberos或LDAP认证。在Linux操作系统中,不同的服务器来源,只要用户名一致,则ranger通过,ranger不能做IP来源认证。需要借助启用于kerberos或LDAP认证。 如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作! 赞赏支持