目录和文件访问权限

文件存储 HDFS 版为目录和文件提供了一种访问权限,该访问权限类似于POSIX文件系统的权限模型。本文简要介绍访问权限的概念、使用方式及其相关注意事项。

访问权限介绍

文件存储 HDFS 版文件系统中的每一个文件或者目录会关联到三个权限集合。这三个集合分别代表了文件或者目录的所有者(Owner),文件或者目录所属的组(Group),所有其他用户(Other)。每一个集合可能包含Read(R)、Write(W)和Execute(X)权限,某个用户需要满足相应的权限要求才能执行对应的操作。

文件和目录的权限说明如下表所示。

权限名称

文件

目录

Read(R)

可以读取文件的内容。

查看目录需要ReadExecute权限。

Write(W)

可以在文件中写入或追加内容。

在目录下创建节点需要WriteExecute权限。

Execute(X)

HDFS中文件的Execute权限没有意义。

遍历目录时需要目录的Execute权限。

在文件系统中各个权限信息及其含义如下所示。目录和文件

  • ①代表所有者权限。

  • ②代表组权限(一个组中除所有者拥有的权限)。

  • ③代表其他用户权限(除当前所有者的组,其他组可以进行访问的权限)。

权限的数字表示方式

在权限中,RWX表示Read(R)+Write(W)+Execute(X),也可以使用更加简洁的数字形式表示权限,Read=4,Write=2,Execute=1。下表简要说明了数字和短格式之间的关系。

数字形式

短格式

说明

7

RWX

所有权限

5

R-X

读取+执行权限

4

R--

读取权限

0

---

无权限

权限示例

例如,HDFS中的一个目录结构为/Dir1/Dir2/file,Dir1是根目录中的一个目录,Dir2Dir1中的一个目录,fileDir2中的一个文件。当您需要对/Dir1Dir2file进行操作时,您需要满足其对应的操作权限,如下表所示。更多有关Hadoop权限模型的信息,请参见HDFS Permissions Guide

操作

/

Dir1/

Dir2/

file

创建目录/Dir1

-WX

---

---

---

创建目录/Dir1/Dir2

--X

-WX

---

---

创建文件/Dir1/Dir2/file

--X

--X

-WX

---

读打开/Dir1/Dir2/file

--X

--X

--X

R--

写打开/Dir1/Dir2/file

--X

--X

--X

-W-

删除目录/Dir1

-WX

RWX

RWX

---

删除文件/Dir1/Dir2/file

--X

--X

---

---

Stat file

--X

--X

--X

---

list /Dir1

--X

R-X

---

---

list /Dir1/Dir2

--X

--X

R-X

---

超级用户

文件存储 HDFS 版提供超级用户组(supergroup)的概念,属于supergroup的用户是超级用户(superuser),超级用户可以跳过权限检查。文件存储 HDFS 版默认的超级用户组名称为supergroup,默认的超级用户为root。

文件存储 HDFS 版提供了用户和组映射功能来管理用户和组的映射关系,您可以通过该功能创建、删除以及查看用户和组的映射关系。更多信息,请参见通过API管理用户和组的映射关系

umask

在创建文件或者目录的时候,如果不指定权限会有一个默认的权限 。目录的默认权限为0777&(~umask),文件的默认权限为0666&(~umask),umask的默认值为022。您可以通过配置fs.permissions.umask-mode选项修改默认的umask。

使用须知

  • 用户身份认证

    文件存储 HDFS 版仅支持简单的身份认证,不支持Kerberos。

  • 用户组映射管理

    文件存储 HDFS 版仅支持使用OpenAPI对单个文件系统的用户和组进行管理,不支持接入LDAP,RANGER等第三方系统。

  • 权限管理

    文件存储 HDFS 版权限检查兼容posix file system permission model,不支持ACL进行细粒度的权限管理。

常见问题

什么是超级用户和超级用户组?

在超级用户组里的用户统称为超级用户,使用超级用户访问文件系统可以跳过权限检查。

默认的超级用户和超级用户组是什么?

默认的超级用户为root,默认的超级用户组为supergroup。

怎么禁用权限检查?

文件存储 HDFS 版不提供禁用权限检查选项,您可以通过将用户加入supergroup的方式绕过权限检查。

我不关心权限检查,应该怎么做才能保证业务不受权限的影响呢?

目前,文件存储 HDFS 版不提供禁用权限检查选项,您可以使用拥有超级用户权限的用户(该用户位于supergroup组中)来绕过权限检查,使用supergroup组中的用户有如下两种方式:

  • 使用默认的超级用户root访问文件系统。

  • 将可能使用该文件系统的用户添加到supergroup中,这些用户就拥有超级用户权限。

新建文件系统无法正常访问,返回“permission denied”错误该如何处理?

  • 原因分析:新建文件系统的根目录权限为:0755 root:supergroup。因此非超级用户没有写权限。

  • 解决方案:

    • 给无法正常访问的用户赋予正确的权限。

    • 使用超级用户访问文件系统。

如果我使用了1.0.5版本SDK访问了文件系统,再使用2.1.0版本访问发现权限系统被破坏了,该怎么办?

如果是由于使用1.0.5版本SDK访问文件系统导致文件系统的权限遭到破坏,您可以使用2.1.0版本SDK以超级用户的身份将文件系统的权限修改到正确状态。建议只使用2.1.0版本SDK访问文件系统。