blog-source/output/feeds/feed.atom.all.xml

2196 lines
195 KiB
XML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Wxcafé</title><link href="//wxcafe.net/" rel="alternate"></link><link href="//wxcafe.net/feeds/feed.atom.all.xml" rel="self"></link><id>//wxcafe.net/</id><updated>2015-08-22T02:43:00+02:00</updated><entry><title>les NUCs et le HDMI-CEC</title><link href="//wxcafe.net/posts/nuc-hdmi-cec/" rel="alternate"></link><updated>2015-08-22T02:43:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/</id><summary type="html">&lt;p&gt;J&amp;rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé,
passons rapidement sur ce qui y est lié : ne souhaitant pas &amp;ldquo;profiter&amp;rdquo; du
paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis
tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais
brancher sur ma télévision un système me permettant de regarder ces films et
séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix,
etc&amp;hellip;) simplement.&lt;/p&gt;
&lt;p&gt;Ayant un &lt;a href="https://www.raspberrypi.org/"&gt;Raspberry Pi 1&lt;/a&gt; qui trainait, j&amp;rsquo;ai
décidé d&amp;rsquo;installer &lt;a href="http://openelec.tv/"&gt;OpenELEC&lt;/a&gt; dessus et de voir ce que ça
donnait. Le résultat n&amp;rsquo;étant pas satisfaisant (a cause des difficultés du RPi
a faire fonctionner tout ça), j&amp;rsquo;ai décidé d&amp;rsquo;upgrader le système.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai donc acquis un &lt;a href="http://www.amazon.fr/gp/product/B00GPJ83EU"&gt;NUC D34010WYK&lt;/a&gt;
(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un
&lt;a href="http://www.amazon.fr/dp/B00WU5F8MS/"&gt;adaptateur HDMI-CEC&lt;/a&gt; pour celui-ci, et un
&lt;a href="http://www.amazon.fr/gp/product/B00INTR4ZE"&gt;SSD mSATA&lt;/a&gt;, en me disant que je
pourrais sans trop de problème faire tourner &lt;a href="http://kodi.tv/"&gt;Kodi&lt;/a&gt; sur un
debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&amp;rsquo;autre
avantage de tourner sur du Intel, c&amp;rsquo;est de pouvoir mater Netflix (puisque le
plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que
sur x86).&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&amp;rsquo;ai avidement
monté, avant de me rendre compte que le manuel de l&amp;rsquo;adaptateur Pulse-Eight était
[PDF]&lt;a href="https://www.pulse-eight.com/Download/Get/30"&gt;assez médiocre&lt;/a&gt;. J&amp;rsquo;ai donc
cherché plusieurs heures, avant de trouver [DE]&lt;a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test"&gt;ce
post&lt;/a&gt;
expliquant comment brancher l&amp;rsquo;adaptateur. Je vais donc résumer ici le processus,
ce qui devrait rendre la tache a la fois plus simple pour les autres personnes
cherchant l&amp;rsquo;information, et pour moi si je dois remonter ce système.&lt;/p&gt;
&lt;p&gt;Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit
&amp;ldquo;Front Panel&amp;rdquo;, et un appelé &amp;ldquo;Custom Solution Header&amp;rdquo;. Les trois sont utilisés
ici. La première chose a faire est de brancher les fiches grises et rouges sur
le Custom Solution Header: le branchement doit être fait ainsi :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;Custom Solution
┌─┬─┬─┬─┬─┐
│g│ │·│r│·│
├─┼─┼─┼─┼─┤
│·│·│·│·│·│
└─┴─┴─┴─┴─┘
g ➔ fiche grise
r ➔ fiche rouge
· ➔ pin inutilisé
➔ espace vide (sans pin)
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&amp;rsquo;est plus
facile, puisqu&amp;rsquo;il n&amp;rsquo;y a qu&amp;rsquo;une seule fiche a brancher ici : la orange.&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt; Front Panel
┌─┬─┬─┬─┬─┐
│·│·│·│·│·│
├─┼─┼─┼─┼─┤
│ │·│o│·│·│
└─┴─┴─┴─┴─┘
o ➔ fiche orange
· ➔ pin inutilisé
➔ espace vide (sans pin)
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enfin, il faut encore brancher les fiches restantes sur le header dual-USB.
Étant donné que ce header contient deux fois les pins nécessaires a un
branchement USB, il est possible de brancher les cables de plusieurs façons. &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt; Dual-USB
┌─┬─┬─┬─┬─┐
│b│B│v│n│·│
├─┼─┼─┼─┼─┤
│·│·│·│·│ │
└─┴─┴─┴─┴─┘
b ➔ fiche bleue
B ➔ fiche Blanche
v ➔ fiche verte
n ➔ fiche noire
· ➔ pin inutilisé
➔ espace vide (sans pin)
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tous les branchements étant effectués, il faut maintenant remonter la bête
(attention a ne pas déranger les branchements avec les antennes Wifi, par
exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer
un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut
que &amp;ldquo;Deep S4/S5&amp;rdquo; soit &lt;em&gt;dés&lt;/em&gt;activé. Ceci permettant a la connection HDMI-CEC de
démarrer et le NUC.&lt;/p&gt;
&lt;p&gt;Ne reste plus ensuite qu&amp;rsquo;a installer un système digne de ce nom dessus!&lt;/p&gt;</summary></entry><entry><title>SSL - STARTTLS</title><link href="//wxcafe.net/posts/ssl-starttls/" rel="alternate"></link><updated>2015-05-16T02:00:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2015-05-16:posts/ssl-starttls/</id><summary type="html">&lt;p&gt;Le chiffrement SSL pour les services en ligne est un problème relativement
récent, par rapport a l&amp;rsquo;histoire d&amp;rsquo;Internet. Sa mise en place pose
problème : les protocoles existants ne s&amp;rsquo;accommodent qu&amp;rsquo;assez mal de recevoir
soudainement un flot de données chiffrées, mais développer de nouveaux
protocoles est complexe et n&amp;rsquo;apporte rien d&amp;rsquo;intéressant. Pour palier a ce
problème, deux solutions sont apparues.&lt;/p&gt;
&lt;p&gt;Le première consiste à faire écouter les services sur un
autre port, dans un tunnel SSL. De cette façon, le service existant écoute
normalement, mais il ne répond pas directement aux requêtes. A la place, un
tunnel SSL est mis en place, et les requêtes et les réponses passent dans le
tunnel (ou elles apparaissent donc chiffrées pour l&amp;rsquo;extérieur). Cela permet de
proposer un service chiffré en modifiant de façon minimale le programme, au prix
de devoir aussi changer tous les clients, et de devoir les orienter sur un autre
port.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;autre approche qui a été utilisée est une approche d&amp;rsquo;&lt;em&gt;upgrade&lt;/em&gt;. La
communication commence en mode non chiffré, puis le client demande l&amp;rsquo;upgrade de
la connexion vers le mode chiffré s&amp;rsquo;il le supporte, les deux machines
machines font un &lt;em&gt;handshake&lt;/em&gt; SSL et la communication continue a travers le
tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls
les clients capables de passer en SSL le feront, ce qui permet de faire la &amp;ldquo;mise
a jour&amp;rdquo; en douceur.&lt;/p&gt;
&lt;p&gt;Il est souvent demandé quelle est la meilleure méthode pour mettre en place un
service &amp;ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien
un seul, avec &lt;code&gt;STARTTLS&lt;/code&gt;, qui &lt;em&gt;upgrade&lt;/em&gt; les connexions si nécessaire.&lt;br /&gt;
La réponse est que &lt;code&gt;STARTTLS&lt;/code&gt; est plus interessant, pour plusieurs raisons. Tout
d&amp;rsquo;abord, il permet de n&amp;rsquo;utiliser qu&amp;rsquo;un seul port : ça permet de simplifier la
configuration du firewall. En plus de ça, il permet aux clients &amp;ldquo;anciens&amp;rdquo; (ceux
qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se
connecter, même si cela signifie que leurs informations seront transmises en
clair. Surtout, il permet d&amp;rsquo;éviter aux utilisateurs d&amp;rsquo;avoir a configurer leurs
clients. Si le client supporte le chiffrement, il l&amp;rsquo;activera de lui même s&amp;rsquo;il
voit qu&amp;rsquo;il est disponible.&lt;br /&gt;
Bref, mettez en place du &lt;code&gt;STARTTLS&lt;/code&gt;, et pas du SSL. C&amp;rsquo;est mieux pour la sécurité
de tout le monde.&lt;/p&gt;</summary></entry><entry><title>Manettes : Hori vs. PDP</title><link href="//wxcafe.net/posts/hori-vs-pdp/" rel="alternate"></link><updated>2015-04-19T21:59:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/</id><summary type="html">&lt;p&gt;Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus
compte de quelques petits trucs : tout d&amp;rsquo;abord, Smash est bien plus drôle
a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &amp;ldquo;choses&amp;rdquo;
: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro
Controllers pour Wii et Wii U, et d&amp;rsquo;autres. Vous aurez aussi remarqué que le
Gamepad n&amp;rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes.
Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles
manettes Gamecube.&lt;/p&gt;
&lt;p&gt;Cela étant, si comme moi vous avez, euh, &amp;ldquo;ouvert&amp;rdquo; le mode vWii de votre Wii U,
vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et
donc pas assez de ports libres pour connecter &lt;a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI"&gt;l&amp;rsquo;adaptateur GC pour Wii
U&lt;/a&gt;
a votre console. &lt;/p&gt;
&lt;p&gt;Heureusement pour vous, Nintendo a pensé a une solution (et comme d&amp;rsquo;habitude
avec Nintendo, c&amp;rsquo;est une solution a moitié satisfaisante&amp;hellip;) : les classic
controller, mais en forme de manettes Gamecube.&lt;/p&gt;
&lt;p&gt;Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont
empressées de faire des manettes et de ramasser des brouettes d&amp;rsquo;argent, en
faisant des manettes Gamecube qui se connectent a des Wiimotes.&lt;/p&gt;
&lt;p&gt;Nous allons ici voir deux modèles, un de chacune des boites en question
: &lt;a href="http://www.pdp.com/"&gt;PDP&lt;/a&gt; et &lt;a href="http://stores.horiusa.com/"&gt;Hori&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Toutes les photos présentes dans cet article sont disponibles en plus grande
taille en cliquant dessus&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Commençons par le modèle de chez Hori :&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"&gt;&lt;img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette
de Gamecube : a part le bouton Turbo et le bouton Home, le reste est
parfaitement identique a une véritable manette Gamecube. A noter que les boutons
centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en
plastique dur.&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"&gt;&lt;img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne
sont en réalité que des boutons : c&amp;rsquo;est logique puisque c&amp;rsquo;est comme ça que les
classic controller sont faits, mais c&amp;rsquo;est décevant tout de même&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"&gt;&lt;img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On peut voir ici que la qualité de l&amp;rsquo;assemblage n&amp;rsquo;est pas extraordinaire, et on
remarque une soudure mal faite a l&amp;rsquo;emplacement du stick gauche.&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"&gt;&lt;img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le stick c n&amp;rsquo;est pas fixé au reste de la manette.
J&amp;rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais
les câbles n&amp;rsquo;avaient pas l&amp;rsquo;air de très bonne qualité, et j&amp;rsquo;ai préféré abandonner
l&amp;rsquo;idée plutôt que de casser la manette.&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"&gt;&lt;img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;On peut voir que la coque est complètement vide, et que les gâchettes sont bien
en réalité de simple boutons. Il y aurait presque la place de mettre la carte
mère d&amp;rsquo;une Wiimote entière la dedans&amp;hellip;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Passons maintenant a la manette PDP.&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"&gt;&lt;img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Au premier coup d&amp;rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins
a une manette gamecube. Cependant, la prise en main est exactement la même. On
regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube,
et les boutons transparents (mais c&amp;rsquo;est un problème de goût).&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"&gt;&lt;img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Les gâchettes sont des vraies gâchettes! C&amp;rsquo;est impossible normalement, mais PDP
a été très intelligent sur le coup, comme on va le voir juste après.&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"&gt;&lt;img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien
moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien
attachées a la carte mère, et la structure en plastique est renforcée. Mais
surtout, on peut voir deux cartes filles qui sortent de façon étrange de la
carte mère, de façon &lt;strike&gt;péremptoire&lt;/strike&gt; perpendiculaire&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"&gt;&lt;img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Vous l&amp;rsquo;avez deviné, ces deux &amp;ldquo;cartes filles&amp;rdquo; servent en réalité de connecteurs
aux boutons situés sur les gâchettes, qui sont de &amp;ldquo;vraies&amp;rdquo; gâchettes en cela
qu&amp;rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc)
mais qui sont en réalité des boutons (évidemment, puisque cette manette est en
fait un classic controller), par opposition aux véritables gâchettes
analogiques.&lt;/p&gt;
&lt;p&gt;Quelques photos des gâchettes en question :&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"&gt;&lt;img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"&gt;&lt;img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"&gt;&lt;img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"&gt;&lt;img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Vous l&amp;rsquo;aurez compris, je préfère la version PDP de ces &amp;ldquo;Fight Pad&amp;rdquo;, la finition
semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont
pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le
reste est parfait. Si vous préférez avoir une manette dont la prise en mains est&lt;strong&gt;totalement&lt;/strong&gt; identique a celle des manettes Gamecube, cependant, la version
Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.&lt;/p&gt;</summary></entry><entry><title>Docker et les ebooks sur Twitter</title><link href="//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/" rel="alternate"></link><updated>2015-02-28T14:11:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/</id><summary type="html">&lt;p&gt;Vous avez peut être déjà entendu parler de &lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt;. Si
ce n&amp;rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les
containers sont une forme particulière de virtualisation, ou le kernel n&amp;rsquo;est pas
virtualisé, mais ou les processus du système hôte sont séparés de ceux des
systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les &lt;a href="https://www.freebsd.org/doc/en/books/handbook/jails.html"&gt;Jails&lt;/a&gt;,
mais n&amp;rsquo;est devenu possible sous linux que récemment grâce aux &lt;a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt"&gt;cgroups&lt;/a&gt;,
qui permettent justement de séparer des groupes de processus. Le principe de
Docker est donc d&amp;rsquo;avoir une machine hôte sur laquelle s&amp;rsquo;exécutent plusieurs
conteneurs Dockers, chacun séparé des autres et de l&amp;rsquo;hôte, mais utilisant tous
le même kernel. Cela pose quelques questions en terme de sécurités, puisque la
séparation est bien plus fine qu&amp;rsquo;avec de la virtualisation classique. En effet,
ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la
capacité de remonter jusqu&amp;rsquo;à l&amp;rsquo;hôte, puisqu&amp;rsquo;il n&amp;rsquo;est pas vraiment séparé des
invités. &lt;/p&gt;
&lt;p&gt;Quoi qu&amp;rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des
systèmes GNU/Linux. &amp;ldquo;Mais pourquoi utiliser Docker, dans ce cas&amp;rdquo;, vous
demandez-vous peut être, &amp;ldquo;puisque Xen peut faire la même chose, et plus
(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&amp;rdquo;. Et bien
c&amp;rsquo;est très simple : Docker apporte la simplicité de déploiement d&amp;rsquo;applications.
Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui
permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une
commande. Le &lt;a href="https://hub.docker.com"&gt;Docker Hub&lt;/a&gt; permet aussi de récupérer
rapidement et facilement un grand nombre d&amp;rsquo;images déjà configurées. &lt;/p&gt;
&lt;p&gt;Maintenant que nous avons expliqué rapidement ce qu&amp;rsquo;était Docker, voyons le
rapport avec les ebooks et Twitter.&lt;/p&gt;
&lt;p&gt;Les comptes dits &amp;ldquo;ebooks&amp;rdquo; (le nom vient a l&amp;rsquo;origine de &lt;a href="https://twitter.com/horse_ebooks"&gt;horse_ebooks&lt;/a&gt;,
voir &lt;a href="https://en.wikipedia.org/wiki/Horse_ebooks"&gt;ici&lt;/a&gt; pourquoi) sont des bots
twitter utilisant des &lt;a href="https://en.wikipedia.org/wiki/Markov_chain"&gt;Chaines de Markov&lt;/a&gt;,
avec les tweets d&amp;rsquo;un utilisateur &amp;ldquo;source&amp;rdquo; comme corpus, pour produire des tweets
ressemblant a ceux de l&amp;rsquo;utilisateur source. Nous allons voir maintenant comment
en installer un.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est, comme disent certaines personnes, &amp;ldquo;fun&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Il existe de nombreuses librairies écrites pour créer ce genre de bots,
cependant dans ce cas nous nous concentrerons sur
&lt;a href="https://github.com/mispy/twitter_ebooks"&gt;celle-ci&lt;/a&gt;, qui est une lib ruby créée
par &lt;a href="https://twitter.com/m1sp"&gt;@m1sp&lt;/a&gt;, qui gère pour nous a la fois l&amp;rsquo;API
twitter et la génération des messages.&lt;/p&gt;
&lt;p&gt;Cependant, cela n&amp;rsquo;explique toujours pas le lien avec Docker. Ce lien est très
simple : nous utilisons un container pour faire tourner les bots. Depuis la
version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une
seule instance. Cependant, il est toujours plus sûr d&amp;rsquo;isoler les bots, et les
containers dockers permettent de les déployer sur n&amp;rsquo;importe quelle machine
(celleux qui ont déjà tenté de mettre en place une application basée sur ruby
sauront le problème que cela pose habituellement). Pour ce faire, j&amp;rsquo;ai créé &lt;a href="https://github.com/wxcafe/ebooks_example"&gt;un
repo github&lt;/a&gt; qui contient toutes les
pièces nécessaires pour mettre cela en place : le bot en lui même, les deux
Dockerfiles, etc.&lt;/p&gt;
&lt;p&gt;Le fonctionnement du bot est
simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de
l&amp;rsquo;utilisateur source avec &lt;code&gt;ebooks archive &amp;lt;username&amp;gt; &amp;lt;filename&amp;gt;&lt;/code&gt; (c&amp;rsquo;est du json)
, puis vous convertissez le json en fichier utilisable par le bot : &lt;code&gt;ebooks
consume &amp;lt;filename&amp;gt;&lt;/code&gt;. Cela fait, démarrer le bot revient a lancer le container :
&lt;code&gt;docker run -d &amp;lt;container name&amp;gt;&lt;/code&gt; Pour plus d&amp;rsquo;informations, allez voir &lt;a href="https://docs.docker.com/articles/basics/"&gt;la
documentation Docker&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bien entendu, dans l&amp;rsquo;idéal il faudrait mettre a jour les corpus de chaque
utilisateur régulièrement. Cela est très simple a mettre en place avec un simple
script cron : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &amp;gt;&amp;gt; /var/log/ebooks/update.log 2&amp;gt;&amp;amp;1
00 05 * * * cd /usr/local/ebooks/main/ &amp;amp;&amp;amp; /usr/local/bin/ebooks consume corpus/username.json &amp;gt;&amp;gt; /var/log/ebooks/update.log 2&amp;gt;&amp;amp;1
00 10 * * * docker rm -f bots &amp;gt;/dev/null 2&amp;gt;&amp;amp;1
00 15 * * * docker rmi bots &amp;gt; /dev/null 2&amp;gt;&amp;amp;1
00 20 * * * cd /usr/local/ebooks/main/ &amp;amp;&amp;amp; docker build --rm -t bots . &amp;gt;&amp;gt; /var/log/ebooks/build.log 2&amp;gt;&amp;amp;1
00 25 * * * docker run -d --name bots bots &amp;gt;&amp;gt; /var/log/ebooks/run.log 2&amp;gt;&amp;amp;1
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les 5 minutes entre chaque commande sont laissées pour empécher que deux
commandes ne s&amp;rsquo;executent en même temps.&lt;/p&gt;
&lt;p&gt;Et voila, vous avez un container Docker qui fait tourner une application en ruby
toute sale, et votre système hôte reste propre. Bien sûr, ce n&amp;rsquo;est qu&amp;rsquo;un exemple
des possibilités de Docker : par exemple, on peut aussi faire tourner &lt;a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html"&gt;des
applications &amp;ldquo;usuelles&amp;rdquo;
dedans&lt;/a&gt;,
puisque l&amp;rsquo;overhead de Docker est minimal, et beaucoup d&amp;rsquo;autres applications
existent.&lt;/p&gt;</summary></entry><entry><title>OpenSMTPd comme serveur mail sous debian</title><link href="//wxcafe.net/posts/opensmtpd-debian/" rel="alternate"></link><updated>2014-11-07T13:04:00+01:00</updated><author><name>Wxcafé</name></author><id>tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/</id><summary type="html">&lt;p&gt;J&amp;rsquo;avais dit il y a un certain temps que j&amp;rsquo;allais écrire un tutoriel expliquant
comment gérer ses mails soi-même. Il se trouve que j&amp;rsquo;ai récemment décidé de
changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge
aussi mes emails. J&amp;rsquo;ai donc totalement changé d&amp;rsquo;infrastructure quand a la
gestion de mon système de mails.&lt;/p&gt;
&lt;p&gt;Ainsi, j&amp;rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
effectuer depuis un certain temps. &lt;a href="https://opensmtpd.org"&gt;OpenSMTPd&lt;/a&gt; est un
projet originaire d&amp;rsquo;&lt;a href="http://openbsd.org"&gt;OpenBSD&lt;/a&gt; qui a pour but de fournir un
serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux
qu&amp;rsquo;a le projet OpenBSD, globalement).&lt;/p&gt;
&lt;p&gt;Pour rappel, le système d&amp;rsquo;emails fonctionne d&amp;rsquo;une façon très simple : votre MUA
(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou
serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du
destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le
mail au destinataire.&lt;/p&gt;
&lt;p&gt;Si vous avez bien suivi, vous pouvez voir que je n&amp;rsquo;ai pas parlé de récupération
ni de lecture des mails. C&amp;rsquo;est pour une raison simple, qui est que ces taches
sont remplies par d&amp;rsquo;autres services encore (IMAP/POP pour la récupération depuis
le serveur, des yeux pour la lecture).&lt;/p&gt;
&lt;p&gt;Or ce qui nous intéresse ici, ce n&amp;rsquo;est pas simplement d&amp;rsquo;envoyer et de recevoir
des emails mais bien aussi de pouvoir les récupérer et les lire, et c&amp;rsquo;est pour
ça que ce tutoriel ne parlera pas que d&amp;rsquo;OpenSMTPd mais aussi de &lt;a href="http://dovecot.org/"&gt;Dovecot&lt;/a&gt; qui fait office de serveur IMAP et
&lt;a href="http://www.ijs.si/software/amavisd/"&gt;amavis&lt;/a&gt;/&lt;a href="http://spamassassin.apache.org/"&gt;spamassassin&lt;/a&gt;
pour filtrer les mails entrants et sortants.
Le schéma suivant explique la façon dont les mails sont gérés sur le système&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt; ╭────────────────╮ ╭──────────╮
│╭──────────────&amp;gt;│────&amp;gt; to filter ───&amp;gt;│─╮ │
mail in ││ │ │ │ amavis │
───────────&amp;gt;│╯ OpenSMTPd ╭──│&amp;lt;─── from filter&amp;lt;───│&amp;lt;╯ │
│ │ │ ╰──────────╯
mail out │ │ │ ╭──────────╮
&amp;lt;───────────│&amp;lt;────────────┴─&amp;gt;│─────&amp;gt; to MDA ─────&amp;gt;│─────────&amp;gt;│──&amp;gt; to user&amp;#39;s
│ │ │ dovecot │ mailbox
╰────────────────╯ ╰──────────╯
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Normalement, ceci devrait être a peu près clair.
Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
aussi d&amp;rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a&lt;code&gt;amavis&lt;/code&gt;, qui vérifie a la fois les spams et les malwares pour les mails
venants de l&amp;rsquo;exterieur, et qui signe avec DKIM pour les mails venants de
nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,
qui a ce moment-ci trie en fonction de la destination : les mails gérés
par le domaine vont via dovecot dans les boites mail des destinataires
locaux, les mails exterieurs vont directement vers le MTA du serveur
distant.&lt;/p&gt;
&lt;p&gt;Voyons comment mettre cela en place. Tout d&amp;rsquo;abord, il faut décider de la façon
dont les différents services vont communiquer.&lt;/p&gt;
&lt;p&gt;Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port
10024 et répondre sur le port 10025 quand il s&amp;rsquo;agit de filtrer et
écouter sur le port 10026 et répondre sur le port 10027 quand il s&amp;rsquo;agit de
signer, nous allons profiter de cette configuration et donc lui parler en SMTP
sur ces ports.&lt;/p&gt;
&lt;p&gt;Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail
Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
&lt;code&gt;/var/run/dovecot/lmtp&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Ainsi, pour reprendre le schéma présenté plus haut :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt; ╭───────────────╮ ╭───────────╮
│╭─────────────&amp;gt;│──&amp;gt; SMTP (10026) ──&amp;gt;│─╮ │
SMTP in ││ │ │ │ amavis │
────────&amp;gt; 25│╯ OpenSMTPd ╭──│&amp;lt;── SMTP (10027) &amp;lt;──│&amp;lt;╯ (sign) │
│ │ │ ╰───────────╯
SMTP out │ │ │
25 &amp;lt;────────│&amp;lt;───────────╯ │
╰───────────────╯
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour les mails sortants; et&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt; ╭───────────────╮ ╭────────────╮
│╭─────────────&amp;gt;│──&amp;gt; SMTP (10024) ──&amp;gt;│─╮ │
SMTP in ││ │ │ │ amavis │
────────&amp;gt; 25│╯ OpenSMTPd ╭──│&amp;lt;── SMTP (10025) &amp;lt;──│&amp;lt;╯(filter) │
│ │ │ ╰────────────╯
│ │ │ ╭────────────╮
│ ╰─&amp;gt;│──&amp;gt; LMTP (socket) ─&amp;gt;│───────────&amp;gt;│──&amp;gt; to user&amp;#39;s
│ │ │ dovecot │ mailbox
╰───────────────╯ ╰────────────╯
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour les mails entrants.&lt;/p&gt;
&lt;p&gt;Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai
ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour
d&amp;rsquo;autres plateformes, la configuration devrait être sensiblement la même&lt;/p&gt;
&lt;p&gt;(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.
Si vous ne savez pas comment en créer, vous pouvez aller voir &lt;a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/"&gt;ce
post&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Tout d&amp;rsquo;abord, commençons par installer les programmes nécessaires :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/smtpd.conf&lt;/code&gt;&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;# This is the smtpd server system-wide configuration file.&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# See smtpd.conf(5) for more information.&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## Certs&lt;/span&gt;
pki exem.pl certificate &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/certs/exem.pl.crt&amp;quot;&lt;/span&gt;
pki exem.pl key &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/certs/exem.pl.key&amp;quot;&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## Ports to listen on, and how to listen on them&lt;/span&gt;
listen on eth0 port &lt;span style="color: #ae81ff"&gt;25&lt;/span&gt; tls pki exem.pl hostname exem.pl auth-optional
listen on eth0 port &lt;span style="color: #ae81ff"&gt;465&lt;/span&gt; tls-require pki exem.pl hostname exem.pl auth mask-source
listen on eth0 port &lt;span style="color: #ae81ff"&gt;587&lt;/span&gt; tls-require pki exem.pl hostname exem.pl auth mask-source
&lt;span style="color: #75715e"&gt;## Aliases&lt;/span&gt;
table aliases file:/etc/aliases
&lt;span style="color: #75715e"&gt;# coming from amavisd, checked for spam/malware&lt;/span&gt;
listen on lo port &lt;span style="color: #ae81ff"&gt;10025&lt;/span&gt; tag Filtered
&lt;span style="color: #75715e"&gt;# coming from amavisd, signed with DKIM&lt;/span&gt;
listen on lo port &lt;span style="color: #ae81ff"&gt;10027&lt;/span&gt; tag Signed
&lt;span style="color: #75715e"&gt;## Receiving&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# if the (incoming) mail has been through amavisd, then we can deliver it&lt;/span&gt;
accept tagged Filtered &lt;span style="color: #66d9ef"&gt;for&lt;/span&gt; any &lt;span style="color: #f8f8f2"&gt;alias&lt;/span&gt; &amp;lt;aliases&amp;gt; deliver to lmtp &lt;span style="color: #e6db74"&gt;&amp;quot;/var/run/dovecot/lmtp&amp;quot;&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# we directly tranfer incoming mail to amavisd to be checked &lt;/span&gt;
accept from any &lt;span style="color: #66d9ef"&gt;for&lt;/span&gt; domain &lt;span style="color: #e6db74"&gt;&amp;quot;exem.pl&amp;quot;&lt;/span&gt; relay via &lt;span style="color: #e6db74"&gt;&amp;quot;smtp://localhost:10024&amp;quot;&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# we have to put these lines in this order to avoid infinite loops&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## Sending&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# if the (outgoint) mail has been through amavisd, then we can deliver it&lt;/span&gt;
accept tagged Signed &lt;span style="color: #66d9ef"&gt;for&lt;/span&gt; any relay
&lt;span style="color: #75715e"&gt;# we tranfer the outgoing mail to amavisd to be signed&lt;/span&gt;
accept &lt;span style="color: #66d9ef"&gt;for&lt;/span&gt; any relay via &lt;span style="color: #e6db74"&gt;&amp;quot;smtp://localhost:10026&amp;quot;&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# same, we have to put these lines in this order or infinite loops...&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Expliquons un peu ce fichier de configuration :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tout d&amp;rsquo;abord, le paragraphe nommé &amp;ldquo;Certs&amp;rdquo; contient les déclaration
d&amp;rsquo;emplacement des certificats SSL.&lt;/li&gt;
&lt;li&gt;Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :
port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire&lt;/li&gt;
&lt;li&gt;Les alias sont définis juste après&lt;/li&gt;
&lt;li&gt;Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :
10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants
comme &amp;ldquo;Filtered&amp;rdquo; et 10027 (port de sortie des mails signés par amavis) dont on
taggue les mails sortants comme &amp;ldquo;Signed&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail
traité est taggué comme Filtered, alors il a été vérifié par amavis, et on
peut donc le transmettre au destinataire. Sinon, c&amp;rsquo;est qu&amp;rsquo;il n&amp;rsquo;a pas encore
été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024
donc). Il est important de mettre les déclarations dans ce sens, car la
première règle qui matche l&amp;rsquo;état du paquet est appliquée. Ici, la deuxième
ligne matchant tous les mails arrivant et la première seulement ceux filtrés,
inverser leur sens voudrait dire que les mails seraient toujours renvoyés a
amavis&lt;/li&gt;
&lt;li&gt;Enfin, le dernier paragraphe traite les mails sortants. De la même façon que
pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed
on le transmet au MTA du destinataire, sinon il n&amp;rsquo;a pas encore été signé par
DKIM par amavis et on le transmet donc a amavis pour qu&amp;rsquo;il le signe. Le
problème de l&amp;rsquo;ordre des lignes se pose encore, pour la même raison qu&amp;rsquo;au
dessus.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nous allons maintenant configurer dovecot. Comme nous l&amp;rsquo;avons vu, dovecot doit
écouter en LMTP via la socket &lt;code&gt;/var/run/dovecot/lmtp&lt;/code&gt; et transmettre les
emails a la boite email de l&amp;rsquo;utilisateur. Il serait aussi interessant
qu&amp;rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne
mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du
POP3[s], différents guides sont trouvables facilement sur internet.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/dovecot/dovecot.conf&lt;/code&gt;&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;## Dovecot configuration file&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# basic config&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;info_log_path&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; /var/log/dovecot-info.log
&lt;span style="color: #f8f8f2"&gt;log_path&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; /var/log/dovecot.log
&lt;span style="color: #f8f8f2"&gt;log_timestamp&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;quot;%Y-%m-%d %H:%M:%S &amp;quot;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;mail_location&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; maildir:%h/mail
&lt;span style="color: #75715e"&gt;# authentication&lt;/span&gt;
passdb &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;driver&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; pam
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
userdb &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;driver&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; passwd
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# the protocols we use&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;protocols&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; imap lmtp sieve
&lt;span style="color: #75715e"&gt;# ssl config&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;ssl_cert&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &amp;lt;/etc/certs/exem.pl.cert
&lt;span style="color: #f8f8f2"&gt;ssl_key&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &amp;lt;/etc/certs/exem.pl.key
&lt;span style="color: #f8f8f2"&gt;ssl_cipher_list&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
&lt;span style="color: #f8f8f2"&gt;ssl&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; yes
&lt;span style="color: #75715e"&gt;## configuring services &lt;/span&gt;
&lt;span style="color: #75715e"&gt;# disables imap login without SSL (yes dovecot is dumb that way)&lt;/span&gt;
service imap-login &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
inet_listener imap &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;port&lt;/span&gt;&lt;span style="color: #f92672"&gt;=&lt;/span&gt;&lt;span style="color: #ae81ff"&gt;0&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
service lmtp &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
unix_listener lmtp &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;mode&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; 0666
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## configuring protocols&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# the dovecot lda, we set it to use sieve&lt;/span&gt;
protocol lda &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;mail_plugins&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;$mail_plugins&lt;/span&gt; sieve
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
protocol lmtp &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;postmaster_address&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; whoever@exem.pl
&lt;span style="color: #f8f8f2"&gt;mail_plugins&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;$mail_plugins&lt;/span&gt; sieve
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
plugin &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;sieve&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; ~/.dovecot.sieve
&lt;span style="color: #f8f8f2"&gt;sieve_dir&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; ~/sieve
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;ATTENTION: Sous OpenBSD, remplacez&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;passdb &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;driver&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; pam
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;par&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;passdb &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;driver&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; bsdauth
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;pour identifier les utilisateurs système&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ici aussi, voyons comment ce fichier est structuré :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tout d&amp;rsquo;abord, les configurations de base : ou iront les logs, comment formater
leur datation, et l&amp;rsquo;endroit ou seront stockés les mails des utilisateurs.&lt;/li&gt;
&lt;li&gt;Nous configurons ensuite la gestion de l&amp;rsquo;authentification des utilisateurs.
Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs
mots de passe avec PAM (ou BSDAuth)&lt;/li&gt;
&lt;li&gt;Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de
l&amp;rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).&lt;/li&gt;
&lt;li&gt;Nous configurons le SSL&lt;/li&gt;
&lt;li&gt;Le section suivante contient la configuration des services. Nous avons en
premier lieu le service IMAP, dont la configuration sert uniquement a
désactiver IMAP. En effet, dovecot ne permet d&amp;rsquo;activer IMAPS qu&amp;rsquo;en activant
IMAP avec. Comme nous ne voulons pas d&amp;rsquo;IMAP sans SSL, nous le désactivons.
La configuration de lmtp sert a attribuer des permissions plus correctes au
fifo qu&amp;rsquo;il utilise&lt;/li&gt;
&lt;li&gt;Nous configurons maintenant les protocoles, pour faire fonctionner Sieve&lt;/li&gt;
&lt;li&gt;enfin, nous configurons le plugin sieve en lui indiquant quel fichier et
quel dossier utiliser pour sa configuration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir
a deux choses : signer les emails sortants, et filtrer les emails entrants. Il
doit donc écouter sur les port 10026 pour les signatures et 10024 pour le
filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en
SMTP. Comme toutes les transactions se font sur le loopback, il n&amp;rsquo;y a aucun
risque a utiliser des protocoles non chiffrés.
Pour OpenBSD, pensez a copier la configuration par défaut depuis&lt;code&gt;/usr/local/share/examples/amavisd-new/amavisd.conf&lt;/code&gt; et ajoutez les
modifications nécessaires a la fin du fichier.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/amavis/conf.d/99-local.conf&lt;/code&gt; (debian)
&lt;code&gt;/etc/amavis.conf&lt;/code&gt; (OpenBSD)&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #66d9ef"&gt;use&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;strict;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;$enable_dkim_verification&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;1&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;$enable_dkim_signing&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;1&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;dkim_key(&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;quot;exem.pl&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;quot;main&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/certs/dkim.key&amp;quot;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;);&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;@dkim_signature_options_bysender_maps&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;(&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;{&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;#39;.&amp;#39;&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;{&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ttl&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;21&lt;/span&gt;&lt;span style="color: #f92672"&gt;*&lt;/span&gt;&lt;span style="color: #ae81ff"&gt;24&lt;/span&gt;&lt;span style="color: #f92672"&gt;*&lt;/span&gt;&lt;span style="color: #ae81ff"&gt;3600&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;c&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;#39;relaxed/simple&amp;#39;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;}&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;}&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;);&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;$inet_socket_port&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[&lt;/span&gt;&lt;span style="color: #ae81ff"&gt;10024&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;10026&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;];&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;$policy_bank{&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;#39;MYNETS&amp;#39;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;}&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;originating&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;1&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;os_fingerprint_method&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;undef,&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;};&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;$interface_policy{&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;#39;10026&amp;#39;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;}&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;#39;ORIGINATING&amp;#39;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;$policy_bank{&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;#39;ORIGINATING&amp;#39;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;}&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;originating&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;1&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;allow_disclaimers&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;1&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;virus_admin_maps&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;quot;root\@$mydomain&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;],&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;spam_admin_maps&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;quot;root\@$mydomain&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;],&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;warnbadhsender&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;1&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;forward_method&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;#39;smtp:localhost:10027&amp;#39;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;smtpd_discard_ehlo_keywords&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;#39;8BITMIME&amp;#39;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;],&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;bypass_banned_checks_maps&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[&lt;/span&gt;&lt;span style="color: #ae81ff"&gt;1&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;],&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;terminate_dsn_on_notify_success&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;0&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;,&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;};&lt;/span&gt;
&lt;span style="color: #75715e"&gt;#------------ Do not modify anything below this line -------------&lt;/span&gt;
&lt;span style="color: #ae81ff"&gt;1&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #75715e"&gt;# ensure a defined return&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A nouveau, expliquons ce fichier :
- le premier paragraphe définit que nous voulons qu&amp;rsquo;amavis signe les emails
sortants, vérifie la signature DKIM des emails rentrants, et l&amp;rsquo;endroit ou se
trouve la clé privée servant a signer les emails.
- le second définit les options DKIM que nous souhaitons utiliser comme défaut.
Je vous invite a consulter la &lt;a href="https://tools.ietf.org/html/rfc4871"&gt;RFC 4871&lt;/a&gt;
- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les
paramètres que nous utiliserons pour les emails venant de nos utilisateurs :
ils seront traités comme &amp;ldquo;originating&amp;rdquo; et nous ne vérifierons pas l&amp;rsquo;OS duquel
ils viennent.
- nous savons que les emails venants du port 10026 sont sortants, nous les
traitons donc comme tel
- le paragraphe suivant décrit le traitement que nous faisons subir aux emails
sortants : tout d&amp;rsquo;abord, nous réaffirmons qu&amp;rsquo;ils viennent bien de notre
serveur. Nous autorisons les disclaimers (voire encore une fois la &lt;a href="https://tools.ietf.org/html/rfc4871"&gt;RFC
4871&lt;/a&gt;. Nous déclarons l&amp;rsquo;adresse a
prévenir en cas de spam/virus venants de notre système, et que nous voulons
être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,
puis qu&amp;rsquo;il est nécessaire de convertir les emails au format 7 bits avant de
les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et
les notifications de succès d&amp;rsquo;envoi. Et voila!&lt;/p&gt;
&lt;p&gt;Vous avez pu remarquer qu&amp;rsquo;a aucun moment nous ne configurions ni la signature
des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en
fait inclus par défaut dans amavis.&lt;/p&gt;
&lt;p&gt;Il nous reste cependant quelques opérations a faire, encore.
Tout d&amp;rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe
différentes méthodes, j&amp;rsquo;ai personnellement utilisé opendkim (&lt;a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy"&gt;un
tutorial&lt;/a&gt;)
mais de nombreuses autre méthodes existent.
Il nous reste encore a configurer spamassassin :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;#rewrite_header Subject *****SPAM*****&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# report_safe 1&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;required_score&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;2.0&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# use_bayes 1&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# bayes_auto_learn 1&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# bayes_ignore_header X-Bogosity&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# bayes_ignore_header X-Spam-Flag&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# bayes_ignore_header X-Spam-Status&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;ifplugin&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;Mail::SpamAssassin::Plugin::Shortcircuit&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# shortcircuit USER_IN_WHITELIST on&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# shortcircuit USER_IN_DEF_WHITELIST on&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# shortcircuit USER_IN_ALL_SPAM_TO on&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# shortcircuit SUBJECT_IN_WHITELIST on&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# shortcircuit USER_IN_BLACKLIST on&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# shortcircuit USER_IN_BLACKLIST_TO on&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# shortcircuit SUBJECT_IN_BLACKLIST on&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;shortcircuit&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ALL_TRUSTED&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;off&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# shortcircuit BAYES_99 spam&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# shortcircuit BAYES_00 ham&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;endif&lt;/span&gt; &lt;span style="color: #75715e"&gt;# Mail::SpamAssassin::Plugin::Shortcircuit&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Comme vous pouvez le voir, les modifications se résument globalement a baisser
le required_score pour ma part.&lt;/p&gt;
&lt;p&gt;Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et
spamassassin, et tout devrait fonctionner parfaitement&lt;/p&gt;
&lt;p&gt;Bon courage pour votre hosting de mail ensuite&amp;hellip;&lt;/p&gt;</summary></entry><entry><title>Installer FreeBSD sur un serveur Online avec MfsBSD</title><link href="//wxcafe.net/posts/freebsd-online-mfsbsd/" rel="alternate"></link><updated>2014-08-28T12:16:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/</id><summary type="html">&lt;p&gt;J&amp;rsquo;ai récemment eu l&amp;rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad)
Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester &lt;a href="http://bhyve.org/"&gt;bhyve&lt;/a&gt;)
et n&amp;rsquo;ayant pour différentes raisons pas eu l&amp;rsquo;occasion de le faire sur mon &lt;a href="http://home.wxcafe.net"&gt;serveur auto-hebergé&lt;/a&gt; ni sur &lt;a href="http://wxcafe.net"&gt;ce serveur ci&lt;/a&gt;,
j&amp;rsquo;ai commencé a chercher comment le faire sur ce serveur.&lt;/p&gt;
&lt;p&gt;Étant donné que Online ne propose pas directement d&amp;rsquo;image FreeBSD sur ses serveurs, il m&amp;rsquo;a fallu
chercher un peu plus loin. Il se trouve que &lt;a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/"&gt;ce post&lt;/a&gt; sur les forums
d&amp;rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. &lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
ou l&amp;rsquo;on m&amp;rsquo;a dirigé vers &lt;a href="http://mfsbsd.vx.sk/"&gt;mfsbsd&lt;/a&gt;, un projet d&amp;rsquo;installeur
alternatif, minimaliste et simplifié pour FreeBSD.&lt;/p&gt;
&lt;p&gt;Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une
console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le
panel Online. Une fois cela fait, lancez une console, puis téléchargez l&amp;rsquo;image
mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
choisissez l&amp;rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
sur l&amp;rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&amp;rsquo;air tout
a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
mfsbsd contient un script d&amp;rsquo;installation root-on-zfs, nommé logiquement
zfsinstall, qui va se charger de tout le travail pour nous.&lt;/p&gt;
&lt;p&gt;Utilisez donc ce script ainsi : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;# tout d&amp;#39;abord, wipons le MBR :&lt;/span&gt;
dd &amp;lt; /dev/zero &amp;gt; /dev/da0 &lt;span style="color: #f8f8f2"&gt;count&lt;/span&gt;&lt;span style="color: #f92672"&gt;=&lt;/span&gt;1
&lt;span style="color: #75715e"&gt;# maintenant, installons le système&lt;/span&gt;
zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Avec &lt;code&gt;-g da0&lt;/code&gt; votre disque dur principal, &lt;code&gt;-s 2G&lt;/code&gt; la quantité de swap désirée,
&lt;code&gt;-p root&lt;/code&gt; le nom du zpool, et &lt;code&gt;-c&lt;/code&gt; pour activer la compression. D&amp;rsquo;autres options
sont disponibles, je vous invite a faire un &lt;code&gt;zfsinstall -h&lt;/code&gt; si mon setup ne vous
convient pas.&lt;/p&gt;
&lt;p&gt;Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
système) et éditez /etc/rc.conf :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #f8f8f2"&gt;zfs_load&lt;/span&gt;&lt;span style="color: #f92672"&gt;=&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;quot;YES&amp;quot;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;sshd_load&lt;/span&gt;&lt;span style="color: #f92672"&gt;=&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;quot;YES&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;hostname&lt;/span&gt;&lt;span style="color: #f92672"&gt;=&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;quot;whatever&amp;quot;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;ifconfig_igb0&lt;/span&gt;&lt;span style="color: #f92672"&gt;=&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;quot;DHCP&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Remplacez whatever par votre hostname, et igb0 par le nom de votre interface
physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez
maintenant un système FreeBSD tout propre installé sur zfs a découvrir et
utiliser!&lt;/p&gt;
&lt;p&gt;Voila, c&amp;rsquo;est la fin de ce tutoriel.
(Cela dit, bon courage pour tester bhyve, vu que l&amp;rsquo;IPv6 chez online est&amp;hellip; peu
crédible, disons)&lt;/p&gt;
&lt;p&gt;Bon sinon sur d&amp;rsquo;autres sujets, j&amp;rsquo;ai mis en place des bots twitter : &lt;a href="https://twitter.com/wxcafe_ebooks"&gt;wxcafe_ebooks&lt;/a&gt;,
&lt;a href="https://twitter.com/petitefanfare"&gt;petitefanfare&lt;/a&gt;,
&lt;a href="https://twitter.com/capet_ebooks"&gt;capet_ebooks&lt;/a&gt;,
&lt;a href="https://twitter.com/zengisse"&gt;zengisse&lt;/a&gt;,
et &lt;a href="https://wxcafe.net/kim_ebooks"&gt;kim_ebooks&lt;/a&gt;. Ils sont tous basés sur &lt;a href="https://github.com/wxcafe/ebooks_example"&gt;ce
code&lt;/a&gt;, qui vient de
&lt;a href="https://twitter.com/m1sp"&gt;@m1sp&lt;/a&gt;
(&lt;a href="https://github.com/twitter_ebooks"&gt;github.com/twitter_ebooks&lt;/a&gt;). Donc voila.&lt;/p&gt;
&lt;p&gt;A plus&lt;/p&gt;</summary></entry><entry><title>SSL ou la sécurité sur l'internet</title><link href="//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/" rel="alternate"></link><updated>2014-05-30T08:25:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/</id><summary type="html">&lt;p&gt;&lt;em&gt;Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
Marlinspike suivante: &lt;a href="https://www.youtube.com/watch?v=ibF36Yyeehw"&gt;More Tricks for Defeating SSL&lt;/a&gt;,
présentée a la DefCon 17 (en 2011), et la lecture du billet suivant:
&lt;a href="http://www.thoughtcrime.org/blog/lavabit-critique/"&gt;A Critique of Lavabit&lt;/a&gt;,
ce qui peut avoir l&amp;rsquo;effet de rendre légèrement parano. Si vous considérez que
c&amp;rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
a présent dire coucou aux différentes personnes qui écoutent votre connection)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous
connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être
remarqué quelque chose récemment : il se trouve que le certificat qui permet de
desservir ce site a changé.&lt;/p&gt;
&lt;p&gt;Cela fait suite aux évènements évoqués dans le &lt;em&gt;Disclaimer&lt;/em&gt;, mais aussi a des
doigts sortis d&amp;rsquo;un endroit particulier du corps de l&amp;rsquo;admin/auteur de ce &amp;ldquo;blog&amp;rdquo;,
qui a pris &lt;strong&gt;enfin&lt;/strong&gt; les 5 minutes nécessaires a la compréhension superficielle
du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&amp;rsquo;un système
fonctionnel utilisant cette compréhension récemment acquise.&lt;/p&gt;
&lt;p&gt;Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut
être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&amp;rsquo;est très
simple : il existait auparavant un certificat pour &lt;code&gt;wxcafe.net&lt;/code&gt;, un pour
&lt;code&gt;paste.wxcafe.net&lt;/code&gt;, un pour &lt;code&gt;mail.wxcafe.net&lt;/code&gt;, etc&amp;hellip; Bref, un certificat
différent pour chaque sous-domaine.&lt;/p&gt;
&lt;p&gt;Il s&amp;rsquo;avère que c&amp;rsquo;est a la fois très peu pratique a utiliser (les utilisateurs
doivent ajouter chaque certificat a leur navigateur séparément, chaque
changement de sous-domaine conduit a un message d&amp;rsquo;erreur, etc) et pas plus
sécurisé que d&amp;rsquo;avoir un seul certificat wildcard. J&amp;rsquo;ai donc généré un certificat
pour &lt;code&gt;*.wxcafe.net&lt;/code&gt; hier, et il sera dorénavant utilisé pour tous les
sous-domaine de &lt;code&gt;wxcafe.net&lt;/code&gt;; et un certificat pour &lt;code&gt;wxcafe.net&lt;/code&gt;, qui ne matche
pas &lt;code&gt;*.wxcafe.net&lt;/code&gt;, et qui sera donc utilisé&amp;hellip; bah pour &lt;code&gt;wxcafe.net&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il serait préférable de faire des redirections automatiques des adresses http
vers les adresses https, cependant, étant donné que le certificat est
self-signed, il me semble préférable que l&amp;rsquo;arrivée sur le site ne commence pas
par une page firefox disant &amp;ldquo;Something&amp;rsquo;s Wrong!&amp;rdquo;, et ces redirections ne seront
donc pas mises en place.&lt;/p&gt;
&lt;p&gt;De plus, après la lecture de l&amp;rsquo;article de blog sur Lavabit dont le lien est plus
haut, il semble intéressant (et assez important) de faire en sorte que le
serveur utilise en priorité (et si possible, uniquement) des ciphers supportant
PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves
de ce même algorithme). Cela permet de faire en sorte que toutes les
communications avec ce serveur soient future-proof, c&amp;rsquo;est a dire que, même si
quelqu&amp;rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
communications passées.&lt;/p&gt;
&lt;p&gt;Bon, maintenant que les explications basiques sont faites, voyons
l&amp;rsquo;implémentation : &lt;br /&gt;
Pour générer la clé, tout d&amp;rsquo;abord, il convient d&amp;rsquo;utiliser les commandes
suivantes: &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sudo openssl genrsa -out example.key 4096
# nous utilisons ici une clé de &lt;span style="color: #ae81ff"&gt;4096&lt;/span&gt; bits, la taille est laissée a votre appréciation
sudo openssl req -new -key example.key -out example.csr
# OpenSSL va ici vous demander de nombreuses informations, &lt;span style="color: #e6db74"&gt;&amp;quot;Common Name&amp;quot;&lt;/span&gt; devant contenir le FQDN
sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
# enfin, nous générons la clé, d&lt;span style="color: #960050; background-color: #1e0010"&gt;&amp;#39;&lt;/span&gt;une durée de vie de &lt;span style="color: #ae81ff"&gt;3&lt;/span&gt; ans
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser
&lt;code&gt;*.example.com&lt;/code&gt; comme common name.
Une fois la clé générée, il faut dire aux différents services de l&amp;rsquo;utiliser, et
de n&amp;rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service.
Je vais lister ici les methodes pour quelques services que j&amp;rsquo;utilise :&lt;/p&gt;
&lt;h3&gt;apache :&lt;/h3&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;# /etc/apache2/mods_enabled/ssl.conf&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;SSLProtocol&lt;/span&gt; &lt;span style="color: #66d9ef"&gt;all&lt;/span&gt; -SSLv2 -SSLv3
&lt;span style="color: #f8f8f2"&gt;SSLHonorCipherOrder&lt;/span&gt; &lt;span style="color: #66d9ef"&gt;on&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;SSLCipherSuite&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;&amp;quot;&lt;/span&gt;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&lt;span style="color: #960050; background-color: #1e0010"&gt;&amp;quot;&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# /etc/apache2/sites-enabled/default-ssl&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;SSLEngine&lt;/span&gt; &lt;span style="color: #66d9ef"&gt;on&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;SSLCertificateFile&lt;/span&gt; &lt;span style="color: #e6db74"&gt;/etc/certs/example.com.crt&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;SSLCertificateKeyFile&lt;/span&gt; &lt;span style="color: #e6db74"&gt;/etc/certs/example.com.key&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;nginx :&lt;/h3&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;# /etc/nginx/nginx.conf &lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;span style="color: #66d9ef"&gt;ssl_protocols&lt;/span&gt; &lt;span style="color: #e6db74"&gt;TLSv1&lt;/span&gt; &lt;span style="color: #e6db74"&gt;TLSv1.1&lt;/span&gt; &lt;span style="color: #e6db74"&gt;TLSv1.2&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #66d9ef"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span style="color: #66d9ef"&gt;on&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #66d9ef"&gt;ssl_ciphers&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;quot;EECDH+ECDSA+AESGCM&lt;/span&gt; &lt;span style="color: #e6db74"&gt;EECDH+aRSA+AESGCM&lt;/span&gt; &lt;span style="color: #e6db74"&gt;EECDH+ECDSA+SHA384&lt;/span&gt; &lt;span style="color: #e6db74"&gt;\&lt;/span&gt;
&lt;span style="color: #e6db74"&gt;EECDH+ECDSA+SHA256&lt;/span&gt; &lt;span style="color: #e6db74"&gt;EECDH+aRSA+SHA384&lt;/span&gt; &lt;span style="color: #e6db74"&gt;EECDH+aRSA+SHA256&lt;/span&gt; &lt;span style="color: #e6db74"&gt;EECDH+aRSA+RC4&lt;/span&gt; &lt;span style="color: #e6db74"&gt;\&lt;/span&gt;
&lt;span style="color: #e6db74"&gt;EECDH&lt;/span&gt; &lt;span style="color: #e6db74"&gt;EDH+aRSA&lt;/span&gt; &lt;span style="color: #e6db74"&gt;RC4&lt;/span&gt; &lt;span style="color: #e6db74"&gt;!aNULL&lt;/span&gt; &lt;span style="color: #e6db74"&gt;!eNULL&lt;/span&gt; &lt;span style="color: #e6db74"&gt;!LOW&lt;/span&gt; &lt;span style="color: #e6db74"&gt;!3DES&lt;/span&gt; &lt;span style="color: #e6db74"&gt;!MD5&lt;/span&gt; &lt;span style="color: #e6db74"&gt;!EXP&lt;/span&gt; &lt;span style="color: #e6db74"&gt;!PSK&lt;/span&gt; &lt;span style="color: #e6db74"&gt;!SRP&lt;/span&gt; &lt;span style="color: #e6db74"&gt;!DSS&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# /etc/nginx/sites-enabled/default-ssl&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;span style="color: #66d9ef"&gt;ssl&lt;/span&gt; &lt;span style="color: #66d9ef"&gt;on&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #66d9ef"&gt;ssl_certificate&lt;/span&gt; &lt;span style="color: #e6db74"&gt;/etc/certs/example.com.crt&lt;/span&gt;
&lt;span style="color: #e6db74"&gt;ssl_certificate_key&lt;/span&gt; &lt;span style="color: #e6db74"&gt;/etc/certs/example.com.key&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;prosody (jabber) :&lt;/h3&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #f92672"&gt;#&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;tout&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;d&lt;/span&gt;&lt;span style="color: #e6db74"&gt;&amp;#39;abord, lancez la commande suivante :&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;sudo&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;openssl&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;dhparam&lt;/span&gt; &lt;span style="color: #f92672"&gt;-&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;out&lt;/span&gt; &lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;etc&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;prosody&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;certs&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;dh&lt;/span&gt;&lt;span style="color: #f92672"&gt;-&lt;/span&gt;&lt;span style="color: #ae81ff"&gt;2048.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;pem&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;2048&lt;/span&gt;
&lt;span style="color: #f92672"&gt;#&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ensuite,&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;pour&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;chaque&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;VirtualHost&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;dans&lt;/span&gt; &lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;etc&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;prosody&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;prosody.conf&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;:&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;ssl&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;dhparam&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/prosody/certs/dh-2048.pem&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;key&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/certs/example.com.key&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;certificate&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/certs/example.com.crt&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;}&lt;/span&gt;
&lt;span style="color: #f92672"&gt;#&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;la&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;cipher&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;suite&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;de&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;prosody&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;utilise&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;par&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;d&lt;/span&gt;&lt;span style="color: #960050; background-color: #1e0010"&gt;é&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;faut&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;EDH&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;et&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;EECDH&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;postfix (email) :&lt;/h3&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;# /etc/postfix/main.cf&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;smtpd_tls_cert_file&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; /etc/certs/example.com.crt
&lt;span style="color: #f8f8f2"&gt;smtpd_tls_key_file&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; /etc/certs/example.com.key
&lt;span style="color: #f8f8f2"&gt;tls_preempt_cipherlist&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; yes
&lt;span style="color: #f8f8f2"&gt;smtpd_tls_eecdh_grade&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; strong
&lt;span style="color: #f8f8f2"&gt;smtdp_tls_mandatory_ciphers&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; high
&lt;span style="color: #f8f8f2"&gt;smtpd_tls_mandatory_exclude_ciphers&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
&lt;span style="color: #f8f8f2"&gt;smtpd_tls_security_level&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; encrypt
&lt;span style="color: #f8f8f2"&gt;smtpd_tls_mandatory_protocols&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; !SSLv2, !SSLv3
&lt;span style="color: #f8f8f2"&gt;smtpd_use_tls&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; yes
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;dovecot (imap) :&lt;/h3&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;# /etc/dovecot/dovecot.conf &lt;/span&gt;
&lt;span style="color: #75715e"&gt;# [...]&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;ssl_cert&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &amp;lt;/etc/certs/example.com.crt
&lt;span style="color: #f8f8f2"&gt;ssl_key&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &amp;lt;/etc/certs/example.com.key
&lt;span style="color: #f8f8f2"&gt;ssl_cipher_list&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Voila. Pour d&amp;rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter
au manuel approprié.&lt;/p&gt;
&lt;p&gt;Cela étant dit, je conseille a tout le monde d&amp;rsquo;aller voir la conférence dans le
disclaimer, et tant qu&amp;rsquo;a faire la conférence du même hacker &lt;a href="https://www.youtube.com/watch?v=8N4sb-SEpcg"&gt;SSL and the future
of Authenticity&lt;/a&gt; qui parle de son
implémentation d&amp;rsquo;une technologie &amp;ldquo;remplaçant&amp;rdquo; le système de CAs qui existe
actuellement.&lt;/p&gt;</summary></entry><entry><title>Mise en place d'un serveur DNS</title><link href="//wxcafe.net/posts/mise-en-place-dun-serveur-dns/" rel="alternate"></link><updated>2014-02-24T02:49:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/</id><summary type="html">&lt;p&gt;Le DNS (Domain Name System) est le service permettant la résolution des noms de
domaines en différentes informations : adresses IPv4, adresses IPv6, certificats
DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS
est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour
simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne
de se connecter a &lt;a href="http://173.194.45.66"&gt;http://173.194.45.66&lt;/a&gt;, ou a
&lt;a href="http://199.16.156.70"&gt;http://199.16.156.70&lt;/a&gt;. Voire même a
&lt;a href="http://5.39.76.46"&gt;http://5.39.76.46&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Cependant, le DNS est un système qui date de 1984, et les exigences de l&amp;rsquo;époque
en termes d&amp;rsquo;expérience utilisateur n&amp;rsquo;étaient pas forcément aussi importantes que
de nos jours. La configuration des serveurs DNS peut ainsi être assez
contre intuitive.
Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses
enregistrements est important.&lt;/p&gt;
&lt;p&gt;Tout d&amp;rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même
façon que le système de fichiers : en arborescence. Cependant, là ou la racine
du FS est &lt;code&gt;/&lt;/code&gt;, celle de DNS est &lt;code&gt;.&lt;/code&gt;, et là ou il convient d&amp;rsquo;écrire, par exemple,&lt;code&gt;/usr/&lt;/code&gt; et ou la progression se fait de gauche a droite pour le FS, pour DNS le
&lt;code&gt;.&lt;/code&gt; n&amp;rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par
exemple, le tld(top level domain, domaine de haut niveau) &lt;code&gt;com&lt;/code&gt;, et le domaine
&lt;code&gt;google.com&lt;/code&gt; appartient a &lt;code&gt;com&lt;/code&gt;, on écrit donc &lt;code&gt;google.com&lt;/code&gt; sans écrire le point
a la fin de façon courante.&lt;/p&gt;
&lt;p&gt;Le reverse DNS est une variante du DNS &amp;ldquo;classique&amp;rdquo; permettant de résoudre les
adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net.
Cependant, le reverse DNS n&amp;rsquo;a, par définition, pas de TLD sur lequel se diriger
quand on lui adresse une query. Les &amp;ldquo;adresses&amp;rdquo; que l&amp;rsquo;on query en reverse DNS
sont donc constituées de l&amp;rsquo;adresse IP, &lt;strong&gt;&lt;em&gt;dans le sens contraire a l&amp;rsquo;ordre
habituel&lt;/em&gt;&lt;/strong&gt;, et du faux domaine .in-addr.arpa
Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire &lt;code&gt;dig PTR
76.46.39.5.in-addr.arpa&lt;/code&gt;. La réponse sera, évidemment, &lt;code&gt;wxcafe.net&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&amp;rsquo;abord,
quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande
utilisée pour faire des tests DNS est &lt;code&gt;dig&lt;/code&gt;. Le DNS fonctionne avec des
&amp;ldquo;enregistrements&amp;rdquo;, records en anglais. Par exemple, un record A indique une
adresse IP, un record NS indique un Serveur de nom, etc. &lt;code&gt;dig&lt;/code&gt; se base sur ces
records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom
de domaine que vous donnez en argument, mais en précisant un autre type de
record, vous pouvez obtenir n&amp;rsquo;importe quelle information : par exemple, &lt;code&gt;dig NS
wxcafe.net&lt;/code&gt; devrait vous renvoyer&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #f92672"&gt;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #f92672"&gt;DiG&lt;/span&gt; &lt;span style="color: #f92672"&gt;9&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.8.4-rpz2&lt;/span&gt;&lt;span style="color: #f92672"&gt;+rl005&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.12-P1&lt;/span&gt; &lt;span style="color: #f92672"&gt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #f92672"&gt;NS&lt;/span&gt; &lt;span style="color: #f92672"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.net&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;global&lt;/span&gt; &lt;span style="color: #f92672"&gt;options:&lt;/span&gt; &lt;span style="color: #f92672"&gt;+cmd&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;Got&lt;/span&gt; &lt;span style="color: #f92672"&gt;answer:&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;-&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;-&lt;/span&gt; &lt;span style="color: #f92672"&gt;opcode:&lt;/span&gt; &lt;span style="color: #f92672"&gt;QUERY,&lt;/span&gt; &lt;span style="color: #f92672"&gt;status:&lt;/span&gt; &lt;span style="color: #f92672"&gt;NOERROR,&lt;/span&gt; &lt;span style="color: #f92672"&gt;id:&lt;/span&gt; &lt;span style="color: #f92672"&gt;13846&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;flags:&lt;/span&gt; &lt;span style="color: #f92672"&gt;qr&lt;/span&gt; &lt;span style="color: #f92672"&gt;rd&lt;/span&gt; &lt;span style="color: #f92672"&gt;ra;&lt;/span&gt; &lt;span style="color: #f92672"&gt;QUERY:&lt;/span&gt; &lt;span style="color: #f92672"&gt;1,&lt;/span&gt; &lt;span style="color: #f92672"&gt;ANSWER:&lt;/span&gt; &lt;span style="color: #f92672"&gt;2,&lt;/span&gt; &lt;span style="color: #f92672"&gt;AUTHORITY:&lt;/span&gt; &lt;span style="color: #f92672"&gt;0,&lt;/span&gt; &lt;span style="color: #f92672"&gt;ADDITIONAL:&lt;/span&gt; &lt;span style="color: #f92672"&gt;0&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;QUESTION&lt;/span&gt; &lt;span style="color: #f92672"&gt;SECTION:&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;wxcafe&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt; &lt;span style="color: #f92672"&gt;IN&lt;/span&gt; &lt;span style="color: #f92672"&gt;NS&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;ANSWER&lt;/span&gt; &lt;span style="color: #f92672"&gt;SECTION:&lt;/span&gt;
&lt;span style="color: #f92672"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt; &lt;span style="color: #f92672"&gt;3600&lt;/span&gt; &lt;span style="color: #f92672"&gt;IN&lt;/span&gt; &lt;span style="color: #f92672"&gt;NS&lt;/span&gt; &lt;span style="color: #f92672"&gt;ns&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.wxcafe.net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f92672"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt; &lt;span style="color: #f92672"&gt;3600&lt;/span&gt; &lt;span style="color: #f92672"&gt;IN&lt;/span&gt; &lt;span style="color: #f92672"&gt;NS&lt;/span&gt; &lt;span style="color: #f92672"&gt;ns&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.home.wxcafe.net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;Query&lt;/span&gt; &lt;span style="color: #f92672"&gt;time:&lt;/span&gt; &lt;span style="color: #f92672"&gt;60&lt;/span&gt; &lt;span style="color: #f92672"&gt;msec&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;SERVER:&lt;/span&gt; &lt;span style="color: #f92672"&gt;10&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.0.42.1#53&lt;/span&gt;&lt;span style="color: #f92672"&gt;(10&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;.0.42.1&lt;/span&gt;&lt;span style="color: #f92672"&gt;)&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;WHEN:&lt;/span&gt; &lt;span style="color: #f92672"&gt;Tue&lt;/span&gt; &lt;span style="color: #f92672"&gt;Dec&lt;/span&gt; &lt;span style="color: #f92672"&gt;10&lt;/span&gt; &lt;span style="color: #f92672"&gt;13&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;:31:18&lt;/span&gt; &lt;span style="color: #f92672"&gt;2013&lt;/span&gt;
&lt;span style="color: #f92672"&gt;;;&lt;/span&gt; &lt;span style="color: #f92672"&gt;MSG&lt;/span&gt; &lt;span style="color: #f92672"&gt;SIZE&lt;/span&gt; &lt;span style="color: #f92672"&gt;rcvd:&lt;/span&gt; &lt;span style="color: #f92672"&gt;67&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Comme vous pouvez le voir, les serveurs DNS principaux pour
&lt;a href="http://wxcafe.net"&gt;wxcafe.net&lt;/a&gt; sont &lt;code&gt;ns.wxcafe.net&lt;/code&gt; et &lt;code&gt;ns.home.wxcafe.net&lt;/code&gt;,
qui sont respectivement des alias pour &lt;code&gt;wxcafe.net&lt;/code&gt; et &lt;code&gt;home.wxcafe.net&lt;/code&gt;. Ainsi,
chacun fait autorité pour lui même, et le problème évident est que le résolveur
ne peut résoudre la query si il est renvoyé encore et encore vers le même
serveur. Il convient donc de définir dans le même fichier de configuration
l&amp;rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
loop, se rendra compte qu&amp;rsquo;il est en train de faire une boucle infinie et
demandera l&amp;rsquo;adresse au serveur auquel il est connecté. La première indication de
direction se fait grâce au serveur du TLD.&lt;/p&gt;
&lt;p&gt;La configuration de bind est assez simple dans le principe, le plus complexe
étant en fait d&amp;rsquo;écrire les fichiers de zone.
La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il
existe 4 fichiers de configuration principaux : &lt;code&gt;named.conf&lt;/code&gt;,
&lt;code&gt;named.conf.default-zones&lt;/code&gt;, &lt;code&gt;named.conf.local&lt;/code&gt; et &lt;code&gt;named.conf.options&lt;/code&gt;.
&lt;code&gt;named.conf&lt;/code&gt; contient les options par défaut de bind, &lt;code&gt;named.conf.default-zones&lt;/code&gt;
les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),
&lt;code&gt;named.conf.local&lt;/code&gt; contient les déclarations de vos zones, et
named.conf.options contient les options que vous rajoutez pour changer le
comportement de bind.&lt;/p&gt;
&lt;p&gt;Pour commencer, il convient de préciser que nous allons parler ici du cas dans
lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&amp;rsquo;autorité,
deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs
(notamment mon accès chez moi). &lt;/p&gt;
&lt;p&gt;Examinons tout d&amp;rsquo;abord les fichiers de configuration de named.&lt;code&gt;named.conf.local&lt;/code&gt; contient les définitions des zones forward et reverse.
Sur wxcafe.net, les zones &lt;code&gt;wxcafe.net&lt;/code&gt; et &lt;code&gt;76.46.39.5.in-addr.arpa&lt;/code&gt; sont gérées
en master, et les zones &lt;code&gt;home.wxcafe.net&lt;/code&gt; et &lt;code&gt;103.177.67.80.in-addr.arpa&lt;/code&gt; sont
gérées en slave. Nous n&amp;rsquo;examinerons ici que les déclarations de zones sur ce
serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence
principale étant que l&amp;rsquo;un héberge en slave les masters de l&amp;rsquo;autre.
Le fichier &lt;code&gt;named.conf.local&lt;/code&gt; sur wxcafe.net contient donc &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;zone &lt;span style="color: #e6db74"&gt;&amp;quot;wxcafe.net&amp;quot;&lt;/span&gt; &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;type &lt;/span&gt;master&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
file &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/bind/master/wxcafe.net&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
allow-transfer &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
80.67.177.103&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
zone &lt;span style="color: #e6db74"&gt;&amp;quot;home.wxcafe.net&amp;quot;&lt;/span&gt; &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;type &lt;/span&gt;slave&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
file &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/bind/slave/home.wxcafe.net&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
masters &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
80.67.177.103&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
zone &lt;span style="color: #e6db74"&gt;&amp;quot;46.76.39.5.in-addr.arpa&amp;quot;&lt;/span&gt; &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;type &lt;/span&gt;master&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
file &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/bind/master/46.76.39.5.in-addr.arpa&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
allow-transfer &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
80.67.177.103&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
zone &lt;span style="color: #e6db74"&gt;&amp;quot;103.177.67.80.in-addr.arpa&amp;quot;&lt;/span&gt; &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;type &lt;/span&gt;slave&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
file &lt;span style="color: #e6db74"&gt;&amp;quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&amp;quot;&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
masters &lt;span style="color: #f92672"&gt;{&lt;/span&gt;
80.67.177.103&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;span style="color: #f92672"&gt;}&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cela devrait être relativement clair. Globalement, les zones master ont un
fichier dans &lt;code&gt;/etc/bind/master/&lt;/code&gt;, et les slaves un fichier dans
&lt;code&gt;/etc/bind/slave/&lt;/code&gt;, les masters autorisent le transfert vers home.wxcafe.net
tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est
assez parlant.&lt;/p&gt;
&lt;p&gt;Voyons maintenant le fichier de zone concernant wxcafe.net, soit
&lt;code&gt;/etc/bind/master/wxcafe.net&lt;/code&gt; : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #f8f8f2"&gt;$TTL&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;3600&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;1&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;hour&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;@&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;SOA&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ns&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;(&lt;/span&gt;
&lt;span style="color: #ae81ff"&gt;2014011001&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;serial&lt;/span&gt;
&lt;span style="color: #ae81ff"&gt;3&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;h&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;refresh&lt;/span&gt;
&lt;span style="color: #ae81ff"&gt;1&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;h&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;retry&lt;/span&gt;
&lt;span style="color: #ae81ff"&gt;168&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;h&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;expire&lt;/span&gt;
&lt;span style="color: #ae81ff"&gt;300&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;negative&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;response&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ttl&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;)&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;Name&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;servers&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;NS&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ns&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;NS&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ns&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;home&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;Mail&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;exchangers&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;MX&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;10&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;SPF&lt;/span&gt; &lt;span style="color: #e6db74"&gt;&amp;quot;v=spf1 ip4:5.39.76.46 a -all&amp;quot;&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;Main&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;A&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;AAAA&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;records&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;A&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;5.39.76.46&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;ns&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;A&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;5.39.76.46&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;Aliases&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;data&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;CNAME&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[&lt;/span&gt;&lt;span style="color: #f92672"&gt;...&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;]&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;www&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;CNAME&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;;&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;home&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;definition&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;$ORIGIN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;home&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;@&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;NS&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ns&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;home&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;NS&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ns&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;wxcafe&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;net&lt;/span&gt;&lt;span style="color: #f92672"&gt;.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;ns&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;A&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;80.67.177.103&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;IN&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;A&lt;/span&gt; &lt;span style="color: #ae81ff"&gt;80.67.177.103&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Alors. Expliquons ligne par ligne.&lt;br /&gt;
Tout d&amp;rsquo;abord, le TTL (time to live) est un paramètre définissant le temps
pendant lequel les serveurs récursif (qui font un cache des données) doivent
cacher ce fichier de zone. &lt;br /&gt;
Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,
wxcafe.net. &lt;br /&gt;
Maintenant, nous arrivons a un record important : SOA (Start of Authority).
Ce record prend de nombreux arguments, dans l&amp;rsquo;ordre :&lt;br /&gt;
- Le nameserver autoritaire pour le nom de domaine en question,&lt;br /&gt;
- L&amp;rsquo;adresse email du responsable de cette zone, avec le premier point
remplacé par un @, &lt;/p&gt;
&lt;p&gt;puis entre parenthèses :&lt;br /&gt;
- Le numéro de série (&amp;ldquo;version&amp;rdquo; du fichier de zone, ici au format
YYYYMMDDNN) &lt;br /&gt;
- La période de refresh, période entre chaque mise a jour du nameserver
authoritaire secondaire, &lt;br /&gt;
- La période de retry, le temps entre chaque essai de mise a jour si le
nameserveur authoritaire primaire est indisponible, &lt;br /&gt;
- La période d&amp;rsquo;expire, le temps qu&amp;rsquo;attendra le serveur autoritaire
secondaire avant de supprimer les informations de son cache si le primaire
reste indisponible, et enfin &lt;br /&gt;
- La période de TTL négatif, le temps qu&amp;rsquo;attendra le serveur secondaire
avant de ne plus offrir les informations de cette zone si le serveur
primaire est injoignable. &lt;/p&gt;
&lt;p&gt;Bon, tout ceci est peut-être un peu confus, mais ce n&amp;rsquo;est pas le record le plus
important a lire (pour les humains en tout cas). Continuons : &lt;/p&gt;
&lt;p&gt;NS (nameserver) permet de désigner les différents nameservers faisant autorité
pour ce domaine. &lt;/p&gt;
&lt;p&gt;MX permet d&amp;rsquo;indiquer ou il convient d&amp;rsquo;envoyer les emails pour ce domaine.
SPF est un record d&amp;rsquo;authentification pour les emails.
Les records A désignent l&amp;rsquo;association entre un nom de domaine et une adresse
IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site
n&amp;rsquo;est pas encore en IPv6.&lt;/p&gt;
&lt;p&gt;Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de
mettre en place des domaines exactement semblables a d&amp;rsquo;autre (ce qui permet par
exemple de filtrer ensuite avec les Virtual Hosts d&amp;rsquo;Apache, pour le web)&lt;/p&gt;
&lt;p&gt;Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet
de changer la valeur du @ et des noms de domaine non complets (qui ne se
terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et
l&amp;rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
l&amp;rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
cela permet de rediriger les requêtes nous parvenant et demandant un domaine se
trouvant sous home.wxcafe.net.&lt;/p&gt;
&lt;p&gt;Les autres fichiers de zone sont sensiblement similaires, avec les quelques
différences n&amp;rsquo;étant en fin de compte que des différences de valeurs (dues au
fait que, eh bah, c&amp;rsquo;est pas les mêmes domaines&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Voila donc une courte explication de ce qu&amp;rsquo;est le DNS. Bien entendu, tout n&amp;rsquo;est
pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de
wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez
aller vous renseigner directement a la source : le &lt;a href="https://www.ietf.org/rfc/rfc1034.txt"&gt;RFC
1034&lt;/a&gt; et le
&lt;a href="https://www.ietf.org/rfc/rfc1035.txt"&gt;RFC 1035&lt;/a&gt;. Dans un autre style (bien plus
avancé) le blog de &lt;a href="http://bortzmeyer.org"&gt;Stéphane Bortzmeyer&lt;/a&gt; est interessant
aussi.&lt;/p&gt;</summary></entry><entry><title>NAT</title><link href="//wxcafe.net/posts/nat/" rel="alternate"></link><updated>2014-02-17T05:02:00+01:00</updated><author><name>wxcafé</name></author><id>tag:wxcafe.net,2014-02-17:posts/nat/</id><summary type="html">&lt;p&gt;NAT (Network Address Translation) in a word?&lt;br /&gt;
It&amp;rsquo;s complicated. Very. Don&amp;rsquo;t do it, you&amp;rsquo;d damage your brain. &lt;/p&gt;
&lt;p&gt;Bon, sinon, prochain article serieux vite, bisous.&lt;/p&gt;</summary></entry><entry><title>Plan9 from whichever space</title><link href="//wxcafe.net/posts/plan-9-from-whichever-space/" rel="alternate"></link><updated>2013-09-09T11:17:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/</id><summary type="html">&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"&gt;&lt;strong&gt;Plan 9 from Outer Space&lt;/strong&gt;&lt;/a&gt; est un film de série Z, produit en 1959 par Edward D.
Wood. Il est assez connu comme étant l&amp;rsquo;un des pires films jamais sortis. Rempli
d&amp;rsquo;erreur de montage, d&amp;rsquo;effets spéciaux au rabais, et ayant même connu la mort
d&amp;rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://plan9.bell-labs.com/plan9/"&gt;&lt;strong&gt;Plan 9 from Bell Labs&lt;/strong&gt;&lt;/a&gt; est un OS venant de Bell Labs (comme son nom l&amp;rsquo;indique),
et qui a été pensé comme le successeur d&amp;rsquo;Unix. Il est conçu comme une poursuite
des concepts unixiens jusqu&amp;rsquo;à leur but naturel. Ainsi, c&amp;rsquo;est Plan9 qui a
introduit le concept d&amp;rsquo;UnionFS, le protocole 9P qui permet d&amp;rsquo;acceder a des
ressources appartenant a d&amp;rsquo;autres ordinateurs a distance, un support de
l&amp;rsquo;unicode par défaut et sur tout le système (a l&amp;rsquo;inverse d&amp;rsquo;Unix, qui fonctionne
a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
défaut, et d&amp;rsquo;autres améliorations sur les thèmes de base que propose Unix. &lt;/p&gt;
&lt;p&gt;Cependant, Plan9 n&amp;rsquo;a jamais été véritablement utilisé pour quoi que ce soit
d&amp;rsquo;autre que la recherche en systèmes, et c&amp;rsquo;est dommage, parce que Plan9 a
quelque chose de très intéressant à proposer. En effet, en ces jours d&amp;rsquo;intérêt
grandissant pour le klaoude et la délocalisation a la fois du processing et des
données, et bien que Plan9 ait été créé bien avant que le terme &amp;ldquo;cloud
computing&amp;rdquo; n&amp;rsquo;apparaisse pour la première fois, il semble que ce système ait été
conçu pour apporter cette délocalisation tant rêvée.&lt;/p&gt;
&lt;p&gt;En effet, même si l&amp;rsquo;on considère que les nouveautés qu&amp;rsquo;il apporte par rapport a
Unix ne sont pas extraordinaires en soit (alors qu&amp;rsquo;elles sont déjà
conséquentes), lorsqu&amp;rsquo;on les prend ensemble, elles font de Plan9 le système
d&amp;rsquo;exploitation ultime en terme de partage de ressources et de données.
Ainsi, le fait que 9P permette de considérer toutes les ressources d&amp;rsquo;un système
distant comme n&amp;rsquo;étant qu&amp;rsquo;une poignée de fichiers permet de le monter comme
n&amp;rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et
gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse
interagir avec les autres, même s&amp;rsquo;ils sont hétérogènes (c&amp;rsquo;est a dire provenant
de machines différentes), permet d&amp;rsquo;utiliser les ressources d&amp;rsquo;une machine
distante comme si elle était présente localement. Le mécanisme d&amp;rsquo;UnionFS permet
de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le
même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers
de plusieurs machines a la fois (ce qui permet une délocalisation des données
bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).&lt;/p&gt;
&lt;p&gt;Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de
parler d&amp;rsquo;ordinateur lorsque le concept même du système est d&amp;rsquo;être composé de
clusters eux mêmes composés de machines hétérogènes. Le système de fichier
virtuel /net fourni par le kernel de Plan9 permet d&amp;rsquo;implémenter très facilement
différents concepts réseaux : en montant le /net d&amp;rsquo;un ordinateur du réseau local
sur celui servant de gateway vers l&amp;rsquo;internet, on crée un NAT vers cet ordinateur
du réseau local. En montant le /net d&amp;rsquo;un ordinateur distant sur un ordinateur
local via le protocole 9P sécurisé, on crée un VPN : les connections locales se
font en utilisant l&amp;rsquo;accès de l&amp;rsquo;ordinateur distant, et les connections entre les
deux sont chiffrées. &lt;/p&gt;
&lt;p&gt;Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour
partager leur &amp;ldquo;puissance&amp;rdquo; de calcul en userspace, des superordinateurs pour
lesquels le noyau Linux s&amp;rsquo;est doté du support de jusqu&amp;rsquo;à 4096 CPUs, des OS tels
JoliOS qui promettent une integration du klaoude alors qu&amp;rsquo;ils ne sont en fait
que des navigateurs web a peine améliorés et des services de stockage en ligne
qui promettent un accès universel a toutes nos données alors qu&amp;rsquo;ils ne proposent
que de les garder a disposition par le web, Plan9 promettait une technologie de
partage des ressources système et de données, une intégration du réseau dans le
système particulièrement poussée, un environnement graphique supporté par le
basesystem et non greffé par dessus comme l&amp;rsquo;a été X11, et de nombreuses autres
améliorations sur Unix.&lt;/p&gt;
&lt;p&gt;Malheureusement, il n&amp;rsquo;a jamais été adopté de façon véritablement significative,
et ce pour une raison très Unixiènne : &amp;ldquo;worse is better&amp;rdquo;. En effet, le parc de
machines Unix déjà installées était suffisamment performant et fonctionnel pour
que des solutions soient développées au dessus du système pour remplir les
mêmes fonctions que remplit Plan9 &lt;em&gt;via&lt;/em&gt; son kernel, tels le nouveau ProcFS de
Linux, FUSE, etc&amp;hellip;&lt;/p&gt;</summary></entry><entry><title>Sed Basics</title><link href="//wxcafe.net/posts/sed-basics/" rel="alternate"></link><updated>2013-08-18T22:57:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-08-18:posts/sed-basics/</id><summary type="html">&lt;p&gt;&lt;code&gt;sed&lt;/code&gt; est un outil Unix très largement utilisé et très pratique pour manipuler
le texte (ce qui se montre relativement indispensable dans un environnement
Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu
connu en détail, et la plupart du temps une seule fonction est utilisée : le
remplacement de texte.&lt;br /&gt;
Or &lt;code&gt;sed&lt;/code&gt; a bien plus de possibilités que ça, comme nous allons le voir.&lt;/p&gt;
&lt;p&gt;Tout d&amp;rsquo;abord, rappelons les bases : &lt;code&gt;sed&lt;/code&gt; est un programme Unix de base, mais
aussi un langage de manipulation de texte dérivé de &lt;code&gt;ed&lt;/code&gt;, l&amp;rsquo;éditeur original.&lt;code&gt;ed&lt;/code&gt; est un éditeur de ligne, conçu a l&amp;rsquo;époque ou les ordinateurs n&amp;rsquo;étaient pas
personnels et étaient utilisés avec des &lt;a href="http://fr.wikipedia.org/wiki/telescripteur"&gt;téléscripteurs&lt;/a&gt;, c&amp;rsquo;est a dire des
machines dépourvues d&amp;rsquo;écrans et ne permettant donc pas l&amp;rsquo;utilisation d&amp;rsquo;éditeurs
dits &amp;ldquo;visuels&amp;rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un
curseur et affichant plusieurs lignes. &lt;code&gt;sed&lt;/code&gt; est donc une évolution de &lt;code&gt;ed&lt;/code&gt;, le
s signifiant stream, &lt;code&gt;sed&lt;/code&gt; est un éditeur de flux, prenant donc avantage du
concept Unixien de flux de données (voir &lt;a href="http://fr.wikipedia.org/wiki/Flux_standard"&gt;Flux standards&lt;/a&gt;) pour éditer plus d&amp;rsquo;une ligne a la fois.
En pratique, &lt;code&gt;sed&lt;/code&gt; est principalement utilisé sur des fichiers.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sed&lt;/code&gt; a quelques options pratique, notamment &lt;code&gt;-s&lt;/code&gt; qui permet d&amp;rsquo;empêcher
l&amp;rsquo;affichage systématique des lignes traitées, ou bien &lt;code&gt;-i&lt;/code&gt; (pour GNU sed) qui
permet de rediriger l&amp;rsquo;output dans le fichier d&amp;rsquo;input. Cela dit, l&amp;rsquo;intérêt unique
du programme est son langage de manipulation de texte.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ed&lt;/code&gt;, et donc &lt;code&gt;sed&lt;/code&gt;, utilise un langage basé sur les séparations (en général des
/). Ainsi, la commande de base dans &lt;code&gt;sed&lt;/code&gt; est &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;/[regex]/
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
n&amp;rsquo;exécuter les commandes qui suivent que sur ces lignes.) &lt;/p&gt;
&lt;p&gt;&lt;br/&gt;
La commande &lt;code&gt;sed&lt;/code&gt; la plus utilisée est bien entendu le &lt;strong&gt;s&lt;/strong&gt;, qui s&amp;rsquo;utilise de
la façon suivante : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #f8f8f2"&gt;s&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;[old&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;text]&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;[new&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;text]&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;[options]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;qui se propose donc de remplacer (substitute) [old text] (qui peut être une
regex) par [new text] (qui doit être un texte fixe, avec quelques
exceptions), en appliquant [options], la plus connue des options étant &lt;code&gt;g&lt;/code&gt;,
qui permet d&amp;rsquo;appliquer la commande affectée a toutes les occurrences du texte
matché sur la/les lignes concernée-s.&lt;br /&gt;
Les exceptions a la &amp;ldquo;fixité&amp;rdquo; de [new text] sont particulièrement
intéressantes. En effet, &lt;code&gt;sed&lt;/code&gt; utilise un langage de regex plutôt standard,
excepté le fait qu&amp;rsquo;il permet jusqu&amp;rsquo;à 9 &amp;ldquo;holding spaces&amp;rdquo;, qui sont délimités par
\( et \), et qui sont représentées dans le texte de remplacement par \1 à
\9.&lt;/p&gt;
&lt;p&gt;Par exemple, la commande &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sed &amp;#39;s/\(hello world\) world/\1/&amp;#39;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;sur le texte &amp;ldquo;hello world world&amp;rdquo; renverrait comme résultat&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;hello world
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;De la même façon, le symbole &lt;code&gt;&amp;amp;&lt;/code&gt; dans le texte de remplacement représente le
texte original. Ainsi, la commande &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sed &amp;#39;s/hello world/&amp;amp; world/&amp;#39;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;sur le texte &amp;ldquo;hello world&amp;rdquo; renverrait comme résultat&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;hello world world
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Une autre commande utile est &lt;strong&gt;p&lt;/strong&gt;, qui sert a afficher le texte présent dans
l&amp;rsquo;espace courant :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;/[regex]/p
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;sed&lt;/code&gt; stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
dédié, que j&amp;rsquo;appelle l&amp;rsquo;espace courant (pattern space en anglais). La commande&lt;code&gt;p&lt;/code&gt; affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit
le pattern space de façon a ce qu&amp;rsquo;il ne contienne que les lignes matchant, et le &lt;strong&gt;p&lt;/strong&gt; affiche donc ce dernier.&lt;/p&gt;
&lt;p&gt;Un autre exemple de commande sont &lt;strong&gt;c&lt;/strong&gt;, &lt;strong&gt;i&lt;/strong&gt; et &lt;strong&gt;a&lt;/strong&gt;, qui s&amp;rsquo;utilisent ainsi :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;c \
[text]
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;De la même façon, pour le i : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;i \
[text]
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et de même pour a. &lt;/p&gt;
&lt;p&gt;Ces trois commandes s&amp;rsquo;utilisent de la même façon pour la bonne raison qu&amp;rsquo;elles
sont très proches. &lt;strong&gt;i&lt;/strong&gt; sert a insérer du texte &lt;em&gt;avant&lt;/em&gt; le pattern space. &lt;strong&gt;a&lt;/strong&gt;
sert a insérer du texte &lt;em&gt;après&lt;/em&gt; le pattern space, et enfin &lt;strong&gt;c&lt;/strong&gt; sert a
remplacer &lt;em&gt;tout&lt;/em&gt; le pattern space. Les trois utilisent [text] comme
remplacement ou insert.
Attention, les insertions se font sur la ligne précédant ou suivant le pattern
space, et non sur la ligne en question.&lt;/p&gt;
&lt;p&gt;Enfin, dernière commande ne fonctionnant que ligne par ligne, &lt;strong&gt;d&lt;/strong&gt; :
/[regex]/d
&lt;strong&gt;d&lt;/strong&gt; (delete) supprime les contenus du pattern space.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sed&lt;/code&gt; est un outil puissant, mais complexe. Dans un prochain article, je
parlerai des commandes multilignes et des labels.&lt;/p&gt;</summary></entry><entry><title>Le chiffrement de partitions avec dm-crypt et device-mapper</title><link href="//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/" rel="alternate"></link><updated>2013-07-10T03:18:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/</id><summary type="html">&lt;p&gt;Le chiffrement en tant que concept informatique est traditionnellement associé
au chiffrement de fichiers, c&amp;rsquo;est a dire au fait de passer d&amp;rsquo;un fichier &lt;em&gt;en
clair&lt;/em&gt; a un fichier chiffré dit &lt;em&gt;cyphertext&lt;/em&gt;. Cependant, il ne se limite pas a
ça, et peut aussi servir a garantir l&amp;rsquo;intégrité d&amp;rsquo;un système d&amp;rsquo;exploitation, ou
bien la confidentialité d&amp;rsquo;un support de stockage, par exemple. Nous allons ici
voir comment mettre en place un système de ce type sous GNU/Linux. Cet article
n&amp;rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une
procédure de boot sécurisée, mais plutôt d&amp;rsquo;expliquer les concepts qui entrent en
jeu dans l&amp;rsquo;utilisation du sous-système du noyau Linux &lt;a href="http://en.wikipedia.org/wiki/dm-crypt"&gt;&lt;strong&gt;dm_crypt&lt;/strong&gt;&lt;/a&gt; et de
présenter un rapide tutoriel concernant la création d&amp;rsquo;un support chiffré sur
lequel garder vos informations confidentielles (par exemple, votre &lt;a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg"&gt;clé GPG&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système
du noyau Linux, et s&amp;rsquo;appuie sur &lt;a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup"&gt;LUKS&lt;/a&gt;, un standard de chiffrement
de disques. Comme son nom l&amp;rsquo;indique, device-mapper est un système qui a pour but
de &lt;strong&gt;mapper&lt;/strong&gt; des &lt;strong&gt;block devices&lt;/strong&gt;. Pour être plus clair, le kernel considère
comme &amp;ldquo;block device&amp;rdquo; tout fichier spécial (en gros, les fichiers disques dans&lt;code&gt;/dev/&lt;/code&gt;, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le
cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de
fonctionnement est simple : a partir d&amp;rsquo;un &amp;ldquo;fichier de périphérique&amp;rdquo; (trad.
Wikipédia), il en &amp;ldquo;crée&amp;rdquo; un nouveau, virtuel, ayant des propriétés différentes.
Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans
/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui
apparaîtront donc dans /dev/mapper)&lt;/p&gt;
&lt;p&gt;Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de
fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et
déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les
traduisant sur le système de fichier chiffré, le tout de manière tout a fait
transparente pour les applications utilisant le disque en question. Cela induit
bien entendu une baisse de performance relativement significative dans le cas
d&amp;rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans
le cas de chiffrement de partitions de données.&lt;/p&gt;
&lt;p&gt;D&amp;rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer
si le système de fichier root est chiffré. Dans ce cas précis, la procédure de
boot &lt;strong&gt;&lt;em&gt;doit&lt;/em&gt;&lt;/strong&gt; s&amp;rsquo;appuyer sur une image initrd (l&amp;rsquo;initrd est un système de
fichier minimal qui sert uniquement a initialiser le système. Les kernels de
base de la plupart des distributions GNU/Linux en utilisent un dans tous les
cas, pour des raisons de compatibilité) et sur une partition de boot qui elle
n&amp;rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&amp;hellip;) charge
en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
charge l&amp;rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de
charger les modules nécessaires a la suite du boot (que ce soit pour un boot
sans disque root local, ou bien comme ici avec un système chiffré), puis le
système de fichier &amp;ldquo;cible&amp;rdquo; est remonté sur la racine, et l&amp;rsquo;initrd est démonté
est la RAM qu&amp;rsquo;il occupait est libérée, puis la procédure de boot normale reprend
depuis le système de fichier maintenant monté sur la racine.&lt;/p&gt;
&lt;p&gt;La méthode la plus évidente pour contourner le chiffrement du disque est alors
de remplacer le fichier compressé initrd dans /boot, qui n&amp;rsquo;est pas chiffrée, par
un autre modifié, copiant par exemple la phrase de passe permettant de
déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir
contre ce genre d&amp;rsquo;attaques : l&amp;rsquo;une des plus simple est de faire un checksum du
fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du &lt;em&gt;vrai&lt;/em&gt; boot
que l&amp;rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a
l&amp;rsquo;inconvénient d&amp;rsquo;intervenir après les faits, et de nécessiter au moins un accès
a un fichier initrd reconnu comme sûr.&lt;br /&gt;
Une autre approche consisterait a placer le système de fichier /boot sur un
périphérique dédié, protégé en écriture de façon matérielle (par exemple, une
carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et
protégé en écriture de façon matérielle. Ainsi, il n&amp;rsquo;est pas possible pour un
attaquant de modifier ce système de fichier, et l&amp;rsquo;initrd est alors toujours de
confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
l&amp;rsquo;initrd et du noyau &lt;em&gt;beaucoup&lt;/em&gt; plus difficile qu&amp;rsquo;elle ne le serait sans.&lt;/p&gt;
&lt;p&gt;Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un
programme dédié, &lt;code&gt;cryptsetup&lt;/code&gt;. Ce dernier était en charge de cryptoloop,
l&amp;rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
maintenant responsable de l&amp;rsquo;utilisation &lt;em&gt;userspace&lt;/em&gt; de dm-crypt, qui pour sa
part est entièrement &lt;em&gt;kernel-space&lt;/em&gt;. Cryptsetup permet ainsi le chiffrement, la
manipulation (montage/démontage/&amp;hellip;) et la gestion de clé des systèmes de fichier
LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les
utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi
obligatoirement être capables de le faire en tant que root. &lt;/p&gt;
&lt;p&gt;Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :&lt;br /&gt;
Tout d&amp;rsquo;abord, il nous faut créer le fichier qui contiendra l&amp;rsquo;image. Pour cela,
dans une situation réelle ou l&amp;rsquo;on cherche a chiffrer un disque, il convient
d&amp;rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de
fichier chiffré sur le disque.
Ici, par exemple, nous allons faire : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;dd bs=1000 count=1000000 if=/dev/urandom of=image.img
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Maintenant que notre image est créée, nous pouvons la chiffrer : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sudo cryptsetup luksFormat image.img
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;cryptsetup&lt;/code&gt; va alors nous demander si nous sommes absolument surs de vouloir
formater ce disque (nous allons donc valider en tapant YES), puis une
passphrase. Il convient ici de choisir une passphrase particulièrement sûre,
puisque toute personne ayant accès a la passphrase aura aussi accès au disque et
donc a vos secrets.&lt;br /&gt;
Une fois cela fait, nous allons mapper cette image : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sudo cryptsetup luksOpen image.img crypto
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;cryptsetup&lt;/code&gt; nous redemande la passphrase, charge pendant quelques secondes,
puis nous redonne le prompt. Que s&amp;rsquo;est-il passé? En cherchant un peu, nous
voyons qu&amp;rsquo;il n&amp;rsquo;y a pas de nouveau disque dans /dev. C&amp;rsquo;est tout a fait normal. En
effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les
systèmes de fichiers chiffrés, il les mappe, et ça n&amp;rsquo;a rien a voir. On remarque
qu&amp;rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque
virtuel qui correspond a notre image. Il se comporte comme toute partition, et
peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.
Il se comporte en effet comme une partition, et non comme un véritable disque.)
Bon, ceci fait, notre disque virtuel n&amp;rsquo;est pas formaté. Il nous reviens donc de
le faire, pour pouvoir l&amp;rsquo;utiliser. &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sudo mkfs.ext4 /dev/mapper/crypto
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Maintenant que notre disque est formaté, il peut être monté : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sudo mount /dev/mapper/crypto /mnt
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous
voulez vérifier, un &lt;code&gt;mount | grep crypto&lt;/code&gt; devrait vous donner le résultat
suivant : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils
sont (en fonction de votre passphrase) en sécurité. &lt;/p&gt;
&lt;p&gt;Pour résumer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pour monter vos partitions : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sudo cryptsetup luksOpen &amp;lt;fichier chiffré&amp;gt; &amp;lt;nom de disque virtuel&amp;gt;
sudo mount /dev/mapper/&amp;lt;nom de disque virtuel&amp;gt; &amp;lt;emplacement&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pour démonter vos partitions : &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sudo umount &amp;lt;emplacement&amp;gt;
sudo cryptsetup luksClose &amp;lt;nom de disque virtuel&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour simplifier la vie de tous, j&amp;rsquo;ai créé deux petits scripts vous permettant de
créer et de monter/démonter vos images/disques chiffré-e-s en une seule
commande. Ils se trouvent sur &lt;a href="https://github.com/wxcafe/cryptoscripts"&gt;github&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Par ailleurs, si vous comptez transferer votre image disque sur un véritable
disque (ou clé usb, ou autre), il est préférable de créer une partition de
taille appropriée et de faire un &lt;code&gt;dd if=votre_image of=/dev/votre_partition&lt;/code&gt;
pour ce faire.&lt;/p&gt;</summary></entry><entry><title>Redesign du blog, etc</title><link href="//wxcafe.net/posts/redesign-du-blog/" rel="alternate"></link><updated>2013-06-12T19:14:00+02:00</updated><author><name>wxcafe</name></author><id>tag:wxcafe.net,2013-06-12:posts/redesign-du-blog/</id><summary type="html">&lt;p&gt;Comme vous avez pu le remarquer, ce blog a &amp;ldquo;un peu&amp;rdquo; changé récemment.&lt;/p&gt;
&lt;p&gt;Du coup, expliquons. J&amp;rsquo;ai récemment monté &lt;a href="http://serverporn.fr"&gt;serverporn&lt;/a&gt;, et ai par la même
occasion découvert &lt;a href="http://getpelican.com"&gt;pelican&lt;/a&gt;. J&amp;rsquo;ai tout de suite accroché a ce générateur de
site statique en python, du fait de son efficacité, de sa facilité d&amp;rsquo;utilisation
et de sa grande customisation. En gros, pelican est un logiciel qui prend des
fichiers markdown ou reStructuredText, les passe a la moulinette d&amp;rsquo;un &amp;ldquo;thème&amp;rdquo;
constitué de templates pour les fichiers html et l&amp;rsquo;organisation du projet et
d&amp;rsquo;une partie &amp;ldquo;statique&amp;rdquo; contenant le css, et les autres fichiers nécessaires au
projet, et en fait des pages html. &lt;/p&gt;
&lt;p&gt;Globalement, un thème est constitué ainsi :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #f8f8f2"&gt;th&lt;/span&gt;&lt;span style="color: #960050; background-color: #1e0010"&gt;è&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;me&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;├──&lt;/span&gt; &lt;span style="color: #66d9ef"&gt;static&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;├─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;css&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;└─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[css&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;files]&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;├─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;img&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;└─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[image&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;files]&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;└─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;js&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;└─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[javascript&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;files]&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;└──&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;template&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;├─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;base.html&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;├─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;index.html&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;├─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;page.html&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;├─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;[...]&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;└─&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;article.html&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe
django, et utilisent des variables particulières telles &lt;code&gt;{{ article.content }}&lt;/code&gt;,
par exemple. La syntaxe complète est très bien documentée dans la &lt;a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables"&gt;doc&lt;/a&gt; de
pelican.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;un des grands avantages de pelican est aussi la facilité qu&amp;rsquo;il offre quand a
la mise a jour du blog.&lt;br /&gt;
En effet, il offre un système de Makefiles permettant, grâce a de nombreuses
cibles de compilation, de régénérer le site entier, de ne générer que les
fichiers modifiés depuis la dernière génération, de générer uniquement les
fichiers n&amp;rsquo;existant pas la dernière fois, etc&amp;hellip;
La gestion du projet en devient donc très simple, puisque après avoir écrit un
article, il suffit de faire un &lt;code&gt;make html&lt;/code&gt; pour mettre a jour le blog.&lt;/p&gt;
&lt;p&gt;De plus, le système de wordpress commençait a ne plus me convenir, du fait du
manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec
pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&amp;rsquo;est moi
qui ait modifié les templates et le css), c&amp;rsquo;est lisible (puisque c&amp;rsquo;est du
python, par opposition au PHP&amp;hellip;), et c&amp;rsquo;est plus &amp;ldquo;efficace&amp;rdquo;. Le markdown est
très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
les articles, je n&amp;rsquo;ai pas besoin d&amp;rsquo;un accès continu au net, bref, c&amp;rsquo;est plus
efficace.&lt;/p&gt;
&lt;p&gt;En ce qui concerne les points négatifs : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Perte des commentaires:
Je vous propose de vous référer a l&amp;rsquo;article de Gordontesos &lt;a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html"&gt;ici&lt;/a&gt; quand a
mon avis sur ce sujet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Perte du bouton flattr:
Il va bientôt être remis, c&amp;rsquo;est juste un manque de temps de ma part, mais vu
que toutes les pages passent par les mêmes templates, c&amp;rsquo;est assez facile a
faire.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Perte du spam:
Pourquoi c&amp;rsquo;est dans les points négatifs, ca?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Temps d&amp;rsquo;adaptation et d&amp;rsquo;appréhension du système:
Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins
réguliers sur le blog, c&amp;rsquo;est parce que j&amp;rsquo;apprend a me servir de ce système
et que j&amp;rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous
les cas ca me permet d&amp;rsquo;apprendre plein de choses, donc je mets plutôt ca
dans la catëgorie positive.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voila, c&amp;rsquo;est mon retour d&amp;rsquo;expérience sur pelican. A plus. &lt;/p&gt;</summary></entry><entry><title>Comment Saurik a rooté les Google Glass</title><link href="//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/" rel="alternate"></link><updated>2013-05-06T06:24:00+02:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/</id><summary type="html">&lt;p&gt;Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
pour avoir développé Cydia, un &amp;ldquo;app store&amp;rdquo; alternatif pour les iTrucs),
après avoir reçu une paire de Google glass de la part de Google (de
façon assez évidente&amp;hellip;), a trouvé intéressant d&amp;rsquo;obtenir un accès root
sur celles-ci, ce qu&amp;rsquo;il a accompli très rapidement. Des démentis de la
part de Google et de certains autres sites sont vite arrivés, disant que
les lunettes possédaient un bootloader débloqué et que de fait, le root
était facile a obtenir : il suffisait de débloquer le bootloader,
d&amp;rsquo;extraire l&amp;rsquo;OS, de le rooter hors-fonctionnement, puis de le
réinstaller, rooté, sur les lunettes.&lt;/p&gt;
&lt;p&gt;Le fait est que de débloquer le bootloader laisse une trace permanente
sur les lunettes, et que Saurik n&amp;rsquo;a pas utilisé cette technique pour
rooter sa paire. Voyons comment il a fait :&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Je tiens tout d&amp;rsquo;abord a préciser que toutes les informations qui vont
suivre sont extraites de &lt;a href="http://www.saurik.com/id/16"&gt;cet article&lt;/a&gt;, et plus précisément de la
partie &amp;ldquo;How does this exploit work&amp;rdquo;.  Je tente d&amp;rsquo;apporter ma maigre
contribution a cette explication.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Donc, d&amp;rsquo;après les témoignages des quelques utilisateurs de Glass dans le
monde, il semblerait que ces dernières fonctionnent avec un système
d&amp;rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes
outils internes: un kernel Linux, des outils userland GNU et une machine
virtuelle Java Dalvik pour les applications.&lt;/p&gt;
&lt;p&gt;Saurik a donc cherché un exploit connu pour cette version d&amp;rsquo;android, et
l&amp;rsquo;a appliqué a son problème. L&amp;rsquo;exploit en question est relativement
simple. Depuis la version 4.0 d&amp;rsquo;android, le système permet la sauvegarde
des données des différentes applications, une a une, via ADB (Android
Debug Bridge, un protocole USB permettant l&amp;rsquo;accès a de nombreuses
fonctions avancées des machines fonctionnant sous android, dont, entre
autre, un shell, un accès au logs de debugging, etc&amp;hellip; Cette
fonctionnalité est bien entendu désactivable.) Ce backup est très simple :
il crée un fichier .tgz contenant le dossier de configuration de
l&amp;rsquo;application. Lors de la restauration, le système supprime la
configuration existante, puis la remplace par celle dans l&amp;rsquo;archive gzip.&lt;/p&gt;
&lt;p&gt;Le problème de sécurité vient du fait que les applications android
voient leurs données stockées dans /data/data/identifiant/, et que
/data/ a pour permissions drwxrwx&amp;ndash;x  27  system  system, ce qui
signifie que seul system et les membres du groupe system peuvent lire
dessus. Or, le fichier /data/local.prop définit de nombreux paramètres
au démarrage, et notamment un qui permet au système de déterminer s&amp;rsquo;il
fonctionne dans une VM ou sur un véritable appareil. S&amp;rsquo;il fonctionne sur
une machine virtuelle, il donne les droits root a tout utilisateur se
connectant via ADB, ce qui est ce que l&amp;rsquo;on cherche pour l&amp;rsquo;instant. Le
fait que /data/ appartienne a system veut dire que le programme de
restauration doit être setuid pour accéder aux données a lintérieur qui
appartiennent a root (soit toutes les applications système d&amp;rsquo;android,
dont l&amp;rsquo;application paramètres, et, dans ce cas précis, l&amp;rsquo;application de
log système présente sur les google glass de test. Ainsi, nous avons un
processus tournant en tant que root, qui va écrire sur une partition qui
nous intéresse des données que nous possédons.&lt;/p&gt;
&lt;p&gt;Cependant, un problème reste : le système de restauration d&amp;rsquo;Android
vérifie les données avant de restaurer, et ne restaure pas les symlinks,
ce qui nous empêche d&amp;rsquo;avoir accès directement a /data/local.prop, le
fichier qu&amp;rsquo;on cherche a modifier. Cela dit, il nous reste une
possiblité. Plaçons un dossier world-writable dans le fichier de backup,
et nous pourrons écrire dedans pendant quelques secondes, le temps que
la restauration se termine et que le système remette les permissions en
place. Ainsi, nous pouvons créer le fichier
/data/local/com.google.glass.logging/whatev/x, lien vers
/data/local.prop, et nous avons un toujours un processus tournant en
tant que root qui est en train d&amp;rsquo;écrire dans ce dossier.&lt;/p&gt;
&lt;p&gt;Donc, nous allons lancer deux processus en même temps : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Le premier tentera en boucle de créer le symlink. Il sera consitué de
la commande suivante, depuis un shell sur les lunettes :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&amp;gt;/dev/null
do :
done
&lt;/pre&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Le deuxième sera le processus de restauration de notre exploit. Celui
ci, pour une plus grande chance de réussite, devra être suffisamment
lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x,
pour qu&amp;rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive
dans x après que le symlink soit effectif. La commande sera, depuis
l&amp;rsquo;ordinateur host :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;adb restore exploit.ab
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ces commandes vont fonctionner de concert pour nous donner un accès root :&lt;br /&gt;
- Le processus de restauration va créer le dossier whatev, qui sera
world-readable. Il va commencer a copier le fichier bigfile.&lt;br /&gt;
- Le processus de symlink va créer le lien
/data/data/com.google.glass.logging/whatev/x, pointant vers
/data/local.prop, puis rendre l&amp;rsquo;âme proprement.&lt;br /&gt;
- Le processus de restauration, ayant enfin fini de copier
whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui
est lié a /data/local.prop. Comme le processus est setuid root, il ne se
rendra compte de rien, et écrira tout dans /data/local.prop.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And voilà! On a écrit ce que l&amp;rsquo;on veut dans /data/local.prop, ce qui
nous permet de faire croire a android qu&amp;rsquo;il tourne dans une machine
virtuelle (ce que l&amp;rsquo;on veut, c&amp;rsquo;est en fait &amp;ldquo;ro.kernel.qemu=1&amp;rdquo;, qui
indique au noyau qu&amp;rsquo;il tourne dans qemu, un système de VM).&lt;/p&gt;
&lt;p&gt;Il nous reste a rebooter, depuis l&amp;rsquo;ordinateur host :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;adb reboot
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis nous remontons la partitions système en lecture/écriture (r/w),
depuis le host :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;adb shell &amp;quot;mount -o remount,rw /system&amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous copions le binaire &lt;a href="https://data.wxcafe.net/uploads/android/glass/su"&gt;su&lt;/a&gt; vers l&amp;rsquo;appareil :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;adb push su /system/xbin
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
lexécuter plus tard :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;adb shell &amp;quot;chmod 6755 /system/xbin/su&amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
redémarrer normalement :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;adb shell &amp;quot;rm /data/local.prop&amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enfin, nous redemarrons a nouveau :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;adb reboot
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et voila, une paire de google glass rootée!&lt;/p&gt;
&lt;p&gt;Il est bon de préciser que cette manipulation n&amp;rsquo;est possible que parce
que les lunettes tournent sous une ancienne version d&amp;rsquo;android, et que ce
bug a été fixé depuis.&lt;/p&gt;
&lt;p&gt;Il serait aussi interessant de couvrir les problèmes de vie privée
qu&amp;rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.&lt;/p&gt;
&lt;p&gt;A bientôt!&lt;/p&gt;</summary></entry><entry><title>Monter son propre serveur, partie 1: le serveur et l'apache.</title><link href="//wxcafe.net/posts/monter-son-propre-serveur-partie-1/" rel="alternate"></link><updated>2013-03-18T09:51:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/</id><summary type="html">&lt;p&gt;Il y a un certain temps, j&amp;rsquo;avais parlé du concept du self-hosting. Il
s&amp;rsquo;agit de posséder son propre serveur, et donc, par extension, ses
données. &lt;/p&gt;
&lt;p&gt;Bien entendu, il n&amp;rsquo;est pas nécessaire pour cela de posséder
physiquement son propre serveur (encore que ce soit possible, mais ce
n&amp;rsquo;est pas le sujet abordé ici.)&lt;br /&gt;
Nous expliquerons ici les étapes nécessaires pour arriver a avoir un
serveur utilisable, du moment ou vous arrivez sur le système fraichement
installé, au moment ou vous possédez un serveur avec tous les paquets
nécessaires a l&amp;rsquo;utilisation que l&amp;rsquo;on veut en faire ici d&amp;rsquo;installés.
Cette partie va consister a paramétrer le système (ici un debian
squeeze. Il est bien sur possible de faire la même chose avec a peu près
toutes les distributions Linux disponibles, tout comme avec les BSD et
tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x
squeeze, parce que c&amp;rsquo;est une distribution simple a utiliser comme
serveur, stable, et facile a configurer (puisqu&amp;rsquo;une bonne partie de la
configuration est déjà faite et incluse dans le paquet), donc adaptée au
but de cet article, a savoir rendre l&amp;rsquo;installation simple et
compréhensible).&lt;/p&gt;
&lt;p&gt;La première chose a faire est bien entendu d&amp;rsquo;obtenir le serveur en lui
même. Cette partie de la chose ne sera pas traitée dans cet article. Il
existe en effet un nombre infini d&amp;rsquo;obtenir un serveur, que ce soit en le
louant chez OVH/1&amp;amp;1/n&amp;rsquo;importe quel autre hébergeur commercial, en
participant a un système d&amp;rsquo;hébergement collaboratif (je vous laisse
chercher), en achetant un serveur et en le faisant fonctionner de chez
vous, en utilisant un vieux PC&amp;hellip; Bref, les possibilités sont multiples.
Dès lors que vous avez accès a un système debian serveur, peu importe sur
quel matériel il fonctionne, et a priori peu importe aussi la manière
dont vous y accédez, le résultat est le même (et la procédure aussi&amp;hellip;).
Dans cet article, nous parlerons de la configuration de base, du moment
ou vous avez le serveur vierge dans les mains au moment ou vous
installez le serveur http.&lt;/p&gt;
&lt;p&gt;Dans cet article, lorsque est précisée le type d&amp;rsquo;IP a utiliser, il
convient de mettre ce type précisément. Quand le type n&amp;rsquo;est pas
précisée, libre a vous de choisir ipv4 ou ipv6.&lt;/p&gt;
&lt;p&gt;Bref. Commençons au point ou vous avez un accès root a votre serveur,
n&amp;rsquo;ayant soit aucun mot de passe, soit un choisi par l&amp;rsquo;hébergeur, et ou
rien n&amp;rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez
donc par faire un &lt;code&gt;passwd&lt;/code&gt;, pour mettre au plus vite un mot de passe
solide sur le compte root. Continuons en allant vite mettre en place le
nom de domaine. Pour cela, votre registrar doit vous fournir une
interface vous permettant d&amp;rsquo;éditer l&amp;rsquo;entrée DNS pour votre nom de
domaine. &lt;/p&gt;
&lt;p&gt;Cette entrée doit donc pour l&amp;rsquo;instant ressembler a ca :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt; &amp;lt;votre nom de domaine&amp;gt; NS 1
IN MX 1
IN A &amp;lt;IPv4 de votre serveur&amp;gt;
IN AAAA &amp;lt;IPv6 de votre serveur&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cela vous permet de rediriger tout le trafic se référant a votre nom de
domaine vers votre ip (le fonctionnement exact du DNS est assez
compliqué a expliquer, donc on va dire que c&amp;rsquo;est de la magie pour
l&amp;rsquo;instant, ca sera peut être le sujet d&amp;rsquo;un autre article), et d&amp;rsquo;indiquer
que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers
votre serveur, ce qui est un bon début. Faisons un petit point sécurité
ici : pour accéder a votre serveur, il vous suffit actuellement de taper
le mot de passe root.&lt;/p&gt;
&lt;p&gt;root est un utilisateur &lt;strong&gt;assez&lt;/strong&gt; répandu, et il est assez simple de
bruteforcer le mot de passe. (&lt;em&gt;Relativement&lt;/em&gt; assez simple, en fonction
du nombre de caractères, ça prend plus ou moins de temps, et si vous
avez suffisamment de caractères, ça peut prendre un temps assez
conséquent. Cela dit, il vaut mieux être prudent&amp;hellip;) Ainsi, nous allons
arrêter d&amp;rsquo;utiliser root et nous allons commencer a utiliser des couples
clés publiques/privées pour nous connecter au serveur.&lt;br /&gt;
Cela se fait en deux temps : tout d&amp;rsquo;abord, créer un nouvel utilisateur,
grâce auquel nous administrerons le serveur a l&amp;rsquo;avenir; puis configurer
OpenSSH pour que celui ci n&amp;rsquo;accepte que les connections par clés et plus
celles sur root.&lt;/p&gt;
&lt;p&gt;Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se
fait avec adduser, qui est interactif (vous ne devriez pas avoir de
problème avec, puisqu&amp;rsquo;il crée tout les dossiers et fichiers nécessaires,
et vous pose toutes les questions utiles pour vous aider.) sinon, vous
devrez utiliser useradd, qui est (en plus d&amp;rsquo;être très chiant a
distinguer de l&amp;rsquo;autre, bien plus chiant a utiliser. (adduser est en fait
un simple script permettant l&amp;rsquo;utilisation d&amp;rsquo;useradd plus facilement.)&lt;/p&gt;
&lt;p&gt;Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
juste &lt;code&gt;adduser &amp;lt;username&amp;gt;&lt;/code&gt;, soit utiliser le mode non-interactif
en faisant un &lt;code&gt;adduser --group &amp;lt;username&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Avec useradd, vous devrez utiliser la commande suivante : &lt;code&gt;useradd -m
-N -g &amp;lt;username&amp;gt;&lt;/code&gt;. Cette commande ajoutera un utilisateur, créera
son dossier principal dans /home/, et l&amp;rsquo;ajoutera au groupe du même nom
que lui (ce qui est en général nécessaire pour des questions de vie
privée).&lt;/p&gt;
&lt;p&gt;Il convient maintenant d&amp;rsquo;ajouter cet utilisateur aux groupes qu&amp;rsquo;il sera
amené a administrer: &lt;code&gt;usermod &amp;lt;username&amp;gt; -a -G www-data postfix
users staff sudo wheel&lt;/code&gt;, puis de changer son mot de passe
&lt;code&gt;passwd&lt;/code&gt;. Enfin, ajoutons le aux utilisateurs autorisés a utiliser
sudo: &lt;code&gt;echo "%sudo ALL=(ALL) ALL" &amp;gt;&amp;gt; /etc/sudoers&lt;/code&gt;&lt;br /&gt;
Enfin, changeons d&amp;rsquo;utilisateur : &lt;code&gt;su&lt;/code&gt;. A ce point, vous avec un
utilisateur complètement fonctionnel et utilisable pour toutes les
taches d&amp;rsquo;administration. Si vous devez encore utiliser root, c&amp;rsquo;est que
quelque chose ne va pas.&lt;/p&gt;
&lt;p&gt;Vous êtes donc loggés sur le système en tant qu&amp;rsquo;utilisateur normal. Nous
allons maintenant passer a la phase 2 du plan : désactiver le login ssh
root et le login ssh par mot de passe.&lt;br /&gt;
Tout d&amp;rsquo;abord, qu&amp;rsquo;est-ce qu&amp;rsquo;un login par clé ssh? Il s&amp;rsquo;agit en fait d&amp;rsquo;un
système assez semblable a celui vous permettant de chiffrer vos mail :
vous avec une clé publique et une clé privée sur le client, et la clé
publique est aussi sur le serveur. Lorsque vous vous connectez, openssh
vérifie que vous possédez la clé privée qui correspond a la clé publique
stockée sur le serveur (pour votre utilisateur, bien entendu). Il est
également possible d&amp;rsquo;utiliser plusieurs clés publique pour chaque&lt;br /&gt;
utilisateur.&lt;/p&gt;
&lt;p&gt;Bref, maintenant que nous avons la théorie, passons a la pratique : tout
d&amp;rsquo;abord, il nous faut générer un couple de clés publique/privée sur le
client. Openssh fait ça via la commande &lt;code&gt;ssh-keygen -t rsa&lt;/code&gt; (le -t
rsa précise a ssh que nous voulons un chiffrement rsa, qui est
suffisamment solide pour cette utilisation.) Entrez les informations que
ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver
dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.&lt;br /&gt;
known_hosts liste les serveurs auxquels vous vous êtes connectés déjà
une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous
intéresse ici c&amp;rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé
privée, sauvegardez la sur une clé USB ou notez la sur un bout de
papier, si vous la perdez, vous ne pourrez plus vous connecter au
serveur. (planquez la clé usb/le bout de papier&amp;hellip;) id_rsa.pub, quand a
lui, contient votre clé publique. Copiez la sur le serveur, avec un&lt;code&gt;scp ~/.ssh/id_rsa.pub &amp;lt;username&amp;gt;@&amp;lt;votre nom de domaine&amp;gt;:~/&lt;/code&gt; , ou
en la copiant a la main, si ça vous amuse. &lt;/p&gt;
&lt;p&gt;Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel
sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.
Il est donc nécessaire de créer le dossier .ssh (&lt;code&gt;mkdir .ssh&lt;/code&gt;), puis
de déplacer ce fichier a la bonne place (&lt;code&gt;mv ~/id_rsa.pub ~/.ssh/authorized_keys&lt;/code&gt;).
Testez si ça fonctionne : ouvez un autre terminal, et&lt;br /&gt;
connectez vous a votre serveur (&lt;code&gt;ssh &amp;lt;username&amp;gt;@&amp;lt;votre nom de
domaine&amp;gt;&lt;/code&gt;), et il ne devrait pas vous demander de mot de passe.&lt;strong&gt;Si
il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,
donc vérifiez que vous avez suivi correctement les instruction
ci-dessus.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Continuons. Il ne nous reste plus qu&amp;rsquo;a installer le serveur web, et a le
configurer: &lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;sudo apt-get install \
apache2 apache2.2-common apache2-doc apache2-mpm-prefork \
apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \
php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \
apache2-suexec php-pear php-auth php5-mcrypt mcrypt \
php5-imagick imagemagick libapache2-mod-suphp libruby \
libapache2-mod-ruby
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;(faisons large, on aura besoin de l&amp;rsquo;excédent plus tard&amp;hellip;), puis activons les&lt;br /&gt;
mods apache en faisant &lt;code&gt;a2enmod suexec rewrite ssl actions include
dav_fs dav auth_digest&lt;/code&gt;, et faisons en sorte que ces activations
soient prises en compte par apache via un &lt;code&gt;sudo service apache2
restart&lt;/code&gt; &lt;/p&gt;
&lt;p&gt;Le serveur fonctionne, maintenant, il est necessaire de lui expliquer
comment fonctionner sur notre nom de domaine et ou trouver les fichiers
a envoyer. &lt;/p&gt;
&lt;p&gt;Pour cela, nous allons faire un simple &lt;code&gt;ln -s /etc/apache2/sites-{available,enabled}/default&lt;/code&gt;, car apache est assez
sympa pour nous filer un fichier de configuration par défaut. Il nous
faut encore l&amp;rsquo;éditer, en changeant l&amp;rsquo;adresse mail au début du document
par la votre, et en changeant &lt;code&gt;AllowOverride none&lt;/code&gt; en &lt;code&gt;AllowOverride All&lt;/code&gt;,
et enfin redémarrer apache pour qu&amp;rsquo;il prenne en compte les
modifications, par un &lt;code&gt;sudo service apache2 restart&lt;/code&gt; &lt;/p&gt;
&lt;p&gt;Et maintenant, il vous reste a apprendre le html, parce que ca y est,
votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on
verra l&amp;rsquo;installation du serveur mail (c&amp;rsquo;est suffisamment complexe pour
prendre un article seul&amp;hellip;)&lt;/p&gt;</summary></entry><entry><title>Pourquoi je vais quitter linux pour passer a FreeBSD.</title><link href="//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/" rel="alternate"></link><updated>2013-02-04T17:41:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/</id><summary type="html">&lt;p&gt;&lt;em&gt;This is subject to debate, and as most of the actors in this field are
not French-speaker, there is an English version of this text &lt;a href="http://data.wxcafe.net/archives/126"&gt;here&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Bon, voila. J&amp;rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain
temps, maintenant, et depuis un certain temps je remarque des
changements malvenus. Bien entendu, au début, je n&amp;rsquo;avais pas les
connaissances nécessaires pour comprendre ne serait-ce que ces
modifications existaient. Et puis certaines sont arrivées avant que je
n&amp;rsquo;ai même idée que quelque chose dans mon système d&amp;rsquo;exploitation avait
cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
l&amp;rsquo;époque, je n&amp;rsquo;avais aucune idée de la façon dont les disques étaient
montés sur mon système. Le premier système non-Windows que j&amp;rsquo;ai utilisé
fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je
cherche a démonter le système pour comprendre comment il fonctionnait en
profondeur. Cependant, avec le temps, les connaissances s&amp;rsquo;accumulant et
mon niveau de compréhension du système s&amp;rsquo;améliorant, j&amp;rsquo;ai commencé a
remarquer que certain bouts de l&amp;rsquo;OS ne collaient pas exactement avec les
autres. Bien sur, je ne saurais dire si cette réalisation s&amp;rsquo;est faite a
cause de la recrudescence de ces bouts d&amp;rsquo;OS, ou bien juste a cause de ma
compréhension plus poussée. Toujours est-il que ces petits bouts d&amp;rsquo;OS ne
sadaptant pas au reste du système se faisaient de plus en plus visible.
Et puis, un jour, j&amp;rsquo;en ai eu marre de voir unity sur ma machine, et j&amp;rsquo;ai
choisi de passer a Archlinux. C&amp;rsquo;était avant le passage a systemd. Ce
système me convenait bien. Si je n&amp;rsquo;installais pas Gnome, ce que je ne
comptais pas faire, il ne me forçait pas a installer un *kit
quelconque, ni dbus. Oui, udev était toujours la, mais c&amp;rsquo;était le moins
envahissant de ceux la.&lt;/p&gt;
&lt;p&gt;Mais Archlinux est passé a systemd. Attention hein, je ne critique ici
ni systemd, ni udev, ni même les &lt;em&gt;kit, et surtout pas Archlinux. Les
premiers sont probablement très efficaces dans leur domaine, et le
second n&amp;rsquo;a pas &lt;strong&gt;vraiment&lt;/strong&gt; eu le choix, rapport a la philosophie de la
distribution d&amp;rsquo;avoir au plus vite les dernières versions de tout.
Cependant, systemd, tout comme udev et les &lt;/em&gt;kits (bien que ce ne soient
pas les seuls a faire ça&amp;hellip;) ont un problème très précis, qui n&amp;rsquo;importe
pas a tout le monde, mais qui est très gênant pour ceux a qui il
importe, et ce problème est que ces systèmes ne respectent absolument
pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en
ces 9 principes :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ce qui est petit est beau&lt;/li&gt;
&lt;li&gt;Faites en sorte que chaque programme fasse une chose, bien.&lt;/li&gt;
&lt;li&gt;Faites un prototype aussi vite que possible&lt;/li&gt;
&lt;li&gt;Choisissez la portabilité plutôt que l&amp;rsquo;efficacité&lt;/li&gt;
&lt;li&gt;Stockez les données dans des fichiers textes.&lt;/li&gt;
&lt;li&gt;Utilisez ce qui existe déjà a votre avantage. [&lt;strong&gt;1&lt;/strong&gt;]&lt;/li&gt;
&lt;li&gt;Utilisez des scripts shells pour faciliter la portabilité et la
réutilisation.&lt;/li&gt;
&lt;li&gt;Évitez les UI qui &amp;ldquo;capturent&amp;rdquo; l&amp;rsquo;utilisateur.&lt;/li&gt;
&lt;li&gt;Faites de chaque programme un filtre.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Alors bien entendu, un système d&amp;rsquo;exploitation est fait pour évoluer, et
on pourrait penser qu&amp;rsquo;UNIX a fait son temps. Cependant, ce n&amp;rsquo;est pas
exactement la façon dont l&amp;rsquo;informatique fonctionne. Effectivement, les
standards, les systèmes d&amp;rsquo;exploitation, les logiciels, tout doit évoluer
- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&amp;rsquo;est
pas d&amp;rsquo;UNIX que nous parlons ici. C&amp;rsquo;est de la &lt;em&gt;philosophie&lt;/em&gt; UNIX. Et
celle-ci n&amp;rsquo;a pas fait son temps, &lt;strong&gt;elle a fait ses preuves.&lt;/strong&gt; La
philosophie UNIX, en plus d&amp;rsquo;être efficace sur le papier, a aussi 44 ans
de tests derrière elle, et fonctionne aussi bien qu&amp;rsquo;au premier jour.&lt;br /&gt;
La philosophie UNIX est aussi et surtout une garantie d&amp;rsquo;utilisabilité
et de simplicité pour les administrateurs systèmes, pour les
développeurs, bref pour tous ceux qui font de l&amp;rsquo;informatique&lt;em&gt;sérieusement&lt;/em&gt; (je ne dis pas que les autres métiers de l&amp;rsquo;informatique
ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce
sont ceux qui sont les plus proches du système).&lt;/p&gt;
&lt;p&gt;Tous OS se doit d&amp;rsquo;avoir un système standardisé pour faire communiquer
les programmes entre eux. UNIX a un système de pipes, des sortes de
fichiers spéciaux permettant d&amp;rsquo;échanger des informations. C&amp;rsquo;est
efficace, ça respecte le &amp;ldquo;tout est fichier&amp;rdquo;, c&amp;rsquo;est standard, c&amp;rsquo;est
simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
remplacer ça, avec une interface qui n&amp;rsquo;est explicitement pas faite pour
être utilisée a la ligne de commande mais a l&amp;rsquo;aide d&amp;rsquo;APIs, et un
programme monolithique qui effectue sa tache d&amp;rsquo;une façon complètement
obscure pour l&amp;rsquo;utilisateur. Alors bien sur, il l&amp;rsquo;effectue d&amp;rsquo;une façon
efficace, cette tache. Oui, ça va plus vite qu&amp;rsquo;avant. Oui, c&amp;rsquo;est plus
&amp;ldquo;rangé&amp;rdquo;, ça fait moins &amp;ldquo;fouillis&amp;rdquo;. Mais c&amp;rsquo;est moins efficace. C&amp;rsquo;est&lt;em&gt;beaucoup&lt;/em&gt; moins utilisable pour l&amp;rsquo;utilisateur final. C&amp;rsquo;est
horriblement chiant pour les sysadmins, parce qu&amp;rsquo;ils ne peuvent plus
lire facilement les échanges entre programmes. C&amp;rsquo;est peu pratique, en
fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.&lt;br /&gt;
Systemd prend le même parti de créer une interface unifiée, accessible
via des appels a des APIs uniquement, complètement obscure, extrêmement
abstraite, bien entendu monolithique, et très peu ouverte a la
modification par l&amp;rsquo;utilisateur final. Alors oui, il parait que ça
augmente la vitesse de boot. Eh bien, au risque d&amp;rsquo;en choquer quelques
uns, je préfère avoir un système qui boote &lt;em&gt;légèrement&lt;/em&gt; plus lentement
et que je puisse modifier facilement, et qui soit ouvert, compréhensible
et distribué. C&amp;rsquo;est presque comme si les projets freedesktop.org avaient
pour but de remplacer la base UNIX de linux en créant un système
concurrent, bâtard, bâti sur le kernel Linux mais n&amp;rsquo;employant plus les
systèmes basiques d&amp;rsquo;UNIX.&lt;/p&gt;
&lt;p&gt;Le problème est qu&amp;rsquo;il est facilement visible que la direction prise par
la communauté Linux n&amp;rsquo;est pas celle du retour sur les systèmes UNIX ni
celle du développement de solutions respectant la philosophie UNIX, mais
remises au gout du jour (?), mais est bien d&amp;rsquo;accepter et de pousser les
changements apportés par les projets freedesktop.org directement dans le
cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font
partie de nombreux développeurs de ces projets), a déjà adopté tous ces
changements (archlinux aussi, mais pour d&amp;rsquo;autres raisons&amp;hellip;), et on peut
compter sur le fait que les autres distributions l&amp;rsquo;adopteront un jour ou
l&amp;rsquo;autre.&lt;/p&gt;
&lt;p&gt;Bon, maintenant que nous avons, si ce n&amp;rsquo;est démontré la nocivité de ces
systèmes, tout du moins exprimé les raisons qui font qu&amp;rsquo;ils me
déplaisent, on pourrait penser qu&amp;rsquo;il suffit de passer a une distribution
n&amp;rsquo;incluant pas systemd, voire a une distribution n&amp;rsquo;incluant pas du tout
de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur
archlinux. Cependant, avec un peu de réflexion, on voit que si des
distributions comme archlinux et Fedora ont adopté systemd (et
qu&amp;rsquo;OpenSUSE est en train de lintégrer), il est probable que cela
devienne un standard au fil des années, et que seuls survivent systemd
et upstart, le gestionnaire de démarrage d&amp;rsquo;ubuntu, qui ne changera
probablement pas (je les vois mal revenir en arrière sur ce point.)
Toujours est-il que l&amp;rsquo;init héritée du System V semble condamnée a mourir
sous Linux. Il pourrait être judicieux de passer sous debian squeeze,
qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne
la recevra probablement que dans 2/3 ans. Cependant, cette période est
toujours trop courte, et met sur mon système d&amp;rsquo;exploitation une date
d&amp;rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution
est de passer sous un système autre, qui ait son propre système d&amp;rsquo;init
(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
principales s&amp;rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&amp;rsquo;est pas
vraiment un choix, vu le peu de programmes qu&amp;rsquo;il permet de faire
fonctionner et le fait qu&amp;rsquo;il ne soit disponible que sur i386, ce qui
n&amp;rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku
n&amp;rsquo;est pas un choix non plus, puisque le but est de rester dans une
optique UNIX.&lt;/p&gt;
&lt;p&gt;OpenSolaris est un système d&amp;rsquo;exploitation tout a fait valable. Je n&amp;rsquo;ai
en théorie aucun problème sur cet OS, sauf que certains choix de design
ne correspondent pas du tout a l&amp;rsquo;idée que j&amp;rsquo;ai d&amp;rsquo;un OS. En effet,
OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de
ses outils, avec des paquets modifiés pour les rendre plus simples a
utiliser (fichiers de configuration fournis par défaut, par exemple, et
autres patchs &amp;ldquo;release-only&amp;rdquo;), et une tendance a faire des scripts et
des outils installés par défaut pour tout et n&amp;rsquo;importe quoi. Bref, cela
n&amp;rsquo;est pas le sujet. Il convient aussi de voir qu&amp;rsquo;avec la récente
acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
n&amp;rsquo;ait pas de très beaux jours devant lui (la &lt;a href="http://hub.opensolaris.org/bin/view/Main/"&gt;page daccueil&lt;/a&gt; du
projet affiche d&amp;rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)&lt;/p&gt;
&lt;p&gt;Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&amp;rsquo;OpenBSD, NetBSD
ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&amp;rsquo;est
simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
réputation d&amp;rsquo;être orientées sécurité, et d&amp;rsquo;après ce que j&amp;rsquo;ai pu en voir
DFBSD ressemble aussi au système de l&amp;rsquo;assistance a l&amp;rsquo;user a outrance
décris plus haut. Mais la vérité est que je n&amp;rsquo;ai pas fait suffisamment
de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
qu&amp;rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a
utiliser, plus le fait que le système de ports me convient bien (j&amp;rsquo;aime
pouvoir configurer mes logiciels de façon assez profonde.)&lt;/p&gt;
&lt;p&gt;Voila, c&amp;rsquo;est mon avis sur ce &amp;ldquo;problème&amp;rdquo; actuel du monde de Linux. Bien
entendu, je continuerai a utiliser Linux, et je ne peux quespérer que
les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins
n&amp;rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un
choix pour les utilisateurs.&lt;br /&gt;
[1]: Je n&amp;rsquo;ai pas trouvé de traduction satisfaisante a &amp;ldquo;software leveraging&amp;rdquo;, mais l&amp;rsquo;idée est la&amp;hellip;*&lt;/p&gt;</summary></entry><entry><title>Update et pensées a propos du Raspberry Pi</title><link href="//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/" rel="alternate"></link><updated>2013-01-27T01:55:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/</id><summary type="html">&lt;p&gt;Bon.&lt;br /&gt;
J&amp;rsquo;ai annoncé il y a environ 20 jours que j&amp;rsquo;avais pour projet de faire
une Piratebox basée sur un Raspberry Pi, &lt;del&gt;astucieusement&lt;/del&gt; nommée
PiRatBox. Il se trouve qu&amp;rsquo;après de nombreux essais, un problème
récurrent apparait: le Raspberry Pi n&amp;rsquo;est pas capable de fournir assez
de courant par défaut pour faire fonctionner a la fois un disque dur et
une antenne WiFi.&lt;br /&gt;
Alors, autant il me semble évident qu&amp;rsquo;avec une
alimentation provenant d&amp;rsquo;un port USB a 2A (max), je n&amp;rsquo;avais pas
énormément de chances d&amp;rsquo;avoir 2A sur chacun des ports host du Raspi,
autant avoir moins de 250 mA sur chacun de ces ports me semble un tout
petit peu exagéré en terme de rentabilité. &lt;/p&gt;
&lt;p&gt;De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me
servant a rien) (vous savez, celui qui est monté en USB&amp;hellip;), qui
consomme énormément, est assez louche. Il devrait toujours être possible
de désactiver une device USB, me semble-t-il, au niveau logiciel. La,
bien qu&amp;rsquo;il soit surement possible de la désactiver au niveau du kernel,
il n&amp;rsquo;est pas &lt;strong&gt;simplement&lt;/strong&gt; possible de la &amp;ldquo;débrancher&amp;rdquo;. Ce qui est bien
chiant, étant donné le besoin évident de puissance électrique dans
lequel on se retrouve. &lt;/p&gt;
&lt;p&gt;Bon, je dois avouer n&amp;rsquo;avoir pas testé de lancer les différents services
composant le système des piratebox sous arch, pour la simple &lt;del&gt;et
bonne&lt;/del&gt; raison qu&amp;rsquo;arch utilise systemd et qu&amp;rsquo;il n&amp;rsquo;existe pas de wrapper
systemd pour les daemons piratebox, et que j&amp;rsquo;ai la flemme d&amp;rsquo;en faire,
parce que systemd est une horreur a utiliser avec les scripts init. Donc
non, j&amp;rsquo;utiliserai debian. Le problème d&amp;rsquo;utiliser debian dans ce cas
précis est que apt/dpkg a une gestion des dépendances dans un sens mais
pas dans l&amp;rsquo;autre, en ce sens que si on installe un package &amp;ldquo;haut&amp;rdquo;, c&amp;rsquo;est
a dire dépendant de plusieurs autres packages, apt/dpkg se charge
efficacement d&amp;rsquo;installer toutes les dépendances nécessaires, tandis que
si on désinstalle un package &amp;ldquo;bas&amp;rdquo;, c&amp;rsquo;est a dire sur lequel de nombreux
autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
&amp;ldquo;hauts&amp;rdquo;, ce qui pose un vrai problème quand on se retrouve sur un
Raspberry Pi, puisqu&amp;rsquo;il n&amp;rsquo;y a pas de moyen &amp;ldquo;facile&amp;rdquo; de choisir ce qui
sera installé sur le système avant l&amp;rsquo;installation proprement dite
(puisque le moyen &amp;ldquo;universel&amp;rdquo; d&amp;rsquo;installation sur Raspberry Pi est le dd
vers la SD qui sert de disque système.)&lt;/p&gt;
&lt;p&gt;Il y a &lt;strong&gt;énormément&lt;/strong&gt; d&amp;rsquo;autres critiques que l&amp;rsquo;ont pourrait faire
concernant le Raspberry Pi. Son système de démarrage a s&amp;rsquo;arracher les
cheveux, par exemple. En effet, plutôt que de faire comme tout pc
normalement constitué ou la partie calcul démarre, lance le bootloader,
cherche le kernel de l&amp;rsquo;OS qui lui même se lance, initialise le hardware,
etc&amp;hellip;, a un système bâtard du au fait que la puce au centre de la carte
est a la base une puce graphique a laquelle on a greffé un cœur de
calcul (probablement au fond d&amp;rsquo;une cour d&amp;rsquo;immeuble, dans les quartiers
pauvres de Bratislava, vu la propreté de la greffe&amp;hellip;), et le moyen le
plus efficace qu&amp;rsquo;aient trouvé les personnes ayant implémenté cette
atrocité de gérer le boot est donc de faire démarrer le cœur graphique
en premier, ce dernier exécute un code propriétaire pour démarrer le
cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel
etc&amp;hellip; &lt;/p&gt;
&lt;p&gt;Ce qui non seulement complique énormément le boot, non seulement ajoute
du code propriétaire a un projet se disant libre, mais en plus n&amp;rsquo;est&lt;strong&gt;visiblement&lt;/strong&gt; pas fait pour être utilisé de cette manière. Le hack,
oui, mais uniquement quand c&amp;rsquo;est bien réalisé, sinon je dis non. &lt;/p&gt;
&lt;p&gt;Enfin, le projet que j&amp;rsquo;avais est toujours en cours de réalisation. Je
le terminerai dès que j&amp;rsquo;aurai récupéré les outils nécessaires pour
monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois
que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa
vie. Les problèmes qu&amp;rsquo;il m&amp;rsquo;a posé, qu&amp;rsquo;il n&amp;rsquo;aurait pas du me poser, m&amp;rsquo;ont
trop agacé pour que j&amp;rsquo;aie envie de le sortir et de jouer avec une fois
sa mission remplie. &lt;/p&gt;
&lt;p&gt;Dommage.&lt;/p&gt;</summary></entry><entry><title>Update</title><link href="//wxcafe.net/posts/update/" rel="alternate"></link><updated>2013-01-05T18:32:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-01-05:posts/update/</id><summary type="html">&lt;p&gt;Juste une petite note pour annoncer le prochain article, consacré a la
fabrication d&amp;rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
sur le blog!&lt;/p&gt;</summary></entry><entry><title>Mutt ou le client email le meilleur moins mauvais</title><link href="//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/" rel="alternate"></link><updated>2013-01-02T02:12:00+01:00</updated><author><name>Wxcafe</name></author><id>tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/</id><summary type="html">&lt;p&gt;Les clients mails ont une particularité en commun : ils sont tous
&lt;del&gt;très&lt;/del&gt; mauvais. Cela pour nombre de raisons, mais la principale reste
que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une
utilisation &lt;strong&gt;a la&lt;/strong&gt; UNIX&lt;br /&gt;
Cependant, un d&amp;rsquo;entre eux se démarque par sa moins-mauvais-itude, c&amp;rsquo;est
le relativement bien connu &lt;del&gt;Outlook Express 2003&lt;/del&gt; Mutt!&lt;br /&gt;
Mutt est un client mail en ligne de commande, qui, comme le dit sa page
daccueil, &lt;a href="http://www.mutt.org"&gt;&amp;ldquo;just sucks less&amp;rdquo;&lt;/a&gt;. Dans les faits, mutt est assez
chiant a configurer mais particulièrement pratique a utiliser après.&lt;/p&gt;
&lt;p&gt;La configuration de mutt se fait dans le fichier &lt;code&gt;.muttrc&lt;/code&gt; ou dans
&lt;code&gt;/etc/Muttrc&lt;/code&gt;, et il est courant d&amp;rsquo;utiliser offlineimap en
conjonction avec celui ci, de façon a accéder aux mails même sans accès
internet (mutt dispose d&amp;rsquo;un système d&amp;rsquo;accès IMAP/POP et SMTP, mais ne
crée pas de cache, ce qui empêche la consultation des emails sans
connexion internet.) La configuration d&amp;rsquo;offlineimap se fait dans&lt;code&gt;~/.offlineimaprc&lt;/code&gt; ou dans rien d&amp;rsquo;autre en fait, c&amp;rsquo;est une config
par user. Offlineimap est un petit logiciel en python qui synchronise un
dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque
justement mutt accepte les dossiers au format Maildir. (De plus, cela va
tout a fait dans le sens de la libération des données en cela que vous
possédez vos mails en local.)&lt;br /&gt;
Bref, passons aux choses serieuses : le code. Déjà, installez
offlineimap et &lt;a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh"&gt;ce script&lt;/a&gt; fait par moi, qui vous permet d&amp;rsquo;installer
mutt avec le patch sidebar, qui crée un listing des dossiers sur la
partie gauche.&lt;br /&gt;
Ensuite, voyons pour la partie configuration :&lt;br /&gt;
Ma configuration d&amp;rsquo;offlineimap :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;## Config file for offlineimap&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## Originally located in ~/.offlineimaprc&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## This should not be edited without creating a copy before&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## Created by Wxcafe (Clément Hertling)&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## Published under CC-BY-SA&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;[general]&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# List of accounts to be synced, separated by a comma.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;accounts&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;main&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;[Account&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;main]&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# Identifier for the local repository; e.g. the maildir to be synced via IMAP.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;localrepository&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;main&lt;/span&gt;&lt;span style="color: #f92672"&gt;-&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;local&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# Identifier for the remote repository; i.e. the actual IMAP, usually non-local.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;remoterepository&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;main&lt;/span&gt;&lt;span style="color: #f92672"&gt;-&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;remote&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# Status cache. Default is plain, which eventually becomes huge and slow.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;status_backend&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;sqlite&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;le&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;type&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;de&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;cache.&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;(plain&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ou&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;sqlite)&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;[Repository&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;main&lt;/span&gt;&lt;span style="color: #f92672"&gt;-&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;local]&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# Currently, offlineimap only supports maildir and IMAP for local repositories.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;type&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;Maildir&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;le&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;type&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;de&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;stockage&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;(Maildir&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;ou&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;IMAP)&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# Where should the mail be placed?&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;localfolders&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f92672"&gt;~/&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;Emails&lt;/span&gt;&lt;span style="color: #f92672"&gt;/&lt;/span&gt; &lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;le&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;dossier&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;dans&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;lequel&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;vous&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# voulez que vos emails apparaissent&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;[Repository&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;main&lt;/span&gt;&lt;span style="color: #f92672"&gt;-&lt;/span&gt;&lt;span style="color: #f8f8f2"&gt;remote]&lt;/span&gt;
&lt;span style="color: #75715e"&gt;# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;type&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #f8f8f2"&gt;IMAP&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;remotehost&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #75715e"&gt;//placeholderhost// # le serveur de votre messagerie&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;remoteuser&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #75715e"&gt;//placeholderusername// # votre nom d&amp;#39;utilisateur&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;remotepass&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #75715e"&gt;//placeholderpassword// # votre mot de passe&lt;/span&gt;
&lt;span style="color: #f8f8f2"&gt;cert_fingerprint&lt;/span&gt; &lt;span style="color: #f92672"&gt;=&lt;/span&gt; &lt;span style="color: #75715e"&gt;//placeholdercert// # le certificat du serveur (IMAPS only)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ça devrait être assez simple a lire, j&amp;rsquo;ai tout bien commenté :3&lt;br /&gt;
Puis ma config mutt :&lt;/p&gt;
&lt;div class="codehilite" style="background: #272822"&gt;&lt;pre style="line-height: 125%"&gt;&lt;span style="color: #75715e"&gt;## Mutt MUA configuration file&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## This file should not be edited without creating a copy&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## File Created and edited by Wxcafe (Clément Hertling)&lt;/span&gt;
&lt;span style="color: #75715e"&gt;## Published under CC-BY-SA&lt;/span&gt;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; General config for reading (fetched via offlineimap)
set mbox_type = Maildir
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; type de boite mail (voir dans offlineimap, mailbox par defaut)
set folder = ~/Email/
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; dossier root mailbox/imap
set spoolfile = +INBOX
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; dossier d&amp;#39;inbox
set mbox = +&amp;#39;All Mail&amp;#39;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; dossier ou archiver les emails
set copy = yes
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; yes pour copier les messages dans les differents dossier, no pour...
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; enfin voila quoi.
set header_cache = /.hcache/
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; dossier ou sont stockés les headers (pour le cache)
set record = +Sent
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; dossier dans lequel sont stockés les messages envoyés
set postponed = +Drafts
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; dossier dans lequel sont stockés les brouillons
mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; liste des dossiers qui vont apparaitre dans la colonne de gauche
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; General config for sending (using Mutt&amp;#39;s native support)
set smtp_pass = &amp;#39;password_placeholder&amp;#39;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; votre mot de passe
set smtp_url = &amp;quot;smtp://username@whatev.org:465/&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; l&amp;#39;url ou envoyer les emails
set send_charset = &amp;quot;utf-8&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; UTF8, NE PAS CHANGER
set signature = &amp;quot;.sign&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; vous pouvez mettre votre signature dans .sign
set sig_on_top = yes
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; il est d&amp;#39;usge de mettre no ici. Cependant, je trouve ca plus lisible
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; comme ca.
set ssl_verify_host = no
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; mettez yes ici si votre serveur a un certificat configuré correctement
set hostname = &amp;quot;wxcafe.net&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; mettez l&amp;#39;adresse de votre serveur ici
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; Misc settings
auto_view text/html
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; la façon de voir les emails par défaut.
set date_format = &amp;quot;%y-%m-%d %T&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; format de date d&amp;#39;envoi/de reception.
set index_format = &amp;quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; format de l&amp;#39;index (la présentation de l&amp;#39;interface)
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; voir http://www.mutt.org/doc/manual/manual-6.html&lt;span style="color: #75715e"&gt;#&lt;/span&gt;&lt;span style="color: #a6e22e"&gt;index_format&lt;/span&gt;
set sort_alias = alias
set reverse_alias = yes
set alias_file = &amp;quot;&lt;span style="color: #f8f8f2"&gt;$HOME&lt;/span&gt;/.mutt/aliases&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; liste des alias noms/email. a créer et remplir vous même.
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; format : &amp;quot;alias short_name long_email_adress&amp;quot;
source &lt;span style="color: #f8f8f2"&gt;$alias_file&lt;/span&gt;
set beep = no
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; ne pas biper. CE SON ME TUE T.T
set tilde = yes
set sleep_time = 0
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; ?
set sidebar_visible = yes
set sidebar_width = 15
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; parametres de la barre coté gauche
set realname = &amp;quot;Clément Hertling (Wxcafé)&amp;quot;
set from = &amp;quot;wxcafe@wxcafe.net&amp;quot;
set use_from = yes
set certificate_file = &amp;quot;&lt;span style="color: #f8f8f2"&gt;$HOME&lt;/span&gt;/.mutt/cacert&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; parametres d&amp;#39;envoi. mettez vos propres infos a la place des miennes...
set edit_headers = yes
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; vous permet de vois les headers des mails. j&amp;#39;aime, donc je laisse.
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; Macros
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; le titre dit tout. index veut dire que la macro est active dans les menus,
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; pager qu&amp;#39;elle l&amp;#39;est dans la visionneuse, les deux qu&amp;#39;elle l&amp;#39;est dans les
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; deux
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; \C represente la touche Control
bind index,pager \Cp sidebar-prev
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; Control+p -&amp;gt; remonter d&amp;#39;un dossier dans la sidebar
bind index,pager \Cn sidebar-next
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; Control+n -&amp;gt; descendre d&amp;#39;un dossier dans la sidebar
bind index,pager \Co sidebar-open
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; Control+o -&amp;gt; ouvrir le dossier selectionné dans la sidebar
macro index,pager d &amp;quot;=Trash&amp;quot; &amp;quot;Trash&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; d supprime le message en cours
bind pager previous-line
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; permet de monter d&amp;#39;une ligne avec la touche up, au lieu de changer de message.
bind pager next-line
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; permet de descendre d&amp;#39;une ligne avec la touche down, au lieu de changer de
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; message
bind pager j next-line
bind pager k previous-line
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; raccourcis vim
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; PGP signing commands
set pgp_decode_command=&amp;quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&amp;quot;
set pgp_verify_command=&amp;quot;gpg --no-verbose --batch --output - --verify %s %f&amp;quot;
set pgp_decrypt_command=&amp;quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&amp;quot;
set pgp_sign_command=&amp;quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&amp;quot;
set pgp_clearsign_command=&amp;quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&amp;quot;
set pgp_encrypt_only_command=&amp;quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&amp;quot;
set pgp_encrypt_sign_command=&amp;quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&amp;quot;
set pgp_import_command=&amp;quot;gpg --no-verbose --import -v %f&amp;quot;
set pgp_export_command=&amp;quot;gpg --no-verbose --export --armor %r&amp;quot;
set pgp_verify_key_command=&amp;quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&amp;quot;
set pgp_list_pubring_command=&amp;quot;gpg --no-verbose --batch --with-colons --list-keys %r&amp;quot;
set pgp_list_secring_command=&amp;quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&amp;quot;
set pgp_autosign=yes
set pgp_sign_as=0x********
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; remplacez 0x******** par votre identifiant PGP!!!!!
set pgp_replyencrypt=no
set pgp_timeout=7200
set pgp_good_sign=&amp;quot;^gpg: Good signature from&amp;quot;
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; PGP signing options
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; Palette for use with the Linux console. Black background.
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; Schéma de couleur Rouge et Noir. Commentez si vous voulez le
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; défaut noir et blanc.
&lt;span style="color: #960050; background-color: #1e0010"&gt;#&lt;/span&gt; d&amp;#39;autres schémas sont trouvables sur google et autre.
color hdrdefault red black
color quoted brightblack black
color signature brightblack black
color attachment red black
color message brightwhite black
color error brightred black
color indicator black red
color status white black
color tree white black
color normal white black
color markers red black
color search white black
color tilde brightmagenta black
color index red black ~F
color index red black &amp;quot;~N|~O&amp;quot;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Voila, pour plus d&amp;rsquo;informations vous pouvez aller voir le manuel de mutt
@ &lt;a href="http://www.mutt.org/doc/manual/"&gt;http://www.mutt.org/doc/manual/&lt;/a&gt;&lt;br /&gt;
J&amp;rsquo;espère que cette configuration &amp;ldquo;toute faite&amp;rdquo; vous aidera a commencer
a utiliser mutt. Il est tout de fois important de se souvenir
qu&amp;rsquo;utiliser une configuration toute faire n&amp;rsquo;aide pas a comprendre un
programme ou un système, et que cette façon de faire devrait être
réservée a l&amp;rsquo;introduction ou a des situations ou il est absolument
nécessaire d&amp;rsquo;avoir rapidement une configuration fonctionnelle (c&amp;rsquo;est a
dire, dans le cas d&amp;rsquo;un client email, euh&amp;hellip; jamais?). Je vous invite
donc a relire les annotations dont sont parsemés les fichiers de
configuration en question, et surtout a lire le manuel, a chercher sur
&lt;del&gt;Bing&lt;/del&gt; &lt;del&gt;Google&lt;/del&gt; &lt;del&gt;Yahoo&lt;/del&gt; Seeks, et globalement
a tenter de comprendre les configurations en question et a les améliorer!&lt;/p&gt;</summary></entry></feed>