Kerberos

Kerberos

1、 几个概念

  • KDC:秘钥分发中心
  • Realm:kerberos管理的领域标识
  • Principal:用户/服务 向kdc注册时候的身份,形式为,主名称/实例名@领域名

    * 主名称:可以是用户名/服务名字
    * 实例名:可以是用户组/主机ip(host)
    

2、KDC

Key Distribute Center。

  • Database(zhangsan/supergroup hdfs/haddop1)

  • AS: Authentication Server(认证服务器)

    用于初始化认证,并生成Ticket Granting Ticket (TGT)

  • TGS: Ticket Granting Server(票据授权服务器)

    在TGT的基础上生成Service Ticket。一般情况下AS和TGS都在KDC的Server上

3、搭建

1
2
3
4
//重要的三个配置文件
/etc/krb5.conf
/var/kerberos/krb5kdc/kdc.conf
/var/kerberos/krb5kdc/kadm5.acl

部署

  • 安装KDC
install krb5-server krb5-libs krb5-workstation -y```
1
2
3
4

* 每个节点部署客户端(方便其他机器访问KDC)

```yum install krb5-libs krb5-workstation -y

修改配置

1、服务端配置

  • 位置:
    1
    2
    3
    * 可以配置多个realms,一般建议配置一个,大写
    * 配置support_enctype去掉```aes-2560cts:normal```,否则需要下载jar支持这个加密算法。
    * ```max_life=1d```(kinit 后一天内不用认证,超过1d会走的那个认证) ```max_renewable_life=7d```(7d后需要再kinit)

[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88

[realms]
HADOOP.COM = { #是设定的 realms。名字随意。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。

#master_key_type = aes256-cts

#和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包(后面再做说明)。推荐不使用,并且删除aes256-cts。
kadmind_port = 749
acl_file = /var/kerberos/krb5kdc/kadm5.acl #标注了admin的用户权限,需要用户自己创建。文件格式是:Kerberos_principal permissions [target_principal] [restrictions] 支持通配符等。最简单的写法是*/admin@HADOOP.COM ,代表名称匹配/admin@HADOOP.COM 都认为是admin,权限是 *。代表全部权限。
dict_file = /usr/share/dict/words
database_name = /var/kerberos/krb5kdc/principal
key_stash_file = /var/kerberos/krb5kdc/.k5.HADOOP.COM
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab #KDC 进行校验的 keytab
max_life = 24h
max_renewable_life = 10d #涉及到是否能进行ticket的renwe必须配置
default_principal_flags = +renewable, +forwardable
supported_enctypes = 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 #支持的校验方式.注意把aes256-cts去掉
}

1
2
3
4
5

#### 2、客户端配置
> 每个客户端都需要配置

* 位置:```/etc/krb5.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/
[logging] #[logging]:表示 server 端的日志的打印位置
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults] #[libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置
default_realm = HADOOP.COM #设置Kerberos应用程序的默认领域。如果您有多个领域,只需向[realms]节添加其他的语句
dns_lookup_realm = false
#clockskew = 120 #时钟偏差是不完全符合主机系统时钟的票据时戳的容差,超过此容差将不接受此票据。通常,将时钟扭斜设置为 300 秒(5 分钟)。这意味着从服务器的角度看,票证的时间戳与它的偏差可以是在前后 5 分钟内。~~
ticket_lifetime = 24h #表明凭证生效的时限,一般为24小时
renew_lifetime = 7d #表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败
forwardable = true #允许转发解析请求
rdns = false
udp_preference_limit = 1 #禁止使用udp可以防止一个Hadoop中的错误

[realms] #列举使用的realm
HADOOP.COM = {
kdc = node1:88 #代表要kdc的位置。格式是机器:端口。测试过程中也可不加端口。
admin_server = node1:749 #代表admin的位置。格式是机器:端口。测试过程中也可不加端口。
default_domain = HADOOP.COM #代表默认的域名。
}
[kdc]
profile=/var/kerberos/krb5kdc/kdc.conf
// 指定哪个域名数据哪个realm,单个realm不需要设置这个映射
[domain_realm]
#.example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM

3、创建Kerberos数据库

在 kdc安装的机器上运行

create [-r HADOOP.COM] -s```,会需要输入密码。生成的文件在```/var/kerberos/krb5kdc```路径下。里面默认生成了kerberos的主体(principals)
1
2
3
4
5


#### 4、启动

* 开启kdc:```systemctl start krb5kdc

  • 开启可远程登陆:

    start kadmin```
    1
    * 开机自启动 ```systemctl enable krb5kdc```、 ```systemctl enable kadmin

  • 检查是否开启自启动:

    is-enabled krb5kdc```、```systemctl is-enabled kadmin```
    1
    2
    3
    4


    #### 5、数据库登陆方式(类似mysql登陆)
    * kdc本地登陆(用户名&密码):```kadmin.local

    • 远程登陆()

6、kdc 账号操作

  • 新增(默认的域可以省略) :addprinc hf/hfgrioup[@HADOOP.COM]
  • 删除:delprinc hf

7、kerberos 主体认证 (互斥)

  • 用户名+密码:
    hf```
    1
    * 秘钥

// 生成秘钥
xst -k /home/username/user.keytab user/ugroup
// 认证
kinit -kt /home/username/user.keytab user/ugroup

1
2
3
4
5
6
7

* 退出 : quit


## CDH 启用kerberos准备

* 为CDH创建管理员主体

kadmin.local -q “addprinc cloudrea-scm/admin”

输入密码

1
2

* 给管理员实例的所有主体授权

vim /var/kerberos/krb5kdc/kadm5.acl

*/admin@HADOOP.COM *

`

  • 在CDH的管控台开启Kerberos。