hadoop的simple认证

目前Hadoop的稳定版本为1.2.1,我们的实验就在hadoop-1.2.1上进行

Hadoop 版本:1.2.1

OS 版本: Centos6.4

环境配置



























机器名

Ip地址

功能

用户

Hadoop1

192.168.124.135

namenode, datanode,

secondNameNode

jobtracker, tasktracer

hadoop

Hadoop2

192.168.124.136

Datanode, tasktracker

hadoop

Hadoop3

192.168.124.137

Datanode, tasktracker

hadoop

client

192.168.124.141

client

test

简单介绍一下hadoop安全需要哪些授权

先来看一下hdfs,当一个用户需要读写hadoop集群上的一个文件时,他通常先跟namenode联系,这就需要namenode的认证(org.apache.hadoop.hdfs.protocol.ClientProtocol定义了需要授权的接口),当namenode成功的认证client用户时,会返回给用户存储文件的datanode,client需要读写datanode上的数据时,同样也需要datanode的认证(org.apache.hadoop.hdfs.protocol.ClientDatanodeProtocol定义了需要授权的接口)。datanode和namenode之间也需要联系,datanode需要定时向namenode发送heartbeat和数据块的信息(org.apache.hadoop.hdfs.server.protocol.DatanodeProtocol定义了需要授权的接口)。Datanode之间也要发生数据交换,比如负载均衡,数据失效(org.apache.hadoop.hdfs.server.protocol.InterDatanodeProtocol定义了需要授权的接口)。Hadoop通常还需要一个secondnamenode来备份数据,因为secondnamenode定期向namenode发送数据请求,这中间也需要namenode的认证(org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol定义了需要授权的接口)。还有两个不常用的授权org.apache.hadoop.security.authorize.RefreshAuthorizationPolicyProtocol和org.apache.hadoop.security.RefreshUserMappingsProtocol,这两个授权时检查是否有刷新授权和用户的权限。

我们再来看一下mapred框架需要哪些授权

当一个client写好map和reduce以及其他相关的程序后,他首先向jobtracker提交job,这就需要得到jobtracker的授权(org.apache.hadoop.mapred.JobSubmissionProtocol定义了需要授权的接口)。提交的job经过jobtracker调度后,会合理的分配到tasktracker节点上,hadoop采用的是tasktracker向jobtracker发送heartbeat或其他信息的返回值来得到task的信息,而不是jobttracker将task推送给tasktracker,也就是说tasktracker需要jobtracker的认证(org.apache.hadoop.mapred.InterTrackerProtocol定义了需要授权的接口)。还有一个必要重要的授权,tasktracker在得到task后,不是直接在自己的进程里执行,而是启动一个叫做Child的子进程,tasktracker和这些Child子进程(通常最多只有两个map和两个reduce)需要交换数据。尽管linux存在很多种进程共享数据的方式,Child和tasktracker还是通过网络的方式来的,这个交换过程主要都是由Child发起的。所以这些Child也需要得到tasktracer的认证(org.apache.hadoop.mapred.TaskUmbilicalProtocol定义了需要授权的接口)。跟hdfs一样,mapredu中也有两个不常用的授权org.apache.hadoop.security.authorize.RefreshAuthorizationPolicyProtocol和org.apache.hadoop.security.RefreshUserMappingsProtocol,这两个授权时检查是否有刷新授权和用户的权限。

这些授权都在org.apache.hadoop.hdfs.HDFSPolicyProvider和org.apache.hadoop.mapred.MapReducePolicyProvider中定义,有兴趣的可能看看。

简单方式配置

conf/core-site.xml加上

<property>

<name>hadoop.security.authorization</name>

<value>true</value>

</property>

<property>

<name>hadoop.security.authentication</name>

<value>simple</value>

</property>

下面做一些简单测试,来验证一下配置

测试代码1

Configuration conf =
new Configuration();

conf.set("fs.default.name", "hdfs://hadoop1:9000");

FileSystem hdfs =
FileSystem.get(conf);

Path path =
new Path("/user/hadoop/input");

FileStatus[] files =
hdfs.listStatus(path);

for(int i=0; i< files.length; i++ ){

System.out.println(files[i].getPath());

}

控制台打出的结果

Exception in thread "main"
org.apache.hadoop.ipc.RemoteException: User test is not authorized for protocol
interface org.apache.hadoop.hdfs.protocol.ClientProtocol, expected client
Kerberos principal is null

at
org.apache.hadoop.ipc.Client.call(Client.java:1113)

at
org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:229)

at
com.sun.proxy.$Proxy1.getProtocolVersion(Unknown Source)

at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at
java.lang.reflect.Method.invoke(Method.java:601)

at
org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:85)

at
org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:62)

at
com.sun.proxy.$Proxy1.getProtocolVersion(Unknown Source)

at
org.apache.hadoop.ipc.RPC.checkVersion(RPC.java:422)

at
org.apache.hadoop.hdfs.DFSClient.createNamenode(DFSClient.java:183)

at
org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:281)

at
org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:245)

at
org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:100)

at
org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:1446)

at
org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:67)

at
org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:1464)

at
org.apache.hadoop.fs.FileSystem.get(FileSystem.java:263)

at
org.apache.hadoop.fs.FileSystem.get(FileSystem.java:124)

at test.TestHdfs.main(TestHdfs.java:18)

从上面的结果可以看出,client机器上的test用户没有权限访问hdfs系统。当我们将代码稍作改变,见测试代码2:

测试代码2

Configuration conf =
new Configuration();

conf.set("fs.default.name", "hdfs://hadoop1:9000");

//FileSystem hdfs = FileSystem.get(conf);

FileSystem hdfs =
FileSystem.get(new URI("hdfs://hadoop1:9000"), conf,
"hadoop");

Path path =
new Path("/user/hadoop/input");

FileStatus[] files =
hdfs.listStatus(path);

for(int i=0; i< files.length; i++ ){

System.out.println(files[i].getPath());

控制台打出的结果

hdfs://hadoop1:9000/user/hadoop/input/Balancer.java

hdfs://hadoop1:9000/user/hadoop/input/BalancerBandwidthCommand.java

hdfs://hadoop1:9000/user/hadoop/input/BlockAlreadyExistsException.java

hdfs://hadoop1:9000/user/hadoop/input/BlockCommand.java

很显然,使用hadoop用户来访问hdfs就没有任何问题。换一句话说,一旦客户端知道hadoop集群的用户,就可以执行hdfs的操作。这将会存在很大的安全隐患。至少应该有一个登录系统来提供一个认证功能。

目前常用的认证的方式有如下几种:

  1. 用户名/密码认证。这是一种常用方式,当用户数量比较多时,可以采用sql/ldap方式。这种方式通常性能较能。

  2. 机器地址过滤。
    这种方式通常有两种方式实行,黑名单列表:机器不能访问,白名单列表:机器能够访问。这种方式尽管配置简单,但是部署比较麻烦,通常表现在:一次修改到处部署。Hadoop实现了此种方式:dfs.hosts,dfs.hosts.exclude。但默认不使用

Kerboros方式,hadoop1后面都实现了这种方式,而且推荐使用这种方式。

时间: 2024-11-04 02:03:41

hadoop的simple认证的相关文章

hadoop开启Service Level Authorization 服务级认证-SIMPLE认证-过程中遇到的坑

背景描述: 最近在进行安全扫描的时候,说hadoop存在漏洞,Hadoop 未授权访问[原理扫描],然后就参考官方文档及一些资料,在测试环境中进行了开启,中间就遇到了很多的坑,或者说自己没有想明白的问题,在此记录下吧,这个问题搞了2天. 环境描述: hadoop版本:2.6.2 操作步骤: 1.想要开启服务级认证,需要在core-site.xml文件中开启参数hadoop.security.authorization,将其设置为true <property> <name>hadoo

hadoop培训管理员认证

[课程内容] 1.Hadoop分布式文件系统(HDFS) 2.YARN/MapReduce的工作原理 3.如何优化Hadoop机群所需要的硬件配置 4.搭建Hadoop机群所需要考虑的网络因素 5.Hadoop机群维护和控制 6.如何利用Hadoop配置选项进行系统性能调优 7.如何利用FairScheduler为多用户提供服务级别保障 8.Hadoop机群维护和监控 9.如何使用Flume从动态生成的文件加载到Hadoop 10.如何使用Sqoop从关系型数据加载数据 11.Hadoop生态系

Cloudera公司主要提供Apache Hadoop开发工程师认证

Cloudera Cloudera公司主要提供Apache Hadoop开发工程师认证(Cloudera CertifiedDeveloper for Apache Hadoop ,CCDH)和Apache Hadoop管理工程师认证(Cloudera CertifiedAdministrator for Apache Hadoop ,CCAH),更多相关信息,请参阅Cloudera公司官方网站. Hortonworks Hortonworks Hadoop培训课程是由Apache Hadoop

java远程连接hadoop,kerbers认证失败 报no supported default etypes for default_tkt_enctypes

@PostConstruct public void init() throws Exception { if (conn == null) { // System.setProperty("hadoop.home.dir", "G:/keyberos/hbase"); System.setProperty("java.security.krb5.conf",krbConf); conf = HBaseConfiguration.create()

kerboros安装

尽管前面尝试了hadoop的simple认证方式,这种方法不是特别安全,在介绍一下hadoop的kerberos方式之前,下面我们尝试一下kerberos. 首先介绍一下Kerboros安装 OS 版本: Centos6.4 Kerberos版本: krb5-1.10.3 环境配置 机器名 Ip地址 功能 安装模块 custom.lllcloud.com 192.168.124.133 Kerberos server krb5-libs krb5-server krb5-workstation

Hadoop-2.2.0中文文档——Common-Hadoop HTTP web控制台认证

简介 此文档描述了如何配置Hadoop HTTP web控制台,去要求用户认证. 默认地,Hadoop HTTP web控制台(JobTracker, NameNode, TaskTrackers 和 DataNodes)不需要任何认证就允许访问. 与Hadoop RPC相似, Hadoop HTTP web控制台可以被配置为需要使用HTTP SPNEGO协议认证(由FireFox或IE支持). 还有,Hadoop HTTP web控制台同等地支持Hadoop's Pseudo/Simple 认

Hadoop安全机制介绍

1.背景 1.1 共享Hadoop集群 当前大一点的公司都采用了共享Hadoop集群的模式,这种模式可以减小维护成本,且避免数据过度冗余,增加硬件成本.共享Hadoop是指:(1)管理员把研发人员分成若干个队列,每个队列分配一定量的资源,每个用户或者用户组只能使用某个队列中得资源:(2)HDFS上存有各种数据,有公用的,有机密的,不同的用户可以访问不同的数据. 共享集群类似于云计算或者云存储,面临的一个最大问题是安全. 1.2 几个概念 安全认证:确保某个用户是自己声称的那个用户. 安全授权:确

Hadoop高级编程之为Hadoop实现构建企业级安全解决方案

本章内容提要 ●    理解企业级应用的安全顾虑 ●    理解Hadoop尚未为企业级应用提供的安全机制 ●    考察用于构建企业级安全解决方案的方法 第10章讨论了Hadoop安全性以及Hadoop中用于提供安全控制的机制.当构建企业级安全解决方案(它可能会围绕着与Hadoop数据集交互的许多应用程序和企业级服务)时,保证Hadoop自身的安全仅仅是安全解决方案的一个方面.各种组织努力对数据采用一致的安全机制,而数据是从采用了不同安全策略的异构数据源中提取的.当这些组织从多个源获取数据,接

《Hadoop高级编程》之为Hadoop实现构建企业级安全解决方案

本章内容提要 ●    理解企业级应用的安全顾虑 ●    理解Hadoop尚未为企业级应用提供的安全机制 ●    考察用于构建企业级安全解决方案的方法 第10章讨论了Hadoop安全性以及Hadoop中用于提供安全控制的机制.当构建企业级安全解决方案(它可能会围绕着与Hadoop数据集交互的许多应用程序和企业级服务)时,保证Hadoop自身的安全仅仅是安全解决方案的一个方面.各种组织努力对数据采用一致的安全机制,而数据是从采用了不同安全策略的异构数据源中提取的.当这些组织从多个源获取数据,接