我最近添加了一些用户,并给了他们随机生成的密码。我们已经指示他们更改密码,但我们怀疑其中大部分人并没有这样做。
我们如何才能使尚未更改密码的所有人密码过期?
我们在 Ubuntu 9.04 服务器上使用常规 /etc/passwd 身份验证。
答案1
您可以使用 chage 命令查看他们上次更改密码的时间,例如:
sudo chage -l kbrandt
您可以将其与 /etc/passwd 文件的循环和 awk 混合使用,这可能是更好的方法。也许是这样的:
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
答案2
要使密码过期,请将过期日期设置为过去的日期:
chage -E 0 username # 0 is January 1, 1970; 14496 is 9/9/9
要删除到期日期,请使用 -1:
chage -E -1 username
结合这些凯尔的脚本。
然而user
,您只需调用date_change
一次即可获得awk
:
# Bash
read user date_change <<< $(echo $line | awk -F: '{print $1, $3}')
或者
# Bash
read user date_change < <(echo $line | awk -F: '{print $1, $3}')
或者
# Bourne
read user date_change <<EOF
`echo $line | awk -F: '{print $1, $3}'`
EOF
然而,awk
是不必要的:
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
答案3
密码最后更改的日期列在 /etc/shadow 的第三个字段中(以 1970/01/01 以来的天数编码)。
然后,您可以使用 chage 实用程序在之后强制更改密码n自上次更改以来的天数。但请注意,此设置是持久性的,它将每隔n天,所以如果您不想要这样,您将必须在第一次更改后在第二次运行中重置它。
我真的很想要一个在首次登录时强制更改密码的选项,就像 MacOS 和 Windows 提供的一样。