Kerberos概念

1.Kerberos用户

Kerberos的本质是维护一套自己的用户;或者说是核心用户映射,比如你的系统用户里面有hdfs,那么我将会在KDC中创建一套基于机器(假设我们有三台安装了CDH的机器分别为slave1,slave2,slave3)的核心用户,于是需要创建如下用户(对于Hadoop里面的用户,这个创建是由cloudera manager在开启Kerberos的时候自动来做的,否则需要手动在KDC中创建)
hdfs/slave1@BD.COM
  hdfs/slave2@BD.COM
  hdfs/slave3@BD.COM;
  当时使用用
  kinit hdfs/slave1@BD.COM来设置当前主体的时候(同时也是基于此用户向KDC获取TGT),当前用户也就具备了非Kerberos环境下的hdfs的相应的权限,可以通过hadoop fs -command 来操作hdfs。
比如开启了Kerberos之后,你在看cloudera manager启动HDFS的时候,就会发现其实它是用hdfs/machine-name@domain-name来启动程序;这个时候可能出现上面描述的异常,只要重新再生成一下主体的keytab文件即可。
 2.Kerberos缓存
至于部分Cache Type支持collection,否则真是能够缓存当前主体信息;支持collection的有:DIR and API,KEYRING,KCM。默认的貌似是FILE,即keytab文件;所以默认情况下是不支持collection;到了kerberos5之后,会在配置文件中增加了显式声明:
default_ccache_name = KEYRING:persistent:%{uid}
这样采用的就是KEYRING的缓存模式了,之前测试的情况,如果把这行给注释掉,则无法cache多条主体,但是如果把这行打开则支持了多条主体;查看的指令是
 klist -l
  可以看到缓存的collection。klist以及klist -A都是现实当前主体的详细信息。但是只有Cache类型为DIR and API,KEYRING,KCM的时候,才可以在Cache中保存多个用户信息;否则只能看到当前用户的信息

3. 关于Keytab  

  Keytab里面存放着用户和密码信息,可以通过kadmin→ktadd username来进行添加;kadmin必须要管理员权限(管理员会自动获取该用户的密码hash,在本地client的keytab文件中做添加);如果没有管理员权限,但是知道用户名和密码,可以通过ktutil的shell,通过一下指令来进行添加。

 addent -password -p username@ADS.IU.EDU -k  -e rc4-hmac(需要在下调提示下键入密码)
wkt username.keytab

  或者直接在命令行添加:

 ktutil -k username.keytab add -p username@ADS.IU.EDU -e arcfour-hmac-md5 -V 

  然后使用以下方式就可以实现无密码登录(keytab登录)。
 kinit username -k -t keytabfile.keytab

启动Kerberos
  首先创建cloudera的的管理用户cloudera-scm/admin@BD.COM;之后注意在/var/lib/kerberos/krb5kdc/kadm5.acl里面添加cloudera-scm/admin@BD.COM *(可以使用通配形式),例如:
 */admin@BD.COM * 
但是我的测试如果是大通配,可能会有问题,比如:*@BD.COM *;启动集群将会失败。后来添加了“cloudera-scm/admin@BD.COM *”才启动成功。

关闭Kerberos
1. hdfs:
1) hadoop.security.authentication 设置为simple
2) hadoop.security.authorization 取消勾选
3) dfs.datanode.address 设置为 50010;否则会爆socket链接异常
4) dfs.datanode.http.address 设置为 50075;同上

2. hbase:
1) hbase.security.authentication 设置为simple
2) hbase.security.authorization 取消勾选
3) 进入到zooker-client中设置/hbase的权限为“world:anyone:cdrwa”

setAcl /hbase world:anyone:cdrwa

3. zookeeper
enableSecurity 取消勾选

4. HUE
删除实例中Kerberos Ticket Renewer(没懂,实际中也没有发现该项有用)

关于配置

/etc/krb5.con中的配置
[realms]
FAYSON.COM = {
kdc = ip-172-31-6-148.fayson.com
admin_server = ip-172-31-6-148.fayson.com
}
注意kdc以及admin_server对应的值服务器的机器名称,不要照搬写上去哦;
否则将会在使用kinit的时候报错:
kinit: Cannot contact any KDC for realm 'FAYSON.COM' while getting initial credentials
 
关于JCE
1. 是否安装了JCE
$JAVA_HOME/bin/jrunscript -e 'print (javax.crypto.Cipher.getMaxAllowedKeyLength("RC5") >= 256);'
如果返回true则说明OK;
其中,openJDK默认就是有安装JCE的;
 
打印(调试)Kerberos
在hadoop-env.sh或者直接在命令行中敲入:
 export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true -Dsun.security.krb5.debug=true ${HADOOP_OPTS}” 
此时Kerberos就是出于debug状态;在使用hadoop指令的时候(比如hadoop fs -ls /)之后将会看到更加详细的信息;开启了Kerberos之后,如果执行hadoop指令发生异常,可以通过此开关来查看异常信息;
例如,如果是JCE的异常,错误信息中指明keyTpye=18,则说明是JCE问题,因为这个异常一般情况下是你的JCE的本地策略支持了ACE256;但是其实应该不支持;可能是本地的策略被覆盖;或者配置不正确;下载符合版本的JCE进行覆盖即可。
再比如,
如果信息只有:
Native config name: /etc/krb5.conf
Loaded from native config
>>>KinitOptions cache name is /tmp/krb5cc_993
而没有指明当前的主体信息则说明当前的主体为空,可能是之前执行了kdestroy指令
 
Kerberos异常信息处理
1. SASL异常

执行:hadoop fs -ls /爆出异常:
18/01/15 21:32:00 WARN security.UserGroupInformation: PriviledgedActionException as:hdfs (auth:KERBEROS) cause:java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "slave1/10.1.108.65"; destination host is: "slave1":8020;
解决:这个异常可能原因是用户不对,比如在没有kerberos的环境下使用hdfs用户,那么你就需要在KDC中创建一个hdfs@BD.COMy用户,注意hdfs这个用户必须是在各个Kerberos终端都已经创建的Linux系统用户
2. 密码错误
+ kinit -c /opt/cm-5.12.1/run/cloudera-scm-agent/process/1780-hdfs-NAMENODE/krb5cc_993 -kt /opt/cm-5.12.1/run/cloudera-scm-agent/process/1780-hdfs-NAMENODE/hdfs.keytab hdfs/slave1@BD.COM kinit: Password incorrect while getting initial credentials
解决:总是这个爆异常信息;开始尝试了在root用户下kinit也不好用;后来发现碰到此类问题需要在cloudera manager页面的Administration→security(就是启动Kerberos的页面)→进入到Kerberos Credentials的tab页面;勾选有问题的主体(这里是hdfs/slave1@BD.COM),点击Regenerate Selected按钮即完美解决。
 
另外,还有种情况:
org.apache.hadoop.security.KerberosAuthException: Login failure for user: hdfs/slave1@BD.COM from keytab hdfs.keytab javax.security.auth.login.LoginException: Checksum failed
解决:用户hdfs/slave1@BD.COM是cloudera创建,并维护密码的;但是后来我修改了密码;需要同步一下新的密码,在Administration→Security→Kerberos Credentials,勾选hdfs/slave1@BD.COM,点击Regenerate Selected按钮,即可实现重新生成该用户的keytab信息(因为已经为cloudera制定了具有管理员权限的账号,所以可以获取任何kerberos用户的账号以及hash-密码信息)。
 
3. ktadd文件异常
ktadd -k hdfs@BD.COM
Unsupported key table format version number while adding key to keytab
解决:这是因为ktadd -k filepath username中的filepath指定的keytab文件是一个非法文件;我是使用touch指令创建的,所以没有好用。
 
4. 权限不够
在kadmin的shell中敲入cpw username的时候爆出异常:
Operation requires ``change-password'' privilege while changing hdfs@BD.COM's key
解决:这是因为当前用户权限不够;切换为一个拥有“*”或者修改密码权限的用户。

Kerberos的启动和关闭的更多相关文章

  1. Linux CentOS中使用SQL*Plus启动和关闭数据库

    启动和关闭数据库的常用工具有三个 一.SQL*Plus 在SQL*Plus环境中,用户以SYSDBA身份连接到Oracle后,可以通过命令行方式启动或关闭数据库. 二.OEM(企业管理器) 利用OEM ...

  2. Oracle12c CDB和PDB数据库的启动与关闭说明

    Oracle 12c中,增加了可插接数据库的概念,即PDB,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB). CDB全称为Container Database,中文翻译为数据库容器,PDB ...

  3. <Oracle Database>数据库启动与关闭

    启动和关闭Oracle数据库 要启动和关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆.一般我们常用INTERNAL用户来启动和关闭数据库(INT ...

  4. 启动和关闭ADB服务(adb start-server和adb kill-server)

    1  Android SDK中的常用命令行工具 在<Android SDK安装目录>\tools目录中带了很多命令行工具.虽然一般的开发人员并不需要完全掌握这些工具的使用方法,但了解这些工 ...

  5. MySQL管理_数据库启动与关闭

    MySQL数据库服务器通常指的的是mysqld,而命令行mysql则是mysql客户端程序,这两个概念通常容易混淆.通常启动mysql服务器即是启动mysqld进程,mysqld启动后,可以通过mys ...

  6. nginx入门(安装,启动,关闭,信号量控制)

    公司使用到了nginx,于是周末初步接触了一下nginx,立即被其简洁,优雅,高效的特性给迷住了.nginx是在是个好东西,配置极其简单,容易理解,极其高效,稍微一调优,ab测试10k并发,很轻松.比 ...

  7. Linux下的MySQL简单操作(服务启动与关闭、启动与关闭、查看版本)

    小弟今天记录一下在Linux系统下面的MySQL的简单使用,如下: 服务启动与关闭 启动与关闭 查看版本 环境 Linux版本:centeros 6.6(下面演示),Ubuntu 12.04(参见文章 ...

  8. mysql启动与关闭(手动与自动)

    手动管理mysql的启动与关闭 [root@mysql ~]# service mysql start --手动启动mysqlStarting MySQL. SUCCESS![root@mysql ~ ...

  9. DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)

    2014-08-07 Created By BaoXinjian

随机推荐

  1. C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic

    C#在using System.Security.Cryptography下有 DESCryptoServiceProvider RSACryptoServiceProvider DESCryptoS ...

  2. @MarkFan 口语练习录音 20140415 [MDL演讲口语录音]

    Hi,everybody! 今天是2014年4月14日, 现在是晚上十一点零柒分. 一本励志的书,一场振奋人心的演讲,一次推心置腹的谈话, 最多只是在你背后小推你一下,最终决定是否迈出前进的步伐, 以 ...

  3. 23种设计模式UML表示形式

    一.概况:       类关系表示:   说明:           二.创建型 1.Factory Method 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Met ...

  4. vector对象

    vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型,例如vector<int> 定义和初始化vector对象: vector<T> v1    ...

  5. ZooKeeper-znode概念与使用

    可以将ZK看作一个具有高可用性特征的文件系统.这个文件系统中没有文件和目录,而是统一使用节点(znode)的概念,称为znode.znode既可以作为保存数据的容器(如同文件),也可以作为保存其他zn ...

  6. QT 事件处理 KeyPressEvent 和 定时器时间 Timer

    1. 按键事件响应, 两种方法,一种直接处理Event,过滤出KeyPress,另一种直接处理KeyPressEvent. bool Dialog::event(QEvent *e) { if( e- ...

  7. BZOJ3241/UOJ125 [Noi2013]书法家

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  8. Spring的DI初步

    DI:依赖注入 第一个DEMO:域属性注入 java类:(Car类和Stu类,学生有一辆小汽车) package cn.dawn.day02di; /** * Created by Dawn on 2 ...

  9. 解决Chrome Safari Opera环境下 动态创建iframe onload事件同步执行

    我们先看下面的代码: setTimeout(function(){ alert(count); },2000); var count = []; document.body.appendChild(c ...

  10. iOS中,Framework和.a的打包及使用

    最近在做一个小项目,需要给客户一个demo测试,有一部分核心代码暂时不想让客户知道,就想到了打包成framework或.a库.库有两种: 静态库:.a和.framework 动态库:.tbd和.fra ...