首先第一步,是確定的代碼運行在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();
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://web.mit.edu/kerberos/dist/index.html
安裝直接next
如果kerberos的環境變量在後面的話,其他的軟件的指令裏面也帶了一些 kinit, ktab, klist 等軟件,所以輸入 kinit 、klist 的時候執行的是其他軟件的指令。所以最好把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