1. Kerberos主kdc安装

1.1 安装kerberos服务

yum –y install krb5-libs
yum –y install krb5-server
yum –y install krb5-workstation
yum –y install krb5-auth-dialog
在安装完上述的软件之后,会在KDC主机上生成配置文件/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf,它们分别反映了realm name 以及 domain-to-realm mappings。

1.2 配置kerberos服务

1.2.1 配置krb5.conf
/etc/krb5.conf: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。

  1. [logging]
  2. default = FILE:/var/log/krb5libs.log
  3. kdc = FILE:/var/log/krb5kdc.log
  4. admin_server = FILE:/var/log/kadmind.log
  5. [libdefaults]
  6. default_realm = ocdp
  7. dns_lookup_realm = false
  8. dns_lookup_kdc = false
  9. ticket_lifetime = 30d
  10. renew_lifetime = 100d
  11. forwardable = true
  12. [realms]
  13. ocdp = {
  14. kdc = kdc1
  15. kdc = kdc2
  16. admin_server = kdc1
  17. }
  18. [domain_realm]
  19. .ocdp = ocdp
  20. [kdc]
  21. profile=/var/kerberos/krb5kdc/kdc.conf

说明:
[logging]:表示server端的日志的打印位置
[libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置
default_realm = HADOOP.COM 默认的realm,必须跟要配置的realm的名称一致。
udp_preference_limit = 1 禁止使用udp可以防止一个Hadoop中的错误
oticket_lifetime表明凭证生效的时限,一般为24小时。
orenew_lifetime表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,
对安全认证的服务的后续访问则会失败。
[realms]:列举使用的realm。
kdc:代表要kdc的位置。格式是 机器:端口
admin_server:代表admin的位置。格式是机器:端口
default_domain:代表默认的域名
[appdefaults]:可以设定一些针对特定应用的配置,覆盖默认配置。
1.2.2 配置kdc.conf
默认放在 /var/kerberos/krb5kdc/kdc.conf。或者通过覆盖KRB5_KDC_PROFILE环境变量修改配置文件位置。

  1. kdc_ports = 88
  2. kdc_tcp_ports = 88
  3. [realms]
  4. ocdp = {
  5. #master_key_type = aes256-cts
  6. acl_file = /var/kerberos/krb5kdc/kadm5.acl
  7. dict_file = /usr/share/dict/words
  8. admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  9. supported_enctypes = aes256-cts:normalaes128-cts:normal des3-hmac-sha1:normalarcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
  10. }

说明:
HADOOP.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。
max_renewable_life = 7d 涉及到是否能进行ticket的renwe必须配置。
master_key_type:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,更多参考2.2.9关于AES-256加密:。推荐不使用。
acl_file:标注了admin的用户权限。文件格式是
Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。
admin_keytab:KDC进行校验的keytab。后文会提及如何创建。
supported_enctypes:支持的校验方式。注意把aes256-cts去掉。
1.2.3 配置kadm5.acl
在KDC上我们需要编辑acl文件来设置权限,该acl文件的默认路径是 /var/kerberos/krb5kdc/kadm5.acl(也可以在文件kdc.conf中修改)。Kerberos的kadmind daemon会使用该文件来管理对Kerberos database的访问权限。对于那些可能会对pincipal产生影响的操作,acl文件也能控制哪些principal能操作哪些其他pricipals。
将文件/var/kerberos/krb5kdc/kadm5.acl的内容编辑为

  1. */admin@ocdp *
  2. kiprop/kdc2 p

1.3 创建kerberos数据库

初始化并启动:完成上面两个配置文件后,就可以进行初始化并启动了。
kdb5_util create-s -r ocdp
其中,[-s]表示生成stash file,并在其中存储master server key(krb5kdc);还可以用[-r]来指定一个realm name —— 当krb5.conf中定义了多个realm时才是必要的。
# 保存路径为/var/kerberos/krb5kdc 如果需要重建数据库,将该目录下的principal相关的文件删除即可
在此过程中,我们会输入database的管理密码。这里设置的密码一定要记住,如果忘记了,就无法管理Kerberos server。
当Kerberos database创建好后,可以看到目录 /var/kerberos/krb5kdc 下生成了几个文件:

  1. kadm5.acl
  2. kdc.conf
  3. principal
  4. principal.kadm5
  5. principal.kadm5.lock
  6. principal.ok

1.4 启动kerberos

service krb5kdcstart
service kadmin start

1.5 验证主kerberos ok

主机验证:
kadmin.local
addprinc admin/admin@ocdp
其他机器验证:
kinit admin/admin@ocdp
kadmin
能登录则ok。

2. Kerberos 备kdc安装

2.1 安装kerberos服务

yum –y install krb5-libs
yum –y install krb5-server
yum –y install krb5-workstation
yum –y install krb5-auth-dialog

2.2 配置kerberos服务

2.2.1 配置krb5.conf

  1. [logging]
  2. default = FILE:/var/log/krb5libs.log
  3. kdc = FILE:/var/log/krb5kdc.log
  4. admin_server = FILE:/var/log/kadmind.log
  5. [libdefaults]
  6. default_realm = ocdp
  7. dns_lookup_realm = false
  8. dns_lookup_kdc = false
  9. ticket_lifetime = 30d
  10. renew_lifetime = 100d
  11. forwardable = true
  12. [realms]
  13. ocdp = {
  14. kdc = kdc1
  15. kdc = kdc2
  16. admin_server = kdc1
  17. }
  18. [domain_realm]
  19. .ocdp = ocdp

2.2.2 配置kdc.conf

  1. kdc_ports = 88
  2. kdc_tcp_ports = 88
  3. [realms]
  4. ocdp = {
  5. #master_key_type = aes256-cts
  6. acl_file = /var/kerberos/krb5kdc/kadm5.acl
  7. dict_file = /usr/share/dict/words
  8. admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  9. sunw_dbprop_enable = true
  10. sunw_dbprop_slave_poll = 2m
  11. supported_enctypes = aes256-cts:normalaes128-cts:normal des3-hmac-sha1:normalarcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
  12. }

2.2.3 配置kadm5.acl

  1. */admin@ocdp *
  2. kiprop/kdc2 p

2.3搭建备kdc

在主kdc主机执行:
Kadmin
addprinc-randkey host/kdc1
ktadd host/kdc1
在备kdc主机执行:
Kadmin
addprinc-randkey host/kdc2
ktadd host/kdc2
在备kdc主机上执行::
kdb5_util create-s -r ocdp
在备kdc主机上创建/var/kerberos/krb5kdc/kpropd.acl
host/kdc1@ocdp
host/kdc2@ocdp
在备kdc上启动kpropd服务:
kpropd -S
至此,,slave上的kdc服务还不能启动,,因为无kdcdatabase数据
master上将相关数据同步到slave:
kdb5_util dump /var/kerberos/krb5kdc/slave
kprop -f /var/kerberos/krb5kdc/slave kdc2
Database propagation to kdc2: SUCCEEDED
启动备 kdc
service krb5kdc start
slave kdc文件夹下应该有的文件::
from_master kadm5.acl kdc.conf kpropd.acl principal principal.kadm5 principal.kadm5.lock principal.ok
ok备kdc如果启动正常,则进行测试即可。
遇到问题:
(1)[root@kdc1 krb5kdc]# kprop -f /var/kerberos/krb5kdc/slave kdc2
kprop: Decrypt integrity check failed while getting initialcredentials
原因:
之前的keytab已经存在,在同步认证时发现不匹配,认证失败,需要删除重新生成。
解决方法:
rm -rf /etc/krb5.keytab
主kdc:
kadmin: ktadd host/kdc1@ocdp
备kdc:
kadmin: ktadd host/kdc2@ocdp
然后同步就OK。
(2)停掉主kdc后,执行hadoop命令时报如下错:
18/03/25 23:15:26 WARN security.UserGroupInformation: Not attempting to re-login since the last re-login was attempted less than 60 seconds before. Last Login=1522044923682
原因:备kdc没有将主kdc的更新数据同步过去,需要手动同步一次即可。
解决方法:
kdb5_util dump /var/kerberos/krb5kdc/slave
kprop -f /var/kerberos/krb5kdc/slave kdc2
建议:写脚本定期执行同步命令。

3.ocdp集集成成kerberos kdcHA

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

4.kerbrps的基本操作

登录到管理员账户: 如果在本机上,可以通过kadmin.local直接登录。其它机器的,先使用kinit进行验证。
image.png
image.png

4.1增删改查账户

在管理员的状态下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。
kadmin.local: addprinc test
kadmin.local: delprinc test
kadmin.local: listprincs

4.2生成keytab:使用xst命令或者ktadd命令

kadmin:xst -k /xxx/xxx/kerberos.keytab hdfs/hadoop1

4.3查看当前的认证用户

klist

4.4认证用户

kinit -kt /xx/xx/kerberos.keytab hdfs/hadoop1

4.5删除当前的认证的缓存

kdestroy