在 Linux 中创建密码策略

再一次问好! 新课程组的课程明天开始 《Linux 管理员》,在这方面,我们正在就此主题发表一篇有用的文章。

在 Linux 中创建密码策略

在之前的教程中我们已经告诉你如何使用 pam_cracklib使系统上的密码更加复杂 红帽6 或 CentOS。 在红帽 7 中 pam_pwquality 已取代 cracklibpam 用于检查密码的默认模块。 模块 pam_pwquality 还支持 Ubuntu 和 CentOS 以及许多其他操作系统。 该模块可以轻松创建密码策略,以确保用户接受您的密码强度标准。

长期以来,密码的常见做法是强制用户使用大写、小写、数字或其他符号。 这些密码复杂性的基本规则在过去十年中得到了广泛推广。 关于这是否是好的做法已经有很多讨论。 反对设置如此复杂的条件的主要论点是用户将密码写在纸上并不安全地存储它们。

最近受到质疑的另一项政策强制用户每 x 天更改一次密码。 有一些研究表明这也不利于安全。

关于这些讨论的主题已经写了许多文章,证实了一种观点或另一种观点。 但这不是我们在本文中要讨论的内容。 本文将讨论如何正确设置密码复杂性而不是管理安全策略。

密码策略设置

您将在下面看到密码策略选项以及每个选项的简要说明。 其中很多与模块中的参数类似 cracklib。 这种方法可以更轻松地从旧系统移植您的策略。

  • 迪福克 – 新密码中不应出现在旧密码中的字符数。 (默认 5)
  • 民伦 – 最小密码长度。 (默认 9)
  • 优信 – 使用大写字符的最大学分(如果参数 > 0),或所需的最小大写字符数(如果参数 < 0)。 默认值为 1。
  • 信用证 — 使用小写字符的最大学分(如果参数 > 0),或所需的最小小写字符数(如果参数 < 0)。 默认值为 1。
  • 信用证 — 使用数字的最大学分数(如果参数 > 0),或所需的最小数字数(如果参数 < 0)。 默认值为 1。
  • 信用证 — 使用其他符号的最大学分数(如果参数 > 0),或所需的最小其他符号数(如果参数 < 0)。 默认值为 1。
  • 小班 – 设置所需的班级数量。 类包括上述参数(大写字符、小写字符、数字、其他字符)。 默认值为 0。
  • 最大重复次数 – 密码中字符可以重复的最大次数。 默认值为 0。
  • 最大类重复次数 — 一类中连续字符的最大数量。 默认值为 0。
  • 地理检查 – 检查密码是否包含用户 GECOS 字符串中的任何单词。 (用户信息,即真实姓名、位置等)默认为 0(关闭)。
  • 字典路径 – 让我们看看cracklib 字典。
  • 脏话 – 密码中禁止使用空格分隔的单词(公司名称、单词“密码”等)。

如果贷款的概念听起来很奇怪,没关系,这很正常。 我们将在下面的部分中详细讨论这一点。

密码策略配置

在开始编辑配置文件之前,最好提前写下基本密码策略。 例如,我们将使用以下难度规则:

  • 密码的最小长度必须为 15 个字符。
  • 密码中相同的字符不应重复两次以上。
  • 密码中的字符类最多可以重复四次。
  • 密码必须包含每个类别的字符。
  • 新密码与旧密码相比必须有 5 个新字符。
  • 启用 GECOS 检查。
  • 禁止使用“password、pass、word、putorius”等词语

现在我们已经制定了策略,我们可以编辑文件 /etc/security/pwquality.conf增加密码复杂性要求。 下面是一个带有注释的示例文件,以便更好地理解。

# Make sure 5 characters in new password are new compared to old password
difok = 5
# Set the minimum length acceptable for new passwords
minlen = 15
# Require at least 2 digits
dcredit = -2
# Require at least 2 upper case letters
ucredit = -2
# Require at least 2 lower case letters
lcredit = -2
# Require at least 2 special characters (non-alphanumeric)
ocredit = -2
# Require a character from every class (upper, lower, digit, other)
minclass = 4
# Only allow each character to be repeated twice, avoid things like LLL
maxrepeat = 2
# Only allow a class to be repeated 4 times
maxclassrepeat = 4
# Check user information (Real name, etc) to ensure it is not used in password
gecoscheck = 1
# Leave default dictionary path
dictpath =
# Forbid the following words in passwords
badwords = password pass word putorius

您可能已经注意到,我们文件中的一些参数是多余的。 例如,参数 minclass 是多余的,因为我们已经使用了使用字段的类中的至少两个字符 [u,l,d,o]credit。 我们不能使用的单词列表也是多余的,因为我们禁止任何类重复 4 次(列表中的所有单词均以小写字符书写)。 我提供这些选项只是为了演示如何使用它们来配置您的密码策略。
创建策略后,您可以强制用户在下次登录时更改密码。 系统.

您可能已经注意到的另一个奇怪的事情是字段 [u,l,d,o]credit 包含负数。 这是因为大于或等于 0 的数字将表明您在密码中使用了该字符。 如果该字段包含负数,则表示需要一定数量。

什么是贷款?

我称它们为贷款,因为这尽可能准确地传达了它们的目的。 如果参数值大于 0,则在密码长度中添加等于“x”的“字符积分”数。 例如,如果所有参数 (u,l,d,o)credit 设置为 1 并且所需的密码长度为 6,那么您将需要 6 个字符来满足长度要求,因为每个大写、小写、数字或其他字符都会给您一个积分。

如果你安装 dcredit 在 2 处,理论上您可以使用 9 个字符长的密码并获得 2 个数字字符积分,然后密码长度可能已经是 10。

看这个例子。 我将密码长度设置为 13,将 dcredit 设置为 2,其他所有设置为 0。

$ pwscore
 Thisistwelve
 Password quality check failed:
  The password is shorter than 13 characters

$ pwscore
 Th1sistwelve
 18

我的第一次检查失败,因为密码长度少于 13 个字符。 下一次,我将字母“I”更改为数字“1”,并获得了两个数字积分,这使得密码等于 13。

密码测试

libpwquality 提供文章中描述的功能。 它还附带一个程序 pwscore,旨在检查密码复杂性。 我们上面用它来检查贷款。
效用 pwscore 读取自 标准输入。 只需运行该实用程序并写入您的密码,它就会显示错误或 0 到 100 之间的值。

密码质量得分与参数有关 minlen 在配置文件中。 一般来说,低于50分的被认为是“普通密码”,高于XNUMX分的被认为是“强密码”。 任何通过质量检查的密码(尤其是强制验证) cracklib) 必须能够承受字典攻击,并且密码的设置分数高于 50 minlen 即使默认情况下 brute force 攻击。

结论

调整 pwquality – 与使用的不便相比,它简单又容易 cracklib 直接文件编辑 pam。 在本指南中,我们介绍了在 Red Hat 7、CentOS 7 甚至 Ubuntu 系统上设置密码策略时所需的一切。 我们还讨论了贷款的概念,但很少有人详细讨论这个概念,因此对于那些以前没有遇到过这个话题的人来说,这个话题常常不清楚。

来源:

pwquality 手册页
pam_pwquality 手册页
pwscore 手册页

相关链接:

选择安全密码 – Bruce Schneier
Lorrie Faith Cranor 讨论她在卡耐基梅隆大学的密码研究
关于熵的臭名昭著的 xkcd 漫画

来源: habr.com

添加评论