文件存储 HDFS 版为目录和文件提供了一种访问权限,该访问权限类似于POSIX文件系统的权限模型。本文简要介绍访问权限的概念、使用方式及其相关注意事项。
访问权限介绍
文件存储 HDFS 版文件系统中的每一个文件或者目录会关联到三个权限集合。这三个集合分别代表了文件或者目录的所有者(Owner),文件或者目录所属的组(Group),所有其他用户(Other)。每一个集合可能包含Read(R)、Write(W)和Execute(X)权限,某个用户需要满足相应的权限要求才能执行对应的操作。
文件和目录的权限说明如下表所示。
权限名称 | 文件 | 目录 |
Read(R) | 可以读取文件的内容。 | 查看目录需要Read和Execute权限。 |
Write(W) | 可以在文件中写入或追加内容。 | 在目录下创建节点需要Write和Execute权限。 |
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是根目录中的一个目录,Dir2是Dir1中的一个目录,file是Dir2中的一个文件。当您需要对/,Dir1,Dir2或file进行操作时,您需要满足其对应的操作权限,如下表所示。更多有关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访问文件系统。