Linux口令过期告警

一、背景

linux运维过程中经常会设置用户口令过期失效,并定期修改口令,但在大量服务器修改密码工作量比较大且容易忘记。所以有了以下告警方案

  1. 编写shell脚本检查用户口令是否快过期,有过快过期的则发送告警请求(短信或邮件)
  2. 利用linux定时器定期执行shell脚本

二、编写shell脚本 linuxPasswordExpirationNotify.sh

脚本如下:

#/bin/bash
# 告警请求地址    
api_url="http://127.0.0.1:8080/linuxPasswordExpirationNotify"
# 服务器ip
host=$(hostname -I | awk '{print $1}')
# 告警请求参数,包含服务器ip和用户名、剩余过期天数集合
param='{"host":"'$host'","items":['
# 当前时间
today=$(date +%s)
# 过期前15天给出告警
warning_days=15
# 循环判断所有用户,拼接快过期的用户信息到告警请求参数
for user in $(cat /etc/passwd |cut -d ":" -f 1)
do
  # echo $user
  expires_str=$(chage -l $user|awk "NR==2"|cut -d ":" -f 2)
  if [ "$expires_str" = "never" ]
  then
    expire_days=99999
  else
    expiration=$(date -d "$expires_str" +%s)
    expire_days=$[(expiration-today)/86400]
  fi
  # 小于告警天数的需要发送通知
  if [ $expire_days -lt $warning_days ];then
    json='{"userName":"'$user'","expireDays":'$expire_days'},'
    param=$param$json
  fi
done

# 去掉参数最后的逗号
if echo "$param" | grep -q -E '\,$'
then
  param=${param%?}']}'
else
  param=$param']}'
fi

# 发送通知请求
timeout 10s  curl -s -X POST -H "Content-Type: application/json" -d "$param" $api_url

三、添加corn策略

  1. 执行corntab -e命令打开定时任务列表

  2. 在末尾添加 0 5 * * * /opt/linuxPasswordExpirationNotify.sh

     注:每日凌晨5点执行检查告警脚本,corn可调整

四、开发告警通知程序

接收http请求,根据参数发送告警(短信或邮件)

略……