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、搭建
//重要的三个配置文件
/etc/krb5.conf
/var/kerberos/krb5kdc/kdc.conf
/var/kerberos/krb5kdc/kadm5.acl
部署
- 安装KDC
yum install krb5-server krb5-libs krb5-workstation -y
- 每个节点部署客户端(方便其他机器访问KDC)
yum install krb5-libs krb5-workstation -y
修改配置
1、服务端配置
- 位置:
/var/kerberos/krb5kdc/kdc.conf
- 可以配置多个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去掉
}
2、客户端配置
每个客户端都需要配置
- 位置:
/etc/krb5.conf
# 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安装的机器上运行kdb5_util create [-r HADOOP.COM] -s
,会需要输入密码。生成的文件在/var/kerberos/krb5kdc
路径下。里面默认生成了kerberos的主体(principals)
4、启动
- 开启kdc:
systemctl start krb5kdc
- 开启可远程登陆:
systemctl start kadmin
- 开机自启动
systemctl enable krb5kdc
、systemctl enable kadmin
- 检查是否开启自启动:
systemctl is-enabled krb5kdc
、systemctl is-enabled kadmin
5、数据库登陆方式(类似mysql登陆)
- kdc本地登陆(用户名&密码):
kadmin.local
- 远程登陆()
6、kdc 账号操作
- 新增(默认的域可以省略) :addprinc hf/hfgrioup[@HADOOP.COM]
- 删除:delprinc hf
7、kerberos 主体认证 (互斥)
- 用户名+密码:
kinit hf
- 秘钥
// 生成秘钥
xst -k /home/username/user.keytab user/ugroup
// 认证
kinit -kt /home/username/user.keytab user/ugroup
- 退出 : quit
CDH 启用kerberos准备
- 为CDH创建管理员主体
kadmin.local -q "addprinc cloudrea-scm/admin"
输入密码
- 给管理员实例的所有主体授权
vim /var/kerberos/krb5kdc/kadm5.acl
*/admin@HADOOP.COM *
- 在CDH的管控台开启Kerberos。