需求:通過zabbix監控所有服務器root用戶的密碼過期時間(還有多少天過期)
技術背景:默認情況下,root用戶的密碼過期時間可以通過chage -l root ,但這條命令只能root用戶自己去執行!
由於公司服務器有很強的安全策略和各種限制,因此需要統計root用戶的密碼過期時間,總結了如下兩種最可能的方案
方案一:讓root用戶,通過crontab服務,每天執行一次chage -l root,將結果寫到/tmp/root_pwd_ExpirDays.txt
然后讓zabbix用戶去讀取那個文件,取即將過期的天數(推薦,只需root用戶加一個定時任務就可以了)
方案二:通過sudo的方式,通過配置sudo服務,讓zabbix用戶可以通過sudo免密去執行chage -l root,然后作數據處理
(推薦,可以嚴格限制只能臨時提權執行chage -l root這一條命令)
最終取了第一種方案,這里附上筆者寫的Shell腳本(root_Password_Expires_check_1.0.sh):
#/bin/bash # ############################################################# #Author:QQ,5201351 # #Blog:https://www.cnblogs.com/5201351 # #Date:2020-09-10 # #Script Version:1.0 # #Supported OS: Cenots/rhel 6.x/7.x # #Description:As follows # #1.This script can be executed in any directory # #2.But it must be executed by the root user, nothing more # ############################################################# # today=$(date +%s) expires_str=$(chage -l root|awk "NR==2"| cut -d ":" -f 2) if [ "$expires_str" == " never" ];then expiration_days=99999 else expiration=$(date -d "$expires_str" +%s) expiration_days=$[(expiration-today)/86400] fi echo $expiration_days > /tmp/root_pwd_ExpirDays.txt
優化篇1>>>>>>>>:
后來又思考了一下,這樣也還有有缺陷的,如某天root的周期定時任務沒有執行,或者任務被人誤刪除了
那么/tmp/root_pwd_ExpirDays.txt中的數據就一直會是一個固定的!文件名也是固定的,對zabbix來言,不容易確定是那天的數據
於是得優化實現方式(root_password_expires_check_2.0.sh):修改腳本,將1.0中的最后一行,修改如下:
rm -f /tmp/root_pwd_ExpirDays_$(date -d "-1 days" +%F).txt echo $expiration_days |tee /tmp/root_pwd_ExpirDays_$(date +%F).txt
這樣zabbix端,取system.run[cat /tmp/root_pwd_ExpirDays_$(date +%F).txt] 即可獲取天數,如果當天的文件不存在,則會產生異常!
優化篇2>>>>>>>>:
再次對腳本加固,如下,主要是對權限這一塊的加固,最新版本,root_password_expires_check_3.0.sh:
sleep 1 ; today=$(date +%s) expires_str=$(chage -l root|awk "NR==2"| cut -d ":" -f 2) if [ "$expires_str" == " never" ];then expiration_days=99999 else expiration=$(date -d "$expires_str" +%s) expiration_days=$[(expiration-today)/86400] fi rm -f /tmp/root_pwd_ExpirDays_$(date -d "-1 days" +%F).txt result_file=/tmp/root_pwd_ExpirDays_$(date +%F).txt echo $expiration_days |tee $result_file chown root:root $result_file && chmod o=r $result_file
另外:在公司服務器中,對於極個別的服務器,安全加固極高,使用上面的方法生成的文件,zabbix用戶一樣還是不能讀取到
最后分析出原因,是那台服務器的selinux安全加固都高於其他服務器,對於特殊個例,筆者增加chcon -t etc_t $result_file進行解決
尊重別人的勞動成果 轉載請務必注明出處:https://www.cnblogs.com/5201351/p/13645273.html