引言
密码安全是保护系统和数据免受未经授权访问的关键组成部分。弱密码或被泄露的密码是攻击者最常见的入口点之一。实施强大的密码策略是一项基础的安全实践。
在本实验中,你将学习如何在 Linux 系统上实施多项密码安全最佳实践。你将配置密码复杂度规则,设置多因素认证 (MFA),理解密码管理器的作用,强制执行密码轮换,并了解用户教育的重要性。
理解密码复杂度要求
在此步骤中,你将强制执行密码复杂度规则,以确保用户创建强密码。强密码通常包含大写字母、小写字母、数字和特殊字符的组合,并且长度足够。我们将使用 Pluggable Authentication Module (PAM) 的 pam_pwquality 来实现此目的。
首先,让我们安装 libpam-pwquality 包,它提供了必要的工具。
sudo apt-get install libpam-pwquality -y
现在,你需要配置 PAM 堆栈以在更改密码时使用此模块。我们将编辑 /etc/pam.d/common-password 文件。此文件包含密码管理的通用配置。
使用 nano 编辑器打开文件:
sudo nano /etc/pam.d/common-password
找到包含 pam_unix.so 的行,并在其上方添加以下行。这确保了质量检查在 pam_unix 模块实际更改密码之前发生。
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
让我们分解这些选项:
retry=3: 用户有 3 次机会输入符合要求的密码。minlen=12: 密码的最小长度为 12 个字符。ucredit=-1: 要求至少包含一个大写字母。lcredit=-1: 要求至少包含一个小写字母。dcredit=-1: 要求至少包含一个数字。ocredit=-1: 要求至少包含一个特殊(其他)字符。
你的文件应该与此类似(某些行可能有所不同):
## /etc/pam.d/common-password
...
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
password [success=1 default=ignore] pam_unix.so obscure sha512
...
按 Ctrl+X,然后按 Y,最后按 Enter 保存文件并退出 nano。
现在,让我们测试新策略。我们将尝试更改 labex 用户的密码。
passwd
首先,输入你当前的密码(由于 labex 没有设置密码,你可以直接按 Enter)。然后,尝试设置一个弱密码,例如 password。系统应该会拒绝它并显示错误消息,因为它不符合复杂度要求。
(current) UNIX password:
New password:
BAD PASSWORD: The password is shorter than 12 characters
Retype new password:
Sorry, passwords do not match.
passwd: Authentication token manipulation error
passwd: password unchanged
现在,尝试使用一个强密码,例如 Labex!P@ssw0rd。这个密码应该会被接受。
你已成功在系统上配置了密码复杂度要求。
实现多因素认证
在此步骤中,你将学习如何实现多因素认证 (MFA)。MFA 通过要求用户提供两个或多个验证因素来获取访问权限,从而增加了第二层安全保护。我们将使用 Google Authenticator PAM 模块来添加基于时间的一次性密码 (TOTP) 认证。
首先,安装 libpam-google-authenticator 包。
sudo apt-get install libpam-google-authenticator -y
接下来,你需要为你的用户生成 MFA 配置。以 labex 用户身份运行以下命令(不要使用 sudo)。
google-authenticator
该命令会问你一系列问题。为了本实验的目的,请按以下方式回答:
Do you want authentication tokens to be time-based (y/n): 按y然后按Enter。- 你将看到一个 QR 码、一个密钥和一个紧急备用码。在实际场景中,你会用手机上的认证器应用程序扫描 QR 码。在本实验中,我们将继续进行。
Do you want me to update your "/home/labex/.google_authenticator" file? (y/n): 按y然后按Enter。这将保存你的密钥。Do you want to disallow multiple uses of the same authentication token?: 按y然后按Enter。Do you want to increase the time-skew window?: 按n然后按Enter。Do you want to enable rate-limiting for the authentication module?: 按y然后按Enter。
这将会在你的主目录 (/home/labex) 中创建一个 .google_authenticator 文件。
现在,让我们配置 SSH 以使用此 MFA 令牌。首先,我们需要告知 PAM 在 SSH 会话中要求它。
打开 /etc/pam.d/sshd 文件:
sudo nano /etc/pam.d/sshd
在文件末尾添加以下行:
auth required pam_google_authenticator.so
保存并退出文件(Ctrl+X,Y,Enter)。
接下来,我们必须在 SSH 服务器配置中启用 challenge-response 认证。
打开 /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
找到 ChallengeResponseAuthentication no 这一行,并将其更改为 yes。如果该行被 # 注释掉了,请删除 #。
## /etc/ssh/sshd_config
...
ChallengeResponseAuthentication yes
...
保存并退出文件。在实际系统中,你需要重启 SSH 服务。然而,在这个容器化环境中,重启 sshd 等服务是不支持的。关键在于理解启用 SSH MFA 所需的配置步骤。
使用密码管理器
在此步骤中,我们将讨论密码管理器的重要性。在不同服务之间重复使用密码是一个重大的安全风险。如果一个服务被泄露,攻击者就可以利用泄露的密码访问你的其他账户。密码管理器可以帮助你为每个服务生成、存储和管理唯一且强大的密码。
KeePassXC 是一款流行的、开源的、免费的密码管理器,它将你的密码存储在一个安全的加密数据库中。虽然它是一个图形应用程序,但我们将安装它来理解这类工具是如何集成到用户工作流程中的。
让我们使用 apt-get 安装 KeePassXC。
sudo apt-get install keepassxc -y
安装完成后,你可以通过检查命令是否存在来验证它。
which keepassxc
你应该会看到以下输出,表明该应用程序已安装并在系统的路径中可用。
/usr/bin/keepassxc
在桌面环境中,你将启动 KeePassXC,创建一个带有强大主密码的新加密数据库,然后开始添加你各种网站和服务的登录凭据。该应用程序还可以为你自动生成非常强大的密码。关键原则是记住一个强大的主密码来解锁管理器,然后让管理器处理你所有其他的复杂密码。
定期轮换密码
在此步骤中,你将学习如何强制执行密码轮换,也称为密码老化。定期更改密码可以缩短可能窃取了密码的攻击者的机会窗口。
在 Linux 中,你可以在 /etc/login.defs 文件中设置系统范围的密码老化策略。你也可以使用 chage 命令为单个用户设置策略。我们将重点介绍 chage 命令。
首先,让我们查看 labex 用户的当前密码老化设置。
sudo chage -l labex
你将看到类似以下的输出,其中大多数值设置为 never。
Last password change : May 20, 2024
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
Maximum number of days between password change 设置为 99999,这实际上意味着密码永不过期。让我们将其更改为每 90 天强制更改一次密码。
使用带有 -M 选项的 chage 命令来设置最大有效期。
sudo chage -M 90 labex
现在,再次检查设置以确认更改。
sudo chage -l labex
输出现在应该显示最大天数为 90。Password expires 日期也将相应更新。
Last password change : May 20, 2024
Password expires : Aug 18, 2024
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
你已成功为用户配置了密码轮换策略。
对用户进行密码卫生教育
在此步骤中,我们将关注安全中的人为因素。技术控制至关重要,但当用户也实践良好的密码卫生时,它们的效果最佳。对用户进行安全最佳实践的教育是一项关键的非技术控制。
以下是一些良好的密码卫生要点:
- 不要重复使用密码: 为每个账户使用唯一的密码。
- 不要共享密码: 永远不要与任何人共享你的密码,包括 IT 人员。
- 警惕网络钓鱼: 对要求你提供登录凭据的电子邮件或消息保持警惕。
- 锁定屏幕: 离开电脑时务必锁定屏幕。
- 使用密码短语: 像
correct-horse-battery-staple这样长的密码短语比像J%7d*fQ!这样简短复杂的密码更安全且更容易记住。
为了模拟创建面向用户的策略文档,让我们在项目目录中创建一个简单的文本文件,其中概述了这些规则。
首先,使用 echo 命令和输出重定向 > 创建文件并添加第一条规则。
echo "1. Do not share your password with anyone." > ~/project/password_policy.txt
现在,让我们使用追加运算符 >> 将另外两条规则追加到文件中。
echo "2. Use a unique password for each service." >> ~/project/password_policy.txt
echo "3. Beware of phishing emails asking for credentials." >> ~/project/password_policy.txt
最后,使用 cat 命令显示新策略文档的内容。
cat ~/project/password_policy.txt
你应该会看到以下输出:
1. Do not share your password with anyone.
2. Use a unique password for each service.
3. Beware of phishing emails asking for credentials.
这个简单的练习演示了如何记录和共享安全策略。在实际组织中,这将成为更广泛的安全意识计划的一部分。
总结
在此次实验中,你已成功在 Linux 环境中实施了多项关键的密码安全最佳实践。结合技术控制和用户教育的多层方法,能为防止未经授权的访问提供最强大的防御。
你已学会如何:
- 通过配置
pam_pwquality的复杂性要求来强制执行强密码创建。 - 通过设置
pam_google_authenticator的多因素认证(Multi-Factor Authentication)来添加关键的第二层安全保护。 - 理解像 KeePassXC 这样的密码管理器在创建和存储唯一、强密码方面的作用。
- 使用
chage命令实施密码轮换策略,以限制泄露凭据带来的风险。 - 认识到用户教育和记录安全策略对于良好密码卫生的重要性。
通过应用这些实践,你可以显著提高你管理的任何系统的安全态势。


