用過hbase的朋友可能都有過這樣的疑問,我寫一個java client,好像就提供了zookeeper quorum地址就連上hbase了,那麼是否是存在安全問題?的確是,如何解決?hbase中引入了kerberos認證。我準備用兩篇博文介紹hbase + kerberos的相關內容,本篇主要介紹kerberos的配置。html
這裏我準備了三臺server,各自安裝上centos 6.5 64bitjava
kerberos簡單來講就是一套徹底控制機制,它有一箇中心服務器(KDC),KDC中有數據庫,你能夠往裏添加各類「人」以及各類「服務」的「身份證」,當某我的要訪問某個服務時,他拿着本身的「身份證」聯繫KDC並告訴KDC他想要訪問的服務,KDC通過一系列驗證步驟,最終依據驗證結果容許/拒絕這我的訪問此服務。關於kerberos具體的工做流程,參見文章《Explain like I’m 5: Kerberos》程序員
安裝web
#yum install krb5-libs krb5-server krb5-workstation數據庫
配置vim
1)#vim /etc/krb5.confcentos
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = MH.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] MH.COM = { kdc = kb1.mh.com:88 admin_server = kb1.mh.com:749 } [domain_realm] .mh.com = MH.COM mh.com = MH.COM
2)#vim /var/kerberos/krb5kdc/kdc.conf安全
[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] MH.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }
kerberos中的realm,即kerberos的域,相似於計算機網絡中"domain"的概念。服務器
3)#vim /var/kerberos/krb5kdc/kadm5.acl網絡
這個文件是用來控制哪些人可使用kadmin工具來管理kerberos數據庫,我這裏就配了一行:
*/admin@MH.COM *
其中前一個*號是通配符,表示像名爲「abc/admin」或「xxx/admin」的人均可以使用此工具(遠程或本地)管理kerberos數據庫,後一個*跟權限有關,*表示全部權限,還能夠進行更細的控制,參見ACL。
4)#kdb5_util create -s
初始化一個kerberos數據庫。
5)如今數據庫是空的,想要使用kadmin添加一我的到數據庫中,這是須要權限的,那麼最開始的那一我的是怎麼加到數據庫中的?這就須要kadmin.local這個工具,這個工具只能在kerberos server上執行(相似於oracle中的sys用戶無密碼登陸)。
#kadmin.local -q "addprinc admin/admin"
我這裏把管理員叫「admin/admin」,你能夠叫任何名字,可是由於此前咱們在kadm5.acl中的配置,名字必須以/admin結尾。過程當中會提示你輸入兩次密碼,記住這個密碼,當你在別的機器鏈接kadmin時,須要這個密碼。
啓動
驗證
若是kinit不帶參數,則會默認以當前操做系統用戶名,好比root,做爲名稱。由於root在kerberos的數據庫中並無,因此會提示失敗
正常應該顯示:
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@MH.COM
Valid starting Expires Service principal
04/10/15 13:03:36 04/11/15 13:03:36 krbtgt/MH.COM@MH.COM
renew until 04/10/15 13:03:36
如下這兩個應該不是必須的,與兼容性有關,ktadd命令會把「身份證」寫入到文件(.keytab後綴),能夠指定keytab文件,如不指定,默認寫入/etc/krb5.keytab
其它一些命令
通常在實例使用中經過kinit的方式較少,由於每次都要輸入密碼,因此更常用的是keytab文件,至關於爲某我的或服務生成一個密碼,並放在文件中,程序中則指向這個keytab,不用每次都輸入密碼。
如今,咱們到kbhbase1這臺機器上,即咱們的kerberos 客戶端上。kerberos對服務器跟客戶端之間的時間有要求,因此通常須要安裝ntp來做時間同步,我這裏直接手工同步了一下,就再也不介紹ntp了。 #yum install krb5-libs krb5-workstation 注意與kerberos server上的yum命令對比。安裝完成後把server上的krb5.conf文件拷貝過來覆蓋一下便可。注意:
與在server上相似,使用kinit和klist查看一下。也能夠嘗試執行kadmin,按提示使用admin/admin並輸入密碼(你以前建立管理員時輸入的密碼),正常應該可以鏈接上服務器,並對數據庫進行操做(好比添加或刪除人、服務)。
送書了,送書了,關注公衆號「程序員雜書館」,送出O'Reilly《Spark快速大數據分析》紙質書(亦有一批PDF分享)! —— 2018年12月