Hadoop 授权
身份验证仅仅是整体安全性故事的一部分,还需要一种方法来对经过身份验证的用户可以访问的操作或数据进行建模。以这种方式保护资源称为授权。
HDFS 授权
每次尝试访问HDFS中的文件或目录必须首先通过授权检查。HDFS 采用与 POSIX 兼容的文件系统通用的授权方案。权限由三个不同类别的用户管理:所有者,组和其他人。读取,写入和执行权限可以独立授予每个类。
对于文件,需要r权限才能读取文件,并且需要w权限才能写入或附加到文件中。对于目录,需要r权限来列出目录的内容,创建或删除文件或目录所需的w权限,并且需要x权限来访问目录的子目录。
用户身份
从 Hadoop 0.22 开始,Hadoop 支持两种不同的操作模式来确定用户的身份,由 hadoop.security.authentication 属性指定:
- simple 在这种操作模式下,客户端进程的身份由主机操作系统决定。在类 Unix 系统上,用户名等同于
whoami
。 - kerberos
在Kerberos操作中,客户端进程的身份由其Kerberos凭据确定。例如,在Kerberos环境中,用户可以使用kinit实用程序来获取Kerberos票证授权(TGT),并使用klist来确定其当前的主体。将Kerberos主体映射到HDFS用户名时,除了主要的所有组件都将被删除。例如,一个主体todd/foobar@CORP.COMPANY.COM将作为HDFS上的简单用户名todd。
不管操作模式如何,用户身份机制对于HDFS本身是外在的。HDFS中没有规定创建用户身份,建立组或处理用户凭据。
组映射
参考了《Hadoop Security Protecting Your Big Data Platform.pdf》。
虽然HDFS上的文件与所有者和组相关联,但Hadoop本身并不具有组的定义。从用户到组的映射是由操作系统或LDAP完成的。 一旦用户名被确定如上所述,组列表由组映射服务确定,由hadoop.security.group.mapping属性配置。
可以通过org.apache.hadoop.security.LdapGroupsMapping将替代实现直接连接到LDAP服务器来解析组列表。但是,只有在必需的组仅存在于LDAP中且不在Unix服务器上实现时,才应使用此提供程序。
hadoop在进行用户到用户组映射时,默认使用ShellBasedUnixGroupsMapping
的机制。这是一个基于shell的实现,类似于id -Gn
命令。
hadoop支持LdapGroupsMapping
的实现。但选择这种实现会覆盖本地系统中用户和用户组,你将失去原来定义的hadoop服务账号如hdfs
。所以建议将LDAP配置在操作系统级,使用类似SSSD的网络认证方案。
服务级别授权
Hadoop支持服务级别授权。授权策略保存在hadoop-policy.xml中。在该xml中可以定义“权力清单(如提交作业到集群的权力)”与用户(用户组)的对应。用户之间用逗号隔开,用户与用户组之间用空格隔开。以空格开始表示只定义了用户组,以空格结尾表示只定义了用户。
MapReduce 和 YARN 授权
无论MapReduce还是YARN都不需要控制数据访问,而是要控制集群资源,如CPU、内存、磁盘I/O和网络I/O。服务级别授权仅可以控制到特定协议(protocol),如谁可以提交一个作业到集群,但无法细致到控制集群资源的访问。
Hadoop支持将ACL定义到作业队列。这些ACL控制哪些用户可以提交作业到特定队列,还可以控制哪些用户可以管理(administer)队列。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论