Vim, GNU Screen et souris

Peut-être avez-vous activé le support de la souris dans Vim avec un petit set mouse=a dans votre ~/.vimrc. Ce support ne fonctionne qu’avec certains émulateurs de terminaux (Xterm, RXVT, etc) mais pas avec GNU Screen où l’utilisation de la souris sélectionne simplement le texte dans le terminal, bof.

Vous pouvez régler le problème rapidement en précisant à Vim la manière de gérer la souris pour le terminal en question. Il suffit d’un set ttymouse=xterm2 et le tour est joué. Et hop, un GNU Screen avec une session sur /dev/ttyUSB0, une pour le code dans Vim et une pour make et compagnie… Total bonheur.

Vérifier rapidement la vulnérabilité de sa clef SSH Debian

Comme vous le savez sans doute une faille majeure a été trouvée dans l’implémentation SSL présente dans les distribution Debian et dérivée. Cette faille est présente dans les distributions depuis environ deux ans et concerne le générateur de nombres pseudo-aléatoire (PRNG), réduisant ainsi l’espace de clef de manière catastrophique.

Vous trouverez sur http://metasploit.com/users/hdm/tools/debian-openssl/ deux archives contenant tout l’espace de clef. Pour savoir si votre clef est dans le lot c’est très simple. Désarchivez l’une ou l’autre des archives (selon le type et la taille de clef). Les paires de clefs sont stockées dans des fichiers nommés en utilisant l’empreinte de la clef publique.

Vous pouvez donc récupérer l’empreinte de votre clef avec:
% ssh-keygen -l -f id_dsa | cut -d  »  » -f 2 | sed « s/://g »
f9040774bddfdfed7c2fccdfac60ad26
Regardez ensuite si un fichier est présent dans le répertoire contenant l’espace de clef avec un simple ls. Si c’est le cas, vous êtes mal. Un attaquant n’aura qu’à essayer tout l’espace de clef et finira par avoir un accès à un moment ou un autre (selon le nombre de tentatives infructueuses autorisées pour une adresse, directive MaxAuthTries dans sshd_config). Mais ce n’est qu’une question de temps.

Mutt et Google Gmail

Gmail est tout bonnement fantastique. Non seulement c’est un bon Webmail mais en plus il est possible d’installer sur son mobile une version Java du client Gmail. Dernièrement (pas si dernièrement en fait) il est possible de se connecter à Gmail en IMAP et d’utiliser le SMTP Gmail pour l’envoi. L’ensemble est sécurisé over SSL et permet donc de consulter et gérer les mails de son compte Google avec un vrai MUA : Mutt

La configuration du client Mutt demande quelques recherche et surtout mises à jour. Mon Mutt est :
% mutt -v
Mutt 1.5.17+20080114 (2008-01-14)
Copyright (C) 1996-2007 Michael R. Elkins et autres.
Mutt ne fournit ABSOLUMENT AUCUNE GARANTIE ; pour les détails tapez `mutt -vv’.
Mutt est un logiciel libre, et vous êtes libre de le redistribuer
sous certaines conditions ; tapez `mutt -vv’ pour les détails.

System: Linux 2.6.22-2-686 (i686)
ncurses: ncurses 5.6.20080119 (compiled with 5.6)
libidn: 0.6.5 (compiled with 1.1)
hcache backend: GDBM version 1.8.3. 10/15/2002 (built Apr 24 2006 03:25:20)
Options de compilation :
-DOMAIN
+DEBUG
-HOMESPOOL +USE_SETGID +USE_DOTLOCK +DL_STANDALONE
+USE_FCNTL -USE_FLOCK
+USE_POP +USE_IMAP +USE_SMTP -USE_GSS -USE_SSL_OPENSSL +USE_SSL_GNUTLS +USE_SASL +HAVE_GETADDRINFO
+HAVE_REGCOMP -USE_GNU_REGEX
+HAVE_COLOR +HAVE_START_COLOR +HAVE_TYPEAHEAD +HAVE_BKGDSET
+HAVE_CURS_SET +HAVE_META +HAVE_RESIZETERM
+CRYPT_BACKEND_CLASSIC_PGP +CRYPT_BACKEND_CLASSIC_SMIME -CRYPT_BACKEND_GPGME
-EXACT_ADDRESS -SUN_ATTACHMENT
+ENABLE_NLS -LOCALES_HACK +COMPRESSED +HAVE_WC_FUNCS +HAVE_LANGINFO_CODESET +HAVE_LANGINFO_YESEXPR
+HAVE_ICONV -ICONV_NONTRANS +HAVE_LIBIDN +HAVE_GETSID +USE_HCACHE
-ISPELL
SENDMAIL= »/usr/sbin/sendmail »
MAILPATH= »/var/mail »
PKGDATADIR= »/usr/share/mutt »
SYSCONFDIR= »/etc »
EXECSHELL= »/bin/sh »
MIXMASTER= »mixmaster »
Pour contacter les développeurs, veuillez écrire à <mutt-dev@mutt.org>.
Pour signaler un bug, veuillez aller sur http://bugs.mutt.org/.

patch-1.5.13.cd.ifdef.2
patch-1.5.13.cd.purge_message.3.4
patch-1.5.13.nt+ab.xtitles.4
patch-1.5.4.vk.pgp_verbose_mime
patch-1.5.6.dw.maildir-mtime.1
patch-1.5.8.hr.sensible_browser_position.3
Bref, celui fourni par le paquet Debian Mutt en version 1.5.17+20080114-1.

Pour la configuration voici :
set hostname=gmail.com
my_hdr From: Denis Bodor <lefinnois@gmail.com>
set use_envelope_from
set envelope_from_address= « lefinnois@gmail.com »
unignore Date Message-ID In-Reply-To

set move=no

# Configuration IMAP over SSL
# pass XXXXXXXX

set spoolfile=imaps://imap.gmail.com:993/INBOX
set imap_user = « lefinnois@gmail.com »
set imap_pass= »XXXXXXXX »
set imap_authenticators= »login »
set imap_passive= »no »
set folder = « imaps://imap.gmail.com:993 »
set postponed= »imaps://imap.gmail.com/[Gmail]/Brouillons »
set imap_check_subscribed= »yes »
set imap_list_subscribed= »yes »

# configuration SMTP
# pass XXXXXXXX

set smtp_url= »smtps://lefinnois:XXXXXXXX@smtp.gmail.com:465″
set ssl_starttls= »yes »

# locales FR pour les nom des jours et mois
set locale= »fr_FR »
# Format de date
set date_format= »%A %d %b %Y à %H:%M:%S (%Z) »
# phrase d’intro pour réponse quotée
set attribution= »Le %d, %n a écrit : »
set forward_format= »[Fwd: %s] »
set forward_quote

mailboxes !

color attachment magenta default # attachments
color body brightred default « (ftp|http)://[^ ]+ » # point out URLs
color body brightcyan default [-a-z_0-9.]+@[-a-z_0-9.]+ # e-mail addresses
color bold brightblue default # boldface text
color error brightwhite red # error messages
color hdrdefault magenta default # default color of message header
color header brightmagenta default ^(From): # From and Subject header
color header brightwhite default ^(Subject): # From and Subject header
color header brightwhite default ^(Date): # Date header
color header white default ^(In-Reply-To):
color indicator brightred default # indicator bar
color markers brightblue default # wrapped line markers (+)
color message brightblack green # status messages
color normal default default # default
color quoted yellow default # quoted text, 1st quote level
color quoted1 green default # quoted text, 2nd quote level
color quoted2 brightblue default # quoted text, 3rd quote level
color quoted3 blue default # quoted text, 4th quoet level
color search black yellow # matched search patterns in pager
color signature red default # the signature (after sigdashes)
color status default blue # status lines
color tilde brightblue default # « ~ » used to pad blank lines
color tree green default # thread tree in the index menu
color underline brightgreen default # underlined text

set charset= »iso-8859-1″

set pager_index_lines=7
set pager_stop
Et voilà un Mutt tout bien pour Gmail. Jetez un oeil aux recommandations de Google sur la configuration du MUA, en particulier sur le fait de ne pas avoir besoin de configurer une sauvegarde des messages envoyés lorsqu’on utilise le SMTP Google.

Et voilà, Lefinnois est en mesure de lire et répondre à ses messages depuis le Web, le mobile, et différents Mutt sur différentes box. Que demander de plus ? Une sauvegarde des messages sur un autre système… nous allons voir ce que isync, le synchroniseur d’IMAP, peut faire pour nous…

Ajout (merci Gaston) : Pour accélérer le bouzin IMAP on peut utiliser des caches :
set message_cachedir= »/home/denis/.mutt_msg_cache »
set header_cache= »/home/denis/.mutt_header_cache »

Titrage vidéo en ligne de commande avec ffmpeg

Un soir de calme je me dis tranquillement, tiens je vais monter une petite vidéo. Rien de bien compliquer, deux vidéos provenant d’un appareil photo numérique à fusionner avec quelques pages de titres… Tout motivé j’essai Cinelerra, Kino, KDEnlive… Galère ! Usine à gaz ! Crash d’application ! Format non supporté ! La misère.

Retour à la réalité. Les applications graphiques klika-convi-crash c’est pas pour moi. Hop, méthode oldschool avec un peu de Gimp, ffmpeg et du shellJ’ai deux fichiers :
% ffmpeg -i cimg0768.avi
libavutil version: 49.5.0
libavcodec version: 51.44.0
libavformat version: 51.13.3
built on Sep 17 2007 15:29:56, gcc: 4.2.1 (Debian 4.2.1-5)
Input #0, avi, from ‘cimg0768.avi’:
Duration: 00:00:50.6, start: 0.000000, bitrate: 2006 kb/s
Stream #0.0: Video: mjpeg, yuvj420p, 320×240, 14.99 fps(r)
Must supply at least one output file
Première étape, le me fabrique mes titres en 320*240 avec The Gimp. De simples images PNG. Dans un coin, je joue du Bash pour multiplier tout cela. Il m’en faut 30 pour 2 secondes de titre en 15fps :
for ((i=1;i<=30;i+=1));
do
cp ../premier.png premier$i.png;
done
On fabrique une video :
% ffmpeg -f image2 -r 15 -i premier%d.png premier.avi
On fait de même pour les autres titres et on obtient quatre videos mpeg4.

Attention nos videos de l’APN sont en mjpeg. Hop conversion :
% ffmpeg -i cimg0768.avi -r 15 v1.avi
% ffmpeg -i cimg0769.avi -r 15 v2.avi
Et on assemble le tout :
% avimerge -o OK.avi -i premier.avi second.avi
v1.avi troisieme.avi v2.avi fin.avi
Et voilà. Titrage sans crise de nerfs.

Cadeau bonus : un petit lien sympa.

Gravure d'image .nrg sous GNU/Linux

C’est tout bête mais lorsqu’on vous donne un fichier .nrg (format d’image CD de Nero) et bien que certains racontent qu’il s’agit d’image ISO, on se retrouve comme une truffe.

La solution est tout aussi stupide que le problème et se règle avec un :
% sudo apt-get install nrg2iso
% nrg2iso image.nrg image.iso
Et voilà. En espérant que cela serve à quelqu’un plutôt que de chercher des choses plus étranges (je vous passe les détails des solutions que j’avais envisagées) .

Debian et machine virtuelle KVM

Ayant dernièrement acheté une nouvelle configuration (Intel Core2Quad Q6600 sur ASRock 4CoreDual-SATA2) j’ai, bien entendu, décidé d’enfin jouer un peu avec la virtualisation et Xen 3.1. Malheureusement le kernel Xen basé sur un 2.6.18 n’intègre pas de support pour le contrôleur IDE de la carte mère (VIA vt8237s). On remarquera que le support existe dans des nouveau kernel mais ainsi qu’un hack pour le 2.6.18. Ubuntu dispose également d’un 2.6.22 « xenifié » sous forme de paquet .deb.

Ceci étant, plutôt que de le lancer dans d’immondes bidouilles j’ai tourné mon regard vers KVM, le support de virtualisation intégré au kernel. El là, suprise ! C’est convi, rapide et simple.

Installation des outils userspace :
% apt-get install kvm qemu
Chargement du module pour le support VT Intel :
% modprobe kvm-intel
Création d’une image disque de 5 giga en CoW (Copy on Write) pour économiser de la place (les 5Go ne sont pas réellement utilisés mais uniquement l’espace effectivement occupé par les données de l’image disque):
% qemu-img create disk.cow 5G
Lancement de kvm avec utilisation de l’image ISO d’installation de Debian 4.0 (avec 512Mo de mémoire pour le système) :
% kvm -hda disk.cow -cdrom /path/debian-40r1-i386-businesscard.iso -boot d -m 512
Installation classique minimale Debian… et enfin utilisation du système via :
% kvm -hda disk.cow -m 512
La configuration par défaut est entièrement automatique. Le système hébergé reçoit une adresse IP via DHCP et le routage est automatique. Ainsi la distribution Debian peut directement être mise à jour. C’est le système de routage userspace de KVM/QEMU. Ceci n’est pas très satisfaisant à mon goût.

Ne disposant que d’une seule interface ethernet matérielle dans le système hôte (nommée eth1 en raison d’un problème udev dont je parlerai pas ailleurs) l’idée de base est de créer un bridge ethernet reliant eth1 et une interface TUN/TAP.

Phase 1, on installe le paquet uml-utilities contenant l’utilitaire tunctl :
% apt-get install uml-utilities
On descend ensuite le réseau façon Debian :
% /etc/init.d/network stop
Puis on change /etc/network/interfaces comme ceci :
auto lo eth1 tap10 br0

iface lo inet loopback

iface tap10 inet manual
pre-up tunctl -b -u denis -t tap10
pre-up ifconfig tap10 up
post-down tunctl -d tap10

iface br0 inet static
bridge_ports eth1 tap10
bridge_maxwait 0
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.10

iface eth1 inet manual
Dans l’ordre, on configure le loopback puis eth1. On créé ensuite tap10 (tap0 est utilisé par ailleurs avec OpenVPN) et on bridge eth1 et tap10 en donnant une adresse au bridge. eth1 et tap10 sont donc maintenant physiquement connecté au même hub virtuel. tap10 est « le bout de câble » connecté à notre eth0 dans le système Debian tournant dans la KVM. On démarre celui-ci avec :
% kvm -hda disk.cow -m 512 -net nic -net tap,ifname=tap10
Dans le /etc/network/interfaces du système on trouve :
iface eth0 inet static
address 192.168.0.200
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.10
Et voilà, le tour est joué. Le système KVM est accessible depuis le système hôte via 192.168.0.200 comme s’il était sur le réseau (en fait, il l’est via le bridge).

Gestion facile des certificats SSL

Utiliser la commande openssl peut être très intéressant car elle couvre l’ensemble des fonctionnalités liées aux certificats SSL/TLS. Cependant, lorsqu’on souhaite simplement générer quelques certificats pour les clients Web, un VPN ou n’importe quelle infrastructure réduite utilisant des certificats x509, la configuration de l’ensemble et l’utilisation de la commande openssl est quelque peu… éprouvante. Heureusement, il existe une petite interface (GUI) permettant de se simplifier la vie.

La chose s’appelle TinyCA. Il s’agit d’une application Perl/GTK+ permettant la gestion d’une ou plusieurs autorités de certification. Vous commencez donc par créer celle-ci avant de produire ou d’importer les demandes de certificats de vos « clients ».

Toujours via l’interface, vous pouvez signer ces demandes pour en faire des certificats. L’ensemble de l’application est relativement intuitif est permet divers actions dont :
la génération de demandes et de clefs privées
la signature des demandes
l’exportation des certificats dans plusieurs formats (ceux proposés par openssl)
la gestion de la liste de révocation des certificats (également exportable)
le support pour plusieurs autorités de certification

L’ensemble des données de l’application est placé dans un répertoire ~/.TinyCA de manière claire et structurée. En d’autres termes, il est très facile de sauvegarder les informations de chaque autorité de certification. On remarquera également que les données sont stockées de manière logique et au format PEM. Il est donc très facile de les réutiliser avec openssl ou toutes autres applications de gestion ou PKI.

TinyCA2 est présent sous la forme de paquet pour bon nombre de distributions, dont Debian GNU/Linux. Pour plus d’informations vous pouvez visitez le site du développeur : http://tinyca.sm-zone.net/

Désactiver ipv6 sur Debian GNU/Linux

Lorsqu’on install une nouvelle distribution Debian 4.0, par défaut le support IPv6 est activé. Il peut en découler quelques problème ou même simplement des ralentissement. En effet, toutes les applications vont, par exemple utiliser le support IPv6 pour la résolution de nom avant ou après avoir fait l’essai avec IPv4.

C’est le cas pour mplayer utilisé pour lire un flux audio ou vidéo :
[…]
Resolving live.radio-gresivaudan.org for AF_INET6…
Couldn’t resolve name for AF_INET6: live.radio-gresivaudan.org
Resolving live.radio-gresivaudan.org for AF_INET…
Connecting to server live.radio-gresivaudan.org[217.117.157.190]: 8000…
[…]
Il existe une méthode simple pour désactiver le support IPv6. Il suffit d’interdire au système de charger le module correspondant. Editez le fichier /etc/modprobe.d/blacklist et ajoutez la ligne :
blacklist ipv6
Editez ensuite votre /etc/hosts pour enlever les entrées IPv6.

Une autre solution (moins élégante je trouve) consiste à modifier /etc/modprobe.d/aliases de :

alias net-pf-10 ipv6

en

alias net-pf-10 off
alias ipv6 off

Il ne vous reste plus qu’à redémarrer le système (ce n’est pas strictement nécessaire, il est possible de faire autrement, mais c’est bien plus simple, surtout après une installation). Un petit ifconfig vous confirmera qu’IPv6 n’est plus gérer (plus de adr inet6:).

Pour les autres distributions GNU/Linux (Gentoo, Fedora, SUSE, etc), je vous recommande la lecture de ce billet sur beranger.org.