WEB开发网
开发学院操作系统Linux/Unix IBM Network Authentication Service KDC 配置,第... 阅读

IBM Network Authentication Service KDC 配置,第 1 部分

 2008-11-26 08:14:58 来源:WEB开发网   
核心提示:学习如何配置高可用性的可靠的 Kerberos 环境,管理 IBM® AIX® 和许多客户机上的多个 Kerberos 主-从 Key Distribution Centers(KDC),IBM Network Authentication Service KDC 配置,第 1 部分,本文是分为三部分的

学习如何配置高可用性的可靠的 Kerberos 环境,管理 IBM® AIX® 和许多客户机上的多个 Kerberos 主-从 Key Distribution Centers(KDC)。本文是分为三部分的系列文章的第 1 部分。在本文中,学习如何配置和管理基本的主-从 KDC 设置。第 2 部分将讨论如何把从 KDC 更新为主 KDC。第 3 部分讲解如何配置用 LDAP 作为存储 Kerberos 数据的后端的主-从 KDC。

简介

IBM Network Authentication Service V1.4(IBM NAS)是 IBM 风格的 Kerberos,Kerberos 是一种流行的网络身份验证协议。AIX 在它的各种组件中使用 IBM NAS,比如 AIX Network File System V4(NFSv4)以及 AIX 集成的 login、rlogin、telnet、openSSH 等。选用 Kerberos 作为 AIX 系统的网络身份验证协议的各种企业通常会部署 IBM NAS。

IBM NAS 组件可以分为以下三类:

IBM NAS Server 组件:这个服务器组件主要由 KDC(Key Distribution Center)和 kadmind(Kerberos 管理服务器)功能组成。这个服务器组件只能在 AIX 上使用。

IBM NAS Client 组件:这个组件由一个客户机包、客户机运行时环境、示例文件和代码文件集组成。

IBM NAS Toolkit:这个组件由 IBM Network Authentication Service 应用程序开发工具集组成。

可以通过 AIX Expansion Pack CD 或 AIX Web Download Pack Programs 获得 IBM NAS for AIX 的这三个组件(参见 参考资料)。

为了改进可靠性、可用性和负载平衡,IBM NAS KDC 支持一种主-从配置,在这种配置中可以将 Kerberos 身份验证请求分布在不同的 AIX 服务器。IBM NAS KDC 的配置是一项重要的任务,从 KDC 的设置和配置也很重要。本文将指导您为 AIX 上的 IBM NAS 配置主 KDC 和从 KDC。

设置示例

在本文中,我们使用下面的机器安装和配置 IBM NAS 主 KDC 和从 KDC。还要使用 IBM NAS version 1.4.0.7,这可以通过 AIX Expansion Pack CD 或 IBM AIX Web Download Pack Programs 获得(参见 参考资料)。

Kerberos 管理员名称:

admin/admin

Kerberos 域名:

ISL.IN.IBM.COM

IBM NAS 1.4.0.7 主 KDC:

主机名:fsaix12.in.ibm.com 端口:88

操作系统:AIX 5.3

IBM NAS 1.4.0.7 管理服务器:

主机名:fsaix12.in.ibm.com 端口:749

操作系统:AIX 5.3

IBM NAS 1.4.0.7 从 KDC:

主机名:huntcup.in.ibm.com 端口:754

操作系统:AIX 5.2

针对主 KDC 配置的 IBM NAS 1.4.0.7 客户机:

主机名:aixdce3.in.ibm.com

操作系统:AIX 5.3

针对从 KDC 配置的 IBM NAS 1.4.0.7 客户机(以主 KDC 作为备用):

主机名:aixdce39.in.ibm.com

操作系统:AIX 5.3

图 1. Kerberos 主-从配置的设置示例

IBM Network Authentication Service KDC 配置,第 1 部分

使用 lslpp 命令查看系统上当前安装的 IBM NAS 版本。

-bash-2.05b# lslpp -l | grep krb5
 krb5.client.rte      1.4.0.7 COMMITTED Network Authentication Service
 krb5.client.samples    1.4.0.7 COMMITTED Network Authentication Service
 krb5.lic          1.4.0.7 COMMITTED Network Authentication Service
 krb5.server.rte      1.4.0.7 COMMITTED Network Authentication Service
 krb5.toolkit.adt      1.4.0.7 COMMITTED Network Authentication Service
 krb5.client.rte      1.4.0.7 COMMITTED Network Authentication Service
 krb5.server.rte      1.4.0.7 COMMITTED Network Authentication Service
 
-bash-2.05b#

另外,要确保使用 /usr/krb5/bin 和 /usr/krb5/sbin 中正确的 IBM NAS 二进制代码。如果使用不同于这两个路径的路径,应该相应地修改 PATH 环境变量。-bash-2.05b# which kinit
/usr/bin/kinit        <---- INCORRECT IBM NAS BINARY
-bash-2.05b# export PATH=/usr/krb5/bin:/usr/krb5/sbin:$PATH
-bash-2.05b# which kinit
/usr/krb5/bin/kinit     <---- CORRECT IBM NAS BINARY
 
-bash-2.05b#

使用旧有数据库的 IBM NAS 主 KDC

Kerberos 主 KDC 是整个 Kerberos 设置中最重要的实体。这个 KDC 对客户机(或服务)进行身份验证。它负责接收客户机要求证明其身份的请求并用身份验证信息回复它们(或者返回错误)。

因为 Kerberos 的用户信息可以存储在本地文件系统上的平面文件(即 “旧有数据库”)中,也可以存储在 LDAP 目录中,管理员需要相应地配置主 KDC。在下面的示例中,我们讨论如何设置使用旧有数据库的主 KDC。

为了配置 Kerberos KDC,IBM NAS 提供了一个容易使用的命令行界面,‘/usr/krb5/sbin/config.krb5’。这个 config.krb5 命令也可以用来配置从 KDC 和 Kerberos 客户机(在本文后面会看到)。

config.krb5 命令的语法如下:    bash-2.05b# /usr/krb5/sbin/config.krb5

配置服务器的命令如下:/usr/krb5/sbin/config.krb5 -h | -S [-a admin] -d domain -r realm
[[-l { ldapserver | ldapserver:port }] [-u ldap_DN -p
ldap_DN_pw] [-f {keyring |
keyring:entry_dn} -k keyring_pw] [-m masterkey_location] [-b
bind_type]  [-R ldap_replica_list]]

在从 KDC 机器上配置从 KDC 的命令如下:/usr/krb5/sbin/config.krb5 -h | -E -d domain -r realm -s server { [-a admin] | -l
{ ldapserver | ldapserver:port } -u ldap_DN -p ldap_DN_PW [-f {keyring |
keyring:entry_dn} -k keyring_pw] [-b bind_type]
[-R ldap_replica_list] }

在主服务器机器上配置从 KDC 的命令如下:/usr/krb5/sbin/config.krb5 -h | -P -r realm -d domain -e slave_KDC -g

配置客户机的命令如下:/usr/krb5/sbin/config.krb5 -h | [-C] -r realm -d domain { -c KDC -s server | -l
{ ldapserver | ldapserver:port_number } [-c KDC -s server] }
-bash-2.05b#    

下面是在配置使用旧有数据库的主 KDC 时 config.krb5 命令必需的参数:

-S表示要配置一个主 KDC。
-d <domain><domain> 是 Kerberos 域所属的域。
-r <realm><realm> 是这个主 KDC 将驻留的 Kerberos 域。

在使用 config.krb5 命令之前,要确保系统的主机名设置为完全限定域名(FQDN)。在 AIX 上可以使用 ‘hostname’ 命令检查或修改主机名。

现在,我们在 fsaix12.in.ibm.com 服务器上配置一个使用旧有数据库的主 KDC:bash-2.05b# hostname
fsaix12.in.ibm.com
bash-2.05b# config.krb5 -S -d in.ibm.com -r ISL.IN.IBM.COM
Initializing configuration...
Creating /etc/krb5/krb5_cfg_type...
Creating /etc/krb5/krb5.conf...
Creating /var/krb5/krb5kdc/kdc.conf...
Creating database files...
Initializing database '/var/krb5/krb5kdc/principal' for realm 'ISL.IN.IBM.COM'
master key name 'K/M@ISL.IN.IBM.COM'
You are prompted for the database Master Password.
It is important that you DO NOT FORGET this password.
Enter database Master Password:    <------ Enter database password to set.
Re-enter database Master Password to verify:  <----------- re-enter password.
WARNING: no policy specified for admin/admin@ISL.IN.IBM.COM;
 defaulting to no policy. Note that policy may be overridden by
 ACL restrictions.
Enter password for principal "admin/admin@ISL.IN.IBM.COM":  <------ Enter Kerberos
                           administrator password to set.
Re-enter password for principal "admin/admin@ISL.IN.IBM.COM":  <------ re-enter password.
Principal "admin/admin@ISL.IN.IBM.COM" created.
Creating keytable...
Creating /var/krb5/krb5kdc/kadm5.acl...
Starting krb5kdc...
krb5kdc was started successfully.
Starting kadmind...
kadmind was started successfully.
The command completed successfully.
-bash-2.05b#    

下面解释以上命令完成的操作:

创建 Kerberos 配置文件(/etc/krb5/krb5.conf、/var/krb5/krb5kdc/kdc.conf 和 /etc/krb5/krb5_cfg_type)。IBM NAS 组件使用这些配置文件获得关于 Kerberos 设置的信息。

创建 Kerberos 主体数据库(/var/krb5/krb5kdc/principal)。当配置为旧有数据库时,在这里存储所有 Kerberos 主体和策略信息。

替我们创建重要的 Kerberos 主体(比如 admin/admin、kadmin/admin 等等)。kadmin 接口等 Kerberos 管理实用程序要使用这些主体。

创建 kadmind keytab 文件和 ACL 文件。Kerberos 管理服务器(kadmind)要使用这些文件。

启动 Kerberos 守护进程(krb5kdc 和 kadmind)。

现在,主 KDC 已经设置完并开始运行。使用 ps 命令检查这些守护进程是否正在运行。bash-2.05b# hostname
fsaix12.in.ibm.com
bash-2.05b# ps -ef| grep krb5 | grep -v grep
  root 22414   1  0  May 12   - 0:00 /usr/krb5/sbin/krb5kdc
  root 24210   1  0  May 12   - 0:02 /usr/krb5/sbin/kadmind
  
  bash-2.05b#    

由于系统上已经有 IBM NAS 配置,config.krb5 命令可能无法运行,可能会看到下面这样的输出:bash-2.05b# config.krb5 -S -d in.ibm.com -r ISL.IN.IBM.COM
Initializing configuration...
/etc/krb5/krb5_cfg_type already exists.
Configuration cannot be completed.
A previous configuration exists.
To remove the existing configuration, run the unconfig.krb5 command.
bash-2.05b#    

如果确实希望覆盖任何现有的配置,那么运行 ‘/usr/krb5/sbin/unconfig.krb5’ 命令来取消以前的配置,然后重试一次。bash-2.05b# unconfig.krb5
Warning: All configuration information will be removed.
Do you wish to continue? [y/n]
y
Removing configuration...
Stopping /usr/krb5/sbin/krb5kdc...
/usr/krb5/sbin/krb5kdc was stopped successfully.
Stopping /usr/krb5/sbin/kadmind...
/usr/krb5/sbin/kadmind was stopped successfully.
The command completed successfully.
bash-2.05b#    

要想检查现有 IBM NAS Kerberos 配置的类型,应该检查 /etc/krb5/krb5_cfg_type 文件的内容。bash-2.05b# hostname
fsaix12.in.ibm.com
bash-2.05b# cat /etc/krb5/krb5_cfg_type
master
bash-2.05b#    

对于主 KDC,这个文件显示 ‘master’。对于从 KDC,这个文件显示 ‘slave’。对于简单的客户机,则显示 ‘client’。

注意,在配置 IBM NAS 主或从 KDC 时,已经在机器上配置了 IBM NAS 客户机,所以不需要显式地配置这个客户机。

要想检查主 KDC 的配置是否正确,可以使用 /usr/krb5/bin/kinit 尝试获取一个 Kerberos 票证:bash-2.05b# hostname
fsaix12.in.ibm.com
bash-2.05b# /usr/krb5/bin/kdestroy
bash-2.05b# /usr/krb5/bin/kinit admin/admin
Password for admin/admin@ISL.IN.IBM.COM:   <------ Enter Kerberos administrator
                        password here.
bash-2.05b#    

要想查看刚才获得的票证,应该使用 /usr/krb5/bin/klist 命令:

bash-2.05b# /usr/krb5/bin/klist
Ticket cache: FILE:/var/krb5/security/creds/krb5cc_0
Default principal: admin/admin@ISL.IN.IBM.COM
Valid starting   Expires      Service principal
05/13/08 19:40:40 05/14/08 19:40:37 krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
bash-2.05b#    

另外,使用 /usr/krb5/sbin/kadmin 接口检查 kadmind 是否正常:

bash-2.05b# /usr/krb5/sbin/kadmin -p admin/admin
Authenticating as principal admin/admin with password.
Password for admin/admin@ISL.IN.IBM.COM:   <------ Enter Kerberos administrator
                         password here.
kadmin: getprincs
K/M@ISL.IN.IBM.COM
admin/admin@ISL.IN.IBM.COM
kadmin/admin@ISL.IN.IBM.COM
kadmin/changepw@ISL.IN.IBM.COM
kadmin/history@ISL.IN.IBM.COM
krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
kadmin: q
bash-2.05b#    

因为能够看到主体的列表,所以这个主 KDC 是正常的。现在,学习如何为这个主 KDC 配置从 KDC。

配置使用旧有数据库的 IBM NAS 从 KDC

在实际的生产环境中,可能给 Kerberos KDC 配置数百甚至数千个 Kerberos 客户机。有时候,KDC 可能由于连续请求负载过大而拒绝客户机的请求,甚至可能由于某些原因停止运行。在这种情况下,Kerberos 从 KDC 会接替主 KDC 的工作。

从 KDC 作为主 KDC 的备用,会在停电、网络故障、火灾或其他灾难等紧急情况下接替主 KDC 的工作。它还起到负载平衡的作用,可以减轻主 KDC 的负担。建立从 KDC 有助于确保连续满足客户机的身份验证请求。在一个 Kerberos 域中可以有多个从 KDC。建议为每个主 KDC 设置至少一个从 KDC。

主 KDC 和从 KDC 之间的主要差异之一是,主 KDC 还运行管理服务器守护进程(kadmind)。在整个域中只有一个 kadmind 服务器,它驻留在主 KDC 机器上。另外,主 KDC 有 Kerberos 数据库(旧有数据库)的读-写拷贝,而从 KDC 有 Kerberos 数据库的只读拷贝。

配置 IBM NAS 从 KDC 需要具备 Kerberos 方面的专业经验,而且要求比较了解主-从场景。配置步骤包括最初的 IBM NAS 配置,然后把主 KDC 上的 Kerberos 数据库传输到从 KDC。

注意,在配置从 KDC 时,还需要访问主 KDC 机器以执行数据库传输命令。

仍然使用 /usr/krb5/sbin/config.krb5 命令配置从 KDC,但是这一次使用 -E 选项。在使用旧有数据库的从 KDC 配置中,可以使用下面的 config.krb5 选项:

-E表示要配置一个从 KDC。
-d <domain><domain> 是 Kerberos 域所属的域。
-r <realm><realm> 是主 KDC 所在的 Kerberos 域。
-s <server><server> 是运行 KDC 和 kadmind 管理服务器的机器的主机名。

现在,我们看看配置步骤。但是,在执行任何操作之前,要确保从 KDC 机器使用一个完全限定的主机名。

在从机器(对于这个示例是 huntcup.in.ibm.com)上,作为 root 用户登录并运行包含以下选项的 config.krb5 命令:-bash-2.05b# hostname
huntcup.in.ibm.com
-bash-2.05b# /usr/krb5/sbin/config.krb5 -E -d in.ibm.com -r ISL.IN.IBM.COM -s
   fsaix12.in.ibm.com
Initializing configuration...
Creating /etc/krb5/krb5_cfg_type...
Creating /etc/krb5/krb5.conf...
Creating /var/krb5/krb5kdc/kdc.conf...
Password for admin/admin@ISL.IN.IBM.COM:  <------ Enter Kerberos administrator
                        password here.
Creating /etc/krb5/krb5.keytab...
Creating /var/krb5/krb5kdc/kpropd.acl...

在主服务器机器(fsaix12.in.ibm.com)上,运行以下命令:/usr/krb5/sbin/config.krb5 -P -r ISL.IN.IBM.COM -d in.ibm.com -e huntcup.in.ibm.com
Have you successfully run the above command? [y/n]

这时,命令等待用户输入。它询问用户是否在主服务器上运行上面的 ‘config.krb5 -P’ 命令。我们来看看所有选项的意思:

-P让主 KDC 在配置期间把 Kerberos 数据库传输到从 KDC。
-r <realm>指定运行主 KDC 的 Kerberos <realm> 的名称。
-d <domain>指定 Kerberos 域所属的 <domain>。
-e <slave_kdc_hostname>指定将驻留从 KDC 的机器的主机名。

目前,不要在从机器上做任何操作,在主服务器机器上运行以下命令:bash-2.05b# hostname
fsaix12.in.ibm.com
bash-2.05b# /usr/krb5/sbin/config.krb5 -P -r ISL.IN.IBM.COM -d in.ibm.com -e
      huntcup.in.ibm.com
Creating host/fsaix12.in.ibm.com@ISL.IN.IBM.COM...
Principal "host/fsaix12.in.ibm.com@ISL.IN.IBM.COM" created.
Creating /etc/krb5/krb5.keytab...
Creating a dump of the database...
Propagating the database to the slave KDC, huntcup.in.ibm.com ...
Database propagation to huntcup.in.ibm.com: SUCCEEDED
The command completed successfully.
bash-2.05b#    

这个命令尝试把 Kerberos 数据库传输到从 KDC。出现成功消息之后,在从机器上单击 y 继续从配置过程:

Have you successfully run the above command? [y/n]
y
Unable to retrieve master key.
    Status 0x96c73afe - Cannot find or read the stored master key
Warning: proceeding without master key.
Enter database Master Password:  <------ Enter database password here.
Starting krb5kdc...
krb5kdc was started successfully.
The command completed successfully.
bash-2.05b#    

当从配置成功完成之后,可以运行 ps 命令来检查正在运行的从 KDC:

-bash-2.05b# hostname
huntcup.in.ibm.com
-bash-2.05b# ps -ef |grep krb5kdc | grep -v grep
  root 14286   1  0 15:20:17   - 0:00 /usr/krb5/sbin/krb5kdc

这时还可以检查 IBM NAS 配置类型:

-bash-2.05b# cat /etc/krb5/krb5_cfg_type
slave

要想检查配置是否正确,可以使用 /usr/krb5/bin/kinit 尝试获取一个 Kerberos 票证:

-bash-2.05b# hostname
huntcup.in.ibm.com
-bash-2.05b# /usr/krb5/bin/kinit admin/admin
Password for admin/admin@ISL.IN.IBM.COM: <------ Enter Kerberos administrator
                        password here.
                        -bash-2.05b#    

使用 /usr/krb5/bin/klist 命令检查刚才获得的票证:

-bash-2.05b# /usr/krb5/bin/klist
Ticket cache: FILE:/var/krb5/security/creds/krb5cc_0
Default principal: admin/admin@ISL.IN.IBM.COM
Valid starting   Expires      Service principal
05/15/08 16:29:17 05/16/08 16:29:17 krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
    Renew until 05/16/08 16:29:35
-bash-2.05b#    

还可以检查管理服务器(也在主 KDC 机器上)的配置是否正确,从 KDC 是否可以联系它:

-bash-2.05b# /usr/krb5/sbin/kadmin -p admin/admin
Authenticating as principal admin/admin with password.
Password for admin/admin@ISL.IN.IBM.COM: <------ Enter Kerberos administrator
                        password here.
kadmin: getprincs
K/M@ISL.IN.IBM.COM
admin/admin@ISL.IN.IBM.COM
kadmin/admin@ISL.IN.IBM.COM
kadmin/changepw@ISL.IN.IBM.COM
kadmin/history@ISL.IN.IBM.COM
krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
kadmin: q
-bash-2.05b#    

这证明已经为主 KDC 成功地配置了从 KDC。

把 IBM NAS 数据库传输到从 KDC

在 Kerberos 环境中,通常有多个从 KDC 处理来自网络各处的许多客户机身份验证请求。因此,存在 Kerberos 数据库的多个拷贝(主 KDC 有一个拷贝,每个从 KDC 各有一个拷贝)。因为修改只发生在 Kerberos 管理服务器(kadmind)拥有的主拷贝上,所以主服务器机器要负责及时地把修改传输到所有 Kerberos 数据库拷贝。

所有从 KDC 都就位之后,Kerberos 管理员需要设置从数据库。在主 KDC 上使用 /usr/krb5/sbin/kprop 命令并在从 KDC 上使用 /usr/krb5/sbin/kpropd 守护进程,把 Kerberos 数据库从主 KDC 传输到从 KDC。这个传输过程需要设置从 KDC 和主 KDC 。这些设置是由 config.krb5 命令自动完成的。理解这些设置是很重要的,可能有助于排除故障。

我们来逐一讨论这些设置:

主机主体

为了保证传输的安全,Kerberos 数据库的传输使用 Kerberos 身份验证和加密。为此,每个 KDC 的 Kerberos 数据库中都需要有一个主机主体。这个主机主体是用名称 ‘host/<hostname>’ 创建的,其中的主机名应该是从 KDC(比如 huntcup.in.ibm.com)的完全限定主机名。这个主机主体条目应该出现在从 KDC 的 keytab 文件中。

另外,在从 KDC 上的 /var/krb5/krb5kdc/kpropd.acl 文件中需要提到这个主机主体。这个文件包含被授权把 Kerberos 数据库传输到从 KDC 的主体的名称。

我们已经配置了一个从 KDC,现在可以检查以上设置是否已经自动完成了。在主 KDC 上使用 /usr/krb5/sbin/kadmin.local 接口检查从 KDC(huntcup.in.ibm.com)的主机主体条目:

bash-2.05b# hostname
fsaix12.in.ibm.com
bash-2.05b# kadmin.local -q getprincs
K/M@ISL.IN.IBM.COM
admin/admin@ISL.IN.IBM.COM
host/fsaix12.in.ibm.com@ISL.IN.IBM.COM
host/huntcup.in.ibm.com@ISL.IN.IBM.COM
kadmin/admin@ISL.IN.IBM.COM
kadmin/changepw@ISL.IN.IBM.COM
kadmin/history@ISL.IN.IBM.COM
krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
bash-2.05b#    

在从 KDC 上使用 /usr/krb5/bin/klist 命令检查 keytab 条目:

-bash-2.05b# hostname
huntcup.in.ibm.com
-bash-2.05b# /usr/krb5/bin/klist -k
Keytab name: FILE:/etc/krb5/krb5.keytab
KVNO Principal
---- ---------
  3 host/huntcup.in.ibm.com@ISL.IN.IBM.COM
  3 host/huntcup.in.ibm.com@ISL.IN.IBM.COM
  3 host/huntcup.in.ibm.com@ISL.IN.IBM.COM
  3 host/huntcup.in.ibm.com@ISL.IN.IBM.COM
 
  -bash-2.05b#    

在从 KDC 上,可以使用 kpropd 守护进程检查 ACL 文件(比如 /var/krb5/krb5kdc/kpropd.acl)。

-bash-2.05b# hostname
huntcup.in.ibm.com
-bash-2.05b# cat /var/krb5/krb5kdc/kpropd.acl
host/fsaix12.in.ibm.com@ISL.IN.IBM.COM
-bash-2.05b#    

/etc/inetd.conf 和 /etc/services 中的 kpropd 条目

因为 kpropd 是一个守护进程,当要求接受传输的请求到达从 KDC 时会激活它,所以应该在 /etc/inetd.conf 文件中设置一个 kpropd 条目。这样的话,操作系统就可以确保执行正确的二进制代码。config.krb5 命令自动设置这个条目。可以通过检查从 KDC 上的 /etc/inetd.conf 文件来检查这个条目:

-bash-2.05b# hostname
huntcup.in.ibm.com
-bash-2.05b# grep kprop /etc/inetd.conf
krb5_prop    stream tcp nowait root /usr/krb5/sbin/kpropd kpropd
-bash-2.05b#    

另外,在 /etc/services 文件中需要一个 krb5_prop 条目,指定守护进程要监听请求的端口号(默认端口是 754)。

-bash-2.05b# hostname
huntcup.in.ibm.com
-bash-2.05b# grep krb5_prop /etc/services
krb5_prop    754/tcp             # kerberos 5 slave propagation
-bash-2.05b#

这些就是数据库传输的前提条件。

下面看看实际传输这个数据库的过程:

首先,在主 KDC 上需要把主数据库转储到一个文件中。这要使用 /usr/krb5/sbin/kdb5_util dump 命令:-bash-2.05b# hostname
fsaix12.in.ibm.com
-bash-2.05b# /usr/krb5/sbin/kdb5_util dump -verbose /var/krb5/krb5kdc/krb5_dump
K/M@ISL.IN.IBM.COM
admin/admin@ISL.IN.IBM.COM
host/fsaix12.in.ibm.com@ISL.IN.IBM.COM
host/huntcup.in.ibm.com@ISL.IN.IBM.COM
kadmin/admin@ISL.IN.IBM.COM
kadmin/changepw@ISL.IN.IBM.COM
kadmin/history@ISL.IN.IBM.COM
krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
-bash-2.05b#    

这会在指定的位置上创建转储文件。很容易检查这个文件:

-bash-2.05b# ls -lrt /var/krb5/krb5kdc/
total 104
-rw-r-----  1 root  security    723 May 12 19:51 kdc.conf
-rw-------  1 root  system      0 May 12 19:51 principal.kadm5.lock
-rw-------  1 root  system    8192 May 12 19:51 principal.kadm5
-rw-------  1 root  system     30 May 12 19:51 .k5.ISL.IN.IBM.COM
-rw-------  1 root  system     574 May 12 19:51 kadm5.keytab
-rw-r-----  1 root  security    135 May 12 20:25 kadm5.acl
-rw-------  1 root  system    16384 May 15 16:19 principal
-rw-------  1 root  system      0 May 15 16:19 principal.ok
-rw-------  1 root  system      1 May 22 16:20 krb5_dump.dump_ok
-rw-------  1 root  system    6960 May 22 16:20 krb5_dump
-bash-2.05b#    

现在,需要把这个转储文件传输到从 KDC。这要使用 /usr/krb5/sbin/kprop 命令。-bash-2.05b# hostname
fsaix12.in.ibm.com
-bash-2.05b#
   /usr/krb5/sbin/kprop -f /var/krb5/krb5kdc/krb5_dump -d huntcup.in.ibm.com
6960 bytes sent.
Database propagation to huntcup.in.ibm.com: SUCCEEDED
-bash-2.05b#    

这时,kprop 命令联系主 KDC,使用主 KDC(host/fsaix12.in.ibm.com)的主机主体获取从 KDC(host/huntcup.in.ibm.com)主机主体所需的服务票证;通过身份验证之后,安全地把数据库转储文件传输到从 KDC。在执行 kprop 命令之后,可以使用 krb5kdc 日志文件检查结果;这个日志文件(/var/krb5/krb5kdc/krb5kdc.log)应该包含下面这样的内容:

……
……
May 22 16:28:42 fsaix12.in.ibm.com /usr/krb5/sbin/krb5kdc[22430](info):
   AS_REQ (5 etypes
{16 23 18 3 1}) 9.182.192.35(88): ISSUE: authtime 1211452122,
    etypes {rep=16 tkt=16
ses=16}, host/fsaix12.in.ibm.com@ISL.IN.IBM.COM for
  host/huntcup.in.ibm.com@ISL.IN.IBM.COM

这就是把 Kerberos 主体数据库传输到从 KDC 的所有步骤。尽管这个过程非常简单,但是如果需要数据库传输的从 KDC 很多,这个任务会很麻烦。一种好做法是编写一个简单的脚本,替我们执行所有从 KDC 的传输任务。更好的方法是把这个脚本设置为主 KDC 上的 cron 作业,这样就可以定期执行它。在下一节中,讨论如何实现这种做法。

简单的 Kerberos 数据库传输脚本

可以使用下面这个非常简单的 shell 脚本进行数据库传输。

-bash-2.05b# cat prop_krb5_database.sh
#!/bin/sh
KDCLIST = "slave1.in.ibm.com slave2.in.ibm.com slave3.in.ibm.com"
DUMP_FILE = "/var/krb5/krb5kdc/krb5_dump"
/usr/krb5/sbin/kdb5_util dump $DUMP_FILE
for kdc in $KDCLIST
do
 /usr/krb5/bin/kprop -f $DUMP_FILE $kdc
done
-bash-2.05b#    

这个脚本创建数据库转储并把它传输到所有从 KDC。请把 slave1.in.ibm.com、slave2.in.ibm.com 等等替换为自己的从 KDC 主机名。

要想作为 cron 作业运行这个 shell 脚本,应该使用 AIX 命令 crontab,如下所示:

-bash-2.05b# crontab -e    

这会打开一个文本编辑器(默认编辑器是 'vi')来添加 cron 作业。您会看到现有的所有 cron 作业,然后在末尾添加新的 cron 作业。输入以下文本:

59 23 * * * /var/krb5/krb5kdc/prop_krb5_database.sh    

单击 :wq!(保存并退出的 vi 命令)保存条目并返回到提示。添加的这一行会在每天的 11:59 pm 运行脚本 ‘/var/krb5/krb5kdc/prop_krb5_database.sh’。

关于 cron 作业命令和选项的更多信息,参见 crontab AIX 命令的主页。

关于如何决定 Kerberos 数据库传输的频率(只适用于旧有数据库),请参考 AIX Version 5.3 Expansion Pack CD 附带的 IBM NAS Version 1.4 Administration Guide。

使用 crontab -l 命令检查 cron 表中的条目。在我们的主 KDC 机器上,这个命令显示:

-bash-2.05b# hostname
fsaix12.in.ibm.com
-bash-2.05b# crontab -l
0 11 * * * /usr/bin/errclear -d S,O 30
0 12 * * * /usr/bin/errclear -d H 90
0 15 * * * /usr/lib/ras/dumpcheck >/dev/null 2>&1
# SSA warning : Deleting the next two lines may cause errors in redundant
# SSA warning : hardware to go undetected.
01 5 * * * /usr/lpp/diagnostics/bin/run_ssa_ela 1>/dev/null 2>/dev/null
0 * * * * /usr/lpp/diagnostics/bin/run_ssa_healthcheck 1>/dev/null 2>/dev/null
# SSA warning : Deleting the next line may allow enclosure hardware errors to go
 undetected
30 * * * * /usr/lpp/diagnostics/bin/run_ssa_encl_healthcheck 1>/dev/null 2>/dev/null
# SSA warning : Deleting the next line may allow link speed exceptions to go undetected
30 4 * * * /usr/lpp/diagnostics/bin/run_ssa_link_speed 1>/dev/null 2>/dev/null
0 00,12 * * * wall%rc.powerfail:1::WARNING!!! The system is now operating with cooling
problem.     This message will be walled every 12 hours. Remove this crontab entry
after the    problem is resolved.
59 23 * * * /var/krb5/krb5kdc/prop_krb5_database.sh
-bash-2.05b#    

这就是自动执行数据库传输任务的过程。既然主 KDC 和从 KDC 都已经准备好了,下面就讨论如何针对这些机器配置客户机。

设置 IBM NAS Kerberos 客户机

Kerberos 主 KDC 和从 KDC 就位之后,下一个任务是针对这些 KDC 配置和设置 Kerberos 客户机。根据需求的不同,可以让客户机直接针对主 KDC,也可以针对从 KDC 并以主 KDC 作为备用。我们来看看这两种方法。首先,针对主 KDC(在 fsaix12.in.ibm.com 上运行)配置客户机。

直接针对主 KDC 配置 IBM NAS 客户机

在配置 IBM NAS 客户机时,仍然使用 config.krb5 命令,但是包含 ‘-C’ 标志和其他标志。我们来看看用来配置客户机的标志:

-C表示要配置一个 IBM NAS 客户机。
-d <domain>指定 Kerberos 域 <domain> 的名称。
-r <realm>指定运行主 KDC 的 Kerberos <realm> 的名称。
-c <KDC>指定运行主 KDC 服务器的机器的主机名。
-s <server>指定运行 kadmind 管理服务器的机器的主机名。

在运行这个命令之前,要确保客户机机器使用一个完全限定的主机名,而且当前日期和时间与主 KDC 同步。我们使用 aixdce3.in.ibm.com 作为客户机机器。现在,作为根用户登录并运行带适当选项的 config.krb5:

bash-2.05b# hostname
aixdce3.in.ibm.com
bash-2.05b# config.krb5 -C -d in.ibm.com -r ISL.IN.IBM.COM -c fsaix12.in.ibm.com -s
    fsaix12.in.ibm.com
Initializing configuration...
Creating /etc/krb5/krb5_cfg_type...
Creating /etc/krb5/krb5.conf...
The command completed successfully.
bash-2.05b#    

上面的客户机设置命令仅仅创建 IBM NAS 配置文件。这时 /etc/krb5/krb5_cfg_type 文件会包含表示客户机配置的 ‘client’。

IBM NAS 客户机配置文件 /etc/krb5/krb5.conf 包含 Kerberos 信息,比如:

bash-2.05b# hostname
aixdce3.in.ibm.com
bash-2.05b# cat /etc/krb5/krb5.conf
[libdefaults]
    default_realm = ISL.IN.IBM.COM
    default_keytab_name = FILE:/etc/krb5/krb5.keytab
    default_tkt_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5
des-cbc-crc
    default_tgs_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5
des-cbc-crc
[realms]
    ISL.IN.IBM.COM = {
        kdc = fsaix12.in.ibm.com:88
       admin_server = fsaix12.in.ibm.com:749
        default_domain = in.ibm.com
    }
[domain_realm]
    .in.ibm.com = ISL.IN.IBM.COM
    fsaix12.in.ibm.com = ISL.IN.IBM.COM
[logging]
    kdc = FILE:/var/krb5/log/krb5kdc.log
    admin_server = FILE:/var/krb5/log/kadmin.log
    default = FILE:/var/krb5/log/krb5lib.log
bash-2.05b#    

请注意,这里的 ‘kdc’ 和 ‘admin_server’ 条目都指向相同的主 KDC 机器(因为两个 Kerberos 守护进程都在这台机器上运行)。

要想检查客户机设置,需要使用 ‘/usr/krb5/bin/kinit’ 和 ‘/usr/krb5/bin/klist’ 命令,如下所示:

bash-2.05b# hostname
aixdce3.in.ibm.com
bash-2.05b# /usr/krb5/bin/kinit admin/admin
Password for admin/admin@ISL.IN.IBM.COM: <------ Enter Kerberos administrator
                        password here.
bash-2.05b# /usr/krb5/bin/klist
Ticket cache: FILE:/var/krb5/security/creds/krb5cc_0
Default principal: admin/admin@ISL.IN.IBM.COM
Valid starting   Expires      Service principal
05/22/08 09:46:13 05/23/08 09:43:53 krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
bash-2.05b#    

另外,使用 kadmind 接口检查客户机是否可以联系 kadmind 服务器:

bash-2.05b# /usr/krb5/sbin/kadmin -p admin/admin
Authenticating as principal admin/admin with password.
Password for admin/admin@ISL.IN.IBM.COM: <------ Enter Kerberos administrator
                        password here.
kadmin: getprincs
K/M@ISL.IN.IBM.COM
admin/admin@ISL.IN.IBM.COM
host/fsaix12.in.ibm.com@ISL.IN.IBM.COM
host/huntcup.in.ibm.com@ISL.IN.IBM.COM
kadmin/admin@ISL.IN.IBM.COM
kadmin/changepw@ISL.IN.IBM.COM
kadmin/history@ISL.IN.IBM.COM
krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
kadmin: q
bash-2.05b#    

现在,Kerberos 客户机已经配置好了,这个客户机直接针对主 KDC。在下一节中,看看如何针对从 KDC 配置客户机并以主 KDC 作为备用。

针对从 KDC 配置 IBM NAS 客户机(以主 KDC 作为备用)

这种情况下的配置步骤与前面相似。这一次,客户机机器是 ‘aixdce39.in.ibm.com’。

在运行 config.krb5 命令时,使用的所有选项与前一个示例相同。惟一的差异是,这一次用 -c 指定从 KDC 机器的主机名,而不是主 KDC。

现在在这台机器上配置客户机:

[root@aixdce39 / ] #hostname
aixdce39.in.ibm.com
[root@aixdce39 / ] #config.krb5 -C -d in.ibm.com -r ISL.IN.IBM.COM -c
   huntcup.in.ibm.com -s fsaix12.in.ibm.com
Initializing configuration...
Creating /etc/krb5/krb5_cfg_type...
Creating /etc/krb5/krb5.conf...
The command completed successfully.
[root@aixdce39 / ] #    

检查 /etc/krb5/krb5.conf 文件:

[root@aixdce39 / ] #cat /etc/krb5/krb5.conf
[libdefaults]
    default_realm = ISL.IN.IBM.COM
    default_keytab_name = FILE:/etc/krb5/krb5.keytab
    default_tkt_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5
des-cbc-crc
    default_tgs_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5
des-cbc-crc
[realms]
    ISL.IN.IBM.COM = {
        kdc = huntcup.in.ibm.com:88
        admin_server = fsaix12.in.ibm.com:749
        default_domain = in.ibm.com
    }
[domain_realm]
    .in.ibm.com = ISL.IN.IBM.COM
    fsaix12.in.ibm.com = ISL.IN.IBM.COM
    huntcup.in.ibm.com = ISL.IN.IBM.COM
[logging]
    kdc = FILE:/var/krb5/log/krb5kdc.log
    admin_server = FILE:/var/krb5/log/kadmin.log
    default = FILE:/var/krb5/log/krb5lib.log
[root@aixdce39 / ] #

这一次,客户机将与从 KDC(huntcup.in.ibm.com)通信。用 /usr/krb5/bin/kinit 和 /usr/krb5/bin/klist 命令检查配置。

[root@aixdce39 / ] #hostname
aixdce39.in.ibm.com
[root@aixdce39 / ] #/usr/krb5/bin/kinit admin/admin
Password for admin/admin@ISL.IN.IBM.COM: <------ Enter Kerberos administrator
                        password here.
[root@aixdce39 / ] #/usr/krb5/bin/klist
Ticket cache: FILE:/var/krb5/security/creds/krb5cc_0
Default principal: admin/admin@ISL.IN.IBM.COM
Valid starting   Expires      Service principal
05/22/08 20:12:38 05/23/08 20:12:25 krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
[root@aixdce39 / ] #    

另外,使用 /usr/krb5/sbin/kadmin 命令检查 kadmin 接口:

[root@aixdce39 / ] #/usr/krb5/sbin/kadmin -p admin/admin
Authenticating as principal admin/admin@ISL.IN.IBM.COM with password.
Password for admin/admin@ISL.IN.IBM.COM: <------ Enter Kerberos administrator
                        password here.
kadmin: getprincs
K/M@ISL.IN.IBM.COM
admin/admin@ISL.IN.IBM.COM
host/fsaix12.in.ibm.com@ISL.IN.IBM.COM
host/huntcup.in.ibm.com@ISL.IN.IBM.COM
kadmin/admin@ISL.IN.IBM.COM
kadmin/changepw@ISL.IN.IBM.COM
kadmin/history@ISL.IN.IBM.COM
krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
kadmin: q
[root@aixdce39 / ] #    

既然一切正常,下面就让客户机把主 KDC 作为在从 KDC 出问题时使用的备用机器。为此,需要修改 /etc/krb5/krb5.conf 文件。编辑这个文件并添加 kdc = <master_KDC_hostname>,如下所示:[root@aixdce39 / ] #cat /etc/krb5/krb5.conf
[libdefaults]
    default_realm = ISL.IN.IBM.COM
    default_keytab_name = FILE:/etc/krb5/krb5.keytab
    default_tkt_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5
des-cbc-crc
    default_tgs_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5
des-cbc-crc
[realms]
    ISL.IN.IBM.COM = {
        kdc = huntcup.in.ibm.com:88
        kdc = fsaix12.in.ibm.com:88
        admin_server = fsaix12.in.ibm.com:749
        default_domain = in.ibm.com
    }
[domain_realm]
    .in.ibm.com = ISL.IN.IBM.COM
    fsaix12.in.ibm.com = ISL.IN.IBM.COM
    huntcup.in.ibm.com = ISL.IN.IBM.COM
[logging]
    kdc = FILE:/var/krb5/log/krb5kdc.log
    admin_server = FILE:/var/krb5/log/kadmin.log
    default = FILE:/var/krb5/log/krb5lib.log
[root@aixdce39 / ] #    

在 /etc/krb5/krb5.conf 中添加两个 ‘kdc’ 条目的目的是,让这个客户机尝试联系首先列出的 KDC,如果第一个 KDC 不可用,就联系列出的第二个 KDC。如果愿意,可以指定更多的 KDC,但是总会使用第一个可用的条目。

为了检查备用机制,停止 huntcup.in.ibm.com 上的从 KDC,这会迫使客户机使用 fsaix12.in.ibm.com 上的主 KDC。

可以使用 /usr/krb5/sbin/start.krb5 和 /usr/krb5/sbin/stop.krb5 命令启动和停止 IBM NAS 守护进程。更多信息请参考 AIX Version 5.3 Expansion Pack CD 附带的 IBM NAS Version 1.4 Administration Guide。

运行以下命令停止从 KDC:

-bash-2.05b# hostname
huntcup.in.ibm.com
-bash-2.05b# stop.krb5 krb5kdc
Stopping /usr/krb5/sbin/krb5kdc...
/usr/krb5/sbin/krb5kdc was stopped successfully.
The command completed successfully.
-bash-2.05b#    

在客户机上尝试运行 /usr/krb5/bin/kinit 命令。

[root@aixdce39 / ] #hostname
aixdce39.in.ibm.com
[root@aixdce39 / ] #/usr/krb5/bin/kinit admin/admin
Password for admin/admin@ISL.IN.IBM.COM: <------ Enter Kerberos administrator
                        password here.
[root@aixdce39 / ] #/usr/krb5/bin/klist
Ticket cache: FILE:/var/krb5/security/creds/krb5cc_0
Default principal: admin/admin@ISL.IN.IBM.COM
Valid starting   Expires      Service principal
05/22/08 20:38:03 05/23/08 20:38:03 krbtgt/ISL.IN.IBM.COM@ISL.IN.IBM.COM
    Renew until 05/23/08 20:38:09
[root@aixdce39 / ] #    

可以看出,如果从 KDC 停止运行了,客户机可以无缝地连接主 KDC 并继续运行。

结束语

本文是分为三部分的系列文章的第 1 部分,讨论了使用旧有数据库的 IBM NAS 从 KDC 的配置和使用方法。第 2 部分将讨论如何把从 KDC 更新为主 KDC。第 3 部分讲解如何配置用 LDAP 作为存储 Kerberos 数据的后端的主-从 KDC。

Tags:IBM Network Authentication

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接