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. 数据结构与算法之美 06 | 链表(上)-如何实现LRU缓存淘汰算法

    常见的缓存淘汰策略: 先进先出 FIFO 最少使用LFU(Least Frequently Used) 最近最少使用 LRU(Least Recently Used) 链表定义: 链表也是线性表的一种 ...

  2. codeforces 439C 模拟

    http://codeforces.com/problemset/problem/439/C 题意:给你n个数,分成k个非空集合,其中有p个集合的元素和为偶数,其余k-p个集合的元素和为奇数. 思路: ...

  3. Oracle常用知识小总结

    永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! Oracle常用知识小总结 1. 创建自增主键 对于习惯了SQL SERVER的图形化界面操作的SQLer,很长一段时间不用oracle ...

  4. keepalived检测脚本及注意事项

    keepalived检测脚本的作用及注意事项: 默认每隔3秒钟执行一次检测脚本,检查nginx服务是否启动,如果没启动就把nginx服务启动起来,如果启动不成功,就把keepalived服务down掉 ...

  5. 解决maven寻找依赖关系失败的问题

    在mac中会碰到依赖jdk自带的jar包而maven找不到的问题 解决方案:安装jdk中的tools到本地mvn库 mvn install:install-file -Dfile=${JAVA_HOM ...

  6. JavaScript -- 控制table的创建 与 删除, 排序, 表格颜色

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. QT 实现拖放功能

    1. 文档拖放 获取文件名 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #i ...

  8. Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论

    题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...

  9. 搜索8--noi1817:城堡问题

    搜索8--noi1817:城堡问题 一.心得 1.这题只是在普通的迷宫的基础上面加上了墙的概念,所以基本的思路和代码就和普通的迷宫是一样的,只不过需要多加上一层墙的判断 2.这里墙的判断是用的二进制加 ...

  10. Redis简介 & 与Memcache的区别

    redis 是一个基于内存的高性能key-value数据库.   Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操 ...