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:

  1. 下載4.1版本的kerberos客戶端。下載地址

http://web.mit.edu/kerberos/dist/index.html

安裝直接next

  1. 修改kerberos的keb5.ini文件,一般都在C:\ProgramData\MIT\Kerberos5

  1. 修改環境變量中的path路徑

如果kerberos的環境變量在後面的話,其他的軟件的指令裏面也帶了一些 kinit, ktab, klist 等軟件,所以輸入 kinit 、klist 的時候執行的是其他軟件的指令。所以最好把kerberos放最前面!

重中之重:改完之後一定要重啓電腦!!!

  1. 之後再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