- 浏览: 2579507 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (880)
- 每日总结 (26)
- java (37)
- lucene 2.4源码学习 (11)
- 庖丁分词的源码分析 (5)
- cindy源码阅读 (10)
- jetty (3)
- java基础 (49)
- hadoop (37)
- python (7)
- 那些蛋疼的事 (15)
- 测试 (5)
- spring (3)
- redis (4)
- git (4)
- 我的开源项目 (2)
- linux (15)
- mysql (8)
- bootsharp (1)
- idea (1)
- Disruptor源码分析 (11)
- 高并发 (22)
- jdk (4)
- 领域驱动 (1)
- 坑 (6)
- 表达式框架 (7)
- 游戏 (3)
- Guava (1)
- 缓存 (1)
- 数据库 (1)
- 游戏项目 (3)
- java8 (1)
最新评论
-
hsluoyz:
PyCasbin是一个用Python语言打造的轻量级开源访问控 ...
权限管理的一个简单后台 -
liuyachao111:
谢谢 问题解决了
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾 -
jnjeC:
多谢博主分享,在配置文件里的&也要改成& ...
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾 -
大维啊:
同志,你这不行啊!
java 的 AccessController.doPrivileged使用 -
lisha2009:
解决了我的问题,多谢博主分享!
对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
老大让我看cdh4的安全机制的实现,说实话,没有太多的思路。然后老大说,安全认证不通过肯定会抛异常,然后我就从异常入手了。
目测 AccessControlException比较像,然后看到他有个子类:AuthorizationException。这个受众更小,更容易做为切入点,好,就这个了。
这里是会抛出AuthorizationException异常的。
我比较关注kerberos的部分:clientPrincipal.equals(user.getUserName()
关键是clientKey,但是clientKey需要krbInfo。所以krbInfo就是最关键的地方了。
那这里是的securityInfoProviders是怎么来的呢:
这里使用了ServiceLoader,我们看到hadoop-commom的META-INF\services文件夹,有个叫org.apache.hadoop.security.SecurityInfo的文件名,内容是
意思就是返回protocol对应类的注解KerberosInfo 就可以了。
这个类似根据protocolName反射得到的。
可以看到protocolName是从数据流中读取的,
这里的data就是protocolName的源头了。
现在能拿到clientKey,再回过头来。
这里就与conf扯上关系了,conf的各个key和value都是系统初始化进去的。
clientPrincipal 只是conf对应的value替换掉主机名而已。看到替换规则,这些value应该是以[/@]来分隔的,但是我看了conf的初始化过程,没有找见有这样的value.
目测 AccessControlException比较像,然后看到他有个子类:AuthorizationException。这个受众更小,更容易做为切入点,好,就这个了。
public void authorize(UserGroupInformation user, Class<?> protocol, Configuration conf, InetAddress addr ) throws AuthorizationException { AccessControlList acl = protocolToAcl.get(protocol); if (acl == null) { throw new AuthorizationException("Protocol " + protocol + " is not known."); } // get client principal key to verify (if available) KerberosInfo krbInfo = SecurityUtil.getKerberosInfo(protocol, conf); String clientPrincipal = null; if (krbInfo != null) { String clientKey = krbInfo.clientPrincipal(); if (clientKey != null && !clientKey.equals("")) { try { clientPrincipal = SecurityUtil.getServerPrincipal( conf.get(clientKey), addr); } catch (IOException e) { throw (AuthorizationException) new AuthorizationException( "Can't figure out Kerberos principal name for connection from " + addr + " for user=" + user + " protocol=" + protocol) .initCause(e); } } } if((clientPrincipal != null && !clientPrincipal.equals(user.getUserName())) || !acl.isUserAllowed(user)) { AUDITLOG.warn(AUTHZ_FAILED_FOR + user + " for protocol=" + protocol + ", expected client Kerberos principal is " + clientPrincipal); throw new AuthorizationException("User " + user + " is not authorized for protocol " + protocol + ", expected client Kerberos principal is " + clientPrincipal); } AUDITLOG.info(AUTHZ_SUCCESSFUL_FOR + user + " for protocol="+protocol); }
这里是会抛出AuthorizationException异常的。
我比较关注kerberos的部分:clientPrincipal.equals(user.getUserName()
clientPrincipal = SecurityUtil.getServerPrincipal( conf.get(clientKey), addr);
KerberosInfo krbInfo = SecurityUtil.getKerberosInfo(protocol, conf);
关键是clientKey,但是clientKey需要krbInfo。所以krbInfo就是最关键的地方了。
for(SecurityInfo provider: securityInfoProviders) { KerberosInfo result = provider.getKerberosInfo(protocol, conf);
那这里是的securityInfoProviders是怎么来的呢:
private static ServiceLoader<SecurityInfo> securityInfoProviders = ServiceLoader.load(SecurityInfo.class);
这里使用了ServiceLoader,我们看到hadoop-commom的META-INF\services文件夹,有个叫org.apache.hadoop.security.SecurityInfo的文件名,内容是
org.apache.hadoop.security.AnnotatedSecurityInfo。
public class AnnotatedSecurityInfo extends SecurityInfo { @Override public KerberosInfo getKerberosInfo(Class<?> protocol, Configuration conf) { return protocol.getAnnotation(KerberosInfo.class); }
意思就是返回protocol对应类的注解KerberosInfo 就可以了。
protocol = getProtocolClass(protocolName, getConf());
这个类似根据protocolName反射得到的。
可以看到protocolName是从数据流中读取的,
processOneRpc(data.array());
这里的data就是protocolName的源头了。
现在能拿到clientKey,再回过头来。
clientPrincipal = SecurityUtil.getServerPrincipal( conf.get(clientKey), addr);
这里就与conf扯上关系了,conf的各个key和value都是系统初始化进去的。
clientPrincipal 只是conf对应的value替换掉主机名而已。看到替换规则,这些value应该是以[/@]来分隔的,但是我看了conf的初始化过程,没有找见有这样的value.
发表评论
-
hadoop的stream
2013-09-13 19:30 1167如统计一个文件有多少行(/user/hive/warehous ... -
hadoop的archive(打包压缩)
2013-09-13 19:25 1522如: hadoop archive -archiveName ... -
hadoop的一些监控
2013-09-13 14:51 941... -
hive报错Too many counters的解决
2013-09-09 16:18 4774解决办法 在执行hql的机器上修改mapred-site.x ... -
转发 Mongodb 和 Hbase的区别
2013-09-05 14:43 1198原始网址:http://hi.baidu.co ... -
hive警告解决 WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated.
2013-08-28 10:17 1859--修改参数 vi hive-log4j.propertie ... -
hive的muti group by
2013-08-26 15:32 1471使用muti group by之前: echo " ... -
解决hbase的启动不起来 Master is initializing
2013-08-24 12:38 3997现象:hbase启动不起来,报错显示Master is ini ... -
hadoop的rsync是个好东西
2013-08-23 16:02 2652如可以这样用 rsync -v hive-site.xm ... -
hive TempStatsStore cannot be created
2013-08-23 10:00 1772<property> <na ... -
hadoop hive中metastore报错的解决
2013-08-10 16:42 2091报的错: Unable to instantiate or ... -
hive的Recover partitions是个好东西
2013-08-08 10:11 2057之前从hadoop复制数据到hive之后,每次都要add pa ... -
hive的一个报错 Not In Group By Key
2013-08-05 19:08 11341这个报错的原因是:select的字段没有出现在group by ... -
hive用正则表达式的方式使用多字节切割符号
2013-08-02 14:57 5840hive默认是不支持多字节切割符号的. 我采用了正则表达式的方 ... -
安装使用flume
2013-07-18 12:20 15921 首先去官网下载 http://flume.apache.o ... -
kerberos不能导出证书的解决
2013-07-06 15:40 2897执行命令 ktadd -k /etc/hadoop/conf/ ... -
protobuf 安装中问题的解决
2013-07-06 10:04 17566解决办法: 把自带的gtest 1.4 换成1.5 安装的版 ... -
kerberos不能续约一个证书
2013-07-02 11:59 3294kinit -R 的时候,报错: kinit: Tick ... -
jps命令Could not synchronize with target
2013-06-28 09:32 2809网上有人说离开安全模式就可以解决这个,但是我尝试是没有成功的: ... -
安装kerberos的坑
2013-06-27 17:57 5004执行kinit的时候老是报错: kinit: Client ...
相关推荐
CDH安全技术方案:关于 配置TLS证书、2 配置Kerberos、3 配置Sentry和4 集成Hive
presto-hadoop-cdh4.zip,CDH4 Hadoop for Presto的阴影版本CDH4 Hadoop for Presto的阴影版本
cloudera公司的CDH4版本hadoop安装说明
由于CSDN上传文件大小限制,大家可以下载《CDH6.3.2下载.txt》获取网盘地址进行下载,我打包了CDH6.3.2 搭建所需要的各种安装文件,包括: manifest.json cloudera-manager.repo RPM-GPG-KEY-cloudera cm6.3.1-...
CDH5.12.0
cdh6.3.2 适配 Phoenix; cdh6.3.2 集成 Phoenix
CDH6.3.2完整安装包网盘下载,包含 CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel、CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha1、CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha256、CDH-6.3.2-1....
CDH7及以上版本已经更名为CDP 本资源打包了CDH7.1.5 搭建所需要的各种安装文件,包括: cm7.2.4-redhat7.tar.gz manifest.json cloudera-manager.repo RPM-GPG-KEY-cloudera CDH-7.1.5-1.cdh7.1.5.p0.7431829-el7....
也就是说CDH各版本都不能免费获取了。 整个过程不需要依赖外网,全部为离线安装。 包括: manifest.json CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha CDH-6.3.2-1....
详细描述CDH集群部署 1规划服务器 2 2安装和配置Mysql数据库 4 3离线安装Cloudera Manager5和CDH5 7 3.1创建本地yum软件源 7 3.2使用本地类库安装CM 10 3.3 设置cloudera manager使用的mysql数据库 10 3.4 使用本地...
cdh7.1.7包括: CDH-7.1.7-1.cdh7.1.7.p0.15945976-el7.parcel CDH-7.1.7-1.cdh7.1.7.p0.15945976-el7.parcel.sha1 CDH-7.1.7-1.cdh7.1.7.p0.15945976-el7.parcel.sha256 manifest.json cm7.4.7包括: cloudera-...
CDH5.15.2资源下载
CDH-6.3.3-1.cdh6.3.3.p0.1796617-el7.parcel CDH-6.3.3-1.cdh6.3.3.p0.1796617-el7.parcel.sha1 CDH-6.3.3-1.cdh6.3.3.p0.1796617-el7.parcel.sha256 如遇技术问题可添加微信咨询:15854186970
ha 方式安装 cdh4,hbase,补充原文档的内容
CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha1 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha256 cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm ...
CDH安装包
cdh
德力西CDH3隔离开关对折页.pdfpdf,CDH3分断可视隔离开关 1、应用范围 CDH3隔离开关,适用于交流50HZ、400V,额定电流32A至125A的电阻电路中,主要供无负载情况下接通或断开电路,用作线路与电源接通之用,尤其适合...
4.安装CDH集群; 请务必注意CDH6的安装前置条件包括如下: • 外部数据库支持: 1.MySQL 5.7或更高 2.MariaDB 5.5或更高 3.PostgreSQL 8.4或更高 4.Oracle 12c或更高 • JDK Oracle JDK1.8,将不再支持JDK1.7 • ...