在 IBM Network Authentication Service for AIX 中增强密码强度

了解如何使用 IBM Network Authentication Service (IBM Kerberos) for AIX 增强 Kerberos 用户的密码

在 Kerberos 环境中,保护主体的密码对于保护系统安全来说至关重要。了解 Kerberos 管理员如何利用 IBM® Network Authentication Service (NAS) for AIX® 所提供的密码保护和密码强度增强功能。

Vipin Rathor, 系统软件工程师, IBM India Software Lab

http://www.ibm.com/developerworks/i/p-virathor.jpgVipin Rathor 在 IBM India Software Lab 工作的两年中,主要从事 IBM Network Authentication Service (IBM Kerberos) 的开发和支持活动。他在业余时间喜欢烧碟。



Sandeep Singh, 系统软件工程师, IBM India Software Lab

http://www.ibm.com/developerworks/i/p-ssingh.jpgSandeep Singh 在 IBM India Software Lab 工作。他目前正在从事 IBM 网络身份验证服务第三级支持和开发活动。他感兴趣的领域包括网络安全和 UNIX 内幕。他拥有印度浦那大学的学士学位。



2008 年 8 月 28 日

引言

Kerberos 主体密码是用来解锁密钥分发中心 (KDC) 服务器应答的密钥,因此,如果该密码发生泄露,就没有其他方法来核实主体的真实性。因而,管理员必须选择非常难于破解的密码,以免被他人破解而影响系统的安全性。

您还可以建议最终用户提高密码的强度,并通知其密码策略相关内容。这是一种源自外部的保护,但是,还需要通过内部机制来强制最终用户选择强密码,为此,IBM Network Authentication Service (NAS) for AIX 提供了增强密码强度功能。

IBM NAS 管理服务器 (kadmind) 提供了增强密码强度检查工具。Kadmind 服务器负责检查和验证主体的密码。服务器可以根据分配给主体的密码策略(请参阅参考资料部分以阅读有关 Kerberos 密码策略管理的 developerWorks 文章)和在规则配置文件中指定的密码规则来验证密码。

激活增强密码强度功能

为了激活 IBM NAS 中的增强密码强度功能,管理员需要在密钥分发中心 (KDC) 配置文件 '/var/krb5/krb5kdc/kdc.conf' 中指定规则配置文件的位置。需要使用配置文件 [realm] 节中的 ‘password_rules’ 关系来指定规则配置文件的位置,如下所示:

[kdcdefaults]
        kdc_ports = 88

[realms]
        TEST =  {
                database_name = /var/krb5/krb5kdc/principal
                admin_keytab = /var/krb5/krb5kdc/kadm5.keytab
                acl_file = /var/krb5/krb5kdc/kadm5.acl
                dict_file = /var/krb5/krb5kdc/kadm5.dict
                key_stash_file = /var/krb5/krb5kdc/.k5.TEST
                kadmind_port = 749
                kdc_ports = 88
                max_life = 24h 0m 0s
                max_renewable_life = 7d 0h 0m 0s
                master_key_type = des3-cbc-sha1
                supported_enctypes = des3-cbc-sha1:normal arcfour-hmac:normal 
                 aes256-cts:normal des-cbc-md5:normal des-cbc-crc:normal
                password_rules = /var/krb5/krb5kdc/password_rules.conf

        }

如果在 /var/krb5/krb5kdc/kdc.conf 文件中未指定 'password_rules = ' 行,或者所指定的文件不存在或无法访问,则不会启用增强密码强度功能。

密码规则文件包含多个密码规则,这些规则通过帮助用户选择适当的密码来提高密码强度。这些规则是在节下定义的。密码规则文件可以包含如下三个节:

  • [default] 节包含应用于整个领域的密码规则。缺省情况下,领域中的所有主体都受制于该节下指定的规则。
  • [policies] 节包含影响各个策略的密码规则。需要应用领域范围规则以外的更多规则时使用此节。
  • [principals] 节包含基于各个主体的密码规则。对于少数非常重要的主体(如 admin/admin 等),管理员可以采用特别定制的规则。

如果任何节重复出现,则最后出现的节被视为有效,并忽略其他节。也会忽略任何不完整、未知和拼写错误的条目。

如果由于某种原因导致密码规则文件发生损坏,kadmind 将记录和显示错误,然后退出。

密码规则配置文件具有与 IBM NAS 配置文件(/etc/krb5/krb5.conf/var/krb5/krb5kdc/kdc.conf)相同的格式,如下所示:

# This stanza has the realm-wide default rules
[default]
        mindiff    = 3
        maxrepeats = 3
        minalpha   = 4
        minother   = 1
        minlen     = 6
        maxlen     = 24
        minage     = 604800
        histsize   = 5
        # Add a separate dictlist line for each dictionary you want to add
        dictlist   = /usr/dict/words
        dictlist   = /var/krb5/krb5kdc/words

# This stanza has the per-policy rules
[policies]
        staff = {
                minlen = 8
        }
        admin = {
                minlen   = 10
                minother = 2
                histsize = 8
        }

# This stanza has the per-principal rules
[principals]
        admin/admin = {
                mindiff  = 4
                histsize = 10
        }

IBM NAS 附带了示例密码规则文件 /usr/samples/krb5/password_rules.conf。下一部分将介绍所有可用的密码规则。


密码规则

密码规则用于控制对主体密码的单项限制或检查项。这些增强密码强度规则可以基于领域、策略或主体进行设置。缺省情况下,规则是针对整个领域设置的。现有主体的密码不会受新密码规则的影响。如果在激活密码规则后密码发生改变,新密码应遵从这些规则。IBM NAS 支持四种类型的密码规则:

组合规则

这些规则指定密码可以包含哪些内容,例如,密码是否应当只包含字母或字母数字字符。支持下列规则:

mindiff = <number>
新密码与旧密码中不同字符的最小数目。
maxrepeats = <number>
给定字符在密码中可以出现的最大次数。
minalpha = <number>
密码中字母数字字符的最小数目。
minother = <number>
密码中非字母数字字符的最小数目。
minlen = <number>
密码中字符的最小数目。(最小值为 1,因为密码不能为空字符串)
maxlen = <number>
密码中字符的最大数目。

组合检查算法根据下列规则验证密码中的字符是否处于有效范围:

  • 不允许出现负值。如果指定了负值,服务器将记录警告并忽略该值。
  • 如果 minalpha 和 minother 相加大于 maxlen,则 maxlen 的值设为 minalpha + minother。
  • minlen 的最小值为 1(密码不能为空字符串)。如果未指定 minlen 的值或指定为 0,则该值设为 1。在这种情况下不会记录警告。
  • maxlen 必须大于或等于 minlen。如果 minlen 大于 maxlen,则 maxlen 设为 minlen 的值。
  • mindiff、maxrepeats、minalpha、minother 或 maxlen 的值设为 0 表示不会检查该规则。

使用期限规则

这些规则用于指定更改密码的频率。支持下列规则:

minage = <seconds>
在可以更改密码之前,该密码必须存在的最短时间。该值以秒为单位。其值必须是大于或等于零的整数。如果未指定该值或值为 0,则不应用该规则。如果值为负数,则忽略该值,并且由 kadmind 服务器记录一个警告。

注意:如果管理员使用 change_password kadmin 命令来更改密码,则忽略 minage 检查。

重用(或历史)规则

使用此规则指定在某个密码可以重用之前,必须使用的其他密码的数目。支持下列规则:

histsize = <number>
在可以重用前一个密码之前,密码更改必须发生的特定次数。histsize 的有效值为 1 至 10。如果未指定或传递该值,则该值设为 1。但是,如果传递了大于 10 的值,则该值设为 10 并附带警告。

字典规则

使用字典规则可以指定在密码验证过程中使用的单词列表(作为字典文件)。支持下列规则:

dictlist = <filename>
包含不能用作密码的单词的字典文件列表。

字典文件具有与 AIX 字典文件相同的格式:

  • 每行包含一个单词。
  • 每个单词从第一列开始,并以新行字符结束。
  • 不会删除内嵌、前导和末尾的空格。

字典文件必须位于正在运行 kadmind 的计算机上,或位于可通过显式路径访问的远程加载的文件系统中。必须使用绝对路径来指定字典文件。

注意

  • 如果主 KDC 和 kadmind 迁移到新计算机,则必须转移字典文件。
  • 如果取消 IBM NAS 的配置,则可能需要手动删除系统中的任何字典文件。
  • 如果 kadmind 无法找到指定的字典文件,则会记录关于缺少文件的警告,但用户仍然可以更改其密码。不会检查缺少的字典文件。

规则管理

有关 IBM NAS 管理服务器的更多信息

有关 kadmind 服务器、kadmin & kadmind.local 命令接口的详细信息,请参考 AIX expansion pack CD 上的 IBM NAS 1.4 附带的 IBM NAS 1.4 管理员和用户指南

概括来说,密码配置文件中有三个位置可供管理员指定基于主体、策略或领域范围的密码规则;管理员需要决定在何处放置规则。每个节各自具有不同的用途和限制。每次修改规则文件时,都需要重启 kadmind 守护进程,这就是始终推荐指定领域范围或基于策略的规则的原因,以使对 kadmind 服务器的影响降到最低。如果在主体级别上指定规则,管理员可能需要在每次添加单个主体或一批主体时重启 kadmind 服务器。在生产环境中重启服务器守护进程是一种不推荐的做法。

kadmind 守护进程只在启动时读取 kadmin 命令接口的所有规则,而 kadmind.local 命令接口则在每次调用时重新读取规则文件。因此,建议每当规则文件或字典文件被更改时就重启 kadmind 服务器,这样 kadmin 和 kadmin.local 命令接口将提供一致的结果。

下面的示例显示了 kadmind 和 kadmin.local 如何读取密码配置文件。对于 kadmin 接口,kadmind 守护进程在启动时读取文件,如下所示:

bash-2.05b# hostname
land.in.ibm.com

bash-2.05b# date
Wed Apr 30 11:35:42 CDT 2008

bash-2.05b# start.krb5 kadmind
Starting kadmind...
kadmind was started successfully.
The command completed successfully.

守护进程启动成功后,它将在日志文件(缺省日志文件:/var/krb5/log/kadmin.log)中记录如下内容:

Apr 30 11:35:47 land.in.ibm.com kadmind[26712](info): Seeding random number generator
Apr 30 11:35:47 land.in.ibm.com kadmind[26712](info): Password strength is enabled using
rules file /var/krb5/krb5kdc/password_rules.conf.
Apr 30 11:35:47 land.in.ibm.com kadmind[25232](info): starting

启动时,kadmin.local 命令接口在日志文件中记录关于密码规则文件的信息,如下面的示例所示:

bash-2.05b# hostname
land.in.ibm.com

bash-2.05b# date
Wed Apr 30 11:30:11 CDT 2008

bash-2.05b# kadmin.local
kadmin.local:

在您运行 kadmin.local 接口时,它将在日志文件中记录下列信息:

pr 30 11:30:15 land.in.ibm.com kadmin.local[22428](info): Password strength is enabled
using rules file /var/krb5/krb5kdc/password_rules.conf.

kadmind 服务器启动时,在密码规则文件的 [default] 节中指定的字典文件列表和缺省字典文件(在 /var/krb5/krb5kdc/kdc.conf 文件中提供)被加载到内存中。启动时不会读取为单个策略或主体指定的字典文件列表;相反,根据需要读取它们并添加到内存中的现有字典文件列表中。

除字典文件检查外,在启用密码强度检查时还维持一些隐含规则。例如,密码不能与主体名称或领域名称相同。

下面的示例显示了如何执行字典检查。在本例中,字典文件 /var/krb5/krb5kdc/words 包含下列单词:

bash-2.05b# cat /var/krb5/krb5kdc/words
kerberos
ibm
admin
nas
aix

同样,不要忘记在 password_rule 文件的 [dictlist] 节下提供字典文件名,如下所示:

bash-2.05b# cat /var/krb5/krb5kdc/password_rules.conf
[default]
        mindiff    = 3
        maxrepeats = 3
        minalpha   = 0
        minother   = 0
        minlen     = 6
        maxlen     = 24
        minage     = 604800
        histsize   = 5
        # Add a separate dictlist line for each dictionary you want to add
        dictlist   = /var/krb5/krb5kdc/words

还需要在 /var/krb5/krb5kdc/kdc.conf 文件中提供 password_rule 文件的名称。

现在,我们来尝试创建密码为“kerberos”的主体“vipin”。它不会成功。

bash-2.05b# /usr/krb5/sbin/kadmin.local
kadmin.local:  ank -pw kerberos vipin
WARNING: no policy specified for vipin@TEST;
  defaulting to no policy. Note that policy may be overridden by
  ACL restrictions.
Unable to create principal "vipin@TEST".
        Status 0x29c2518 - Password is either in the password dictionary or is the same 
        as the principal or realm name.
kadmin.local:  q

因此,我们的字典文件已生效并且工作正常!

密码规则:如何应用?

启用增强密码强度功能时,可能存在将密码规则的多个实例应用于某个主体的情况。在这种情况下,将应用最严格的规则。根据下表执行最严格的规则:

表 1. 合并规则
规则最严格值
mindiff最大值
maxrepeats最小值
minalpha最大值
minother最大值
minlen最大值
maxlen最小值
minage最大值
histsize最大值

如果在领域、策略和主体级别上为主体提供了多个字典文件列表,那么在密码验证过程中将连接所有列表并进行查询。

正如我们所了解的,只有在 /var/krb5/krb5kdc/kdc.conf 文件中指定了“password_rule”文件时才会激活增强密码强度功能,基于主体是否拥有策略和 password_rule 文件是否被激活来确定是否对密码进行验证。下表总结了所有可能情况:

表 2. 密码验证规则
主体是否拥有策略?是否激活了 password_rules 文件?密码验证规则
不执行密码强度检查。不检查字典文件。
检查 password_rules 文件中的增强规则。如果在 kdc.conf 中指定了字典,也会执行字典检查。
不执行增强规则检查。检查策略规则;如果在 kdc.conf 中指定了字典,则执行字典检查。
检查现有基于策略的规则以及规则文件中的增强规则。如果在 kdc.conf 中指定了字典,则也会执行字典检查。根据表 1 中的规则来合并策略记录中的规则与规则文件的 [policy] 节之间的冲突。

结束语

本文讨论了关于 IBM NAS 提供的增强密码强度功能的所有内容,并向 Kerberos 管理员介绍如何充分利用该功能。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=333377
ArticleTitle=在 IBM Network Authentication Service for AIX 中增强密码强度
publish-date=08282008