早上,办公室的咖啡味还没散去,运维工程师小李就发现系统里突然出现了很多工单。原来是一个重要账号的密码过期了,导致自动化任务无法运行。大屏幕上不断闪烁的报警信息像是在提醒大家:密码过期的问题不能忽视。
如果你也因为密码过期而头疼过,那么今天这篇文章肯定能帮到你。让我们从根源上解决这个问题,用一行命令和一小段Bash
脚本来监控 Linux
密码过期的风险,并提前发出警告!
为何需监控密码过期?
在实际运维管理中,定期更改密码可以有效降低系统风险,但这也会带来不少麻烦:
• 自动任务中断:脚本或备份程序依赖账号登录,密码过期直接导致任务失败。 • 服务不可用:关键服务因密码问题而中断,可能会引发业务停摆。 • 运维效率下降:紧急处理密码问题往往耗费大量人力、时间和资源。
因此,建立一套自动化、智能化的密码过期监控方案,不仅可以提前预警,还能大幅提升系统稳定性和运维效率。
自动化密码过期监控方案
工作原理
整个方案基于Linux
内置的chage
命令,实现如下几大功能:
• 信息采集:使用 chage -l <用户名>
获取密码有效期信息。• 时间计算:利用 date
工具将密码过期时间转换为 UNIX 时间戳,计算剩余天数。• 触发提醒:当剩余天数低于阈值(例如 7 天)时,自动发送邮件、记录日志。
所需工具
• chage
:查询用户密码状态的命令。• chpasswd
: 修改用户密码。• date
:进行日期与时间转换。• mail
:邮件提醒工具(可选)。• cron
:定时任务调度,实现自动运行。
轻松部署密码预警
• 先设置几个变量,然后在整个脚本里都能用。
# 配置区域:根据实际需求修改以下变量USERS=("root""user2""user3") # 需要监控的用户数组WARNING_DAYS=7 # 提前预警天数LOG_FILE="/var/log/password_change.log"PASSWORD_LENGTH=16 # 生成密码长度MAIL_NOTIFY="[email protected]"# 通知邮箱(需先配置邮件服务)
• 定义一个函数,它的主要功能就是生成密码。
# 密码生成函数(兼容没有pwgen的环境)generate_password() {# 方法1:使用openssl生成(默认) openssl rand -base64 20 | tr -dc 'a-zA-Z0-9!@#$%^&*()_+' | head -c${PASSWORD_LENGTH}}
• 为了后面记录日志方便,咱们定义一个专门用来记日志的函数。
# 日志记录函数log_message() {local timestamp=$(date"+%Y-%m-%d %H:%M:%S")echo"[${timestamp}] $1" >> "${LOG_FILE}"}
• 主函数先用 chage -l
命令获取用户账户的信息,然后用grep
和cut
工具找出过期时间。接着计算距离过期还有多少天,如果这个天数少于预先设定的天数,就更新用户的密码。
# 主程序for USERNAME in"${USERS[@]}"; do# 检查用户是否存在if ! id"${USERNAME}" &>/dev/null; then log_message "[${USERNAME}] 错误:用户不存在"continuefi# 获取密码过期信息 password_info=$(chage -l "${USERNAME}" 2>/dev/null)if [ $? -ne 0 ]; then log_message "[${USERNAME}] 错误:无法获取密码策略信息"continuefi# 解析过期时间 expiry_line=$(grep 'Password expires' <<< "${password_info}" | cut -d':' -f2 | sed 's/^ *//;s/ *$//')if [[ "${expiry_line}" == "never" ]]; then log_message "[${USERNAME}] 密码永不过期"continuefi# 转换为时间戳 expiry_ts=$(date -d "${expiry_line}" +%s 2>/dev/null)if [[ -z "${expiry_ts}" ]]; then log_message "[${USERNAME}] 错误:无法解析过期时间 '${expiry_line}'"continuefi# 计算剩余天数 current_ts=$(date +%s) days_left=$(( (expiry_ts - current_ts) / 86400 ))if (( days_left > WARNING_DAYS )); then log_message "[${USERNAME}] 密码状态正常,剩余天数:${days_left}"continuefi# 密码修改流程 log_message "[${USERNAME}] 开始密码修改流程,剩余天数:${days_left}"# 生成新密码 new_password=$(generate_password)if [ -z "${new_password}" ]; then log_message "[${USERNAME}] 错误:密码生成失败"continuefi# 修改密码(兼容不同发行版)ifecho"${USERNAME}:${new_password}" | chpasswd 2>/dev/null; then log_message "[${USERNAME}:{$new_password}] 密码修改成功"# 发送邮件通知(需要配置mailutils/postfix)if [ -n "${MAIL_NOTIFY}" ]; thenecho"[${USERNAME}] 密码已自动重置" | mail -s "密码变更通知""${MAIL_NOTIFY}"fi# 更新最后修改日期(可选) chage --lastday 0 "${USERNAME}"else log_message "[${USERNAME}] 错误:密码修改失败"fidoneexit 0
结合 Cron 实现周期检测
为了让系统自动检测密码状态,我们只需要将该脚本添加到定时任务中。示例:
# 编辑定时任务crontab -e# 添加如下行,每天早上8点检测用户 "admin" 的密码状态0 8 * * * /path/to/auto_update_expired_passwords.sh 2>&1
通过这一配置,你的系统将每天自动运行检测,并记录日志,确保每个关键账号都受到监控。
总结
在运维工作里,小细节往往能决定最终结果的好坏。一个简单好用的密码到期提醒脚本,可以帮你大大减少出问题的风险。不管是处理自动化任务、查看系统日志还是维护重要服务,如果能提前收到警告,就能省下很多紧急修复的时间,保证系统稳定运行。
赶紧动手试试这个方法吧,让你更好地管理Linux
系统!也别忘了把这篇文章收藏并分享给其他人,帮助更多的朋友解决密码过期带来的麻烦,一起迈向更智能的运维之路!
扫码关注公众号
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...