原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_permissions_guide.html

概述

Hadoop分布式文件系统实现了一个和POSIX系统类似的文件和目录的权限模型。每个文件和目录有一个所有者(owner)和一个组(group)。文件或目录对其所有者、同组的其他用户以及所有其他用户分别有着不同的权限。对文件而言,当读取这个文件时需要有r权限,当写入或者追加到文件时需要有w权限。对目录而言,当列出目录内容时需要具有r权限,当新建或删除子文件或子目录时需要有w权限,当访问目录的子节点时需要有x权限。不同于POSIX模型,HDFS权限模型中的文件没有stickysetuidsetgid位,因为这里没有可执行文件的概念。为了简单起见,这里也没有目录的stickysetuidsetgid位。总的来说,文件或目录的权限就是它的模式(mode)。HDFS采用了Unix表示和显示模式的习惯,包括使用八进制数来表示权限。当新建一个文件或目录,它的所有者即客户进程的用户,它的所属组是父目录的组(BSD的规定)。

每个访问HDFS的用户进程的标识分为两个部分,分别是用户名组名列表。每次用户进程访问一个文件或目录foo,HDFS都要对其进行权限检查,

  • 如果用户即foo的所有者,则检查所有者的访问权限;
  • 如果foo关联的组在组名列表中出现,则检查组用户的访问权限;
  • 否则检查foo其他用户的访问权限。

如果权限检查失败,则客户的操作会失败。

用户身份

在这个版本的Hadoop中,客户端用户身份是通过宿主操作系统给出。对类Unix系统来说,

  • 用户名等于`whoami`;
  • 组列表等于`bash -c groups`。

将来会增加其他的方式来确定用户身份(比如Kerberos、LDAP等)。期待用上文中提到的第一种方式来防止一个用户假冒另一个用户是不现实的。这种用户身份识别机制结合权限模型允许一个协作团体以一种有组织的形式共享文件系统中的资源。

不管怎样,用户身份机制对HDFS本身来说只是外部特性。HDFS并不提供创建用户身份、创建组或处理用户凭证等功能。

理解系统的实现

每次文件或目录操作都传递完整的路径名给name node,每一个操作都会对此路径做权限检查。客户框架会隐式地将用户身份和与name node的连接关联起来,从而减少改变现有客户端API的需求。经常会有这种情况,当对一个文件的某一操作成功后,之后同样的操作却会失败,这是因为文件或路径上的某些目录已经不复存在了。比如,客户端首先开始读一个文件,它向name node发出一个请求以获取文件第一个数据块的位置。但接下去的获取其他数据块的第二个请求可能会失败。另一方面,删除一个文件并不会撤销客户端已经获得的对文件数据块的访问权限。而权限管理能使得客户端对一个文件的访问许可在两次请求之间被收回。重复一下,权限的改变并不会撤销当前客户端对文件数据块的访问许可。

map-reduce框架通过传递字符串来指派用户身份,没有做其他特别的安全方面的考虑。文件或目录的所有者和组属性是以字符串的形式保存,而不是像传统的Unix方式转换为用户和组的数字ID。

这个发行版本的权限管理特性并不需要改变data node的任何行为。Data node上的数据块上并没有任何Hadoop所有者或权限等关联属性。

文件系统API变更

如果权限检查失败,所有使用一个路径参数的方法都可能抛出AccessControlException异常。

新增方法:

  • public FSDataOutputStream create(Path f, FsPermission permission, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) throws IOException;
  • public boolean mkdirs(Path f, FsPermission permission) throws IOException;
  • public void setPermission(Path p, FsPermission permission) throws IOException;
  • public void setOwner(Path p, String username, String groupname) throws IOException;
  • public FileStatus getFileStatus(Path f) throws IOException; 也会返回路径关联的所有者、组和模式属性。

新建文件或目录的模式受配置参数umask的约束。当使用之前的 create(path, …) 方法(没有指定权限参数)时,新文件的模式是666 & ^umask。当使用新的 create(path, permission, …) 方法(指定了权限参数P)时,新文件的模式是P & ^umask & 666。当使用先前的 mkdirs(path) 方法(没有指定 权限参数)新建一个目录时,新目录的模式是777 & ^umask。当使用新的 mkdirs(path, permission ) 方法(指定了权限参数P)新建一个目录时,新目录的模式是P & ^umask & 777。

Shell命令变更

新增操作:

chmod [-R] mode file …
只有文件的所有者或者超级用户才有权限改变文件模式。
chgrp [-R] group file …
使用chgrp命令的用户必须属于特定的组且是文件的所有者,或者用户是超级用户。
chown [-R] [owner][:[group]] file …
文件的所有者的只能被超级用户更改。
ls file …
lsr file …
输出格式做了调整以显示所有者、组和模式。

超级用户

超级用户即运行name node进程的用户。宽泛的讲,如果你启动了name node,你就是超级用户。超级用户干任何事情,因为超级用户能够通过所有的权限检查。没有永久记号保留谁过去是超级用户;当name node开始运行时,进程自动判断谁现在是超级用户。HDFS的超级用户不一定非得是name node主机上的超级用户,也不需要所有的集群的超级用户都是一个。同样的,在个人工作站上运行HDFS的实验者,不需任何配置就已方便的成为了他的部署实例的超级用户。

另外,管理员可以用配置参数指定一组特定的用户,如果做了设定,这个组的成员也会是超级用户。

Web服务器

Web服务器的身份是一个可配置参数。Name node并没有真实用户的概念,但是Web服务器表现地就像它具有管理员选定的用户的身份(用户名和组)一样。除非这个选定的身份是超级用户,否则会有名字空间中的一部分对Web服务器来说不可见。

在线升级

如果集群在0.15版本的数据集(fsimage)上启动,所有的文件和目录都有所有者O,组G,和模式M,这里 OG 分别是超级用户的用户标识和组名,M是一个配置参数。

配置参数

dfs.permissions = true
如果是 true,则打开前文所述的权限系统。如果是 false,权限检查 就是关闭的,但是其他的行为没有改变。这个配置参数的改变并不改变文件或目录的模式、所有者和组等信息。

不管权限模式是开还是关,chmod,chgrp 和 chown 总是 会检查权限。这些命令只有在权限检查背景下才有用,所以不会有兼容性问题。这样,这就能让管理员在打开常规的权限检查之前可以可靠地设置文件的所有者和权限。

dfs.web.ugi = webuser,webgroup
Web服务器使用的用户名。如果将这个参数设置为超级用户的名称,则所有Web客户就可以看到所有的信息。如果将这个参数设置为一个不使用的用户,则Web客户就只能访问到“other”权限可访问的资源了。额外的组可以加在后面,形成一个用逗号分隔的列表。
dfs.permissions.supergroup = supergroup
超级用户的组名。
dfs.upgrade.permission = 777
升级时的初始模式。文件永不会被设置x权限。在配置文件中,可以使用十进制数51110
dfs.umask = 022
umask参数在创建文件和目录时使用。在配置文件中,可以使用十进制数1810

HDFS权限管理用户指南的更多相关文章

  1. Linux用户和权限——管理用户和用户组的命令

    Linux用户和权限——管理用户和用户组的命令 摘要:本文主要学习了在Linux系统中管理用户和用户组的命令. useradd命令 useradd命令可以用来创建新用户. 基本语法 useradd [ ...

  2. HDFS权限管理指南(HDFS Permissions Guide)

    综述 HDFS实现了一个类似POSIX模型的文件和文件夹权限管理模型.每一个文件盒文件夹都有一个所有者和一个组.文件或者文件夹可以通过权限区分是所有者还是组成员或是其他用户.对文件来说,r标示可以阅读 ...

  3. springboot学习笔记:11.springboot+shiro+mysql+mybatis(通用mapper)+freemarker+ztree+layui实现通用的java后台管理系统(权限管理+用户管理+菜单管理)

    一.前言 经过前10篇文章,我们已经可以快速搭建一个springboot的web项目: 今天,我们在上一节基础上继续集成shiro框架,实现一个可以通用的后台管理系统:包括用户管理,角色管理,菜单管理 ...

  4. MySQL 权限管理 用户管理

    我使用的是 MariaDB 数据库 查看 MySQL 所有用户: select distinct concat('User: \'',user, '\'@\'', host, '\'') as que ...

  5. Spring boot Security 用于权限管理,用户添加等。

    1:添加依赖: <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thy ...

  6. 用户管理_组管理_权限管理.ziw

    2017年1月10日, 星期二 用户管理_组管理_权限管理 用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage ...

  7. Linux的用户与用户组(权限管理)

    linux用户与用户.权限管理 用户管理: 1.useradd 创建用户 -c 指定用户描述 -d 指定家目录 默认家目录 /home下同名的目录 -g 指定主组 -G 指定附加组 [注意:一个用户主 ...

  8. 基于EasyUI Treegrid的权限管理资源列表

    1. 前言 最近在开发系统权限管理相关的功能,主要包含用户管理,资源管理,角色管理,组类别管理等小的模块.之前的Web开发中也用过jQueryEasyUI插件,感觉这款插件简单易用,上手很快.以前用到 ...

  9. HDFS、Yarn、Hive…MRS中使用Ranger实现权限管理全栈式实践

    摘要:Ranger为组件提供基于PBAC的鉴权插件,供组件服务端运行,目前支持Ranger鉴权的组件有HDFS.Yarn.Hive.HBase.Kafka.Storm和Spark2x,后续会支持更多组 ...

随机推荐

  1. python 数据处理中的 LabelEncoder 和 OneHotEncoder

    One-Hot 编码即独热编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效.这样做的好处主要有:1. 解决了分类器 ...

  2. 怎么才能成为一名PHP专家?

    本文作者Bruno Skvorc是一名资深的Web开发者.在这篇文章里主要是讲述成为一名专业的PHP专家所要经历的过程,以及在这个过程里要如何学习掌握技巧和对工具的舍取.(以下为编译内容) 当阅读各种 ...

  3. Java基础(十一):接口

    一.接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是 ...

  4. 转: 网卡名字eth0,eth1的修改方法

    转自:http://longwind.blog.51cto.com/419072/982738 我使用这个方法生效: 现象:只有eth2,    vi /etc/udev/rules.d/70-per ...

  5. 2013级C++第14周(春)项目——多态性、虚函数和抽象类

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 第一部分 阅读程序1.阅读.改动和执行关于交通 ...

  6. [Javascript] Understand Curry

    The act of currying can be described as taking a multivariate function and turning it into a series ...

  7. Jmeter测试报告可视化(Excel, html以及jenkins集成)

    做性能测试通常在none GUI的命令行模式下运行Jmeter. 例如: jmeter -n -t /opt/las/JMeter/TestPlan/test.jmx -l /opt/las/JMet ...

  8. 通过HTML5 Visibility API检测页面活动状态

    几年前,我们浏览网页的时候是没有选项卡浏览模式的,每一个网页都会是一个浏览器窗口,如果我没有记错,Win7之前我们都是这样浏览网页的.作为一个程序员,我们经常会同时打开10-15个网页,多的时候超过2 ...

  9. PHP导出word,CVS,PDF

    WORD: <?php header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no ...

  10. Linux服务启动出现java.net.UnknownHostException:

    第一种情况: 一般是在/etc/hosts文件,在文件最后加入这句配置,重启服务即可   172.xx.xxx.xxx localhost.localdomain xxx-houtai1 第二种情况: ...