Jump to content
ElementaryOS France

MODIFIÉ: OPENVPN: autoriser un simple utilisateur (donc non-root) à activer, choisir ou arrêter le VPN sans sudo


Recommended Posts

modifi%25C3%25A9.jpg Voir en bas. Amélioration avec une commande simple
 
rc-local-openvpn.png  ATTENTION !
  • On touche ici à un fichier système qui peut être assez important. Si vous faites des gaffes, votre ordi pourrait ne plus vouloir redémarrer*.
  • Sécurité: donner les droits d'édition de ce fichier à M. Dupont ou Mme Michu ouvre une porte dangereuse dans votre système. Vous voilà donc prévenu. 
  • Sécurité: si vous n'avez plus besoin de permettre l'édition de ce fichier en non-root, rétablissez sans tarder les permissions comme à l'origine.
  • N'utilisez pas Gedit pour éditer ce fichier en non-root (voir pourquoi en bas d'article)
  • Attention! avec cette méthode, désactivez la connexion au VPN dans Network-Manager ou tout autre "client" Openvpn, sinon, ça ne fonctionnera pas!

*C'est peu probable, rassurez-vous...

 
Il vous faut:
 
  • Un abonnement VPN basé sur OpenVPN (comme Dacloud.me, AirVPN ou Hide My Ass pour ne citer qu'eux...)
  • Des fichiers *.ovpn fournis par votre fournisseur de service VPN qui doivent être placés dans /etc/openvpn
  • Les fichiers *.ovpn doivent être de type auto-login. Si ce n'est pas le cas, voir ici sur mon blog: http://tuxnotes.blogspot.com/2014/04/auto-login-pour-openvpn-alwaysvpn.html comment contourner ce problème.
  • Un éditeur autre que Gedit (Leafpad est très léger et convient parfaitement mais Scratch peut probablement être utilisé aussi)
  • Avoir désactivé le lancement du VPN par une autre voie (Network-Manager par exemple) pour qu'il n'y ait pas de conflits
 
 
C'est une question récurrente sur les forums, à savoir, comment autoriser un simple utilisateur (non root) à activer, désactiver le VPN et éventuellement l'arrêter s'il le désire et tout ça sans sudo. Ça peut être important car certains sites notamment bancaires peuvent ne pas accepter que vous passiez par un VPN. De plus, le serveur VPN peut tomber en panne.
 
Malheureusement, la réponse n'est pas simple car il faut en passer par l'édition de sudoers (entre autres) ce qui comporte toujours un risque sérieux. Et c'est assez compliqué à faire pour un débutant...
Certains vont penser "mais pourquoi ne pas utiliser nm-applet de Network-Manager?". La réponse est que nm-applet n'est pas assez intuitif pour Mme Michu. On est bien d'accord?
 
Je fais de la location saisonnière et j'ai mis à disposition de mes locataires un mini-pc Asus Eeebox sous Lubuntu. Pour des raisons de sécurité, je fais passer la connexion par un serveur VPN situé aux "States". Ma méthode pour me connecter en VPN -depuis des années- n'est pas banale puisque j'utilise le fichier rc.local. Ainsi, mon VPN se lance automatiquement et sans demander de mot de passe dès le boot de l'ordi ce qui fait que suis déjà sous VPN avant que le Bureau apparaisse.
 
Inconvénient: Comme le lancement du VPN se fait "silencieusement", on ne sait pas ce qui se passe.. Si le serveur est "down", vous ne le saurez pas tout de suite. Je mets donc en page d'accueil de mon navigateur un détecteur d'IP pour vérifier que le VPN est bien actif. Mon IP externe est aussi affichée dans mon Conky perso.
 
Je précise que je réinitialise systématiquement le PC après le départ de chacun de mes locataires avec une image Clonezilla.
 
Le fichier (script) rc.local se trouve dans /etc et normalement, on l'édite en root:
sudo gedit (ou scratch-text-editor) /etc/rc.local
Mais justement, c'est ce que je veux éviter...
 
L'astuce consiste tout simplement à modifier les permissions de rc.local de manière à ce que mes clients puissent l'éditer eux-mêmes sans sudo et donc sans mot de passe administrateur. J'ai fait ça tout simplement avec mon gestionnaire de fichiers préféré: Thunar.
 
Ouvrez Thunar ou votre gestionnaire de fichiers habituel en root:
sudo thunar
  • Si vous avez configuré les "Actions personnalisées" dans Thunar, vous pouvez aller directement à /etc et faire "ouvrir ce dossier en root".
  • Toujours en root, recherchez le fichier rc.local puis clic droit » Propriétés » Permissions
  • Modifiez les permissions comme ci-dessous, laissez Root et mettez le tout en lecture & écriture
  • Fermez
PGnb1u7.png
 
Maintenant, on peut éditer rc.local sans sudo (vous pouvez essayer)
 
Voici mon fichier rc.local perso. Il me sert à lancer mon serveur préféré automatiquement au boot. Toutes les lignes précédées d'un # (dièze) sont dites "commentées" c'est-à-dire qu'elles ne sont pas actives. On peut se servir du # pour ajouter des commentaires et même des explications ou des mises-en-garde. Pour activer un serveur, il faut supprimer le # devant.
Ci-dessous, seul le serveur Miami2 est actif. Il faut impérativement désactiver les autres. Si vous activez 2 serveurs en même temps, il y a de fortes chances pour que vous n'obteniez pas de connexion VPN (ou très lente).
Pour désactiver le VPN entièrement (connexion directe), commentez toutes les lignes des serveurs. C'est pas plus compliqué que cela!
#!/bin/sh -e
#
# rc.local
#----------------------------------------------------------------------------------------
# ATTENTION! VOUS ALLEZ MODIFIER UN SCRIPT SYSTEME! SOYEZ PRUDENT...
# Pour désactiver le VPN, mettez un dièze "#" devant les lignes ci-dessous ou ...
# pour activer le VPN, supprimez le dièze "#" devant 1 seule ligne ci-dessous (UNE SEULE LIGNE!).
# ENSUITE, ENREGISTREZ LE FICHIER PUIS REDEMARREZ L'ORDINATEUR.
#----------------------------------------------------------------------------------------
# sudo openvpn --config /etc/openvpn/FortLauderdale.ovpn
# sudo openvpn --config /etc/openvpn/Jacksonville.ovpn
sudo openvpn --config /etc/openvpn/Miami2.ovpn
#----------------------------------------------------------------------------------------
# ATTENTION! NE CHANGEZ RIEN D'AUTRE ! L'ORDINATEUR POURRAIT NE PAS REDEMARRER! NE PAS TOUCHER AUX AUTRES LIGNES!
# ATTENTION! ÉDITEZ CE FICHIER SEULEMENT AVEC LEAFPAD (pas avec GEDIT qui refusera de l'enregistrer)
#----------------------------------------------------------------------------------------
# Attention! exit 0 doit toujours être placé en fin de fichier comme ci-dessous:
exit 0  
Bien entendu, vous devrez adapter le contenu de ce fichier à vos besoins. Notez que l'on peut renommer sans inconvénient un fichier.ovpn. Il est conseillé d'ailleurs de simplifier et de supprimer tous les éventuels espaces dans le nom.
 
Et comment on fait maintenant ?
 
Hé bien, c'est très simple. Faites un raccourci vers le fichier rc.local de manière à permettre à vos utilisateurs non-root de le modifier. Le plus laborieux sera probablement de leur expliquer comment faire et de les rassurer... Et c'est pas gagné! sourire.gif
 
leafpad /etc/rc.local
N'utilisez pas Gedit pour éditer rc-local en non-root...
Gedit, en effet, cherche à créer un fichier de sauvegarde automatiquement et il n'y arrive pas! (parce qu'on est pas en root, il ne peut pas écrire dans le dossier /etc). Du coup, il n'enregistre rien. Cette fonction peut se désactiver facilement mais je ne le conseille pas car c'est plutôt sécurisant d'avoir une sauvegarde systématique surtout quand on modifie des fichiers système. Utilisez plutôt Leafpad (ou Scratch) qui sont de toutes manières très légers.
 
Installer Leafpad
sudo apt-get install leafpad  

Créer un raccourci (lanceur) dans la catégorie "Internet" (Network, en fait..)

 

  • Ouvrez votre éditeur de texte habituel et copiez-y le code ci-dessous
  • Enregistrez-le dans /home/utilisateur/.local/share/applications/ sous le nom de rc.local.desktop
[Desktop Entry]
Name=Editer rc.local
Comment=Editer rc.local pour changer de VPN
Exec=leafpad /etc/rc.local
Icon=
Terminal=false
Type=Application
Categories=Network
  • Je n'ai pas mis d'icône. C'est donc celle par défaut qui s'affiche

 

Que va-t-il se passer si M. Dupont ou Mme Michu font n'importe quoi avec le fichier rc.local?

 

Au mieux, le VPN ne démarrera pas. Au pire, c'est l'ordi qui ne va pas démarrer (peu probable). D'où l'intérêt d'avoir une "image" Clonezilla prête à être restaurée ou encore mieux un Live-USB pour remettre rc.local en ordre.

La pire chose qui pourrait arriver c'est de tomber sur un M. Dupont mal-intentionné (ou farceur!) qui lancerait un malware à partir de rc.local. Mais encore une fois, l'image Clonezilla est là pour tout rétablir.

 

 

Ça ne marche pas?

  • Vérifiez que votre rc.local est bien exécutable dans propriétés et permissions

 

Retour à la case départ..

 

Si vous n'avez plus besoin que rc.local soit éditable par un simple utilisateur, je conseille de rétablir les permissions à: lecture seule pour Root et Autres et de modifier votre lanceur comme ci-dessous:

[Desktop Entry]
Name=Editer rc.local
Comment=Editer rc.local pour changer de VPN
Exec=sudo gedit /etc/rc.local
Icon=
Terminal=true
Type=Application
Categories=Network

Modifiés: Exec=sudo gedit /etc/rc.local et Terminal=true

On remarquera que j'ai rétabli Gedit comme éditeur de texte pour pouvoir profiter de la sauvegarde automatique.

 

 

Info

  • rc.local peut servir à lancer d'autres scripts ou applications dès le boot. Personnellement, je lance ainsi la commande "trim" pour optimiser mon disque SSD
  • Pour lancer un serveur VPN, on peut aussi créer un script dans init.d. J'ai testé: ça marche, mais malheureusement mon Lubuntu ne veut plus s'arrêter ensuite.. Je pense que mon script n'était pas complet au niveau de "stop". Ça m'a l'air plus compliqué. Aussi, je suis revenu sagement à mon habituel rc.local qui est assez simple à manipuler même pour un "utilisateur lambda". 

 

Liens

Icon=/home/utilisateur/Images/ICONS/rc-local-openvpn.png

Expérimenté sous Lubuntu mais y'a pas de raisons pour que ça ne fonctionne pas sous eOs

|

modifi%25C3%25A9.jpg Amélioration

 

On va simplifier ça pour l'utilisateur Lamda

 

  • Il suffit de copier votre rc.local dans votre home
  • Vérifiez les permissions ("Lecture-écriture" pour "Autres")
  • Modifiez-le selon vos besoins
  • Vérifiez que ça fonctionne en ligne de commande:
cp rc.local /etc

C'est-à-dire copier rc.local dans /etc (le fichier original est écrasé sans confirmation)

Allez voir dans /etc. Rc.local doit avoir changé

 

Maintenant, on va créer un lanceur pour cette commande:

[Desktop Entry]
Name=Désactiver le VPN
Comment=Nécessite un redémarrage
Exec=cp rc.local /etc
Icon=
Terminal=false
Type=Application
Categories=Network

Pour Icon= complétez avec le chemin de l'icône de votre choix

 

Note:

  • l'utilisateur doit redémarrer l'ordi pour que le changement soit pris en considération.
  • Il est évidemment possible de créer un autre rc.local dans un autre dossier permettant de réactiver le VPN

 

Edited by nettlebay
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...