Comment configurer Linux pour imposer aux nouveaux utilisateurs de changer leur mot de passe lors de la première connexion

11

J'essaie de configurer la politique de mot de passe des utilisateurs sur RHEL 6.6 et je veux que le système demande aux utilisateurs nouvellement créés de changer le mot de passe initial lors de la première connexion.

Notez que j'ai essayé de définir la variable EXPIRE sur 0 et INACTIVE sur -1 dans / etc / default / useradd, mais cela conduit à l'expiration du nouveau compte utilisateur après sa création. La sortie de la commande chage après la création de l'utilisateur avec ces variables est:

 # 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

Lorsque j'essaye de me connecter sous foo user, le message "Votre compte a expiré. Veuillez contacter votre administrateur système" s'affiche.

Mais si j'ouvre la fenêtre «Propriétés de l'utilisateur», sélectionnez l'onglet «Informations sur le mot de passe» et cochez «Forcer le changement de mot de passe à la prochaine connexion», le résultat sera ce que j'attends. Le nouvel utilisateur sera invité à changer de mot de passe. La sortie de la commande chage dans ce cas sera:

 # 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

Lorsque je me connecte sous l'utilisateur foo2, le système me demande de changer le mot de passe.

Alors, existe-t-il un moyen de configurer le système pour définir les paramètres du compte utilisateur lors de la création, comme dans le deuxième cas?

Mise à jour

 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

Même si je commente INACTIVE ou si je la définis sur une valeur positive, le compte est expiré, mais pas un mot de passe.

De plus, j'ai configuré PAM sur la machine.

Upd 2

J'ai vérifié cela sur la machine avec RHEL 6.2 et sans configuration PAM. L'effet est le même.

Mike_Lychkov
la source
Vous devriez essayer d'utiliser chage -d 0 {user-name}.
Hastur
Est-il possible de le faire automatiquement lors de la commande useradd, pas avec des commandes ou des actions supplémentaires?
Mike_Lychkov
1
EXPIRE=0en /etc/default/useradddevrait faire le travail. J'ai lu que tu as essayé. Pouvez-vous ajouter les lignes non commentées de /etc/default/useradd? Il est verrouillé même si vous ne spécifiez pas INACTIVE = -1, mais une valeur différente, ou si vous commentez cette ligne? Pouvez-vous spécifier si les comptes sont verrouillés même lorsqu'ils sont créés par ligne de commande. Et, s'il vous plaît, lorsque vous avez une question différente, postez-la sur une page séparée si elle aura une réponse différente.
Hastur
1
L'utilisation adduservous permet de mettre la chagecommande /usr/local/sbin/adduser.local. Vous pouvez également définir le champ d'âge dans / etc / shadow directement sur 0. useraddest "l'utilitaire de bas niveau", destiné à être utilisé en conjonction avec d'autres commandes.
mpez0

Réponses:

1

Puisque vous posez des questions sur RHEL6, j'ai regardé le code source de useradd (qui est fourni dans le cadre du package «shadow»). Dans useradd.c est une fonction appelée new_spent où elle configure une nouvelle entrée de mot de passe caché. Là, il résout le problème du "mot de passe expiré à la création" de cette façon:

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

Soooo ... Si vous définissez un zéro, cela en fait un -1.

Les auteurs du programme ont codé spécifiquement contre la définition du vieillissement à 0, donc cela n'aura pas d'importance si vous le définissez à 0 dans le paramètre / etc / default / useradd pour EXPIRE. (Si c'était moi qui faisais ce code, j'aurais cherché à voir si l'utilisateur définissait le mot de passe dans la commande et permettait ensuite l'expiration, mais ce n'était pas moi ...)

En outre, il a été suggéré ci-dessus que vous puissiez placer un script dans /usr/local/sbin/adduser.local pour exécuter une commande 'chage'. C'était un bon conseil pour un système Debian / Ubuntu où useradd est un script perl qui exécute effectivement ce fichier s'il le trouve, mais sur RHEL la commande useradd est un binaire C.

Si j'étais vous et que j'étais déterminé à obtenir ce comportement sur l'utilisateur RHEL6, j'obtiendrais le SRPM pour le package shadow, commenter ces lignes ci-dessus et faire un rpmbuild sur le package et rockaway. Gagnant!

P. Heffner
la source
1

Pourquoi ne pas l'ajouter à un script?

passwd -e username

Si tout ce que vous recherchez est la première connexion, cela fonctionnera. Le -eexpire le mot de passe du compte immédiatement, donc la prochaine connexion, l'utilisateur est obligé de mettre à jour son mot de passe? (voir man passwd)

tniles
la source
Et si vous cherchez une solution spécifique à un chage, essayez peut-être le commutateur "-M / - maxdays" avec une valeur de '0'. Je ne connais pas vraiment le chage, mais à partir de la page de manuel, cela semble raisonnable.
tniles
-1

Automatique:

Mettez à jour ce fichier:

/etc/default/useradd

Ce fichier contient les détails, ce que tous les paramètres seront appliqués aux nouveaux utilisateurs créés dans le système avec la commande useradd.

Définissez simplement la valeur de EXPIRE = 0 dans ce fichier, et après cela, chaque fois qu'un nouvel utilisateur sera créé, il sera obligé de changer le mot de passe lors de la prochaine connexion.

Source: GeekRide

Maintenant, éditer ce fichier dans le terminal était difficile. J'ai donc changé les autorisations du fichier en 777 en utilisant:

chmod 777 /etc/default/useradd

et édité dans grub.

(Merci à la commande Linux .)

Vérifié dans ma machine virtuelle Ubuntu 12.04.5.

Manuel:

Utilisez la syntaxe suivante pour forcer un utilisateur à changer son mot de passe lors de la prochaine connexion sur un Linux:

# chage -d 0 {user-name}

Dans cet exemple, forcez Tom à changer son mot de passe à la prochaine connexion, entrez:

# chage -d 0 tom

-d 0: définissez le nombre de jours écoulés depuis le 1er janvier 1970, date de la dernière modification du mot de passe. La date peut également être exprimée au format AAAA-MM-JJ. En le mettant à zéro, vous allez forcer l'utilisateur à changer de mot de passe lors de la première connexion.

Source: nixCraft

Copier-coller pur. Au sens propre. ;)
Vérifié sur ma machine virtuelle Ubuntu 12.04.5.

Varad Mahashabde
la source
L'OP veut que cela se fasse automatiquement lors de la commande useradd, si vous lisez les commentaires ci-dessus.
Insane
Je ne commenterai rien d'autre, mais chmod -R 777 /c'est une chose très stupide à faire!
PulseJet
@PulseJet oui je sais que rétrospectivement et cette réponse était il y a longtemps, alors s'il vous plaît laissez-le être
Varad Mahashabde
@VaradMahashabde alors je suggérerais de supprimer de telles choses de vos réponses, car elles devraient au moins être sensées pour la prochaine personne qui les lira.
PulseJet