Kerberos的安装与使用

2019/01/18

摘要

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

目录