整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

9.6.1 Kerberos 和 Hadoop

hadoop 小红牛 28℃ 0评论

从宏观角度来看,使用Kerberos时,一个客户端要经过三个步骤才可以获 得服务。在各个步骤,客户端需要和一个服务器交换报文。

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

(2)授权。客户端使用TGT向票据授予服务器(Ticket-Granting Server, TGS)请求一个服务票据。

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

同时,认证服务器和票据授予服务器构成了密钥分配中心(Key Distribution Center, KDC)。整个过程如图9-2所示。

授权和服务请求步骤并非用户级別的行为:客户端系统会代替用户来执行
这些步骤。但是认证步骤通常需要由用户调用kinit命令来执行,该过程
会提示用户输入密码。需要指出的是,这并不意味着每次运行一个作业或访问HDFS的时候都会强迫用户键入密码,因为用户所申请到的TGT具备
一定的有效期。TGT有效期时默认值是10个小时(可以更新至一周)。更通用的做法是采用自动认证:即在登录操作系统的时候自动执行认证操作,
从而只需单次登录(single sign-on)到Hadoop。

如果用户不期望被提示输入密码(例如,运行一个无人值守的MapReduce作 业),则可以使用ktutil命令创建一个Kerberos的文件,该文件保 存了用户密码并且可以通过-t选项应用于kinit命令。

图片.png 

 

图9-2. Kerberos票据交换协议的三个步骤

示例

下面来看一个例子。首先,将coresite.xml文件中的hadoop.security.
authentication属性项设置为kerberos,以启用Kerberos认证。®该属
性项的默认值是simple,表示将采用传统的向后兼容(但是不安全)方式, 即利用操作系统用户名称来决定登录者的身份。

其次,还需要将同一文件中的hadoop.security.authorization属性项
设置为true,以启用服务级别的授权。Hadoop.policy.xml文件中的访问控
制列表(ACL)决定哪些用户和组能够访问哪些Hadoop服务。这些服务在协
议级别定义,包括针对MapReduce作业提交的服务、针对namenode通信
的服务等。默认情况下,各个服务的ACL都被设置为*,表示所有用户能 够访问所有服务。但在现实情况下,还是有必要充分考虑ACL策略,以控

制访问服务的用户和组的范围。

ACL的格式很简单,前一段是以逗号隔开的用户名称列表,后一段是以逗
号隔开的组名称列表,两段间以空格隔开。例如,ACL片段 preston,howard
directors,inventors会将某服务的访问权限授予两个 用户 preston、howard 和两个组
directors、inventors。

当Kerberos认证被启用时,以下输出内容显示了从本地复制一个文件到 HDFS中时系统反馈的结果。

% hadoop fs -put quangle.txt.
10/07/03 15:44:58 WARN ipc.Client: Exception encountered while connecting to the server: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSEx ception: No valid credentials provided (Mechanism level: Failed to find any Ker beros tgt)]
Bad connection to FS. command aborted, exception: Call to localhost/127.0.0.1:80 20 failed on local exception: java.io.IOException: javax.security.sasl.SaslExcep tion: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]

由于用户没有Kerberos票据,所以上述操作失败。用户可以使用kinit指 令向KDC认证,并获得一张票据。

% kinit
Password for hadoop-user@LOCALDOMAIN: password 
% hadoop fs -put quangle.txt .
% hadoop fs -stat %n quangle.txt 
quangle.txt

现在,可以看到文件已成功写入HDFS。注意,由于Kerberos票据的有效
期是10小时,所以尽管执行的是两条文件系统指令,但实际上只需调用一
次kinit命令。另外,klist命令能査看票据的过期时间,kdestroy指令 可销毁票据。在获取票据之后,各项工作与平常无异。

转载请注明:全栈大数据 » 9.6.1 Kerberos 和 Hadoop

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址