介绍
维护强大的密码策略对于保护 Linux 系统至关重要。本教程将指导你了解 Linux 密码策略的基础知识,配置密码复杂性要求,并强制执行这些策略,以增强你的 Linux 环境的整体安全性。
维护强大的密码策略对于保护 Linux 系统至关重要。本教程将指导你了解 Linux 密码策略的基础知识,配置密码复杂性要求,并强制执行这些策略,以增强你的 Linux 环境的整体安全性。
Linux 系统使用多个配置文件来管理密码策略。在这一步中,我们将探讨这些文件,并了解它们在密码管理中的作用。
让我们从检查控制 Ubuntu 中密码策略的关键配置文件开始:
首先,通过单击桌面环境中的终端图标打开一个终端。
让我们看看 /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: 密码过期前的警告天数另一个重要的文件是 /etc/pam.d/common-password,它管理密码身份验证的 PAM(可插入身份验证模块)设置:
cat /etc/pam.d/common-password
此文件包含多行,用于配置密码的管理方式,包括复杂性要求。
系统使用 pwquality 库来强制执行密码质量。让我们检查一下它是否已安装:
dpkg -l | grep libpwquality
如果未安装,我们可以安装它:
sudo apt update
sudo apt install -y libpam-pwquality
现在,让我们检查密码质量配置文件:
cat /etc/security/pwquality.conf
此文件可能大多数行都使用 # 注释掉,这意味着正在使用默认值。
以下是可以配置的关键参数:
minlen: 密码的最小长度dcredit: 密码中数字的信用ucredit: 密码中大写字符的信用lcredit: 密码中小写字符的信用ocredit: 密码中特殊字符的信用retry: 输入新密码的重试次数enforce_for_root: 是否对 root 用户强制执行这些策略这些参数提供了一个全面的框架,用于控制 Linux 系统中的密码复杂性和安全性。
在这一步中,我们将通过修改 /etc/login.defs 文件来配置基本密码策略,以设置密码老化要求。
让我们首先备份原始文件:
sudo cp /etc/login.defs /etc/login.defs.backup
现在,使用 nano 打开文件进行编辑:
sudo nano /etc/login.defs
在编辑器中,查找这些参数(使用 Ctrl+W 进行搜索):
PASS_MAX_DAYS
PASS_MIN_DAYS
PASS_WARN_AGE
更改这些值以实施更安全的密码老化策略:
PASS_MAX_DAYS 从 99999 更改为 90(密码在 90 天后过期)PASS_MIN_DAYS 从 0 更改为 7(两次密码更改之间至少 7 天)PASS_WARN_AGE 从 7 更改为 14(在密码过期前 14 天警告用户)通过按 Ctrl+O,然后按 Enter 保存文件,然后使用 Ctrl+X 退出。
验证你的更改:
cat /etc/login.defs | grep "^PASS_"
你应该看到:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
让我们创建一个测试用户,看看这些策略是如何应用的:
创建一个新用户:
sudo useradd -m testuser
为新用户设置密码:
sudo passwd testuser
在提示时输入一个简单的密码(我们将在后面的步骤中加强它)。
检查新用户的密码老化信息:
sudo chage -l testuser
你应该看到密码策略已应用于此新用户,显示基于你的设置的过期日期。
请注意,这些更改仅适用于新帐户或更改密码时。现有帐户将保留其先前的设置,直到你手动更新它们。
在这一步中,我们将配置密码复杂性规则,以在我们的系统上强制使用强密码。
首先,让我们备份 PAM 配置文件:
sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup
现在,打开文件进行编辑:
sudo nano /etc/pam.d/common-password
查找包含 pam_pwquality.so 的行。它可能看起来像这样:
password requisite pam_pwquality.so retry=3
修改此行以添加复杂性要求。将其替换为:
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 用户通过按 Ctrl+O,然后按 Enter 保存文件,然后使用 Ctrl+X 退出。
现在,让我们修改 pwquality 配置文件以进行其他控制:
sudo cp /etc/security/pwquality.conf /etc/security/pwquality.conf.backup
sudo nano /etc/security/pwquality.conf
取消注释(删除开头的 #)并修改这些行,或者在它们不存在时添加它们:
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
difok = 4
enforce_for_root = 1
difok = 4 参数要求至少有 4 个字符与之前的密码不同。
通过按 Ctrl+O,然后按 Enter 保存文件,然后使用 Ctrl+X 退出。
让我们通过更改测试用户的密码来测试我们的新策略:
sudo passwd testuser
尝试输入一个简单的密码,例如 password123。系统应该会因其不满足复杂性要求而拒绝它。
现在尝试一个满足所有要求的复杂密码,例如 Secure@Password123。
如果你已正确配置所有内容,系统应该接受此密码。
复杂性要求确保用户创建强密码,从而使攻击者更难猜测或破解它们。
在这一步中,我们将配置密码历史控制,以防止用户重复使用他们最近的密码。
首先,如果你还没有这样做,让我们备份 PAM 配置文件:
sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup2
打开文件进行编辑:
sudo nano /etc/pam.d/common-password
查找包含 pam_unix.so 的行。它可能看起来像这样:
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512
修改此行以添加 remember 参数。在行的末尾添加 remember=5:
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 remember=5
这将阻止用户重复使用他们最近的 5 个密码中的任何一个。
通过按 Ctrl+O,然后按 Enter 保存文件,然后使用 Ctrl+X 退出。
remember=5 参数指示系统存储每个用户的最后 5 个密码的哈希值。当用户尝试更改他们的密码时,系统会将新密码与这些存储的哈希值进行比较,以确保它没有被重复使用。
密码历史存储在 /etc/security/opasswd 文件中。让我们检查一下这个文件是否存在:
ls -la /etc/security/opasswd
如果它不存在,则会在第一个用户使用新策略更改密码时自动创建。
让我们尝试多次更改测试用户的密码,以查看历史机制的运作情况:
sudo passwd testuser
设置一个复杂的密码,例如 Complex@Password1。
现在尝试立即再次更改它:
sudo passwd testuser
尝试再次设置相同的密码。系统应该会由于历史策略而拒绝它。
尝试几次不同的密码,然后尝试重复使用之前的密码。你应该发现你无法重复使用你最近的 5 个密码中的任何一个。
这种密码历史机制通过防止密码重复使用来增加另一层安全性,而密码重复使用是一个常见的安全弱点。
在最后一步中,我们将学习如何将新的密码策略应用于现有用户并管理用户密码信息。
当你更改 /etc/login.defs 中的密码策略时,新设置仅适用于新创建的用户,或者当你手动更新现有用户时。让我们看看如何管理现有用户:
首先,检查用户帐户的当前状态:
sudo chage -l labex
这将显示当前用户的密码老化信息。
要强制用户在下次登录时更改密码:
sudo chage -d 0 testuser
这将上次密码更改日期设置为 0,强制在下次登录时更改密码。
要手动设置密码过期日期:
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 天。
你可以使用几个命令来检查用户的密码信息:
查看所有本地用户帐户:
cat /etc/passwd
检查特定用户的密码状态:
sudo passwd -S testuser
列出具有特定密码设置的用户:
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 中配置和实施强大的密码策略。你已经:
这些密码策略配置对于维护安全的 Linux 环境至关重要。通过实施强大的密码要求、定期密码轮换并防止密码重复使用,你已经显着提高了你的系统针对未经授权的访问和潜在入侵的安全性。
请记住,有效的密码策略只是一个全面的安全策略的一个方面。它们应该与其他安全措施相结合,例如定期系统更新、适当的用户管理和持续的安全监控。