• # Idée de daemon

    Posté par . En réponse au message Comment interdire par défaut, l'accès aux réseaux pour toutes les applications ?. Évalué à 3. Dernière modification le 04 octobre 2019 à 18:44.

    Voici ce à quoi j'ai pensé. Proposez-moi mieux, plus simple, de déjà existant... Partagez vos idées !

    Au lancement du service (qu'il nous faut écrire ;) :
    - changer netns de tous les processus ayant un exe dans leur proc pour NONET (aucune interface déclarée)
    - création de tous les netns nécessaires pour la configuration
    - appliquer la configuration avec un processus de surveillance :

    Fichier de configuration :

    # création des alias interface
    alias <alias if name> <interface>
    # affection des ns aux groupes d'applications
    grp [<parent grp name>:[<parent grp name>:[..]]]<grp name> <exe path> \
     [+<checker function> [+<checker function> [..]]] \
     [<alias if name> [<alias if name> [..]]]|IDEM \
     [LOCKDOWN]

    Exemple :

    alias local enp3s0
    alias net eno1
    grp Ping /bin/ping local net
    grp Eclipse /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java +checkEclipse local
    grp Eclipse:Python3 /usr/bin/python3 local net
    grp Eclipse:Python3:* * local

    Le processus de surveillance réalise les opérations suivantes (ttes les n secondes) :

    • liste l'ensemble des processus en cours : si le processus considéré est déjà enregistré alors ne fait rien. sinon enregistre le processus :
      • recherche dans /proc/<pid>/exe et s'il le trouve récupère le chemin pointé (ex : /usr/bin/python3)
      • recherche dans les chemins en conf une correspondance non bloquée (bloquée = LOCKDOWN) et validée (tous les routines de vérification sont satisfaites comme +checkEclipse dans l'exemple) (ex : -> Eclipse:Python3)
        • la chaine des parents doit être reconstruite (ex : le processus Python possède-t-il comme parent Eclipse ? ie le PPID du processus Python appartient-il au groupe Eclipse ?) si non, alors on ne fait rien de plus si oui, alors on poursuit ainsi de suite jusqu'au premier parent. Si c'est le dernier parent qui a été considéré alors : on déplace le processus Python dans le netns correspondant.

    Si parmi la liste des processus enregistrés certains n'existent plus, alors ils sont retirés de la liste.