一、使用Ranger给HDFS设置权限策略并验证

  1. hdfs选择启用ranger身份认证

image.png

  1. 重启

image.png

  1. 创建测试用户

    1. useradd user1
    2. greoupadd testgroup
    3. usermod -G testgroup user1
  2. 在没给权限之前验证如下

image.png

  1. 设置user1拥有所有目录读写的权限,设置需要在all-path 策略中新增一个权限条件。正确的做法如下:

image.png
注意:相同的资源只能创建了一个策略

  1. hdfs显示如下

image.png

二、HDFS多级授权以及拒绝条件策略

  1. 添加testuser1、testuser2用户

image.png

  1. 在Ranger 页面创建Ranger 登录用户关联组(ldap 用户无需进行该操作即可使用用户密码登录)

登录Ranger,可以看到User Source 时External。由于本地Linux 用户默认无法同步密码,需在Settings > Users 中将默认同步的Linux 删除,然后手动关联组重建,点击右上角的红色删除按钮删除后。

image.png

  1. 然后点击Add New User 。进行如下操作,密码至少为包含英文和字母的8个字母,选择角色为User,并且选择关联组分别为testuser1、和testuser2。testuser2 步骤基本一致,省略。

image.png

  1. 手动创建好后用户显示如下,User Source 显示为Internal在当前登录时可以看到组件的权限策略,但是不能添加任何策略,如果尝试添加策略时保存会提示如下错误

image.png

  1. 当前testuser1和testuser2 均无hdfs 中 /test 目录的写权限

image.png

  1. 然后通过Ranger admin 用户给testuser1 /test 目录all 权限,并委派admin权限,也就是勾选Delegate Admin.

image.png

  1. testuser1用户有所有权限,并创建接下来要验证的权限的目录,为了避免HDFS 本身的权限干扰,这里将所有的目录权限设置为700

image.png

  1. Allow Conditions策略设置以及验证(设置testuser2 有 /test/Allow 所有权限)

image.png
验证如下:
image.png

  1. Exclude from Allow Conditions 策略验证,这里由于/test/Exclude 目录本身testuser2 是没有读写权限的,所以在Allow Conditions中给了所有权限,但是在Exclude from Allow Conditions 排除了读权限,在这种情况下,testuser2 权限是有写的权限但是没有读的权限,也证实了Exclude from Allow Conditions策略已生效以及拒绝策略优先的设计逻辑:

image.png
验证:
image.png

  1. Deny 策略验证,这里与Exclude from Allow 策略有些类似,/test/Deny 目录本身testuser2没有任何权限,在Allow Conditions 中给了所有权限用于验证,在Deny Conditions中设置拒绝读权限。同样证实Deny 策略已生效以及拒绝策略优先的设计逻辑

image.png
验证:testuser2read权限被拒绝,testuser1权限可以用:
image.png

  1. Exclude from Deny Conditions策略验证,同样/test/ExcludeDeny 由于testuser2用户没有任何权限,在Allow Conditions 中给了该目录的所有权限,然后在Deny Conditions和【赋予testuser2所有权限,拒绝read和write权限,从拒绝权限中排除write权限】

image.png
验证:testuser2可写不可读,testuser1有所以权限。
image.png