No OpenBSD 5.6 preciso provisionar várias contas de usuário com senhas padrão. Gostaria que os usuários, no primeiro login SSH, fossem forçados a alterar suas senhas padrão.
No CentOS e no Debian posso fazer isso usando chage -d 0 $username
.
Parece no manual login.conf que eu deveria conseguir realizar a mesma coisa no OpenBSD com algo como:
usermod -f 1 $username
ouusermod -f "Jan 1 2015" $username
Configurá-lo dessa forma solicita a alteração apropriada em userinfo $username
, mas efetuar login como $username via SSH na verdade não impõe uma alteração de senha - ele abre o shell com bastante alegria, alheio ao fato de a senha ter sido marcada como inativa acima.
Algumas postagens de 2000 falam sobreescrevendo um shell de login wrapperpara forçar uma alteração de senha. Dito isto, dada a estrutura óbvia em usermod
e chpass
, parece que isso está embutido, mas não está documentado tão amplamente quanto os equivalentes do Linux.
Um profissional do BSD pode lançar alguma luz sobre a abordagem convencional para isso?
Responder1
De acordo com login.conf (5)
, o período de carência padrão para uma senha expirada (também conhecida como "morta") é 0. A menos que esse valor seja definido em /etc/login.conf
, um usuário não poderá fazer login para alterar sua senha se a data atual do sistema for maior que o 6º campo da senha de um usuário entrada em /etc/master.passwd
- consulte passwd (5)
.
Para resolver o problema, você precisará especificar uma data formatada em número de segundos desde a época que está dentro do período de carência de sua escolha, por exemplo, 2 semanas, que você também configurará no formato /etc/login.conf
. Para escolher manualmente o prazo de validade da senha de ontem, podemos usar:
# date -d yesterday +%s
1463597700
E, em seguida, insira esse valor no campo nº 6 /etc/master.passwd
usando vipw
. A linha relevante ficará mais ou menos assim:
user:$2b$08$01234567890abcdef:1000:1000::1463597700:0:user:/home/user:/bin/ksh
Executar usermod como você indicou ( usermod -f "May 17 2016" user
) fará essencialmente a mesma coisa, mas em ambos os casos /etc/login.conf
também deve ser alterado anexando o seguinte à default:\
seção relevante para sua classe de usuário:
:password-dead=2w:\
:password-warn=2w:
A primeira linha permite uma carência de duas semanas para que o usuário altere sua senha; a segunda linha emitirá avisos de que a senha de um usuário está programada para expirar. Se expirar, seus usuários verão algo como o seguinte:
WARNING: Your password has expired.
You must change your password now and login again!
Changing local password for user.
Old password:
New password:
Retype new password:
Connection to openbsd-server closed.
Você também pode configurar :passwordtime=7776000:
para /etc/login.conf
impor uma alteração de senha adicional a cada 90 dias. Observe que se você precisar de verificações adicionais sobre a complexidade da senha dos usuários, como proibir a reutilização de senha, você deverá instalar e configurar passwordqc
a partir de pacotes ou outro programa verificador de senha.