内容
1. 安装Kerberos
在生产环境中安装设置Kerberos时,最好将多个备份KDC (Slave KDC)与主KDC (Master KDC)一起安装使用,以确保Kerberized服务的持续可用性。 每个KDC都包含Kerberos数据库的副本。 主KDC包含Realm数据库的可写副本,它以固定间隔复制数据到备份KDC。 所的有数据库更改(例如密码更改)都在主KDC上进行。 当主KDC不可用时,备份KDC提供Kerberos票证授予服务,但备份KDC不提供数据库管理。
许多GNU / BSD发行版都有工具来方便地安装Kerberos运行环境,但也可以直接从源代码编译和运行Kerberos。为了便于维护和管理,建议使用自己喜欢的工具来安装MIT Kerberos。 以下是不同的常见系统的软件包名称:
请参加MIT 官方文档,如何安装和编译 MIT Kerberos ,链接如下:https://web.mit.edu/kerberos/krb5-1.12/doc/build/doing_build.html#do-build。
2. KDC配置文件
安装Kerberos之后,就需要修改配置文件krb5.conf和kdc.conf,以反映Realm的正确配置信息(例如 域映射即Realm Mapping和Kerberos服务器名称)。
配置中的大多数属性都具有适用于大多数Realm的默认值。如果这些配置文件的位置与默认位置不同,需将KRB5_CONFIG和KRB5_KDC_PROFILE环境变量分别指向krb5.conf和kdc.conf正确的位置,例如:
export KRB5_CONFIG=/yourdir/krb5.conf export KRB5_KDC_PROFILE=/yourdir/kdc.conf
Krb5.conf
在该配置文件中,必须在[libdefaults]中指定default_realm,并且必须在[realms]部分中为每个域包含kdc属性, 要与每个Realm中的kadmin服务器通信,必须在[realms]部分中设置admin_server标记。
示例krb5.conf文件内容如下:
[libdefaults] default_realm = ATHENA.MIT.EDU [realms] ATHENA.MIT.EDU = { kdc = kerberos.mit.edu kdc = kerberos-1.mit.edu admin_server = kerberos.mit.edu }
Kdc.conf
kdc.conf文件可用于控制KDC和kadmind的监听端口,以及特定Realm的默认值,数据库类型以及日志记录。
示例kdc.conf文件内容如下:
[kdcdefaults] kdc_ports = 88,750 [realms] ATHENA.MIT.EDU = { kadmind_port = 749 max_life = 12h 0m 0s max_renewable_life = 7d 0h 0m 0s master_key_type = aes256-cts supported_enctypes = aes256-cts:normal aes128-cts:normal # If the default location does not suit your setup, # explicitly configure the following values: # database_name = /var/krb5kdc/principal # key_stash_file = /var/krb5kdc/.k5.ATHENA.MIT.EDU # acl_file = /var/krb5kdc/kadm5.acl } [logging] # By default, the KDC and kadmind will log output using # syslog. You can instead send log output to files like this: kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmin.log default = FILE:/var/log/krb5lib.log
用相应的Kerberos Realm和KDC 服务器的名称替换上述例子中的ATHENA.MIT.EDU和kerberos.mit.edu设置。
3. 创建KDC数据库
可以在KDC服务器上使用kdb5_util命令来创建Kerberos数据库和可选的stash 文件。Stash文件是KDC服务器的Master Key的本地存储文件,它以加密形式驻留在KDC的本地磁盘上。 Stash文件用于在启动kadmind和krb5kdc守护进程之前自动向KDC提供身份验证。如果选择不安装Stash文件,KDC将在每次启动时提示用户输入Master Key, KDC将无法自动启动。
kdb5_util将提示用户输入Kerberos数据库的主密码, 此密码可以是任何字符串。以下是如何使用kdb5_util命令在KDC上创建Kerberos数据库和stash文件的示例。 请根据实际情况,替换ATHENA.MIT.EDU为合适的Kerberos Realm的名称:
shell% kdb5_util create -r ATHENA.MIT.EDU -s Initializing database '/usr/local/var/krb5kdc/principal' for realm 'ATHENA.MIT.EDU', master key name 'K/M@ATHENA.MIT.EDU' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: <= Type the master password. Re-enter KDC database master key to verify: <= Type it again. shell%
这将在LOCALSTATEDIR / krb5kdc(或在kdc.conf中指定的位置)创建如下文件:
-
两个Kerberos数据库文件,principal和principal.ok
-
Kerberos管理数据库文件principal.kadm5
-
管理数据库锁文件,principal.kadm5.lock
-
Stash文件,在此示例中为.k5.ATHENA.MIT.EDU。 如果不需要Stash文件,请运行上面的命令而不使用-s选项。
4. ACL文件
KDC管理员需要创建一个访问控制列表(ACL)文件,并将至少一个管理员的Kerberos Principal放入其中, kadmind守护程序使用此文件来控制哪些Principal可以查看并对Kerberos数据库文件进行权限修改。 ACL文件名由kdc.conf中的acl_file变量确定; 默认值为LOCALSTATEDIR下的 / krb5kdc / kadm5.acl文件。可以参见链接 https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/kadm5_acl.html#kadm5-acl-5 了解关于Kerberos ACL 的详细信息。
5. 将管理员添加到Kerberos数据库
需要将管理员 Principal(即允许管理Kerberos数据库的Principal)添加到Kerberos数据库中。 首先必须至少添加一个Principal,以允许通过网络在Kerberos管理守护程序kadmind和kadmin程序之间进行通信,可以在KDC上使用kadmin.local程序。 kadmin.local可以在KDC主机上运行,它必须具有对本地文件系统上的Kerberos数据库的读写访问权限。
创建的管理员Principal应该被添加到ACL文件的管理主体。在以下示例中,将创建管理员 Principal admin / admin:
shell% kadmin.local kadmin.local: addprinc admin/admin@ATHENA.MIT.EDU WARNING: no policy specified for "admin/admin@ATHENA.MIT.EDU"; assigning "default". Enter password for principal admin/admin@ATHENA.MIT.EDU: <= Enter a password. Re-enter password for principal admin/admin@ATHENA.MIT.EDU: <= Type it again. Principal "admin/admin@ATHENA.MIT.EDU" created. kadmin.local:
6. Kerebero 进程的启动
可以在KDC服务器上启动Kerberos KDC(krb5kdc)和管理守护程序。 如下命令:
shell% krb5kdc shell% kadmind
每个服务器守护程序将在后台启动并运行。
注意
如果希望守护进程在系统启动时自动启动,可以将它们添加到KDC的/ etc / rc或/ etc / inittab文件中。
可以通过在krb5.conf中定义的日志记录位置检查其启动消息来验证它们是否已正确启动 。例如:
shell% tail /var/log/krb5kdc.log Dec 02 12:35:47 beeblebrox krb5kdc[3187](info): commencing operation shell% tail /var/log/kadmin.log Dec 02 12:35:52 beeblebrox kadmind[3189](info): starting
后台程序在启动时遇到的任何错误也将列在日志记录输出中。
也可以检查kinit是否成功来验证已经成功创建的 Principal(将管理员添加到Kerberos数据库), 例如:
shell% kinit admin/admin@ATHENA.MIT.EDU
7. KDC 客户端的配置
上述各节主要介绍了Kerberos 服务器端的主要配置和操作,下面简单介绍Kerberos 客户端的配置。主要的配置文件是/etc/krb5.conf, 此文件主要由Kerberos库用于配置需要访问KDC的任何kerberized客户端。示例如下:
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_keytab_name = /etc/krb5.keytab dns_lookup_realm = false dns_lookup_kdc= false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = EXAMPLE.COM default_ccache_name = KEYRING:persistent:%{uid} default_tgs_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5 default_tkt_enctypes = aes des3-cbc-sha1 rc4 des-cbc-md5 [realms] EXAMPLE.COM = { kdc = kerberos.example.com admin_server = kerberos.example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM
如果krb5.conf文件配置是正确的,可以尝试用Kinit启动对KDC的身份验证。
在尝试kinit之前,首先应该检查如下两项设置:
-
时钟同步(两台机器之间的时钟偏差)
-
DNS和反向DNS
如果配置了DNS和时钟同步后,使用kinit启动Kerberos身份验证,如下:
# kinit -p frank # Initiate a ticket negotiation for principal frank@FOOBAR.COM Password for frank@FOOBAR.COM