查找未更改密码的用户?

查找未更改密码的用户?

我最近添加了一些用户,并给了他们随机生成的密码。我们已经指示他们更改密码,但我们怀疑其中大部分人并没有这样做。

我们如何才能使尚未更改密码的所有人密码过期?

我们在 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 提供的一样。

相关内容