Linux 运维中怎么配置 PAM 模块在用户密码即将到期前 7 天每次登录弹窗警告

梦辰君_9106

梦辰君_9106

2026-09-28

893人浏览

原创

linux终端“弹窗警告”实为登录时强制显示的高亮提示,需通过chage设置密码警告期、pam pam_exec.so执行检查脚本、shell启动时二次横幅三步实现,确保ssh与tty均生效且不可跳过。

linux 运维中怎么配置 pam 模块在用户密码即将到期前 7 天每次登录弹窗警告

Linux 没有原生“弹窗”机制,终端环境下所谓“弹窗警告”实际是指在每次成功登录后、Shell 启动前,强制输出一行或多行高亮、不可跳过、语义明确的提醒信息。这种提示必须在用户看到命令行之前就出现,且对 SSH 和本地 TTY 登录均生效。

以下配置可实现:密码到期前 7 天内,每次交互式登录(SSH 或 console)都显示醒目警告,并附带操作指引。


✅ 确保密码警告期已正确设置

这是所有提醒的前提。系统只会在 chage -W 设置的天数内触发原生提示逻辑。

  • 对指定用户设置提前 7 天警告:
    sudo chage -W 7 username
  • 验证是否生效:
    sudo chage -l username | grep -E "(Password expires|Password warning period)"

    输出应类似:

    Password expires : Oct 12, 2026
    Password warning period : 7 days

⚠️ 若为新用户,还需检查 /etc/login.defs 中 PASS_WARN_AGE 7 是否已设,否则新建账户默认无警告。


✅ 用 PAM pam_exec.so 插入强提醒脚本(推荐,通用性强)

pam_echo.so 虽简洁,但部分发行版(如较新 Ubuntu/Debian)未预装 libpam-echo;而 pam_exec.so 是标准模块,兼容性更好。

  • 编辑登录服务的 PAM 配置:

    linux-sysadmin
    linux-sysadmin

    Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...

    下载
    • SSH 登录:sudo nano /etc/pam.d/sshd
    • 本地终端(Ctrl+Alt+F1~F6):sudo nano /etc/pam.d/login
  • 在文件末尾添加一行(注意是 session optional,非 auth 或 password):

    session optional pam_exec.so stdout /usr/local/bin/passwd-expiry-notice.sh
  • 创建脚本 /usr/local/bin/passwd-expiry-notice.sh:

    #!/bin/bash
    # 获取当前用户密码到期剩余天数
    expiry_line=$(chage -l "$PAM_USER" 2>/dev/null | grep "Password expires")
    if [[ -z "$expiry_line" ]] || echo "$expiry_line" | grep -q "never\|never"; then
        exit 0
    fi
    
    # 提取数字天数(如 "in 3 days" → 3)
    remaining=$(echo "$expiry_line" | sed -n 's/.*in \([0-9]\+\) days.*/\1/p')
    if [[ "$remaining" =~ ^[0-9]+$ ]] && [ "$remaining" -le 7 ] && [ "$remaining" -gt 0 ]; then
        echo ""
        echo -e "\033[1;33m⚠️  WARNING: Your password expires in ${remaining} day(s)!\033[0m"
        echo -e "\033[1;32m→ Please run \033[1;37m'passwd'\033[1;32m now to update it.\033[0m"
        echo ""
    fi
  • 赋予执行权限:

    sudo chmod +x /usr/local/bin/passwd-expiry-notice.sh

✅ 效果:每次登录成功后立即显示黄底黑字警告,含 emoji 和颜色,视觉突出;不依赖用户 Shell,无法被 .bashrc 跳过。


✅ 补充:Shell 启动时二次强化(可选,增强感知)

对已登录但尚未改密的用户,在首次执行命令前再刷一次横幅:

  • 编辑全局 Bash 启动文件(影响所有用户):
    sudo nano /etc/bash.bashrc
  • 在末尾追加:
    # 密码临期横幅(仅对未过期但 ≤7 天的用户)
    if [ -z "$PASSWD_NOTICE_SHOWN" ]; then
        if chage -l "$USER" 2>/dev/null | awk -F': ' '/Password expires/ {gsub(/^[ \t]+|[ \t]+$/, "", $2); if ($2 ~ /^[0-9]+ days$/) print "yes"}' >/dev/null; then
            remaining=$(chage -l "$USER" 2>/dev/null | awk -F': ' '/Password expires/ {print $2}' | awk '{print $1}')
            if [[ "$remaining" =~ ^[0-9]+$ ]] && [ "$remaining" -le 7 ] && [ "$remaining" -gt 0 ]; then
                echo -e "\033[1;41;97m ? PASSWORD EXPIRES IN ${remaining} DAY(S) — RUN 'passwd' NOW! \033[0m"
                export PASSWD_NOTICE_SHOWN=1
            fi
        fi
    fi

✅ 此处使用红色背景白字横幅,比普通提示更抓眼球,且仅在首次 Shell 启动时显示一次。


❌ 不推荐的方式

  • 仅靠 chage -W + 默认 PAM 提示:文字太弱,常被启动日志淹没;
  • 依赖 .bashrc 单独判断:若用户用 zsh、fish 或 ssh cmd 绕过 Shell,即失效;
  • 使用图形弹窗(如 zenity):SSH 登录无 DISPLAY,本地 TTY 也无 X server,必然失败。

以上三步组合(基础策略 + PAM 脚本 + Shell 横幅),能在纯终端环境达成真正“强提醒”效果:稳定触发、视觉突出、操作明确、难以忽略。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3710

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3213

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2293

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5530

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5182

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3073

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2585

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2799

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习