Hadoop集群的权限认证

Hadoop Kerberos

一、背景

在Hadoop1.0.0或者CDH3 版本之前, hadoop并不存在安全认证一说。默认集群内所有的节点都是可靠的,值得信赖的。
导致存在恶意用户伪装成真正的用户或者服务器入侵到hadoop集群上,恶意的提交作业,修改JobTracker状态,篡改HDFS上的数据,伪装成NameNode 或者TaskTracker接受任务等。

二、安全问题

2.1 用户到服务器的认证问题
  • NameNode上没有用户认证:用户可以伪装成其他用户入侵到一个HDFS或者MapReduce集群上
  • DataNode对读入输出没有认证:如果一些客户端知道blockID,就可以任意访问DataNode上block的数据
  • JobTracker上没有认证:可以任意杀死或更改用户的jobs,可以更改JobTracker的工作状态
2.2 服务器到服务器的认证问题

没有DataNode,TaskTracker的认证,用户可以伪装成datanode,tasktracker去接受JobTracker,NameNode的任务指派

三、kerberos解决的安全认证问题

kerberos实现的是机器级别的安全认证。

3.1 解决服务器到服务器的认证

由于kerberos对集群里的所有机器都分发了keytab,相互之间使用密钥进行通信,确保不会冒充服务器的情况。集群中的机器就是它们所宣称的,是可靠的。防止了用户伪装成Datanode,Tasktracker,去接受JobTracker,Namenode的任务指派。

3.2 解决client到服务器的认证

Kerberos对可信任的客户端提供认证,确保他们可以执行作业的相关操作。防止用户恶意冒充client提交作业的情况。用户无法伪装成其他用户入侵到一个HDFS 或者MapReduce集群上。用户即使知道datanode的相关信息,也无法读取HDFS上的数据,用户无法发送对于作业的操作到JobTracker上

3.3 对用户级别上的认证并没有实现

无法控制用户提交作业的操作。不能够实现限制用户提交作业的权限。不能控制哪些用户可以提交该类型的作业,哪些用户不能提交该类型的作业。这些由ACL模块控制(参考)

四、Kerberos工作原理介绍

4.1 基本概念

Kerberos由三个成员组成的

Key Distribution Center(KDC)钥匙分发中心,核心组件,类似于CA,kdc的端口默认为88。

Application Server(Network services)应用程序。

Client users客户端。

Principals.代理人,角色。

一个最基本的单位是Principal

Ticket:票据,用户用它来向服务器证明自己的身份,包括客户标识、会话密钥、时间戳。

AS (Authentication Server): 认证服务器

TGS(Ticket Granting Server): 许可证服务器
Kerberos

Kerberos是一个用于鉴定身份(authentication)的协议, 它采取对称密钥加密(symmetric-key cryptography),这意味着密钥不会在网络上传输。在Kerberos中,未加密的密码(unencrypted password)不会在网络上传输,因此攻击者无法通过嗅探网络来偷取用户的密码。

Kerberos利用对称加密和受信任的第三方(即KDC, key distribution center)来鉴别要求使用网络服务的用户的身份。所有有KDC和secondary KDC管理的主机构成了一个域(realm)。

当一个用户的身份通过了KDC的验证后,KDC会向该用户发送一个证书/票据(该证书/票据是与这次会话绑定的),其他kerberized services会在该用户的主机上搜索该ticket,而不是要求用户使用密码来验证他的身份。

Principal

一个用户会以一个独一无二的身份来被KDC认证,该身份被称为principal。
一个Principal由三个部分组成:primary, instance以及realm,其组成形式为primary/instance@realm。

primary: 用户/服务名

instance: 用于区分属于同一个user或者service的多个principals,该项为optional;

realm: kerberos的域,定义了一组principals
4.2 认证详细原理

Kerberos实际上一个基于Ticket的认证方式。
Client想要获取Server端的资源,先得通过Server的认证;而认证的先决条件是Client向Server提供从KDC获得的一个有Server的Master Key进行加密的Session Ticket(Session Key + Client Info)。
可以这么说,Session Ticket是Client进入Server领域的一张门票。而这张门票必须从一个合法的Ticket颁发机构获得,这个颁发机构就是Client和Server双方信任的KDC,同时这张Ticket具有超强的防伪标识:它是被Server的Master Key加密的。
对Client来说,获得Session Ticket是整个认证过程中最为关键的部分。

管理KDC服务器命令

# 登陆集群
ssh username@ip

# 获取集群root权限 
sudo -i 

# 登陆管理KDC服务器
kadmin.local

# 查看用户列表
listprincs

# 创建principal
add_principal principalName

# 删除principal
delete_principal principalName

使用kerberos命令

# 动态认证
kinit -kt /etc/security/keytabs/hdfs.keytab  hdfs

# 查看登陆状态
klist

# 退出
kdestroy

# beeline连接hive
beeline -u "jdbc:hive2://192.168.90.11:10000/default;principal=hive/cdh-master.dev.AAAA.local@HADOOP.COM"

kerberos和Ldap

Kerberos之前是使用crypt的加密算法加密的密码。密码还是在互联网上传输的。

Kerberos传输的是票(tickets)

  Secure network authentication system

  Based around credentials called tickets.基于对身份验证的方法实现验证,这种方式被成为票。

  Tickets secured by secret key encyption.票的安全是通过私钥加密的,因此Kerberos就是要保障票的安全

Kerberos是安全的网络认证系统,它是专门用来做认证的。

认证体系是由两部分组成的。

NSS提供账号。LDAP /etc/nsswitch.conf

PAM提供认证。Kerberos /etc/pam.d/system-auth

账户信息和密码信息都是有LDAP提供的。system-config-authentication

正常情况下是客户端访问服务由服务保障安全,但是现在客户端将请求发送给KDC,由KDC来保障服务的安全。

Ldap

LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。
LDAP支持TCP/IP。
LDAP目录以树状的层次结构来存储数据。
LDAP访问控制异常灵活和丰富。
在这里插入图片描述
访问控制
虽然LDAP并无访问控制的标准,但从一些草案中或是事实上LDAP产品的访问控制情况,我们不难看出:LDAP访问控制异常的灵活和丰富,在LDAP中是基于访问控制策略语句来实现访问控制的,这不同于现有的关系型数据库系统和应用系统,它是通过基于访问控制列表来实现的,无论是基于组模式或角色模式,都摆脱不了这种限制

而对于LDAP,用户数据管理和访问标识是一体的,应用不需要关心访问控制的实现。这是由于在LDAP中的访问控制语句是基于策略语句来实现的,无论是访问控制的数据对象,还是访问控制的主体对象,均是与这些对象在树中的位置和对象本身的数据特征相关。

在LDAP中,可以把整个目录、目录的子树、制定条目、特定条目属性集或符合某过滤条件的条目作为控制对象进行授权;可以把特定用户、属于特定组或所有目录用户作为授权主体进行授权;最后,还可以定义对特定位置(例如IP地址或DNS名称)的访问权。

使用Sentry的角色授权机制

通过Kerberos的hive账户可以在集群上以hive shell的形式进入hive中创建数据库和表
通过beeline连接Hive Server2来创建角色和组:
通过Kerberos认证进入beeline
通过LDAP的hive账号进入beeline,hive默认为admin权限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值