Informatique

Un dossier chiffré distant avec EncFS et SSHFS

Thursday, 31 January 2013
|
Écrit par
Grégory Soutadé

Si vous avez des ennuis, prenez un avocat ! Vous aurez toujours des ennuis, mais vous aurez un avocat !

Aujourd'hui nous allons répondre à une problématique concernant la sécurité et le travail en équipe. Lorsque le travail requiert des besoins importants en terme sécurité, il arrive de devoir mettre en place des dossiers chiffrés pour protéger des documents confidentiels. Pour cela, la solution idéale est TrueCrypt : le volume sécurisé est monté et seul l'utilisateur peut y accéder (pas de montage réseau possible). Mais quand on travaille à plusieurs sur les mêmes documents, il faut créer un TrueCrypt par machine et synchroniser les fichiers "à la main"...

Travail en équipe avec TrueCrypt

Bref, ce temps est révolu. En combinant SSHFS et EncFS on peut créer des dossiers chiffrés et y accéder à distance de façon sécurisée (à tous les niveaux). Il faut mettre en place un "serveur" qui va centraliser les dossiers et une installation sur chaque client comme suit

Travail en équipe avec EncFS et SSHFS

Sur le serveur

Installer encfs

sudo apt-get install enfs

Éditer le fichier /etc/fuse.conf pour autoriser les utilisateur non root à utiliser fuse
Décommenter "user_allow_other"

La commande "ls -l /dev/fuse" devrait donner le résultat suivant

crw-rw---- 1 root fuse 10, 229 Jan 24 12:05 /dev/fuse

Si le groupe "fuse" n'a toujours pas accès à /dev/fuse, il faut redémarrer la machine (c'est le cas notamment sous Debian).

Créer un utilisateur spécifique pour le projet

sudo adduser PROJET

Ajouter l'utilisateur au groupe fuse

sudo adduser PROJET fuse

Démarrer un shell avec l'utilisateur PROJET

su PROJET cd

Créer le dossier qui sera chiffré

mkdir projet_enc

Faire le montage du dossier encfs dans le dossier "projet_enc_out"

encfs /home/PROJET/projet_enc /home/PROJET/projet_enc_out

Quitter

exit

Sur chaque client

Installer sshfs

sudo apt-get install sshfs

Éditer le fichier /etc/fuse.conf pour autoriser les utilisateur non root à utiliser fuse
Décommenter "user_allow_other"

La commande "ls -l /dev/fuse" devrait donner le résultat suivant

crw-rw---- 1 root fuse 10, 229 Jan 24 12:05 /dev/fuse

Si le groupe "fuse" n'a toujours pas accès à /dev/fuse, il faut redémarrer la machine (c'est le cas notamment sous Debian).

Ajouter courant l'utilisateur au groupe fuse

sudo adduser USER fuse

Créer le point de montage

mkdir projet_secret

Monter le dossier chiffré distant

sshfs -o uid=$UID gid=$GID PROJET@IP:/home/PROJET/projet_enc_out projet_secret

Démonter le dossier

Que ce soit sur le serveur ou sur le client, il n'y a qu'une seule commande

fusermount -u <point_de_montage>

Conclusion

À l'intérieur de ce dossier on peut ensuite créer un dépôt git et faire un clone : ça donne un git distant sécurisé (même si on a l'impression d'y accéder en local). On peut aussi inscrire les clés publiques pour l'utilisateur PROJET et donc restreindre l'accès à certaines machines uniquement, ce qui a pour effet de bord d'avoir un mot de passe différent pour chaque utilisateur et non un mot de passe commun !

I believe I can fly

Sunday, 27 January 2013
|
Écrit par
Grégory Soutadé

Mon Sheeva est tombé un lundi matin (le 7 janvier). J'ai reçu l'alimentation deux semaines plus tard... Le serveur a pu redémarrer vers 16h, mais les plus attentifs auront remarqué que le blog était en ligne depuis le mardi 8 janvier 11h. C'est le résultat de mes premiers pas dans les nuages. La situation est critique : l'alimentation a lâchée, pas de serveur de secours sous la main (mais les sauvegardes sont là), pas de serveur distant, impossible de laisser tourner un PC h24 et (a priori) quelques jours à attendre avant d'avoir la pièce de rechange.

Le blog est la partie la plus visitée, il fallait au moins essayer de le remettre en ligne. Pour le coup, le passage à un blog statique simplifie énormément les choses ! Bref il faut trouver un petit espace de stockage en ligne pour pas longtemps et pas trop cher (tant pis pour les autres services, ils ne sont pas critiques et je ne voulais pas perdre du temps à configurer une instance qui sera détruite par la suite).

Goku sur son nuage

Je suis référencé chez Gandi, j'ai donc cherché par là. Concernant les sites web simples, ils ne proposent que la création via Gandi BaseKit ou Sitemaker à partir de 5€ par mois. Sinon, ils ont une solution "Simple Hosting" : un pack PHP/MySQL ou PHP/PostGre à partir de 5€/mois, ça pourrait presque être adapté, mais je ne voulais pas souscrire pour un mois. Enfin, dernière option : les nuages (le cloud) : louer une part d'un serveur que l'on peut relâcher quand on n'en a plus besoin. Bingo ! Je paye via mon compte pré payé (le surplus servira pour le renouvellement du nom de domaine). Une fois l'instance crée avec une Debian stable 64 bits (quelques minutes), un petit SSH, on installe emacs, nginx, un autre coup de scp, on reconfigure la zone DNS et roulez jeunesse, le blog est de nouveau en ligne. Les mails sont redirigés sur le webmail de Gandi. C'est une solution de secours flexible, pas chère (0.50 euros par jour) et très intéressante (surtout quand on a déjà tous les fichiers de conf) puisqu'on maîtrise tout (ce qui est plus facile pour adapter son ancienne configuration) avec en prime une addresse IPV6. Pour ce prix-là, j'ai :

  • 1 coeur dédié
  • 512Mo de mémoire
  • 12 Go de disque
  • Une connexion 10Mbits

De loin on pourrait dire que c'est à peu près la même chose que le Sheeva (hors débit de la connexion), sauf qu'en fait ça va VRAIMENT plus vite. Suite à l'aller-retour de l'alimentation en Angleterre (...), j'ai quand même ré installé la majorité des services sur l'instance.

En réalité, ça fait quelques semaines que j'y pensais. Lorsque ce sera possible, il faudrait installer un serveur de secours (fallback) pour faire face à un problème matériel, un crash de disque ou même une connexion qui tombe. C'est un gros problème de l'auto hébergement : pas de réplication des ressources. Tandis que dans les gros datacenter de Gandi, tout est virtuel, dupliqué 15 fois sur plusieurs sites physiques et avec des débits plus qu'intéressants. Bref, avoir deux serveurs physiques c'est presque jouable (ami, famille ...). Les problèmes sont les suivants :

  • Le DNS : si l'IP change tout le temps des deux côtés, c'est galère. On doit s'appuyer sur un serveur DNS fixe et éditer les zones en évitant les conflits (ou activer/désactiver manuellement l'édition des zones sur le serveur qui va bien). Il faut au moins avoir une IP fixe sur les deux (pour avoir un DNS primaire/secondaire).
  • Les données utilisateurs : un simple rsync suffit
  • Les projets versionnés : a priori une simple copie des fichiers suffit, mais c'est plus élégant de faire un clone/checkout des dépôts
  • Base de données : la plupart des moteurs incluent un système de maître/esclave

Il existe quelques solutions qui prennent en compte tous ces paramètres ou faire un script perso, reste plus qu'à le mettre en place si j'achète un nouveau serveur !

Concernant ma solution dans les nuages, je pourrais aussi faire un script de migration (copie, installation et configuration des paquets sur un nouveau serveur virtuel).

Et pour le plaisir :

Alimentation SheevaPlug et CuBox

Sunday, 27 January 2013
|
Écrit par
Grégory Soutadé

Le SheevaPlug est mort, vive le SheevaPlug !

Suite à mon dernier article concernant le travail le dimanche, mon SheevaPlug a décidé de se mettre en grève ! À mon réveil lundi matin (7 janvier) : plus rien ! Ma première idée est qu'il y a eu une coupure de courant et qu'il a eu du mal à redémarrer sur la clé USB, Ubuntu ayant pour sa part planté. Pourtant, je n'arrive pas à me connecter par le lien série. Les symptômes sont :

  • Une seule des deux LED du frontpanel est allumée
  • Les deux LED de l'ethernet sont allumées

Et pourtant, rien ne marche :( En consultant le net, je retombe régulièrement sur LE problème du SheevaPlug : son alimentation. Ce serait donc la PSU (Power Supply Unit) qui aurait lâché. Quatre coups de tournevis plus tard (et surtout en suivant ces instructions), je découvre ça :

SheevaPlug broken PSU
Je ne comprends pas grand-chose en électronique, mais je me dis que ça a vraiment été monté à l'arrache. Elle aura quand même tenu 2 ans et demi (donc la garantie de 12 mois a expirée depuis bien longtemps), ce qui est quand même très bien (ça fait du 3.61€ par mois). J'ai ensuite commandé une nouvelle alimentation sur newit (ils ont tout prévu !) : 26.5€ avec les frais de port. J'aurais pu en acheter une chez un marchand d'élec, mais je ne voulais pas qu'elle pende lamentablement à l'extérieur, ni avoir à souder. J'espère que celle-ci tiendra au moins aussi longtemps que la précédente.

SheevaPlug with new PSU


PS : Lors du voyage par Royal Air Mail, ils ont oublié de préciser les informations additionnelles, du coup elle a fait un joli aller-retour et j'ai pris deux semaines dans les dents + le prix d'un transporteur TNT. Du coup le transport a coûté plus cher que l'alimentation en elle-même.

Une fois la nouvelle alimentation installée : Oh miracle ! Ça fonctionne !!!! J'ai même pu tuner mon Sheeva avec un embout blanc sur un fond noir.

Sheevaplug working


CuBox

cubox.jpg

Régulièrement je regarde le site newit pour voir les nouveautés. GlobalScale Technologies (le constructeur du SheevaPlug) s'est rapidement éloigné de la philosophie du Sheeva (le GuruPlug a eu un succès mitigé) : on rajoute un disque dur, on rajoute le wifi, on rajoute le bluetooth, on rajoute le HDMI... Mais on garde le même processeur et la même quantité de mémoire... Alors qu'il fallait faire tout l'inverse : garder un appareil petit avec quelques connexions (le double ethernet peut être sympa) tout en augmentant la puissance (processeur et mémoire). Solid Run (une startup de seulement 7 personnes !) l'a bien compris en sortant la CuBox. Pour moi c'est le digne successeur du SheevaPlug :

  • Marvel PJ4 (Dual Cortex A8) @ 800Mhz
  • 1GB de DDR3 32 bits @ 800Mhz
  • GPU OpenGL ES / Décodeur HD / HDMI (c'était dans le SoC)
  • InfraRouge
  • 1 Gigabit Ethernet / 2 USB / 1 eSata / 1 SPDIF / 1 MicroSD
  • 55mm x 55mm x 42mm

Plus petit (le Sheevaplug fait 110 mm x 69.5 mm x 48.5 mm), plus puissant et le tout pour 3 Watts (comme le Sheeva). Le prix est identique à celui du Sheeva (130 €). Et pour ceux qui sont un minimum patient, une version à 2GB (CuBox pro) devrait sortir fin janvier. Si elle avait été disponible de suite (ou pré commandable depuis le site de Solid Run, qui ne livre pas en France...), je l'aurais bien échangé contre mon Sheeva qui commence un peu à ramer quand on lui demande du PHP ou du Python ! Au passage, j'ai remplacé ma clé USB Toshiba par une SDCard 16GB class 10 : en plus d'accélérer les entrées/sorties elle devrait être plus fiable.

La CuBox sera incontestablement ma prochaine acquisition pour un serveur perso (à faible charge, s'entend). D'ici là, c'est bien de voir comment va se comporter le hard, qui vient tout juste de paraître (on n'est pas sans rappeler les défauts d'alimentation du Sheeva...).

Prosody

Monday, 10 December 2012
|
Écrit par
Grégory Soutadé

Logo prosody

Nouveau service sur Cybelle : un serveur XMPP ! J'avais longtemps hésité à en installer un, vu le peu de ressources disponible sur le serveur, peur aussi de l'erlang, mais finalement j'ai été séduit par Prosody ! C'est un serveur très léger écrit en Lua.

J'ai même pu écrire un premier patch (en Lua !) qui sera peut-être intégré dans la future stable (0.9). Bon, pour l'instant je suis un peu seul, mais c'est quand même classe d'avoir une adresse de messagerie instantanée à son propre nom !

GcaptchaZ

Monday, 19 November 2012
|
Écrit par
Grégory Soutadé

GcaptchaZ est un petit soft qui permet de générer des CAPTCHA en ligne de commande. C'est la transcription en C du générateur PHP de Logz avec quelques modifications. Je trouve que les CAPTCHA générés sont beaucoup plus sympa et compréhensibles que les reCAPTCHA de Google et c'est 'à priori' le seul générateur en ligne de commande, les CAPTCHA étant normalement générés de manière dynamique et utilisés une seule fois.

Au début je voulais l'intégrer dans Dynastie, l'idée étant de générer un nombre fixe de CAPTCHA pour les commentaires, en gardant la correspondance fichier <--> résultat. Pour cela j'utilise une petite astuce : le nom du fichier devait être le résultat du CAPTCHA chiffré en AES 128 avec le MD5 d'une passphrase (ce qui évite aussi de lister les captchas si on les nomme avec un id incrémental). La seconde étape consiste à les répartir aléatoirement dans les commentaires et de vérifier qu'une adresse IP ne résout pas plus de trois fois le même CAPTCHA (en modifiant l'id dans le formulaire des commentaires).

Finalement il ne sera pas intégré (du moins pour le moment). En effet, lors de mes recherches je suis tombé sur une astuce plus intelligente. Le but des CAPTCHA est de n'être déchiffré que par un humain, ce qui a le désavantage d'énerver les utilisateurs quand ils sont incompréhensibles. Donc un CAPTCHA n'arrêtera pas un humain qui veut spammer un forum/blog... Par contre, les robots spammeurs remplissent automatiquement le formulaire de commentaire, l'astuce consiste donc à mettre un champ email invisible et de vérifier côté serveur s'il est rempli ou non.

Logo GcaptchaZ