HADOOP docker(九):hdfs权限

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

骚年们,我们今天来学习hdfs的权限~

请忽略4,5两段内容~

文档:http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HdfsPermissionsGuide.html

中文文档参考:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_permissions_guide.html

1. 概述

hdfs文件系统的权限基于类似POSIX模型来实现的。每个文件和文件夹都和用户和组关联。文件或目录的拥有者、拥有都所在组的用户、其它用户的权限都不同。对于文件,r权限指能读文件,w指能写文件。对于目录,r指能列出目录下的文件,w权限指能创建或者删除目录下的文件\目录,x指能否进入这个目录(读取\执行目录下文件)。

与POSIX模型不同之处是,hdfs上的文件和目录没有setuid和setgid标识位,也没有可执行文件提示。目录可以加上锁标记,防止除superuser、文件或者目录的拥有者 之外的人删除目录中的容易。

HDFS提供了可选的POSIX ACLs功能。

进程在读取HDFS文件时,会被检查用户和组的权限。

2. 用户身份标识

从hadoop0.22开始,支持两种用户身份验证,由参数"hadoop.security.authentication property"决定:

  • simple

    由操作系统来决定用户身份,比如linux上的用户

  • kerberos

    由kerberos凭证来标识client的身份

3. 组映射

一旦用户的身份决定后,就会把用户映射到一个组,由参数"hadoop.security.group.mapping property"决定。默认配置"org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback"会检查Java Native Interface (JNI)是否存在,如果存在则使用hadoop中的API来解析用户的组。如果JNI不存在,则使用"org.apache.hadoop.security.ShellBasedUnixGroupsMapping"这个配置,通过执行bash -c groups或者net group来解析用户的组

此外,,参数值设为"org.apache.hadoop.security.LdapGroupsMapping",可以LDAP服务器来解析用户的组。前提是组在LDAP服务器上存在并且与UNIX上的组不混淆。

HDFS上,namenode做用户的组解析工作,因此namenode所在的主机的配置会决定用户的组的解析。

HDFS将用户和组保存在一个文件或者目录中。注意,HDFS不能像在UNIX一样改变用户和组(there is no conversion from user and group identity numbers as is conventional in Unix.)。

4.关于权限的实现

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

这一段说了一堆的废话,而且是含糊不清的的英文~

5.文件系统API的变更

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

新增加的方法(2.7.3):

  • 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;will additionally return the user, group and mode associated with the path.

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

注:本段内容极有可能是某个历史版本文档复制过来的,在hadoop1.04文档中也有这么一段,完全不是新增啊!

6.应用程序shell的变更

略,跟第5段一样,是一堆过时的废话

7.超级用户

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

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

8.ACLs

关于LINUX ACL(http://www.2cto.com/os/201110/108736.html

默认HDFS不开启ACL,要开启ACL,设置dfs.namenode.acls.enabled=true

访问控制列表提供了不同于用户和组的权限。一个ACL实体规定的用户\组的权限,如:

   user::rw-
   user:bruce:rwx                  #effective:r--
   group::r-x                      #effective:r--
   group:sales:rwx                 #effective:r--
   mask::r--
   other::r--

这个例子中,文件的拥有都有rx-权限,其所在的组有r-x权限,其它人只的r--权限,因此这个文件的权限是654.此外,用户bruce和sales组对文件有rwx权限。其它用户组有r--权限。mask表示过限制所有group以及命名用户的权限。如bruce group group:sales 被mask后其实只有r权限。mask指定了组和命名用户的最大权限。mask不影响文件的owner和other用户。

上面讲的是"访问ACL",下面讲"默认ACL"。默认ACL控制子文件\目录的权限。只有目录才能有默认ACL。当在目录下创建文件或者目录时,父目录的默认ACL被当作新创建的文件或者目录的访问ACL,并且子目录也会继承父目录的默认ACL。注意,父目录的默认ACL改变时,已经存在的子文件\目录的ACL不会变。

   user::rwx
   group::r-x
   other::r-x
   default:user::rwx
   default:user:bruce:rwx          #effective:r-x
   default:group::r-x
   default:group:sales:rwx         #effective:r-x
   default:mask::r-x
   default:other::r-x

目录真正的权限,实际是默认ACL结合umask来实现,umask对ACL进行控制。比如默认的umask是022,意思是:目录755,文件644.那么文件的实际权限将是user::rw- 其它全是r--。

一个ACL实体,至少需要三个条目:unnamed user(file owner) unnamed group(file group) other 。当设置默认ACL时,如果没有提供以上的任务一个条目,都会从目录的access ACL中提取相应的,如果没有access ACL,则会读取permission bits。目录的默认ACL,如果没有设置mark,则到ACL中所有的权限的集合。

hdfs上acl验证顺序:

1.如果client提交的用户是文件拥有者 ,验证权限

2.如果client提交的用户是命名的user,验证权限,然后用mark过虑

3.如果client提交的用户在文件所属的组中,验证组权限,然后用mark过滤

4.如果client提交的用户在命名的组中,验证命名组权限,然后用mark过滤

5.如果client提交的用户是属于other,验证other的权限

提示:最佳实践是,用传统的权限管理来管理文件,然后设置对文件设置一些acl。设置acl会对namenode产生额外的开销。

9.ACL 文件系统API

public void modifyAclEntries(Path path, List<AclEntry> aclSpec) throws IOException;
public void removeAclEntries(Path path, List<AclEntry> aclSpec) throws IOException;
public void public void removeDefaultAcl(Path path) throws IOException;
public void removeAcl(Path path) throws IOException;
public void setAcl(Path path, List<AclEntry> aclSpec) throws IOException;
public AclStatus getAclStatus(Path path) throws IOException;

10.ACL命令

hdfs dfs -getfacl [-R] <path>
Displays the Access Control Lists (ACLs) of files and directories. If a directory has a default ACL, then getfacl also displays the default ACL.

hdfs dfs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec> <path>]
Sets Access Control Lists (ACLs) of files and directories.

hdfs dfs -ls <args>
The output of ls will append a ‘+’ character to the permissions string of any file or directory that has an ACL.

具体操作参考hdfs shell.

11.参数配置

参数名 默认值 说明
dfs.permissions.enableddfs.permissions.enabled true true开启权限验证,false关闭。不管true或者false,文件的mode(权限\所有都\组)都不会变。另外chmod chgrp等操作无论如何都会验证权限
dfs.web.ugi = webuser,webgroup 启动hdfs web ui的用户,会根据该用户的权限决定web ui能展示的hdfs内容(这一条我不明白啊啊啊~启动web ui的到底是哪个用户?不是跟namenode一起启动吗?)
dfs.permissions.superusergroup supergroup hdfs的超级用户组,加入该的用户有超级用户权限
fs.permissions.umask-mode 022 HDFS默认的umask
dfs.cluster.administrators 哪些用户(组)能执行管理"default servlets in the namenode".如 hdfs,user1 group1,user2。没弄明白default servlets是什么鬼
dfs.namenode.acls.enabled false 是否开启ACL

12.总结

这主要弄明白:

1.什么是hdfs超级用户? 启动namenode或者加入dfs.permissions.superusergroup组外,其它的组都是linux上的组(各客户机上的)组的用户

2.hdfs上权限是什么样的? 类似于linux上的文件系统。除了superusergroup组外,其它的组都是linux上的组(各客户机上的也算)。用户都是各机器上的操作系统用户。

3.hdfs acl 原理

4.权限相关的配置

即可。

来自为知笔记(Wiz)

时间: 2024-11-10 20:34:24

HADOOP docker(九):hdfs权限的相关文章

HADOOP docker(七):hive权限管理

1. hive权限简介1.1 hive中的用户与组1.2 使用场景1.3 权限模型1.3 hive的超级用户2. 授权管理2.1 开启权限管理2.2 实现超级用户2.3 实现hiveserver2用户名密码2.4 授权2.4.1 角色管理2.4.2 权限管理2.4.3 操作与权限对应关系 文档链接: hive权限管理 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization#LanguageManu

HADOOP docker(二):HDFS 高可用原理

1.环境简述2.QJM HA简述2.1为什么要做HDFS HA?2.2 HDFS HA的方式2.2 HSFS HA的结构2.3 机器要求3.部署HDFS HA3.1 详细配置3.2 部署HDFS HA4. HDFS HA的管理5.自动切换5.1 使用zookeeper实现HA原理5. 部署hdfs自动切换5.1 关闭集群5.2 添加HA配置5.3 在zookeeper中初始化HA状态5.4 开启集群5.5 使用zookeeper时的安全机制6.FAQ7.做了HA后HDFS的升级.回滚7.1 升级

HADOOP docker(十):hdfs 结构体系

1.简介2.namenode和datanode3.The File System Namespace 文件系统命名空间4.Data Replication 数据复制5.Replica Placement: The First Baby Steps 复制块放置:初步的想法6.Replica Selection 复制块的选择7.Safemode 安全模式8.The Persistence of File System Metadata 文件系统元数据的一致性9.The Communication P

Docker 安装HDFS

网上拉取Docker模板,使用singlarities/hadoop镜像 [[email protected] /]# docker pull singularities/hadoop 查看: [[email protected] /]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/singularities/hadoop latest e213c9ae1b36 3 months ago 1.19 GB 创建doc

hadoop教程之HDFS常用文件操作命令

北京尚学堂提供 1.ls hadoop fs -ls / 列出hdfs文件系统根目录下的目录和文件 hadoop fs -ls -R / 列出hdfs文件系统所有的目录和文件 2.put hadoop fs -put < local file> < hdfs file > hdfs file的父目录一定要存在,否则命令不会执行 hadoop fs -put < local fileor dir >-< hdfs dir > hdfs dir 一定要存在,否则

Hadoop分布式文件系统--HDFS结构分析

转自:http://blog.csdn.net/androidlushangderen/article/details/47377543 HDFS系列:http://blog.csdn.net/Androidlushangderen/article/category/5734703 前言 在Hadoop内部,具体实现了许多类的文件系统,当然最最被我们用到的就是他的分布式文件系统HDFS了.但是本篇文章不会讲HDFS的主从架构等东西,因为这些东西网上和资料书中都讲得很多了.所以,我决定以我个人的学

Hadoop备战:hdfs常用命令(可能有你不知道的)

除介绍的命令外,还有许多bin/hadoop.dfs命令,以上介绍的只是帮助你开始使用HDFS,运行bin/hadoop dfs不带任何参数会列出所有FsShell系统提供的命令,当你遇到问题时执行bin/hadoop dfs –help commandName会显示这个命令的用法. 下面是所有命令的介绍,介绍之前先定义一下参数的意义: 1.    斜体:表示用户输入的变量. 2.  path:表示文件名或目录名. 3.    path-:表示一个或多个文件名或目录名. 4.    file:表

HADOOP docker(四):安装hive

1.hive简介2.安装hive2.1 环境准备2.1.1 下载安装包2.1.2 设置hive用户的环境变量2.1.3 hive服务端配置文件2.1.4 hive客户端配置文件2.1.4 分发hive配置文件2.2 启动hive2.2.1 初始化数据库2.2.2 创建HDFS目录2.2.3 启动hive3.总结 getting start: https://cwiki.apache.org/confluence/display/Hive/GettingStarted hive wiki: htt

Hadoop 3、Hadoop 分布式存储系统 HDFS(好多彩色图)

HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系统. 一.HDFS的优缺点 1.HDFS优点: a.高容错性 .数据保存多个副本 .数据丢的失后自动恢复 b.适合批处理 .移动计算而非移动数据 .数据位置暴露给计算框架 c.适合大数据处理 .GB.TB.甚至PB级的数据处理 .百万规模以上的文件数据 .10000+的节点 d.可构建在廉价的机器上 .通过多副本存储,提高可靠性 .提供了容错和恢复机制 2.HDFS缺点 a.低延迟数