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

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据生态安全框架的实现原理与最佳实践(上篇)

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;
相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
3月前
|
存储 SQL 分布式计算
MaxCompute 聚簇优化推荐原理
基于历史查询智能推荐Clustered表,显著降低计算成本,提升数仓性能。
258 4
MaxCompute 聚簇优化推荐原理
|
3月前
|
机器学习/深度学习 传感器 监控
吃得安心靠数据?聊聊用大数据盯紧咱们的餐桌安全
吃得安心靠数据?聊聊用大数据盯紧咱们的餐桌安全
139 1
|
7月前
|
SQL 安全 大数据
大数据时代的安全挑战——数据泄露如何悄然发生?
大数据时代的安全挑战——数据泄露如何悄然发生?
314 18
|
7月前
|
Cloud Native 大数据 Java
大数据新视界--大数据大厂之大数据时代的璀璨导航星:Eureka 原理与实践深度探秘
本文深入剖析 Eureka 在大数据时代分布式系统中的关键作用。涵盖其原理,包括服务注册、续约、发现及自我保护机制;详述搭建步骤、两面性;展示在大数据等多领域的应用场景、实战案例及代码演示。Eureka 如璀璨导航星,为分布式系统高效协作指引方向。
|
10月前
|
存储 SQL 安全
大数据的隐私与安全:你的一举一动,都在“裸奔”?
大数据的隐私与安全:你的一举一动,都在“裸奔”?
251 15
|
10月前
|
机器学习/深度学习 数据采集 分布式计算
大数据分析中的机器学习基础:从原理到实践
大数据分析中的机器学习基础:从原理到实践
446 3
|
11月前
|
数据采集 人工智能 分布式计算
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
550 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
|
11月前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
484 8
|
12月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
427 2
|
存储 安全 大数据
大数据隐私保护:用户数据的安全之道
【10月更文挑战第31天】在大数据时代,数据的价值日益凸显,但用户隐私保护问题也愈发严峻。本文探讨了大数据隐私保护的重要性、面临的挑战及有效解决方案,旨在为企业和社会提供用户数据安全的指导。通过加强透明度、采用加密技术、实施数据最小化原则、加强访问控制、采用隐私保护技术和提升用户意识,共同推动大数据隐私保护的发展。
1288 3

热门文章

最新文章