But : rendre OpenVPN utilisable par une personne qui n'est pas administrateur de sa machine

Pré-requis : connaitre les bases de DOS, Base de registre, Planificateur de tâches, gestion des droits utilisateurs.

1/Préambule

Tout ce que contient ce document est basé cette vidéo. Merci de la visionner. 

Installer la version d'OpenVPN disponible sur la page de l'intranet de l'école.

L'exécuter une fois sous le compte de l'utilisateur en tant qu'administrateur (click-droit sur l’icône du bureau Icone OpenVPN du Bureau -> Exécuter en tant qu'administrateur puis click-droit sur Icone OpenVPN in tray dans la zone de notification-> Connect puis login/mot de passe ENS dans la fenêtre qui s'ouvre) puis se déconnecter.

Modifier la base de registre afin de faire pointer l'entrée correspondant au fichier de log d'OpenVPN, log_dir, sur %temp%\OpenVPN\log. Attention, cette variable est définie 2 fois, une fois pour OpenVPN, dans HKEY_LOCAL_MACHINE -> Software -> Wow6432Node -> OpenVPN,  et une fois pour OpenVPN-GUI, son interface graphique, dans HKEY_LOCAL_MACHINE -> Software -> Wow6432Node -> OpenVPN-GUI.

Dans une session administrateur, dans une fenêtre cmd.exe lancée en tant qu'administrateur (click-droit -> Exécuter en tant qu'administrateur), créer les répertoires c:\Users\<<login_admin>>\AppData\Local\Temp\OpenVPN\log et c:\Users\<<login_utilisateur>>\AppData\Local\Temp\OpenVPN\log. Attention : vérifiez bien la valeur de <<login_utilisateur>> en faisant afficher %temp% dans une session utilisateur. Il peut y avoir des surprises, en particulier avec les noms longs.

Copier les 3 fichiers (create_main_task_only_runonce.cmd, create_usertask.cmd, Raccouris.txt) disponibles dans http://perso.ens-lyon.fr/jean-christophe.mignot/OpenVPN/Scripts/ dans c:\ProgramData\OpenVPN (il faut créer le répertoire OpenVPN).

Les 2 sections suivantes présentent 2 installations possibles. La première, légère, fournira une icône sur le bureau pour lancer l'interface graphique d'OpenVPN, OpenVPN-GUI. La deuxième, plus lourde, est directement inspirée de la vidéo. OpenVPN-GUI est lancée à chaque ouverture de session (mais pas connectée) et celà pour tous les utilisateurs, y compris les nouveaux.
Personnellement, je ne suis pas toujours arrivé au but avec l'installation lourde. Avec la légère, si !

2/ Installation légère

Dans la session utilisateur, dans une fenêtre cmd.exe, lancer create_usertask.cmd puis lancer create_main_task_only_runonce.cmd. Retourner sous le compte administrateur pour vérifier:

Dans la session de l'utilisateur, changez la cible du raccourci vers OpenVPN-GUI qui est sur le Bureau, Icone OpenVPN du Bureau, par le texte contenu dans le fichier C:\ProgramData\OpenVPN\Raccouris.txt.

Vous pouvez aussi changer l’icône du raccourcis vers OpenVPN-GUI modifié pour une meilleure visibilité. Attention : prévenez les utilisateurs que passer par Démarrage -> OpenVPN -> OpenVPN-GUI ne marche pas !

Fermer puis rouvrir la session utilisateur afin que les tâches lancées à l'ouverture de session soient exécuter.

Pour vérifier que vous êtes bien dans le VPN, dans une fenêtre cmd, taper route print. Quand vous n'êtes pas dans le VPN, la table de routage doit ressembler à :

IPv4 Table de routage
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métrique
          0.0.0.0          0.0.0.0      140.77.12.1     140.77.13.56     20
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      140.77.12.0    255.255.254.0         On-link      140.77.13.56    276
     140.77.13.56  255.255.255.255         On-link      140.77.13.56    276
    140.77.13.255  255.255.255.255         On-link      140.77.13.56    276
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link      140.77.13.56    276
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link      140.77.13.56    276
===========================================================================

Quand vous êtes dans le VPN, vous devez obtenir quelque chose comme :

IPv4 Table de routage
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métrique
          0.0.0.0          0.0.0.0      140.77.12.1     140.77.13.56     20
          0.0.0.0        128.0.0.0      10.140.78.9     10.140.78.10     30
      10.140.78.0    255.255.255.0      10.140.78.9     10.140.78.10     30
      10.140.78.8  255.255.255.252         On-link      10.140.78.10    286
     10.140.78.10  255.255.255.255         On-link      10.140.78.10    286
     10.140.78.11  255.255.255.255         On-link      10.140.78.10    286
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
        128.0.0.0        128.0.0.0      10.140.78.9     10.140.78.10     30
      140.77.12.0    255.255.254.0         On-link      140.77.13.56    276
     140.77.13.56  255.255.255.255         On-link      140.77.13.56    276
    140.77.13.255  255.255.255.255         On-link      140.77.13.56    276
    140.77.167.11  255.255.255.255      140.77.12.1     140.77.13.56     20
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link      140.77.13.56    276
        224.0.0.0        240.0.0.0         On-link      10.140.78.10    286
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link      140.77.13.56    276
  255.255.255.255  255.255.255.255         On-link      10.140.78.10    286
===========================================================================

On peut aussi faire tracert 140.77.166.48. si ça passe par orthos1-v20 c'est gagné. Si ça passe par orthos-60, c'est perdu.

Vous avez donc maintenant une solution pour qu'une personne ne disposant pas des droits administrateur puisse utiliser OpenVPN mais vous avez un problème de sécurité. Parmi les choix offerts par OpenVPN quand on clique-droit sur l’icône de la zone de notification se trouvent View Log et Edit Config. Tous deux lancent le Bloc-Note avec les droits administrateurs. Pas cool ! Mais l'action à exécuter quand on clique sur ces 2 choix est paramétrable dans la base de registre. Vous pouvez par exemple vider le contenu de ces variables... L'utilisateur aura donc un message d'erreur quand il choisira View Log ou Edit Config

 

3/ Installation lourde et hasardeuse

Exécuter le script create_task_once.cmd dans une fenêtre cmd.exe lancée en tant qu'administrateur (click-droit -> Exécuter en tant qu'administrateur). Ca crée un job qui sera exécuté au login de l'utilisateur avec les autorisations maximales. On peut le vérifier en exécutant le Planificateur de tâches de Windows. Ce job lancera le script create_usertask.cmd.

Se connecter sous le compte utilisateur pour faire exécuter le script create_main_task_only_runonce.cmd puis se déconnecter. Retourner sous le compte administrateur pour vérifier:

 A ce stade, vous devriez avoir une configuration où OpenVPN-GUI se lance automatiquement à l'ouverture de la session utilisateur mais ne se connecte pas.
Mais peut-être que non ! Ou peut-être que oui mais que l’icône de la zone de notifications ne veut pas s'afficher.
Si la tâche <<nom_machine>>_<<login_utilisateur>>_openvpn n'a pas été créée (elle n'apparait pas dans le Planificateur de tâches), lancez create_usertask.cmd depuis la session de l'utilisateur dans une fenêtre cmd.exe.
La création de ce job planifié, même s'il ne se lance pas à l'ouverture de session, est la seule chose importante. La paragraphe ci-dessous décrit comment changer l’icône par défaut d'OpenVPN-GUI pour la remplacer par une exécution forcée de la tâche planifiée <<nom_machine>>_<<login_utilisateur>>_openvpn. L'utilisation de cette icône palliera un lancement automatique à l'ouverture de session défaillant. Si OpenVPN est bien lancé mais que l’icône ne s'affiche pas, un message d'erreur s'affichera au premier double-click sur l’icône, mais un deuxième double-click fonctionnera.

L'utilisateur peut par erreur avoir quitté OpenVPN-GUI (ou alors OpenVPN-GUI ne se lance pas à l'ouverture de session). Pour lui éviter d'avoir alors à fermer puis ré-ouvrir sa session utilisateur, changez la cible du raccourci vers OpenVPN-GUI qui est sur le Bureau, Icone OpenVPN du Bureau, par le texte contenu dans le fichier Raccouris.txt. Dans la vidéo, il est dit que le faire depuis la session administrateur se répercute pour tous les utilisateurs. Pour moi, ça n'a jamais été le cas... Je vous conseille donc de le faire dans la session de l'utilisateur.

Vous pouvez aussi changer l’icône du raccourcis vers OpenVPN-GUI modifié pour une meilleure visibilité. Attention : prévenez les utilisateurs que passer par Démarrage -> OpenVPN -> OpenVPN-GUI ne marche pas !

Pour vérifier que vous êtes bien dans le VPN, dans une fenêtre cmd.exe, taper print route. Quand vous n'êtes pas dans le VPN, la table de routage doit ressembler à :

IPv4 Table de routage
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métrique
          0.0.0.0          0.0.0.0      140.77.12.1     140.77.13.56     20
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
      140.77.12.0    255.255.254.0         On-link      140.77.13.56    276
     140.77.13.56  255.255.255.255         On-link      140.77.13.56    276
    140.77.13.255  255.255.255.255         On-link      140.77.13.56    276
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link      140.77.13.56    276
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link      140.77.13.56    276
===========================================================================

Quand vous êtes dans le VPN, vous devez obtenir quelque chose comme :

IPv4 Table de routage
===========================================================================
Itinéraires actifs :
Destination réseau    Masque réseau  Adr. passerelle   Adr. interface Métrique
          0.0.0.0          0.0.0.0      140.77.12.1     140.77.13.56     20
          0.0.0.0        128.0.0.0      10.140.78.9     10.140.78.10     30
      10.140.78.0    255.255.255.0      10.140.78.9     10.140.78.10     30
      10.140.78.8  255.255.255.252         On-link      10.140.78.10    286
     10.140.78.10  255.255.255.255         On-link      10.140.78.10    286
     10.140.78.11  255.255.255.255         On-link      10.140.78.10    286
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
        128.0.0.0        128.0.0.0      10.140.78.9     10.140.78.10     30
      140.77.12.0    255.255.254.0         On-link      140.77.13.56    276
     140.77.13.56  255.255.255.255         On-link      140.77.13.56    276
    140.77.13.255  255.255.255.255         On-link      140.77.13.56    276
    140.77.167.11  255.255.255.255      140.77.12.1     140.77.13.56     20
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link      140.77.13.56    276
        224.0.0.0        240.0.0.0         On-link      10.140.78.10    286
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link      140.77.13.56    276
  255.255.255.255  255.255.255.255         On-link      10.140.78.10    286
===========================================================================

 

Vous avez donc maintenant une solution pour qu'une personne ne disposant pas des droits administrateur puisse utiliser OpenVPN mais vous avez un problème de sécurité. Parmi les choix offerts par OpenVPN-GUI quand on clique-droit sur l’icône de la zone de notification se trouvent View Log et Edit Config. Tous deux lancent le Bloc-Note avec les droits administrateurs. Pas cool ! Mais l'action à exécuter quand on clique sur ces 2 choix est paramétrable dans la base de registre. Vous pouvez pas exemple vider le contenu de ces variables...

 

3/Remarques et retours d'expérience

S'il y a un espace dans le nom de la machine, le login de l'utilisateur ou de l'administrateur, la procédure ne marchera pas. Vous pouvez alors changer les noms ou modifier les scripts. J'ai choisi de changer les noms :-P

Si vous voyez des caractères bizarres remplacer les caractères "é" dans les scripts, c'est normal. La manière de les coder pour qu'ils soient interprétables dans un fichier de commande (fichiers *.cmd) n'est pas reconnu par la plupart des éditeurs de texte.

Attention : il est arrivé qu'openVPN-GUI soit lancée à l'ouverture de session mais que son icône n’apparaisse pas dans la zone de notification. Je n'ai pas d'autre solution qu'alors lancer, via l’icône du Bureau, OpenVPN-GUI. Un message d'erreur s'affiche disant qu'OpenVPN est déjà en cours d'exécution. Faire OK, puis relancer et ça marchera...