如何实现Linux用户密码过期通知 提前告警设置方法

1.配置密码策略,2.编写告警脚本,3.配置定时任务。实现linux用户密码过期提前告警的核心步骤包括:首先使用chage命令设置密码最长有效期和警告天数,例如sudo chage -m 90 -w 14 testuser;其次编写脚本遍历系统用户,解析chage输出获取过期信息,计算剩余天数并在警告期内发送邮件通知;最后通过crontab配置定时任务,如每天早上9点执行脚本,确保自动化运行。

如何实现Linux用户密码过期通知 提前告警设置方法

在Linux系统里,确保用户密码不会突然过期导致无法登录,提前进行告警至关重要。这通常通过结合系统自带的密码策略工具 chage 和一个自定义的自动化脚本来实现,脚本会定期检查用户密码有效期,并在临近过期时发送通知。

如何实现Linux用户密码过期通知 提前告警设置方法

实现Linux用户密码过期提前告警,核心在于三个步骤:配置密码策略,编写一个能识别过期风险并发送通知的脚本,然后利用 cron 定时执行这个脚本。

配置用户密码过期策略chage 命令是Linux系统管理用户密码过期策略的利器。我们可以用它来设定密码的最大有效期、最小有效期以及提前多少天开始警告。

如何实现Linux用户密码过期通知 提前告警设置方法

例如,给用户 testuser 设置密码最长有效期为90天,并在过期前14天开始警告:sudo chage -M 90 -W 14 testuser

这里:

如何实现Linux用户密码过期通知 提前告警设置方法-M 90:表示密码最长有效期为90天。-W 14:表示在密码过期前14天开始警告用户。

你可以通过 chage -l testuser 查看当前用户的密码策略信息,比如上次修改时间、过期日期、警告天数等。这些信息是后续脚本判断的基础。

编写密码过期告警脚本这个脚本需要遍历系统中的所有用户(或者你希望监控的用户),获取他们的密码过期信息,计算剩余天数,然后判断是否在警告期内,如果是,就发送邮件通知。

一个基本的思路是:

获取所有用户的列表。对每个用户,运行 chage -l 获取其密码信息。解析 chage 的输出,提取“密码过期日期”和“警告天数”。计算当前日期到过期日期的剩余天数。如果剩余天数小于或等于警告天数,就发送邮件。

配置定时任务(Cron)为了让脚本自动运行,我们需要把它添加到 cron 定时任务中。通常,每天执行一次是比较合理的频率。

比如,你可以编辑root用户的 crontabsudo crontab -e

然后添加一行:0 9 * * * /path/to/your_password_check_script.sh > /dev/null 2>&1

这表示每天早上9点执行你的脚本。> /dev/null 2>&1 是为了避免脚本输出信息污染日志或发送不必要的邮件。

为什么需要提前告警?

说实话,谁没遇到过因为密码过期被系统锁在门外的情况?那种感觉,就像钥匙突然失效了,手足无措。提前告警,不仅仅是避免这种尴尬。从安全角度看,它强制用户定期更换密码,降低了密码被破解的风险,这符合很多合规性要求。如果一个长期不换密码的账户被攻破,那影响可就大了。

再者,对用户体验来说,收到一个“你的密码即将过期,请及时修改”的通知,总比在需要紧急登录时发现密码已失效要好得多。这给了用户充足的准备时间,避免了因密码问题导致的工作中断。想象一下,半夜生产环境出了问题,你急着登录,结果密码过期了,那真是要命。所以,这不只是个技术活,更是个关乎效率和安全的人性化考量。

如何编写检查并发送通知的脚本?

写一个能跑起来的脚本,核心在于解析 chage 的输出,然后用 mail 命令发出去。这里提供一个基础的Shell脚本框架,你可以根据实际需求调整。

#!/bin/bash# 邮件配置MAIL_TO="your_email@example.com" # 收件人邮箱,可以添加多个,用逗号分隔MAIL_SUBJECT="Linux用户密码过期告警"MAIL_FROM="root@$(hostname)" # 发件人,通常是root用户# 获取所有系统用户,排除系统账户和shell为/sbin/nologin的用户# 注意:这里可能需要根据你的实际情况调整,例如排除nobody, ntp等服务账户USERS=$(cat /etc/passwd | awk -F: '$3 >= 1000 && $7 != "/sbin/nologin" && $7 != "/bin/false" {print $1}')echo "正在检查Linux用户密码过期情况..."for USER in $USERS; do    # 获取用户密码信息    # 尝试将chage输出语言设置为C,以统一日期格式解析    CHAGE_INFO=$(LC_ALL=C chage -l "$USER" 2>/dev/null)    # 检查chage命令是否成功执行,以及用户是否有密码过期策略    if [ $? -ne 0 ] || ! echo "$CHAGE_INFO" | grep -q "Password expires"; then        # 可能是系统账户或者没有设置密码过期策略,跳过        continue    fi    # 解析密码过期日期    # 注意:这里的日期格式是英文环境下的"Password expires"后的日期,例如"Oct 26, 2024"    EXPIRE_DATE_STR=$(echo "$CHAGE_INFO" | grep "Password expires" | awk -F': ' '{print $2}' | xargs)    # 如果没有过期日期(例如密码永不过期),则跳过    if [ -z "$EXPIRE_DATE_STR" ] || [ "$EXPIRE_DATE_STR" == "never" ]; then        continue    fi    # 解析警告天数    WARN_DAYS_STR=$(echo "$CHAGE_INFO" | grep "Password warning" | awk -F': ' '{print $2}' | awk '{print $1}' | xargs)    if [ -z "$WARN_DAYS_STR" ]; then        WARN_DAYS=0 # 默认没有设置警告天数则为0    else        WARN_DAYS=$WARN_DAYS_STR    fi    # 将过期日期字符串转换为Unix时间戳,并计算剩余天数    # 确保date命令能识别"Oct 26, 2024"这种格式    EXPIRE_TIMESTAMP=$(date -d "$EXPIRE_DATE_STR" +%s 2>/dev/null)    if [ $? -ne 0 ]; then        echo "警告:无法解析用户 $USER 的过期日期 '$EXPIRE_DATE_STR',请检查系统语言设置或脚本日期解析逻辑。"        continue    fi    CURRENT_TIMESTAMP=$(date +%s)    # 计算剩余秒数,然后转换为天数    REMAINING_SECONDS=$((EXPIRE_TIMESTAMP - CURRENT_TIMESTAMP))    REMAINING_DAYS=$((REMAINING_SECONDS / 86400)) # 86400秒 = 1天    # 判断是否在警告期内    if [ "$REMAINING_DAYS" -le "$WARN_DAYS" ] && [ "$REMAINING_DAYS" -ge 0 ]; then        MAIL_BODY="用户 $USER 的密码将在 $REMAINING_DAYS 天内过期 (过期日期: $EXPIRE_DATE_STR)。请及时修改密码,避免影响正常使用。"        echo "$MAIL_BODY" | mail -s "$MAIL_SUBJECT" -r "$MAIL_FROM" "$MAIL_TO"        echo "已发送告警邮件给 $MAIL_TO 关于用户 $USER。"    elif [ "$REMAINING_DAYS" -lt 0 ]; then        # 密码已经过期        MAIL_BODY="用户 $USER 的密码已过期!请立即处理。过期日期: $EXPIRE_DATE_STR。"        echo "$MAIL_BODY" | mail -s "$MAIL_SUBJECT - 紧急!密码已过期" -r "$MAIL_FROM" "$MAIL_TO"        echo "已发送紧急告警邮件给 $MAIL_TO 关于用户 $USER (密码已过期)。"    fidoneecho "密码过期检查完成。"

这段脚本需要 mail 命令的支持,通常这需要安装 mailutilspostfix/sendmail 等邮件传输代理(MTA)。如果你没有配置MTA,邮件可能无法发送出去。脚本里通过 LC_ALL=C 尝试统一 chage 的输出语言,以简化日期解析,但在某些特定环境下,仍需根据实际输出格式调整 awksed 匹配规则。

如何配置自动化任务(Cron)?

脚本写好了,总不能每次都手动运行吧?那太不“自动化”了。这时候 cron 就派上用场了。cron 是Linux系统里一个非常强大的定时任务工具,它能让你的脚本在指定的时间点自动执行。

配置 cron 任务通常是通过编辑 crontab 文件来实现的

以上就是如何实现Linux用户密码过期通知 提前告警设置方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/467445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 06:01:21
下一篇 2025年11月8日 06:02:10

相关推荐

发表回复

登录后才能评论
关注微信