#!/usr/bin/ksh #------------------------------------------------------------------------------ # # パスワード有効期限を確認する # # # #------------------------------------------------------------------------------ function unixtime_to_str { perl -e '@t=localtime('$1');printf("%d/%02d/%02d\n",@t[5]+1900,@t[4]+1,@t[3])' } function print_str { echo "$1" | awk '{printf("%-10s %s %s %s\n", $1, $2, $3, $4)}' } # 現在の時間を UNIX TIME で取得する。 #nd=$(date +%s) # for AIX5.3 nd=$(perl -e 'print time,"\n"') # for AIX5.2 # ヘッダを出力する。 echo echo "ユーザ 設定日 期限日 コメント" echo "----------+-------------+-------------+--------------" # パスワード設定済みユーザの一覧を作成し、ユーザごとに期限切れ日を確認する。 for user in $(grep -p lastupdate /etc/security/passwd | grep : | sed 's/:$//') do ################################################################## # ユーザのパスワード最終更新日(lastupdate)を取得する。 # AIX5.3 なら lsuser -a lastupdate username も可。 ld=$(grep -p "^${user}:" /etc/security/passwd | grep lastupdate | awk '{print $3}') ################################################################## # ユーザのパスワード期限切れ日(expiredate)を計算する。 # maxage(週) を取得する。 edw=$(lsuser -a maxage ${user} | awk 'BEGIN{FS="="}{print $2}') # maxage(週) から秒を計算する。n週×7日×24時間×60分×60秒 = n週×604800秒 eds=$(expr ${edw} \* 604800) # パスワード期限切れ日(expiredate)を計算する。 ed=$(expr ${ld} + ${eds}) ################################################################## # いつ期限切れになるか、すでに期限切れか、無期限か表示する。 # maxage(週) から計算した秒が 0 以下であれば無期限。 if [ ${eds} -le 0 ] then ld_str=$(unixtime_to_str ${ld}) print_str "${user} ${ld_str} ----/--/-- 無期限です。" continue fi # 現在の時間がパスワード期限切れ日より大きければ、すでに期限切れ。 if [ ${nd} -gt ${ed} ] then ld_str=$(unixtime_to_str ${ld}) ed_str=$(unixtime_to_str ${ed}) print_str "${user} ${ld_str} ${ed_str} 期限切れです。" else ld_str=$(unixtime_to_str ${ld}) ed_str=$(unixtime_to_str ${ed}) expire=$(expr \( ${ed} - ${nd} \) / 60 / 60 / 24 + 1) print_str "${user} ${ld_str} ${ed_str} あと${expire}日です。" fi done echo exit 0
実行イメージ
#ksh pw_expire_check.ksh ユーザ 設定日 期限日 コメント ----------+-------------+-------------+-------------- root 2004/06/30 ----/--/-- 無期限です。