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가 비밀번호 만료 사이의 시간(주 단위)을 측정하는 방법이기 때문입니다. 하루는 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

다음으로 비밀번호가 마지막으로 변경된 시간에 초 단위의 maxage 값(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

관련 정보