이것은 매우 간단합니다. /etc/login.defs
and/or 의 변화의 조합이 무엇인지 알고 싶습니다 /etc/pam.d/system-auth-ac
. 다음 동작을 허용하려면 구현해야 합니다.
사용자의 비밀번호가 60일 동안 유효하도록 하고 싶습니다.
60일이 지나면 시스템은 사용자가 로그인할 때 소리를 지르며 가능한 한 빨리 비밀번호를 변경해야 한다고 알려야 합니다.
시스템은 사용자의 시스템 액세스를 방해해서는 안 됩니다.
이는 기존 사용자(비시스템 계정
UID >=500
)는 물론 새로 생성된 사용자에게도 적용되어야 합니다.
이유: 제한된 사용자는 시스템 계정 비밀번호를 관리할 수 없으며 시스템 관리자만 관리할 수 있습니다. 따라서 관리자가 비밀번호 변경을 놓쳐서 사용자가 시스템에 액세스하는 것이 차단되어서는 안 됩니다. 계정 수는 상당히 적지만(9개 또는 10개 정도) 우리는 모두 인간이기 때문에 때때로 해야 할 일을 잊어버립니다.
login.defs
이것을 제공하는지 또는 제공하는지 잘 모르겠습니다 PAM
. 문서를 보면 시스템이 사용자에게 비밀번호가 만료될 때 비밀번호를 변경하도록 강제하거나 비밀번호가 전혀 만료되지 않도록 할 수 있다고 믿게 됩니다. 세 번째 옵션은 비밀번호 사용 기간을 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