创建文件 Touch aa.data Vim aaa.data echo mljs>data.log
klist hadoop fs -du -h /user/fayson a_cdhadmin.sh脚本内容如下: [root@cdh4 shell-test]# more a_cdhadmin.sh kinit 通过两个脚本输出的日志可以看到a_fayson.log中kinit的是fayson用户,但在执行hadoop命令的时候显示的为cdhadmin,此时Principal账号串掉导致命令执行失败。 3 问题分析 1.首先在客户端进行Kinit操作后,默认的Ticket Cache是存储在tmp/krb5cc_0临时文件中(Ticket cache文件是根据当前用户的uid在/tmp目录下生成一个以 2.由于上述的两个脚本是在同一个OS用户下,所以两个不同的Kerberos用户在进行Kinit操作后都会覆盖/tmp/krb5cc_{uid}文件 ? 2.如果在同一个OS用户下使用不同的Kerberos用户进行kinit会覆盖/tmp/krb5cc_{uid}文件,从而导致应用中的票据信息串掉。
HDP WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.securi kinit blog.csdn.net/walykyy/article/details/108407868 https://www.cnblogs.com/tommyjiang/p/15008787.html kinit @HADOOP.COM [root@xxx]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: yarn@HADOOP.COM 执行kinit 报错 创建keytab不同用户,即便密码相同,也不可共用同一个keytab文件 [root@xxx]# kinit -kt yarn.keytab hdfs@HADOOP.COM kinit: Keytab 可能导致问题: 6.x主机上kinit获取principal失败。 cloudera服务refresh异常(出现在6.x主机上),报错是kinit 认证失败。
,kinit2 是上述 freerange 函数的封装: void kinit1(void *vstart, void *vend) //kinit1(end, P2V(4*1024*1024)) 遗留问题 上述讲述了内核页表的过程,有了这全局的认识之后,来解决前面遗留的一些问题: 为什么要分两次初始化内存:kinit1 和 kinit2 为什么 kinit2 必须在 startothers 之后 那为什么 kinit2 必须在 startothers 后面呢? 原因就在于其他 CPU 启动的时候也是用的那张临时页表,只映射了物理地址的低 4M, kinit2 的初始化内存是用头插法依次链接在头部的,如果先执行 kinit2 的话,那么在执行 startothers 时候给 APs 分配内存的时候就会先分配高处的内存,而这些内存的地址临时页表是没有映射的,就会引发错误,所以 kinit2 必须在 startothers 之后。
在Windows下使用kinit测试 1.在KDC Server上创建一个用户 [root@cdh178 ~]# kadmin.local Authenticating as principal solr 测试成功 2.将生成的keytab文件拷贝到本地Windows环境,进行kinit测试 ? 初始化成功,在客户端查看 ? 初始化成功 4.将HDFS的keytab文件拷贝到Windows本地,并进行kinit ? ? 5.再次通过FireFox访问HDFS服务,能够正常访问 ? 2.在生成keytab文件时需要加上”-norandkey”参数,否则会导致kinit时密码错误。 本地使用的kinit、klist等命令是使用的Kerberos的命令,否则就会导致命令冲突,如下图,将Kerberos的环境变量调整到最前面即可。
3.Hive表授权测试 ---- 1.使用Beeline连接Spark ThriftServer [root@cdh01 ~]# kinit fayson [root@cdh01 ~]# klist 上述测试可以得出在使用fayson@FAYSON.COM账号kinit后,通过Beeline访问Spark ThriftServer,查看当前的登录用于依然为hive并不是我们指定的fayson用户,进行 2.使用spark-sql客户端测试 [root@cdh03 ~]# kinit fayson Password for fayson@FAYSON.COM: [root@cdh03 ~]# /opt 而spark-sql与HiveCLI访问Hive模式一样,都是跳过HiveServer2服务直接访问的HiveMetastore,所以通过spark-sql可以正确获取到kinit的用户。 因为Spark SQL CLI可以直接获取到正确的kinit用户,所以Spark SQL命令行的表权限一样可以通过HDFS的文件权限来控制。Fayson在上面省略的测试部分。
cdhproject 提示:代码块部分可以左右滑动查看噢 1 文档编写目的 在集群启用Kerberos后,使用同一个OS用户在客户端并发调度Python代码获取Hive数据(代码中使用不同的kerberos用户kinit 测试环境 1.CDH5.15.0 2.Redhat7.3 3.集群已启用Kerberos 2 问题描述 Fayson通过一段简单的示例代码说明问题,在代码中执行kinit命令初始化Kerberos信息, 通过impyla包访问Hive,具体代码如下: from impala.dbapi import connect import os os.system('kinit -k -t /data/disk1 2.由于上述的两个脚本是在同一个OS用户下,所以两个不同的Kerberos用户在进行Kinit操作后都会覆盖/tmp/krb5cc_{uid}文件 ? 2.如果在同一个OS用户下使用不同的Kerberos用户进行kinit会覆盖/tmp/krb5cc_{uid}文件,从而导致应用中的票据信息串掉。
接下来,获得一个kerberos的登录票据(具有时效性,默认10小时),用于登录web界面和其他管理命令 运行命令 kinit admin 输入密码 查看票据,klist 修改默认shell,默认为 --mkhomedir --enable-dns-updates --no-ntp -p admin 服务端会默认将客户端主机名(FQDN)解析成当前的IP地址 手动在服务器端加入客户端解析方法 kinit unattended 基本操作 添加新用户 ipa user-add user01 --first=user01 --last=user01 --passwd 重置密码(重置后需要在客户端立即修改) kinit admin ipa user-mod user01 --password 用户密码失败后解锁 kinit admin ipa user-unlock user01 删除用户 ipa user-del 常见错误 ipa error no credentials cache found 没有打开ticket,解决办法kinit admin
执 行过程:kinit single用户,beeline -u -e登录并执行对test用户对应角色回收和赋予权限的语句;kinit test用户,beeline -u -e去执行测试语句并保存执行结果到 command) print command os.system("kdestroy") os.system("kinit command) print command os.system("kdestroy") os.system("kinit
准确的说,是开启了kerberos认证的组件都必须先kinit后才可以使用,具体权限取决于组件本身的授权机制(ACL/Sentry等) 二、访问Kerberos数据库查看principal 1. 当前用户是非root用户或在其它机器上操作 我们选择一台Kerberos从节点上访问Kerberos数据库,先使用kinit进行身份认证: kinit admin/admin # 需要输入密码,密码是你之前创建 在当前用户是非root用户或在其它机器上操作时,需要先使用kinit命令认证,然后再使用kadmin命令来访问数据库,这里总共需要输入两次密码。 五、kinit认证 这里采用的是在shell终端上使用命令行进行用户认证的方案。集群内所有的节点均可使用以下命令。 在理论上来说,使用kinit的任何一种认证方式,只需要认证成功一种就可以任意访问Hadoop所有服务了。 1.
kinit: Preauthentication failed while getting initial credentials 此问题的最常见原因是使用了错误的密码。 以具有执行所需命令权限的用户身份运行kinit 更新JDK。 请参阅使用kinit和klist对Hadoop Kerberos问题进行故障排除 kinit: KDC can't fulfill requested option while renewing credentials 如有必要,重新生成Principal和/或重新启动服务 kinit作为您将在Hive中使用的帐户的用户,然后在beeline中与以下用户连接:! (kinit,导入Cloudera Manager帐户凭据。)
keytab文件进行测试,操作命令如下: ktutil addent -password -p cloudera-scm/admin -k 1 -e rc4-hmac wkt cloudera.keyrab kinit 4.使用同样的命,更改加密类型生成keytab文件进行测试,生成的keytab可以正常的kinit ktutil addent -password -p cloudera-scm/admin -k 1 -e aes256-cts wkt cloudera.keyrab kinit -kt cloudera.keytab cloudera-scm/admin 通过该操作,进一步的确认了是加密类型导致的问题
如果想在shell下执行bin/hdfs什么的,还是得手动调用kinit。而且,我不知道hadoop用keytab登录后,把Ticket cache放哪了。好像跟系统默认的不一样。 在执行kinit的时候,如果没有root权限,可以用KRB5_CONFIG这个环境变量来指定krb5.conf的位置。 这个在kinit的文档中并没有提到,它只提到了KRB5CCNAME和KRBTKFILE。
检查Kerberos正常运行 kinit admin/admin 9. Kerberos使用 常用命令: kinit admin/admin@EXAMPLE.COM # 初始化证书 klist # 查看当前证书 kadmin.local -q "list_principals " # 列出Kerberos中的所有认证用户 kadmin.local -q "addprinc user1" # 添加认证用户,需要输入密码 kinit user1 # 使用该用户登录,获取身份认证 进行验证: [root@cdh-server-1 /]# kinit admin/admin Password for admin/admin@EXAMPLE.COM: [root@cdh-server 认证用户 [root@cdh-node-2 /]# kinit -kt /xx/xx/kerberos.keytab hdfs/hadoop1 3.
auth-dialog krb5-workstation 集群其他服务器安装客户端服务 yum -y install krb5-auth-dialog krb5-workstation Kerberos 错误列表 kinit 时错误信息 kinit: Cannot find KDC for realm "XXXX.CN" while getting initial credentials 看错误信息提示是你没有定义realm
||hadoop_kerberos_principal | "" ||hadoop_kerberos_kinit_command | kinit |限制hadoop_security_kerberos_ticket_cache_path 只能在全局配置 如果指定了hadoop_kerberos_keytab, hadoop_kerberos_principal或者hadoop_kerberos_kinit_command,将会调用kinit工具.在此情况下 ,hadoop_kerberos_keytab和hadoop_kerberos_principal参数是必须配置的.kinit工具和 krb5 配置文件是必要的.虚拟列_path — 文件路径.
product/hue:4.6.1 各个参数含义如下: hue-overrides.ini:增加了kerberos配置的配置文件,文章最后会给出一个完整的参考示例; hue.keytab:用于本地进行kinit ccache))',) 通过排查HUE启动之后的日志发现,kerberos的认证是通过一个专门的kt_renewer进程来操作的,但是在服务启动之后,虽然kt_renewer进行也跟着启动了,但是真正的第一次kinit 2020 14:17:16 +0800] kt_renewer INFO Reinitting kerberos retry attempt 0 from keytab /usr/bin/kinit 17:17 +0800] kt_renewer INFO Renewing kerberos ticket to work around kerberos 1.8.1: /usr/bin/kinit =/usr/bin/kinit [[database]] engine=mysql host=mysql_host port=3306 user=username
安装完了Kerberos客户端会自动的在path里面加上了自己的目录,但是如果windows本地安装了Oracle JDK ,该JDK里面也带了一些 kinit, klist 等命令,所以需要把 Kberberos Kebreros通过keytab的方式来认证Kerberos主体,假设我们不知道keytab对应的是哪个Kerberos主体,那么我们可以使用klist -kte命令来查看keytab,然后在使用kinit 命令认证,如下图所示: 注意: 上面的kinit认证,只需要认证成功一种就可以任意访问Hadoop所有服务了,上面只是针对kinit的命令选择进行了罗列。
-- 使用_HOST自动匹配主机名 --> </property> 4.用户认证 用户需先通过 kinit 获取 TG kinit alice@HADOOP.COM # 交互式输入密码 kinit -
hdfs.ext.kerberos import KerberosClient from hdfs import * import os import threading import time kt_cmd = 'kinit = 0: print("kinit ERROR:") print(subprocess.call([kt_cmd], shell=True)) exit() noneclient=Client("http