1.hadoop安全机制历史

在Hadoop1.0.0或者CDH3 版本之前, hadoop并不存在安全认证一说。默认集群内所有的节点都是可靠的,值得信赖的。用户与HDFS或者M/R进行交互时并不需要进行验证。导致存在恶意用户伪装成真正的用户或者服务器入侵到hadoop集群上,恶意的提交作业,修改JobTracker状态,篡改HDFS上的数据,伪装成NameNode 或者TaskTracker接受任务等。 尽管在版本0.16以后, HDFS增加了文件和目录的权限,但是并没有强认证的保障,这些权限只能对偶然的数据丢失起保护作用。恶意的用户可以轻易的伪装成其他用户来篡改权限,致使权限设置形同虚设。不能够对Hadoop集群起到安全保障。

在Hadoop1.0.0或者CDH3版本后,加入了Kerberos认证机制。使得集群中的节点就是它们所宣称的,是信赖的。Kerberos可以将认证的密钥在集群部署时事先放到可靠的节点上。集群运行时,集群内的节点使用密钥得到认证。只有被认证过节点才能正常使用。企图冒充的节点由于没有事先得到的密钥信息,无法与集群内部的节点通信。防止了恶意的使用或篡改Hadoop集群的问题,确保了Hadoop集群的可靠安全。

2.Hadoop面临的安全问题

2.1  用户到服务器的认证问题

1)NameNode,,JobTracker上没有用户认证

用户可以伪装成其他用户入侵到一个HDFS 或者MapReduce集群上。

2)DataNode上没有认证

Datanode对读入输出并没有认证。导致如果一些客户端如果知道block的ID,就可以任意的访问DataNode上block的数据

3)JobTracker上没有认证

可以任意的杀死或更改用户的jobs,可以更改JobTracker的工作状态

2.2  服务器到服务器的认证问题

1)没有DataNode, TaskTracker的认证

用户可以伪装成datanode ,tasktracker,去接受JobTracker, Namenode的任务指派。

3.安全机制

3.1Java的安全机制

详细介绍请参考JAAS:灵活的Java安全机制

简单来说,用户首先使用LoginContext的接口进行登录验证。LoginContext可以配置使用不同的验证协议。验证通过后,用户得到一个subject,里面包含凭证,公私钥等。之后,在涉及到需要进行权限认证的地方(例如,资源访问,外部链接校验,协议访问等),使用doAs函数()代替直接执行。

这样,java的权限认证就和用户的业务逻辑分离了。

//一段典型的代码如下

LoginContext lc = new LoginContext("MyExample");

try {

lc.login();

} catch (LoginException) {

// Authentication failed.

}

// Authentication successful, we can now continue.

// We can use the returned Subject if we like.

Subject sub = lc.getSubject();

Subject.doAs(sub, new MyPrivilegedAction());

3.2Kerberos认证协议

Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。

简单介绍

使用Kerberos时,一个客户端需要经过三个步骤来获取服务:

认证:客户端向认证服务器发送一条报文,并获取一个含时间戳的Ticket-Granting Ticket(TGT)。

授权:客户端使用TGT向Ticket-Granting Server(TGS)请求一个服务Ticket。

服务请求:客户端向服务器出示服务Ticket,以证实自己的合法性。该服务器提供客户端所需服务,在Hadoop应用中,服务器可以是namenode或jobtracker。

为此,Kerberos需要The Key Distribution Centers(KDC)来进行认证。KDC只有一个Master,可以带多个slaves机器。slaves机器仅进行普通验证。Mater上做的修改需要自动同步到slaves。

另外,KDC需要一个admin,来进行日常的管理操作。这个admin可以通过远程或者本地方式登录。

4.Hadoop  Kerberos安全机制安装

安装这里就不讲解了,网上资料一大堆

5.kerberos安装后,hbase客户端链接的变化

5.1 客户端链接kerberos的准备

一台机器叫hbaseclient.com,首先在其上安装kerberos客户端,安装后连接kadmin工具创建用户test,并生成keytab文件

kinit admin/admin

kadmin: addprinc -randkey test

kadmin: xst -k test.keytab test

5.2 未安装kerberos之前,hbase客户端链接代码

public class Test1 {

public static void main(String[] args) throws IOException {

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "zookeeperserver1,zookeeperserver2,zookeeperserver3");

conf.set("hbase.zookeeper.property.clientPort", "2181");

HTable t = new HTable(conf, "test");

Scan s = new Scan();

ResultScanner rs = t.getScanner(s);

try{

for(Result r:rs){

for(Cell cell:r.rawCells()){

System.out.println("Row: "+new String(CellUtil.cloneRow(cell)));

System.out.println("CF: "+new String(CellUtil.cloneFamily(cell)));

System.out.println("Qualifier: "+new String(CellUtil.cloneQualifier(cell)));

System.out.println("Value: "+new String(CellUtil.cloneValue(cell)));

}

}

}finally{

t.close();

}

System.out.println("Done!");

}

5.3 安装kerberos之后,hbase客户端链接代码

public class Test1 {

public static void main(String[] args) throws IOException {

Configuration conf = HBaseConfiguration.create();

conf.set("hbase.zookeeper.quorum", "zookeeperserver1,zookeeperserver2,zookeeperserver3");

conf.set("hbase.zookeeper.property.clientPort", "2181");

conf.set("hadoop.security.authentication", "kerberos");

UserGroupInformation.setConfiguration(conf);

UserGroupInformation.loginUserFromKeytab("hbaseclient.com", "/home/test/test.keytab");

HTable t = new HTable(conf, "test");

Scan s = new Scan();

ResultScanner rs = t.getScanner(s);

try{

for(Result r:rs){

for(Cell cell:r.rawCells()){

System.out.println("Row: "+new String(CellUtil.cloneRow(cell)));

System.out.println("CF: "+new String(CellUtil.cloneFamily(cell)));

System.out.println("Qualifier: "+new String(CellUtil.cloneQualifier(cell)));

System.out.println("Value: "+new String(CellUtil.cloneValue(cell)));

}

}

}finally{

t.close();

}

System.out.println("Done!");

}

6.spring-data-hadoop中如何使用kerberos

6.1 kerberos安装之前配置

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:hdp="http://www.springframework.org/schema/hadoop"

xmlns:beans="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/hadoop

http://www.springframework.org/schema/hadoop/spring-hadoop.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd">

fs.defaultFS=hdfs://master:9000/

6.2 kerberos安装之后配置

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:hdp="http://www.springframework.org/schema/hadoop"

xmlns:beans="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/hadoop

http://www.springframework.org/schema/hadoop/spring-hadoop.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd">

fs.defaultFS=hdfs://master:9000/

hadoop.security.authentication=kerberos

hadoop.security.authorization=true

keyTab=/home/test/test.keytab

principal=hbaseclient.com

7.以上配置是参见hadoop-common-2.6.0.jar中源码org.apache.hadoop.security.UserGroupInformation.java得知

8.参考资料

hbase1.1.1 连接集群_Hadoop2.7.1+Hbase1.1.2集群环境搭建(10) hadoop hbase kerberos相关推荐

  1. 大数据介绍、集群环境搭建、Hadoop介绍、HDFS入门介绍

    大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 文章目录 大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 1.课前资料 2.课程整体介绍 3.大数据介绍 3.1 什么是大数 ...

  2. 小知识点:ARM 架构 Linux 大数据集群基础环境搭建(Hadoop、MySQL、Hive、Spark、Flink、ZK、Kafka、Nginx、Node)

      换了 M2 芯片的 Mac,以前 x86 版本的 Linux 大数据集群基础环境搭建在 ARM 架构的虚拟机集群上有些用不了了,现在重新写一份基于 ARM 架构的,少数不兼容之外其他都差不多,相当 ...

  3. 三菱PLC通过RS485串口连接维特智能Modbus协议角度姿态传感器(1)——环境搭建

    目录导航: (1)--环境搭建 (2)--单传感器单角度报警 (3)--传感器校准 (4)--多传感器多角度报警 背景介绍 最近因项目需要,要使用PLC来获取设备倾斜角度并发出报警,经仔细研究调研,P ...

  4. 大数据第一天 Hadoop01-入门集群环境搭建

    Hadoop01-入门&集群环境搭建 今日内容 ​ Hadoop的介绍 ​ 集群环境搭建准备工作 ​ Linux命令和Shell脚本增强 ​ 集群环境搭建 大数据概述 ​ 大数据: 就是对海量 ...

  5. Hadoop01-入门集群环境搭建

    文章目录 大数据概述 1:Hadoop介绍 问题一: 大文件怎么存储? 问题二: 大数据怎么计算? 问题三: 如何将这些计算任务跑在集群中? Hadoop 的组成 2:环境搭建 创建虚拟机 1. 网络 ...

  6. Hadoop 2.x 完全分布式HA集群环境搭建

    Hadoop 2.x 完全分布式HA集群环境搭建 目录 Hadoop 2.0 环境搭建 前提:环境准备 第一步:修改hadoop-env.sh配置文件,配置好JAVA_HOME环境变量 第二步:修改h ...

  7. hbase1.1.1 连接集群_HBase-1.0.1学习笔记(一)集群搭建

    鲁春利的工作笔记,好记性不如烂笔头 如下配置参照了http://hbase.apache.org/book.html,详见:hbase-1.0.1.1/docs/book.html 环境配置 1.安装 ...

  8. linux集群系列(4) --- LVS之负载均衡集群 --- 持久连接

    一.简介 1.1. lvs的持久连接简介 先说说lvs的持久连接能干什么:无论你选择lvs的何种转发策略,如果你想确定来自某一个客户端的所有连接均返回到同一台Real Server,就需要LVS的持久 ...

  9. window安装python3后怎么用pyspark_pyspark:连接spark集群Windows环境搭建

    软件 1.anaconda(python3.6) 2.spark-2.4.3-bin-hadoop2.7(spark版本要和集群上的一样) 3.JDK1.8 python环境配置 pip instal ...

最新文章

  1. Android自定义View:MeasureSpec的真正意义与View大小控制
  2. 简单了解request与response
  3. c语言主程序子程序流程图,c语言超经典矩阵式键盘的接法,流程图和扫描程序
  4. 混合云部署MySQL集群_数据库混合云解决方案
  5. mingw编译wxwidgets
  6. ArcGis10安装步骤
  7. 使用 nohup 设置后台进程
  8. 可在网络不好的环境下运行的ENet示例程序
  9. python函数案例名片管理器_python实现名片管理器的示例代码
  10. c++之EXTERN详细讲解
  11. iOS通过CIFilter对图像进行滤镜处理
  12. matlab 2017a界面,超详细干货:matlab2017a与 CCS 6.2联调设置
  13. 全球及中国柔性石材行业研究及十四五规划分析报告
  14. js 区分中英文输入法(如中英文括号)
  15. win10 labelme 使用记录
  16. 图形处理之网格平滑vtkSmoothPolyDataFilter
  17. DARKHOLE_1攻略
  18. 两年工作经验的后端开发的工作方法小结
  19. Codeforces-1610 C: Keshi Is Throwing a Party
  20. php网站页面显示源码,用PHP显示网站的源代码

热门文章

  1. python爬虫开发 从入门到实战 pdf 谢乾坤_python字符串和整数相互转换的实例分享...
  2. 循环语句与条件语句_在PHP中混合条件语句和循环
  3. Java SimpleTimeZone setStartRule()方法与示例
  4. Spyder:Python中机器学习的强大武器
  5. SpringBoot 如何统一后端返回格式?老鸟们都是这样玩的!
  6. Redis从入门到精通|干货篇
  7. MySQL 快速创建千万级测试数据
  8. QT5动态创建多个按钮控件并关联信号槽函数
  9. EntityFramework进阶——Entity Splitting和Table Splitting
  10. C++PrimerPlus学习——第十七章编程练习