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. 【收藏】SearchCrawler By James Holmes

    转自Crawling the Web with Java By James Holmes 无需任何扩展包,可直接运行. import java.awt.*; import java.awt.event ...

  2. php数组函数-array_merge()

    array_merge()函数把两个或多个数组合并为一个数组. 如果键名有重复,该键的键值为最后一个键名对应的值.如果数组是数字 索引,则键名会以连续方式重新索引. 注:如果仅仅向array_merg ...

  3. INSPIRED启示录 读书笔记 - 第40章 最佳实践经验

    十大要点 1.产品管理的职责:许多产品经理将大把的时间浪费在与产品管理无关的工作上 2.用户体验:对于大多数软件产品来说,用户体验就是产品的生命 3.机会评估:用方便快捷的机会评估方法取代过时的市场需 ...

  4. INSPIRED启示录 读书笔记 - 第36章 可用性与美感

    两者缺一不可 交互设计和视觉设计完全是两回事 视觉设计可以满足用户的情感需求 良好的用户体验是交互设计师和视觉设计师合作的结果.他们共同配合产品经理定义产品

  5. Vue.js学习笔记 第三篇 条件渲染

    条件选择 条件选择的用法和其他语言类似,一个例子就能解决所有问题 <!DOCTYPE html> <html> <head> <meta charset=&q ...

  6. 自动生成Mapper代码

    public class BeanMapperTest { @Test public void build() throws Exception { Class clazz = RiskAccess. ...

  7. java.lang.NullPointerException报错的几种情况

    java.lang.NullPointerException报错的几种情况: 1.字符串变量未初始化: 2.接口类型的对象没有用具体的类初始化,比如: List stuList :这种情况就会报空指针 ...

  8. PHP开发框架

    利用PHP开发框架可以帮助你编写干净和可重用的代码.PHP开发框架遵循MVC设计模式,以确保能够明确区分逻辑和演示文稿.但是有关PHP框架的争论也不少,这是因为有的人喜欢性能,有的人喜欢文档,而有的人 ...

  9. JMeter参数文件的相对路径

    很多教程里都说“尽可能将参数文件配置为相对路径,以更好的去适配Slave环境”或者“把XX放到相对路径” 这里相对路径是指的 C:\Program Files (x86)\apache-jmeter- ...

  10. 天地图OGC WMTS服务规则

    图层名称 服务地址 投影类型 矢量底图 http://t0.tianditu.gov.cn/vec_c/wmts?tk=您的密钥 经纬度投影 http://t0.tianditu.gov.cn/vec ...