Le libre c’est productif

A Bold GNU Head
Image via Wikipedia

Les logiciels libres du projet GNU ont une philosophie de simplicité et de modularité: chaque logiciel fait une chose et le fait bien. L’utilisateur peut à sa guise combiner l’usage des logicielles afin de répondre à son besoin, notamment avec les pipes Unix. L’application de ce principe dans la conception des logicielles, donne à l’utilisateur un grand pouvoir.

Le N900 évolue dans l’eco-systeme Linux et parmi ses applications nombreuses sont celles qui sont des outils modulaires. Ainsi faire en sorte que le téléphone prend en photo son utilisateur sans intervention de ce dernier est d’une simplicité presqu’enfantine.

L’outil Shortcutd permet de déclencher des actions sur l’évènement du capteur de proximité. L’action peut être n’importe quelle commande ou script. Il suffit alors d’associté au capteur de proximité le script suivant:

#!/bin/sh
/bin/sleep 2 ; /usr/bin/gst-launch v4l2camsrc device=/dev/video1 num-buffers=1 ! video/x-raw-yuv,width=640,height=480 ! ffmpegcolorspace ! jpegenc ! filesink location=/home/user/MyDocs/DCIM/photo.jpg

Voilà comment on gagne un petit défi entre collègue sur le POC d’une application pour photographier le voleur de son téléphone. En lice un Android et Maemo5. Victoire du N900 par KO.

Installation d’un RAID 1 sur Ubuntu 11.04 existante

RAID 1 with two disks (disk 0 and disk 1) over...
Image via Wikipedia

Le raid 1 permet de dupliquer les informations sur au moins 2 disques. En cas de défaillance d’un disque, les informations ne sont pas perdues car il reste au moins une copie. On peut donc utiliser le raid 1 pour éviter la perte de données. Il peut aussi servir à éviter une interruption de service en utilisant une configuration qui autorise le démarrage sur n’importe quel des disques valide. Le besoin d’utiliser du raid survient en général pour le particulier après un sinistre où même les sauvegardes ne protègent pas contre les interruptions de service. Après avoir réinstaller son système l’utilisateur envisage alors de se prémunir de futures pannes. Le contexte de ce billet est donc la mise en place d’un raid 1 sur un système existant.

Notre système de départ est une installation Ubuntu desktop typique avec un disque /dev/sda partitionné en 2

  1. /dev/sda1 pour le système
  2. /dev/sda2 pour le swap

Pour monter le raid1 on ajoute un second disque à la machine. Ce disque doit être au moins aussi gros que celui en place qui dans notre cas fait 640 Go. On choisit donc un nouveau disque de 2 To qui nous coûte 3,4 centimes le Go !

Une fois le disque en place on installe les outils pour administrer le RAID et créer l’image de démarrage:

sudo apt-get install initramfs-tools mdadm

On charge le module raid1:

sudo modprobe raid1

On copie ensuite la table de partition du disque original /dev/sda sur le nouveau /dev/sdb. Cela évite de partionner à la main:

sudo sfdisk -d /dev/sda | sfdisk --force /dev/sdb

A ce stade le disque /dev/sdb possède un espace libre après la partition de swap. On pourra formater celle-ci ensuite pour avoir un espace de stockage. Cela est une autre histoire.

Mais continuons plutôt la mise en place de notre raid1. On peut avantageusement utiliser l’outil gparted pour ajouter le drapeau raid aux partition /dev/sdb1 et /dev/sdb2.

Maintenant on va créer les grappes raid. Une grappe est constituée de plusieurs disques ou partitions fusionnés en un disque raid. Dans notre cas on va créer une grappe constituée de 2 partitions pour accueillir le système. Chaque partition étant sur un disque physique différent. Il en va de même pour la partition de swap. Les commandes suivantes créent les grappes en omettant le premier disque car ce dernier est actuellement en cours d’utilisation.

sudo mdadm --create /dev/md0 --level=1 --raid-disk=2 missing /dev/sdb1
sudo mdadm --create /dev/md1 --level=1 --raid-disk=2 missing /dev/sdb2

La commande posera une question disant que la grappe utilisera les métadata 1.2. Il suffit de répondre yes car GRUB2 sait gérer cela.
On peut alors formatter le disque raid /dev/md0. Il n’y a pas de souci à avoir car la grappe ne contient pour l’instant que le nouveau disque /dev/sdb

sudo mkfs.ext4 /dev/md0
sudo mkswap /dev/md1

On va configurer mdadm, cela se fait automatiquement par la commande suivante:

sudo mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Il nous reste à préparer le prochain démarrage qui se fera sur le raid. On va modifier les fichiers /etc/fstab et /boot/grub/grub.cfg.

Dans /etc/fstab il faut remplacer la partition système /dev/sda1 par /dev/md0 et la partition swap /dev/sda2 par /dev/md1. Attention Ubuntu 11.04 se base sur les UUID au lieu des chemin /dev/XXX. Se repérer sur les points de montage. Le système est sous / tandis que le swap n’est pas monté (valeur none).
Dans le fichier /etc/mtab on peut également changer /dev/sda1 par /dev/md0

Le paramétrage de Grub2 est différent que le l’ancien Grub. Le fichier /boot/grug/grub.cfg est en effet en lecture seule et il est recrée à partit d’autres fichiers. Nous allons créer un fichier de menu personnalisé pour redémarrer le système sur notre raid1.

cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
vim /etc/grub.d/09_swraid1_setup

Voici le contenu du fichier 09-swraid1_setup qu’il faut adapter en fonction du nom du noyau que vous obtenez en faisant un uname -r

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'Ubuntu, avec Linux 2.6.38-8-generic' --class debian --class gnu-linux --class gnu --class os {
insmod raid
insmod mdraid1x
insmod part_msdos
insmod ext2
set root='(md/0)'
echo 'Loading Linux 2.6.38-8-generic ...'
linux /boot/vmlinuz-2.6.38-8-generic root=/dev/md0 ro quiet
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.38-8-generic
}

Attention le module mdraid1x est nécessaire pour pouvoir lire le disque raid avec metadonnée 1.2

On peut aussi désactiver dans GRUB2 l’usage de UUID puisque l’on définie les disque par /dev/XXX. Aller dans le fichier /etc/default/grub pour décommenter la ligne

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
GRUB_DISABLE_LINUX_UUID=true

Disons à grub2 de regénérer le fichier de grub.cfg

sudo update-grub

Et recréons un fichier ramdisk (utilisé au démarrage)

sudo update-initramfs -u

Copions le disque original sur le disque raid (constitué que d’un seul disque /dev/sdb1 pour l’instant). La commande suivante peut être longue (plusieurs dizaines de minutes) selon la quantité de données.

sudo cp -dpRx /boot /mnt/md0

On s’assure que GRUB2 est installé sur le disque sdb

sudo grub-install /dev/sdb

Maintenant on redémarre la machine

Quand la machine a redémarré, le système est alors sur le RAID (/dev/md0) et le disque /dev/sda n’est pas utilisé. On peut alors ajouter le disque /dev/sda dans le RAID.

A l’aide de gparted, ajouter le drapeau raid aux partitions /dev/sda1 et /dev/sda2. Puis ajouter les dans le RAID avec les commandes suivantes:

sudo mdadm --add /dev/md0 /dev/sda1
sudo mdadm --add /dev/md1 /dev/sda2

Attendre que le raid se synchronise i.e la partitions /dev/sdb1 et /dev/sdb2 respectivement se copie sur /dev/sda1 et /dev/sda2 respectivement. La commande suivante permet de visualiser le processus:

sudo watch cat /proc/mdstat

Quand c’est terminé il reste à reconfigurer mdadm et grub pour les prochains démarrages.

Le fichier /etc/mdadm/mdadm.conf se met à jour avec la même commande vue plus haut:

sudo mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Le démarrage n’a plus besoin de l’entrée Grub utilisé pour lancer le système sur /dev/md0 alors qu’il était chargé depuis /dev/sda. Maintenant grub doit être capable de se configurer automatiquement avec

sudo rm -f /etc/grub.d/09_swraid1_setup
sudo update-grub
sudo update-initramfs -u

On s’assure que les 2 disques contiennent bien Grub

sudo grub-install /dev/sda
sudo grub-install /dev/sdb

Et voilà, on peut redémarrer le système.

Mails sécurisés S/MIME avec Thunderbird sous TAILS Linux

Crystal Thunderbird icon
Image via Wikipedia

TAILS est une distribution offrant l’anonymat sur internet tout en ne laissant pas de trace sur la machine hôte (et le cas échéant sur la clé USB qui héberge l’OS). Pour la plupart des usages tels que la navigation internet, le webmail, l’édition de documents etc…l’usage du répertoire temporaire, dont la taille dépend de la quantité de RAM disponible, est amplement suffisant.
Mais il y a des cas qui nécessitent d’une part de persister les changements comme par exemple le paramétrage d’une boîte mail et d’autre part l’usage de fonctionnalités non couvertes par les applications de la distribution comme par exemple l’usage de S/MIME pour la signature et le cryptage de mails. C’est ainsi que TAILS 2011.04 propose Claw Mails dans une version qui n’inclut pas le chiffrement S/MIME mais uniquement GnuPG. Le module S/MIME disponible sur le site de Claw Mail indique qu’il nécessite une version plus récente du client mail. La solution que nous proposons est l’usage de Thunderbird avec persistance des paramètres de mail.

Prerequis

Nous supposons que la clé USB contenant TAILS est constituée de 2 partitions. La première contient l’ISO de TAILS proprement dite et la seconde est une partition cryptée.

Installation de Thunderbird

Télécharger l’archive de thunderbird sur le site officiel puis décompresser le répertoire thunderbird dans la partition crypté. Si nous supposons que la partition crypté est monté sous /media/data, alors on peut décompresser notre client mail dans /media/data/Programmes/thunderbird.

L’astuce pour que la paramétrage des comptes mails ainsi que le contenu des mails soit persisté de façon sécurisé sur la partition cryptée consiste à faire un lien symbolique de /home/amnesia/.thunderbird vers /media/data/.thunderbird. Le script ci-après permet de lancer thunderbird en créant au préalable répertoire et lien symbolique si nécessaire. Créons le fichier /media/data/Programmes/mail.sh avec le contenu suivant:

#!/bin/bash
# fichier /media/data/Programmes/mail.sh
USB_MOUNT_POINT=/media/data
PROGRAM_LOC=$USB_MOUNT_POINT/Programmes
PROGRAM_DIR=$PROGRAM_LOC/thunderbird
if [ ! -e $USB_MOUNT_POINT/.thunderbird ]; then
  mkdir $USB_MOUNT_POINT/.thunderbird
fi
if [ ! -e ~/.thunderbird ]; then
 sudo ln -s $USB_MOUNT_POINT/.thunderbird ~/.thunderbird
fi
$PROGRAM_DIR/thunderbird

 

Distributions Linux pour accès Internet anonyme

Linux Waschmittel
Image by Frank Ristau via Flickr

L’anonymat est une nécessité pour de nombreuses personnes pour lesquelles révéler leur localisation ou laisser des traces sur un ordinateur mettent en danger leur vie. C’est le cas des opposants dans des régimes non démocratiques.
Protéger la localisation se fait par l’utilisation de TOR (The Onion Router) ainsi que par un paramétrage réseau bloquant les accès non “torifiés”. La machine est alors anonymes sur internet car les requêtes qui émanent d’elle transitent par un ensemble de relais TOR dont certain vont être des nœuds de sorties qui changent à intervalles réguliers. Ainsi le site final reçoit des requêtes provenant de localisation multiples changeantes.
Pour ne pas laisser de trace il suffit d’utiliser un système portable sur clé USB. L’utilisateur prendra simplement soin de ne rien écrire sur le disque de la machine, le système sur clé USB utilisant la RAM comme système de fichier temporaire.
L’ensemble des paramétrages pour configurer un tel système est à la porté du grand public. Il existe des distributions dédiées à anonymat:

Le premier, Liberté, contient des fonctionnalités intéressantes comme le cryptage automatique de la partition de l’utilisateur et la génération d’une identité secrète à travers une adresse email secrète en .onion pour communiquer avec d’autres utilisateurs du réseau TOR. Malheureusement je n’ai pas réussi à faire fonctionner cette distribution (version 2011.1 et la snapshot 2011.06.05) sur une clé USB dataTraveler G2 16 Gb sur une première partition. Testé sur 2 machines différentes, le boot échoue et termine sur la ligne de commande.

Le second, Privatix, a le défaut d’être documenté surtout en allemand. Cela complique beaucoup la tâche.

Le dernier, Tails ne propose pas (plus) de cryptage des partitions et semble être fait pour une utilisation en liveCD. Nous choisissons quand même de détailler l’installation de ce dernier car la documentation est en anglais et la traduction française est très suffisante.

Installation de TAILS sur clé USB

Télécharger l’image ISO sur le site du projet .

L’image de la version actuelle 0.7.1 fait 677 Mo. IL nous faut donc une partition de 700 Mo. Créons une première partition de 700 Mo sur la clé USB. Nous utiliserons l’outil GParted disponible dans Ubuntu 11.04.

Le site du projet ne donne pas de précisions pour créer une clé USB bootable. Nous passerons donc par l’outil Unetbootin disponible sur les dépôt d’Ubuntu. Il suffit alors de préciser l’image ISO et la partition de la clé USB où on veut installer TAILS.

L’espace restant de la clé USB peut être utilisé pour une partition crypté. L”outil GParted nous permet de créer une partition en ext4 puis l’outil Utilitaire de disque nous permet de créer une partition crypter en (re)-formatant la 2e partition et en cochant “chiffrer le volume correspondant”.

Voilà, nous avons une clé USB qui nous permet d’utiliser n’importe quelle machine et de se connecter à internet travers le réseau TOR. Attention le système ne persiste rien. Il faudra donc stocker les données à conserver sur la 2nd partition.

Port 25 bridé chez Bouygues Télécom

scheme of mobile phone
Image via Wikipedia

Les fournisseurs d’accès à internet (FAI) avait l’habitude de brider le port 25 utilisé pour envoyer des courrier électroniques. Ainsi si l’internaute veut envoyer un mail, il devait passer obligatoirement par le relais SMTP du FAI qui est paramétré pour autoriser les requête provenant de son réseau. Cela interdit à l’internaute de passer par un relais SMTP de son choix et constitue une atteinte à la liberté. Bien que cette décision était à l’origine faite pour empêcher les spammeurs d’utiliser les relais SMTP des FAI, la conséquence est d’autant plus préjudiciable que la mise en place d’une authentification aurait permi de contrôler les accès sans brider l’utilisateur dans son choix de relais SMTP.

Pour savoir si votre fournisseur d’internet mobile bride le port 25, il suffit d’utiliser telnet en entrant depuis une console sur votre terminal.
telnet mon.smtp.com 25

Bien sûr remplacer le serveur SMTP par celui que vous aurez choisi et différent de celui de votre FAI. Repérez dans la réponse la permière ligne qui vient aprés Escape character is. Elle doit être de de la forme

220 mon.smtp.com

Chez bouygues télécom avec un forfait grand public voici la réponse:

Escape character is '^]'.
220 mx2.bouyguestel.com -- Server ESMTP (MTA Server)

Ainsi les soit disant forfaits “full internet” ne le sont définitivement pas.

Serveur mail personnel

SMTP transfer model Blue arrows can be impleme...
Image via Wikipedia

Le webmail c’est pratique. Un navigateur suffit pour accéder à toute sa correspondance numérique. Malheureusement quand l’accès à internet est défaillant ou que le fournisseur de service est en panne, on ne peut pas consulter ses mails. On se rend compte alors de l’intérêt d’un client lourd qui rappatrie en local les mails.

La client lourd n’est cependant pas la solution à tous les maux. En effet les mails sont toujours hébergés sur un serveur, celui du webmail ou de son FAI. La boîte aux lettres de l’utilisateur n’est pas sur son poste mais toujours située ailleur. Ainsi quand le mail est réputé livré, il n’est en fait que dans la boite au lettre au bout du jardin ou dans le hall de l’immeuble, il faut encore que l’utilisateur aille relever le courrier. Que se passe-t-il si il n’y a pas d’internet à ce moment là ? Où que le fournisseur de mail est défaillant ?

La solution réside dans la mise en place d’un serveur mail personnel. C’est-à-dire avoir chez soi son MTA/MDA. Ainsi dès qu’un mail est réputé livré i.e. quand un utilisateur envoie un mail et qu’il n’a pas de retour qui l’insulte, le mail doit effectivement avoir été remis dans la boite de son destinataire. Comme le MDA est chez le destinataire on a résolu le problème.

Le programme Postfix couvre ce besoin. Ainsi Postfix est capable d’envoyer des mails soit directement via sendmail soit via SMTP quand l’utilisateur n’est pas sur la machine où s’exécute Postfix. De même Postfix va recevoir les mails qu’on nous envoi et qui proviennent par exemple du MTA du FAI de notre correspondant, et ira les mettre dans la boîte du bon utilisateur local à la machine. Postfix nous permet d’être autonome en envoi et en réception des mails.

L’installation de Postfix se fait naturellement depuis le dépôt et il ne reste qu’à modifier le fichier /etc/mailname pour y mettre le nom du serveur mail. Par exemple si notre adresse mail sera toto@monmail.com alors il faudra mettre monmail.com dans ce fichier.

Afin que nos correspondant puissent indiquer notre adresse toto@monmail.com dans le champ destinataire des mails, il faut que le domaine monmail.com soit enregistré comme champ MX (Mail Exchange) des entrées DNS. Ainsi quand le MTA de notre correspondant cherchera à qui s’adresser pour envoyer le mail à toto@monmail.com il trouvera quelle machine (IP) contacter. Commençons par déclarer un nom DNS de type adresse (A) qui associe à mx.monmail.com (nom arbitraire dans le domaine) notre adresse internet publique i.e. l’adresse de notre box ADSL en général. Puis créons une entrée de type Mail Exchange (MX) qui pointe vers mx.monmail.com.

A ce stade notre correspondant ou plus précisément son fournisseur de mail (google ou leur FAI par ex) va contacter notre box ADSL. IL reste à paramétrer le routeur de notre box ADSL (cas de la Freebox) pour rediriger les entrées sur le port 25 vers l’IP de notre machine qui fait office de serveur de mail.

A ce stade Postfix sera contacté et le mail va atterrir dans la boîte local de l’utilisateur toto i.e. /var/mail/toto. Nous pourrions en rester là car la commande mail permet de consulter ses mail en ligne de commande et un client lourd comme Evolution peut se paramétrer pour recevoir les mails en provenance du fichier mbox /var/mail/toto et envoyer les mails via sendmail. De ce fait envoi et réception passe par notre serveur mail Postfix.

Cependant nous voulons aussi pouvoir utiliser une machine différente de notre serveur mail pour envoyer (écrire) et recevoir (lire)  des messages. Autrement dit il faut que notre serveur mail soit accessible depuis n’importe quelle machine connectée à internet. Pour la lecture des mail cela peut être fait par le protocole IMAP et pour ce faire on doit installer un serveur IMAP tel que Dovecot. L’installation de Dovecot se fait naturellement depuis le dépot en faisant un

sudo apt-get install dovecot-postfix

Sous Ubuntu 11.04 la configuration par défaut est pleinement fonctionnelle: IMAP, authentification sécurisée et SSL (IMAP4S). L’authentification se base sur les utilisateurs locaux du serveur mail. L’envoi de mail se fera en SMTP et Postfix a été automatiquement reconfiguré pour que l’accès au MTA depuis l’extérieur soit possible pour n’importe quelle adresse de destinataire uniquement si l’authentification est correcte. Donc notre MTA ne sera pas un relais SMTP exploitable par des pirates spammeurs.

Nous avons alors une solution complète…pour l’utilisation d’un client lourd. Comme nous sommes exigeant nous voulons aussi avoir l’argent du beurre afin d’accéder à notre messagerie depuis n’importe quel navigateur. Nous devons installer un webmail. Roundcube est un webmail qui s’installe en un clin d’oeil. L’écran de connexion demande les identifiants utilisé pour le compte IMAP et le serveur IMAP qu’il faudra renseigné à localhost si le webmail s’exécute sur la même machine que le serveur IMAP.

Postfix, Dovecot et RoundCube nous donnent ainsi une solution complète et autonome de messagerie.

Nouveaux livres de Richard Stallman

Richard Stallman Founder of GNU Project and Fr...
Image via Wikipedia

Sans bruit faire, au début du mois de mai, sont sorties les nouvelles éditions de 2 livres de Richard Matthew Stallman. Il s’agit en fait des livres phares: Free Software, Free Society et Free as in Freedom.

Richard Stallman est le père fondateur du mouvement des logiciels libres  (Free Software) qui remonte au début des années 80, bien avant l’avènement de Linux et du mouvement Open Source. Ces livres sont l’occasion de comprendre l’origine et les motivations de Stallman. Le lecteur se rend alors compte rapidement que Richard Stallman place son combat dans un registre autre que la technique. Le libre est une sorte de philosophie ou du moins une posture humaniste avec des implications sociétales bien plus forte que le mouvement Open Source qui de son côté se focalise sur la performance technique.

Ces nouvelles éditions sont disponibles à l’achat via la boutique de la FSF (cela contribuera à soutenir le logiciel libre) ou en téléchargement sous format PDF.

“Join us Hacker, share the Software”