Kerberos探索遇到的问题及心得

Kerberos在集群开启时做了什么

kerberos在浪潮集群中启动时会自动安装clien端,此时它会针对每个服务以及机器创建对应得Principal,这些principal也将创建成Linux内的用户。
注意,这些用户将只存在于创建这些用户的机器上

关于Hive执行HQL时count(*)会出错

Hive跟HDFS一样,在集群开启Kerberos后不需要特别的设置即可使用,然而在试图执行

1
select count( * ) from test

时,会出现以下报错:


原因便是上面提到的,创建的用户只在创建的机器上有,而Hive这个count其实是启动了一个MapReduce在集群上跑,集群上其他的机器没有nassoft_m这个账号,所以报错说找不到用户名。

解决办法:
    在每台机都加上nassoft_m这个账号即可

关于Hive遇到的权限问题


hive很多操作都是对HDFS的,而hdfs默认文件权限为drwxr-xr-x ,即文件创建者拥有全权限,同组及其他用户只拥有读取权限,然而我们登陆的principal很多情况下都不是文件创建者,所以在kerberos启动的情况下使用hive,又时会出现权限不足的报错,就是因为hive可能对hdfs进行了写入操作。

解决办法:
    把nassoft_m账号添加到hdfs用户组里,然后使用chmod 777(或者774)命令修改权限

查看zookeeper节点认证失败

解决办法:
在zkCli.sh 中加入

1
JVMFLAGS="-Djava.security.auth.login.config=/usr/hdp/2.6.4.0-91/zookeeper/conf/zookeeper_jaas.conf"

关于Hbase出现的权限不足报错

认证后在hbase中使用命令行出现如下错误:

解决办法:
给相应的用户分配权限

1
grant 'nassoft_r','RWXCA'

关于kafka在Kerberos中的使用

命令行稍有变化

生产者端命令为:
bin/kafka-console-producer.sh –broker-list hd2.bigdata:6667 –topic test_wifi2 –producer.config conf/producer.properties –security-protocol SASL_PLAINTEXT

消费者端命令为:
bin/kafka-console-consumer.sh –bootstrap-server hd2.bigdata:6667 –from-beginning –topic test_wifi2 conf/consumer.properties –security-protocol SASL_PLAINTEXT

另外就是java代码中需要添加以下配置:

1
2
3
4
5
6
7
8
System.setProperty("java.security.krb5.conf", "E:\\krb5.conf");
System.setProperty("java.security.auth.login.config", "E:\\kafka_client_jaas.conf");

Properties props = new Properties();
props.put("security.protocol", "SASL_PLAINTEXT");
props.put("sasl.mechanism", "GSSAPI");
props.put("sasl.kerberos.service.name", "kafka");
......

需要从服务器下载以下3个文件:

  • krb5.conf
  • kafka_client_jaas.conf
  • kafka.service.keytab

其中kafka_client_jaas.conf稍作修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Client{
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
useTicketCache=true
principal="kafka/hd2.bigdata@HADOOP.COM"
useKeyTab=true
serviceName="zookeeper"
keyTab="E:\\kafka.service.keytab"
client=true;
};
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
doNotPrompt=true
useTicketCache=true
principal="kafka/hd2.bigdata@HADOOP.COM"
useKeyTab=true
serviceName="kafka"
keyTab="E:\\kafka.service.keytab"
client=true;
};

solr的相关问题

1
2
Kinit nassoft_m
curl --negotiate -u : "http://hd1.bigdata:8983/solr/"

解决方法:

1
2
3
4
server/scripts/cloud-scripts/zkcli.sh -zkhost hd2.bigdata:2181,master2.bigdata:2181,master1.bigdata:2181 -cmd put /security.json '{"authentication":{"class": "org.apache.solr.security.KerberosPlugin"}}'
刷新solr keytab
修改 keytab 权限
重启solr集群

curl --negotiate -u : "http://hd1.bigdata:8983/solr/"
成功

0%