一篇文章搞懂HDFS管理权限

2023-05-16

小米的HDFS承载了公司内多个部门几十条业务线的几十PB数据,这些数据有些是安全级别非常高的用户隐私数据,也有被广泛被多个业务线使用的基础数据,不同的业务之间有着复杂的数据依赖。因此,如何管理好这些数据的授权,并尽可能自动化低成本的做好权限管理,是很重要的一部分工作。本文系统的描述了HDFS权限管理体系中与用户关联最紧密的授权相关内容,希望通过本文让大家对权限管理有一个清晰的了解。

HDFS的权限管理是被用户最常问到的问题之一,HDFS实现了一个和POSIX系统类似的文件和目录的权限模型,同时还支持POSIX ACLs规范,由于POSIX ACLs本身就比较复杂,还改变了一些传统POSIX权限体系的语义,因此大部分用户在使用过程中都会遇到以下一些困惑,例如:umask是干什么用的?ACLs里的mask作用是什么?为什么我明明给用户A添加了rwx权限的ACLs,A却仍然写失败?什么权限会继承?什么权限不会继承?为什么创建的这个目录继承的权限跟预期的不一致?

权限控制一般分为两部分,鉴权(Authentication)和授权(Authorization)。鉴权用于鉴定用户身份(例如鉴定你是否是用户foo),授权用于授予给定用户指定的权限(例如将文件f授予用户bar读写权限)。本文只讨论HDFS的授权体系的工作机制,对于常用的权限管理命令先不做介绍,欢迎关注后续文章了解。

 1、HDFS权限管理概述

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

HDFS还提供了对POSIX ACLs(Access Control Lists)的支持,通过NameNode的配置项来控制对ACLs的支持是打开还是关闭。ACLs使得用户可以在权限模型之外提供更加灵活的授权。由于传统的POSIX权限模型对于大部分类Unix系统用户来说都比较熟悉了,因此ACLs将是本文档的重点。

下文会解决HDFS实现的传统POSIX权限模型中最常见的疑问,然后系统的介绍ACLs,最后给出详细的例子和场景来说明ACLs是如何工作的。

 2、传统的POSIX权限模型

HDFS实现的是类似于POSIX系统的权限模型,如前所述,使用过Linux/Unix系统的用户对该模型应该都非常熟悉,就不再赘述。这里先对下文中最常被问到的问题做一些说明:

1、访问某个路径时,用户必须具备该路径上每个目录的执行(x)权限,路径中最后一个目录/文件除外。例如 ls /user/foo/data操作要求用户必须具有根目录(/),user目录,foo目录的执行权限。

2、创建一个文件或者目录时,owner是客户进程的用户,group则继承父目录

3、新建文件或目录的模式(mode)由client在rpc调用时传递给NameNode,它受配置参数umask的约束。新文件的模式是666 & ^umask,新目录的模式是777 & ^umask,即文件默认是没有执行(x)权限的。如果在 create(path, permission, …) 方法中指定了权限参数P,新文件的模式是P & ^umask & 666,如果在mkdirs(path, permission ) 方法中指定了权限参数P,新目录的模式是P & ^umask & 777。

  • 例1:如果umask是022(默认值),那么新文件的模式就是644,新目录的模式就是755,即umask擦除掉了group和other的写权限。

  • 例2:如果umask是027,那么新文件的模式就是650,新目录的模式就是750,即umask擦除掉了group的写权限,以及other的读写执行权限。

4、umask通过client端hdfs-site.xml中的fs.permissions.umask-mode配置项来指定,默认是022。

5、只有超级用户才可以调用chown来修改目录和文件的owner。

 3、ACLs概念介绍

HDFS在传统的POSIX权限模型之外,还支持POSIX ACLs (Access Control Lists)。通过ACLs可以做到更加灵活的授权。

默认情况下对ACLs的支持是关闭的,可以通过设置dfs.namenode.acls.enabled为true来打开。

 ACL条目

一个ACLs由一系列条目(entry)组成,下表列出了条目的类型及格式,共有六种类型的ACL条目。

 

 最小ACLs和扩展ACLs

如果ACLs与文件/目录模式权限位(file mode permission bits)完全对应,则称为最小ACLs(minimal ACLs),它们有3个ACL条目(即上面的owner、owning group和others三种类型的条目,由于与传统的POSIX权限模型完全对应,因此不需要指定用户名,称为无名条目)。

拥有超过3个条目的ACLs称为扩展ACLs(extended ACLs),扩展ACLs会包含一个mask条目以及给其他指定用户和组授权的条目,即有名ACL条目(named entry),与最小ACLs中无名条目相对应。

有名ACL条目即上表中named user和named group两种类型。这两类ACLs如下图所示:

 

  ACLs对模式位中组类(group class)权限的影响

在POSIX ACLs规范中,有名条目属于组类(group class)的权限,组类权限还包含owning group条目。由于文件模式权限位中的组类权限可能比某些有名条目的权限小(例如组类权限位是r-x,但是用户foo的ACL条目是user:foo:rwx),这就与POSIX.1中规范的传统权限模型有所冲突,因此ACLs规范POSIX 1003.1e对组类权限进行了重定义:在新的语义下,它表示所有属于组类权限的ACL条目的权限上界。这样做得以保证只遵守POSIX.1规范的应用程序在不知晓ACLs的情况下不会在组权限上遇到问题。

在最小ACLs中,组类权限和owning group条目权限是完全相同的(参考上图的例子),在扩展ACLs组类权限中可能有某些有名条目的权限比owning group条目高,所以owning group条目的权限和组类权限会不一样(参考上图中的例子,owning group权限是r—,组类权限是rw-)。这个问题通过引入mask得到了解决,在最小ACLs中,组类权限对应到owning group条目,在扩展ACLs中,组类权限对应到mask条目的权限。mask的作用如下图所示:

 

对于最小ACLs来说,文件模式权限中的owner、group和other分别映射到ACLs owner、owning group和others条目,对于扩展ACLs则是分别映射到ACLs owner、mask和others条目。当应用程序修改文件模式权限位(例如使用chmod命令)时,对应的ACL条目也会随之改变。同样的,修改这些ACL条目也会改变文件的模式权限(mode)。

注意,ACLs owner和others条目不属于组类权限,所以他们不会被mask。

默认ACLs

前面讨论的ACL条目定义了文件/目录当前的访问权限,称为访问ACLs(access ACLs),另一种类型叫做默认ACLs(default ACL),它定义了当一个文件系统对象被创建时如何从父目录继承权限。只有目录可以被设置默认ACLs,默认ACLs不会用于权限检查,仅用于权限继承。

创建一个新的目录时,如果父目录设置了默认ACLs,则新目录会继承父目录的默认ACLs作为自己的访问ACLs,同时也作为自己的默认ACLs。新的文件则只会继承父目录的默认ACLs作为自己的访问ACLs。

从父目录默认ACLs继承来的权限并非最终的权限,由于在创建新的目录/文件时client一定会传给NameNode一个文件模式权限(见“传统的POSIX权限模型”一节说明3),两者的计算结果才是最终的权限。计算方式采用与运算,即取继承的ACLs中某类权限与模式权限中对应类别权限的交集。下面是一个例子:

 

  4、ACLs的示例

下面给展示几个ACLs的示例,方便大家理解。

先看一个最小ACLs的例子,目录/user/foo:

修改/user/foo的模式权限位为755,则对应的ACL条目也跟着发生了变化。

给/user/foo目录添加一条ACLs,此时/user/foo的ACLs就变成了扩展ACLs。我们可以观察到在新增了bar的ACL条目之外,同时还新增了一个mask条目。该mask条目是自动添加的,取值是所有组类型条目的并集。同时扩展ACLs的模式权限位中组类权限也改为映射到了mask条目,因此使用ls命令查看/user/foo的模式权限位,又变成了775。

注意,此时以组用户的身份访问/user/foo目录,仍然只有r-x权限,而不是ls看到的rwx权限了。

再次修改/user/foo的模式权限位从组类权限中去掉w权限,mask条目也跟着发生了变化。同时用户bar的权限也受mask限制变成了r-x,即getfacl结果中显示的effective:r-x。

给/user/foo添加一条默认ACL条目。虽然只给用户joe添加了一条默认ACL条目,但是对于一个完整的ACLs来说所需的其他条目都已经被自动从访问ACLs中复制了过来。

现在创建一个/user/foo的子目录subdir。为了更直观的观察到继承的ACLs权限和client传过来的permission是如何共同作用的,我们先把default ACLs中的other条目给修改成只有读权限。

可以看到/user/foo的default ACLs都已经被subdir继承了,但是有两点需要注意:

(1)由于umask设置的是022,所以新建目录的权限应该是755,但实际是754。这是因为继承的ACLs other条目权限和client传递过来的permission权限中的other类别权限做了与运算,最终other的权限是r--

(2)同时继承的mask是rwx,但是和client传递过来的permission权限中的组类权限(r-x)做过与操作之后就变成了r-x 

在/user/foo目录下创建一个文件,会继承默认ACLs中的权限,但文件本身不再有默认ACLs。

参考文献:

[1] HDFS Permission Guide

[2] POSIX Access Control Lists on Linux

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一篇文章搞懂HDFS管理权限 的相关文章

  • Python 打包成 wheel

    1 编写 setup py 在项目的根目录下外面一个文件夹创建 96 setup py 96 96 name 96 xff1a 指的是你打包后发布的名称 xff08 如 96 numpy 96 和 96 torch 96 xff09 96
  • plugins插件使用例程

    最近在看一个pyqt写的工具软件 xff0c 项目中大量使用plugins xff0c 所以了解了一下plugins的功能机制 下面简单分享一个例程 xff0c 代码结构如下 main py platform py init py plug
  • pycharm中.gitignore无效

    1 打开pycharm的命令行 xff0c 输入以下指令 git rm r cached git add 2 再次在pycharm上 xff0c 点击commit 原因 xff1a 这是因为pycharm会自动运行git add 的功能 x
  • Jetson Orin&Nx&Nano平台 FPDlink Ⅲ相机采集---双目场景应用

    1 前言 基于上次在淘宝上采购的FPDlink 相机采集套件使用一段时间之后 不少人对此方案很感兴趣的 又激发了我继续写的激情 上次帖子链接如下 Jetson Orin平台多路 FPDlink 相机采集套装推荐 bingdund的博客 CS
  • SBUS协议:SBUS解析与合成

    在说协议之前 xff0c 我想强调一点 xff1a 信号要取反 xff0c 硬件取反 xff01 xff01 xff01 xff01 xff01 至于为什么强调 xff0c 我会在后面解释 xff0c 你们先记住 SBUS协议 xff1a
  • 上海灵信视觉A4控制板

    资料准备 xff1a 1 LED Player上位机控制 xff1a em span style font size 12px http www 168led com AjaxFile DownLoadFileNew aspx FilePa
  • stm32串口一直进USART1_IRQHandler

    今天在使用USART模块 xff0c 遇到了一些问题并解决了 xff0c 于是发贴共享 问题描述 xff1a 在使用USART做串口通讯时 xff0c 我只把接收中断打开 xff0c 并设置抢占优先级为最低一个级别 xff0c 而接收中断上
  • tensorflow载入报错Process finished with exit code -1073741819 (0xC0000005)

    这几天准备在现有的软件里加上caffe来测试一种新算法 发现windows下python3 6安装caffe是真的难 xff0c 只能装好python2 7的版本就放弃了 回来继续完善软件 xff0c 又发现软件里的tensorflow不能
  • python项目打包(自定义dll) anaconda3+pyinstaller

    目前手上有一个python 43 pyqt的项目需要打包 xff0c 所以查了一下打包的方法 下面介绍一下具体步骤 xff1a python打包有很多方法 xff0c py2exe xff0c pyinstaller等等 xff08 其实我
  • Docker(六)同一镜像有多个Tag情况下,执行 docker rmi 镜像ID 指令无法删除

    删除方法一 docker rmi f 镜像ID 删除方法二 docker rmi repository tag 参考 xff1a 1 https www imooc com article 35040
  • 《ROS机器人开发实践(胡春旭)》第十章MoveIt!机械臂控制 学习笔记

    r 在学习 ROS机器人开发实践 胡春旭 第10章的MoveIt xff01 时 xff0c 因为在自己创建的工作空间中没有下载作者的源代码 xff0c 所有有以下几个问题 xff1a 1 使用moveit setup assistant时
  • Android 根据网络分析运营商信息

    我们想获取手机的运营商信息 通常都会去调用系统的TelephonyManager类的取数据 但是很多时候可能取不到卡的信息 xff08 例如双卡手机和一些特殊卡 xff09 xff0c 这样就区别不了运营商了 但是有时候我们的需求要进行不通
  • 简单又好看的按钮,扁平化按钮。

    今天分享一下流行的扁平化按钮 完全不需要用到图片哦 效果图如下 xff1a 里面有2个按钮都是一样的模式 只要修改的色值就可以 下面跟我来更新你的UI吧 首先编写 button xml 代码如下 lt xml version 61 34 1
  • Android 获取运营商信息(完整版)-解决高通,MTK等双卡问题

    由于国内的运营商问题 xff0c 双卡手机获取IMSI号问题要根据厂商API 来实现 下面我们就来做一套完整的分析运营商获取IMSI号逻辑 1 xff0c 首先我们要判断手机的平台 1 1 xff0c 判断手机是否MTK平台 public
  • AstarPathfindingProject 中RVO碰撞体扩展

    原本库中只有矩形RVO碰撞体 xff0c 如果要添加自己的需要继承RVOObstacle抽象类 xff0c 重写里面的方法 例如下面的圆柱形碰撞 using UnityEngine if UNITY EDITOR using UnityEd
  • Android中抓取手机视频流数据。

    目前实时抓取手机视频数据有2种方法 xff0c 一种是通过camera的回调获取源数据 xff0c 这里获取的源数据是没有编码的数据 有的人发送yuv数据然后在那绘制图片 xff0c 也说视频聊天 xff0c 真是可笑 这种方式是可是实现视
  • Android 使用AudioRecord录音相关和音频文件的封装

    在Android中录音可以用MediaRecord录音 xff0c 操作比较简单 但是不够专业 xff0c 就是不能对音频进行处理 如果要进行音频的实时的处理或者音频的一些封装 就可以用AudioRecord来进行录音了 这里给出一段代码
  • Android 中使用MediaRecorder进行录像详解(视频录制)

    在这里给出自己的一个测试DEMO xff0c 里面注释很详细 简单的视频录制功能 package com video import java io IOException import android app Activity import
  • Android手机中获取手机号码和运营商信息

    代码如下 xff1a package com pei activity import android app Activity import android os Bundle import android view View import
  • C语言下划线开头的函数

    首先 xff0c C 43 43 里关于下划线的问题是源于C语言 xff0c 因为C 43 43 允许用extern C 来修饰代码以C语言语法方式编译 然后说C语言里的下划线 xff1a C语言确实允许以下划线开头的函数存在 xff0c

随机推荐

  • 校验和计算方法

    1 说明 xff1a 1 校验和覆盖的内容 xff1a IP校验和 xff1a IP首部 ICMP校验和 xff1a ICMP首部 43 ICMP数据 xff1b UDP TCP校验和 xff1a 首部 43 数据 43 12个字节伪首部
  • 布谷鸟算法浅谈与简单应用

    简介 布谷鸟算法是由剑桥大学Xin She Yang教授和S Deb于2009年提出的一种新兴的启发算法 xff0c 是一种通过模拟自然界当中布谷鸟 xff08 也就是杜鹃 xff0c 故该算法也称为杜鹃算法 xff09 在繁育后代的行为而
  • torchvision中inception v3的实现

    一 torchvision中inception v3的网络结构 论文中给的结构如下图所示 但是torchvision中的inception v3结构中并不是这么实现的 下面解释一下torchvision中的inception v3结构 xf
  • 实践 基于Arduino 的 平衡车

    完成样子 因为只是学习验证 xff0c 没用电烙铁 xff0c 只用了面包板来连接各个组件 xff0c 中间用扎带固定 xff08 不稳定 xff09 完成后能基本保持平衡 xff0c 但太大力去推容易倒 平衡原理 通过负反馈实现平衡 xf
  • CMake入门-04-自定义编译选项

    工作环境 系统 xff1a macOS Mojave 10 14 6CMake Version 3 15 0 rc4 Hello World 自定义编译选项 CMake 允许为项目增加编译选项 xff0c 从而可以根据用户的环境和需求选择最
  • Linux 驱动开发简单实例

    Xiuye XY于 2021 08 03 19 17 07 发布343 收藏 3 分类专栏 xff1a 笔记 C C 43 43 Linux 版权 编辑笔记同时被 3 个专栏收录正在上传 重新上传取消 128 篇文章0 订阅 订阅专栏 编辑
  • ros下编译安装package

    原文地址 配置Release目录 catkin config install修改CMakeList txt文件 修改节点中CMakeLists txt文件 假设此处我们的节点项目名称为 test node 即CMakeLists txt中p
  • 什么是解耦?

    什么是解耦 解耦就是用数学方法将两种运动分离开来处理问题 对项目划分为多个模块这种做法你有什么看法 xff1f 优势 劣势有哪些 xff1f 多模块化项目优势在于 xff1a 提高代码的重用率 xff0c 可维护性高 xff0c 架构灵活
  • HDFS-Tiering 数据分层存储

    1 背景 随着小米业务迅猛发展 xff0c 存储到 HDFS 集群的数据量不断增大 xff0c 存储成本也不断攀升 尤其是海外 HDFS 集群每 GB 数据的成本是国内集群的 10 倍左右 xff0c 如何优化海外集群的存储成本变得非常迫切
  • 米家插件平台的技术实践之路

    2016年小米正式发布米家品牌 xff0c 此后米家开始接入第三方的智能硬件产品 xff0c 小米的IoT生态也迎来了快速发展 截止到2020年Q3 xff0c 小米AIoT平台已连接的IoT设备 xff08 不包括智能手机及笔记本电脑 x
  • 拥抱开源 | Xiaomi Vela团队成果连连,喜讯不断

    Xiaomi Vela是基于开源实时操作系统NuttX打造的物联网操作系统 xff0c Vela可以在各种物联网硬件上提供统一的软件平台 xff0c 通过丰富的组件和标准化的软件框架 xff0c 打通碎片化的物联网应用场景 今年Xiaomi
  • 将开源进行到底!小米新一代Kaldi荣获2022数博会“领先科技成果”奖

    5月26日 xff0c 数博会开幕式当天揭晓了 2022中国国际大数据产业博览会数博发布之领先科技成果 奖 xff0c 小米公司 新一代Kaldi 项目 xff0c 凭借全自研的创新成果和突出的社会价值 xff0c 获得评委会一致认可 xf
  • 小米AI实验室4篇论文入选语音技术顶会INTERSPEECH 2022

    滴滴 重磅消息新鲜出炉 xff01 xff01 全球语音领域顶级会议 INTERSPEECH 2022公布了论文入选名单 xff0c 小米 AI 实验室4篇论文被接收 INTERSPEECH 是由国际语音通信协会ISCA组织的语音领域的顶级
  • 干货 | 足式机器人运动控制发展方向——轨迹优化

    运动控制技术的进步使得足式机器人的运动能力更强 xff0c 而近来轨迹优化作为主流学术研究方向 xff0c 能够为足式机器人运动控制的发展提供可能的指引 本期技术干货 xff0c 我们邀请到了小米工程师徐喆 xff0c 向我们介绍足式机器人
  • GPS定位

    链接 天地图 xff0c 免费的 xff0c API开放的地图定位系统 链接 RTK和GPS定位 链接 rtk 精确定位 简介 链接 GPS RTK PPK三种定位技术的原理及应用 双频定位 xff0c 双频信号协同工作 xff0c 提供亚
  • 清华软件论坛 | 推动移动传感的极限:AIoT时代的智能健康和数字家庭

    清华软件论坛 xff0c 是在清华大学软件学院成立20周年之际创立的 xff0c 旨在探索软件科学基础理论 创新软件前沿技术 思辩软件工程方法 促进学科交叉融合 xff0c 持续提升清华软件发展水平 xff0c 清华大学软件学院打造 清华软
  • 国家级表彰 | 小米人工智能实验室声学语音团队荣获“全国工人先锋号”荣誉称号...

    小米人工智能实验室声学语音团队代表王育军接受央视采访 4月27日 xff0c 小米集团技术委员会人工智能实验室声学语音团队荣获由中华全国总工会颁发的 全国工人先锋号 荣誉称号 颁奖典礼在人民大会堂举行 xff0c 小米声学语音技术总监王育军
  • Tech Talk | 还原照片不同亮度范围细节——RAW HDR技术

    拍照时 xff0c 你是否遇到过这些情况呢 xff1f 拍摄的成片暗区过暗 xff0c 高亮区域过曝 逆光拍摄中 xff0c 会出现 鬼影 暗部噪声偏大导致图像出现瑕疵 照片的高光和暗区细节得总是不到完美呈现 xff0c 这是所有拍摄设备都
  • 技术人文 | 你的加入,会为更多人争取避险时间

    如图文未加载 xff0c 请刷新后重试 今天是第15个全国防灾减灾日 xff0c 不仅要提高意识预防于未然 xff0c 其实你也可以贡献一份力量 2019年 xff0c 小米与成都高新减灾所共同探索 合作研发 xff0c 发布了全球首个操作
  • 一篇文章搞懂HDFS管理权限

    小米的HDFS承载了公司内多个部门几十条业务线的几十PB数据 xff0c 这些数据有些是安全级别非常高的用户隐私数据 xff0c 也有被广泛被多个业务线使用的基础数据 xff0c 不同的业务之间有着复杂的数据依赖 因此 xff0c 如何管理