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