大数据生态安全框架的实现原理与最佳实践(上篇) 2

简介: 大数据生态安全框架的实现原理与最佳实践(上篇)

2.3 HDFS认证详解-groups 如何确定

  • 确定了user后,如何确定其 groups 是由参数 hadoop.security.group.mapping 决定的。
  • 该参数的默认值是 org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback;
  • Hadoop also supports special group mapping mechanisms through LDAP and composition of LDAP and operating system group name resolution, which require additional configurations
  • 在默认配置下,确定的groups的值,等同于LINUX 下 bash –c groups/id –gn/id -Gn

640.png

640.png

2.4 HDFS认证详解-相关参数

相关参数有:

  • hadoop.security.authentication
  • hadoop.security.group.mapping
  • hadoop.proxyuser.xxx.groups
  • hadoop.proxyuser.xxx.hosts

3. HDFS 授权详解

HDFS 的 authorization 鉴权, 可以通过配置参数 hadoop.security.authorization 为 TRUE 或 FALSE,从而打开或关闭鉴权,该参数是服务端参数,不能在客户端覆盖,默认为 FALSE。

需要注意的是,当该参数配置为 FALSE 时,即意味着不对用户的操作进行权限校验,这在生产环境是非常危险的,因为任何用户都可以进行任何操作,比如读取修改或删除其它用户的数据,所以我们强烈建议配置该参数为TRUE从而开启鉴权。(不开启用户权限鉴权的话,用户身份认证也就没有什么意义了)。


3.1 HDFS授权详解-posix mode

HDFS在授权上,大体上遵循了类 linux文件系统的 posix 模型机制:

  • 每个文件和目录都有对应的 owner/group, 并可以针对 owner/group/others 分别进行授权;
  • 对文件来说,读文件需要 R 权限,写或追加写需要 W 权限,X 权限没有意义(因为hdfs文件没有所谓的executables files 可执行文件);
  • 对目录来说,查看目录下内容需要R权限,在该目录下创建和删除文件或目录需要 W 权限,访问该目录下的文件或目录需要x权限;
  • Hdfs 可以对目录设置 sticky bit,防止目录下文件被误删除:The sticky bit can be set on directories, preventing anyone except the superuser, directory owner or file owner from deleting or moving the files within the directory.
  • HDFS 对文件设置 sticky bit 没有任何效果:Setting the sticky bit for a file has no effect.
  • 不同于标准 POSIX 模型的一点是,hdfs 的目录和文件都没有 setuid/setgid bits; (hdfs文件没有所谓的executables files 可执行文件);
  • 创建目录或文件时,其默认的 owner/group 是这样决定的:its owner is the user identity of the client process, and its group is the group of the parent directory (the BSD rule);
  • 创建文件或目录时,其默认的 MODE 是由 umask 参数决定的: fs.permissions.umask-mode
  • Umask 默认的配置是 022,此时默认所有用户对所有目录和文件都有读权限:this is typically 755 for new directories and 644 for new files:022 is octal for u=rwx,g=r-x,o=r-x in symbolic;
  • Umask 常见的配置还有007和077,其中后者默认阻止了非owner用户对所有目录和文件的访问权限,是最为严苛的授权;(007 is octal for“u=rwx,g=rwx,o=”in symbolic;)

640.png

3.2 HDFS授权详解-superuser

  • HDFS 有超级用户super-user 的概念:启动 namenode 进程的用户即是超级用户,HDFS的超级用户拥有所有权限,类似 LINUX 的超级用户 ROOT;(超级用户是动态的,不需要通过参数配置,谁启动 namenode 谁就是超级用户,该用户一般是 hdfs)
  • HDFS 有超级用户组 superusergroup 的概念: 超级用户组下的所有用户都是超级用户,超级用户组只能是一个而不能是多个,通过参数 dfs.permissions.superusergroup 进行配置,默认是 supergroup;
  • HDFS Web Server 用户的身份: 需要通过参数进行配置,比如:dfs.web.ugi = webuser,webgroup ( 新版本是 hadoop.http.staticuser.user),当该用户不是超级用户时,通过 web server 可能不能查看到文件系统的所有内容

640.png


3.3 HDFS授权详解-posix acl

除了传统的 POSIX 权限模型,HDFS 也支持 POSIX ACLs (Access Control Lists);

  • 通过 ACL,可以对目录或文件的 owner/group 之外的特定用户或用户组,授予不同于 others 的特定的权限,相比 owner/group/others 的粗粒度的授权,粒度更细也更为灵活;
  • ACL 分为两种:access acl 和 default acl,其中前者用来在访问文件或目录内容时进行权限校验,后者用来确定在配置了 ACL 的目录下创建子目录或子文件时,这些自目录子文件的 access acl 和 default acl; (只有目录才有default ACL)
  • 对特定的目录或文件,可以声明的 ACL entry 的个数是由上限的,最大为64:The maximum number is 32 for access and 32 for default entries which is 64 in total.
  • ACL 对 namenode 造成了额外的压力:A file with an ACL incurs an additional cost in memory in the NameNode compared to a file that has only permission bits.
  • 最佳实践是:Best practice is to rely on traditional permission bits to implement most permission requirements, and define a smaller number of ACLs to augment the permission bits with a few exceptional rules.
  • ACL 常见命令:
  • 查看 acl: hdfs dfs -ls :针对设置了ACL的文件或目录,注意输出中有‘+’ character
  • 查看 acl:hdfs dfs -getfacl [-R]
  • 设置 acl: hdfs dfs -setfacl [-R] [-b |-k -m |-x <acl_spec> ] |[--set <acl_spec> ]


  • 对HIVE外表配置ACL,示例命令如下: (access acl+default acl)
  • hdfs dfs -getfacl /user/xx/dap/hive/liming2
  • hdfs dfs -setfacl -R -m group:hive:rwx /user/xx/dap/hive/liming2
  • hdfs dfs -setfacl -m default:group:hive:rwx /user/xx/dap/hive/liming2

640.png

  • ACL 示例输出如下:(Each ACL entry names a specific user or group and grants or denies read, write and execute permissions for that specific user or group)

640.png

3.4 HDFS授权详解-鉴权-hdfs native

  • HDFS在鉴权上,通过参数 dfs.permissions.enabled 来进行控制,可已配置鉴权也可以配置不鉴权 false/true;
  • 该参数默认是 true,当该参数配置为 false 时,将不会进行任何 permission checking;
  • 更改该参数的值,不会改变文件和目录的 mode/owner/group/acl等;
  • 该参数是服务端参数,不能在客户端覆盖!

3.5 HDFS授权详解-鉴权-ranger

除了使用 hdfs 的 native 鉴权机制,还可以结合使用 ranger 的权限机制:

  • Apache Ranger 基于插件机制,提供了对 Hadoop 生态众多组件的集中的权限管控机制:a centralized security administration solution for Hadoop;
  • Ranger hdfs 插件是对 hdfs native permission model 的补充:Ranger plugin for HDFS checks for Ranger policies and if a policy exists, access is granted to user. If a policy doesn‘t exist in Ranger, then Ranger would default to native permissions model in HDFS (POSIX or HDFS ACL).

640.png

3.6 HDFS授权详解-proxy代理机制

Hadoop 还有代理用户 proxyuser 的概念,一般 hue/hive/sqoop/flume 等服务的系统用户都支持代理机制。

  • 所谓代理机制,是由当前的系统用户/真实用户realuser/超级用户,如 hive/sqoop 等服务的进程对应的用户,代理最终的业务用户比如dap/cic等,对底层的 hdfs进行访问;
  • 经过代理后,hdfs 进行权限校验时,是针对最终业务用户比如 hundsun/dap/cic,进行权限校验;
  • 没有使用代理时,hdfs 进行权限校验时,是针对系统用户比如 hive/hue/sqoop,进行权限校验;

640.png

640.png

  • 当指定了环境变量或系统参数 HADOOP_PROXY_USER 时,HADOOP 会自动使用代理机制,且被代理用户就是该环境变量/系统参数只当的值,所以可以通过以下方式指定被代理的业务用户:
  • System.setProperty(UserGroupInformation.HADOOP_PROXY_USER, "randomUser");
  • Export HADOOP_PROXY_USER = randomUser;


640.png640.png

  • 当然也可以在代码中,显示指定代理用户:UserGroupInformation.createProxyUser("randomUser", UserGroupInformation.getLoginUser());

640.png

640.png

hue/hive/sqoop/flume等服务的系统用户,使用代理机制时,需要进行配置,相关的配置参数如下:

  • hadoop.proxyuser.xxx.groups
  • hadoop.proxyuser.xxx.hosts

640.png


3.7 大数据平台 CDH/HDP/CDP 与 TDH, HDFS 授权与鉴权的差异

TDH 中,通过安全组件 Guardian 来管理各个组件的安全:

  • Guardian 底层整合了 kerberos 和 ApacheDS来做认证;
  • 同时Guardian 还通过 hdfs 插件机制,支持了对 hdfs 的目录和文件进行授权和鉴权,有点类似于 ranger 的插件机制;

640.png

通过访问HDFS目录时的底层日志,我们可以大胆推测,guardian hdfs plug,和 ranger hdfs plugin 的实现细节,还是有所区别的:

  • Guardian是先进行hdfs posix 的权限校验,如果校验成功就允许执行对应的hdfs操作,只有在hdfs posix 权限校验失败时,才会查看 guardian 配置的权限;
  • 如果guardian权限校验也是失败的,就阻止对应的hdfs 操作;如果guardian权限校验成功,就允许执行对应的hdfs操作;(底层是切换使用了 hdfs 超级用户来进行实际的 hdfs 操作)

640.png

640.png


  • 通过查看反编译的 Guardian hdfs plugin 的源码,印证了我们上述推测:其底层使用了java 的 try-catch 捕获了 HDFS native 权限校验抛出的异常,并进一步通过guardian进行权限校验:

640.png

3.8 HDFS授权详解-Best practices for HDFS authorization

权限管理最佳实践:

  • 通过配置 umask 控制所有新创建的目录和文件的 posix mode, umask 默认022,常用的还有 007,077;
  • 如果需要更改特定目录的权限,应该遵循权限最小化原则,按照 posix mode 对目录和文件的 owner/group/other 进行赋权;
  • 如果需要对特定目录赋予特定用户的权限,应该遵循权限最小化原则,通过 posix acl 对 posix mode 进行补充;
  • 当结合ranger hdfs 插件对hdfs进行权限管理时,ranger 推荐的最佳实践:
  • Change HDFS umask to 077
  • Identify directory which can be managed by Ranger policies
  • Identify directories which need to be managed by HDFS native permissions -Enable Ranger policy to audit all records

3.9 HDFS授权详解-相关参数

总结下,HDFS授权相关参数有:

  • hadoop.security.authorization
  • dfs.permissions.enabled = true:If yes use the permissions system as described here. If no, permission checking is turned off, but all other behavior is unchanged;
  • dfs.web.ugi = webuser,webgroup;
  • dfs.permissions.superusergroup = supergroup:The name of the group of super-users;
  • fs.permissions.umask-mode = 0022;
  • dfs.cluster.administrators = ACL-for-admins;
  • dfs.namenode.acls.enabled = true: Set to true to enable support for HDFS ACLs (Access Control Lists). By default, ACLs are enabled. When ACLs are disabled, the NameNode rejects all attempts to set an ACL;
  • dfs.namenode.posix.acl.inheritance.enabled: Set to true to enable POSIX style ACL inheritance. Enabled by default. When it is enabled and the create request comes from a compatible client, the NameNode will apply default ACLs from the parent directory to the create mode and ignore the client umask. If no default ACL is found, it will apply the client umask;
  • hadoop.proxyuser.xxx.groups/hosts;
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
1月前
|
人工智能 安全 算法
AI与大数据:智慧城市安全的护航者与变革引擎
AI与大数据:智慧城市安全的护航者与变革引擎
24 1
|
25天前
|
机器学习/深度学习 分布式计算 数据挖掘
阿里云 MaxCompute MaxFrame 开启免费邀测,统一 Python 开发生态
阿里云 MaxCompute MaxFrame 正式开启邀测,统一 Python 开发生态,打破大数据及 AI 开发使用边界。
307 1
|
1月前
|
安全 算法 大数据
漫谈大数据时代的个人信息安全(四)——“位所欲为”
漫谈大数据时代的个人信息安全(四)——“位所欲为”
|
1月前
|
安全 算法 大数据
漫谈大数据时代的个人信息安全(三)——“点赞之交”
漫谈大数据时代的个人信息安全(三)——“点赞之交”
|
1月前
|
机器学习/深度学习 人工智能 安全
漫谈大数据时代的个人信息安全(二)——“逢脸造戏”
漫谈大数据时代的个人信息安全(二)——“逢脸造戏”
|
1月前
|
安全 算法 大数据
漫谈大数据时代的个人信息安全(一)——“按图索骥”
漫谈大数据时代的个人信息安全(一)——“按图索骥”
|
2月前
|
SQL 并行计算 大数据
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
关于Flink服务的搭建与部署,由于其涉及诸多实战操作而理论部分相对较少,小编打算采用一个独立的版本和环境来进行详尽的实战讲解。考虑到文字描述可能无法充分展现操作的细节和流程,我们决定以视频的形式进行分析和介绍。因此,在本文中,我们将暂时不涉及具体的搭建和部署步骤。
497 3
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
|
4月前
|
大数据 Scala
大数据生态思维导图____2021最新最全Scala语法思维导图!(待更新)
大数据生态思维导图____2021最新最全Scala语法思维导图!(待更新)
17 0
|
4月前
|
分布式计算 大数据 Spark
大数据生态思维导图____2021最新最全Spark生态圈思维导图!
大数据生态思维导图____2021最新最全Spark生态圈思维导图!
21 0
|
4月前
|
人工智能 安全 数据库
AI大数据分析对个人安全隐私的保护非常重要
随着AI和大数据分析的迅速发展,个人安全隐私的保护变得越来越重要。

热门文章

最新文章