會員註冊 / 登入  |  電腦版  |  Jump to bottom of page

Linux/Unix » [Linux]如何讓Linux作業系統帳號之密碼自逾期7天前起發送通知信

發表人: andowson, 七段學員
2011-06-22 17:44:35
很多公司的密碼政策都會要求定期更新一次密碼(例如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
描述 作業系統帳號和電子郵件信箱的對應檔
檔案大小 53 bytes
下載次數 7 次
[Disk] 下載

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

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





會員註冊 / 登入  |  電腦版  |  Jump to top of page