问题描述
有没有办法设置最低密码要求,例如最小长度、混合大小写字母数字的要求以及密码中至少有 1 个符号,并在密码更改时强制执行?
最佳办法
Ubuntu 中的密码复杂性由 PAM 控制。不幸的是,PAM 的方法类似于 “typically Unix”。这意味着它通过大量非常混乱的文件传播其配置。
控制密码复杂度的文件是:
/etc/pam.d/common-password
有一行:
password [success=1 default=ignore] pam_unix.so obscure sha512
它定义了密码复杂性的基本规则。您可以通过将其更改为以下方式来添加最小长度覆盖:
password [success=1 default=ignore] pam_unix.so obscure sha512 minlen=12
或任何你想要的最低限度。正如您所看到的,默认值已经定义了一些基本的模糊规则。这些基本规则可见于:
man pam_unix
搜索 “obscure”。
有大量可以安装的 pam 模块。
apt-cache search libpam-
应该告诉你他们。
恐怕你需要为他们寻找文档。但 “cracklib” 是常见的添加。
更新:我应该指出,默认的 “obscure” 参数包括基于以前的密码的复杂性和简单性(长度、不同类型字符的数量)的测试。手册页中的示例显示了 crashlib 的实际应用。安装 libpam_cracklib 使其正常工作。
此外,一旦您确定了要更改的内容,其他文件中的更改也是相同的,以便您可以对 SSH 和其他应用程序强制执行相同(或不同)的密码检查。
次佳办法
预安装的 PAM 模块允许您根据复杂性设置基本要求。有一个很好的模块,它是 pam_cracklib 模块的后继者 – pam_pwquality。为了安装它,输入以下内容
apt-get install libpam-pwquality
然后熟悉这个
man pam_pwquality
特别是 “Options” 部分。
现在您可以编辑 /etc/pam.d/中的 common-password
vi /etc/pam.d/common-password
找到包含以下“密码必需的 pam_pwquality.so”语句的行,并在 pam_pwquality.so 之后附加您的选项,如下所示
password requisite pam_pwquality.so minlen=16 ucredit=-4 retry=3
其代表“密码的最小长度为 16 个字符,其中至少 4 个大写字符。提示用户输入密码 3 次。
pam_pwquality 允许您与 pam_pwhistory 等其他模块结合使用,提出更复杂的密码要求。祝你好运