Client:需要访问服务的用户(principal),KDC和Service会对用户的身份进行认证。
Service:集成了Kerberos的服务,如HDFS/YARN/HBase等。
principal:当每添加一个用户或服务的时候都需要向kdc添加一条principal,principl的形式为 主名称/实例名@领域名。
TGT : 票证授予票证。
SGT : 服务授予票证。
**认证步骤:**
* KDC对Client身份认证
当客户端用户(principal)访问一个集成了Kerberos的服务之前,需要先通过KDC的身份认证。
若身份认证通过,则客户端会获取到一个TGT(Ticket Granting Ticket,票据),后续就可以使用该TGT去访问集成了Kerberos的服务。
* Service对Client身份认证
当用户获取TGT后,就可以继续访问Service服务。它会使用TGT以及需要访问的服务名称(如 HDFS)去KDC获取SGT(Service Granting Ticket),然后使用SGT去访问 Service,Service会利用相关信息对Client进行身份认证,认证通过后就可以正常访问Service服务。
### **1.3 Kerbros的安装部署**
#### **1.3.1 Kerbros服务端安装(KDC)**
[root@hadoop01 ~]# yum install -y krb5-server krb5-lib krb5-workstation
或者使用下面这个:
yum install -y krb5-server krb5-libs krb5-auth-dialog krb5-workstation
#### **1.3.2 Kerbros客户端安装**
客户机在hadoop的从节点上安装即可。
[root@hadoop02 ~]# yum install -y krb5-libs krb5-workstation
[root@hadoop03 ~]# yum install -y krb5-libs krb5-workstation
#### **1.3.3 KDC的配置**
在安装的kerbros服务端上修改即可。
[root@hadoop01 ~]# vi /var/kerberos/krb5kdc/kdc.conf
修改内容如下:
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EXAMPLE.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 camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
HIVE.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_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
}
配置说明:
HIVE.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,一般全用大写
master_key_type,supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,这里暂不使用
acl_file:标注了admin的用户权限。文件格式是
Kerberos_principal permissions [target_principal] [restrictions]支持通配符等
admin_keytab:KDC进行校验的keytab
supported_enctypes:支持的校验方式。注意把aes256-cts去掉
#### **1.3.4 krb5.conf配置**
krb5.conf需要再kerbros的服务和客户端都配置。
kerbros服务端配置:
[root@hadoop01 ~]# vi /etc/krb5.conf
替换内容如下:
Configuration snippets may be placed in this directory as well
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_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
default_realm = EXAMPLE.COM
default_ccache_name = KEYRING:persistent:%{uid}
default_realm = HIVE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
clockskew = 120
udp_preference_limit = 1
[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com
admin_server = kerberos.example.com
}
HIVE.COM = {
kdc = hadoop01
admin_server = hadoop01
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
.hive.com = HIVE.COM
hive.com = HIVE.COM
kerbros客户端配置:
[root@hadoop02 ~]# vi /etc/krb5.conf
内容如上
[root@hadoop03 ~]# vi /etc/krb5.conf
内容如上
配置说明:
[logging]:表示server端的日志的打印位置
udp_preference_limit = 1 禁止使用udp可以防止一个Hadoop中的错误
ticket_lifetime: 表明凭证生效的时限,一般为24小时。
renew_lifetime: 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。
clockskew:时钟偏差是不完全符合主机系统时钟的票据时戳的容差,超过此容差将不接受此票据,单位是秒
修改其中的realm,把默认的EXAMPLE.COM修改为自己要定义的值,如:HIVE.COM。其中,以下参数需要修改:
default_realm:默认的realm。设置为realm。如HIVE.COM
kdc:代表要kdc的位置。添加格式是 机器名
admin_server:代表admin的位置。格式是机器名
default_domain:代表默认的域名。(设置master主机所对应的域名,如hive.com)
#### **1.3.5 d