AIXでユーザー/パスワードが期限切れになったことを確認する方法は?

AIXでユーザー/パスワードが期限切れになったことを確認する方法は?

次のようにして、ユーザーが期限切れになったことを確認できます。

lsuser -f USERNAME | fgrep expires

しかし、ユーザーのパスワードが期限切れになっているかどうかを確認する方法は?問題を引き起こす可能性がある他の「期限切れ」のものはありますか? [これにより、ユーザーはFTP経由でのみサーバーにアクセスでき、パスワードが期限切れになったためログインできず、パスワードを更新するために "passwd"コマンドを実行するためのSSHアクセス権がないため、パスワードを変更できません。 ]

答え1

chageAIXにコマンドがありますか?有効期限情報が保存されている/etc/shadowファイルを確認してください。

更新:ユーザーのパスワードをロードして確認し、パスワードが期限切れになったことを確認するpasswexpiredサブルーチンがあるようです。しかし、ルートとして使用されているようです。

http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.basetechref%2Fdoc%2Fbasetrf1%2Fpasswdexpired.htm

このリンクには、必要な内容に関する素晴らしいドキュメントがあります。

http://www.torontoaix.com/scripting/when_pwd_exp

上記の記事の前半で説明したように、パスワードの有効期限はmaxage属性によって制御されます。

For example:
maxage=0 means never to expire
maxage=2 means will expire in two weeks.

AIXは時間をエポック形式(秒単位)で保存するため、最初に週に数秒があることを確認する必要があります。これは、maxageがパスワードの有効期限の間の時間(週単位)を測定する方法であるためです。 1日は86,400秒に7を掛けると604,800秒になります。したがって、週は604800秒です。見なければならない次のコマンドはpwdadmです。このコマンドは、/etc/security/passwd ファイルを照会します。このファイルには、ユーザーが最後にパスワードを変更した時刻(秒)の値が保持されます。このファイルを調べるか、pwdadmコマンドを使用すると、同じ結果が返されます。このデモでは、ユーザースポールを照会します。

# grep -p "spoll:" /etc/security/passwd
spoll:
        password = EvqNjMMwJzXnc
        lastupdate = 1274003127
        flags =       ADMCHG

# pwdadm -q spoll
spoll:
        lastupdate = 1274003127
        flags = ADMCHG

上記の出力で最後に更新された値を秒単位で確認できます。つまり、パスワードが最後に変更された時間:1274003127

次に、lsuserを使用するか、/etc/security/user質問ファイルを使用して、ユーザーのスポールパスワードが期限切れになるまでの週数を決定できます。

# grep -p "spoll:" /etc/security/user
spoll:
        admin = false
        maxage = 4

# lsuser -a maxage spoll
spoll maxage=4

上記の出力からわかるように、パスワードが期限切れになるまでの残りの週数は4です。次のタスクは、ユーザーのスポールパスワードが期限切れになるまでの週数に、対応する注意時間(秒)を掛けることです。この場合、4:604800 * 4です。

# expr 604800 \* 4
2419200

次に、パスワードが最後に変更された時刻に秒単位の最大値(604800 * 4)を追加する必要があります。2419200 + 1274003127

# expr 2419200 + 1274003127
1276422327

これで、UNIX時代の秒を現在時刻のより意味のある表現に変換できるようになりました。さまざまなツールを使用できますが、このデモでは gawk 関数と strftime 関数を使用します。

# gawk 'BEGIN {print strftime("%c",'1276422327')}'
Sun Jun 13 10:45:27 BST 2010

上記の計算は、次のパスワードが期限切れになる時間を提供します。これにより、ユーザーspollのパスワードが最後に変更されたことがわかります(pwdadmコマンドを介して)。

# gawk 'BEGIN {print strftime("%c",'1274003127')}'
Sun May 16 10:45:27 BST 2010

有効期限は次のとおりです。

Sun Jun 13 10:45:27 BST 2010

-----Perlスクリプト-let---------

#!/bin/perl
use POSIX qw(strftime);
$maxage=4; 
$last_update = 1274003127
$max_week_seconds = 86400 * $maxage;
print strftime("%C ", localtime($max_week_seconds));

答え2

通常時間に変換します(最後のパスワード更新時間(秒)+最大使用時間(秒))

答え3

システム管理インターフェースツール()を介して見つけることができますsmit。コンソールバージョンはsmitty

答え4

確認するためにこのスクリプトを作成しました。これが他の人に役立つことを願っています。

#!/bin/sh

###############################################################################
# Script Name: aix_chk_user_expires.sh
#
# Author: Chris Alderson
#
# Purpose: Check when a user expires in AIX
#
# NOTES: Please change the value of $oozer to the id you desire to check against
#
##############################################################################

# Set value to specify a user

oozer='<username>'

#get epoch time for the time since last updated
time_since_last_update_in_epoch=$(lssec -f /etc/security/passwd -s $oozer -a lastupdate | cut -d= -f2)
#get the max age number of weeks from luser
max_age=$(lsuser -f $oozer | grep maxage | cut -d= -f2)
#multiply maxage by 7 to get number of days password will last
max_age_in_days=$(echo $((( max_age * 7 ))))
# multiply number of days by how many seconds in a day to get total seconds until change
# We will use this later to add to $time_since_last_update_in_epoch
max_age_in_epoch=$(echo $((( $max_age_in_days * 86400 ))) )
# Create new variable to store the total of max age in seconds and epoch of updated password
time_until_expires_in_epoch=$(echo $((( $max_age_in_epoch + $time_since_last_update_in_epoch ))))

#take epoch times and pass them to perl to give them a readible format
time_last_updated=$(perl -le 'print scalar localtime $ARGV[0]' ${time_since_last_update_in_epoch})


if [[ $max_age -eq 0 ]]; then

    time_of_expiration=$(echo "non-expiring password")
else
    ##take epoch times and pass them to perl to give them a readible format
    time_of_expiration=$(perl -le 'print scalar localtime $ARGV[0]' ${time_until_expires_in_epoch})
fi



echo "${oozer}'s password last updated: $time_last_updated"
echo "${oozer}'s password will expire: $time_of_expiration"

出力は次のとおりです。

user's password last updated: Mon Jul 31 17:00:13 2017
user's password will expire: Mon Oct 23 17:00:13 2017

関連情報