如何在 Linux 中强制实施密码复杂性策略

LinuxBeginner
立即练习

介绍

维护强大的密码策略对于保护 Linux 系统至关重要。本教程将指导你了解 Linux 密码策略的基础知识,配置密码复杂性要求,并强制执行这些策略,以增强你的 Linux 环境的整体安全性。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 中级 级别的实验,完成率为 69%。获得了学习者 100% 的好评率。

了解 Linux 密码策略文件

Linux 系统使用多个配置文件来管理密码策略。在这一步中,我们将探讨这些文件,并了解它们在密码管理中的作用。

探索密码策略配置文件

让我们从检查控制 Ubuntu 中密码策略的关键配置文件开始:

  1. 首先,通过单击桌面环境中的终端图标打开一个终端。

  2. 让我们看看 /etc/login.defs 文件,其中包含基本的密码策略设置:

    cat /etc/login.defs | grep "^PASS_"

    你应该看到类似这样的输出:

    PASS_MAX_DAYS   99999
    PASS_MIN_DAYS   0
    PASS_WARN_AGE   7

    这些设置控制:

    • PASS_MAX_DAYS: 密码保持有效的最长天数
    • PASS_MIN_DAYS: 两次密码更改之间所需的最少天数
    • PASS_WARN_AGE: 密码过期前的警告天数
  3. 另一个重要的文件是 /etc/pam.d/common-password,它管理密码身份验证的 PAM(可插入身份验证模块)设置:

    cat /etc/pam.d/common-password

    此文件包含多行,用于配置密码的管理方式,包括复杂性要求。

  4. 系统使用 pwquality 库来强制执行密码质量。让我们检查一下它是否已安装:

    dpkg -l | grep libpwquality

    如果未安装,我们可以安装它:

    sudo apt update
    sudo apt install -y libpam-pwquality
  5. 现在,让我们检查密码质量配置文件:

    cat /etc/security/pwquality.conf

    此文件可能大多数行都使用 # 注释掉,这意味着正在使用默认值。

了解密码策略参数

以下是可以配置的关键参数:

  • minlen: 密码的最小长度
  • dcredit: 密码中数字的信用
  • ucredit: 密码中大写字符的信用
  • lcredit: 密码中小写字符的信用
  • ocredit: 密码中特殊字符的信用
  • retry: 输入新密码的重试次数
  • enforce_for_root: 是否对 root 用户强制执行这些策略

这些参数提供了一个全面的框架,用于控制 Linux 系统中的密码复杂性和安全性。

配置基本密码策略

在这一步中,我们将通过修改 /etc/login.defs 文件来配置基本密码策略,以设置密码老化要求。

设置密码老化参数

  1. 让我们首先备份原始文件:

    sudo cp /etc/login.defs /etc/login.defs.backup
  2. 现在,使用 nano 打开文件进行编辑:

    sudo nano /etc/login.defs
  3. 在编辑器中,查找这些参数(使用 Ctrl+W 进行搜索):

    PASS_MAX_DAYS
    PASS_MIN_DAYS
    PASS_WARN_AGE
  4. 更改这些值以实施更安全的密码老化策略:

    • PASS_MAX_DAYS99999 更改为 90(密码在 90 天后过期)
    • PASS_MIN_DAYS0 更改为 7(两次密码更改之间至少 7 天)
    • PASS_WARN_AGE7 更改为 14(在密码过期前 14 天警告用户)
  5. 通过按 Ctrl+O,然后按 Enter 保存文件,然后使用 Ctrl+X 退出。

  6. 验证你的更改:

    cat /etc/login.defs | grep "^PASS_"

    你应该看到:

    PASS_MAX_DAYS   90
    PASS_MIN_DAYS   7
    PASS_WARN_AGE   14

在新用户上测试策略

让我们创建一个测试用户,看看这些策略是如何应用的:

  1. 创建一个新用户:

    sudo useradd -m testuser
  2. 为新用户设置密码:

    sudo passwd testuser

    在提示时输入一个简单的密码(我们将在后面的步骤中加强它)。

  3. 检查新用户的密码老化信息:

    sudo chage -l testuser

    你应该看到密码策略已应用于此新用户,显示基于你的设置的过期日期。

请注意,这些更改仅适用于新帐户或更改密码时。现有帐户将保留其先前的设置,直到你手动更新它们。

配置密码复杂性要求

在这一步中,我们将配置密码复杂性规则,以在我们的系统上强制使用强密码。

设置密码复杂性规则

  1. 首先,让我们备份 PAM 配置文件:

    sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup
  2. 现在,打开文件进行编辑:

    sudo nano /etc/pam.d/common-password
  3. 查找包含 pam_pwquality.so 的行。它可能看起来像这样:

    password        requisite                       pam_pwquality.so retry=3
  4. 修改此行以添加复杂性要求。将其替换为:

    password        requisite                       pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root

    此配置意味着:

    • minlen=12: 最小密码长度为 12 个字符
    • dcredit=-1: 至少需要 1 个数字
    • ucredit=-1: 至少需要 1 个大写字母
    • lcredit=-1: 至少需要 1 个小写字母
    • ocredit=-1: 至少需要 1 个特殊字符
    • enforce_for_root: 也将这些策略应用于 root 用户
  5. 通过按 Ctrl+O,然后按 Enter 保存文件,然后使用 Ctrl+X 退出。

在 pwquality.conf 中配置其他参数

  1. 现在,让我们修改 pwquality 配置文件以进行其他控制:

    sudo cp /etc/security/pwquality.conf /etc/security/pwquality.conf.backup
    sudo nano /etc/security/pwquality.conf
  2. 取消注释(删除开头的 #)并修改这些行,或者在它们不存在时添加它们:

    minlen = 12
    dcredit = -1
    ucredit = -1
    lcredit = -1
    ocredit = -1
    difok = 4
    enforce_for_root = 1

    difok = 4 参数要求至少有 4 个字符与之前的密码不同。

  3. 通过按 Ctrl+O,然后按 Enter 保存文件,然后使用 Ctrl+X 退出。

测试新的密码复杂性策略

  1. 让我们通过更改测试用户的密码来测试我们的新策略:

    sudo passwd testuser
  2. 尝试输入一个简单的密码,例如 password123。系统应该会因其不满足复杂性要求而拒绝它。

  3. 现在尝试一个满足所有要求的复杂密码,例如 Secure@Password123

    如果你已正确配置所有内容,系统应该接受此密码。

复杂性要求确保用户创建强密码,从而使攻击者更难猜测或破解它们。

实施密码历史控制

在这一步中,我们将配置密码历史控制,以防止用户重复使用他们最近的密码。

配置密码历史

  1. 首先,如果你还没有这样做,让我们备份 PAM 配置文件:

    sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup2
  2. 打开文件进行编辑:

    sudo nano /etc/pam.d/common-password
  3. 查找包含 pam_unix.so 的行。它可能看起来像这样:

    password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512
  4. 修改此行以添加 remember 参数。在行的末尾添加 remember=5

    password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512 remember=5

    这将阻止用户重复使用他们最近的 5 个密码中的任何一个。

  5. 通过按 Ctrl+O,然后按 Enter 保存文件,然后使用 Ctrl+X 退出。

了解密码历史的工作原理

remember=5 参数指示系统存储每个用户的最后 5 个密码的哈希值。当用户尝试更改他们的密码时,系统会将新密码与这些存储的哈希值进行比较,以确保它没有被重复使用。

密码历史存储在 /etc/security/opasswd 文件中。让我们检查一下这个文件是否存在:

ls -la /etc/security/opasswd

如果它不存在,则会在第一个用户使用新策略更改密码时自动创建。

测试密码历史

  1. 让我们尝试多次更改测试用户的密码,以查看历史机制的运作情况:

    sudo passwd testuser
  2. 设置一个复杂的密码,例如 Complex@Password1

  3. 现在尝试立即再次更改它:

    sudo passwd testuser
  4. 尝试再次设置相同的密码。系统应该会由于历史策略而拒绝它。

  5. 尝试几次不同的密码,然后尝试重复使用之前的密码。你应该发现你无法重复使用你最近的 5 个密码中的任何一个。

这种密码历史机制通过防止密码重复使用来增加另一层安全性,而密码重复使用是一个常见的安全弱点。

将密码策略应用于现有用户

在最后一步中,我们将学习如何将新的密码策略应用于现有用户并管理用户密码信息。

了解密码过期管理

当你更改 /etc/login.defs 中的密码策略时,新设置仅适用于新创建的用户,或者当你手动更新现有用户时。让我们看看如何管理现有用户:

  1. 首先,检查用户帐户的当前状态:

    sudo chage -l labex

    这将显示当前用户的密码老化信息。

  2. 要强制用户在下次登录时更改密码:

    sudo chage -d 0 testuser

    这将上次密码更改日期设置为 0,强制在下次登录时更改密码。

  3. 要手动设置密码过期日期:

    sudo chage -E $(date -d "90 days" +%Y-%m-%d) testuser

    这将帐户过期日期设置为从今天起 90 天。

为现有用户设置最大密码使用期限

要将最大密码使用期限策略应用于现有用户:

sudo chage -M 90 testuser

这将用户的最大密码使用期限设置为 90 天。

为现有用户设置最小密码使用期限

要将最小密码使用期限策略应用于现有用户:

sudo chage -m 7 testuser

这将用户的最小密码使用期限设置为 7 天。

为现有用户设置密码过期警告

要将密码过期警告策略应用于现有用户:

sudo chage -W 14 testuser

这将用户的密码过期警告期限设置为 14 天。

查看用户密码信息

你可以使用几个命令来检查用户的密码信息:

  1. 查看所有本地用户帐户:

    cat /etc/passwd
  2. 检查特定用户的密码状态:

    sudo passwd -S testuser
  3. 列出具有特定密码设置的用户:

    awk -F: '($3 >= 1000) {print $1}' /etc/passwd

    这将列出系统上的所有常规用户(UID >= 1000)。

将策略应用于所有用户

要将新的密码策略应用于系统上的所有常规用户,你可以使用一个简单的脚本。这是一个例子:

for user in $(awk -F: '($3 >= 1000) && ($3 < 60000) {print $1}' /etc/passwd); do
  echo "Updating password policy for user: $user"
  sudo chage -M 90 -m 7 -W 14 $user
done

此脚本使用新的密码老化策略更新所有常规用户。

通过将这些策略应用于现有用户,你可以确保整个系统中的密码安全性一致。

总结

在这个实验中,你已经学习了如何在 Linux 中配置和实施强大的密码策略。你已经:

  1. 探索了控制密码策略的关键配置文件
  2. 配置了基本的密码老化策略,以确保定期更新密码
  3. 实施了强大的密码复杂性要求,以强制使用安全密码
  4. 设置了密码历史控制,以防止密码重复使用
  5. 学习了如何将密码策略应用于现有用户

这些密码策略配置对于维护安全的 Linux 环境至关重要。通过实施强大的密码要求、定期密码轮换并防止密码重复使用,你已经显着提高了你的系统针对未经授权的访问和潜在入侵的安全性。

请记住,有效的密码策略只是一个全面的安全策略的一个方面。它们应该与其他安全措施相结合,例如定期系统更新、适当的用户管理和持续的安全监控。