Como configurar o linux para forçar novos usuários a alterar sua senha no primeiro login

11

Estou tentando configurar a política de senha de usuários no RHEL 6.6 e quero que o sistema solicite que os usuários recém-criados alterem a senha inicial no primeiro login.

Observe que tentei definir a variável EXPIRE para 0 e INACTIVE para -1 em / etc / default / useradd, mas isso leva à expiração da nova conta de usuário após a criação. A saída do comando chage após a criação do usuário com estas variáveis ​​é:

 # chage -l foo
 Last password change                                : Feb 22, 2015
 Password expires                                    : May 23, 2015
 Password inactive                                   : never
 Account expires                                     : Feb 22, 2015
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

Quando tento fazer login com o usuário foo, é exibida a mensagem "Sua conta expirou. Entre em contato com o administrador do sistema".

Mas se eu abrir a janela 'Propriedades do usuário', selecione a guia 'Informações da senha' e marque 'Forçar alteração da senha no próximo login', o resultado será o que eu espero. O novo usuário será solicitado a alterar a senha. A saída do comando chage nesse caso será:

 # chage -l foo2
 Last password change                                : password must be changed
 Password expires                                    : password must be changed
 Password inactive                                   : password must be changed
 Account expires                                     : never
 Minimum number of days between password change      : 1
 Maximum number of days between password change      : 90
 Number of days of warning before password expires   : 7

Quando eu entro no usuário foo2, o sistema pede que eu mude a senha.

Portanto, existe alguma maneira de configurar o sistema para definir os parâmetros da conta do usuário na criação, como no segundo caso?

Upd

 cat /etc/default/useradd
 # useradd defaults file
 GROUP=100
 HOME=/home
 INACTIVE=-1
 EXPIRE=0
 SHELL=/bin/bash
 SKEL=/etc/skel
 CREATE_MAIL_SPOOL=yes

Mesmo se eu comentar INATIVO ou defini-lo como um valor positivo, a conta expirou, mas não uma senha.

Além disso, configurei o PAM na máquina.

Upd 2

Eu verifiquei isso na máquina com o RHEL 6.2 e sem a configuração do PAM. Efeito é o mesmo.

Mike_Lychkov
fonte
Você deveria tentar usar chage -d 0 {user-name}.
Hastur 22/02
Existe maneira de fazê-lo automaticamente durante o comando useradd, não com comandos ou ações adicionais?
22815 Mike_Lychkov
11
EXPIRE=0em /etc/default/useradddeve fazer o trabalho. Eu li que você tentou. Você pode adicionar as linhas não comentadas de /etc/default/useradd? Ele está bloqueado mesmo se você não especificar INACTIVE = -1, mas um valor diferente, ou se você comentar essa linha? Você pode especificar se as contas estão bloqueadas mesmo quando criadas pela linha de comando. E, por favor, quando você tiver uma pergunta diferente, poste-a em uma página separada, caso a resposta seja diferente.
Hastur 22/02
11
Usando adduserpermite que você coloque o chagecomando no /usr/local/sbin/adduser.local. Você também pode definir o campo de idade em / etc / shadow como 0 diretamente. useraddé o "utilitário de baixo nível", destinado a ser usado em conjunto com outros comandos.
mpez0

Respostas:

1

Como você está perguntando sobre o RHEL6, observei o código-fonte do useradd (que é entregue como parte do pacote 'shadow'). Em useradd.c existe uma função chamada new_spent, na qual configura uma nova entrada de senha de sombra. Lá, ele soluciona o problema "senha expirada na criação" desta maneira:

if (0 == spent->sp_lstchg) {
/* Better disable aging than requiring a password change */
spent->sp_lstchg = -1;

Soooo ... Se você definir um zero, torna-se um -1.

Os autores do programa codificaram especificamente contra a configuração do vencimento como 0, portanto, não importa se você o define como 0 no parâmetro / etc / default / useradd para EXPIRE. (Se fosse eu que fizesse esse código, eu teria procurado para ver se o usuário estava definindo a senha no comando e permitindo a expiração, mas não fui eu ...)

Além disso, foi sugerido acima que você pode colocar um script em /usr/local/sbin/adduser.local para executar um comando 'chage'. Este foi um bom conselho para um sistema Debian / Ubuntu em que useradd é um script perl que realmente executa esse arquivo se o encontrar, mas no RHEL o comando useradd é um binário em C.

Se eu fosse você e estivesse determinado a obter esse comportamento no usuário RHEL6, obteria o SRPM para o pacote shadow, comente as linhas acima e faça uma rpmbuild no pacote e rockaway. Ganhando!

P. Heffner
fonte
1

Por que não adicionar isso a um script?

passwd -e username

Se tudo o que você procura é o primeiro login, isso funcionará. O -eexpira a senha da conta imediatamente; assim, no próximo login, o usuário é forçado a atualizar sua senha? (ver man passwd)

tniles
fonte
E se você estiver procurando por uma solução específica de mudança, talvez tente a opção "-M / - maxdays" com o valor '0'. Eu não estou realmente familiarizado com o chage, mas, na página de manual, isso parece razoável.
tniles
-1

Automático:

Atualize este arquivo:

/etc/default/useradd

Este arquivo contém os detalhes, quais todas as configurações serão aplicadas aos novos usuários criados no sistema com o comando useradd.

Basta definir o valor de EXPIRE = 0 neste arquivo e, depois disso, sempre que um novo usuário for criado, eles serão forçados a alterar a senha no próximo login.

Fonte: GeekRide

Agora, editar esse arquivo no terminal foi difícil. Então, alterei as permissões do arquivo para 777 usando:

chmod 777 /etc/default/useradd

e editou-o no grub.

(Graças ao comando Linux .)

Verificado na minha Ubuntu 12.04.5 VM.

Manual:

Use a seguinte sintaxe para forçar um usuário a alterar sua senha no próximo login em um Linux:

# chage -d 0 {user-name}

Neste exemplo, force o tom a alterar sua senha no próximo logon, digite:

# chage -d 0 tom

-d 0: define o número de dias desde 1º de janeiro de 1970 quando a senha foi alterada pela última vez. A data também pode ser expressa no formato AAAA-MM-DD. Ao defini-lo como zero, você forçará o usuário a alterar a senha no primeiro login.

Fonte: nixCraft

Cópia-pasta pura. Literalmente. ;)
Verificado na minha Ubuntu 12.04.5 VM.

Varad Mahashabde
fonte
O OP quer isso feito automaticamente durante o comando useradd, se você ler os comentários acima.
Insane
Não vou comentar mais nada, mas chmod -R 777 /é uma coisa muito estúpida de se fazer!
precisa saber é o seguinte
@PulseJet sim eu sei que, em retrospecto e esta resposta foi há muito tempo por isso, basta deixá-lo ser
Varad Mahashabde
@ VaradMahashabde, então sugiro remover essas coisas de suas respostas, pois elas devem ser pelo menos sensatas para a próxima pessoa que as ler.
precisa saber é o seguinte