java API 访问带有Kerberos认证的HBase时window服务器的配置
首先第一步,是确定的代码运行在window服务器还是linux服务器下, 如果是window服务器下,首先要检测window服务器是否可以连接的通 hadoop平台的zk (2181端口) (telnet xxx.xxx.xxx.xxx 2181)确定连接无误的情况下,进行连接hbase服务器的验证操作(60020端口) (telnet xxx.xxx.xxx.xxx 60020)两者都通的话。下一步就是去的认证了。
首先,安装Kerberos客户端 , 安装windows版本的Kerberos客户端(链接:http://pan.baidu.com/s/1pLdIA5l 密码:e82j) ,然后进行创建配置文件 -- krb5.ini。
/**
[libdefaults]
default_realm = 登录用户
dns_lookup_kdc = false
dns_lookup_realm = false
ticket_lifetime = 86400
renew_lifetime = 604800
forwardable = true
default_tgs_enctypes = des3-cbc-sha1
default_tkt_enctypes = des3-cbc-sha1
permitted_enctypes = des3-cbc-sha1
udp_preference_limit = 1
kdc_timeout = 3000
[realms]
FHC = {
kdc = zookeeper的服务器器地址
admin_server =zookeeper的服务器器地址
kdc = zookeeper的服务器器地址
}
[domain_realm]
.example.com =
example.com =
*/
第三步 配置window服务器的系统环境变量
如 KRB5_CONFIG=d:\krb5.ini
最后就是 初始化 Kerberos 证书,keytab文件从hadoop服务器端可以下载到XXX.keytab
(kinit.exe –kt xxx.keytab [email protected])
再次出现401则需要重新执行kinit命令 (Kerberos证书24小时超时)
之后就可以写个demo测试一下啦~
附demo代码:
//这一行在window服务器下必须要加,否则读取不到配置文件
System. setProperty("java.security.krb5.conf", krb5.ini文件的window下的路径 )
config = HBaseConfiguration.create();
//其中这些xml的配置文件来自于hbase服务器的配置文件,将他们拷下来放在相应的目录下在代码里
指定他们的路径
config.addResource("E:\\HbaseConf\\hbase-site.xml");
config.addResource("E:\\HbaseConf\\core-site.xml");
config.addResource("E:\\HbaseConf\\hdfs-site.xml");
config.addResource("E:\\HbaseConf\\ssl-clinet.xml");
UserGroupInformation.setConfiguration(config);
try{
UserGroupInformation.loginUserFromKeytab("xxx", "C:\\xxx.keytab" );
htable = new HTable(config, "表名");
Put put = new Put(Bytes.toBytes("TESTROW0004"));
put.setWriteToWAL(false);
put.add(Bytes.toBytes("INFO"), Bytes.toBytes("TESTCOLUMN"),
Bytes.toBytes("TESTVALUES0004") );
htable.put(put);
Scan scan = new Scan();
scan.addFamily(Bytes.toBytes("INFO"));
ResultScanner rs = htable.getScanner(scan);
for (Result r : rs) {
String rowkey = Bytes.toString(r.getRow());
String rowvalues = Bytes.toString( r.getValue( Bytes.toBytes("INFO"),
Bytes.toBytes( "TESTCOLUMN")) );
System.out.println("== rowkey :"+ rowkey +" rowvalues :" +rowvalues);
}
} catch (IOException e) {
e.printStackTrace();
} finally{
if( htable != null ) htable.close();
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Windows配置kerberos:
- 下载4.1版本的kerberos客户端。下载地址
http://web.mit.edu/kerberos/dist/index.html
安装直接next
- 修改kerberos的keb5.ini文件,一般都在C:\ProgramData\MIT\Kerberos5
- 修改环境变量中的path路径
如果kerberos的环境变量在后面的话,其他的软件的指令里面也带了一些 kinit, ktab, klist 等软件,所以输入 kinit 、klist 的时候执行的是其他软件的指令。所以最好把kerberos放最前面!
重中之重:改完之后一定要重启电脑!!!
- 之后再cmd中输入登录指令
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Linux配置kerberos:
最近需要给hadoop集群加上安全验证,采用kerberos作为认证,这里记录一下安装kerberos kdc的经验
服务器centos6.7,采用在线yum安装的方式
1、使用yum install krb5-libs krb5-server krb5-workstation 进行安装,遇到是/否一律选择是
2、等待安装完成,开始进行配置,首先配置/etc/krb5.conf文件,其中特别要配置的为default_realm,这里为自定义的一个领域(可以理解为域名),注意一定要大写如TEST.COM/TEST,下面花括号外面值和default-realm一样。话括号里为配置kdc和admin的主机名,这里配置为同一台主机即当前主机名,如果kdc有多台的话,也可以配置多个kdc=xxx
3、配置/var/kerberos/krb5kdc/kdc.conf和/var/kerberos/krb5kdc/kadm5.acl文件,其中kadm5.acl表示kadmin管理帐号为*/[email protected]_EALM的,即所有带/admin都为可以是管理帐号
4、创建kerberos数据库,
4-1首先创建前看到/var/kerberos/krb5kdc/仅用两个文件
4-2创建数据库,使用命令kdb5_util create -r your_realm -s,注意,在Loading random data这里的时候可能会要比较久的时间
[[email protected] ~]# kdb5_util create -r TEST.COM -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'TEST.COM',
master key name 'K/[email protected]'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
[[email protected] ~]#
5、创建完毕后,在查看/var/kerberos/krb5kdc/下面发现已经多了几个principal相关的文件,其实这些就是kerberos的数据文件。而如果把这个文件删除就相当于把数据库删除需要重建,可以把这些文件mv走然后kadmin.local试试,应该是会报错的,然后再把这些文件mv回来。又可以了
6、创建管理员并输入密码(帐号admin/admin(一定要带xxx/admin) 密码一定要记住)
[[email protected] ~]# /usr/sbin/kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/[email protected] with password.
WARNING: no policy specified for admin/[email protected]; defaulting to no policy
Enter password for principal "admin/[email protected]":
Re-enter password for principal "admin/[email protected]":
Principal "admin/[email protected]" created.
7、设置kadmin和k5bdkdc服务开机启动(一个kdc的服务一个kadmin管理服务)
8、验证通过admin登录
9、添加一个test帐号并且查看是否进入数据库(通过kadmin.local 然后listprincs查看)
以上已经安装成功,接下来将在cdh hadoop集群上开启kerberos管理、
参考http://web.mit.edu/kerberos/krb5-latest/doc/index.html