Aller directement au contenu principal

On a récemment signalé des problèmes de connexion pour les utilisateurs nouvellement enregistrés lors de l'utilisation de SSH. L'administrateur système enregistre Alice, puis demande à Alice d'essayer de se connecter via SSH. Alice signale une erreur d'authentification.

Les messages du fichier syserr_log semblent indiquer qu'Alice n'est pas enregistrée.

05:04:02 Processus 1111812D, root.root (sshd), créé. 
05:04:02 root (sshd) : [AUTH] [INFO] sshd [PID=0x1111812D] : Utilisateur invalide alice 
+ provenant de 127.0.0.1 
05:04:02 root (sshd) : [AUTH] [INFO] sshd [PID=0x1111812D] : input_userauth_req 
+ utilisateur : utilisateur invalide alice 
05:04:02 root (sshd) : [AUTH] [INFO] sshd [PID=0x1111812D] : Échec pour l'utilisateur non valide alice provenant de 127.0.0.1 port 54869 ssh2 
05:04:06 root (sshd) : [AUTH] [ERR] sshd [PID=0x1111812D] : erreur : impossible d'obtenir 
+les informations shadow pour NOUSER 
05:04:06 root (sshd) : [AUTH] [INFO] sshd [PID=0x1111812D] : Échec de la vérification du mot de passe pour 
+l'utilisateur invalide alice depuis 127.0.0.1, port 54869, ssh2

 

Mais si Alice utilise un client Telnet plutôt qu'un client SSH, elle peut se connecter sans problème.

05:04:23 Processus 1111812E, PreLogin.System (pré-connexion), créé. 
05:04:38 Processus 1111812E est passé à alice.CAC (connexion).

 

De plus, si, au lieu d'essayer de se connecter immédiatement après son inscription, Alice attend quelques minutes, elle pourra se connecter sans problème.

05:12:51 Processus 11118130, root.root (sshd), créé. 
05:12:55 root (sshd) : [AUTH] [INFO] sshd [PID=0x11118130] : Mot de passe accepté 
+pour alice depuis 127.0.0.1 port 54909 ssh2 
05:12:55 Processus 11118131, root.root (sshd), créé. 
05:12:55 Processus 11118131 est passé à alice.CAC (connexion).

 

Ce qui est vraiment frustrant, c'est que parfois, le premier utilisateur nouvellement inscrit n'a aucun problème pour s'authentifier via SSH, alors que le deuxième en rencontre.

Mais alors, que se passe-t-il ?

Le fait que des programmes POSIX tels que SSH accèdent directement à la base de données d'enregistrement pose certains problèmes. C'est pourquoi leurs appels d'authentification sont gérés par le processus posix_regdb_server. Ce dernier conserve une copie de la base de données d'enregistrement à laquelle il se réfère pour déterminer si un utilisateur est valide. Chaque fois que posix_regdb_server recherche un identifiant utilisateur, il compare l'heure actuelle à l'heure à laquelle il a lu la base de données d'enregistrement pour la dernière fois et, si cette heure remonte à plus de 5 minutes, il relit la base de données. Il est donc possible qu'un utilisateur nouvellement enregistré doive attendre jusqu'à 5 minutes avant de pouvoir se connecter via SSH.

Dans le cas où le premier utilisateur nouvellement enregistré ne rencontre aucun problème, mais que le deuxième en rencontre, voici ce qui se passe : l'administrateur système enregistre Bob et lui demande de se connecter. Comme plus de 5 minutes se sont écoulées depuis la dernière demande d'authentification, le serveur posix_regdb_server actualise sa copie de la base de données, identifie Bob comme un utilisateur valide et celui-ci peut se connecter. L'administrateur système enregistre ensuite Alice et lui demande de se connecter. Cependant, comme cela ne fait qu'une ou deux minutes que Bob s'est connecté, le service posix_regdb_service ne rafraîchit pas sa copie de la base de données ; Alice n'est donc pas trouvée et n'est pas autorisée à se connecter.

Il n'est pas possible de modifier cette fenêtre de 5 minutes. Si vous arrêtez le processus posix_regdb_server, celui-ci actualisera sa copie de la base de données d'enregistrement lors de son redémarrage. En général, il redémarre automatiquement en moins d'une minute, mais cela peut prendre jusqu'à 2 minutes ; vous pouvez donc accélérer le processus, mais pas de manière significative.

Une meilleure stratégie consiste à enregistrer tous les nouveaux utilisateurs en même temps, avant que l'un d'entre eux ne tente de se connecter. Il faut également les enregistrer à un moment où personne n'essaie de se connecter via SSH ; ainsi, lorsque le premier nouvel utilisateur tentera de se connecter, le serveur posix_regdb_server actualisera sa base de données et enregistrera tous les nouveaux utilisateurs en même temps.

Bien sûr, il peut être difficile de trouver un moment où personne n'essaie de se connecter via SSH ; la meilleure stratégie consiste donc à enregistrer tous les nouveaux utilisateurs en même temps, puis à aller se chercher une tasse de café avant de leur dire qu'ils peuvent se connecter.