用过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月
![]() |
![]() |