如何强制 Linux 中的用户更改密码

本文涉及的产品
运维安全中心(堡垒机),免费版 6个月
简介: 【2月更文挑战第4天】

密码是Linux系统安全性的基石,对于系统管理员来说,确保用户密码的强度和定期更改是保护系统的关键步骤之一。在本文中,我们将深入探讨如何强制Linux中的用户更改密码,并详细介绍密码管理的重要性、目的和好处。

密码作为身份验证的一部分,是系统安全的第一道防线。一个强大的密码策略可以有效地防止未经授权的访问和恶意活动。过于简单或易猜的密码可能会导致系统易受攻击,因此密码的合理管理对于维护系统的安全至关重要。

强制用户更改密码的目的不仅仅是为了应对潜在的安全威胁,还有助于确保用户账户的长期安全性。定期更改密码有助于降低密码被破解的风险,即使密码在某个时刻被泄露,攻击者也会面临时间窗口的限制。

本文将详细介绍如何在Linux系统中实施强制用户更改密码的策略,涵盖了系统文件的配置、PAM模块的使用以及其他有关密码管理的最佳实践。让我们深入了解如何确保Linux系统中的密码安全性。

Linux 密码策略

在Linux系统中,密码策略主要由两个方面来控制:/etc/login.defs 文件和chage命令。

/etc/login.defs 文件是Linux系统中用于配置登录定义的文件,其中包含了各种与用户账户和密码有关的设置。我们主要关注两个参数:PASS_MAX_DAYSPASS_MIN_DAYS

  • PASS_MAX_DAYS:指定用户密码的最大有效天数。一旦超过这个天数,用户将被提示更改密码。

  • PASS_MIN_DAYS:指定用户更改密码之间的最小天数间隔。这有助于确保用户不会在短时间内频繁更改相似的密码。

示例 /etc/login.defs 文件片段:

PASS_MAX_DAYS   90
PASS_MIN_DAYS   7

上述示例设置了密码的最大有效天数为90天,最小天数间隔为7天。

chage 命令用于更改用户密码过期信息,它提供了一种在命令行上操作密码策略的方式。以下是一些常用的 chage 命令选项:

  • chage -M <max_days> <username>:设置用户密码的最大有效天数。

  • chage -m <min_days> <username>:设置用户更改密码之间的最小天数间隔。

示例:

chage -M 90 -m 7 username

上述示例将用户 username 的密码最大有效天数设置为90天,最小天数间隔设置为7天。

PAM (Pluggable Authentication Modules)

PAM(可插入认证模块)是一个用于管理系统身份验证的框架,在Linux中广泛应用于密码管理。

PAM 允许系统管理员通过配置模块堆栈来定义用户身份验证的方式。/etc/pam.d 目录中的配置文件定义了每个服务(如登录、密码更改等)所使用的 PAM 模块。

我们将专注于修改 /etc/pam.d/common-password 文件,该文件包含了涉及密码更改的PAM模块。

示例 /etc/pam.d/common-password 文件片段:

password requisite pam_pwquality.so retry=3
password requisite pam_unix.so remember=5 use_authtok
password required pam_deny.so

在上述示例中,我们使用了 pam_pwquality 模块来强制密码符合一定的质量要求,并且使用了 pam_unix 模块来设置密码的历史记录。retry=3 表示如果用户输入的密码不符合质量要求,他们有三次机会重新输入。

为了防止暴力破解,我们可以使用 pam_tally 模块来实现登录失败计数和锁定账户的功能。示例配置:

auth required pam_tally.so onerr=fail deny=3 unlock_time=600

上述配置表示,如果有3次登录失败,则拒绝登录,并且在失败后锁定账户600秒(10分钟)。

通过合理配置这些PAM模块,我们可以在用户尝试更改密码时增加额外的层级,提高系统的安全性。

使用密码策略工具

密码策略工具可以帮助我们更方便地实施和管理密码策略,其中一个常用的工具是 pwquality 库。该库提供了密码质量检查的功能,我们可以通过结合PAM模块来使用它。

pwquality 库提供了一个用于检查密码强度的库,并包括PAM模块 pam_pwquality。我们可以在PAM配置中使用该模块来强制用户使用强密码。

使用 pam_pwquality 模块,我们可以在 /etc/security/pwquality.conf 文件中配置密码质量要求,例如密码长度、字符类别等。

示例 /etc/security/pwquality.conf 文件片段:

minlen = 12
minclass = 3
maxrepeat = 3

上述配置要求密码长度至少为12个字符,包含至少3个字符类别,并且不能包含连续3个相同字符。

修改 /etc/pam.d/common-password 文件以使用 pam_pwquality 模块:

password requisite pam_pwquality.so retry=3
password requisite pam_unix.so remember=5 use_authtok
password required pam_deny.so

通过这样的配置,我们结合了 pam_pwqualitypam_unix 模块,使密码必须符合 pwquality 库中定义的要求。

设置密码过期提醒

在Linux系统中,我们可以使用 chage 命令设置密码过期提醒,以通知用户密码即将过期。这有助于用户及时更改密码,提高系统的安全性。

chage 命令提供了一种方便的方式来管理用户密码的过期信息。以下是一些常用的 chage 命令选项:

  • chage -l <username>:查看用户密码过期信息。

  • chage -M <max_days> <username>:设置用户密码的最大有效天数。

  • chage -m <min_days> <username>:设置用户更改密码之间的最小天数间隔。

  • chage -W <warn_days> <username>:设置用户密码过期提醒的天数。

示例:

chage -W 7 username

上述示例将用户 username 的密码过期提醒设置为7天。这意味着在距离密码过期前7天,用户将收到提醒。

为了定期检查密码过期提醒并通知用户,我们可以使用 cron 定时任务。创建一个脚本,该脚本检查所有用户的密码过期信息,并向即将过期的用户发送提醒。

示例 password_expire_notification.sh 脚本:

#!/bin/bash

for user in $(awk -F: '$7 != "/sbin/nologin" {print $1}' /etc/passwd); do
    days=$(chage -l $user | grep "Password expires" | cut -d: -f2)

    if [ "$days" -le 7 ]; then
        echo "Your password will expire in $days days. Please change it."
        # Add code to send notification to the user (e.g., via email)
    fi
done

通过将该脚本添加到 cron 定时任务中,可以定期执行并通知即将过期的用户。

强制用户更改密码的方法

在Linux系统中,有几种方法可以强制用户更改密码,以确保密码的定期更改。

passwd 命令是Linux中用于更改用户密码的标准命令。通过结合 passwd 命令和密码策略,我们可以强制用户更改密码。

passwd -e username

上述命令将用户 username 的密码设置为过期,用户下次登录时将被要求更改密码。这种方法对于单个用户比较方便。

chage 命令也是一个强大的工具,可以用于设置用户密码的过期信息。结合 chage 命令,我们可以更灵活地管理密码策略。

chage -d 0 username

上述命令将用户 username 的密码过期日期设置为0,这意味着用户下次登录时将被要求更改密码。这种方法也适用于单个用户。

在实际应用中,通常会根据系统需求选择使用 passwd 命令还是 chage 命令。

制定合适的密码政策

制定合适的密码政策对于维护系统的安全性至关重要。一个良好的密码策略应该考虑到密码的长度、复杂性、历史记录以及其他因素。以下是一些密码政策的最佳实践:

密码长度和复杂性

确保密码长度足够长以防范暴力破解攻击。通常,密码长度应至少为12个字符。此外,密码应包含不同的字符类别,包括大写字母、小写字母、数字和特殊字符。

minlen = 12
minclass = 3

上述示例中,minlen 设置密码最小长度为12个字符,minclass 设置密码中至少包含3个字符类别。

密码历史记录

密码历史记录是指系统会记住用户之前使用过的密码,以防止用户在短时间内频繁更改相似的密码。通过配置 pam_unix 模块,可以设置密码历史记录的长度。

password requisite pam_unix.so remember=5

上述示例中,密码历史记录被设置为记住最近的5个密码,确保用户不能轻易切换回之前使用过的密码。

临时锁定账户

为了应对暴力破解攻击,可以配置 pam_tally 模块,实现在一定失败尝试次数后暂时锁定用户账户。

auth required pam_tally.so onerr=fail deny=3 unlock_time=600

上述配置表示,在3次登录失败后,拒绝登录并锁定账户600秒(10分钟)。

通过综合运用这些配置,可以制定一套密码政策,既确保系统的安全性,又尽量减少用户的不便。

使用外部工具

除了Linux系统自带的工具和模块,我们还可以使用一些外部工具来增强密码管理的功能。这些工具通常提供了更多的灵活性和定制选项。

许多第三方工具通过提供PAM模块来集成到系统中,从而在用户密码管理方面提供额外的功能。例如,pam_google_authenticator 是一个与Google Authenticator集成的PAM模块,可以增加双因素认证的层级。

auth required pam_google_authenticator.so

上述配置会在用户登录时要求提供谷歌身份验证器生成的代码,以增加账户的安全性。

使用 Google Authenticator 进行强化身份验证

  1. 首先,安装 Google Authenticator:
sudo apt-get install libpam-google-authenticator
  1. 修改 /etc/pam.d/sshd,在文件末尾添加:
auth required pam_google_authenticator.so
  1. 修改 /etc/ssh/sshd_config,启用 ChallengeResponseAuthentication:
ChallengeResponseAuthentication yes
  1. 重启 SSH 服务:
sudo service ssh restart

此时,用户在登录时除了需要输入密码外,还需要提供谷歌身份验证器生成的验证码。

通过集成外部工具,我们可以根据系统需求选择适当的密码管理方式,以提高账户的安全性。

示例

在实际应用中,我们可以通过案例和场景演练来展示密码管理策略的有效性。

假设我们要确保系统中的新密码符合一定的质量要求。我们可以使用 pwquality 库和 pam_pwquality 模块来实现这一点。

  1. 安装 libpwquality 库:
sudo apt-get install libpwquality-tools libpam-pwquality
  1. 修改 /etc/security/pwquality.conf 文件:
minlen = 12
minclass = 3
  1. 修改 /etc/pam.d/common-password 文件:
password requisite pam_pwquality.so retry=3
password requisite pam_unix.so remember=5 use_authtok
password required pam_deny.so

通过这样的配置,系统将拒绝设置过于简单的密码,要求新密码符合一定的复杂性要求。

总结

本文深入介绍了在Linux系统中如何强制用户更改密码,旨在提高系统的安全性。我们从配置密码策略开始,涉及了/etc/login.defs 文件、chage 命令以及PAM模块的使用。随后,我们讨论了使用密码策略工具如pwquality 库和pam_pwquality 模块来增强密码安全性。

在PAM的探讨中,我们演示了如何使用 pam_tally 模块防止暴力破解攻击,并介绍了如何通过 chage 命令设置密码过期提醒。我们还探讨了如何通过不同方式强制用户更改密码,包括使用 passwd 命令和 chage 命令。

进一步,我们讨论了制定合适的密码政策的最佳实践,包括密码长度、复杂性、历史记录和临时锁定账户。我们还介绍了如何使用外部工具,例如 pam_google_authenticator 模块,来增强身份验证的层级。

通过实际案例和场景演练,我们验证了密码管理策略的有效性,并展示了如何使用不同工具和方法。最后,我们总结了安全最佳实践,强调了定期审查密码策略、检查PAM配置、监控登录活动、定期培训用户和使用多因素认证等关键点。

密码管理是系统安全的基石,有效的密码策略可以显著提高系统的安全性。系统管理员应该密切关注密码管理的最新发展,并根据实际需求调整密码策略,以确保系统的整体安全性。

目录
相关文章
|
1月前
|
安全 Linux 数据安全/隐私保护
Linux 忘记密码解决方法
Linux 忘记密码解决方法
35 2
Linux 忘记密码解决方法
|
30天前
|
Linux Shell 数据安全/隐私保护
Linux如何在服务器上进行密码的修改?
【10月更文挑战第6天】Linux如何在服务器上进行密码的修改?
49 1
|
1月前
|
Linux 数据安全/隐私保护 索引
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
linux inode索引节点使用率100% 解决+hustoj忘记密码+最新MDK注册方法
40 1
|
1月前
|
Ubuntu Linux Shell
Linux系统密码忘记
【10月更文挑战第2天】在Linux系统中,若忘记密码,可以通过单用户模式或使用Live CD/USB来重置。对于Ubuntu系统,可通过GRUB引导菜单进入单用户模式,利用命令行重置密码;或使用Live CD/USB启动并挂载硬盘分区后修改密码文件。CentOS系统同样支持单用户模式重置密码,也可借助安装介质进入救援模式,挂载文件系统后进行密码重置。这些方法均能在忘记密码的情况下帮助恢复系统访问。
|
2月前
|
安全 Linux 数据安全/隐私保护
Linux强制修改用户密码
【9月更文挑战第21天】在 Linux 系统中,可使用以下方法强制修改用户密码:1. 使用 `passwd` 命令,以 root 身份运行 `passwd username` 修改密码,加 `-f` 选项可跳过复杂度检查;2. 使用 `chpasswd` 命令,通过文本文件批量设置密码;3. 结合 `usermod -e 0 username` 和 `chpasswd` 强制用户下次登录时更改密码。注意操作时需确保安全性与合理性。
216 4
|
3月前
|
Linux Shell 数据安全/隐私保护
Linux用户账户管理精髓:创建、删除、密码与会话管理全攻略
本文档介绍了Linux系统中用户账户管理的关键操作,包括创建与删除用户、设置及修改密码、用户切换与会话管理等内容。通过理论说明与具体命令示例,如使用`useradd`、`userdel`、`passwd`和`su`等命令,帮助系统管理员更好地掌握这些基本技能,从而有效提升系统的安全性和管理效率。此外,还介绍了如何利用`screen`等工具进行会话管理,确保即便在网络中断的情况下也能维持会话的持续运行。
77 3
|
3月前
|
安全 关系型数据库 MySQL
在Linux中,如何重置 mysql root 密码?
在Linux中,如何重置 mysql root 密码?
|
4月前
|
关系型数据库 MySQL Linux
|
4月前
|
弹性计算 Linux 数据安全/隐私保护
云服务器 ECS产品使用问题之linux如何设置服务器密码
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
3月前
|
安全 Linux 数据安全/隐私保护
在Linux中,使用rsync服务模式时,如果指定了⼀个密码文件,那么这个密码文件的权限应该设置成多少才可以?
在Linux中,使用rsync服务模式时,如果指定了⼀个密码文件,那么这个密码文件的权限应该设置成多少才可以?
下一篇
无影云桌面