WEB开发网
开发学院操作系统Linux/Unix 在 IBM Network Authentication Service for AIX ... 阅读

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

 2008-11-10 08:26:24 来源:WEB开发网   
核心提示:引言Kerberos 主体密码是用来解锁密钥分发中心 (KDC) 服务器应答的密钥,因此,在 IBM Network Authentication Service for AIX 中增强密码强度,如果该密码发生泄露,就没有其他方法来核实主体的真实性,根据表 1 中的规则来合并策略记录中的规则与规则文件的 [policy

引言

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 无法找到指定的字典文件,则会记录关于缺少文件的警告,但用户仍然可以更改其密码。不会检查缺少的字典文件。

规则管理

概括来说,密码配置文件中有三个位置可供管理员指定基于主体、策略或领域范围的密码规则;管理员需要决定在何处放置规则。每个节各自具有不同的用途和限制。每次修改规则文件时,都需要重启 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 管理员介绍如何充分利用该功能。

Tags:IBM Network Authentication

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