AIX 列出截至今天的所有帐户密码最后更新日期

问题描述 投票:0回答:2

我想知道如何在 AIX 服务器上生成所有帐户密码上次更新期限的列表。

我对查找用户帐户感到非常困惑,因为服务器没有 /etc/shadow 文件。我尝试使用

pwdadm -q user01
,但它输出编码的时间戳,并且不知道如何解码它。

预期结果:

user1 - 60 days
user2 - 30 days
passwords aix
2个回答
0
投票

lastupdate 属性以通常的“自纪元以来的秒数”格式输出,这在大多数系统(不是全部!!!)中意味着,该数字是自 1970 年 1 月 1 日以来经过的秒数。一些罕见的系统具有不同的纪元零次,但通常这是有效的。

要获取当前值(“NOW”),请尝试

date +%s
并将从 pwdadm 收到的数字转换为可读日期,例如使用
date --date='@1242483347'

要获取当前 pwd 的年龄(以秒为单位),只需计算 NOW(见上文)与 pwdadm 显示的时间戳之间的差异即可。


0
投票

这是我的解决方法:

#!/bin/ksh93

for user in $(lsuser -R files -a id ALL | awk '{ print $1 }')
do
  lastupdate=$(lsuser -C -a lastupdate "$user" | awk -F: 'NR == 2 { print $2 }')
  if [ -z "$lastupdate" ]
  then
    # no timestamp to process
    continue
  fi
  # pwage=$(perl -MTime::Seconds -e 'my $val = Time::Seconds->new(time() - shift); print $val->pretty;' "$lastupdate")
  pwage=$(perl -MTime::Seconds -e 'my $val = Time::Seconds->new(time() - shift); print int($val->days);' "$lastupdate")
  printf '%s - %s\n' "$user"  "$pwage days"
done

此 shell 脚本循环本地用户(仅提取他们的用户名)并尝试提取 lastupdate 属性。如果该属性存在,我们使用一个简短的内联 Perl 脚本,通过

time()
 包的 shift
 将年龄(
Time::Seconds
是当前时间,
days()
获取最后更新值)转换为天数。方法。或者,注释掉,您可以使用同一包的
pretty()
方法,该方法将以扩展格式打印年龄:
user1 - 168 days, 6 hours, 22 minutes, 24 seconds
;如果是这样,请调整后面的
printf
以省略“天”位。

© www.soinside.com 2019 - 2024. All rights reserved.