Kerberos安装使用
1. 安装Kerberos
1.1 server节点安装
[root@hadoop101 ~]# yum install -y krb5-server krb5-workstation krb5-libs
#查看结果
[root@hadoop101 ~]# rpm -qa | grep krb5
krb5-workstation-1.10.3-65.el6.x86_64
krb5-libs-1.10.3-65.el6.x86_64
krb5-server-1.10.3-65.el6.x86_641.2 client节点安装
[root@hadoop102 ~]# yum install -y krb5-workstation krb5-libs
[root@hadoop103 ~]# yum install -y krb5-workstation krb5-libs
[root@hadoop104 ~]# yum install -y krb5-workstation krb5-libs
[root@hadoop105 ~]# yum install -y krb5-workstation krb5-libs
#查看结果
[root@hadoop102 ~]# rpm -qa | grep krb5
krb5-workstation-1.10.3-65.el6.x86_64
krb5-libs-1.10.3-65.el6.x86_642. 配置kerberos
在hadoop101节点配置服务端和客户端,然后分发客户端配置。
2.1 kdc配置
[root@hadoop101 ~]# vim /var/kerberos/krb5kdc/kdc.conf
## 修改内容如下: 其中realm名称通常大写
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
HADOOP.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
max_life = 1d
max_renewable_life = 7d
supported_enctypes = aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}说明:
HADOOP.COM:realm名称,Kerberos支持多个realm,全用大写。
acl_file:admin的用户权。
admin_keytab:KDC进行校验的keytab。
supported_enctypes:支持的校验方式,注意把aes256-cts去掉,JAVA使用aes256-cts验证方式需要安装额外的jar包,所有这里不用。
2.2 krb5文件配置
[root@hadoop101 ~]# vim /etc/krb5.conf
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
## 访问dns需要连接外网,会导致程序变慢
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
## 配置默认realm, 用户认证的时候输入principal,格式中可以不写realm简写成用户名
default_realm = HADOOP.COM
#default_ccache_name = KEYRING:persistent:%{uid}
udp_preference_limit = 1
[realms]
HADOOP.COM = {
## 配置kdc地址
kdc = hadoop101
## 配置读写用户信息的服务地址,也就是KDC中的database数据的维护程序
admin_server = hadoop101
}
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM说明:
default_realm:默认的realm,设置 Kerberos 应用程序的默认领域,必须跟要配置的realm的名称一致。
ticket_lifetime:表明凭证生效的时限,一般为24小时。
renew_lifetime :表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。
udp_preference_limit= 1:禁止使用udp,可以防止一个Hadoop中的错误。
realms:配置使用的 realm,如果有多个领域,只需向 [realms] 节添加其他的语句。
domain_realm:集群域名与Kerberos realm的映射关系,单个realm的情况下,可忽略。
2.3 同步krb5到Client节点
## root用户可以使用绝对路径执行xsync命令
[root@hadoop101 ~]# /home/jack/bin/xsync /etc/krb5.conf3. 初始化Kerberos数据库
- 在server节点执行
[root@hadoop101 ~]# kdb5_util create -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'HADOOP.COM',
master key name 'K/M@HADOOP.COM'
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:(确认密码)创建完成后/var/kerberos/krb5kdc目录下会生成对应的文件
[root@hadoop101 ~]# ls /var/kerberos/krb5kdc/
kadm5.acl kdc.conf principal principal.kadm5 principal.kadm5.lock principal.ok4. 修改Kerberos管理员所有权限
配置具体创建实体的权限,但不是具有访问任何数据权限:
[root@hadoop101 ~]# vim /var/kerberos/krb5kdc/kadm5.acl
#修改为以下内容:
*/admin@HADOOP.COM *说明:
*/admin:admin实例的全部主体
@HADOOP.COM:realm
*:全部权限
这个授权的意思:就是授予admin实例的全部主体对应HADOOP.COM领域的全部权限。也就是创建Kerberos主体的时候如果实例为admin,就具有HADOOP.COM领域的全部权限,比如创建如下的主体user1/admin就拥有全部的HADOOP.COM领域的权限。
5. 启动Kerberos服务
#启动krb5kdc
[root@hadoop101 ~]# systemctl start krb5kdc
#启动kadmin
[root@hadoop101 ~]# systemctl start kadmin
#设置开机自启
[root@hadoop101 ~]# systemctl enable krb5kdc
[root@hadoop101 ~]# systemctl enable kadmin启动失败时可以通过/var/log/krb5kdc.log和/var/log/kadmind.log来查看。
6. 创建Kerberos管理员
在KDC所在的主机上执行,并按照提示输入密码:
[root@hadoop101 ~]# kadmin.local -q "addprinc admin/admin"
Authenticating as principal root/admin@EXAMPLE.COM with password.
No policy specified for admin/admin@EXAMPLE.COM; defaulting to no policy
Enter password for principal "admin/admin@EXAMPLE.COM":
Re-enter password for principal "admin/admin@EXAMPLE.COM":
Principal "admin/admin@EXAMPLE.COM" created.