Comme de plus en plus de gens commencent à utiliser SSH à la place de Telnet, je vois de plus en plus de confusion dans la façon dont le démon SSH traite les avertissements, l'expiration et les délais de grâce des mots de passe. Une partie de la confusion est causée par l'attente erronée que SSH reproduira le comportement de Telnet et de la commande de connexion. Ce blog est une tentative d'explication de son fonctionnement.
Tout d'abord, rappelez-vous que SSH vient du monde Unix/Linux et que ce monde ne dispose pas de l'avertissement de 7 jours avant expiration avec possibilité de changer le mot de passe que la commande de connexion VOS fournit. La version originale du démon SSH ne fournissait pas non plus cet avertissement/option.
À partir de la version 2.0.0e (corrections des bogues ssl-205 et ssl-268), ce comportement a été modifié de sorte que le démon SSH demandait un nouveau mot de passe 7 jours avant que celui-ci n'expire, tout comme la commande de connexion. Cependant, les connexions mettant en place un tunnel étaient suspendues à la demande de changement de mot de passe car la demande n'était jamais affichée à l'utilisateur. Le problème était que la configuration du tunnel n'attribue généralement pas de pseudo-terminal, de sorte qu'il n'y avait pas d'endroit pour afficher l'invite.
Ainsi, à partir de la version 2.0.0k (ssl-295), le démon SSH a été modifié pour revenir à son comportement d'origine. Une variable externe a été ajoutée au code pour permettre aux sites d'activer l'invite de changement de mot de passe avant expiration s'ils le souhaitent. Pour ce faire, la variable sshd$pw_change_method a été mise à 1.
Notez que le comportement du démon SSH lorsqu'il demande un nouveau mot de passe pendant la période d'avertissement de 7 jours est différent du comportement de la connexion avec Telnet. Telnet/login vous permet de simplement appuyer sur la touche retour pour sauter l'étape de modification du mot de passe. Le démon SSH exige que vous changiez le mot de passe. Le comportement est différent en raison de la façon dont le démon SSH change le mot de passe. Si vous ajoutez l'argument change_password à la commande de connexion, vous n'êtes pas non plus autorisé à sauter l'étape de changement du mot de passe. C'est essentiellement ce que fait le démon SSH. Le bogue ssl-279 décrit cette différence de comportement mais a été considéré comme n'étant pas un bogue par l'ingénierie. Une autre chose que vous pouvez remarquer si vous vous connectez à la fois avec Tel/login et SSH est que Telnet/login signalera que votre mot de passe expirera dans N jours alors que le démon SSH peut signaler que votre mot de passe expirera dans N+1 jours. Le comportement dépend de l'heure du dernier changement de mot de passe. Ceci a été signalé comme le bogue ssl-368.
La discussion ci-dessus porte sur la période de la période d'avertissement de 7 jours. Qu'en est-il de la période de grâce (définie par la valeur password_grace_time de la commande login_admin) ? Pendant la période de grâce, le démon SSH vous permet de vous connecter en utilisant l'ancien mot de passe et exige que vous entriez un nouveau mot de passe, tout comme le Telnet/login. Cependant, le message affiché par le démon SSH est un peu trompeur. Il indique que votre mot de passe va bientôt expirer. La suggestion ssl-366 a été saisie pour demander que le message soit modifié afin d'indiquer que votre mot de passe a expiré. Cependant, quel que soit le message, le résultat final est le même - vous devez saisir un nouveau mot de passe.
Le dernier délai à prendre en considération est celui qui suit le délai de grâce. Pendant cette période, le démon SSH apparaît pour vous permettre de vous connecter en utilisant l'ancien mot de passe et il vous demande un nouveau mot de passe, mais après avoir saisi le nouveau mot de passe, il met fin à la connexion. La commande Telnet/login mettra fin à la connexion après que vous ayez entré l'ancien mot de passe. Ceci est documenté par la suggestion ssl-367, le démon SSH ne devrait pas demander un nouveau mot de passe.
Il y a une autre différence entre le comportement du démon Telnet/login et celui du démon SSH lorsqu'il s'agit de changer un mot de passe. Après avoir changé le mot de passe, le démon SSH déconnecte la session, ce qui vous oblige à vous reconnecter et à vous connecter avec le nouveau mot de passe.
Enfin, un autre bug qui doit être discuté. Si le paramètre req_change_first_login tel qu'il est affiché par la commande set_login_security est défini à "yes" alors le démon SSH traitera tous les mots de passe comme pas ont expiré quel que soit leur état réel. Ce bogue, ssl-361, est corrigé dans la version 2.0.0u et il est recommandé que tout module dont le paramètre req_change_first_login est réglé sur yes passe au moins à cette version immédiatement.
Comme le processus sshd bifurque d'un nouveau processus pour chaque connexion, il est possible d'installer la nouvelle version du fichier sshd.pm sans forcer tous les utilisateurs connectés à SSH à quitter le système. Pour ce faire, vous devez
- Changer les répertoires en >system>openssl>sbin
- Renommez le fichier sshd.pm en cours d'exécution en original_sshd.pm
- Déplacer une copie du nouveau sshd.pm dans le répertoire actuel
- Execute the command “kill (contents <etc>sshd.pid)” to stop the parent sshd process
- Passez à l'utilisateur root avec la commande switch_to_root. Vous devez connaître le mot de passe de l'utilisateur root.
- Démarrer le nouveau processus sshd. Si vous ne savez pas comment démarrer sshd, consultez votre module_start_up.cm
La procédure pour changer la valeur de la variable sshd$pw_change_method est presque la même. Les étapes 1, 2, 4, 5 et 6 sont les mêmes, mais l'étape 3 passe à
3. Copie de l'original_sshd.pm à sshd.pm
et une nouvelle étape 3a est ajoutée pour définir réellement la variable
3a. Exécuter la commande
"set_external_variable sshd$pw_change_method -in sshd.pm -type integer -to 1"