如何在 AIX 中检查用户/密码是否过期?

如何在 AIX 中检查用户/密码是否过期?

我可以通过以下方式检查用户是否过期:

lsuser -f USERNAME | fgrep expires

但是如何检查用户的密码是否过期呢?还有其他“过期”的东西会带来麻烦吗? [这样用户就无法登录,因为他只能通过 FTP 访问服务器,并且他的密码已过期,并且他无法更改密码,因为他没有 SSH 访问权限来发出“passwd”命令来更新他的密码密码。]

答案1

chageAIX 上有什么命令吗?检查 /etc/shadow 文件,该文件存储了到期信息。

更新:似乎有一个 passwdexpired 子例程可以加载并检查用户的密码以确定其是否已过期。不过,它似乎是作为 root 使用的。

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 测量密码到期之间时间(以周数为单位)的方式。一天有 86400 秒,乘以 7 得到 604800。所以一周有 604800 秒。您需要查看的下一个命令是 pwdadm,它依次查询文件 /etc/security/passwd。该文件保存用户上次更改密码时的值(以秒为单位)。询问该文件或使用 pwdadm 命令将返回相同的结果。对于此演示,让我们查询用户 spoll:

# 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 询问文件,您可以确定用户 spoll 密码过期之前的周数:

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

# lsuser -a maxage spoll
spoll maxage=4

从上面的输出中可以看到,密码到期前的周数为 4。接下来的任务是将一周中的秒数乘以用户 spoll 密码到期前的周数。在这种情况下,它是 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 script-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

相关内容