服务器和mysql账号密码过期时间监控

服务器及mysql账号密码过期时间监控

一、需求引入

  这事其实发生在昨天,开发说线上静态网的同步有问题。同步流程是:发新闻的人在在自己本机电脑登录内网服务器的新闻编辑后台,然后脚本会定时把编辑好的文章传到gitlab,线上服务器再定时,且只能单向拉取gitlab代码(实际上是内网后台编辑好的文章)

  第一步肯定是去看看服务器情况啦。堡垒机登录到服务器,说账号密码过期,急需改密码。输入原密码,再输入要更改的新密码。然鹅,设置新密码一直给我报错:

BAD PASSWORD: is too simple。用密码生成器(https://suijimimashengcheng.bmcx.com/),固定某个长度16位(所用字符我全部都勾选了的),我看着网站生成的比较复杂的随机密码(就是都包含所用字符),就复制用来设置新密码了,还是too simple;然后开始调密码长度到20,再40。。。还是报错,直到。。。连账号都被锁了!!!策略是连续输错5次就锁定5分钟(对root也生效)。然后,蛮惨的,首先怕开发催,运营催(我明明写好文章,为什么没有给我同步到线上,赶紧给我看看。。……#¥%$%^#$....);然后当时手头还在搞别的事吧,真是体会到,运维忙的时候也是忙的分身乏术;闲的时候也是闲的心慌~~~

  这堆机器因为之前要过等保二级,所以设置了很多坑运维的策略(公司只有我一个运维,所以就是自己坑自己呗。。)。例如服务器只能从堡垒机登录,端口范围开放,禁止root直接远程登录。以为从阿里云控制台的Workbench进行远程连接,是可以为所欲为的(说不定账号没有被锁的概念,或者设置的root禁止远程登陆是不生效的),事实证明我太天真了,登不上 = =。用内网能通的其他机器ssh跳过去(其实应该做个免秘钥或者本机普通账号sudo直接切超管的),也是不行,而且我还发现另外一台服务器也是账号过期的,悲惨的事果然是接二连三的。

  总的来说,就是啥情况都遇到了:普通账号被锁,root账号禁止登服务器,无法登陆服务器。最后咋办呀,等呗,等自动解锁。小心翼翼试各种长度的密码,40位长度终于让我过了!!!(肯定设置的密码策略里面有些不符合)

  超管用户登进去之后我立马手动运行了同步脚本(先给开发交差),注意:账号过期是会导致该账号下的计划任务是执行不了的!!!

 

 

   然后去看关于密码复杂度和过期策略的两个文件: /etc/pam.d/system-auth 和 /etc/login.defs。

  为了当天能一劳永逸,先把账号密码设置个永不过期先: chage -M 99999 用户

  然后把那个密码策略文件(/etc/pam.d/system-auth )的 ”。。。pam_cracklib.so 。。。ocredit=-1” 注释掉,新增复制一行,只留下minlen=8 这个字符为止,后面全部不要(如上图)。

  我知道这样操作是非常可恨的,所以今天有空就把这监控过期的活做了,密码设为90天过期

 

二、问题解决

  直接贴代码,相信有点shell基础的朋友都能看懂的啦,哈哈哈哈~~~(不懂可以留言找我,QQ号为:378876091,记得大学毕设的时候就是有个好心技术人留了QQ号,帮我顺利毕业的)

   几个点,大家注意下:

  利用:chage -l 去获取密码过期时间(命令行返回结果的最后一列),记得月份获取的时候要处理下英文转换为阿拉伯数字

       数学运算接收变量前要加个let,let 命令是BASH 中用于计算的工具(我试过去掉,马上给我报错)

  最后利用时间戳来比较当前时间和过期时间的差值,JUDGE_DAY是你自定义的:设置差xx天过期

  判断账号是否过期要加个预判,never代表账号是永不过期

  1 #!/bin/bash
  2 
  3 PHONE="159xxxx0136"
  4 DATE=`date +%F_%T`
  5 
  6 #还差多少天提醒报警
  7 JUDGE_DAY=380
  8 
  9 #钉钉机器人token
 10 TOKEN="https://oapi.dingtalk.com/robot/send?access_token=xxxxx"
 11 
 12 user=(xx root)
 13 
 14 for (( i=0; i<${#user[@]}; i++)) do
 15   user_name=`echo ${user[i]}`
 16 
 17 ## 一、密码过期
 18 #1、年
 19 pwd_end_year=`chage -l ${user_name} | head -2| tail -1 | awk -F: '{print $2}'| awk -F',' '{print $2}'| awk '{print $1}'`
 20 
 21 if [ "${pwd_end_year}" == "" ];then
 22     exit 0
 23 fi
 24 
 25 #2、月(英文要处理成阿拉伯数字)
 26 pwd_end_month=`chage -l ${user_name} | head -2| tail -1 | awk -F: '{print $2}'| awk -F',' '{print $1}'| awk '{print $1}'`
 27 
 28 case ${pwd_end_month} in
 29         'Jan') pwd_end_month=1;;
 30         'Feb') pwd_end_month=2;;
 31         'Mar') pwd_end_month=3;;
 32         'Apr') pwd_end_month=4;;
 33         'May') pwd_end_month=5;;
 34         'Jun') pwd_end_month=6;;
 35         'Jul') pwd_end_month=7;;
 36         'Aug') pwd_end_month=8;;
 37         'Sep') pwd_end_month=9;;
 38         'Oct') pwd_end_month=10;;
 39         'Nov') pwd_end_month=11;;
 40         'Dec') pwd_end_month=12;;
 41 esac
 42 
 43 #3、日
 44 pwd_end_day=`chage -l ${user_name} | head -2| tail -1 | awk -F: '{print $2}'| awk -F',' '{print $1}'| awk '{print $2}'`
 45 
 46 pwd_end_date_s=`/bin/date -d "${pwd_end_year}"-"${pwd_end_month}"-"${pwd_end_day}" +%s`
 47 check_date_s=`/bin/date +%s`
 48 let pwd_diffday=(${pwd_end_date_s}-${check_date_s})/86400
 49 
 50 echo "用户 $user_name 密码过期时间还剩: ${pwd_diffday} 天 !!!"
 51 #echo ${pwd_diffday}
 52 
 53 if [ ${pwd_diffday} -le ${JUDGE_DAY} ]; then
 54       curl -H "Content-Type:application/json" -X POST --data '{"msgtype":"text","text":{"content":"当前时间:'$DATE'  \n某某服务器: '${user_name}' 密码过期还剩'${pwd_diffday}'天,请及时修改密码 !!!"} , "at": {"atMobiles": ['${PHONE}'], "isAtAll": false}}' ${TOKEN} > /dev/null 2>&1
 55 fi
 56 
 57 
 58 ## 二、账号过期
 59 #判断账号是否永不过期
 60 judge=`chage -l ${user_name} | head -4| tail -1 | awk -F: '{print $2}'| awk -F',' '{print $1}'| awk '{print $1}'`
 61 
 62 if [ "$judge" = "never" ]; then
 63    echo "$user_name 用户的账号永不过期,不用监控!!"
 64    sleep 2
 65    break;
 66 fi
 67 
 68 #1、年
 69 account_end_year=`chage -l ${user_name} | head -4| tail -1 | awk -F: '{print $2}'| awk -F',' '{print $2}'| awk '{print $1}'`
 70 
 71 if [ "${account_end_year}" == "" ];then
 72     exit 0
 73 fi
 74 
 75 #2、月(英文要处理)
 76 end_month=`chage -l ${user_name} | head -4| tail -1 | awk -F: '{print $2}'| awk -F',' '{print $1}'| awk '{print $1}'`
 77 
 78 case ${end_month} in
 79         'Jan') end_month=1;;
 80         'Feb') end_month=2;;
 81         'Mar') end_month=3;;
 82         'Apr') end_month=4;;
 83         'May') end_month=5;;
 84         'Jun') end_month=6;;
 85         'Jul') end_month=7;;
 86         'Aug') end_month=8;;
 87         'Sep') end_month=9;;
 88         'Oct') end_month=10;;
 89         'Nov') end_month=11;;
 90         'Dec') end_month=12;;
 91 esac
 92 
 93 account_end_month=`echo ${end_month}`
 94 
 95 
 96 #3、日
 97 account_end_day=`chage -l ${user_name} | head -4| tail -1 | awk -F: '{print $2}'| awk -F',' '{print $1}'| awk '{print $2}'`
 98 
 99 account_end_date_s=`/bin/date -d "${account_end_year}"-"${account_end_month}"-"${account_end_day}" +%s`
100 check_date_s=`/bin/date +%s`
101 
102 #天
103 let account_diffday=(${account_end_date_s}-${check_date_s})/86400
104 
105 echo "用户 $user_name 账号过期时间还剩:  ${account_diffday} 天 !!!"
106 #echo ${account_diffday}
107 
108 if [ ${account_diffday} -le ${JUDGE_DAY} ]; then
109    curl -H "Content-Type:application/json" -X POST --data '{"msgtype":"text","text":{"content":"当前时间:'$DATE'  \n某某服务器: '${user_name}' 账号过期还剩'${account_diffday}'天,请及时修改密码 !!!"} , "at": {"atMobiles": ['${PHONE}'], "isAtAll": false}}' ${TOKEN} > /dev/null 2>&1
110 fi
111 done

 

运行结果:

 

 

  这是mysql的密码过期监控(竟然找不到脚本放到哪个服务器上了 = =),需要登录进去用具体指定

  参考这个文章写的:https://blog.csdn.net/weixin_30409849/article/details/97180165

 1 for account in 检查的用户
 2 do
 3    account_plc=`mysql -h$ip -P$port -u$superuser -p$superuserpwd -e "select password_last_changed from mysql.user where user='${account}';" |grep -v password_last_changed`
 4    
 5    cur_time=`mysql -h$ip -P$port -u$superuser -p$superuserpwd -e "select now();" |grep -v "now()"`
 6    
 7    minus=`mysql -h$ip -P$port -u$superuser -p$superuserpwd -e "select datediff('${cur_time}', '${account_plc}');" |grep -v datediff`
 8 
 9 
10    let minus=90-$minus
13 
14    echo "remain:  $minus"
15 
16 done

 

posted @ 2021-01-27 12:59  windysai  阅读(1143)  评论(1编辑  收藏  举报