如何在 Linux 上强制用户更改密码

密码是账户安全的基石。我们将向您展示如何在 Linux 网络上重置密码、设置密码有效期以及强制更改密码。
密码已经存在了将近 60 年
自 1960 年代中期首次引入密码以来,我们一直在向计算机证明我们就是我们所说的那个人。需求是发明之母,麻省理工学院开发的兼容分时系统需要一种方法来识别系统上的不同人。它还需要防止人们看到彼此的文件。
Fernando J. Corbató 提出了一个方案,为每个人分配一个唯一的用户名。为了证明某人是他们所说的那个人,他们必须使用私人的个人密码来访问他们的帐户。
密码的问题在于它们就像钥匙一样操作。任何拥有密钥的人都可以使用它。如果有人发现、猜测或破解了您的密码,该人就可以访问您的帐户。在多因素身份验证普遍可用之前,密码是唯一将未经授权的人(威胁行为者,用网络安全术语来说)挡在您的系统之外的东西。
通过 Secure Shell (SSH) 建立的远程连接可以配置为使用 SSH 密钥而不是密码,这很棒。但是,这只是一种连接方式,不包括本地登录。
显然,密码管理至关重要,管理使用这些密码的人员也同样重要。
密码剖析
无论如何,什么使密码好?那么,一个好的密码应该具有以下所有属性:
- 猜测或弄清楚是不可能的。
- 您还没有在其他任何地方使用过它。
- 它没有涉及数据泄露。
Have I Been Pwned (HIBP) 网站包含超过 100 亿套泄露的凭据。数字如此之高,很可能是其他人使用了与您相同的密码。这意味着您的密码可能在数据库中,即使不是您的帐户遭到破坏。
如果您的密码在 HIBP 网站上,这意味着它在威胁参与者试图破解帐户时使用的蛮力和字典攻击工具的密码列表中。
真正随机的密码(如 4HW@HpJDBr%*Wt@#b~aP)实际上是无懈可击的,但是,当然,你永远不会记住它。我们强烈建议您为在线帐户使用密码管理器。它们为您的所有在线帐户生成复杂、随机的密码,您无需记住它们——密码管理器会为您提供正确的密码。
对于本地帐户,每个人都必须生成自己的密码。他们还需要知道什么是可接受的密码,什么不是。他们必须被告知不要在其他帐户上重复使用密码,等等。
此信息通常在组织的密码策略中。它指导人们使用最少数量的字符、混合大小写字母、包括符号和标点符号等。
然而,根据卡内基梅隆大学团队的一篇全新论文,所有这些技巧对密码的稳健性几乎没有任何帮助。研究人员发现,密码稳健性的两个关键因素是它们至少有 12 个字符长并且足够强。他们使用许多软件破解程序、统计技术和神经网络来测量密码强度。
一开始,最少 12 个字符可能听起来令人望而生畏。但是,不要考虑密码,而要考虑由标点符号分隔的三四个不相关单词组成的密码。
例如,Experte Password Checker 表示破解“chicago99”需要 42 分钟,但破解“chimney.purple.bag”需要 4000 亿年。它也易于记忆和打字,并且仅包含 18 个字符。
查看当前设置
在您更改与某个人的密码有关的任何事情之前,谨慎的做法是查看他们当前的设置。使用 passwd
命令,您可以使用其 -S
(状态)选项查看其当前设置。请注意,如果您正在使用其他人的密码设置,您还必须使用 sudo
和 passwd
。
我们键入以下内容:
sudo passwd -S mary

单行信息打印到终端窗口,如下所示。

您会在该简短回复中看到以下信息(从左到右):
- 此人的登录名。
- 此处显示以下三个可能指示器之一:
- P:表示该帐户具有有效的工作密码。
- L:表示该账户已被根账户的所有者锁定。
- NP:尚未设置密码。
设置最长密码期限
要设置密码重置期限,您可以使用带有天数的
-x
(最长天数)选项。-x
和数字之间没有空格,因此您可以按如下方式输入:sudo passwd -x45 mary
我们被告知到期值已更改,如下所示。
使用
-S
(状态)选项检查值现在是否为 45:sudo passwd -S mary
现在,45 天后,必须为此帐户设置新密码。提醒将在此之前 7 天开始。如果不及时设置新密码,该账号将立即被锁定。
强制立即更改密码
您还可以使用命令,以便您网络上的其他人在下次登录时必须更改密码。为此,您可以使用
-e
(过期)选项,如下所示:sudo passwd -e mary
然后我们被告知密码到期信息已更改。
让我们检查一下
-S
选项,看看发生了什么:sudo passwd -S mary
最后一次更改密码的日期设置为 1970 年的第一天。此人下次尝试登录时,他或她将不得不更改密码。在输入新密码之前,他们还必须提供当前密码。
您应该强制更改密码吗?
强迫人们定期更改密码曾经是常识。这是大多数安装的例行安全步骤之一,被认为是一种良好的商业实践。
现在的想法是截然相反的。在英国,国家网络安全中心强烈建议不要强制定期更新密码,美国国家标准与技术研究所也表示同意。两个组织都建议仅在您知道或怀疑其他人知道现有密码时才强制更改密码。
强迫人们更改密码变得单调,并鼓励使用弱密码。人们通常开始重复使用带有日期或其他标记的基本密码。或者,他们会把它们写下来,因为他们必须经常更改它们,以至于他们记不住了。
我们上面提到的两个组织推荐以下密码安全指南:
- 使用密码管理器:适用于在线和本地帐户。
- 启用双因素身份验证:只要有这个选项,就使用它。
- 使用强密码:对于那些无法使用密码管理器的帐户来说,这是一个极好的替代方案。用标点符号分隔的三个或更多单词是一个很好的模板。
- 切勿重复使用密码:避免使用与其他帐户相同的密码,绝对不要使用 Have I Been Pwned 中列出的密码。
上述提示将使您能够建立一种安全的方式来访问您的帐户。一旦制定了这些准则,请坚持使用。如果密码安全可靠,为什么还要更改密码?如果它落入坏人之手——或者您怀疑它落入了坏人之手——您可以更改它。
但是,有时候,这个决定不在您的手中。如果强制执行密码更改的权力,您没有太多选择。你可以申明你的情况并表明你的立场,但除非你是老板,否则你必须遵守公司政策。
chage 命令
您可以使用
chage
命令更改有关密码时效的设置。此命令得名于“改变老化”。这就像删除了密码创建元素的passwd
命令。-l
(列表)选项显示与passwd -S
命令相同的信息,但以更友好的方式显示。我们键入以下内容:
sudo chage -l eric
另一个巧妙的方法是您可以使用
-E
(到期)选项设置帐户到期日期。我们将传递一个日期(以年-月-日的格式)来设置 2020 年 11 月 30 日的到期日期。在该日期,该帐户将被锁定。我们键入以下内容:
sudo chage eric -E 2020-11-30
接下来,我们键入以下内容以确保此更改已完成:
sudo chage -l eric
我们看到帐户到期日期已从“永不”更改为 2020 年 11 月 30 日。
要设置密码有效期,您可以使用
-M
(最长天数)选项,以及密码在必须更改之前可以使用的最长天数。我们键入以下内容:
sudo chage -M 45 mary
我们使用
-l
(列表)选项键入以下内容,以查看命令的效果:sudo chage -l mary
密码到期日期现在设置为自我们设置之日起 45 天,如图所示,即 2020 年 12 月 8 日。
为网络上的每个人更改密码
创建帐户时,一组默认值用于密码。您可以定义最短天数、最长天数和警告天数的默认值。然后将它们保存在名为“/etc/login.defs”的文件中。
您可以键入以下内容以在
gedit
中打开此文件:sudo gedit /etc/login.defs
滚动到密码时效控件。
您可以编辑这些以满足您的要求,保存您的更改,然后关闭编辑器。下次您创建用户帐户时,将应用这些默认值。
如果您想更改现有用户帐户的所有密码到期日期,您可以使用脚本轻松完成。只需键入以下内容即可打开
gedit
编辑器并创建一个名为“password-date.sh”的文件:sudo gedit password-date.sh
接下来,将以下文本复制到您的编辑器中,保存文件,然后关闭
gedit
:#!/bin/bash reset_days=28 for username in $(ls /home) do sudo chage $username -M $reset_days echo $username password expiry changed to $reset_days done
这会将每个用户帐户的最大天数更改为 28,从而更改密码重设频率。您可以调整
reset_days
变量的值以适应。首先,我们键入以下内容以使我们的脚本可执行:
chmod +x password-date.sh
现在,我们可以输入以下内容来运行我们的脚本:
sudo ./password-date.sh
然后处理每个帐户,如下所示。
我们输入以下内容来检查“mary”的帐户:
sudo change -l mary
最大天数已设置为 28,我们被告知将在 2020 年 11 月 21 日。您还可以轻松修改脚本并添加更多
chage
或passwd
命令。密码管理是必须认真对待的事情。现在,您拥有了控制所需的工具。