Avisa sobre expiração de senha sem forçar a mudança

4

É bem simples. Gostaria de descobrir qual combinação de alterações em /etc/login.defs e / ou /etc/pam.d/system-auth-ac . Eu precisaria realizar para permitir o seguinte comportamento:

  • Eu quero que a senha de um usuário seja válida por 60 dias.

  • Após 60 dias, o sistema precisa gritar com o usuário quando ele fizer login, informando que ele precisa alterar sua senha o mais rápido possível.

  • O sistema não deve impedir o acesso do usuário ao sistema.

  • Isso deve se aplicar a usuários existentes (contas que não são do sistema, UID >=500 ), bem como a usuários recém-criados.

Justificativa: Os usuários limitados não estarão gerenciando as senhas da conta do sistema, somente administradores do sistema. Portanto, os usuários não devem ter seu acesso ao sistema impedido porque o administrador perdeu uma alteração de senha. O número de contas é pequeno (talvez 9 ou 10), mas somos todos humanos e nos esquecemos de fazer coisas de tempos em tempos.

Não tenho certeza se login.defs ou PAM oferecem isso. A documentação me leva a acreditar que você pode fazer com que o sistema force o usuário a alterar sua senha quando ela expirar, ou a senha não poderá envelhecer. Uma terceira opção é ter o limite de idade da senha configurado para uma quantia enorme, como 9.999 dias, e então começar a avisar o usuário que sua senha expirará em 9.936 dias, mas isso não é realmente o que eu preciso também. Eu fiz outros tipos de configuração de PAM , então não é minha primeira viagem ao redor do bloco. Eu só estou preso neste problema.

Então, isso pode ser feito com PAM / login.defs , ou eu preciso de outro utilitário que possa tomar o seu lugar?

    
por the_non-guru_guru 30.12.2014 / 14:53

2 respostas

0

Se você não é avesso a usar um script personalizado, tente isso como um % scriptpam_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

Salve-o em algum lugar (digamos, /usr/local/bin/pass-warn.sh ) e adicione uma linha a /etc/pam.d/sshd :

session optional pam_exec.so stdout /usr/local/bin/pass-warn.sh
    
por 30.12.2014 / 15:18
0

Se você definir a duração da senha, pam_unix.so negará a autenticação após a expiração da senha. Para fazer o que você está querendo, você provavelmente pode adicionar algo aos seus scripts de login. Por exemplo, posso adicionar o seguinte a /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
    
por 30.12.2014 / 15:25