Linux口令过期告警
一、背景
linux运维过程中经常会设置用户口令过期失效,并定期修改口令,但在大量服务器修改密码工作量比较大且容易忘记。所以有了以下告警方案
- 编写shell脚本检查用户口令是否快过期,有过快过期的则发送告警请求(短信或邮件)
- 利用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
策略
执行
corntab -e
命令打开定时任务列表在末尾添加
0 5 * * * /opt/linuxPasswordExpirationNotify.sh
注:每日凌晨5点执行检查告警脚本,corn可调整
四、开发告警通知程序
接收http请求,根据参数发送告警(短信或邮件)
略……