IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Discussion :

Problème de concurrence


Sujet :

Sécurité

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Par défaut Problème de concurrence
    salut,
    donc voilà mon problème: j'ai un serveur (supposé unique) qui se connecte via ssh sur une machine, exécute un script tous les x temps et récupère des données.
    sauf que ce truc a une grande faille de sécurité: il suffit de lancer un 2eme serveur qui fait la même chose, donc le script exécuté va utiliser les même ressources que le 1er --> possibilité d'entrer en conflit --> accès à des données supposées etre inaccéssibles.
    je voudrai remédier à ce problème avec les semaphores.
    Question: comment on utilise les semaphores dans les scripts UNIX?
    si quelqu'un a une autre proposition n'hésitez pas
    merci d'avance

  2. #2
    Membre Expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Par défaut
    Bonjour,

    Citation Envoyé par soulhouf
    donc voilà mon problème: j'ai un serveur (supposé unique) qui se connecte via ssh sur une machine, exécute un script tous les x temps et récupère des données.
    sauf que ce truc a une grande faille de sécurité: il suffit de lancer un 2eme serveur qui fait la même chose, donc le script exécuté va utiliser les même ressources que le 1er --> possibilité d'entrer en conflit --> accès à des données supposées etre inaccéssibles.
    je voudrai remédier à ce problème avec les semaphores.
    Question: comment on utilise les semaphores dans les scripts UNIX?
    si quelqu'un a une autre proposition n'hésitez pas
    Les problèmes d'accès concurrents par des scripts sont généralement assez simple à résoudre.

    Il n'y a, généralement, pas besoin d'aller chercher jusqu'aux sémaphores fournis par le système et il est assez simple de mettre en place un pis-aller à base de fichiers de verrouillage.

    J'explique :

    A la base, on peut commencer le script en testant l'existence d'un fichier de verrouillage. S'il existe, fin de chantier. S'il n'existe pas, on le crée, on fait ce qu'on a a faire, et on le détruit en partant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/bash
     
    if [[ -e /var/lock/mon_semaphore ]]
    then
       echo "Ce script tourne déjà"
       exit
    fi
     
    touch /var/lock/mon_semaphore
     
    sleep 60
     
    rm -f /var/lock/mon_semaphore
    C'est simple et fonctionnel.

    Il y a cependant un petit défaut ... si le traitement plante ou avorte, ou bien s'il est tué, ou si la machine est arrêtée lors du traitement ... le fichier de verrouillage n'est pas détruit et il devient impossible de relancer le traitement.


    Dans ce cas, un contournement efficace consiste à créer le fichier de verrouillage, non pas vide, mais avec une information permettant d'identifier le process qui l'a crée : son PID

    Ainsi, au démarrage on teste l'existance du fichier, et s'il existe, on verifie que le process dont le PID est dans le fichier de verrouillage existe toujours. Si oui, on ne va pas plus loin, sinon on met le PID courant dans le verrou et on fait notre traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/bin/bash
     
    if [[ -e /var/lock/mon_semaphore ]] && ( ps -p $(cat /var/lock/mon_semaphore) > /dev/null 2>&1 )
    then
       echo "Ce script tourne déjà"
       exit
    fi
     
    echo $$ > /var/lock/mon_semaphore
     
    sleep 60
     
    rm -f /var/lock/mon_semaphore
    C'est déjà beaucoup plus robuste ...

    Le seul cas dans lequel cela peut être pris en défaut, c'est si le même PID est réattribué à un process actif au moment du test ...

    Même ce cas peut être géré en regardant le champ CMD de la commande ps dont j'ai volontairement ignoré la sortie ci-dessus ...


    Voila déjà de quoi faire !

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    Citation Envoyé par soulhouf
    Question: comment on utilise les semaphores dans les scripts UNIX?
    les sémaphores sont utilisés dans les programmes en C, pas dans les scripts Shell.


  4. #4
    Membre confirmé Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Par défaut
    2Eurocents >> merci beaucoup d'avoir pris le temp et réfléchit à ce problème critique
    ta proposition me plait et je te remercie infiniment
    laurentschneider >> merci toi aussi pour ta reponse

Discussions similaires

  1. Db Express : un concurrent d'ADO ?
    Par Bruno75 dans le forum Bases de données
    Réponses: 5
    Dernier message: 09/12/2003, 09h23
  2. [EJB] Accès concurrents à la base de données
    Par cameleon2002 dans le forum Java EE
    Réponses: 10
    Dernier message: 23/09/2003, 11h31
  3. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo