服務器和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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM