了解如何使用 IBM Network Authentication Service (IBM Kerberos) for AIX 增強 Kerberos 用戶的密碼
引言
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管理員介紹如何充分 利用該功能。