トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

【AIX】ユーザパスワードの有効期限を確認するスクリプト

#!/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    ----/--/--    無期限です。