如何强制Linux用户在下次登录时更改密码?

密码是计算机安全的基石,对于Linux系统而言,用户密码的管理至关重要。定期更改密码是一种有效的安全实践,可以降低未经授权访问的风险。本文将介绍如何强制Linux用户在下次登录时更改密码,并详细讨论相关的配置和工具。

密码是保护用户账户不受未经授权访问的第一道防线。强密码可以有效抵御恶意入侵者的尝试,保障系统的安全。然而,即使密码很强大,长时间不更改也可能导致潜在的安全风险。定期更改密码有助于防止密码被猜测、泄露或滥用。

定期更改密码的必要性

  1. 防范密码猜测攻击: 定期更改密码可以减少密码猜测攻击的成功率,因为即使攻击者获取了一次有效密码,其有效期有限。

  2. 应对密码泄露: 在出现密码泄露事件时,定期更改密码可以迅速减少被滥用的风险。即使密码泄露,攻击者在短时间内也难以继续利用密码。

  3. 提高密码复杂性: 定期更改密码也是用户采用更强大密码的机会,因为他们可能倾向于选择更为复杂和安全的密码,以满足新的密码策略。

在接下来的部分,我们将深入探讨如何在Linux系统上配置密码策略,以强制用户在下次登录时更改密码。

Linux用户密码管理概述

在Linux系统中,用户账户的密码信息存储在 /etc/passwd/etc/shadow 文件中。其中,/etc/passwd 文件包含用户的基本信息,而 /etc/shadow 文件包含用户的加密密码以及与密码相关的设置。

/etc/passwd 文件

/etc/passwd 文件包含系统上所有用户的基本信息,但实际上并不包含密码。一个典型的 /etc/passwd 文件的行看起来像这样:

username:x:UID:GID:comment:home_directory:login_shell
  • username: 用户名
  • x: 密码字段占位符,实际的密码信息存储在 /etc/shadow 文件中
  • UID: 用户标识号
  • GID: 组标识号
  • comment: 注释,通常包含用户的全名或其他描述
  • home_directory: 用户的主目录路径
  • login_shell: 用户登录时使用的shell

/etc/shadow 文件

/etc/shadow 文件存储了用户密码的加密形式以及与密码相关的策略信息。一个典型的 /etc/shadow 文件的行看起来像这样:

username:$6$rounds=10000$salt$encrypted_password:last_password_change:min_days:max_days:warn_days:inactive_days:expire_date
  • username: 用户名
  • 6 6 6rounds=10000 s a l t salt saltencrypted_password: 加密后的密码信息
  • last_password_change: 上次密码更改的日期(从1970年1月1日以来的天数)
  • min_days: 设置用户更改密码之间的最小天数
  • max_days: 设置密码的最大有效天数
  • warn_days: 在密码过期前的多少天提醒用户
  • inactive_days: 密码过期后,用户账户变为不活动状态前的天数
  • expire_date: 密码的绝对过期日期

配置密码过期策略

Linux系统通过 chage 命令来配置用户密码的过期策略。通过 chage 命令,你可以设置密码的最长有效期、最短有效期以及其他相关的策略。

使用 chage 命令

sudo chage [options] username

其中,username 是要配置密码策略的用户账户名称。

示例:设置密码最长有效期和最短有效期

1. 设置密码最长有效期
sudo chage -M 90 username

这个命令将设置用户密码的最长有效期为90天。用户在这个期限内必须更改密码,否则系统将要求其在下次登录时更改密码。

2. 设置密码最短有效期
sudo chage -m 7 username

这个命令将设置用户密码的最短有效期为7天。用户在这个期限内不得更改密码,以确保密码不被频繁更改。

使用PAM模块实现密码策略

PAM(Pluggable Authentication Modules)是一种灵活的身份验证系统,可以通过配置文件来控制用户身份验证的方式。通过编辑PAM配置文件,我们可以实现更精细的密码复杂性要求。

介绍PAM模块

PAM模块允许管理员定义在用户登录、更改密码等操作时执行的任务。在密码管理方面,我们关注的是 pam_pwquality 模块。

编辑 /etc/security/pwquality.conf 文件

  1. 打开 /etc/security/pwquality.conf 文件:
sudo nano /etc/security/pwquality.conf
  1. 在文件中添加密码复杂性要求,例如:
minclass = 4
minlen = 12

上述配置要求密码至少包含4个字符类别(大写字母、小写字母、数字、特殊字符),并且密码长度至少为12个字符。

  1. 保存并关闭文件。

示例:要求包含大写字母、小写字母、数字和特殊字符

sudo nano /etc/security/pwquality.conf

在文件中添加以下内容:

minclass = 4
minlen = 12

这将强制用户创建包含大写字母、小写字母、数字和特殊字符的密码。这样的密码更加复杂,更难以被猜测或破解。

设置强制密码更改通知

为了确保用户能够及时更改密码,我们可以使用 chage 命令设置密码过期提醒。这样,用户在密码即将过期时会收到通知,从而及时采取行动。

使用 chage 命令设置密码过期提醒

sudo chage -W 7 username

这个命令将设置用户在密码过期前7天收到提醒。你可以根据实际需求调整提醒的天数。

示例:提前几天通知用户密码即将过期

sudo chage -W 14 username

这个命令将设置用户在密码过期前14天收到提醒。通过提前通知用户,可以确保他们有足够的时间来更改密码,避免因密码过期而被锁定或无法正常登录。

批量更改用户密码

有时,管理员可能需要批量更改系统上的用户密码,例如,强制所有用户在某个时刻更改密码。我们可以使用 chpasswd 命令来实现这一目标。

使用 chpasswd 命令批量更改用户密码

echo 'username:password' | sudo chpasswd

这个命令通过管道传递用户名和密码,从而实现批量更改密码的目的。

示例:从文件中读取用户名和新密码进行批量更改

  1. 创建包含用户名和新密码的文件(例如,user_passwords.txt):
user1:new_password1
user2:new_password2
user3:new_password3
  1. 使用以下命令批量更改用户密码:
sudo chpasswd < user_passwords.txt

自动化密码更改

通过脚本自动化密码更改过程可以提高系统管理的效率。你可以使用Shell脚本或其他编程语言的脚本来实现这一目标。以下是一个简单的Shell脚本示例:

编写Shell脚本

  1. 创建一个新的Shell脚本文件(例如,change_passwords.sh):
#!/bin/bash

while IFS=: read -r username password; do
    echo "$username:$password" | sudo chpasswd
done < user_passwords.txt
  1. 保存并关闭文件。

  2. 赋予脚本执行权限:

chmod +x change_passwords.sh
  1. 运行脚本:
./change_passwords.sh

该脚本将从 user_passwords.txt 文件中读取用户名和新密码,然后使用 chpasswd 命令批量更改用户密码。

示例:定期执行脚本实现自动密码更新

你可以使用cron定时任务来定期执行上述脚本,实现自动化密码更改。编辑cron表,添加以下行:

0 0 * * * /path/to/change_passwords.sh

上述cron表达式表示在每天的午夜(0时0分)执行脚本。你可以根据需要调整cron表达式。

安全审计与日志

为了保持对密码更改活动的监控,系统管理员可以利用系统日志工具进行安全审计。在Linux系统中,通常会使用 auth.log 或其他系统日志来记录与身份验证相关的事件。

监控密码更改活动的日志

  1. 打开 auth.log 或其他系统日志文件:
sudo nano /var/log/auth.log
  1. 使用工具(例如,grep)筛选与密码更改相关的日志:
grep "password change" /var/log/auth.log

通过分析日志,你可以了解系统上用户密码更改的详细信息,包括时间、用户和执行更改的方式。

示例:审计日志中的密码更改活动

sudo nano /var/log/auth.log

通过查找包含关键词 “password change” 的日志条目,你可以审计密码更改活动并检查是否有异常或不寻常的行为。

通过定期审计日志,系统管理员可以及时发现潜在的安全问题,并采取适当的措施。

总结

本文介绍了如何强制Linux用户在下次登录时更改密码,并详细讨论了密码管理的各个方面。通过配置密码过期策略、使用PAM模块增加密码复杂性要求、设置强制密码更改通知、批量更改用户密码以及自动化密码更改过程,管理员可以提高系统的安全性,降低密码被滥用的风险。


相关文章

  • 如何进行 Nginx HTTPS服务器搭建

    通过本文的介绍,我们详细了解了Nginx的listen指令,它用于配置服务器监听的端口和IP地址。我们学习了基本的语法结构、常见的示例和一些可选的参数。这些知识将帮助您更好地配置Nginx服务器,以满足您的需求。

  • 如何在 Nginx 中进行速率限制?

    http {server {# 其他配置...在这个例子中,当请求超过速率限制时,通过error_page指令将 503 错误映射到页面。这使得可以为用户提供更友好的自定义页面,以解释为什么请求被拒绝。在本文中,我们详细介绍了在 Nginx 中进行速率限制的方法。我们从基础开始,讨论了模块的使用以及指令的配置。随后,我们深入探讨了不同的速率限制策略,包括按 IP 进行限制、限制特定 URI 或请求类型,以及设定速率限制的阈值。在高级策略方面,我们讨论了如何使用。

  • 如何在 Linux 中安装 Fish Shell(带 Starship)?

    Fish Shell是一款现代的、用户友好的命令行 Shell,设计初衷是提供更好的用户体验和强大的功能。它采用友好的语法和强大的自动补全功能,使得命令行操作更加轻松愉快。Starship是一款轻量级的、快速的命令行提示符,它为Shell提供了一个漂亮、高度可定制的提示符。Starship的设计理念是简洁、高效,同时允许用户自由定制外观和显示的信息。Fish Shell允许你创建自定义提示符,包括颜色、图标、以及显示的信息。修改# 自定义提示符end。

  • 如何在 Ubuntu 22.04 上安装 Consul 服务器?

    通过这篇文章,你已经学会了在 Ubuntu 22.04 上安装 Consul 服务器的详细步骤,包括配置集群、服务发现、健康检查、安全性特性等方面。同时,你还了解了如何维护 Consul 和进行故障排除,以及一些进阶主题。Consul 是一个功能强大的工具,适用于构建可靠的微服务架构,希望这篇文章对你有帮助。

  • WebSocket原理详解

    我们知道TCP连接的两端,同一时间里双方都可以主动向对方发送数据。这就是所谓的全双工。而现在使用最广泛的HTTP1.1,也是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,这就是所谓的半双工。也就是说,好好的全双工TCP,被HTTP用成了半双工。为什么?这是由于HTTP协议设计之初,考虑的是看看网页文本的场景,能做到客户端发起请求再由服务器响应,就够了,根本就没考虑网页游戏这种,客户端和服务器之间都要互相主动发大量数据的场景。所以为了更好的支持这样的场景,我们需要另外一个。

  • 【Linux】信号保存与信号捕捉处理

    介绍信号的保存,理解信号在操作系统中的保存方式,理解系统中信号捕捉的处理过程以及介绍信号的其它知识!

  • Makefile 和 Bash 脚本之间区别和联系

    在 Makefile 中可以调 Bash 脚本,或在 Makefile 中直接写入 Bash 命令。这使得在构建过程中执行更复杂的任务成为可能。Makefile和Bash脚本由于它们的设计目标和用途不同,它们在基本结构、命令执行、通配符使用、错误处理等方面存在显著的差异。了解这些差异对于正确编写和理解Makefile和Bash脚本至关重要。Makefile主要用于编译和构建软件项目,而Bash脚本则更广泛地应用于系统管理和自动化任务。在实际工作中,两者可以结合使用,以创建一个完整、自动化的构建和部署。

  • DockerUI如何部署结合内网穿透实现公网环境管理本地docker容器

    DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基于容器安装方式,部署方便高效,浏览和维护docker单节点或集群节点worker和manager。DockerUI具有易于使用的界面。它不需要记住 docker 指令。只需下载镜像即可立即加入并完成部署。使用DockerUI并结合cpolar内网穿透可以更加轻松的管理docker和swarm,实现后台公网访问并管理,视觉性更加直观,后台开发更加便利。

  • 【Linux】linux自动化构建工具make/makefile

    是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。当对文件的内容做修改时,该文件的Modify和Change的时间都会被修改,所以当改变文件的属性时,修改时间发生了变化,再次make时,会比源文件的最近修改时间新。这里的mytest-d表示的是目标文件,test.c表示的是要编译的源文件,第二行则是编译指令。是一个命令,用来执行makefile里面编写的编译命令。

  • 解决VSCode使用Remote SSH连接远程服务器免密登陆

    这样我们就可以不必在文件夹中跳转一次次的重新输入密码了。真是美滋滋。过去日记。

  • 如何在 Linux 命令行中检查 CPU 使用率

    使用top来实时查看系统资源的使用情况,特别是 CPU 和内存的使用率。使用sar定期收集系统性能数据,以便后续分析历史性能趋势。使用mpstat来监控多核 CPU 的使用率,了解每个核心的性能状况。使用perf进行更深入的性能分析,包括函数调用图、指令和缓存的分析等。使用strace跟踪系统调用,解决程序执行中的异常情况。使用topvmstat和sar进行实时和历史性能监控,以便了解系统整体的健康状况。使用mpstatperf和strace进行更深入的 CPU 使用率分析,找出潜在的性能瓶颈。

  • 同样都是光纤接入设备,OLT和ONT到底有啥区别?

    你好,这里是网络技术联盟站,我是瑞哥。光纤通信系统在现代通信网络中扮演着至关重要的角色。为了实现高效、快速的光纤接入,OLT(Optical Line Terminal)和ONT(Optical Network Terminal)这两种关键设备发挥着不可替代的作用。本文将深入研究OLT和ONT之间的主要区别,解释它们各自的功能、硬件特点、通信协议以及应用场景。

  • 【Docker】linux、nginx、容器镜像三者基本概念

    由于在工作中接触到的都是windows操作系统,服务器也是,所以对于linux系统就比较陌生。对于windows操作系统,web服务器一般都是使用IIS。那对于linux系统,web服务器一般使用的是nginx。不同操作系统,web服务器自然不一样,但是目的都是一样的,都是为了渲染和呈现网站内容。因此,基本概念还是要了解一下。

  • 服务器与普通电脑的区别,普通电脑可以当作服务器用吗?

    服务器在我们日常应用中非常常见,手机APP、手机游戏、PC游戏、小程序、网站等等都需要部署在服务器上,为我们提供各种计算、应用服务。服务器也是计算机的一种,虽然内部结构相差不大,但是服务器的运行速度更快、负载更高、成本更高。服务器与普通电脑主要有哪些区别,让我们来看下吧!

  • git提交代码到远端仓库的方法详解

    自己学习到的git关联远端仓库的方法,希望可以帮到大家。

  • 高清网络视频监控系统技术方案

    随着数字技术、计算机技术和网络技术的发展,基于互联网的各种业务呈几何指数规律飞速增长,远程视频监控作为基于互联网的一种全新业务也得到了飞速的发展。高清网络摄像机IPC,高清硬盘录像机NVR/DVR等设备得到很大的发展。

  • 什么是BGP路由属性?BGP13条选路规则你还记得吗?

    BGP路由属性是一组参数,用于进一步描述特定路由的属性。这些属性的存在使得BGP能够根据网络的需求对路由进行精细的控制。在BGP的路由更新消息中,这些属性提供了丰富的信息,从而让网络管理员能够实施各种策略,例如负载均衡、路径选择和拓扑优化。公认必须遵循公认可选可选过渡可选非过渡BGP路由属性作为BGP协议的核心组成部分,在互联网路由中扮演着关键的角色。本文详细探讨了BGP路由属性的分类和功能,以及它们在网络设计和优化中的重要性。公认必须遵循属性。

  • IntelliJ IDEA如何使用固定地址公网远程访问本地Mysql数据库

    IDEA作为Java开发最主力的工具,在开发过程中需要经常用到数据库,如Mysql数据库,但是在IDEA中只能连接本地数据库,有时候需要访问其他地方如家里或者公司的数据库,将无法访问,内网的局限性导致我们只能在同一网络访问,无法跨网络访问,所以,本例将介绍如何在异地也可以实现远程连接本地的数据库,这里我们需要用到一个工具,叫Cpolar.隧道创建成功后,点击左侧的状态——在线隧道列表,查看所生成的公网TCP协议的地址,该地址就是公网地址,我们可以在任何设备中的IDEA中都可以访问。

  • Inis博客系统本地部署结合内网穿透实现远程访问本地站点

    互联网技术总在不断进步,新技术和新软件也会来带更多功能,就以最常见的个人博客系统,也在不断推陈出新,发掘出更多功能和特色。从早期少量自定义和编辑功能,发展到现在的支持各种自定义模块和外观,以及更多更全的支持软件适配(包括php程序、数据库程序等)。今天,笔者就为大家介绍,如何在Ubuntu系统上部署新版Inis博客系统,并使用cpolar创建的内网穿透数据隧道,将Inis博客网站发布到公共互联网上。

  • 千兆网口、2.5G端口、5G端口有啥区别?如何选择?

    通过本文对千兆以太网、2.5G 以太网和5G 以太网的详细介绍,我们深入了解了它们的技术原理、优势、局限性以及在不同行业和应用场景中的应用。千兆以太网适用于一般用途,而2.5G网口和5G网口则更适用于对速度和性能有更高要求的专业场景。在做决策时,始终确保您的选择符合当前需求,并具备未来的可扩展性。

  • 文件传输协议:FTP、TFTP、SFTP和SCP

    你好,这里是网络技术联盟站。文件传输协议在计算机网络中扮演着关键的角色,为用户提供了在网络上共享和传输文件的标准化方式。本文将深入介绍四种常见的文件传输协议:FTP、TFTP、SFTP和SCP,探讨它们的工作原理、特点以及在不同场景下的应用。

  • 2024年了,Fedora和Ubuntu,哪个更适合工程师使用?

    在Fedora与Ubuntu的比较中,我们深入探讨了它们在安装和配置、桌面环境、软件包管理、系统更新与稳定性、社区支持、性能、安全性、容器化支持、桌面用户体验、开发者工具、虚拟化支持、硬件兼容性、多版本支持、跨平台支持等方面的差异。最终,选择Fedora还是Ubuntu取决于您的个人需求和偏好。如果您是一个追求最新技术和功能的开发者,喜欢滚动更新的模式,那么Fedora可能更适合您。如果您更注重系统的稳定性,希望在长期内获得支持,并且对桌面和服务器环境都有需求,那么Ubuntu可能更符合您的期望。

  • 计算机网络中,距离矢量协议和链路状态协议到底有啥区别?

    距离矢量协议和链路状态协议都在不同的情境下展现出各自的优势和劣势。在选择使用哪种协议时,需要考虑网络的规模、带宽利用率、安全性需求等因素。对于小型网络或对带宽敏感的场景,距离矢量协议可能更为合适。而在大型网络、需要更好安全性和更快收敛速度的情况下,链路状态协议可能更具优势。在实际应用中,有时候也会采用混合使用这两种协议的方式,以充分发挥它们各自的优势,提高网络的性能和可靠性。这使得在不同的网络环境中选择合适的路由协议成为一个复杂而重要的决策。境中的优劣势。

  • SCCP 和 MTP3 之间有啥区别?

    通过详细介绍 SCCP 和 MTP3,以及它们之间的比较和协同工作,我们深入了解了它们在信令传输协议栈中的角色和功能。在设计和管理电信网络时,对 SCCP 和 MTP3 的理解是至关重要的,因为它们直接影响信令的可靠性、灵活性和性能。这样的理解有助于工程师和网络管理员更好地优化网络配置,确保通信系统的稳定运行。

  • 什么是虚拟路由器?与传统物理路由器有啥区别?

    虚拟路由器(Virtual Router)是一种软件功能,它在x86服务器硬件上以虚拟机实例的形式部署,提供基于云的网络服务。运行在虚拟化平台上的虚拟路由器承担着多种功能,包括路由、交换、安全和VPN等。通过这种虚拟化的方式,用户可以在云环境中便捷地配置和管理网络,实现高度灵活性和可定制性,为用户提供了强大的网络通信服务。虚拟机技术是虚拟路由器中常用的虚拟化手段之一。通过使用虚拟机管理程序(如VMware、KVM等),虚拟路由器可以在一台物理服务器上同时运行多个虚拟实例。

  • 网络安全之道:DMZ与端口转发有啥区别?

    通过本文的介绍,我们深入了解了DMZ和端口转发这两个网络安全和应用配置中的重要概念。DMZ在网络中扮演了重要的缓冲带角色,既确保了对外服务的可用性,又有效地隔离了来自外部的潜在威胁。端口转发通过设置网络设备的规则,将外部网络的请求定向到内部网络的特定主机或服务。这一技术为远程访问、个人服务器搭建等提供了便利。结合DMZ和端口转发,可以实现更灵活的网络架构。DMZ中部署公共服务,通过端口转发映射外部请求,不仅提高了网络的可用性,也增强了网络的安全性。

  • 一文带你全方位了解 Shell 脚本,给力!

    使用等号(=)给变量赋值,并通过美元符号($)引用变量的值。# 变量的定义和使用通过本文的学习,您已经了解了如何为 Linux 命令创建脚本的基础知识和高级技巧。Shell 脚本是一种强大的工具,通过结合 Linux 命令和脚本编程,您可以实现自动化任务、系统管理以及日志分析等各种功能。深入学习和实践将使您成为一个熟练的脚本程序员,能够更高效地处理各种任务。