概述
众所周知,互联网很不安全,互联网上使用的许多协议都不提供任何安全性保证。因此,通过网络发送未加密密码的应用程序极易受到攻击。这种不安全问题,不是防火墙能够解决的。
为解决这类网络安全问题,Kerberos协议应运而生。Kerberos是一种网络身份验证协议,通过使用强大的密钥加密技术,为客户端/服务端通信提供强大的身份验证功能,客户端与服务端可以基于不安全的网络建立连接,相互进行身份验证。甚至,可以对通信内容进行加密,以确保数据的隐私和完整性。
麻省理工学院提供Kerberos协议的开源实现-MIT Kerberos,任何希望使用它的人都可以自己查看代码,并确保代码是可信的,也可以直接应用于商业产品中。总之,Kerberos是网络安全问题的解决方案。它通过网络提供身份验证和强大的加密工具,以帮助企业保护内部信息系统。可以说,Kerberos对信息/技术体系结构来说是无价的。
Yum安装
Kerberos服务端节点
[root@felixzh1 home]# yum install -ykrb5-server krb5-libs krb5-workstation
Kerberos客户端节点
[root@felixzh2 ~]# yum install -ykrb5-devel krb5-workstation
配置文件-krb5.conf
适用于客户端和服务端上使用Kerboros的所有应用程序。
默认安装位置/etc/krb5.conf,可以使用环境变量KRB5_CONFIG指定。
通常包含如下节点(也可以包含kdc.conf中的节点,但不推荐这么玩):
说明:
节点参数太多,这里就不一一介绍,详细可以查阅官网:
https://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/krb5_conf.html#sections
默认安装,krb5.conf文件内容如下:
官网示例如下:
[libdefaults]
default_realm = ATHENA.MIT.EDU
dns_lookup_kdc = true
dns_lookup_realm = false
[realms]
ATHENA.MIT.EDU = {
kdc = kerberos.mit.edu
kdc = kerberos-1.mit.edu
kdc = kerberos-2.mit.edu
admin_server = kerberos.mit.edu
primary_kdc = kerberos.mit.edu
}
EXAMPLE.COM = {
kdc = kerberos.example.com
kdc = kerberos-1.example.com
admin_server = kerberos.example.com
}
[domain_realm]
mit.edu = ATHENA.MIT.EDU
[capaths]
ATHENA.MIT.EDU = {
EXAMPLE.COM = .
}
EXAMPLE.COM = {
ATHENA.MIT.EDU = .
}
配置文件-kdc.conf
kdc.conf对krb5.conf进行补充,通常仅适用于kdc特定进程(krb5kdc、kadmind、kdb5_util)。此时,krb5.conf和kdc.conf将被合并到一个单独的配置文件中使用。
注意:修改kdc.conf文件,需要重启kdc特定进程,才能生效。
默认安装位置/var/kerberos/krb5kdc/kdc.conf,可以使用环境变量KRB5_KDC_PROFILE指定。
通常包含如下节点:
https://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/kdc_conf.html#sections
默认安装,kdc.conf文件内容如下:
官网示例如下:
[kdcdefaults]
kdc_listen = 88
kdc_tcp_listen = 88
[realms]
ATHENA.MIT.EDU = {
kadmind_port = 749
max_life = 12h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = aes256-cts-hmac-sha1-96
supported_enctypes = aes256-cts-hmac-sha1-96:normal aes128-cts-hmac-sha1-96:normal
database_module = openldap_ldapconf
}
[logging]
kdc = FILE:/usr/local/var/krb5kdc/kdc.log
admin_server = FILE:/usr/local/var/krb5kdc/kadmin.log
[dbdefaults]
ldap_kerberos_container_dn = cn=krbcontainer,dc=mit,dc=edu
[dbmodules]
openldap_ldapconf = {
db_library = kldap
disable_last_success = true
ldap_kdc_dn = "cn=krbadmin,dc=mit,dc=edu"
# this object needs to have read rights on
# the realm container and principal subtrees
ldap_kadmind_dn = "cn=krbadmin,dc=mit,dc=edu"
# this object needs to have read and write rights on
# the realm container and principal subtrees
ldap_service_password_file = /etc/kerberos/service.keyfile
ldap_servers = ldaps://kerberos.mit.edu
ldap_conns_per_server = 5
}
配置文件-kadm5.acl
Kerberos kadmind进程利用ACL文件(即kadm5.acl)进行Kerberos数据库的权限管理。对于影响principals的操作,kadm5.acl可以精确控制到每个principals。默认安装位置/var/kerberos/krb5kdc/kadm5.acl,可以使用kdc.conf中realms节点中的acl_file参数指定。
注意:修改kadm5.acl文件,需要重启kadmind进程,才能生效。
语法:
principal permissions [target_principal [restrictions]]
注意:以行为单位设置,优先级由上到下,越来越低。
principal permissions为必选项,[target_principal [restrictions] ]为可选项。
其中,permissions详细参数项如下:
https://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/kadm5_acl.html#syntax
默认安装,kadm5.acl文件内容如下:
官网示例如下:
*/admin@ATHENA.MIT.EDU * # line 1
joeadmin@ATHENA.MIT.EDU ADMCIL # line 2
joeadmin/*@ATHENA.MIT.EDU i */root@ATHENA.MIT.EDU # line 3
*/root@ATHENA.MIT.EDU ci *1@ATHENA.MIT.EDU # line 4
*/root@ATHENA.MIT.EDU l * # line 5
sms@ATHENA.MIT.EDU x * -maxlife 9h -postdateable # line 6
Realm配置决策
在安装Kerberos V5之前,有必要考虑以下问题:
确认Kerberos realm的名称(或者需要多个realm时每个realm的名称)。
确认如何将hostnames分配给Kerberos realms。
KDC(default port:88)进程和kadmind(default port:749)进程是否使用默认端口。
确认需要多少replica KDCs以及如何部署。
确认主KDC和副本KDC的主机名。
将数据库从主KDC传播到副本KDC的频率。
https://web.mit.edu/kerberos/krb5-latest/doc/admin/realm_config.html#realm-configuration-decisions
源码编译
当前最新版本为1.19.2。
[root@felixzh1 home]# yum install byaccflex bison
[root@felixzh1 home]# wget http://web.mit.edu/kerberos/dist/krb5/1.19/krb5-1.19.2.tar.gz
[root@felixzh1 home]# cd krb5-1.19.2/src/
[root@felixzh1 src]# ./configure
[root@felixzh1 src]# make -j 8
[root@felixzh1 src]# make install