使用Bash腳本發(fā)送包含幾天內(nèi)到期的用戶賬號(hào)列表的電子郵件
密碼強(qiáng)制策略對(duì)所有操作系統(tǒng)和應(yīng)用程序都是通用的。如果要在 Linux 上實(shí)現(xiàn)密碼強(qiáng)制策略,請(qǐng)參閱以下文章。
默認(rèn)情況下,大多數(shù)公司都會(huì)強(qiáng)制執(zhí)行密碼強(qiáng)制策略,但根據(jù)公司的要求,密碼的時(shí)間周期會(huì)有所不同。通常每個(gè)人都使用 90 天的密碼周期。用戶只會(huì)在他們使用的一些服務(wù)器上更改密碼,而不會(huì)在他們不經(jīng)常使用的服務(wù)器上更改密碼。
特別地,大多數(shù)團(tuán)隊(duì)忘記更改服務(wù)帳戶密碼,這可能導(dǎo)致日常工作的中斷,即使他們配置有基于 SSH 密鑰的身份驗(yàn)證。如果用戶帳戶密碼過期,基于SSH密鑰的身份驗(yàn)證和 cronjob 將不起作用。
為了避免這種情況,我們創(chuàng)建了一個(gè) shell 腳本來向你發(fā)送 10 天內(nèi)到期的用戶帳戶列表。
本教程中包含兩個(gè) bash 腳本可以幫助你收集系統(tǒng)中用戶到期天數(shù)的信息。
1) 檢查 10 天后到期的用戶帳戶列表
此腳本將幫助你在終端上檢查 10 天內(nèi)到期的用戶帳戶列表。
# vi /opt/script/user-password-expiry.sh
#!/bin/sh
/tmp/user-expiry-1.txt
/tmp/user-expiry.txt
echo "-------------------------------------------------"
echo "UserName The number of days the password expires"
echo "-------------------------------------------------"
for usern in u1 u2 u3 u4
do
today=$(date +%s)
userexpdate=$(chage -l $usern | grep 'Password expires' |cut -d: -f2)
passexp=$(date -d "$userexpdate" "+%s")
exp=`expr \( $passexp - $today \)`
expday=`expr \( $exp / 86400 \)`
echo "$usern $expday" >> /tmp/user-expiry.txt
done
cat /tmp/user-expiry.txt | awk '$2 <= 10' > /tmp/user-expiry-1.txt
cat /tmp/user-expiry-1.txt | column -t
將文件 user-password-expiry.sh
設(shè)置為可執(zhí)行的 Linux 文件權(quán)限。
# chmod +x /opt/script/user-password-expiry.sh
你將得到如下輸出,但用戶與天數(shù)可能不同。
# sh /opt/script/user-password-expiry.sh
-------------------------------------------------
UserName The number of days the password expires
-------------------------------------------------
u1 -25
u2 9
u3 3
u4 5
2) 發(fā)送包含 10 天內(nèi)到期的用戶帳戶列表的電子郵件
此腳本將發(fā)送一封包含 10 天內(nèi)到期的用戶帳戶列表的郵件。
# vi /opt/script/user-password-expiry-mail.sh
#!/bin/sh
SUBJECT="Information About User Password Expiration on "`date`""
MESSAGE="/tmp/user-expiry.txt"
MESSAGE1="/tmp/user-expiry-1.txt"
TO="magesh.m@rentacenter.com"
echo "-------------------------------------------------" >> $MESSAGE1
echo "UserName The number of days the password expires" >> $MESSAGE1
echo "-------------------------------------------------" >> $MESSAGE1
for usern in u1 u2 u3 u4
do
today=$(date +%s)
userexpdate=$(chage -l $usern | grep 'Password expires' |cut -d: -f2)
passexp=$(date -d "$userexpdate" "+%s")
exp=`expr \( $passexp - $today \)`
expday=`expr \( $exp / 86400 \)`
echo "$usern $expday" >> $MESSAGE
done
cat $MESSAGE | awk '$2 <= 10' >> $MESSAGE1
mail -s "$SUBJECT" "$TO" < $MESSAGE1
rm $MESSAGE
rm $MESSAGE1
將文件 user-password-expiry-mail.sh
設(shè)置為可執(zhí)行的 Linux 文件權(quán)限。
# chmod +x /opt/script/user-password-expiry-mail.sh
最后,添加一個(gè) cronjob 去自動(dòng)執(zhí)行腳本。每天早上 8 點(diǎn)運(yùn)行一次。
# crontab -e
0 8 * * * /bin/bash /opt/script/user-password-expiry-mail.sh
你將收到一封與第一個(gè)腳本輸出類似的電子郵件。