練功房推薦書單

  • 猛虎出柙雙劍合璧版--最新 OCA / OCP Java SE 7 Programmer 專業認證 (電子書)
  • 流浪教師存零股存到3000萬(全新增修版)(書+DVD)
  • 開始在關西自助旅行(京都‧大阪‧神戶‧奈良)(全新增訂版)
  • 不敗教主的300張股票存股術

[Linux]如何讓Linux作業系統帳號之密碼自逾期7天前起發送通知信 RSS feed
討論區首頁 » Linux
發表人 內容
andowson

七段學員
[Avatar]

註冊時間: 2007/1/2
文章: 711
來自: 台北
離線
很多公司的密碼政策都會要求定期更新一次密碼(例如90天),對於作業系統的帳號,需要使用者要登入時才能看到系統的提示訊息,告知其帳號還有幾天將要逾期。如果使用者都不登入作業系統,則該訊息將不會被使用者看到,很容易造成該使用者要用時才發現無法正常登入。

針對這個需求,我們可以透過一支發送通知信的shell script,每天定期掃一下系統的帳號檔/etc/passwd,搭配chage -l 指令找出即將(及已經)逾期的帳號有哪些,並個別發送信件給他們。底下參考的內容:

/root/admin/pwd_expire_notice.sh:
#!/bin/bash

# Name: pwd_expire_notice.sh
# Author: Andowson Chang (andowson [at] gmail [dot] com)
# Version: 1.0
# Last Modified: 2011-06-22

noticefile=/tmp/pwd_expire.txt
ip=`/sbin/ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d":" -f2`
echo $ip
D1=`date +%s`
for i in `cat /etc/passwd | grep bash | awk -F: '{print $1}'`
do
export LANG=en_US
echo -n "password for user ${i} will expire in "
exp_date=`chage -l $i|grep "Password [Ee]xpires"|awk -F: '{print $2}'`
D2=`date +%s -d"${exp_date}"`
((diff_sec=D2-D1))
daysleft=`echo - | awk -v SECS=$diff_sec '{printf "%d", SECS/(60*60*24)}'`
echo "$daysleft days"
if [ $daysleft -le 7 ]; then
echo "$i's password will expire in $daysleft days." > $noticefile
mailto=`grep $i /root/admin/mail.txt|awk -F: '{print $2}'`
if [ -n "$mailto" ]; then
echo "Send mail to ${mailto}"
export LANG=zh_TW.Big5
mail -s "密碼即將到期通知: $i@$ip 尚餘 $daysleft 日" $mailto < $noticefile
fi
fi
done


說明:
1.我們利用 chage -l username 可以找出全部的密碼相關日期資訊,利用grep指令過濾岀Password Expires(CentOS 4.x之前)或Password expires(CentOS 5.x)後面的日期字串,
2.接著再算出系統日期跟這個密碼到期日之間的天數差異
3.如果天數差異小於或等於7天,再比對mail.txt檔中有設定電子郵件的,我們就發送通知信給他

作業系統帳號和電子郵件信箱的對應檔(可針對想要收到通知信的帳號一一設定,格式為帳號:電子郵件,中間用一個冒號隔開不加空白)
/root/admin/mail.txt:
root:sys.admin@example.com

john:john.doe@example.com


設定排程自動執行
/etc/crontab:
# Notice password will expire (2011.06.22 by Andowson)

10 5 * * * root /root/admin/pwd_expire_notice.sh > /var/log/pwd_expire_notice.log 2>&1


注意:
您必須已經先設定好該部Linux主機可以發送電子郵件到您公司的信箱才行。例如安裝並設定Sendmail。

參考資料:
http://www.planetmy.com/blog/how-to-show-linux-user-password-expire/
http://www.unix.com/shell-programming-scripting/56451-days-difference-between-two-dates.html
 檔案名稱 mail.txt [Disk] 下載
 描述 作業系統帳號和電子郵件信箱的對應檔
 檔案大小 53 bytes
 下載次數:  7 次

 檔案名稱 pwd_expire_notice.sh [Disk] 下載
 描述 讓Linux作業系統帳號之密碼自逾期7天前起發送通知信
 檔案大小 1023 bytes
 下載次數:  10 次

 檔案名稱 cron_pwd_expire_notice.txt [Disk] 下載
 描述 排程設定
 檔案大小 142 bytes
 下載次數:  6 次


分享經驗 累積智慧
[WWW]
 
討論區首頁 » Linux
前往:   
行動版