实施密码安全最佳实践

Kali LinuxBeginner
立即练习

引言

密码安全是保护系统和数据免受未经授权访问的关键组成部分。弱密码或被泄露的密码是攻击者最常见的入口点之一。实施强大的密码策略是一项基础的安全实践。

在本实验中,你将学习如何在 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+XYEnter)。

接下来,我们必须在 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 命令实施密码轮换策略,以限制泄露凭据带来的风险。
  • 认识到用户教育和记录安全策略对于良好密码卫生的重要性。

通过应用这些实践,你可以显著提高你管理的任何系统的安全态势。