开启权限认证

HDFS开启了权限控制后,当您访问HDFS时需要有合法的权限才能正常操作HDFS,例如读取数据和创建文件夹等。本文为您介绍如何开启HDFS的权限控制。

背景信息

Hadoop提供了以下两种用于决定用户身份的操作模式:

  • 简单模式(Simple):用户的身份由与HDFS建立链接的客户端操作系统决定。在类Unix系统中,等同于whoami命令。

  • Kerberos集群模式:客户端的身份由用户自己的Kerberos证书决定。

    您可以在创建EMR集群时,开启Kerberos集群模式。Kerberos详情信息,请参见Kerberos概述Kerberos

前提条件

已创建集群,详情请参见创建集群

操作步骤

说明
  • 对于开启Kerberos模式的集群,已经默认设置了HDFS的权限(umask为027),无需配置和重启服务。

  • 未开启Kerberos模式的集群需要按照以下方式添加配置并重启服务。

  1. 进入集群服务页面。

    1. 登录EMR on ECS控制台

    2. 在顶部菜单栏处,根据实际情况选择地域和资源组

    3. 单击目标集群操作列的集群服务

  2. 集群服务页面,单击HDFS服务区域的配置

  3. 服务配置区域,根据实际需求修改配置项。

    参数

    描述

    dfs.permissions.enabled

    开启权限检查,修改参数值为true。

    默认值为false。

    dfs.datanode.data.dir.perm

    DataNode使用的本地文件夹路径的权限。

    fs.permissions.umask-mode

    权限掩码,在新建文件或文件夹的时候的默认权限值。

    dfs.namenode.acls.enabled

    默认值为false。ACL控制,修改参数值为true,不仅可以对用户或用户组进行权限控制,还可以对其他用户进行设置。

    设置ACL相关命令有hadoop fs -getfacl [-R] <path>hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec> <path>]

    dfs.permissions.superusergroup

    默认值为hadoop。超级用户组的名称。属于该组的用户都具有超级用户的权限。

  4. 保存信息。

    1. 单击下方的保存

    2. 在弹出的对话框中,输入执行原因,单击保存

  5. 重启服务。

    1. 在HDFS服务页面的右上角,选择更多操作 > 重启

    2. 在弹出的对话框中,输入执行原因,单击确定

    3. 确认对话中,单击确定

      您可以单击上方的操作历史查看任务进度,等待任务完成。

使用示例

  1. 使用SSH方式登录集群,详情请参见登录集群

  2. 执行以下命令,切换为已创建的emrtest用户。

  3. su emrtest
  4. 执行以下命令,使用emrtest用户创建目录。

  5. hadoop fs -mkdir /tmp/emrtest
  6. 执行以下命令,查看创建的目录的权限。

    hadoop fs -ls /tmp

    返回如下类似信息。

    drwxr-x--x   - emrtest hadoop          0 2022-10-21 14:08 /tmp/emrtest
    drwxr-x--x   - hadoop  hadoop          0 2022-10-21 10:06 /tmp/hadoop-yarn
    drwx-wx-wx   - hive    hadoop          0 2022-10-21 10:13 /tmp/hive
    drwxr-x--x   - hadoop  hadoop          0 2022-10-21 10:23 /tmp/kyuubi-staging
    drwxrwxrwt   - hadoop  hadoop          0 2022-10-21 10:23 /tmp/logs                                 
  7. 执行以下命令,给目录设置ACL权限并授权给foo用户rwx权限。

  8. hadoop fs -setfacl -m user:foo:rwx /tmp/emrtest
  9. 执行以下命令,查看目录权限。

    hadoop fs -ls /tmp/

    返回如下类似信息。

    drwxrwx--x+  - emrtest hadoop          0 2022-10-21 14:08 /tmp/emrtest
    drwxr-x--x   - hadoop  hadoop          0 2022-10-21 10:06 /tmp/hadoop-yarn
    drwx-wx-wx   - hive    hadoop          0 2022-10-21 10:13 /tmp/hive
    drwxr-x--x   - hadoop  hadoop          0 2022-10-21 10:23 /tmp/kyuubi-staging
    drwxrwxrwt   - hadoop  hadoop          0 2022-10-21 10:23 /tmp/logs
    说明

    权限后面带了+号的表示设置了ACL权限,例如drwxrwx--x+。

  10. 执行以下命令,查看ACL权限。

    hadoop fs -getfacl /tmp/emrtest

    返回如下类似信息。

    # file: /tmp/emrtest
    # owner: emrtest
    # group: hadoop
    user::rwx
    user:foo:rwx
    group::r-x
    mask::rwx
    other::--x