Projet

Général

Profil

Tâche #9924

Scénario #9923: Instabilité du service en cas d'authentifications OTP concurrentes

Plantages du service liées à l'authentification OTP

Ajouté par Bruno Boiget il y a plus de 9 ans. Mis à jour il y a plus de 9 ans.

Statut:
Reporté
Priorité:
Normal
Assigné à:
Début:
15/12/2014
Echéance:
% réalisé:

0%

Temps estimé:
2.00 h
Temps passé:
Restant à faire (heures):
0.0

Description

L'académie de Besançon a remonté des problèmes d'instabilité du service SSO sur leur serveur Seshat.

Des problèmes équivalents semblent également survenir dans une moindre mesure à la Réunion (Christophe a mis en place une surveillance régulière du service pour le relancer en cas d'arrêt).

message de Sylvain Dubuisson après étude du problème:

Bonjour,

Voici les dernieres nouvelles de mes recherches sur les pb OTP avec seshat (eole-sso) de Besançon.
Le problème ne peut clairement pas être résolu simplement chez nous. Il est necessaire de repenser la manière dont l'authentification OTP est faite par eole-sso pour que l'application puisse supporter des charges importantes.

J'ai ajouté avant et après pam.authenticate() un log.msg pour voir le nombre d'authentification et le temps qu'elles prennent.
Nous sommes à 2 à 3 secondes pour une authentification OTP.
Nous sommes à 140-160 demandes d'authentification OTP par heure sur les périodes où nous subissons les segfault/plantage.
Dès arret du serveur, nous perdons les tickets de session dans le serveur eole-sso ce qui provoque une vague de nouvelle ré-authentification donc un nouveau segfault de l'application.
Nous sommes à plus de 100 connexions OTP par heure sur le serveur en journée de notre coté. (en cette période, nous avons des enseignants qui utilisent Sconet Notes en passant par notre portail d'authentification unique)

Le segfault se fait systématiquement dans le module pam_securid.so. Ce module n'est chargé qu'une seule fois en mémoire par le module pam de python qui est lui même présente une seule fois en mémoire. (c'est par conception que çà se passe comme çà)
La librairie pam_securid.so ne supporte pas deux appels concurrents. Lors du deuxième appel, un segfault se produit au moment de la tentative de nettoyage de la mémoire par la librairie.
Apparemment le module supporte d'être chargé plusieurs fois en mémoire et exécuté plusieurs fois en parallèle mais je n'ai pas de moyen de le tester.

J'ai tenté d'utiliser le module threading.Lock() de Python pour gérer/réguler les accès concurrents et n'est obtenu comme résultat que des désynchronisations de clé OTP lié au temps de déblocage du verrou.

Les solutions possibles après cette analyse sont de mon point de vue :
- L'utilisation des fonctions avancées de Python/Twisted pour limiter à un appel à la fois sur pam
- La séparation dans un processus séparer de l'authentification OTP pour éviter la propagation au cache des tickets de eole-sso
- La mise en place d'un multichargement en python de la librairie pam_securid.so pour permettre les demandes simultanées
Ceci nécessite de toute façon de forte compétence en Python, programmation multithreadé et gestion des accès concurrents et compréhension des mécanismes d'appel de fonction.

C'est aujourd'hui un probleme important dans notre académie qui a mis en place ce portail uniquement qui ne supporte pas une charge importante sur l'authentification OTP.


Demandes liées

Copié vers EoleSSO - Tâche #10149: Plantages du service liées à l'authentification OTP Fermé 15/12/2014

Historique

#1 Mis à jour par Bruno Boiget il y a plus de 9 ans

  • Statut changé de Nouveau à En cours
  • Début mis à 15/12/2014

#2 Mis à jour par Bruno Boiget il y a plus de 9 ans

  • Restant à faire (heures) changé de 2.0 à 6.0

Pour l'instant, je teste une solution utilisant reactor.spawnprocess pour lancer l'authentification pam/OTP dans un processus séparé plutôt que dans des threads. Si cela ne résout pas les problèmes de segfault du module pam_securid , on pourrait envisager d'avoir un deuxième serveur qui s'occupe uniquement de lancer ces processus, et y faire appel via RPC dans eolesso.

La ré-écriture en supprimant les threads est en cours, pour pouvoir la tester réellement, j'attend qu'une nouvelle clé de test nous soit fournie et que les appels au serveur RSA de l'académie par une machine de test soit autorisés (demandé à Dominique Lundi 15/12)

Si vraiment on ne trouve pas de solution pour avoir un fonctionnement correct avec le plugin pam_securid.so, on peut étudier le passage par une authentification Radius, qui est à priori gérée par les serveurs d'authentification RSA.

#3 Mis à jour par Bruno Boiget il y a plus de 9 ans

  • Restant à faire (heures) changé de 6.0 à 4.0

#4 Mis à jour par Gilles Grandgérard il y a plus de 9 ans

  • Assigné à mis à Bruno Boiget

#5 Mis à jour par Bruno Boiget il y a plus de 9 ans

  • Statut changé de En cours à Reporté
  • Restant à faire (heures) changé de 4.0 à 0.0

Formats disponibles : Atom PDF