`

我对cdh4安全机制的解读

 
阅读更多
     老大让我看cdh4的安全机制的实现,说实话,没有太多的思路。然后老大说,安全认证不通过肯定会抛异常,然后我就从异常入手了。


  目测 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.
  • 大小: 63.1 KB
  • 大小: 82.6 KB
分享到:
评论

相关推荐

    CDH安全技术方案.docx

    《CDH安全技术方案》是针对大数据平台的一种安全保障策略,主要涵盖了四个关键环节:配置TLS证书、设置Kerberos认证、部署Sentry以及集成Hive。这些技术的结合使用能够确保CDH(Cloudera Distribution Including ...

    cloudera CDH4 installation guide 4.0(pdf)

    相较于早期版本,CDH4在性能、安全性和易用性方面进行了显著提升,支持更广泛的操作系统,并对Hadoop生态系统的多个组件进行了集成和优化。 ### 支持的操作系统 在安装CDH4前,了解其支持的操作系统至关重要。CDH4...

    hadoop-cdh4-0.3.zip

    1. **Hadoop CDH4**: CDH4是Cloudera公司的Hadoop发行版,包含了一系列经过测试和集成的Hadoop生态组件,如HDFS、MapReduce、YARN、HBase、Hive等,提供了企业级的稳定性和安全性。 2. **Presto**: Presto是一个高...

    CDH+集群安全启动和关闭.doc

    ### CDH集群安全启动与关闭知识点详解 #### 一、CDH集群简介 Cloudera Distribution Including Apache Hadoop (CDH) 是一个基于Apache Hadoop的企业级大数据平台,由Cloudera公司提供支持和服务。CDH集成了众多...

    CDH5.12&CDH6.0安装文档.zip

    总结,CDH5.12和CDH6.0的安装过程虽然大体相似,但CDH6.0引入了更多新特性,对系统的安全性和性能进行了优化。熟练掌握这两个版本的安装,对于理解和管理大数据集群至关重要。通过不断的学习和交流,我们可以更好地...

    CDH6.3.2安装包下载

    由于CSDN上传文件大小限制,大家可以下载《CDH6.3.2下载.txt》获取网盘地址进行下载,我打包了CDH6.3.2 搭建所需要的各种安装文件,包括: manifest.json cloudera-manager.repo RPM-GPG-KEY-cloudera cm6.3.1-...

    presto-hive-cdh4-0.69.zip

    CDH4是Cloudera发行的Hadoop分发版,包含了HDFS、MapReduce、HBase等一系列组件,而Presto的Hive连接器则允许用户通过Presto直接对Hive的数据进行SQL查询,无需编写MapReduce作业,极大地提高了查询效率。...

    cdh hadoop官方安装文档

    3. **安装CDH4之前的准备工作(BEFORE YOU INSTALL CDH4 ON A CLUSTER)** 4. **支持的操作系统(SUPPORTED OPERATING SYSTEMS FOR CDH4)** 5. **CDH4安装流程(CDH4 INSTALLATION)** 6. **CDH4与MapReduce(CDH4 ...

    CDH5.12.0资源下载

    CDH5.12.0

    适配CDH6.3.2的Spark3.2.2

    9. **安全性**:Spark3.2.2加强了与Kerberos的集成,提供了更好的身份验证和授权机制,以满足企业级的安全需求。 10. **监控和诊断**:新增了更丰富的指标和日志,帮助用户监控和诊断Spark作业的运行状况,更快定位...

    ubuntu-CDH6.3.2完整安装包网盘下载地址

    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.1.5离线安装包下载

    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....

    Cloudera CDH集群运维手册

    手册会阐述如何设置和解读监控指标,以及如何配置报警机制。 9. **版本升级与维护**:随着新版本的发布,手册还会介绍如何安全地升级CDH,以保持系统的最新功能和安全性。 10. **最佳实践**:手册最后可能会总结...

    cdh6.3.2 集成 Phoenix

    总结,集成Phoenix到CDH 6.3.2是为了提升对HBase数据的SQL访问能力,简化数据分析流程,提高开发效率。理解Phoenix的工作原理和集成方法,以及对其进行性能优化,是充分利用CDH 6.3.2平台的关键。通过上述详细步骤和...

    CDH6.3.2集成flink1.14.5 parcel

    "Parcel"是CDH中用于分发和管理软件包的一种机制,类似于RPM或DEB包。 在描述中提到“实测可用,自己编译的”,意味着这个集成已经过实际测试,证明可以正常工作,并且Flink 1.14.5是作者自行编译以适应CDH 6.3.2...

    CDH集群部署手册(For CDH5)

    确保选用与CDH兼容的MySQL版本,并遵循安全最佳实践进行配置。 **3. 离线安装Cloudera Manager 5和CDH5** 离线安装适合那些网络环境受限的环境。首先,需要创建本地的yum软件源,将所有必要的包下载到本地服务器上...

    Apache Atlas 2.1.0 集成CDH6.3.2 编译包

    4. **元数据管理**:Atlas提供了丰富的元数据模型,支持自定义实体和属性,可以为CDH中的表、列、分区等对象创建元数据,方便用户理解和操作数据。 5. **数据安全**:Apache Atlas可以通过定义数据分类和标签来实现...

    CDH之ZK升级.doc

    - 备份现有ZooKeeper Jar包:`cp /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/jars/zookeeper-3.4.5-cdh6.3.2.jar /opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/jars/zookeeper-3.4.5-cdh...

    CDH集群运维手册

    了解HDFS的数据块策略、数据平衡和故障恢复机制对保证数据安全至关重要。 4. **资源调度**:YARN作为Hadoop的资源管理系统,负责任务调度和资源分配。熟悉YARN的Fair Scheduler或Capacity Scheduler,以及如何配置...

Global site tag (gtag.js) - Google Analytics