综述

HDFS实现了一个类似POSIX模型的文件和文件夹权限管理模型。每一个文件盒文件夹都有一个所有者和一个组。文件或者文件夹可以通过权限区分是所有者还是组成员或是其他用户。对文件来说,r标示可以阅读文件,w标示可以写入文件,对于文件夹来说,r标示可以阅读其下的内容,w可以创建或者删除文件或文件夹,x标示进入其子节点。

与POSIX 模型相比,没有可执行文件的概念,对于文件夹来说,没有setuid或setgid字节也是一个简化,Sticky bit被设置在文件中防止除了超级用户和文件所有者的其他用户删除或者移动文件夹,一个文件被设置成Sticky bit没有影响,总的来说,HDFS的权限系统有自己的独立性。一般来说Unix习惯的显示模型会被使用,包括使用八进制进行描述。当一个文件或者文件夹被创建时,他的所有者就是被客户端进程声明的用户,他的组四父文件夹的组(BSD规则)

每一个客户端访问HDFS都有两个标示部分包括用户名和组列表。每此当客户端进程接入文件或者文件夹时,HDFS必须做一个权限检查。

如果用户名和文件的所有者一直那么就可以使用所有者权限,如果组一致,那么可以使用组的权限,否则使用其他权限。

如果权限没有通过,那么客户端操作失败。

用户识别
Hadoop支持两种操作用于用户识别。不同点是通过配置hadoop.security.authentication属性:

simple

在这种模式下,客户端进程的身份是由主机操作系统决定的。类似unix系统上,用户名相当于“whoami”。

kerberos

使用Kerberized操作,使用客户端的Kerberos证书来确定客户端的进程的身份,比如在Kerberized环境中,用户使用kinit工具实用程序获得Kerberos ticket-granting-ticket(TGT)和使用klist来确定当前的用户。当Kerberos主体映射到一个HDFS用户名时,其他一些非必要的组件会被忽略。比如,一个用户todd/foobar@CORP.COMPANY.COM可以使用todd来登录HDFS。

无论哪种机制,用户标示都是HDFS机制外实现的。HDFS本事没有提供创建用户标示,组或者处理用户凭证的机制。

组映射
一旦用户名被以上的方式确定下来,组列表也会被配置在hadoop.security.group.mapping的参数group mapping service确定下来默认实现是org.apache.hadoop.security.ShellBasedUnixGroupsMapping,他是通过Unix的shell中的-c groups命令解决的用户的组的问题。

如果使用的是LDAP那么可以使用org.apache.Hadoop.security.LdapGroupsMapping。但是这个只能使用在LDAP上不能使用在Unix server上更多的细节可以参考Javadocs中的配置group mapping service的部分

对于HDFS来说,映射用户到组在NameNode上已经实现,主机系统配置NameNode的用户决定了这个组。

注意:HDFS用字符串储存用户和文件和文件夹组,他并没有想Unix一样使用一个标示数字来表示用户和组。

实现
每个文件或者文件夹传递他的全路径到name node,每次操作的时候都需要检查权限。客户端将会隐试的连接name node使用用户标示,减少对于现有的客户端的API改变。因为路劲的改变或者删除会引起有一些操作以前成功,但是在运行的时候失败。比如,当一个客户端第一次读取一个文件,他会发送请求到name node发现文件第一个块的位置。第二个请求去查询其他块可能失败。另一方面,客户端已经知道了文件block使得删除中的文件不能被撤回。通过添加权限客户端取得文件时可以在request之间取消,改变去请您先不会撤销客户端一只的块。
改动的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, …) (没有权限参数)被调用,新文件的模型是 0666 & ^umask,当新方法create(path, permission, …)(权限参数为P)被调用,那么新文件的模型是 P & ^umask & 0666。当创建一个新目录使用现有 mkdirs(path) 方法(没有权限参数),新目录的模式是0777 & ^ umask。当使用mkdirs(path, permission)(权限参数为P),那么新文件测模型是 P & ^umask & 0777。

shell的改变

新的操作:

chmod [-R] mode file …

只有文件的所有者或者超级用户有权限去改变文件的mode

chgrp [-R] group file …

用户调用chgrp 指定属于的组,文件所有者或者超级用户修改。

chown [-R] [owner][:[group]] file …

改变文件的所有者,只能有超级用户修改

ls file …
lsr file …

输出文件所有者组和模式
超级用户

超级用户是name弄得进程使用的用户。更确切的说,就是你启动namenode那么你就是超级用户。超级用户的权限检查永远不会失败,所以可以干任何事情。没有固定的超级用户,当谁启动namenode谁就是超级用户。HDFS的超级用户不是namenode主机的超级用户,没有必要,但是他是所有集群的超级用户。此外,HDFS的实验者在个人工作站,方便就安装的超级用户没有任何配置。

此外管理员可以通过配置参数确定一个高级的组,这个组的成员也是超级用户。

web服务
默认情况下,web服务器的身份是一个配置参数。name node没有真实用户身份的概念,但是web server需要有一个管理员设定的用户和组的标示。除非选择的超级用户不能进入部分的web server。

配置参数

dfs.permissions = true

如果使用yes,标示使用权限系统,如果是no,则关闭权限检查。但是其他的行为不会被改变。切换参数不会改变文件的mode,组和所有者。不管权限是否打开 chmod, chgrp和chown总是检查权限, 这些函数只对权限上下文有作用所以没有版本兼容问题。此外这允许管理员设置所有者开启权限检查功能

dfs.web.ugi = webuser,webgroup

web server的用户名,设置超级用户的名称可以允许任何web客户端看到的一切。逗号分隔。

dfs.permissions.superusergroup = supergroup

超级用户组的名字
fs.permissions.umask-mode = 0022

建文件或者文件夹时使用的umask 。配置文件可以使用十进制的18.
dfs.cluster.administrators = ACL-for-admins

集群的管理员指定为ACL。这可以控制访问默认的servlet等

转载:http://blog.csdn.net/duheaven/article/details/17314563

HDFS权限管理指南(HDFS Permissions Guide)的更多相关文章

  1. HDFS权限管理用户指南

    原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_permissions_guide.html 概述 用户身份 理解系统的实现 文件系统API变更 S ...

  2. HDFS配额管理指南

    原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_quota_admin_guide.html Hadoop分布式文件系统(HDFS)允许管理员为每个 ...

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

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

  4. HADOOP docker(九):hdfs权限

    1. 概述2. 用户身份标识3. 组映射4.关于权限的实现5.文件系统API的变更6.应用程序shell的变更7.超级用户8.ACLs9.ACL 文件系统API10.ACL命令11.参数配置12.总结 ...

  5. HDFS权限

    1.1 超级用户 启动namenode服务的用户就是超级用户, 该用户的组是supergroup 1.2 文件权限管理   1.2.1 创建时的owner和group 文件或者目录被创建之时,服从BS ...

  6. HDFS权限问题

    HDFS权限问题 Win下Eclipse提交hadoop程序出错:org.apache.hadoop.security.AccessControlException: Permission denie ...

  7. HDFS概述(4)————HDFS权限

    概述 Hadoop分布式文件系统(HDFS)的权限模型与POSIX模型的文件和目录权限模型一致.每个文件和目录与所有者和组相关联.该文件或目录将权限划分为所有者的权限,作为该组成员的其他用户的权限.以 ...

  8. Expo大作战(三十)--expo sdk api之Permissions(权限管理模块),Pedometer(计步器api)

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  9. hive 报错/tmp/hive on HDFS should be writable. Current permissions are: rwx--x--x

    启动hive时报例如以下错误:/tmp/hive on HDFS should be writable. Current permissions are: rwx--x--x 这是/tmp/hive文 ...

随机推荐

  1. C语言学习笔记(五) 数组

    数组 数组的出现就是为了解决大量同类型数据的存储和使用的问题: 数组的分类:一维数组.二维数组. 一维数组:为多个变量连续分配存储控件:所有的变量的数据类型必须相同:所有变量所占的字节大小必须相等: ...

  2. 关于SVN提交强制加入注释

    一.摘要 场景: 在这次开发项目过程中,团队中总是有人忘记添加注释. 问题: 1:其他成员不知道你提交是什么代码, 给回滚操作带来很多不必要的麻烦. 2:这个工作需要有一个人天天提醒大家在提交代码的时 ...

  3. es redis logstash 日志收集系统排错

    用logstash收集日志并发送到redis,然后通过logstash取redis数据写入到es集群,最近kibana显示日志总是中断,日志收集不过来,客户端重启发现报错: Failed to sen ...

  4. Android应用APP脱壳笔记

    [TOC] 天下游 模拟定位技术点简析 通过代码分析初步猜测模拟定位用到的几处技术点: 获取了Root权限 通过反射获取 android.os.ServiceManager 对应的函数 getServ ...

  5. 每天进步一点点——Linux中的文件描写叙述符与打开文件之间的关系

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆能够看成是文件,文件又可分为:普通 ...

  6. 用C#实现XML和实体类之间序列化和反序列化相互转换

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  7. OCR 即 光学字符识别

    OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形状翻译 ...

  8. codeblocks中右键源文件没有Rename选项?

    那是因为你右击的那个文件已经被CB的编辑器打开,关闭即可,你就能看到Rename选项了. 或者更简单,翻到Files那一栏,然后右击某个文件夹选择"Make root"即可,就跟w ...

  9. Perl/C#连接Oracle/SQL Server和简单操作

    连接数据库是一个很常见也很必须的操作.先将我用到的总结一下. 1. Perl 连接数据库 Perl 连接数据库的思路都是: 1)使用DBI模块: 2)创建数据库连接句柄dbh: 3)利用dbh创建语句 ...

  10. 微信蓝牙ble记录

    参加了一个简单的微信蓝牙ble项目,做一些记录 首先按网站上面的各种配置 简单的说就是,软件上面,生成deviceid->绑定设备和deviceid. 几点注意: 1>deviceid是唯 ...