序言
kerberos 除了说帮我们验证Java程序是否具有权限来请求Hadoop的服务,也可以来帮助我们检查新增的节点是是否是真实的节点,还是黑客为了套取数据的节点.
比如为HDFS新增一个DataNode节点,如果没有Kerberos验证, 随便一个节点只要连接上NameNode就会存储数据,黑客就可以获取到我们的数据cuiyaonan2000@163.com
Kerberos
Kerberos是一种计算机网络认证协议,它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份,协议基于对称密码学,并需要一个值得信赖的第三方(KDC)
Kerberos 是第三方认证机制,其中用户和服务依赖于第三方(Kerberos 服务器)来对彼此进行身份验证。 Kerberos服务器本身称为密钥分发中心或 KDC。
如上Kerberos就是KDC ,那KDC中有如下的2个模块:
- AS(Authentication Server)= 认证服务器
 - TGS(Ticket Granting Server)= 票据授权服务器
 
工作流程

如上的流程:
- 客户端通过密钥与AS交互,获取一个临时的Ticket(这里面流程比较复杂,这里简答说下.比如AS会用密钥解密客户端的信息等)
 - 客户端拿到AS发送的Ticket 去TGS交互,获取一个正式的Ticket(这个票据比较特殊叫TGT).
 - 客户端拿着特殊的 TGT Ticket 去请求服务端
 - 服务端拿到TGT Ticket 去跟KDC交互 验证是否正确,正确就放行客户端通过.
 
Launch Kerberos Service
安装命令:
yum -y install krb5-server krb5-lib krb5-workstation 
安装完成后需要修改三个配置文件(这些文件在安装完后会自动创建,根据需要修改如下的内容cuiyaonan2000@163.com):
- /var/kerberos/krb5kdc/kdc.conf
 - /var/kerberos/krb5kdc/kadm5.acl
 - /etc/krb5.conf
 
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
 }
 
配置说明:
 [kdcdefaults]
 
kdc_ports :指定KDC的默认端口。
 kdc_tcp_ports :指定KDC的TCP协议默认端口。
 [realms]
 
 EXAMPLE.COM  :是设定的kerberos域,一般会改这个,这个根据其名字很容易理解就是设置一个被管理的网站根域名,后面创建的账号都是属于该域名的cuiyaonan2000@163.com
 acl_file :标注了admin的用户权限的文件,若文件不存在,需要用户自己创建。
 dict_file :该参数指向包含潜在可猜测或可破解密码的文件。
 admin_keytab :KDC 进行校验的 keytab。
 supported_enctypes :指定此KDC支持的各种加密类型。
kadm5.acl
自动创建的内容如下:
*/admin@EXAMPLE.COM     *
 
如上只有两列内容:第一列为用户名,第二列为权限分配
- */admin@EXAMPLE.COM : 表示 admin是属于EXAMPLE.COM中的一个账户,这个EXAMPLE.COM就是我们之前在kdc.conf中设置的
 - 第二个 * 表示拥有所有权限
 
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 = FILE:/etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
 default_ccache_name = KEYRING:persistent:%{uid}
[realms]
# EXAMPLE.COM = {
#  kdc = kerberos.example.com
#  admin_server = kerberos.example.com
# }
[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
 
 
 



















