警告密码过期而不强制更改

警告密码过期而不强制更改

这很简单。我想弄清楚/etc/login.defs和/或中的更改的组合是什么/etc/pam.d/system-auth-ac。我需要执行以允许以下行为:

  • 我希望用户的密码有效期为 60 天。

  • 60 天后,系统需要在用户登录时对他们大喊大叫,告诉他们需要尽快更改密码。

  • 系统不得妨碍用户对系统的访问。

  • 这必须适用于现有用户(非系统帐户UID >=500)以及任何新创建的用户。

理由:有限用户将无法管理系统帐户密码,只能管理系统管理员。因此,用户不应该因为管理员错过密码更改而阻碍对系统的访问。帐户数量相当少(也许 9 个或 10 个),但我们都是人,我们时不时会忘记做一些事情。

我不确定是否login.defsPAM提供这个。该文档让我相信,您可以让系统强制用户在密码过期时更改其密码,或者您可以让密码根本不会过期。第三种选择是将密码期限设置为某个较大的值,例如 9,999 天,然后开始警告用户其密码将在 9,936 天后过期,但这也不是我真正需要的。我已经完成了其他类型的PAM配置,所以这不是我第一次绕街区旅行。我只是被这个问题困住了。

PAM那么,这可以用/来完成login.defs,还是我需要另一个实用程序来代替它们?

答案1

如果您不反对使用自定义脚本,请尝试将此作为pam_exec脚本:

#! /bin/bash
LAST_DATE=$(date -d "$(chage -l $PAM_USER  | awk -F: '/Last password/{print $2}')" '+%s')
TODAY=$(date '+%s')
MAX_AGE=60
if (( (($TODAY - $LAST_DATE) / 86400) > $MAX_AGE ))
then
    echo "Please change your password!"
fi

将其保存在某处(例如,/usr/local/bin/pass-warn.sh),然后添加一行/etc/pam.d/sshd

session optional pam_exec.so stdout /usr/local/bin/pass-warn.sh

答案2

如果您设置了密码有效期,那么pam_unix.so密码过期后将拒绝其身份验证。要执行您想要的操作,您可以在他们的登录脚本中添加一些内容。例如,我可以将以下内容添加到/etc/profile.d

#!/bin/bash
maxDays=30
dayLastChanged=$(passwd -S $(whoami) | awk '{print $3}')

currentTimestamp=$(date "+%s")
lastChangeTimestamp=$(date -d $dayLastChanged "+%s")

timestampDifference=$(( $currentTimestamp - $lastChangeTimestamp ))
maxSeconds=$(( $maxDays * 86400 ))

if [[ $timestampDifference -gt $maxSeconds ]]; then    
   echo "Yo, you need to change your password bud. Otherwise the guys with white-on-white ties are coming for you."    
fi

相关内容