while read line; do
date_change=$(echo $line | awk -F: '{print $3}')
user=$(echo $line | awk -F: '{print $1}')
#Say you set them on 14120 days since Jan 1, 1970
if [[ $date_change -eq 14120 ]]; then
#chage command to set warning and password expiration for $user
fi
done < /etc/shadow
while IFS=: read -a line
do
date_change=${line[2]}
user=${line[0]}
# Have they changed their password since I told them to on Jul 1?
if [[ $date_change <= 14426 ]]; then
# Expire their password, that'll get their attention
chage -E 0 $user
fi
done < /etc/shadow
您可以使用 chage 命令查看他们上次更改密码的时间,例如:
您可以将它与 /etc/passwd 文件的循环和 awk 混合使用,但可能是更好的方法。也许是这样的:
要使密码过期,请将过期日期设置为过去的日期:
要删除过期使用 -1:
将这些与凯尔的剧本结合起来。
但是,您只需一次调用即可获得您的
user
和使用的:date_change
awk
或者
或者
然而,
awk
是不必要的:上次更改密码的日期列在 /etc/shadow 的第三个字段中(编码为自 1970/01/01 以来的天数)。
然后,您可以使用 chage 实用程序在上次更改后的n天后强制更改密码。但请注意,此设置是持久的,它将每隔n天使密码过期,因此,如果您不希望这样做,则必须在第一次更改后在第二次运行中重置此设置。
我真的想要一个在首次登录时强制更改密码的选项,就像 MacOS 和 Windows 提供的一样。