6.2. pam_cracklib-根据字典词检查密码

pam_cracklib.so [ ... ]

6.2.1. DESCRIPTION

可以将该模块插入给定应用程序的* password *堆栈中,以提供一些插件强度检查来检查密码。

该模块的作用是提示用户 Importing 密码,并根据系统词典和一组识别错误选择的规则来检查其强度。

第一个操作是提示 Importing 单个密码,检查其强度,然后,如果认为强度很高,则再次提示 Importing 密码(以验证第一次 Importing 的密码是否正确)。一切都很好,密码将传递给后续模块以作为新的身份验证令牌进行安装。

强度检查按以下方式进行:首先,调用Cracklib例程以检查密码是否属于字典;如果不是这种情况,则会进行另一组强度检查。这些检查是:

  • Palindrome

    • 新密码是回文吗?
  • 仅大小写更改

    • 新密码是旧密码,只是大小写有所变化?
  • Similar

    • 新密码是否与旧密码过于相似?这主要由一个参数difok控制,该参数是新旧密码之间足以接受新密码的许多字符更改(插入,删除或替换)。默认为 5 个更改。
  • Simple

    • 新密码是否太小?这由 6 个参数minlenmaxclassrepeatdcreditucreditlcreditocredit控制。有关这些参数如何工作以及默认值的详细信息,请参见参数部分。
  • Rotated

    • 新密码是旧密码的轮换版本吗?
  • 相同的连续字符

    • 可选检查相同的连续字符。
  • 单调字符序列太长

    • 可选检查太长的单调字符序列。
  • 包含用户名

    • 可选检查密码是否包含某种形式的用户名。

此模块不带参数,可以很好地用于标准的 unix 密码加密。使用 md5 加密时,密码可以超过 8 个字符,并且此模块的默认设置会使用户难以选择令人满意的新密码。值得注意的是,新密码所包含的字符数不得超过旧密码中字符数的 1/2,这一要求变得不平凡。例如,很难更改“快速的棕色狐狸跳过懒狗”形式的旧密码。此外,默认操作是允许密码长度最小为 5 个字符。对于 md5 系统,最好增加所需的最小密码长度。然后,可以为不同种类的字符提供更多的信用,但是接受新密码可以与旧密码共享大多数这些字符。

6.2.2. OPTIONS

  • debug

    • 此选项使模块将信息写入 syslog(3),以指示模块的行为(此选项不将密码信息写入日志文件)。
  • authtok_type=XXX

    • 默认操作是模块在请求密码时使用以下提示:“ New UNIX password:”和“ Retype UNIX password:”。示例词* UNIX *可以用此选项替换,默认情况下为空。
  • retry=N

    • 在错误返回之前,最多提示用户* N 次。默认值为 1 *。
  • difok=N

    • 对于新密码中与旧密码不同的字符更改次数,此参数将更改默认值* 5 *。
  • minlen=N

    • 新密码的最小可接受大小(如果未禁用信用,则加一个默认值)。除了新密码中的字符数外,还会为每种不同的字符(* other upper lower digit )提供信用(长度为 1)。此参数的默认值为 9 ,适用于所有相同类型字符的旧式 UNIX 密码,但可能太低而无法利用 md5 系统的附加安全性。请注意, Cracklib *本身中有一对长度限制,其中一个 4 的“过短”限制是硬编码的,定义的限制(6)将在不参考minlen的情况下进行检查。如果要允许密码短至 5 个字符,则不应使用此模块。
  • dcredit=N

    • (N> = 0)这是新密码中包含数字的最大信用额。如果您的位数少于或* N *,则每个数字将为满足当前minlen值而计数 1. dcredit的默认值为 1,这是minlen的建议值,小于 10.

(N <0)这是新密码必须满足的最小位数。

  • ucredit=N

    • (N> = 0)这是在新密码中使用大写字母的最大功劳。如果您的少于或* N 大写字母,则每个字母在满足当前minlen值时将计为 1. ucredit的默认值为 1 *,这是minlen的建议值,小于 10.

(N <0)这是新密码必须满足的最小大写字母数。

  • lcredit=N

    • (N> = 0)这是在新密码中使用小写字母的最大功劳。如果您少于或* N *小写字母,则每个字母在满足当前minlen值时将计为 1. lcredit的默认值为 1,这是minlen的建议值,小于 10.

(N <0)这是新密码必须满足的最小小写字母数。

  • ocredit=N

    • (N> = 0)这是在新密码中包含其他字符的最大功劳。如果您有少于或* N *个其他字符,则每个字符在满足当前minlen值时将计为 1. ocredit的默认值为 1,这是minlen的建议值,小于 10.

(N <0)这是新密码必须满足的最少其他字符数。

  • minclass=N

    • 新密码所需的最少字符类数。默认数字为零。这四个类别是数字,大写和小写字母以及其他字符。与credit检查的区别是不需要特定的字符类。相反,必须在四个类别中选择* N *。
  • maxrepeat=N

    • 拒绝包含超过 N 个相同连续字符的密码。默认值为 0,表示此检查已禁用。
  • maxsequence=N

    • 拒绝包含长于 N 的单调字符序列的密码。默认值为 0,这表示此检查已禁用。这样的序列的示例是“ 12345”或“ fedcb”。请注意,除非序列只是密码的一小部分,否则大多数此类密码都不会通过简单性检查。
  • maxclassrepeat=N

    • 拒绝包含相同类别的 N 个以上连续字符的密码。默认值为 0,表示此检查已禁用。
  • reject_username

    • 检查新密码中是否包含用户名的正或反形式。如果找到,则拒绝新密码。
  • gecoscheck

    • 检查新密码是否包含来自 GECOS 字段的单词(通常为用户的全名),长度超过 3 个字符,且包含正数或反向字符。如果找到任何这样的单词,则拒绝新密码。
  • enforce_for_root

    • 如果更改密码的用户是 root 用户,则模块还将在失败检查后返回错误。默认情况下,此选项是关闭的,这意味着仅显示有关检查失败的消息,但 root 仍然可以更改密码。请注意,不会要求 rootImporting 旧密码,因此不会执行将旧密码和新密码进行比较的检查。
  • use_authtok

    • 此参数用于强制模块不提示用户 Importing 新密码,而是使用先前堆叠的密码模块提供的密码。
  • dictpath=/path/to/dict

    • cracklib 字典的路径。

6.2.3. 提供的模块类型

仅提供password模块类型。

6.2.4. 返回值

  • PAM_SUCCESS

    • 新密码通过所有检查。
  • PAM_AUTHTOK_ERR

    • 未 Importing 新密码,无法确定用户名,或新密码未通过强度检查。
  • PAM_AUTHTOK_RECOVERY_ERR

    • 旧密码不是由以前的堆叠模块提供的,或者没有得到用户的请求。如果指定use_authtok,则可能会发生第一个错误。
  • PAM_SERVICE_ERR

    • 发生内部错误。

6.2.5. EXAMPLES

对于使用此模块的示例,我们展示了如何将其与 pam_unix(8)的密码组件堆叠在一起

#
# These lines stack two password type modules. In this example the
# user is given 3 opportunities to enter a strong password. The
# "use_authtok" argument ensures that the pam_unix module does not
# prompt for a password, but instead uses the one provided by
# pam_cracklib.
#
passwd  password required       pam_cracklib.so retry=3
passwd  password required       pam_unix.so use_authtok

另一个示例(以/etc/pam.d/passwd格式)是您要使用 md5 密码加密的情况:

#%PAM-1.0
#
# These lines allow a md5 systems to support passwords of at least 14
# bytes with extra credit of 2 for digits and 2 for others the new
# password must have at least three bytes that are not present in the
# old password
#
password  required pam_cracklib.so \
               difok=3 minlen=15 dcredit= 2 ocredit=2
password  required pam_unix.so use_authtok nullok md5

如果您不想使用 Integration,这是另一个示例:

#%PAM-1.0
#
# These lines require the user to select a password with a minimum
# length of 8 and with at least 1 digit number, 1 upper case letter,
# and 1 other character
#
password  required pam_cracklib.so \
               dcredit=-1 ucredit=-1 ocredit=-1 lcredit=0 minlen=8
password  required pam_unix.so use_authtok nullok md5

6.2.6. AUTHOR

pam_cracklib 由 Cristian Gafton<[email protected]>编写