摘要
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。
在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
认证过程
客户机向认证服务器(AS)发送请求,要求得到某服务器的证书,然后 AS 的响应包含这些用客户端密钥加密的证书。证书的构成为: 1) 服务器 “ticket” ; 2) 一个临时加密密钥(又称为会话密钥 “session key”) 。客户机将 ticket (包括用服务器密钥加密的客户机身份和一份会话密钥的拷贝)传送到服务器上。会话密钥可以(现已经由客户机和服务器共享)用来认证客户机或认证服务器,也可用来为通信双方以后的通讯提供加密服务,或通过交换独立子会话密钥为通信双方提供进一步的通信加密服务。
服务端安装
安装kdc服务软件
yum install krb5-server krb5-libs krb5-auth-dialog krb5-workstation -y
配置kdc服务
kdc 服务涉及到三个配置文件:
- /etc/krb5.conf
- /var/kerberos/krb5kdc/kdc.conf
- /var/kerberos/krb5kdc/kadm5.acl
配置 /etc/krb5.conf
vim /etc/krb5.conf
includedir /etc/krb5.conf.d/
[logging] # 表示 server 端的日志的打印位置
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults] # 每种连接的默认配置,需要注意以下几个关键的小配置
default_realm = GEMS.COM # 设置 Kerberos 应用程序的默认领域。如果您有多个领域,只需向 [realms] 节添加其他的语句。
dns_lookup_kdc = false # 指定允许DNS解析kdc请求包
dns_lookup_realm = false # 指定无需DNS解析域请求包
ticket_lifetime = 24h # 表明凭证生效的时限,一般为24小时。
renew_lifetime = 7d # 表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,对安全认证的服务的后续访问则会失败。
forwardable = true # 允许转发解析请求
rdns = false
default_tgs_enctypes = rc4-hmac
default_tkt_enctypes = rc4-hmac
permitted_enctypes = rc4-hmac
udp_preference_limit = 1
kdc_timeout = 3000
#clockskew = 120 # 时钟偏差是不完全符合主机系统时钟的票据时戳的容差,超过此容差将不接受此票据。通常,将时钟扭斜设置为 300 秒(5 分钟)。这意味着从服务器的角度看,票证的时间戳与它的偏差可以是在前后 5 分钟内。
#udp_preference_limit= 1 # 禁止使用 udp 可以防止一个 Hadoop 中的错误
#default_ccache_name = KEYRING:persistent:%{uid}
[realms] # 列举使用的 realm
GEMS.COM = {
kdc = node01.yangyang.com # 代表要 kdc 的位置。格式是 机器:端口
admin_server = node01.yangyang.com # 代表 admin 的位置。格式是 机器:端口
#default_domain = lycb.local # 指定默认域
}
[domain_realm] # 设置一个域搜索范围,并通过这两个语句可以使得域名与大小写无关
.node01.yangyang.com = GEMS.COM
node01.yangyang.com = GEMS.COM
配置 /var/kerberos/krb5kdc/kdc.conf
vim /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
GEMS.COM = { # 是设定的 realms。名字随意。Kerberos 可以支持多个 realms,会增加复杂度。大小写敏感,一般为了识别使用全部大写。这个 realms 跟机器的 host 没有大关系。
#master_key_type = aes256-cts # 和 supported_enctypes 默认使用 aes256-cts。JAVA 使用 aes256-cts 验证方式需要安装 JCE 包,见下面的说明。为了简便,你可以不使用 aes256-cts 算法,这样就不需要安装 JCE 。
max_renewable_life = 7d #
max_life = 1d
acl_file = /var/kerberos/krb5kdc/kadm5.acl
# 标注了 admin 的用户权限,需要用户自己创建。文件格式是:Kerberos_principal permissions [target_principal]
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
# KDC 进行校验的 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
# 支持的校验方式。
default_principal_flags = +renewable, +forwardable
}
配置 /var/kerberos/krb5kdc/kadm5.acl
vim /var/kerberos/krb5kdc/kadm5.acl
*/admin@GEMS.COM *
创建Kerberos数据库
kdb5_util create -r GEMS.COM -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'GEMS.COM',
master key name 'K/M@GEMS.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:
输入认证的密码为: GEMS.COM
创建Kerberos的管理账号
kadmin.local
Authenticating as principal root/admin@GEMS.COM with password.
kadmin.local: addprinc admin/admin@GEMS.COM
WARNING: no policy specified for admin/admin@GEMS.COM; defaulting to no policy
Enter password for principal "admin/admin@GEMS.COM": [输入密码]
Re-enter password for principal "admin/admin@GEMS.COM": [输入密码]
Principal "admin/admin@GEMS.COM" created.
kadmin.local: exit
启动krb5的服务并添加自启动服务
service krb5kdc start
service kadmin start
chkconfig --level 35 krb5kdc on
chkconfig --level 35 kadmin on
测试kerberos的管理员账号
kinit admin/admin\@BOE01.COM
Password for admin/admin\@BOE01.COM:
klist
klist -e
集群所有节点安装Kerberos客户端(包括CM)
# 全部节点都要安装
yum -y install krb5-libs krb5-workstation
# CM节点安装额外组件
yum -y install openldap-clients
从服务端分发配置文件
scp /etc/krb5.conf node02:/etc
scp /etc/krb5.conf node03:/etc