nuc-hdmi-cec, and fixes to theme
This commit is contained in:
parent
76b30a0078
commit
c85df31f74
Binary file not shown.
BIN
cache/ArticlesGenerator-Readers
vendored
BIN
cache/ArticlesGenerator-Readers
vendored
Binary file not shown.
BIN
cache/PagesGenerator-Readers
vendored
BIN
cache/PagesGenerator-Readers
vendored
Binary file not shown.
@ -1,262 +0,0 @@
|
||||
Title: Archlinux made simple
|
||||
Date: 2012-10-05 14:48
|
||||
Author: Wxcafe
|
||||
Category: OSes
|
||||
Slug: archlinux-made-simple
|
||||
|
||||
Archlinux est réputée être une distribution Linux très complexe a
|
||||
installer et a maintenir.
|
||||
|
||||
Je vais tenter ici de vous convaincre que ce n'est pas le cas, et
|
||||
qu'elle peut se monter très intéressante et très instructive a installer
|
||||
tout autant qu'a utiliser.
|
||||
|
||||
Il convient tout d'abord de rappeler a quels principes obéit Arch:
|
||||
|
||||
1. Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des
|
||||
programmes simples et utilisables par tous. Avec comme base de
|
||||
simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu
|
||||
de bonne volonté, la configuration n'est pas si compliquée!
|
||||
|
||||
2. La philosophie UNIX : chaque programme est prévu pour ne remplir
|
||||
qu'une seule tâche. Bien entendu, cela ne concerne que les programmes
|
||||
conçus pour s’insérer dans la philosophie UNIX, et les installations de
|
||||
dépendances avec le gestionnaire de paquet d'Arch fonctionnent
|
||||
superbement bien.
|
||||
|
||||
De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle
|
||||
pacman, et les commandes de base sont :
|
||||
|
||||
- recherche d'un paquet :
|
||||
|
||||
pacman -Ss paquet
|
||||
|
||||
- installation d'un paquet :
|
||||
|
||||
sudo pacman -S paquet
|
||||
|
||||
- désinstallation d'un paquet :
|
||||
|
||||
sudo pacman -R paquet
|
||||
|
||||
- mise a jour de tous les paquets installés :
|
||||
|
||||
sudo pacman -Syu paquet
|
||||
|
||||
Archlinux est une distribution dite "rolling release", ce qui signifie
|
||||
qu'il n'y a pas de version a proprement dites, et que les paquets se
|
||||
mettent a jour en permanence, sans jamais changer la "version" d'Arch.
|
||||
Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site,
|
||||
puisqu'une version plus ancienne n'aurait aucun sens.
|
||||
|
||||
Arch n'offre pas d'interface graphique par défaut : après avoir installé
|
||||
le système, vous n'aurez qu'une invite de commande. Heureusement, je
|
||||
vais ici vous guider a travers l'installation d'une interface graphique
|
||||
(mate, le fork de gnome 2)
|
||||
|
||||
L'installation d'Arch se fait par le réseau, veillez a avoir une
|
||||
connection WiFi ou filaire a proximité avant de suivre ce guide.
|
||||
|
||||
Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous
|
||||
systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce
|
||||
dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.
|
||||
|
||||
Bon, passons a l'explication de l'installation proprement dite :
|
||||
|
||||
Tout d'abord, téléchargeons l'iso d'arch la plus récente :
|
||||
|
||||
wget http://mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso
|
||||
|
||||
Ensuite, gravons cette image sur un disque USB :
|
||||
|
||||
dd if=archlinux-2012.09.07-dual.iso of=/dev/sdX
|
||||
|
||||
Après reboot de la machine sur l'iso en question et choix de
|
||||
l'architecture, nous sommes accueillis par un shell root.
|
||||
|
||||
La première chose a faire est de paramétrer le clavier :
|
||||
|
||||
loadkeys fr
|
||||
|
||||
Puis nous pouvons passer a l'installation proprement dite.
|
||||
Partitionnement :
|
||||
|
||||
cfdisk # cfdisk est suffisamment clair pour ne pas nécessiter d'explications
|
||||
|
||||
formatage des partitions :
|
||||
|
||||
mkfs.ext4 /dev/sda1 # partition root
|
||||
|
||||
pacman -Syu btrfs-progs && mkfs.btrfs /dev/sda2 # partition home
|
||||
|
||||
mkswap /dev/sda3 && swapon /dev/sda3 # partition de swap
|
||||
|
||||
Montons les partitions nouvellement créées, puis installons le système :
|
||||
|
||||
mount /dev/sda1 /mnt
|
||||
|
||||
mkdir /mnt/home && mount /dev/sda2 /mnt/home
|
||||
|
||||
dhclient eth0 # si vous utilisez une connection filaire, sinon voire http://wiki.archlinux.fr/Wifi#Configuration
|
||||
|
||||
pacstrap /mnt base base-devel
|
||||
|
||||
genfstab -p /mnt > /mnt/etc/fstab
|
||||
|
||||
Allons prendre un café le temps que ça charge, puis installons les
|
||||
quelques paquets nécessaires a notre installation et au premier
|
||||
démarrage:
|
||||
|
||||
pacstrap /mnt syslinux btrfs-progs wireless_tools dhclient
|
||||
|
||||
Maintenant, passons sur notre install toute fraîche d'Arch :
|
||||
|
||||
arch-chroot /mnt bash
|
||||
|
||||
configurons les bases :
|
||||
|
||||
echo HOSTNAME > /etc/hostname
|
||||
|
||||
ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime
|
||||
|
||||
date MMJJhhmmAAAA
|
||||
|
||||
hwclock --systohc
|
||||
|
||||
vim /etc/locale.gen # Décommentez les lignes correspondant au français : fr_FR.UTF-8 et fr_FR.ISO-8859-1
|
||||
|
||||
echo 'LANG="fr_FR.UTF-8"' > /etc/locale.conf
|
||||
|
||||
locale-gen
|
||||
|
||||
mkinitcpio -p linux
|
||||
|
||||
Enfin, vérifions que syslinux est correctement configuré :
|
||||
|
||||
vim /boot/syslinux/syslinux.cfg # il devrait y avoir "append root=/dev/sda1"
|
||||
|
||||
Si tout est correct, installons syslinux, et paramétrons un mot de passe
|
||||
root :
|
||||
|
||||
syslinux-install_update /dev/sda -mia
|
||||
|
||||
passwd root
|
||||
|
||||
Et voila, l'installation est terminée! Plus qu'a quitter la session et a
|
||||
redémarrer l'ordinateur!
|
||||
|
||||
exit
|
||||
umount /mnt/home
|
||||
umount /mnt
|
||||
reboot
|
||||
|
||||
Fini!
|
||||
|
||||
Prenons une petite pause. La partie suivante de ce tutoriel consister en
|
||||
un paramétrage des principaux services nécessaires a l'utilisation d'un
|
||||
OS, disons, moyen :
|
||||
|
||||
- Installation de MATE, le gestionnaire de bureau (voir
|
||||
[http://mate-desktop.org/][])
|
||||
|
||||
- Installation de sudo et de networkmanager pour faire fonctionner les
|
||||
composants essentiels du système sans avoir a tout activer a la main a
|
||||
chaque démarrage
|
||||
|
||||
- Installation de SLiM comme gestionnaire de login graphique, pour
|
||||
présenter une interface plus accueillante que la console, et
|
||||
configuration de celui-ci
|
||||
|
||||
- Installation des principaux logiciels utiles non inclus dans mate ni
|
||||
base (yaourt, chromium, thunderbird, etc...).
|
||||
|
||||
Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un
|
||||
gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter
|
||||
ici.
|
||||
|
||||
Bon, reprenons.
|
||||
|
||||
Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de
|
||||
passe paramétré plus haut pour le root, puis retapez la commande
|
||||
utilisée plus tôt pour vous connecter a internet.
|
||||
|
||||
Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis
|
||||
d'effectuer l'action en question :
|
||||
|
||||
vim /etc/pacman.conf
|
||||
|
||||
Ici, ajoutez les lignes suivantes :
|
||||
|
||||
[mate]
|
||||
Server = http://repo.mate-desktop.org/archlinux/$arch
|
||||
|
||||
Installons maintenant les paquets :
|
||||
|
||||
pacman -Syu mate mate-extras dbus dbus-core alsa networkmanager sudo
|
||||
|
||||
Ajoutons un compte utilisateur pour utiliser les composants du système
|
||||
sans tout crasher a chaque fois :
|
||||
|
||||
useradd -g users -G wheel,audio,optical,lp,scanner,log,power,floppy,storage,games,video -m -s /bin/bash *votrenom*
|
||||
passwd *votrenom*
|
||||
su *votrenom*
|
||||
|
||||
Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org
|
||||
ce que l'on veut utiliser :
|
||||
|
||||
echo "exec ck-launch-session mate-session" > ~/.xinitrc
|
||||
|
||||
Profitons en pour ajouter les démons système au lancement :
|
||||
|
||||
vim /etc/rc.conf
|
||||
|
||||
Ajoutez donc `dbus, alsa. hwclock` et `networkmanager` dans la section
|
||||
DAEMONS (entre les parenthèses, après crond normalement)
|
||||
|
||||
DAEMONS=(syslog-ng network crond dbus alsa hwclock networkmanager)
|
||||
|
||||
Pour éviter un reboot, il est ici possible de faire un
|
||||
|
||||
su
|
||||
|
||||
Puis un
|
||||
|
||||
/etc/rc.d/dbus start && /etc/rc.d/alsa start && /etc/rc.d/networkmanager start
|
||||
|
||||
Sinon, il est possible de juste redémarrer.
|
||||
Une fois cela fait, profitez de ce moment pour vous autoriser vous même
|
||||
a utiliser sudo. Loggez vous en root, et :
|
||||
|
||||
vim /etc/sudoers
|
||||
|
||||
Décommentez la ligne qui commence par \# %wheel ALL=(ALL)
|
||||
Sauvegardez le fichier, puis, après un `su *votrenom*`, tentez de faire
|
||||
un sudo ls /
|
||||
Normalement, vous devriez avoir un listing du dossier /
|
||||
Bon, maintenant, pourquoi ne pas tenter de lancer MATE?
|
||||
C'est simple comme bonjour :
|
||||
|
||||
startx
|
||||
|
||||
Et PAF! Voila un MATE desktop flambant neuf a configurer!
|
||||
Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous,
|
||||
puis installez SLiM (`sudo pacman -Syu slim`).
|
||||
Configurons le:
|
||||
|
||||
echo "exec dbus-launch mate-session" > ~/.xinitrc && vim /etc/slim.conf
|
||||
|
||||
Éditez la ligne
|
||||
"`sessions xfce4,icewm-session,wmaker,blackbox`" de facon a
|
||||
ce qu'elle ressemble a "`sessions mate-session`"
|
||||
Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.
|
||||
Normalement, tout devrait fonctionner!
|
||||
Ah oui, et pour installer thunderbird, firefox, chromium, etc...
|
||||
|
||||
sudo pacman -Syu chromium thunderbird xchat firefox rhythmbox pidgin transmission-gtk vlc
|
||||
|
||||
Voila! Et comme dirait [@Spartition][], c'est sale, mais qu'est-ce que c'est
|
||||
bon!
|
||||
A plus~
|
||||
|
||||
[@Spartition]: https://twitter.com/spartition
|
||||
[http://mate-desktop.org/]: http://mate-desktop.org/
|
||||
@ -1,36 +0,0 @@
|
||||
Title: Débuts, présentation, etc...
|
||||
Date: 2012-08-18 20:27
|
||||
Author: Wxcafe
|
||||
Category: Notes
|
||||
Slug: debuts-presentation-etc
|
||||
|
||||
Bonjour!
|
||||
|
||||
Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur
|
||||
Twitter, mais aussi sur IRC (Je traîne pas mal sur
|
||||
irc.freenode.net/\#\#nolife et \#debian-fr)
|
||||
|
||||
J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je
|
||||
fais partie de ce genre de personne qui sont capables d'investir tout
|
||||
leur temps et leur énergie a s’intéresser a un sujet en particulier, et
|
||||
qui ne peuvent pas vivre sans leurs passions, avec une petite différence
|
||||
cependant, qui est que je m’intéresse a plusieurs choses :
|
||||
l'informatique, qui est un champ tellement large qu'on peut passer une
|
||||
vie a apprendre des choses dessus, et plus particulièrement à
|
||||
l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres
|
||||
{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les
|
||||
trolls seront a partir de maintenant indiqués avec le tag [tr]] du
|
||||
libre, je préfère utiliser de l'open-source si c'est possible},
|
||||
programmation en C, python et java, etc...) , mais aussi a
|
||||
l’électronique.
|
||||
|
||||
Dans un tout autre registre, je m’intéresse aussi
|
||||
beaucoup aux différents aspects du féminisme et des égalités sexuelles
|
||||
(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) ,
|
||||
et a la culture dite "geek" en général.
|
||||
|
||||
Je tenterai de poster ici le plus souvent possible, mais j'ai de gros
|
||||
problèmes en terme de régularité de post, donc ne vous inquiétez pas si
|
||||
vous ne voyez rien pendant deux semaines.
|
||||
|
||||
Merci beaucoup de votre attention, et a bientôt!
|
||||
@ -102,6 +102,7 @@ serveur, et pas sur home., car elles sont sensiblement les mêmes. La différenc
|
||||
principale étant que l'un héberge en slave les masters de l'autre.
|
||||
Le fichier `named.conf.local` sur wxcafe.net contient donc
|
||||
|
||||
::bash
|
||||
zone "wxcafe.net" {
|
||||
type master;
|
||||
file "/etc/bind/master/wxcafe.net";
|
||||
|
||||
89
content/docker-ebooks.md
Normal file
89
content/docker-ebooks.md
Normal file
@ -0,0 +1,89 @@
|
||||
Title: Docker et les ebooks sur Twitter
|
||||
Date: 2015-02-28 14:11
|
||||
Author: Wxcafe
|
||||
Category: Note
|
||||
Slug: docker-et-les-ebooks-sur-twitter
|
||||
|
||||
Vous avez peut être déjà entendu parler de [Docker](https://www.docker.com/). Si
|
||||
ce n'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'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 [Jails](https://www.freebsd.org/doc/en/books/handbook/jails.html),
|
||||
mais n'est devenu possible sous linux que récemment grâce aux [cgroups](https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt),
|
||||
qui permettent justement de séparer des groupes de processus. Le principe de
|
||||
Docker est donc d'avoir une machine hôte sur laquelle s'exécutent plusieurs
|
||||
conteneurs Dockers, chacun séparé des autres et de l'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'avec de la virtualisation classique. En effet,
|
||||
ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la
|
||||
capacité de remonter jusqu'à l'hôte, puisqu'il n'est pas vraiment séparé des
|
||||
invités.
|
||||
|
||||
Quoi qu'il en soit, Docker permet donc de virtualiser a moindre coût des
|
||||
systèmes GNU/Linux. "Mais pourquoi utiliser Docker, dans ce cas", vous
|
||||
demandez-vous peut être, "puisque Xen peut faire la même chose, et plus
|
||||
(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?". Et bien
|
||||
c'est très simple : Docker apporte la simplicité de déploiement d'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 [Docker Hub](https://hub.docker.com) permet aussi de récupérer
|
||||
rapidement et facilement un grand nombre d'images déjà configurées.
|
||||
|
||||
Maintenant que nous avons expliqué rapidement ce qu'était Docker, voyons le
|
||||
rapport avec les ebooks et Twitter.
|
||||
|
||||
Les comptes dits "ebooks" (le nom vient a l'origine de [horse_ebooks](https://twitter.com/horse_ebooks),
|
||||
voir [ici](https://en.wikipedia.org/wiki/Horse_ebooks) pourquoi) sont des bots
|
||||
twitter utilisant des [Chaines de Markov](https://en.wikipedia.org/wiki/Markov_chain),
|
||||
avec les tweets d'un utilisateur "source" comme corpus, pour produire des tweets
|
||||
ressemblant a ceux de l'utilisateur source. Nous allons voir maintenant comment
|
||||
en installer un.
|
||||
|
||||
C'est, comme disent certaines personnes, "fun".
|
||||
|
||||
Il existe de nombreuses librairies écrites pour créer ce genre de bots,
|
||||
cependant dans ce cas nous nous concentrerons sur
|
||||
[celle-ci](https://github.com/mispy/twitter_ebooks), qui est une lib ruby créée
|
||||
par [@m1sp](https://twitter.com/m1sp), qui gère pour nous a la fois l'API
|
||||
twitter et la génération des messages.
|
||||
|
||||
Cependant, cela n'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'isoler les bots, et les
|
||||
containers dockers permettent de les déployer sur n'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'ai créé [un
|
||||
repo github](https://github.com/wxcafe/ebooks_example) qui contient toutes les
|
||||
pièces nécessaires pour mettre cela en place : le bot en lui même, les deux
|
||||
Dockerfiles, etc.
|
||||
|
||||
Le fonctionnement du bot est
|
||||
simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de
|
||||
l'utilisateur source avec `ebooks archive <username> <filename>` (c'est du json)
|
||||
, puis vous convertissez le json en fichier utilisable par le bot : `ebooks
|
||||
consume <filename>`. Cela fait, démarrer le bot revient a lancer le container :
|
||||
`docker run -d <container name>` Pour plus d'informations, allez voir [la
|
||||
documentation Docker](https://docs.docker.com/articles/basics/)
|
||||
|
||||
Bien entendu, dans l'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 :
|
||||
|
||||
00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json >> /var/log/ebooks/update.log 2>&1
|
||||
00 05 * * * cd /usr/local/ebooks/main/ && /usr/local/bin/ebooks consume corpus/username.json >> /var/log/ebooks/update.log 2>&1
|
||||
00 10 * * * docker rm -f bots >/dev/null 2>&1
|
||||
00 15 * * * docker rmi bots > /dev/null 2>&1
|
||||
00 20 * * * cd /usr/local/ebooks/main/ && docker build --rm -t bots . >> /var/log/ebooks/build.log 2>&1
|
||||
00 25 * * * docker run -d --name bots bots >> /var/log/ebooks/run.log 2>&1
|
||||
|
||||
Les 5 minutes entre chaque commande sont laissées pour empécher que deux
|
||||
commandes ne s'executent en même temps.
|
||||
|
||||
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'est qu'un exemple
|
||||
des possibilités de Docker : par exemple, on peut aussi faire tourner [des
|
||||
applications "usuelles"
|
||||
dedans](https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html),
|
||||
puisque l'overhead de Docker est minimal, et beaucoup d'autres applications
|
||||
existent.
|
||||
@ -1,84 +0,0 @@
|
||||
Title: GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère
|
||||
Date: 2012-08-22 20:33
|
||||
Author: Wxcafe
|
||||
Category: Teaching
|
||||
Slug: gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere
|
||||
|
||||
GNU/Linux est un vaste et extraordinaire territoire technologique, mais
|
||||
je ne vais pas m'attarder ici sur les aspects profondément techniques de
|
||||
ce territoire pour faire plutôt une sorte d'introduction a ce qu'est
|
||||
vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de
|
||||
connaissances en informatique.
|
||||
|
||||
GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un
|
||||
Système d'Exploitation. Un système d'exploitation est, pour simplifier,
|
||||
un ensemble d'outils informatiques qui vous permettent d'utiliser votre
|
||||
ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation
|
||||
de système d'exploitation (Operating System en anglais) est OS. Les 4
|
||||
principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et
|
||||
Solaris. Les trois derniers sont issus d'un autre système, plus ancien,
|
||||
nommé UNIX.
|
||||
|
||||
De ce fait, on pourrait penser que Linux remplace complètement Windows
|
||||
une fois installé, et comprend une interface graphique, et toutes sortes
|
||||
d'utilitaires permettant a l'utilisateur d'utiliser le système (sous
|
||||
Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer.
|
||||
Pour l'interface graphique, pensez a... Pensez que votre système affiche
|
||||
autre chose que des lignes de commande.) Or non, une fois installé,
|
||||
Linux en lui même ne vous afficherait aucune interface graphique, et
|
||||
s'il est effectivement livré avec des utilitaires, ils ne sont que des
|
||||
programmes en ligne de commande. Autant les utilisateurs avancés sauront
|
||||
s'en servir, et pourront argumenter que c'est plus efficace ou plus
|
||||
rapide, autant les utilisateurs basiques préfèrent une interface
|
||||
graphique. Alors comment en obtenir une?
|
||||
|
||||
Ici, il convient de faire une précision importante. Si il n'existe
|
||||
qu'une seule version de Windows, ou de Mac OS, il existe en fait
|
||||
plusieurs centaines de "versions" différentes de Linux. Appelées
|
||||
distributions, ces dernière sont développées par des groupes
|
||||
complètement séparés, et se basent sur le fait que Linux soit
|
||||
entièrement placé sous licence libre (ce qui leur permet de l'utiliser a
|
||||
leur guise, a condition que leur travail soit lui aussi placé sous
|
||||
licence libre). De ce fait, de nombreuses distributions existent et se
|
||||
développent en parallèle. On peut ainsi citer [Debian][], qui est l'une
|
||||
des distributions les plus importantes, ou encore [Ubuntu][], qui est
|
||||
l'une des plus connues et des plus simples a utiliser.
|
||||
|
||||
Ainsi, ces distributions intègrent une interface graphique. Cependant,
|
||||
grâce a la liberté dont bénéficient les développeurs sous Linux, il
|
||||
existe de nombreuses interfaces graphiques différentes : [Unity][], la
|
||||
nouvelle interface d'Ubuntu; [GNOME][] , une interface qui vise a la
|
||||
simplicité; ou encore [KDE][], une interface utilisateur ressemblant a
|
||||
Windows 7.
|
||||
|
||||
Ainsi, le choix astronomique de distributions Linux a bien un sens :
|
||||
chacune d'entre elle intègre des outils différents. Par exemple, Debian
|
||||
intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend
|
||||
particulièrement stable. Ubuntu intègre Unity, ce qui en fait une
|
||||
distribution particulièrement intuitive. Linux Mint intègre Cinnamon,
|
||||
qui est une version dérivée de GNOME 3, ce qui permet encore une autre
|
||||
expérience. Et Arch Linux n'intègre pas d'interface graphique du tout,
|
||||
ce qui permet a l'utilisateur de choisir entre les multiples interfaces
|
||||
existantes.
|
||||
|
||||
Ce qu'il est important de retenir de cela, c'est que Linux est un OS
|
||||
complètement libre, ce qui signifie que n'importe qui peut modifier et
|
||||
utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi,
|
||||
Linux est un OS qui est véritablement créé par des passionnés, pour tous
|
||||
et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué
|
||||
a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus.
|
||||
Cependant, Linux donne la possibilité a l'utilisateur de le rendre
|
||||
affreusement complexe, mais aussi de le rendre adapté a ses besoins,
|
||||
quels que soient ceux ci. Et c'est la que réside l'incroyable puissance
|
||||
de ce Système d'Exploitation. Il est extraordinairement adaptable.
|
||||
|
||||
N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas
|
||||
technophiles. Ils pourraient adorer, et peut être même le devenir :)
|
||||
|
||||
A bientôt!
|
||||
|
||||
[Debian]: http://debian.org
|
||||
[Ubuntu]: http://ubuntu.com
|
||||
[Unity]: unity.ubuntu.com
|
||||
[GNOME]: gnome.org
|
||||
[KDE]: http://kde.org/
|
||||
126
content/hori-vs-pdp.md
Normal file
126
content/hori-vs-pdp.md
Normal file
@ -0,0 +1,126 @@
|
||||
Title: Manettes : Hori vs. PDP
|
||||
Date: 2015-04-19 21:59
|
||||
Author: Wxcafe
|
||||
Category: Vidya Games
|
||||
Slug: hori-vs-pdp
|
||||
|
||||
Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus
|
||||
compte de quelques petits trucs : tout d'abord, Smash est bien plus drôle
|
||||
a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de "choses"
|
||||
: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro
|
||||
Controllers pour Wii et Wii U, et d'autres. Vous aurez aussi remarqué que le
|
||||
Gamepad n'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.
|
||||
|
||||
|
||||
Cela étant, si comme moi vous avez, euh, "ouvert" 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 [l'adaptateur GC pour Wii
|
||||
U](http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI)
|
||||
a votre console.
|
||||
|
||||
Heureusement pour vous, Nintendo a pensé a une solution (et comme d'habitude
|
||||
avec Nintendo, c'est une solution a moitié satisfaisante...) : les classic
|
||||
controller, mais en forme de manettes Gamecube.
|
||||
|
||||
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'argent, en
|
||||
faisant des manettes Gamecube qui se connectent a des Wiimotes.
|
||||
|
||||
Nous allons ici voir deux modèles, un de chacune des boites en question
|
||||
: [PDP](http://www.pdp.com/) et [Hori](http://stores.horiusa.com/).
|
||||
|
||||
__*Toutes les photos présentes dans cet article sont disponibles en plus grande
|
||||
taille en cliquant dessus*__
|
||||
|
||||
Commençons par le modèle de chez Hori :
|
||||
|
||||
[](//pub.wxcafe.net/img/Hori_face_fd.jpg)
|
||||
|
||||
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.
|
||||
|
||||
[](//pub.wxcafe.net/img/Hori_dos_fd.jpg)
|
||||
|
||||
Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne
|
||||
sont en réalité que des boutons : c'est logique puisque c'est comme ça que les
|
||||
classic controller sont faits, mais c'est décevant tout de même
|
||||
|
||||
[](//pub.wxcafe.net/img/Hori_CM_fd.jpg)
|
||||
|
||||
On peut voir ici que la qualité de l'assemblage n'est pas extraordinaire, et on
|
||||
remarque une soudure mal faite a l'emplacement du stick gauche.
|
||||
|
||||
[](//pub.wxcafe.net/img/Hori_Cstick_fd.jpg)
|
||||
|
||||
Le stick c n'est pas fixé au reste de la manette.
|
||||
J'ai essayé de démonter plus avant les différentes parties de la manette, mais
|
||||
les câbles n'avaient pas l'air de très bonne qualité, et j'ai préféré abandonner
|
||||
l'idée plutôt que de casser la manette.
|
||||
|
||||
[](//pub.wxcafe.net/img/Hori_coque_fd.jpg)
|
||||
|
||||
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'une Wiimote entière la dedans...
|
||||
|
||||
<hr>
|
||||
|
||||
Passons maintenant a la manette PDP.
|
||||
|
||||
[](//pub.wxcafe.net/img/PDP_face_fd.jpg)
|
||||
|
||||
Au premier coup d'œ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'est un problème de goût).
|
||||
|
||||
[](//pub.wxcafe.net/img/PDP_dos_fd.jpg)
|
||||
|
||||
Les gâchettes sont des vraies gâchettes! C'est impossible normalement, mais PDP
|
||||
a été très intelligent sur le coup, comme on va le voir juste après.
|
||||
|
||||
[](//pub.wxcafe.net/img/PDP_CM_fd.jpg)
|
||||
|
||||
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...
|
||||
|
||||
[](//pub.wxcafe.net/img/PDP_CF_fd.jpg)
|
||||
|
||||
Vous l'avez deviné, ces deux "cartes filles" servent en réalité de connecteurs
|
||||
aux boutons situés sur les gâchettes, qui sont de "vraies" gâchettes en cela
|
||||
qu'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.
|
||||
|
||||
Quelques photos des gâchettes en question :
|
||||
|
||||
[](//pub.wxcafe.net/img/PDP_G1_fd.jpg)
|
||||
|
||||
|
||||
[](//pub.wxcafe.net/img/PDP_G2_fd.jpg)
|
||||
|
||||
|
||||
[](//pub.wxcafe.net/img/PDP_G3_fd.jpg)
|
||||
|
||||
|
||||
[](//pub.wxcafe.net/img/PDP_G4_fd.jpg)
|
||||
|
||||
|
||||
---
|
||||
|
||||
Vous l'aurez compris, je préfère la version PDP de ces "Fight Pad", 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
|
||||
__totalement__ identique a celle des manettes Gamecube, cependant, la version
|
||||
Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.
|
||||
|
||||
@ -1,158 +0,0 @@
|
||||
Title: Introduction a bash en tant que language de programmation.
|
||||
Date: 2012-09-08 18:15
|
||||
Author: Wxcafe
|
||||
Category: Programmation
|
||||
Slug: introduction-a-bash-en-tant-que-language-de-programmation
|
||||
|
||||
L’interpréteur de commandes bash (Bourne Again SHell)
|
||||
est possiblement le shell le plus connu, notamment grâce a son
|
||||
intégration en tant que shell par défaut dans les distributions Linux
|
||||
les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva -
|
||||
Mageia, etc...).
|
||||
|
||||
Cependant, il n'est souvent connu qu'en tant qu’interpréteur de
|
||||
commande. Alors qu'en réalité, le bash est un langage de programmation
|
||||
(presque) complet! Ainsi, il intègre les structures de contrôle
|
||||
habituelles ( pour mémoire, les structures de contrôle comprennent les
|
||||
conditions (les ifs), les boucles (les while), et les choix (les case),
|
||||
entre autres.), et est donc ce que l'on pourrait appeler un langage de
|
||||
script, interprété, de la même façon que python, a la difference près
|
||||
qu'il contient un prompt (un système d'entrée de commande interactif)
|
||||
bien plus complet et développé que python.
|
||||
|
||||
Cependant, les programmes en bash ne sont executables que dans un
|
||||
environnement de type UNIX, et donc pas sous Windows (cygwin
|
||||
(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous
|
||||
windows. Il faut malgré tout convenir que cet environnement est bien
|
||||
plus compliqué a manipuler, et globalement ne permet pas d'acceder a des
|
||||
portages de qualité satisfaisante.)
|
||||
|
||||
Ainsi, il est possible de créer des fichiers .sh, contenant des
|
||||
instructions bash mises a la suite (de la même façon qu'un script BATCH
|
||||
Windows .bat), et faisant appel autant aux commandes internes de bash,
|
||||
aussi bien que les commandes externes mises en place par les programmes
|
||||
installés sur le système, exactement comme dans une invite de commande.
|
||||
Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit
|
||||
panda roux directement dans la boite magique, tandis qu'un if
|
||||
[condition] suivi d'un then (quelque chose) lancera le fameux quelque
|
||||
chose suscité si la condition est vérifiée. Un peu comme en C, quoi.
|
||||
|
||||
De cette façon, et avec quelques informations et connaissances, il est
|
||||
facile de comprendre le fonctionnement de la programmation en bash.
|
||||
Quelques exemples commentés:
|
||||
|
||||
#!/bin/bash
|
||||
# La ligne du dessus est très importante, c'est elle qui dit a bash quel doit être
|
||||
# l'interpreteur des commandes écrites dans ce script. Ici, on dit a bash d'interpréter
|
||||
# lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire
|
||||
# executer du python, par exemple, en mettant #!/usr/bin/python a la place.
|
||||
echo "this is a test of bash as a simple script manager" # echo est une commande d'affichage de message.
|
||||
echo "what's your name, user?"
|
||||
read your_name # la commande read permet de demander a l'utilisateur de donner une
|
||||
# information, stockée dans la variable en paramètre.
|
||||
echo $your_name "is your name" # echo permet aussi d'afficher la valeur de variables.
|
||||
# Ici, on renvoie la variable remplie précédemment, suivie d'un message.
|
||||
exit # cet appel a exit n'est pas obligatoire, mais donne un aspect plus
|
||||
# propre au code. Il ne quittera pas la session de terminal, cependant.
|
||||
|
||||
Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite
|
||||
d'être clair quand aux capacités et a la simplicité du bash en tant que
|
||||
language de programmation. Alors en effet, nous n'avons ici absolument
|
||||
pas utilisé les capacités de bash en lui même, et n'avons fait que le
|
||||
renvoyer a des programmes externes (sauf read, il est vrai). Voyons
|
||||
maintenant la syntaxe de bash quand il s'agit d'utiliser les structures
|
||||
de contrôle:
|
||||
|
||||
#!/bin/bash
|
||||
echo "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?"
|
||||
read host_name
|
||||
if [ $host_name == $HOSTNAME ] ## voici la syntaxe du if. Attention a bien penser a mettre les espaces avant la première variable, et après la seconde. La variable $HOSTNAME ici utilisée est une variable présente par défaut sur le système.
|
||||
then echo "you told the truth!"
|
||||
fi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash.
|
||||
if [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes.
|
||||
then echo "you lied!"
|
||||
fi
|
||||
exit
|
||||
|
||||
Voila un petit programme permettant d'apprendre la syntaxe du if en
|
||||
bash. comme vous pouvez le voir, le language est plutôt lite, et la
|
||||
structure if n'est pas très difficile a prendre en main.
|
||||
|
||||
Passons maintenant au while:
|
||||
|
||||
#!/bin/bash
|
||||
echo "what is your name?"
|
||||
read name
|
||||
while [ 1 < 10 ] ## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.
|
||||
do echo "i love" $name
|
||||
done
|
||||
exit
|
||||
|
||||
Ce petit programme permet d'observer les bases de while (qui est la
|
||||
boucle de base en bash).
|
||||
|
||||
Le troisième opérateur de bash est case. Voyons:
|
||||
|
||||
#!/bin/bash
|
||||
echo "please enter a number between one and five"
|
||||
read number
|
||||
case $number in
|
||||
1)
|
||||
echo "the choosen number was one"
|
||||
;;
|
||||
2)
|
||||
echo "the choosen number was two"
|
||||
;;
|
||||
3)
|
||||
echo "the choosen number was three"
|
||||
;;
|
||||
4)
|
||||
echo "the choosen number was four"
|
||||
;;
|
||||
5)
|
||||
echo "the choosen number was five"
|
||||
;;
|
||||
*)
|
||||
echo "this number is not correct"
|
||||
;;
|
||||
esac
|
||||
exit
|
||||
|
||||
case est un opérateur plus complexe a utiliser a bon escient, et sert a
|
||||
faire des ifs multiples sans avoir a taper des dizaines de lignes de
|
||||
code.
|
||||
(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre
|
||||
que le code vérifie chacune des conditions : le 1) est validé si la
|
||||
valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc..
|
||||
le \*) désigne toutes les valeurs, et est donc validé si aucune autre
|
||||
valeur n'a précédemment acceptée.
|
||||
|
||||
Quelques notions manquent ici:
|
||||
- les nombres aléatoires sont générés par un appel a la variable
|
||||
\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a
|
||||
16 bits donc). il est possible de faire des invocations a des nombres
|
||||
aléatoires plus grands, mais les méthodes permettant de faire cela sont
|
||||
plus complexes, et je ne les aborderai donc pas ici.
|
||||
- comme vous avez pu le constater, les variables sont désignées en tant
|
||||
que telles par l'utilisation d'un symbole \$ au début de leur nom.
|
||||
Ainsi, echo number renverra "number", tandis que echo \$number renverra
|
||||
le résultat de la variable \$number.
|
||||
être utilisées dans un programme bash.
|
||||
- comme vous avez pu le constater, les commandes doivent tenir en
|
||||
théorie en une ligne. Cependant, le caractère \\ permet de retourner a
|
||||
la ligne en faisant considérer a bash qu'il s'agit de la même ligne.
|
||||
|
||||
Globalement, il faut admettre que bash n'a pas vocation a être un
|
||||
langage de programmation extrêmement développé. Sans framework
|
||||
graphique, avec peu de manières d'utiliser de grandes variables, ou
|
||||
encore une gestion de la mémoire risible, bash n'a rien d'un langage de
|
||||
développement professionnel.
|
||||
Cependant, le simple fait qu'il soit considéré comme un langage de
|
||||
programmation a part entière font de lui un langage de script d'une
|
||||
puissance incontestable, et sa simplicité et sa grande popularité font
|
||||
de lui un langage de choix pour apprendre la programmation simplement et
|
||||
sans trop se prendre la tête.
|
||||
|
||||
J'espère que cet article aura été utile a certain-e-s, et je vous
|
||||
souhaite bonne chance dans votre découverte de la programmation (n'allez
|
||||
pas voir ceux qui font de l'orienté objet, c'est des méchants :3)
|
||||
@ -1,177 +0,0 @@
|
||||
Title: La cryptographie avec PGP et principalement GnuPG
|
||||
Date: 2012-11-19 00:36
|
||||
Author: Wxcafe
|
||||
Category: Tutoriel
|
||||
Slug: la-cryptographie-avec-pgp-et-principalement-gnupg
|
||||
|
||||
PGP (pour [pretty good privacy][]) est un système de
|
||||
chiffrement asymétrique (pour plus d'information sur le chiffrement
|
||||
asymétrique, voir [ici][]) utilisant en général les algorithmes RSA
|
||||
et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a
|
||||
signer des emails. Le système de signature consiste a s'identifier en
|
||||
tant que la personne que l'on est, en certifiant de son identité, et
|
||||
repose sur un système dit de *Web of Trust*.
|
||||
|
||||
Ce concept de Web of Trust est simple: si je valide le code vous
|
||||
identifiant (votre clé), en certifiant que vous êtes qui vous êtes et
|
||||
que je vous connais, et que d'autres personnes m'ont déjà
|
||||
personnellement validé, les autres utilisateurs seront enclins a croire
|
||||
que vous êtes en effet la personne que vous prétendez être. Bien
|
||||
entendu, les utilisateurs validant trop de clés rapportées comme fausses
|
||||
voient la valeur de leurs signatures baissée, et toutes les clés signées
|
||||
par ces utilisateurs voient leur crédibilité baisser.
|
||||
Inversement, les "bons utilisateurs" voient la valeur de leurs
|
||||
signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont
|
||||
signées.
|
||||
|
||||
Ceci dit, un email peut être a la fois signé et chiffré, de façon a être
|
||||
sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit
|
||||
être, mais aussi que l'email n'a pas été modifié entre l'envoi et
|
||||
la réception (en effet, avec un chiffrement de type RSA/DSA, une
|
||||
modification du corps de l'email rend ce dernier illisible, la clé
|
||||
publique ne correspondant plus a la phrase de passe du message), ce qui
|
||||
offre bien évidemment des avantages non négligeables dans un
|
||||
environnement ou la protection des échanges est importante (soit a peu
|
||||
près partout sur internet, si vous tenez a votre vie privée. Pensez a
|
||||
[quitter Gmail][] aussi, par exemple).
|
||||
|
||||
Il est cependant a noter que les clés publiques sont généralement
|
||||
situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore
|
||||
subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des
|
||||
serveurs de clés publiques, craignant une compromission de ces serveurs.
|
||||
Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de
|
||||
secrets classés secret-défense par email), la protection offerte par les
|
||||
serveurs de clé publiques est suffisante)
|
||||
|
||||
L'une des implémentations les plus connues et utilisées de PGP est sans
|
||||
conteste GPG ([GNU Privacy Guard][]) , qui comme son nom l'indique fait
|
||||
partie du projet GNU, et qui (`<troll>` de façon surprenante pour un
|
||||
programme GNU`</troll>`) est extrêmement efficace et claire.
|
||||
|
||||
Après ces explications techniques, voici venue le
|
||||
moment intéressant/utile, a savoir l'application. Le chiffrement et la
|
||||
signature de mails doivent cependant attendre un petit peu, étant donné
|
||||
qu'il vous faut d'abord créer votre clé et la placer sur un serveur de
|
||||
clés publiques, de façon à ce que votre destinataire puisse vous
|
||||
identifier lorsqu'il recevra le mail, mais aussi a configurer votre
|
||||
client mail pour utiliser gpg (je baserai les explications de cet
|
||||
article sur Thunderbird, mais des explications efficaces sont trouvables
|
||||
facilement sur les interwebs).
|
||||
|
||||
Tout d'abord, générons une clé GPG :
|
||||
|
||||
gpg --gen-key
|
||||
|
||||
GPG va vous demander les méthodes de chiffrement que vous voulez
|
||||
utiliser, le plus sur est de laisser la valeur par défaut. La question
|
||||
suivante est de savoir quelle taille votre clé doit faire, il est
|
||||
préférable de choisir la taille la plus importante possible (4096). GPG
|
||||
veut ensuite savoir quand votre clé doit expirer. La méthode simple est
|
||||
bien évidemment de ne jamais la faire expirer, il est cependant plus
|
||||
intéressant dans une logique de sécurité de régler cette durée a six
|
||||
mois/un an.
|
||||
|
||||
Des informations personnelles vous sont ensuite demandées,
|
||||
concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte
|
||||
d'identité, si vous souhaitez utiliser votre véritable identité), votre
|
||||
adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus
|
||||
tard), et un mot de passe pour la clé (utilisez un mot de passe
|
||||
sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules,
|
||||
minuscules, caractères spéciaux et nombres (vous pouvez utiliser la
|
||||
commande `makepasswd`, qui génère automatiquement un mot de
|
||||
passe)
|
||||
|
||||
GPG va maintenant prendre un peu de temps pour générer le couple clé
|
||||
publique/clé privée, vous devriez profiter de ce temps pour effectuer
|
||||
des opérations autres sur votre ordinateur : taper des textes, lancer
|
||||
des films, écouter de la musique... De façon à augmenter les chances
|
||||
d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base
|
||||
sur la RAM pour obtenir des bits au hasard)
|
||||
|
||||
Une fois cela fini, vous obtenez un couple clé publique/clé privée, que
|
||||
vous ne pouvez pas visualiser entièrement pour l'instant. Il est
|
||||
cependant possible (et recommandé) de les exporter pour les sauvegarder
|
||||
via une commande:
|
||||
|
||||
gpg --armor --export --output=pubkey.gpg
|
||||
|
||||
pour la clé publique, et
|
||||
|
||||
gpg --armor --export-secret-keys --output=seckey.gpg
|
||||
|
||||
pour la clé privée. Il est possible et même souhaitable de copier ces
|
||||
clés sur une clé USB, une carte SD, ou un autre support de stockage
|
||||
résistant, de façon a avoir une solution de sauvegarde, au cas ou vous
|
||||
perdiez ces clés sur ce PC.
|
||||
|
||||
Cela fait, listons les informations sur votre clé publique :
|
||||
|
||||
$ gpg --list-keys --fingerprint
|
||||
pub 4096R/27D81AC8 2012-11-17
|
||||
Key fingerprint = 6345 A91A FF89 97E0 13D0 96A9 9E2A 1917 27D8 1AC8
|
||||
uid Clément Hertling (Wxcafe)
|
||||
uid [jpeg image of size 14692]
|
||||
sub 4096R/9ED7F77F 2012-11-17
|
||||
|
||||
La partie `pub` indique que c'est une clé publique, `4096R` indique que c'est
|
||||
une clé RSA sur 4096 bits. La partie `27D81AC8` est
|
||||
l'identifiant de la clé publique, `Key fingerprint = 6345 A91A FF89 97E0 13D0
|
||||
96A9 9E2A 1917 27D8 1AC8` est appelé fingerprint de la clé. Les champs
|
||||
`uid` sont des manières d'identifier la clé et la personne associée a
|
||||
celle-ci, et enfin le champ `sub` est indicateur d'une subkey, système
|
||||
uniquement pris en charge par GPG et non inclus dans les premières
|
||||
versions de PGP, donc non-implémentées dans nombre de clients pgp.
|
||||
Passons maintenant a la mise en place de cette clé publique sur un
|
||||
serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.
|
||||
|
||||
gpg --keyserver pgp.mit.edu --send-keys *ID de la clé a uploader*
|
||||
|
||||
Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser
|
||||
pour signer et chiffrer vos emails!
|
||||
Installons donc l'extension Enigmail pour Thunderbird, permettant de
|
||||
chiffrer/signer vos emails de façon transparente. Il conviendra de
|
||||
paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis
|
||||
Setup Wizard (l'option entre Help et About OpenPGP). Normalement,
|
||||
Enigmail détecte votre installation de gpg automatiquement, si cependant
|
||||
ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a
|
||||
l'heure (pubkey.gpg) en l'important (import key from file).
|
||||
|
||||
Selon les options que vous avez utilisées, vos emails seront
|
||||
automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a
|
||||
l'esprit que si tout le monde peut lire les mails signés, il n'en est
|
||||
pas de même pour les mails chiffrés, pour lesquels il est nécessaire de
|
||||
posséder la clé publique du correspondant en question, et de posséder
|
||||
soi même une clé privée, donc d'utiliser OpenPGP aussi.
|
||||
Concernant les signatures de clés, elles fonctionnent de manière très
|
||||
simple :
|
||||
Vous devez télécharger la clé de votre correspondant, via un
|
||||
|
||||
gpg --keyserver pgp.mit.edu --search-keys *ID de la clé de votre correspondant*
|
||||
|
||||
(a noter que cette commande fonctionne aussi en cherchant une adresse
|
||||
email ou un nom. Cependant, en cherchant via l'identifiant de la clé,
|
||||
vous êtes sur de trouver votre correspondant. Globalement, l'email est
|
||||
lui aussi assez sûr en terme de recherche de clés, tandis que le nom
|
||||
donne rarement un résultat). L'étape suivante est de vérifier que votre
|
||||
correspondant est bien la personne qui est spécifiée sur sa clé. Pour
|
||||
cela, il convient d'avoir déjà vu physiquement cette personne et si
|
||||
possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une
|
||||
confirmation de cette personne que la clé que vous voyez lui appartient
|
||||
bien.
|
||||
Ceci fait, vous pouvez signer la clé via un
|
||||
|
||||
gpg --sign *ID de la clé a signer*
|
||||
|
||||
puis la renvoyer au serveur via
|
||||
|
||||
gpg --keyserver pgp.mit.edu --send-key *ID de la clé a signer*
|
||||
|
||||
Voila, la clé de votre correspondant est signée!
|
||||
|
||||
Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée
|
||||
grâce a cette superbe invention qu'est la cryptographie!
|
||||
|
||||
[pretty good privacy]: http://fr.wikipedia.org/wiki/Pretty_Good_Privacy
|
||||
[ici]: http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique
|
||||
[quitter Gmail]: http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/
|
||||
[GNU Privacy Guard]: http://fr.wikipedia.org/wiki/GNU_Privacy_Guard
|
||||
@ -1,75 +0,0 @@
|
||||
Title: La programmation expliquée simplement
|
||||
Date: 2012-08-27 00:22
|
||||
Author: Wxcafe
|
||||
Category: Teaching
|
||||
Slug: la-programmation-expliquee-simplement
|
||||
|
||||
Salut!
|
||||
Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire
|
||||
récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé
|
||||
pas mal de temps assez occupé.
|
||||
|
||||
Enfin, après un certain temps a farfouiller au millieu des connecteurs
|
||||
SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques
|
||||
durs, je suis de retour pour un court article.
|
||||
Du coup, je m'étais dit que j'allais reprendre sur le thème de
|
||||
l'informatique expliquée au grand public, en tentant d'aller un peu plus
|
||||
loin que la dernière fois sur le thème de la programmation
|
||||
Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur.
|
||||
Si a peu près tout le monde sait que "les ordinateurs, ils ne
|
||||
comprennent que les 1 et les 0!", peu de gens savent comment cela
|
||||
fonctionne en détail.
|
||||
|
||||
Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà
|
||||
des notions de base en informatique. Ainsi, vous savez surement que les
|
||||
ordinateurs fonctionnent avec des programmes, qui sont composés de
|
||||
code.
|
||||
Ainsi, il faut comprendre que le code (source) est "compilé" en un
|
||||
fichier "binaire". Un fichier binaire est un fichier comprenant les
|
||||
instructions telles qu’exécutées par le processeur, et donc absolument
|
||||
illisible pour un humain.
|
||||
|
||||
La compilation est le processus qui transforme le code source en
|
||||
binaire executable. Les binaires ont, sous Windows, l'extension .exe,
|
||||
tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension
|
||||
particulière.
|
||||
Ceci étant dit, il faut comprendre que certains langages sont plus
|
||||
proches que d'autres du langage processeur, les langages les plus
|
||||
proches sont dits de "bas niveau". Les langages les plus éloignés sont
|
||||
donc dits de haut niveau.
|
||||
|
||||
Par exemple, l'assembleur est l'un des languages de plus bas niveau,
|
||||
tandis que python par exemple est un langage de plus haut niveau. Les
|
||||
langages de haut niveau sont souvent bien plus simples a comprendre et a
|
||||
apprendre que les langages de bas niveau
|
||||
|
||||
Ainsi, en C, un langage de niveau relativement bas, pour afficher
|
||||
"hello world" sur l'écran, le code nécessaire est :
|
||||
|
||||
#include
|
||||
void main() {
|
||||
printf("hello world");
|
||||
return 0;
|
||||
}
|
||||
|
||||
le même programme en python s'écrit :
|
||||
|
||||
print "hello world"
|
||||
|
||||
et n'a pas besoin d'être compilé , puisqu'il peut être intepreté
|
||||
directement.
|
||||
|
||||
Python utilise en effet un système similaire a Java en ayant un
|
||||
interpréteur dit "runtime" ou "temps réel", qui interprète le programme
|
||||
sans le compiler. Java utilise un système légèrement différent, puisque
|
||||
le code a besoin d'être compilé, mais est interpreté par un interpréteur
|
||||
et non par le processeur.
|
||||
|
||||
Cette méthode permet le fameux "code once, run everywhere", ce qui
|
||||
signifie que le même code est exécutable sur quasiment tous les systèmes
|
||||
d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est
|
||||
disponible.)
|
||||
|
||||
Voila, je vous laisse sur le fonctionnement de Java et de Python, et je
|
||||
vais me coucher.
|
||||
A bientôt!
|
||||
@ -1,108 +0,0 @@
|
||||
Title: La séparation des églises et de l'état, une idée qu'elle est bonne?
|
||||
Date: 2012-12-13 03:08
|
||||
Author: Wxcafe
|
||||
Category: Ranting
|
||||
Slug: la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne
|
||||
|
||||
Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il
|
||||
existe une loi dite de séparation des églises et de l'état, qui consiste
|
||||
a faire en sorte que l'état n'ait rien a voir avec les differentes
|
||||
églises, pour de sombres histoires d'indépendance et de laïcité.
|
||||
(principes qui sont aujourd'hui en voie de disparition, mais ce n'est
|
||||
pas le propos qui nous occupe ici). Cela dit, cette bonne idée
|
||||
politique, si elle a évité a ses auteurs de nombreux tracas, et leur a
|
||||
surement permis de conserver une tête en état de fonctionnement bien
|
||||
reliée a leur colonne vertébrale, ne vous interesse que moyennement, et
|
||||
vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer
|
||||
(quel mot horrible...) sur twitter?
|
||||
|
||||
Ça tombe bien, vous abordez justement le sujet véritable de cet article
|
||||
(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir
|
||||
la centralisation qui se met progressivement en place sur internet depuis
|
||||
quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces
|
||||
acteurs du web (et pas que, pour certains...) ont commencé a prendre
|
||||
pour manie de centraliser vos données : pour prendre un exemple simple,
|
||||
si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails
|
||||
pour accorder la publicité, dites adieu a votre vie privée), vous avez
|
||||
un compte Google Talk, probablement aussi un Google+.
|
||||
|
||||
L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est
|
||||
Google Reader, et vous l'utilisez aussi probablement. Votre téléphone
|
||||
est un android? Ah, un Nexus? Vous avez donc toutes les applications
|
||||
google installées, et Chrome mobile comme navigateur par défaut, qui est
|
||||
synchronisé avec la version qui tourne sur votre PC (via les serveurs de
|
||||
Google, bien sur).
|
||||
Depuis peu, les recherches sur le moteur de recherche
|
||||
sont elles aussi ajoutées a votre profil, enregistrées a jamais par
|
||||
Google (qui n'est pas touchée, en tant que société américaine, par la
|
||||
"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne
|
||||
jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone
|
||||
ayant été perdu a cause de cet article) J'ai pris ici comme exemple
|
||||
Google, parce que c'est celui qui propose le plus de services, mais
|
||||
Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec
|
||||
WP8 et Skydrive.
|
||||
|
||||
Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur
|
||||
fournissez des informations dont ils s'empressent de devenir seuls
|
||||
propriétaires (cf les Conditions d'Utilisation de ces deux services),
|
||||
puis de les revendre a des annonceurs faisant de la publicité
|
||||
ciblée. Le problème est simple a apprehender, vous ne voulez pas que
|
||||
l'un de ces services connaisse trop de choses sur vous (et ils recoupent
|
||||
très bien les informations venant de sources differentes), car il est
|
||||
évident qu'ils les vendent a des entreprises peu scrupuleuses quand
|
||||
a leurs engagements de confidentialité, quand a leurs securité
|
||||
aussi; mais surtout parce que depuis le 11 Septembre 2001 et le
|
||||
Patriot Act, toute entreprise américaine **doit**fournir toutes ses
|
||||
informations au gouvernement américain **sans aucune intervention d'un
|
||||
juge, ou de quelque institution de controle que ce soit.**
|
||||
|
||||
Ce qui est, comme vous pouvez le comprendre, relativement
|
||||
problématique. (pour ceux qui a ce point se disent "je n'ai rien a
|
||||
cacher, donc je m'en fous si le gouvernement américain sait tout de
|
||||
moi", je vous conseille d'aller lire [cet article][] de Jean Marc
|
||||
Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs
|
||||
possibilités: utiliser des services concurrents pour tout (Facebook
|
||||
Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous
|
||||
souvenant que comme ces entreprises sont toutes américaines, le
|
||||
gouvenrnement américain détient tout de même vos informations, et que ca
|
||||
lui prendra juste un peu plus de temps.
|
||||
|
||||
Vous pouvez aussi n'utiliser que des entreprises francaises,
|
||||
mais cela ne regle que le problème du Patriot Act, et pas celui de
|
||||
la revente de vos données. Et puis essayez de trouver un service équivalent
|
||||
a Google Reader et fourni par une entreprise française, on en reparlera.
|
||||
Non, la véritable alternative, c'est d'héberger vos services vous
|
||||
même, d'avoir votre propre serveur sur lequel vous possedez le plus
|
||||
de services possibles, et d'utiliser des concurents ou des services
|
||||
libres au maximum pour les autres, ceux qui ne sont pas distribuables
|
||||
(par exemple, les cartes sont difficiles a mettre en commun,
|
||||
or plusieurs alternatives existent: Google Maps, `<troll>`Apple
|
||||
Maps`</troll>`, Bing Maps, OpenStreetMaps, etc...).
|
||||
Beaucoup de ces services sont cependant très facilement
|
||||
décentralisables, surement parce qu'ils ont a la base étés conçus comme
|
||||
des services décentralisés. Ainsi les emails, le web, le chat (via XMPP)
|
||||
par exemple sont basés sur un système décentralisé.
|
||||
|
||||
De plus, votre serveur peut vous servir a beaucoup d'autres des
|
||||
choses que vous feriez habituellement sur votre ordinateur
|
||||
personnel: conserver une présence sur IRC, compiler du code, faire
|
||||
du rendu vidéo, etc... En bref, un serveur peut vous servir
|
||||
a effectuer toutes les opérations que vous effectuez sur votre
|
||||
ordinateur sans les inconvénients de la consommation éléctrique
|
||||
ni du bruit, mais vous permet aussi de ne dépendre aucunement
|
||||
d'une entreprise américaine, et cependant de disposer de tous les
|
||||
services utiles offerts par ces dernières.
|
||||
|
||||
Un serveur peut de plus vous permettre de controller parfaitement
|
||||
tous ces services, sans aucune limitation d'aucune sorte,
|
||||
voire de vous créer une page web. Bien entendu, il est bien plus
|
||||
utile d'avoir un serveur si vous avez aussi un nom de domaine.
|
||||
Heureusement, ils sont peu chers et souvent fournis avec le serveur.
|
||||
|
||||
Dans de prochains articles, je vous expliquerai comment louer puis
|
||||
configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP),
|
||||
web, base de données, et proxy. Cela dit, comme c'est un serveur sous
|
||||
linux, vous pouvez l'utiliser pour a peu près n'importe quoi.
|
||||
Voila, a bientôt!
|
||||
|
||||
[cet article]: http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/
|
||||
@ -1,44 +0,0 @@
|
||||
Title: Le Quenya - Épisode ø
|
||||
Date: 2012-09-18 19:07
|
||||
Author: Wxcafe
|
||||
Category: Language
|
||||
Slug: le-quenya-episode-o
|
||||
|
||||
Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y
|
||||
a peu...), le nom que donnait Tolkien au dialecte principal parlé par
|
||||
les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des
|
||||
Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte
|
||||
avant de commencer cet article que l'une des œuvres les plus
|
||||
impressionnantes de Tolkien, si ce n'est la plus grande, est
|
||||
l'impressionnant travail linguistique passé sur les différentes langues
|
||||
présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya,
|
||||
la langue des nains, qui est appelé le khazalide, etc.
|
||||
|
||||
En effet, a contrario des "langues" développées dans d'autres œuvres littéraires
|
||||
telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot
|
||||
de français (ou d'anglais) a un mot de sa "langue", les langues de
|
||||
l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des
|
||||
racines logiques, des systèmes de grammaire et de conjugaison propres,
|
||||
une logique inhérente dans la prononciation ou l'orthographe, et ainsi
|
||||
de suite.
|
||||
|
||||
Un véritable rêve de linguiste donc, puisque ces langues sont
|
||||
pratiquement entièrement documentées par Tolkien lui même (voir
|
||||
l'appendice E du SdA, particulièrement instructif a ce sujet.)
|
||||
|
||||
J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster
|
||||
ici des résumés des cours que je suis ( disponibles [ici][] , une
|
||||
traduction en français est disponible [la][] en pdf ), et des infos ici
|
||||
toutes les deux semaines.
|
||||
|
||||
Si ce sujet vous intéresse, le compte twitter @Quenya101 poste
|
||||
régulièrement des informations sur le sujet, et pour plus d'infos sur le
|
||||
sujet, vous pouvez en trouver [par ici][].
|
||||
|
||||
Et en tant que première leçon, vous pouvez apprendre que ce mot que vous
|
||||
avez prononcé comme le Kenya tout le long de cet article se prononce en
|
||||
fait [Kwenïa], ou bien Qwenya!
|
||||
|
||||
[ici]: http://folk.uib.no/hnohf/qcourse.htm
|
||||
[la]: http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf
|
||||
[par ici]: olk.uib.no/hnohf/quenya.htm
|
||||
@ -1,94 +0,0 @@
|
||||
Title: Les différentes couches d'un système d'exploitation
|
||||
Date: 2012-09-06 23:29
|
||||
Author: Wxcafe
|
||||
Category: Teaching
|
||||
Slug: les-differentes-couches-dun-systeme-dexploitation
|
||||
|
||||
Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques
|
||||
années (plus ou moins, parce que j'ai toujours un Windows en dual boot,
|
||||
principalement pour les jeux (possiblement plus pour longtemps, avec
|
||||
l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou
|
||||
moins bien mon système. Or il y a plusieurs choses a savoir sur les
|
||||
systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est
|
||||
le système de couches.
|
||||
|
||||
Un système d'exploitation (de type UNIX, \<troll\>enfin un vrai système quoi.
|
||||
\</troll\>) incorpore plusieurs systèmes de couches.
|
||||
|
||||
Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique,
|
||||
c'est a dire que tous les composants sont intégrés au kernel. Ce qui
|
||||
signifie que rien ne peut être ajouté au noyau sans recompiler celui ci.
|
||||
Or, quand on sait que le noyau comprend entre autres les drivers du
|
||||
matériel et des systèmes de fichier, cela peut poser des problèmes quand
|
||||
a la taille du kernel et a la licence libre de ce dernier.
|
||||
|
||||
Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui
|
||||
signifie que des modules peuvent être chargé a tout moment en cours
|
||||
d’exécution, ce qui permet l'utilisation de nouveaux systèmes de
|
||||
fichiers a chaud, ou l'insertion de matériel et l'installation de
|
||||
drivers sans interrompre l’exécution du système (Windows utilise un
|
||||
système de fausse installation de drivers pour le matériel externe, et
|
||||
un système de pré-installation des drivers pour les périphériques dits
|
||||
"plug and play")
|
||||
|
||||
Après le noyau intervient le système. Or, au tous premiers instants du
|
||||
boot, les systèmes GNU/Linux utilisent un système permettant de limiter
|
||||
l'utilisation de ressources systèmes si elles ne sont pas nécessaires,
|
||||
et incorpore ainsi un système dit de "runlevels"
|
||||
|
||||
Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce
|
||||
runlevel permet de tester le bon démarrage du système sans avoir a
|
||||
effectuer de manipulation pour le ré-éteindre
|
||||
|
||||
Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté
|
||||
étant donné que ce runlevel donne accès a un système en étant
|
||||
automatiquement loggé en tant que root, avec tous les autres
|
||||
utilisateurs désactivés, de même que tous les systèmes de réseaux
|
||||
|
||||
Le runlevel 2 est appelé mode multi user, et vous mets en face d'un
|
||||
système classique. en ligne de commande, mais avec tous les systèmes de
|
||||
réseau désactivés.
|
||||
|
||||
Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux
|
||||
activés.
|
||||
|
||||
Le runlevel 4 n'est pas officiellement défini, et est censé être
|
||||
activable en fonction des besoins de l'utilisateur. Sur la plupart des
|
||||
distributions grand public, ce runlevel est lié au...
|
||||
|
||||
Runlevel 5! Multi-user, networking, with working GUI! c'est le système
|
||||
tel que vous le connaissez, avec l'interface graphique et le système de
|
||||
login graphique.
|
||||
|
||||
Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine
|
||||
quand il devient le runlevel courant.
|
||||
|
||||
(Il est a noter que Debian, et donc toutes les distribs qui en sont
|
||||
dérivées, ne font pas de distinction entre les differents runlevels du 2
|
||||
au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login
|
||||
et une interface graphique, et un mode réseau fonctionnel, bref avec des
|
||||
fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)
|
||||
|
||||
Il est possible de changer de runlevel grâce a la commande runlevel
|
||||
(oui, c'est évident...)
|
||||
|
||||
Les systèmes Linux utilisent aussi un système dit de SandBox , qui en
|
||||
informatique est un système permettant d'isoler les processus les uns
|
||||
des autres. Ainsi, la pile réseau, qui est le système auquel les
|
||||
différents processus envoient les différents paquets qui doivent sortir
|
||||
de la machine , et qui redistribue ces paquets, est isolée du reste du
|
||||
système, en cela qu'aucun des autres processus ne peuvent modifier cette
|
||||
pile hors du runlevel 1 ou 2.
|
||||
|
||||
De la même façon, le navigateur chrom/ium fait fonctionner tous les
|
||||
onglets, ainsi que toutes les extensions, dans des processus différents.
|
||||
Certaines distributions linux implémentent un système de cette sorte
|
||||
pour toutes les applications, ou seulement pour certaines. ainsi Chakra
|
||||
Linux a un système d'installation d'applications dans des disques
|
||||
virtuels, ce qui permet une sécurité totale du processus.
|
||||
|
||||
Voila, j'espère vous en avoir appris un peu sur le fonctionnement des
|
||||
différentes couches de linux, et j'espère que cet article vous poussera
|
||||
a tester un peu votre système et a vous amuser avec les différents
|
||||
runlevels
|
||||
|
||||
@ -1,123 +0,0 @@
|
||||
Title: Les systèmes de fichiers
|
||||
Date: 2012-09-25 10:28
|
||||
Author: Wxcafe
|
||||
Category: Teaching
|
||||
Slug: les-systemes-de-fichiers
|
||||
|
||||
Un système de fichiers. Vous en avez surement déjà entendu parlé si vous
|
||||
avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous
|
||||
connaissez surement NTFS, EXT4, ou encore FAT32.
|
||||
|
||||
Ces différents noms désignent en effet des systèmes de fichiers. Mais
|
||||
qu'est-ce qu'un système de fichiers?
|
||||
|
||||
Pour comprendre cela, il faut déjà savoir ce qu'est exactement un
|
||||
fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la
|
||||
plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio
|
||||
([kibioctet][]), en fonction du système de fichier utilisé.), qui est
|
||||
donc composé de bits, interprétés différemment en fonction du type de
|
||||
fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il
|
||||
n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent,
|
||||
ou il commence ni où il s'arrête (je schématise un peu, mais c'est
|
||||
l'idée).
|
||||
|
||||
Ainsi, le système de fichier donne un cadre et un standard à
|
||||
l'arborescence des fichiers. Par exemple, le système de fichier ext4
|
||||
utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de
|
||||
disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio
|
||||
et mesurer la taille des fichiers en blocs de cette façon. Les systèmes
|
||||
de fichiers nécessitent l'inclusion de drivers dans le noyau pour
|
||||
pouvoir être pris en compte.
|
||||
|
||||
Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs,
|
||||
reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu
|
||||
près tout type de partition récente.
|
||||
|
||||
Il convient de bien faire la différence entre le système de fichier et
|
||||
l'arborescence des fichiers. Si l'arborescence des fichiers est en fait
|
||||
une entité virtuelle englobant la racine / et tous les fichiers et
|
||||
dossiers contenus dedans, le système de fichier permet a votre système
|
||||
GNU/Linux de distinguer les différents fichiers composants cette
|
||||
arborescence.
|
||||
|
||||
Détaillons maintenant les types de fichiers les plus répandus:
|
||||
|
||||
- FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table,
|
||||
soit la définition d'un système de fichier), remplissent leur rôle le
|
||||
plus simplement possible. Ne permettant (historiquement) que des noms de
|
||||
8 caractères (plus extension de trois caractères), ni chiffrement, ni
|
||||
système de distinction d'utilisateurs (DOS étant un système
|
||||
mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32,
|
||||
utlisants respectivement des blocs de 16 et 32 Kio.
|
||||
|
||||
- NTFS :. Le NTFS (pour New Technology File System, rapport a Windows
|
||||
NT) est un système de fichier qui est apparu avec Windows XP, et qui
|
||||
était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a
|
||||
FAT différentes capacités dont le chiffrement, les liens symboliques, la
|
||||
compression et les quotas pour les volumes, permettant de limiter la
|
||||
taille maximum occupée dans une partition.
|
||||
|
||||
- ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012.
|
||||
Ne différant pas énormément de NTFS, je le mentionne principalement
|
||||
parce qu'il est prévu qu'il soit le défaut pour Windows 8.
|
||||
Il apporte principalement la redondance, c'est a dire que chaque
|
||||
fichier possède une somme de contrôle en 64 bits stockée dans un fichier
|
||||
séparé pour éviter les corruption de disque.
|
||||
|
||||
- Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers
|
||||
les plus utilisés sous linux pour le grand public. (Je traiterai ici
|
||||
d'ext4, puisque c'est le plus récent.) Il dispose de toutes les
|
||||
fonctions que l'on peut attendre d'un système de fichiers moderne, ni
|
||||
plus ni moins. Ainsi, ext4 est un système de fichiers journalisé,
|
||||
acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite
|
||||
"par extent", ce qui signifie que la création d'un fichier réserve
|
||||
automatiquement les zones contiguës de façon a réduire la fragmentation.
|
||||
|
||||
- ReiserFS : ce système de fichiers, créé par le (légèrement mégalo)
|
||||
programmeur Hans Reiser, est a retenir pour avoir été le premier système
|
||||
de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des
|
||||
4 milliards. Le but de ce système est de créer un système polyvalent, a
|
||||
la fois système de fichiers et base de donnée (de part sa grande
|
||||
capacité en terme de nombre de fichiers et de l'utilisation d'un
|
||||
journal.)
|
||||
|
||||
- Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi
|
||||
l'allocation par extent, mais possède de plus un système de
|
||||
sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers
|
||||
montées en même temps (système pratique et utile pour faire des
|
||||
snapshots de systèmes.). Il permet aussi de redimensionner a chaud la
|
||||
taille des partitions, en les agrandissant ou en les rétrécissant, est
|
||||
compatible avec [LVM][], a un système de checking intégré (btrfsck), et
|
||||
utilise un algorithme de compression appelé LZ4, qui accélère les accès
|
||||
aux fichiers compressés d'environ 30% par rapport a LZO, le système
|
||||
utilisé dans ext4.
|
||||
|
||||
- HFS+ : le système de fichier présent sur tous les macs a des capacités
|
||||
relativement standards, et ressemble énormément a l'ext3. Il supporte
|
||||
cependant les liens directs vers les dossiers, fonction rare sur les
|
||||
systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau
|
||||
dans les années a venir
|
||||
|
||||
- ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux
|
||||
et \*BSD, est, tel Btrfs, a la fois un système de fichier et un
|
||||
remplaçant/compatible avec LVM, C'est un système de fichiers conçu
|
||||
principalement pour les serveurs, et il intègre ainsi un système de
|
||||
redondance des données pour éviter les corruptions, un mode RAID-Z
|
||||
(apparenté au RAID5), des checks d’intégrité en continu, des snapshots,
|
||||
etc...
|
||||
|
||||
Comme on a pu le voir, les systèmes de fichiers disponibles sont
|
||||
légions. Cependant, le plus adapté a Linux et a une utilisation grand
|
||||
public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier
|
||||
n'est pas aujourd'hui proposé par défaut sur les distributions les plus
|
||||
utilisées, au profit de l'ext4, qui commence a accuser son âge...
|
||||
|
||||
Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au
|
||||
fonctionnement du système, sont en fait de première importance, et ce
|
||||
choix ne devrait pas être laissé au hasard, et être mis a jour
|
||||
régulièrement (pour éviter les failles de sécurité...)
|
||||
|
||||
Bon courage, et bon choix pour votre prochain système.
|
||||
|
||||
[kibioctet]: http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s
|
||||
[LVM]: http://fr.wikipedia.org/wiki/LVM
|
||||
@ -1,81 +0,0 @@
|
||||
Title: L'informatique a l'école
|
||||
Date: 2012-10-15 20:34
|
||||
Author: Wxcafe
|
||||
Category: Ranting
|
||||
Slug: linformatique-a-lecole
|
||||
|
||||
Après avoir lu [cet article][] paru sur écrans.fr, et au vu des
|
||||
nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je
|
||||
commence a me demander si la réponse logique ne serait pas d'enseigner
|
||||
les bases de l'informatique (bases d’électronique, de programmation et
|
||||
de logique formelle) dès le collège.
|
||||
|
||||
En effet, l'exemple qui me revient toujours est celui des technoprêtres
|
||||
de warhammer 40 000, dans un univers ou la technologie est ritualisée et
|
||||
incomprise même des plus savants, qui se contentent de reproduire ce qui
|
||||
existe, et parfois par chance de retrouver un schéma explicatif lisible
|
||||
par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute
|
||||
technologie est ointe d'onguents sacrés, entourée d'encens avant d'être
|
||||
péniblement actionnée par des assistants ne comprenant rien a cette
|
||||
technologie (ayant lu [Hackers - Heroes of the Computer Revolution][] de
|
||||
Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit
|
||||
l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il
|
||||
me semble que de plus en plus la société se rapproche de cela.
|
||||
|
||||
Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de
|
||||
l'informatique (telle que décrite par exemple par Steve Wozniak dans son
|
||||
livre [iWoz][]) disparait pour laisser place a une culture de la
|
||||
consommation et de l'utilisation de contenus existants, et même a une
|
||||
certaine peur de la compréhension de la technologie. Ceux qui s'y
|
||||
intéressent sont considérés comme marginaux (combien de hackers créent
|
||||
des outils sur lesquels seront construits tous les systèmes du siècle a
|
||||
venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont
|
||||
pas intégrés a la société dite "normale"?), et on peut souvent observer
|
||||
les réactions de peur que lancent les actions des hackers, ne serait-ce
|
||||
que dans les journaux (combien de journaux 'mainstream' ont-ils parlés
|
||||
des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis
|
||||
les années 80?) ou a la télévision.
|
||||
|
||||
Ainsi, la culture et la connaissance de ces appareils que
|
||||
sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos
|
||||
poches a dans l'espace en passant par l’intérieur des pacemakers
|
||||
jusqu’à être une composante indispensable de la société, se perdent et
|
||||
rendent ainsi la compréhension de ces appareils impossible (j'ai eu
|
||||
la désagréable surprise récemment de voir un camarade de classe
|
||||
me poser ingénument la question "Ah, mais en fait, quand tu installes
|
||||
Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau,
|
||||
la misère de cette question est que cette personne n'avait probablement
|
||||
aucune idée de la façon dont fonctionnait son ordinateur, a part
|
||||
pour le fond d'écran en question et pour les fameuses icônes.) pour
|
||||
le grand public, et cet évolution crée de fait une sorte d'oligarchie de
|
||||
techno-comprenants, seuls capables de manier et de créer la technologie.
|
||||
|
||||
C'est pour cela qu'il me semble intéressant, important, peut être même
|
||||
requis, d'inclure au programme du collège puis du lycée des cours
|
||||
d’électronique et d'informatique tels que décrits plus haut, de façon a
|
||||
ce que les élèves comprennent le monde qui les entoure. Car c'est la le
|
||||
but du cycle scolaire secondaire, me semble-t-il, et non pas de former
|
||||
des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de
|
||||
musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle
|
||||
secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce
|
||||
qui les entoure, alors les cours sur l'informatique s'imposent comme une
|
||||
évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi
|
||||
que soit d'autre...
|
||||
|
||||
Ces cours seraient susceptibles de s’insérer en un mélange entre des
|
||||
cours de technologie (qui aujourd'hui sont bien plus orientés physique
|
||||
et machines-outils qu'informatique ou électronique, alors que la
|
||||
technologie d'aujourd'hui et vraisemblablement de demain aussi est
|
||||
l'informatique) et de physique, pour le côté électronique, et de façon a
|
||||
donner enfin aux cours de physique un intérêt quelconque, sortir au delà
|
||||
de la théorie et de l'abstraction complète que sont actuellement ces
|
||||
cours et passer un peu dans la réalisation, avec des arduinos par
|
||||
exemple.
|
||||
|
||||
Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne
|
||||
finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des
|
||||
composante les plus importantes du monde tel qu'il est programmé.
|
||||
|
||||
[cet article]: http://t.co/5PTfe6zu
|
||||
[Hackers - Heroes of the Computer Revolution]: http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution
|
||||
[iWoz]: http://en.wikipedia.org/wiki/IWoz
|
||||
@ -30,6 +30,7 @@ zfsinstall, qui va se charger de tout le travail pour nous.
|
||||
|
||||
Utilisez donc ce script ainsi :
|
||||
|
||||
::bash
|
||||
# tout d'abord, wipons le MBR :
|
||||
dd < /dev/zero > /dev/da0 count=1
|
||||
# maintenant, installons le système
|
||||
@ -43,6 +44,7 @@ convient pas.
|
||||
Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau
|
||||
système) et éditez /etc/rc.conf :
|
||||
|
||||
::python
|
||||
zfs_load="YES"
|
||||
sshd_load="YES
|
||||
hostname="whatever"
|
||||
@ -57,7 +59,7 @@ Voila, c'est la fin de ce tutoriel.
|
||||
(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu
|
||||
crédible, disons)
|
||||
|
||||
Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter
|
||||
Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter :
|
||||
[wxcafe_ebooks](https://twitter.com/wxcafe_ebooks),
|
||||
[petitefanfare](https://twitter.com/petitefanfare),
|
||||
[capet_ebooks](https://twitter.com/capet_ebooks),
|
||||
|
||||
97
content/nuc-hdmi-cec.md
Normal file
97
content/nuc-hdmi-cec.md
Normal file
@ -0,0 +1,97 @@
|
||||
Title: les NUCs et le HDMI-CEC
|
||||
Date: 2015-08-22 02:43
|
||||
Author: Wxcafe
|
||||
Category: Note
|
||||
Slug: nuc-hdmi-cec
|
||||
|
||||
J'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 "profiter" 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...) simplement.
|
||||
|
||||
Ayant un [Raspberry Pi 1](https://www.raspberrypi.org/) qui trainait, j'ai
|
||||
décidé d'installer [OpenELEC](http://openelec.tv/) dessus et de voir ce que ça
|
||||
donnait. Le résultat n'étant pas satisfaisant (a cause des difficultés du RPi
|
||||
a faire fonctionner tout ça), j'ai décidé d'upgrader le système.
|
||||
|
||||
J'ai donc acquis un [NUC D34010WYK](http://www.amazon.fr/gp/product/B00GPJ83EU)
|
||||
(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un
|
||||
[adaptateur HDMI-CEC](http://www.amazon.fr/dp/B00WU5F8MS/) pour celui-ci, et un
|
||||
[SSD mSATA](http://www.amazon.fr/gp/product/B00INTR4ZE), en me disant que je
|
||||
pourrais sans trop de problème faire tourner [Kodi](http://kodi.tv/) sur un
|
||||
debian, avec en plus Steam pour faire du streaming depuis mon desktop. L'autre
|
||||
avantage de tourner sur du Intel, c'est de pouvoir mater Netflix (puisque le
|
||||
plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que
|
||||
sur x86).
|
||||
|
||||
J'ai donc reçu après un certain temps le matériel sus cité, que j'ai avidement
|
||||
monté, avant de me rendre compte que le manuel de l'adaptateur Pulse-Eight était
|
||||
\[PDF\][assez médiocre](https://www.pulse-eight.com/Download/Get/30). J'ai donc
|
||||
cherché plusieurs heures, avant de trouver \[DE\][ce
|
||||
post](http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test)
|
||||
expliquant comment brancher l'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'information, et pour moi si je dois remonter ce système.
|
||||
|
||||
Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit
|
||||
"Front Panel", et un appelé "Custom Solution Header". 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 :
|
||||
|
||||
Custom Solution
|
||||
┌─┬─┬─┬─┬─┐
|
||||
│g│ │·│r│·│
|
||||
├─┼─┼─┼─┼─┤
|
||||
│·│·│·│·│·│
|
||||
└─┴─┴─┴─┴─┘
|
||||
|
||||
g ➔ fiche grise
|
||||
r ➔ fiche rouge
|
||||
· ➔ pin inutilisé
|
||||
➔ espace vide (sans pin)
|
||||
|
||||
Une fois cela fait, il faut brancher le Front Panel. Heureusement, c'est plus
|
||||
facile, puisqu'il n'y a qu'une seule fiche a brancher ici : la orange.
|
||||
|
||||
|
||||
Front Panel
|
||||
┌─┬─┬─┬─┬─┐
|
||||
│·│·│·│·│·│
|
||||
├─┼─┼─┼─┼─┤
|
||||
│ │·│o│·│·│
|
||||
└─┴─┴─┴─┴─┘
|
||||
|
||||
o ➔ fiche orange
|
||||
· ➔ pin inutilisé
|
||||
➔ espace vide (sans pin)
|
||||
|
||||
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.
|
||||
|
||||
|
||||
Dual-USB
|
||||
┌─┬─┬─┬─┬─┐
|
||||
│b│B│v│n│·│
|
||||
├─┼─┼─┼─┼─┤
|
||||
│·│·│·│·│ │
|
||||
└─┴─┴─┴─┴─┘
|
||||
|
||||
b ➔ fiche bleue
|
||||
B ➔ fiche Blanche
|
||||
v ➔ fiche verte
|
||||
n ➔ fiche noire
|
||||
· ➔ pin inutilisé
|
||||
➔ espace vide (sans pin)
|
||||
|
||||
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 "Deep S4/S5" soit *dés*activé. Ceci permettant a la connection HDMI-CEC de
|
||||
démarrer et le NUC.
|
||||
|
||||
Ne reste plus ensuite qu'a installer un système digne de ce nom dessus!
|
||||
@ -1,7 +1,7 @@
|
||||
Title: OpenSMTPd comme serveur mail sous debian
|
||||
Date: 2014-11-07 13:04
|
||||
Author: Wxcafé
|
||||
Category: Tutorial
|
||||
Category: Tutoriel
|
||||
Slug: opensmtpd-debian
|
||||
|
||||
J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant
|
||||
@ -29,21 +29,21 @@ le serveur, des yeux pour la lecture).
|
||||
|
||||
Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir
|
||||
des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour
|
||||
ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de
|
||||
ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de
|
||||
[Dovecot](http://dovecot.org/) qui fait office de serveur IMAP et
|
||||
[amavis](http://www.ijs.si/software/amavisd/)/[spamassassin](http://spamassassin.apache.org/)
|
||||
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
|
||||
|
||||
╭────────────────╮ ╭──────────╮
|
||||
│╭──────────────>│────> to filter ───>│─╮ │
|
||||
mail in ││ │ │ │ amavis │
|
||||
───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
|
||||
│ │ │ ╰──────────╯
|
||||
mail out │ │ │ ╭──────────╮
|
||||
<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
|
||||
│ │ │ dovecot │ mailbox
|
||||
╰────────────────╯ ╰──────────╯
|
||||
╭────────────────╮ ╭──────────╮
|
||||
│╭──────────────>│────> to filter ───>│─╮ │
|
||||
mail in ││ │ │ │ amavis │
|
||||
───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
|
||||
│ │ │ ╰──────────╯
|
||||
mail out │ │ │ ╭──────────╮
|
||||
<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
|
||||
│ │ │ dovecot │ mailbox
|
||||
╰────────────────╯ ╰──────────╯
|
||||
|
||||
Normalement, ceci devrait être a peu près clair.
|
||||
Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais
|
||||
@ -73,26 +73,26 @@ Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,
|
||||
|
||||
Ainsi, pour reprendre le schéma présenté plus haut :
|
||||
|
||||
╭───────────────╮ ╭───────────╮
|
||||
│╭─────────────>│──> SMTP (10026) ──>│─╮ │
|
||||
SMTP in ││ │ │ │ amavis │
|
||||
────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
|
||||
│ │ │ ╰───────────╯
|
||||
SMTP out │ │ │
|
||||
25 <────────│<───────────╯ │
|
||||
╰───────────────╯
|
||||
╭───────────────╮ ╭───────────╮
|
||||
│╭─────────────>│──> SMTP (10026) ──>│─╮ │
|
||||
SMTP in ││ │ │ │ amavis │
|
||||
────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
|
||||
│ │ │ ╰───────────╯
|
||||
SMTP out │ │ │
|
||||
25 <────────│<───────────╯ │
|
||||
╰───────────────╯
|
||||
|
||||
Pour les mails sortants; et
|
||||
|
||||
╭───────────────╮ ╭────────────╮
|
||||
│╭─────────────>│──> SMTP (10024) ──>│─╮ │
|
||||
SMTP in ││ │ │ │ amavis │
|
||||
────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
|
||||
│ │ │ ╰────────────╯
|
||||
│ │ │ ╭────────────╮
|
||||
│ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
|
||||
│ │ │ dovecot │ mailbox
|
||||
╰───────────────╯ ╰────────────╯
|
||||
╭───────────────╮ ╭────────────╮
|
||||
│╭─────────────>│──> SMTP (10024) ──>│─╮ │
|
||||
SMTP in ││ │ │ │ amavis │
|
||||
────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
|
||||
│ │ │ ╰────────────╯
|
||||
│ │ │ ╭────────────╮
|
||||
│ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
|
||||
│ │ │ dovecot │ mailbox
|
||||
╰───────────────╯ ╰────────────╯
|
||||
|
||||
Pour les mails entrants.
|
||||
|
||||
@ -100,7 +100,7 @@ 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'autres plateformes, la configuration devrait être sensiblement la même
|
||||
|
||||
(Vous aurez besoin de certificats SSL pour ce guide, même self-signés.
|
||||
(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 [ce
|
||||
post](http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/))
|
||||
|
||||
@ -113,6 +113,7 @@ Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :
|
||||
|
||||
`/etc/smtpd.conf`
|
||||
|
||||
::bash
|
||||
# This is the smtpd server system-wide configuration file.
|
||||
# See smtpd.conf(5) for more information.
|
||||
|
||||
@ -183,6 +184,7 @@ POP3[s], différents guides sont trouvables facilement sur internet.
|
||||
|
||||
`/etc/dovecot/dovecot.conf`
|
||||
|
||||
::bash
|
||||
## Dovecot configuration file
|
||||
|
||||
# basic config
|
||||
@ -240,12 +242,14 @@ POP3[s], différents guides sont trouvables facilement sur internet.
|
||||
|
||||
**ATTENTION: Sous OpenBSD, remplacez**
|
||||
|
||||
::bash
|
||||
passdb {
|
||||
driver = pam
|
||||
}
|
||||
|
||||
**par**
|
||||
|
||||
::bash
|
||||
passdb {
|
||||
driver = bsdauth
|
||||
}
|
||||
@ -285,6 +289,7 @@ modifications nécessaires a la fin du fichier.
|
||||
`/etc/amavis/conf.d/99-local.conf` (debian)
|
||||
`/etc/amavis.conf` (OpenBSD)
|
||||
|
||||
::perl
|
||||
use strict;
|
||||
|
||||
$enable_dkim_verification = 1;
|
||||
@ -353,6 +358,7 @@ tutorial](https://www.digitalocean.com/community/tutorials/how-to-install-and-co
|
||||
mais de nombreuses autre méthodes existent.
|
||||
Il nous reste encore a configurer spamassassin :
|
||||
|
||||
::perl
|
||||
#rewrite_header Subject *****SPAM*****
|
||||
# report_safe 1
|
||||
required_score 2.0
|
||||
|
||||
@ -4,24 +4,49 @@ Slug: about
|
||||
Author: wxcafé
|
||||
Category: Perso
|
||||
|
||||
Hey, it's me!
|
||||
=================
|
||||
Wxcafé, c'est moi.
|
||||
------------------
|
||||
|
||||
I'm Clément Hertling, a 18 years-old student, in my first year at [Epita](http://epita.fr),
|
||||
and living in Villejuif, near Paris, France.
|
||||
Je m'appelle Clément Hertling, je suis né en 1995, et je suis étudiant en DUT a
|
||||
[Paris 12 (UPEC)](http://www.u-pec.fr). Je vis actuellement a Villejuif, près de
|
||||
Paris, en France.
|
||||
|
||||
I like to mess around with computers, particularly with operating systems, and
|
||||
generally speaking with UNIX based systems (GNU/Linux, \*BSD, OS X, ...).
|
||||
I also like working with computer hardware, be it embedded devices or servers,
|
||||
and on a smaller scale I'm interested in electronics too. I regularly try to
|
||||
learn some programming, but it hasn't been very convincing for now. That will
|
||||
with, well, going to school and learning this stuff.
|
||||
I generally enjoy learning about tech, though.
|
||||
Je suis enthousiaste dès qu'il s'agit de jouer avec des ordinateurs, que ce soit
|
||||
avec des systèmes d'exploitations (et particulièrement les UNIX-like : Linux,
|
||||
\*BSD, OS X, Plan 9, ...), mais aussi avec le réseau et son administration
|
||||
(principalement couches 2 et 3, routage et commutation).
|
||||
Je suis aussi intéressé par le hardware, que ce soit de l'embarqué ou bien des
|
||||
serveurs, et dans une moindre mesure par l'électronique. Je fais un peu (et de
|
||||
plus en plus) de programmation, principalement en python et en Rust. Je
|
||||
m'intéresse beaucoup a la théorie de la programmation, toutefois, et notamment
|
||||
de plus en plus a la programmation fonctionnelle et a la théorie des types.
|
||||
On peut probablement en conclure que j'aime travailler avec la technologie.
|
||||
J'aime aussi écrire a propos de ce que je fais, et de mes pensées sur la
|
||||
technologie en général, et c'est ce que je fais (parfois) ici.
|
||||
|
||||
I like to write about what I do and my thoughts about technology, and I
|
||||
(sometimes) do it here, mostly in French though.
|
||||
You can also find me on some social networks, as shown in the right bar, or in
|
||||
real life at LeLoop (sometimes). If you want to meet me directly, send me an
|
||||
Vous pouvez aussi me lire sur Twitter. Les liens sont dans la
|
||||
barre a droite. Si vous voulez me rencontrer en vrai, vous pouvez m'envoyer un
|
||||
email.
|
||||
|
||||
Thanks for visiting!
|
||||
|
||||
Wxcafé, that's me.
|
||||
------------------
|
||||
|
||||
I'm Clément Hertling, I was born in 1995, and I'm a student in a technical
|
||||
formation at [Paris 12 (UPEC)](http://www.u-pec.fr). I live in Villejuif, near
|
||||
Paris, France.
|
||||
|
||||
I'm pretty enthusiastic when it's about playing with computers, whether that
|
||||
means operating systems (and more specifically UNIX-like OSes : Linux, \*BSD,
|
||||
OS X, Plan 9, ...), or networks and their administration (generally speaking,
|
||||
layer 2 and 3, routing and switching).
|
||||
I'm also interested in hardware, be it embedded systems or servers, and to a
|
||||
smaller extent in electronics. I also do a bit of (but more and more)
|
||||
programming, mostly in python and Rust. I'm very interested in CS theory,
|
||||
though, and very much so in functionnal programming and type theory.
|
||||
You could conclude that I like tech, and working in this domain. I also enjoy
|
||||
writing about what I do and about my ideas on tech in general, and that's what I
|
||||
(sometimes) do here.
|
||||
|
||||
You can also read my thoughts on twitter. The links are in the sidebar. If you
|
||||
want to meet me, you can send me an email.
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
Date: 2013-06-12 19:14
|
||||
Title: Redesign du blog, etc
|
||||
Author: wxcafe
|
||||
Category: Notes
|
||||
Category: Note
|
||||
Slug: redesign-du-blog
|
||||
|
||||
Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.
|
||||
|
||||
43
content/ssl-starttls.md
Normal file
43
content/ssl-starttls.md
Normal file
@ -0,0 +1,43 @@
|
||||
Title: SSL - STARTTLS
|
||||
Date: 2015-05-16 02:00
|
||||
Author: Wxcafe
|
||||
Category: Note
|
||||
Slug: ssl-starttls
|
||||
|
||||
Le chiffrement SSL pour les services en ligne est un problème relativement
|
||||
récent, par rapport a l'histoire d'Internet. Sa mise en place pose
|
||||
problème : les protocoles existants ne s'accommodent qu'assez mal de recevoir
|
||||
soudainement un flot de données chiffrées, mais développer de nouveaux
|
||||
protocoles est complexe et n'apporte rien d'intéressant. Pour palier a ce
|
||||
problème, deux solutions sont apparues.
|
||||
|
||||
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'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.
|
||||
|
||||
L'autre approche qui a été utilisée est une approche d'*upgrade*. La
|
||||
communication commence en mode non chiffré, puis le client demande l'upgrade de
|
||||
la connexion vers le mode chiffré s'il le supporte, les deux machines
|
||||
machines font un *handshake* 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 "mise
|
||||
a jour" en douceur.
|
||||
|
||||
Il est souvent demandé quelle est la meilleure méthode pour mettre en place un
|
||||
service -- laisser un port pour le SSL et un pour le trafic non chiffré, ou bien
|
||||
un seul, avec `STARTTLS`, qui *upgrade* les connexions si nécessaire.
|
||||
La réponse est que `STARTTLS` est plus interessant, pour plusieurs raisons. Tout
|
||||
d'abord, il permet de n'utiliser qu'un seul port : ça permet de simplifier la
|
||||
configuration du firewall. En plus de ça, il permet aux clients "anciens" (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'éviter aux utilisateurs d'avoir a configurer leurs
|
||||
clients. Si le client supporte le chiffrement, il l'activera de lui même s'il
|
||||
voit qu'il est disponible.
|
||||
Bref, mettez en place du `STARTTLS`, et pas du SSL. C'est mieux pour la sécurité
|
||||
de tout le monde.
|
||||
@ -1,7 +1,7 @@
|
||||
Title: SSL ou la sécurité sur l'internet
|
||||
Date: 2014-05-30 08:25
|
||||
Author: Wxcafe
|
||||
Category: Notes
|
||||
Category: Note
|
||||
Slug: SSL-ou-la-securite-sur-internet
|
||||
|
||||
*Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie
|
||||
@ -57,6 +57,7 @@ l'implémentation :
|
||||
Pour générer la clé, tout d'abord, il convient d'utiliser les commandes
|
||||
suivantes:
|
||||
|
||||
::console
|
||||
sudo openssl genrsa -out example.key 4096
|
||||
# nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation
|
||||
sudo openssl req -new -key example.key -out example.csr
|
||||
@ -72,6 +73,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise :
|
||||
|
||||
###apache :
|
||||
|
||||
::apache
|
||||
# /etc/apache2/mods_enabled/ssl.conf
|
||||
# [...]
|
||||
SSLProtocol all -SSLv2 -SSLv3
|
||||
@ -89,6 +91,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise :
|
||||
|
||||
###nginx :
|
||||
|
||||
::nginx
|
||||
# /etc/nginx/nginx.conf
|
||||
# [...]
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||
@ -106,6 +109,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise :
|
||||
|
||||
###prosody (jabber) :
|
||||
|
||||
::lua
|
||||
# tout d'abord, lancez la commande suivante :
|
||||
sudo openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048
|
||||
# ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :
|
||||
@ -118,6 +122,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise :
|
||||
|
||||
###postfix (email) :
|
||||
|
||||
::shell
|
||||
# /etc/postfix/main.cf
|
||||
# [...]
|
||||
smtpd_tls_cert_file = /etc/certs/example.com.crt
|
||||
@ -133,6 +138,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise :
|
||||
|
||||
###dovecot (imap) :
|
||||
|
||||
::shell
|
||||
# /etc/dovecot/dovecot.conf
|
||||
# [...]
|
||||
ssl_cert = </etc/certs/example.com.crt
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
Title: Update a propos du blog
|
||||
Date: 2012-09-18 16:57
|
||||
Author: Wxcafe
|
||||
Category: Notes
|
||||
Slug: update-a-propos-du-blog
|
||||
|
||||
Bonsoir! Un petit post pour faire un peu le point sur ce blog.
|
||||
Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais
|
||||
que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y
|
||||
avoir un tantinet réfléchi, ceci est du a deux points principaux :
|
||||
|
||||
- Tout d'abord, le manque d'inspiration, tout simplement. C'est assez
|
||||
compliqué de trouver des sujets intéressants liés a l'informatique, et
|
||||
qui méritent un article. Je vous invite d'ailleurs a me suggérer des
|
||||
sujets via les commentaires ou twitter ([@Wxcafe][])
|
||||
|
||||
- Ensuite, le délai de 8 jours est trop court pour me permettre de faire
|
||||
les recherches nécessaires, tout en manageant mes cours et mon temps
|
||||
libre.
|
||||
|
||||
A cause de cela, j'ai pris la décision de changer le rythme de parution
|
||||
des articles a un \*minimum\* d'un post tous les 10 jours. Bien entendu,
|
||||
si j'ai de l'inspiration en trop, plus de posts sont envisageables.
|
||||
|
||||
Voila. A part ca, je tiens a vous remercier de me lire (c'est assez
|
||||
étonnant de voir ca...), et je précise que je vais ajouter une page
|
||||
About Me, qui bien entendu rassemblera des informations sur moi, ma vie,
|
||||
mon oeuvre :P
|
||||
|
||||
Ceci dit, je vais bosser un peu sur le prochain article.
|
||||
|
||||
A plus tard!
|
||||
|
||||
[@Wxcafe]: https://twitter.com/wxcafe
|
||||
@ -1,7 +1,7 @@
|
||||
Title: Update
|
||||
Date: 2013-01-05 18:32
|
||||
Author: Wxcafe
|
||||
Category: Notes
|
||||
Category: Note
|
||||
Slug: update
|
||||
|
||||
Juste une petite note pour annoncer le prochain article, consacré a la
|
||||
|
||||
@ -7,7 +7,9 @@
|
||||
<meta name="author" content="wxcafé">
|
||||
<link rel="icon" type="image/png" href="//wxcafe.net/theme/img/favicon.ico">
|
||||
<!-- Le styles -->
|
||||
<link rel="stylesheet" href="//wxcafe.net/theme/css/extra.css" type="text/css" />
|
||||
<link rel="stylesheet" href="//wxcafe.net/theme/css/bootstrap.css" type="text/css" />
|
||||
<link href='http://fonts.googleapis.com/css?family=Oswald&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
<script type="text/javascript">
|
||||
/* <![CDATA[ */
|
||||
(function() {
|
||||
@ -61,7 +63,7 @@
|
||||
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
<a class="brand" href="//wxcafe.net/index.html">Wxcafé </a>
|
||||
<div class="nav-collapse">
|
||||
@ -84,60 +86,44 @@
|
||||
<h1>Archives for Wxcafé</h1>
|
||||
|
||||
<dl>
|
||||
<dt>Sat 22 August 2015</dt>
|
||||
<dd><a href='posts/nuc-hdmi-cec/'>les NUCs et le HDMI-CEC</a></dd>
|
||||
<dt>Sat 16 May 2015</dt>
|
||||
<dd><a href='posts/ssl-starttls/'>SSL - STARTTLS</a></dd>
|
||||
<dt>Sun 19 April 2015</dt>
|
||||
<dd><a href='posts/hori-vs-pdp/'>Manettes : Hori vs. PDP</a></dd>
|
||||
<dt>Sat 28 February 2015</dt>
|
||||
<dd><a href='posts/docker-et-les-ebooks-sur-twitter/'>Docker et les ebooks sur Twitter</a></dd>
|
||||
<dt>Fri 07 November 2014</dt>
|
||||
<dd><a href='posts/%D/opensmtpd-debian/'>OpenSMTPd comme serveur mail sous debian</a></dd>
|
||||
<dd><a href='posts/opensmtpd-debian/'>OpenSMTPd comme serveur mail sous debian</a></dd>
|
||||
<dt>Thu 28 August 2014</dt>
|
||||
<dd><a href='posts/%D/freebsd-online-mfsbsd/'>Installer FreeBSD sur un serveur Online avec MfsBSD</a></dd>
|
||||
<dd><a href='posts/freebsd-online-mfsbsd/'>Installer FreeBSD sur un serveur Online avec MfsBSD</a></dd>
|
||||
<dt>Fri 30 May 2014</dt>
|
||||
<dd><a href='posts/%D/SSL-ou-la-securite-sur-internet/'>SSL ou la sécurité sur l'internet</a></dd>
|
||||
<dd><a href='posts/SSL-ou-la-securite-sur-internet/'>SSL ou la sécurité sur l'internet</a></dd>
|
||||
<dt>Mon 24 February 2014</dt>
|
||||
<dd><a href='posts/%D/mise-en-place-dun-serveur-dns/'>Mise en place d'un serveur DNS</a></dd>
|
||||
<dd><a href='posts/mise-en-place-dun-serveur-dns/'>Mise en place d'un serveur DNS</a></dd>
|
||||
<dt>Mon 17 February 2014</dt>
|
||||
<dd><a href='posts/%D/nat/'>NAT</a></dd>
|
||||
<dd><a href='posts/nat/'>NAT</a></dd>
|
||||
<dt>Mon 09 September 2013</dt>
|
||||
<dd><a href='posts/%D/plan-9-from-whichever-space/'>Plan9 from whichever space</a></dd>
|
||||
<dd><a href='posts/plan-9-from-whichever-space/'>Plan9 from whichever space</a></dd>
|
||||
<dt>Sun 18 August 2013</dt>
|
||||
<dd><a href='posts/%D/sed-basics/'>Sed Basics</a></dd>
|
||||
<dd><a href='posts/sed-basics/'>Sed Basics</a></dd>
|
||||
<dt>Wed 10 July 2013</dt>
|
||||
<dd><a href='posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/'>Le chiffrement de partitions avec dm-crypt et device-mapper</a></dd>
|
||||
<dd><a href='posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/'>Le chiffrement de partitions avec dm-crypt et device-mapper</a></dd>
|
||||
<dt>Wed 12 June 2013</dt>
|
||||
<dd><a href='posts/%D/redesign-du-blog/'>Redesign du blog, etc</a></dd>
|
||||
<dd><a href='posts/redesign-du-blog/'>Redesign du blog, etc</a></dd>
|
||||
<dt>Mon 06 May 2013</dt>
|
||||
<dd><a href='posts/%D/comment-saurik-a-roote-les-google-glass/'>Comment Saurik a rooté les Google Glass</a></dd>
|
||||
<dd><a href='posts/comment-saurik-a-roote-les-google-glass/'>Comment Saurik a rooté les Google Glass</a></dd>
|
||||
<dt>Mon 18 March 2013</dt>
|
||||
<dd><a href='posts/%D/monter-son-propre-serveur-partie-1/'>Monter son propre serveur, partie 1: le serveur et l'apache.</a></dd>
|
||||
<dd><a href='posts/monter-son-propre-serveur-partie-1/'>Monter son propre serveur, partie 1: le serveur et l'apache.</a></dd>
|
||||
<dt>Mon 04 February 2013</dt>
|
||||
<dd><a href='posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/'>Pourquoi je vais quitter linux pour passer a FreeBSD.</a></dd>
|
||||
<dd><a href='posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/'>Pourquoi je vais quitter linux pour passer a FreeBSD.</a></dd>
|
||||
<dt>Sun 27 January 2013</dt>
|
||||
<dd><a href='posts/%D/update-et-pensees-a-propos-du-raspberry-pi/'>Update et pensées a propos du Raspberry Pi</a></dd>
|
||||
<dd><a href='posts/update-et-pensees-a-propos-du-raspberry-pi/'>Update et pensées a propos du Raspberry Pi</a></dd>
|
||||
<dt>Sat 05 January 2013</dt>
|
||||
<dd><a href='posts/%D/update/'>Update</a></dd>
|
||||
<dd><a href='posts/update/'>Update</a></dd>
|
||||
<dt>Wed 02 January 2013</dt>
|
||||
<dd><a href='posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/'>Mutt ou le client email le <del>meilleur</del> moins mauvais</a></dd>
|
||||
<dt>Thu 13 December 2012</dt>
|
||||
<dd><a href='posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/'>La séparation des églises et de l'état, une idée qu'elle est bonne?</a></dd>
|
||||
<dt>Mon 19 November 2012</dt>
|
||||
<dd><a href='posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/'>La cryptographie avec PGP et principalement GnuPG</a></dd>
|
||||
<dt>Mon 15 October 2012</dt>
|
||||
<dd><a href='posts/%D/linformatique-a-lecole/'>L'informatique a l'école</a></dd>
|
||||
<dt>Fri 05 October 2012</dt>
|
||||
<dd><a href='posts/%D/archlinux-made-simple/'>Archlinux made simple</a></dd>
|
||||
<dt>Tue 25 September 2012</dt>
|
||||
<dd><a href='posts/%D/les-systemes-de-fichiers/'>Les systèmes de fichiers</a></dd>
|
||||
<dt>Tue 18 September 2012</dt>
|
||||
<dd><a href='posts/%D/le-quenya-episode-o/'>Le Quenya - Épisode ø</a></dd>
|
||||
<dt>Tue 18 September 2012</dt>
|
||||
<dd><a href='posts/%D/update-a-propos-du-blog/'>Update a propos du blog</a></dd>
|
||||
<dt>Sat 08 September 2012</dt>
|
||||
<dd><a href='posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/'>Introduction a bash en tant que language de programmation.</a></dd>
|
||||
<dt>Thu 06 September 2012</dt>
|
||||
<dd><a href='posts/%D/les-differentes-couches-dun-systeme-dexploitation/'>Les différentes couches d'un système d'exploitation</a></dd>
|
||||
<dt>Mon 27 August 2012</dt>
|
||||
<dd><a href='posts/%D/la-programmation-expliquee-simplement/'>La programmation expliquée simplement</a></dd>
|
||||
<dt>Wed 22 August 2012</dt>
|
||||
<dd><a href='posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/'>GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère</a></dd>
|
||||
<dt>Sat 18 August 2012</dt>
|
||||
<dd><a href='posts/%D/debuts-presentation-etc/'>Débuts, présentation, etc...</a></dd>
|
||||
<dd><a href='posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/'>Mutt ou le client email le <del>meilleur</del> moins mauvais</a></dd>
|
||||
</dl>
|
||||
</section>
|
||||
</div><!--/span-->
|
||||
@ -153,13 +139,8 @@
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/language/">
|
||||
<i class="icon-folder-open icon-large"></i>Language
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/notes/">
|
||||
<i class="icon-folder-open icon-large"></i>Notes
|
||||
<a href="//wxcafe.net/category/note/">
|
||||
<i class="icon-folder-open icon-large"></i>Note
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
@ -167,31 +148,21 @@
|
||||
<i class="icon-folder-open icon-large"></i>OSes
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/programmation/">
|
||||
<i class="icon-folder-open icon-large"></i>Programmation
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/ranting/">
|
||||
<i class="icon-folder-open icon-large"></i>Ranting
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/teaching/">
|
||||
<i class="icon-folder-open icon-large"></i>Teaching
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/tutorial/">
|
||||
<i class="icon-folder-open icon-large"></i>Tutorial
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/tutoriel/">
|
||||
<i class="icon-folder-open icon-large"></i>Tutoriel
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/vidya-games/">
|
||||
<i class="icon-folder-open icon-large"></i>Vidya Games
|
||||
</a>
|
||||
</li>
|
||||
<hr>
|
||||
|
||||
<!-- Social links -->
|
||||
@ -210,16 +181,14 @@
|
||||
<li><a href="https://twitter.com/wxcafe"><i class="icon-twitter icon-large"></i> Twitter</a></li>
|
||||
<li><a href="https://github.com/wxcafe"><i class="icon-github icon-large"></i> Github</a></li>
|
||||
<li><a href="mailto://wxcafe@wxcafe.net"><i class="icon-envelope icon-large"></i> Email</a></li>
|
||||
<li><a href="https://data.wxcafe.net/wxcafe.asc"><i class="icon-key icon-large"></i> Gpg</a></li>
|
||||
<li><a href="finger://wxcafe@wxcafe.net"><i class="icon-terminal icon-large"></i> Finger</a></li>
|
||||
<li><a href="http://leloop.org/where.html"><i class="icon-map-marker icon-large"></i> IRL</a></li>
|
||||
<li><a href="https://pub.wxcafe.net/wxcafe.asc"><i class="icon-key icon-large"></i> Gpg</a></li>
|
||||
<li><a href="https://www.openstreetmap.org/relation/105146"><i class="icon-map-marker icon-large"></i> IRL</a></li>
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Links -->
|
||||
<li class="nav-header"><h4><i class="icon-external-link"></i> Links</h4></li>
|
||||
<li><a href="https://github.com/wxcafe/blog-source"><i class="icon-code icon-large "></i> Source!</a></li>
|
||||
<li><a href="http://paste.wxcafe.net"><i class="icon-paste icon-large "></i> Zerobin</a></li>
|
||||
<li><a href="http://git.wxcafe.net"><i class="icon-github-sign icon-large "></i> Public Git</a></li>
|
||||
<hr>
|
||||
|
||||
|
||||
@ -7,7 +7,9 @@
|
||||
<meta name="author" content="wxcafé">
|
||||
<link rel="icon" type="image/png" href="//wxcafe.net/theme/img/favicon.ico">
|
||||
<!-- Le styles -->
|
||||
<link rel="stylesheet" href="//wxcafe.net/theme/css/extra.css" type="text/css" />
|
||||
<link rel="stylesheet" href="//wxcafe.net/theme/css/bootstrap.css" type="text/css" />
|
||||
<link href='http://fonts.googleapis.com/css?family=Oswald&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
<script type="text/javascript">
|
||||
/* <![CDATA[ */
|
||||
(function() {
|
||||
@ -61,7 +63,7 @@
|
||||
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
<a class="brand" href="//wxcafe.net/index.html">Wxcafé </a>
|
||||
<div class="nav-collapse">
|
||||
@ -81,7 +83,368 @@
|
||||
<div class="row">
|
||||
<div class="span9" id="content">
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/opensmtpd-debian/">OpenSMTPd comme serveur mail sous debian</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/nuc-hdmi-cec/">les NUCs et le HDMI-CEC</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2015-08-22T02:43:00+02:00">
|
||||
<i class="icon-calendar"></i> Sat 22 August 2015
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>J’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 “profiter” 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…) simplement.</p>
|
||||
<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j’ai
|
||||
décidé d’installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça
|
||||
donnait. Le résultat n’étant pas satisfaisant (a cause des difficultés du RPi
|
||||
a faire fonctionner tout ça), j’ai décidé d’upgrader le système.</p>
|
||||
<p>J’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’autre
|
||||
avantage de tourner sur du Intel, c’est de pouvoir mater Netflix (puisque le
|
||||
plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que
|
||||
sur x86).</p>
|
||||
<p>J’ai donc reçu après un certain temps le matériel sus cité, que j’ai avidement
|
||||
monté, avant de me rendre compte que le manuel de l’adaptateur Pulse-Eight était
|
||||
[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J’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’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’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
|
||||
“Front Panel”, et un appelé “Custom Solution Header”. 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’est plus
|
||||
facile, puisqu’il n’y a qu’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 “Deep S4/S5” 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’a installer un système digne de ce nom dessus!</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/ssl-starttls/">SSL - STARTTLS</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2015-05-16T02:00:00+02:00">
|
||||
<i class="icon-calendar"></i> Sat 16 May 2015
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Le chiffrement SSL pour les services en ligne est un problème relativement
|
||||
récent, par rapport a l’histoire d’Internet. Sa mise en place pose
|
||||
problème : les protocoles existants ne s’accommodent qu’assez mal de recevoir
|
||||
soudainement un flot de données chiffrées, mais développer de nouveaux
|
||||
protocoles est complexe et n’apporte rien d’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’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’autre approche qui a été utilisée est une approche d’<em>upgrade</em>. La
|
||||
communication commence en mode non chiffré, puis le client demande l’upgrade de
|
||||
la connexion vers le mode chiffré s’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 “mise
|
||||
a jour” en douceur.</p>
|
||||
<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un
|
||||
service – 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’abord, il permet de n’utiliser qu’un seul port : ça permet de simplifier la
|
||||
configuration du firewall. En plus de ça, il permet aux clients “anciens” (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’éviter aux utilisateurs d’avoir a configurer leurs
|
||||
clients. Si le client supporte le chiffrement, il l’activera de lui même s’il
|
||||
voit qu’il est disponible.<br />
|
||||
Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C’est mieux pour la sécurité
|
||||
de tout le monde.</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/hori-vs-pdp/">Manettes : Hori vs. PDP</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2015-04-19T21:59:00+02:00">
|
||||
<i class="icon-calendar"></i> Sun 19 April 2015
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/vidya-games/"><i class="icon-folder-open"></i>Vidya Games</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus
|
||||
compte de quelques petits trucs : tout d’abord, Smash est bien plus drôle
|
||||
a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de “choses”
|
||||
: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro
|
||||
Controllers pour Wii et Wii U, et d’autres. Vous aurez aussi remarqué que le
|
||||
Gamepad n’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, “ouvert” 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’adaptateur GC pour Wii
|
||||
U</a>
|
||||
a votre console. </p>
|
||||
<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d’habitude
|
||||
avec Nintendo, c’est une solution a moitié satisfaisante…) : 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’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’est logique puisque c’est comme ça que les
|
||||
classic controller sont faits, mais c’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’assemblage n’est pas extraordinaire, et on
|
||||
remarque une soudure mal faite a l’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’est pas fixé au reste de la manette.
|
||||
J’ai essayé de démonter plus avant les différentes parties de la manette, mais
|
||||
les câbles n’avaient pas l’air de très bonne qualité, et j’ai préféré abandonner
|
||||
l’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’une Wiimote entière la dedans…</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’œ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’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’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…</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’avez deviné, ces deux “cartes filles” servent en réalité de connecteurs
|
||||
aux boutons situés sur les gâchettes, qui sont de “vraies” gâchettes en cela
|
||||
qu’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’aurez compris, je préfère la version PDP de ces “Fight Pad”, 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></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/">Docker et les ebooks sur Twitter</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2015-02-28T14:11:00+01:00">
|
||||
<i class="icon-calendar"></i> Sat 28 February 2015
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si
|
||||
ce n’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’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’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’avoir une machine hôte sur laquelle s’exécutent plusieurs
|
||||
conteneurs Dockers, chacun séparé des autres et de l’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’avec de la virtualisation classique. En effet,
|
||||
ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la
|
||||
capacité de remonter jusqu’à l’hôte, puisqu’il n’est pas vraiment séparé des
|
||||
invités. </p>
|
||||
<p>Quoi qu’il en soit, Docker permet donc de virtualiser a moindre coût des
|
||||
systèmes GNU/Linux. “Mais pourquoi utiliser Docker, dans ce cas”, vous
|
||||
demandez-vous peut être, “puisque Xen peut faire la même chose, et plus
|
||||
(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?”. Et bien
|
||||
c’est très simple : Docker apporte la simplicité de déploiement d’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’images déjà configurées. </p>
|
||||
<p>Maintenant que nous avons expliqué rapidement ce qu’était Docker, voyons le
|
||||
rapport avec les ebooks et Twitter.</p>
|
||||
<p>Les comptes dits “ebooks” (le nom vient a l’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’un utilisateur “source” comme corpus, pour produire des tweets
|
||||
ressemblant a ceux de l’utilisateur source. Nous allons voir maintenant comment
|
||||
en installer un.</p>
|
||||
<p>C’est, comme disent certaines personnes, “fun”.</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’API
|
||||
twitter et la génération des messages.</p>
|
||||
<p>Cependant, cela n’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’isoler les bots, et les
|
||||
containers dockers permettent de les déployer sur n’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’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’utilisateur source avec <code>ebooks archive <username> <filename></code> (c’est du json)
|
||||
, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks
|
||||
consume <filename></code>. Cela fait, démarrer le bot revient a lancer le container :
|
||||
<code>docker run -d <container name></code> Pour plus d’informations, allez voir <a href="https://docs.docker.com/articles/basics/">la
|
||||
documentation Docker</a></p>
|
||||
<p>Bien entendu, dans l’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 >> /var/log/ebooks/update.log 2>&1
|
||||
00 05 * * * cd /usr/local/ebooks/main/ && /usr/local/bin/ebooks consume corpus/username.json >> /var/log/ebooks/update.log 2>&1
|
||||
00 10 * * * docker rm -f bots >/dev/null 2>&1
|
||||
00 15 * * * docker rmi bots > /dev/null 2>&1
|
||||
00 20 * * * cd /usr/local/ebooks/main/ && docker build --rm -t bots . >> /var/log/ebooks/build.log 2>&1
|
||||
00 25 * * * docker run -d --name bots bots >> /var/log/ebooks/run.log 2>&1
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux
|
||||
commandes ne s’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’est qu’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 “usuelles”
|
||||
dedans</a>,
|
||||
puisque l’overhead de Docker est minimal, et beaucoup d’autres applications
|
||||
existent.</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/opensmtpd-debian/">OpenSMTPd comme serveur mail sous debian</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2014-11-07T13:04:00+01:00">
|
||||
@ -92,269 +455,267 @@
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafé</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/tutorial/"><i class="icon-folder-open"></i>Tutorial</a>
|
||||
<a href="//wxcafe.net/category/tutoriel/"><i class="icon-folder-open"></i>Tutoriel</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant
|
||||
comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de
|
||||
<div class="summary"><p>J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant
|
||||
comment gérer ses mails soi-même. Il se trouve que j’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'ai donc totalement changé d'infrastructure quand a la
|
||||
aussi mes emails. J’ai donc totalement changé d’infrastructure quand a la
|
||||
gestion de mon système de mails.</p>
|
||||
<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais
|
||||
<p>Ainsi, j’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'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un
|
||||
projet originaire d’<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'a le projet OpenBSD, globalement).</p>
|
||||
<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA
|
||||
qu’a le projet OpenBSD, globalement).</p>
|
||||
<p>Pour rappel, le système d’emails fonctionne d’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'ai pas parlé de récupération
|
||||
ni de lecture des mails. C'est pour une raison simple, qui est que ces taches
|
||||
sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis
|
||||
<p>Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération
|
||||
ni de lecture des mails. C’est pour une raison simple, qui est que ces taches
|
||||
sont remplies par d’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'est pas simplement d'envoyer et de recevoir
|
||||
des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour
|
||||
ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de
|
||||
<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et
|
||||
<p>Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir
|
||||
des emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour
|
||||
ça que ce tutoriel ne parlera pas que d’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="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span>
|
||||
<span class="err">│╭──────────────</span><span class="o">></span><span class="err">│────</span><span class="o">></span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">></span><span class="err">│─╮</span> <span class="err">│</span>
|
||||
<span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span>
|
||||
<span class="err">───────────</span><span class="o">></span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o"><</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o"><</span><span class="err">───│</span><span class="o"><</span><span class="err">╯</span> <span class="err">│</span>
|
||||
<span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span>
|
||||
<span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span>
|
||||
<span class="o"><</span><span class="err">───────────│</span><span class="o"><</span><span class="err">────────────┴─</span><span class="o">></span><span class="err">│─────</span><span class="o">></span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">></span><span class="err">│─────────</span><span class="o">></span><span class="err">│──</span><span class="o">></span> <span class="n">to</span> <span class="n">user</span><span class="err">'</span><span class="n">s</span>
|
||||
<span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span>
|
||||
<span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮
|
||||
│╭──────────────>│────> to filter ───>│─╮ │
|
||||
mail in ││ │ │ │ amavis │
|
||||
───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │
|
||||
│ │ │ ╰──────────╯
|
||||
mail out │ │ │ ╭──────────╮
|
||||
<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user'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'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'exterieur, et qui signe avec DKIM pour les mails venants de
|
||||
aussi d’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’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'abord, il faut décider de la façon
|
||||
<p>Voyons comment mettre cela en place. Tout d’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'agit de filtrer et
|
||||
écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de
|
||||
10024 et répondre sur le port 10025 quand il s’agit de filtrer et
|
||||
écouter sur le port 10026 et répondre sur le port 10027 quand il s’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="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span>
|
||||
<span class="err">│╭─────────────</span><span class="o">></span><span class="err">│──</span><span class="o">></span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">></span><span class="err">│─╮</span> <span class="err">│</span>
|
||||
<span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span>
|
||||
<span class="err">────────</span><span class="o">></span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o"><</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o"><</span><span class="err">──│</span><span class="o"><</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span>
|
||||
<span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span>
|
||||
<span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span>
|
||||
<span class="mi">25</span> <span class="o"><</span><span class="err">────────│</span><span class="o"><</span><span class="err">───────────╯</span> <span class="err">│</span>
|
||||
<span class="err">╰───────────────╯</span>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮
|
||||
│╭─────────────>│──> SMTP (10026) ──>│─╮ │
|
||||
SMTP in ││ │ │ │ amavis │
|
||||
────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │
|
||||
│ │ │ ╰───────────╯
|
||||
SMTP out │ │ │
|
||||
25 <────────│<───────────╯ │
|
||||
╰───────────────╯
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Pour les mails sortants; et</p>
|
||||
<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span>
|
||||
<span class="err">│╭─────────────</span><span class="o">></span><span class="err">│──</span><span class="o">></span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">></span><span class="err">│─╮</span> <span class="err">│</span>
|
||||
<span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span>
|
||||
<span class="err">────────</span><span class="o">></span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o"><</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o"><</span><span class="err">──│</span><span class="o"><</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span>
|
||||
<span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span>
|
||||
<span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span>
|
||||
<span class="err">│</span> <span class="err">╰─</span><span class="o">></span><span class="err">│──</span><span class="o">></span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">></span><span class="err">│───────────</span><span class="o">></span><span class="err">│──</span><span class="o">></span> <span class="n">to</span> <span class="n">user</span><span class="err">'</span><span class="n">s</span>
|
||||
<span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span>
|
||||
<span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮
|
||||
│╭─────────────>│──> SMTP (10024) ──>│─╮ │
|
||||
SMTP in ││ │ │ │ amavis │
|
||||
────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │
|
||||
│ │ │ ╰────────────╯
|
||||
│ │ │ ╭────────────╮
|
||||
│ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user'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'autres plateformes, la configuration devrait être sensiblement la même</p>
|
||||
<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés.
|
||||
d’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'abord, commençons par installer les programmes nécessaires :</p>
|
||||
<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span>
|
||||
<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span>
|
||||
<p>Tout d’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="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span>
|
||||
<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span>
|
||||
<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 class="err">##</span> <span class="nx">Certs</span>
|
||||
<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">"/etc/certs/exem.pl.crt"</span>
|
||||
<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">"/etc/certs/exem.pl.key"</span>
|
||||
<span style="color: #75715e">## Certs</span>
|
||||
pki exem.pl certificate <span style="color: #e6db74">"/etc/certs/exem.pl.crt"</span>
|
||||
pki exem.pl key <span style="color: #e6db74">"/etc/certs/exem.pl.key"</span>
|
||||
|
||||
<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span>
|
||||
<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span>
|
||||
<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span>
|
||||
<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</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 class="err">##</span> <span class="nx">Aliases</span>
|
||||
<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span>
|
||||
<span style="color: #75715e">## Aliases</span>
|
||||
table aliases file:/etc/aliases
|
||||
|
||||
<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span>
|
||||
<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span>
|
||||
<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span>
|
||||
<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span>
|
||||
<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 class="err">##</span> <span class="nx">Receiving</span>
|
||||
<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span>
|
||||
<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o"><</span><span class="nx">aliases</span><span class="o">></span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">"/var/run/dovecot/lmtp"</span>
|
||||
<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span>
|
||||
<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">"exem.pl"</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">"smtp://localhost:10024"</span>
|
||||
<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span>
|
||||
<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> <aliases> deliver to lmtp <span style="color: #e6db74">"/var/run/dovecot/lmtp"</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">"exem.pl"</span> relay via <span style="color: #e6db74">"smtp://localhost:10024"</span>
|
||||
<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span>
|
||||
|
||||
<span class="err">##</span> <span class="nx">Sending</span>
|
||||
<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span>
|
||||
<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span>
|
||||
<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span>
|
||||
<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">"smtp://localhost:10026"</span>
|
||||
<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">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">"smtp://localhost:10026"</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'abord, le paragraphe nommé "Certs" contient les déclaration
|
||||
d'emplacement des certificats SSL.</li>
|
||||
<li>Tout d’abord, le paragraphe nommé “Certs” contient les déclaration
|
||||
d’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 "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on
|
||||
taggue les mails sortants comme "Signed"</li>
|
||||
comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on
|
||||
taggue les mails sortants comme “Signed”</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'est qu'il n'a pas encore
|
||||
peut donc le transmettre au destinataire. Sinon, c’est qu’il n’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'état du paquet est appliquée. Ici, la deuxième
|
||||
première règle qui matche l’é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'a pas encore été signé par
|
||||
DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le
|
||||
problème de l'ordre des lignes se pose encore, pour la même raison qu'au
|
||||
on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par
|
||||
DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le
|
||||
problème de l’ordre des lignes se pose encore, pour la même raison qu’au
|
||||
dessus.</li>
|
||||
</ul>
|
||||
<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit
|
||||
<p>Nous allons maintenant configurer dovecot. Comme nous l’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'utilisateur. Il serait aussi interessant
|
||||
qu'il nous permette de récuperer les mails. Pour cette configuration, on ne
|
||||
emails a la boite email de l’utilisateur. Il serait aussi interessant
|
||||
qu’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="highlight"><pre><span class="cp">## Dovecot configuration file</span>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span>
|
||||
|
||||
<span class="cp"># basic config</span>
|
||||
<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span>
|
||||
<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span>
|
||||
<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">"%Y-%m-%d %H:%M:%S "</span>
|
||||
<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</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">"%Y-%m-%d %H:%M:%S "</span>
|
||||
<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail
|
||||
|
||||
<span class="cp"># authentication</span>
|
||||
<span class="n">passdb</span> <span class="p">{</span>
|
||||
<span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span>
|
||||
<span class="p">}</span>
|
||||
<span class="n">userdb</span> <span class="p">{</span>
|
||||
<span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span>
|
||||
<span class="p">}</span>
|
||||
<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 class="cp"># the protocols we use</span>
|
||||
<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</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 class="cp"># ssl config</span>
|
||||
<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o"></</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span>
|
||||
<span class="n">ssl_key</span> <span class="o">=</span> <span class="o"></</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span>
|
||||
<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span>
|
||||
<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span style="color: #75715e"># ssl config</span>
|
||||
<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> </etc/certs/exem.pl.cert
|
||||
<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </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 class="cp">## configuring services </span>
|
||||
<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span>
|
||||
<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span>
|
||||
<span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span>
|
||||
<span class="n">port</span><span class="o">=</span><span class="mi">0</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
<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>
|
||||
|
||||
<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span>
|
||||
<span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span>
|
||||
<span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</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 class="cp">## configuring protocols</span>
|
||||
<span class="cp"># the dovecot lda, we set it to use sieve</span>
|
||||
<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span>
|
||||
<span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span>
|
||||
<span class="p">}</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>
|
||||
|
||||
<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span>
|
||||
<span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span>
|
||||
<span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span>
|
||||
<span class="p">}</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>
|
||||
|
||||
<span class="n">plugin</span> <span class="p">{</span>
|
||||
<span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span>
|
||||
<span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span>
|
||||
<span class="p">}</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="highlight"><pre><span class="n">passdb</span> <span class="p">{</span>
|
||||
<span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span>
|
||||
<span class="p">}</span>
|
||||
<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="highlight"><pre><span class="n">passdb</span> <span class="p">{</span>
|
||||
<span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span>
|
||||
<span class="p">}</span>
|
||||
<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'abord, les configurations de base : ou iront les logs, comment formater
|
||||
leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li>
|
||||
<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs.
|
||||
<li>Tout d’abord, les configurations de base : ou iront les logs, comment formater
|
||||
leur datation, et l’endroit ou seront stockés les mails des utilisateurs.</li>
|
||||
<li>Nous configurons ensuite la gestion de l’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'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li>
|
||||
l’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'activer IMAPS qu'en activant
|
||||
IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons.
|
||||
désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant
|
||||
IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.
|
||||
La configuration de lmtp sert a attribuer des permissions plus correctes au
|
||||
fifo qu'il utilise</li>
|
||||
fifo qu’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>
|
||||
@ -363,101 +724,100 @@ POP3[s], différents guides sont trouvables facilement sur internet.</p>
|
||||
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'y a aucun
|
||||
SMTP. Comme toutes les transactions se font sur le loopback, il n’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
|
||||
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="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span>
|
||||
|
||||
<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
|
||||
<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
|
||||
<span class="n">dkim_key</span><span class="p">(</span><span class="s">"exem.pl"</span><span class="p">,</span> <span class="s">"main"</span><span class="p">,</span> <span class="s">"/etc/certs/dkim.key"</span> <span class="p">);</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">"exem.pl"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"main"</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">"/etc/certs/dkim.key"</span> <span style="color: #f8f8f2">);</span>
|
||||
|
||||
<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="p">{</span> <span class="sc">'.'</span> <span class="o">=></span>
|
||||
<span class="p">{</span> <span class="n">ttl</span> <span class="o">=></span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=></span> <span class="err">'</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">'</span> <span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">);</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">'.'</span> <span style="color: #f92672">=></span>
|
||||
<span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=></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">=></span> <span style="color: #e6db74">'relaxed/simple'</span> <span style="color: #f8f8f2">}</span>
|
||||
<span style="color: #f8f8f2">}</span>
|
||||
<span style="color: #f8f8f2">);</span>
|
||||
|
||||
<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span>
|
||||
<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">'</span><span class="n">MYNETS</span><span class="err">'</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">originating</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="n">os_fingerprint_method</span> <span class="o">=></span> <span class="n">undef</span><span class="p">,</span>
|
||||
<span class="p">};</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">'MYNETS'</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">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
||||
<span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">undef,</span>
|
||||
<span style="color: #f8f8f2">};</span>
|
||||
|
||||
<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">'</span><span class="mi">10026</span><span class="err">'</span><span class="p">}</span> <span class="o">=</span> <span class="err">'</span><span class="n">ORIGINATING</span><span class="err">'</span><span class="p">;</span>
|
||||
<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">'10026'</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">'ORIGINATING'</span><span style="color: #f8f8f2">;</span>
|
||||
|
||||
<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">'</span><span class="n">ORIGINATING</span><span class="err">'</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">originating</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="n">allow_disclaimers</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="n">virus_admin_maps</span> <span class="o">=></span> <span class="p">[</span><span class="s">"root\@$mydomain"</span><span class="p">],</span>
|
||||
<span class="n">spam_admin_maps</span> <span class="o">=></span> <span class="p">[</span><span class="s">"root\@$mydomain"</span><span class="p">],</span>
|
||||
<span class="n">warnbadhsender</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span>
|
||||
<span class="n">forward_method</span> <span class="o">=></span> <span class="err">'</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">'</span><span class="p">,</span>
|
||||
<span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=></span> <span class="p">[</span><span class="err">'</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">'</span><span class="p">],</span>
|
||||
<span class="n">bypass_banned_checks_maps</span> <span class="o">=></span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span>
|
||||
<span class="n">terminate_dsn_on_notify_success</span> <span class="o">=></span> <span class="mi">0</span><span class="p">,</span>
|
||||
<span class="p">};</span>
|
||||
<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">'ORIGINATING'</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">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
||||
<span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
||||
<span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
|
||||
<span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">"root\@$mydomain"</span><span style="color: #f8f8f2">],</span>
|
||||
<span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=></span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span>
|
||||
<span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=></span> <span style="color: #e6db74">'smtp:localhost:10027'</span><span style="color: #f8f8f2">,</span>
|
||||
<span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=></span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">'8BITMIME'</span><span style="color: #f8f8f2">],</span>
|
||||
<span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=></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">=></span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span>
|
||||
<span style="color: #f8f8f2">};</span>
|
||||
|
||||
<span class="cp">#------------ Do not modify anything below this line -------------</span>
|
||||
<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</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'amavis signe les emails
|
||||
sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se
|
||||
- le premier paragraphe définit que nous voulons qu’amavis signe les emails
|
||||
sortants, vérifie la signature DKIM des emails rentrants, et l’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 "originating" et nous ne vérifierons pas l'OS duquel
|
||||
ils seront traités comme “originating” et nous ne vérifierons pas l’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'abord, nous réaffirmons qu'ils viennent bien de notre
|
||||
sortants : tout d’abord, nous réaffirmons qu’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'adresse a
|
||||
4871</a>. Nous déclarons l’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'il est nécessaire de convertir les emails au format 7 bits avant de
|
||||
puis qu’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'envoi. Et voila!</p>
|
||||
<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature
|
||||
les notifications de succès d’envoi. Et voila!</p>
|
||||
<p>Vous avez pu remarquer qu’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'abord, il nous faut générer notre clé DKIM. Pour cela, il existe
|
||||
différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un
|
||||
Tout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe
|
||||
différentes méthodes, j’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="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span>
|
||||
<span class="cp"># report_safe 1</span>
|
||||
<span class="n">required_score</span> <span class="mf">2.0</span>
|
||||
<span class="cp"># use_bayes 1</span>
|
||||
<span class="cp"># bayes_auto_learn 1</span>
|
||||
<span class="cp"># bayes_ignore_header X-Bogosity</span>
|
||||
<span class="cp"># bayes_ignore_header X-Spam-Flag</span>
|
||||
<span class="cp"># bayes_ignore_header X-Spam-Status</span>
|
||||
<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span>
|
||||
<span class="cp"># shortcircuit USER_IN_WHITELIST on</span>
|
||||
<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span>
|
||||
<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span>
|
||||
<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span>
|
||||
<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span>
|
||||
<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span>
|
||||
<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span>
|
||||
<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span>
|
||||
<span class="cp"># shortcircuit BAYES_99 spam</span>
|
||||
<span class="cp"># shortcircuit BAYES_00 ham</span>
|
||||
<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 class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span>
|
||||
<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
@ -465,11 +825,11 @@ Il nous reste encore a configurer spamassassin :</p>
|
||||
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...</p></div>
|
||||
<p>Bon courage pour votre hosting de mail ensuite…</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/freebsd-online-mfsbsd/">Installer FreeBSD sur un serveur Online avec MfsBSD</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/freebsd-online-mfsbsd/">Installer FreeBSD sur un serveur Online avec MfsBSD</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2014-08-28T12:16:00+02:00">
|
||||
@ -487,44 +847,43 @@ spamassassin, et tout devrait fonctionner parfaitement</p>
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad)
|
||||
<div class="summary"><p>J’ai récemment eu l’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'ayant pour différentes raisons pas eu l'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'ai commencé a chercher comment le faire sur ce serveur.</p>
|
||||
<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu
|
||||
et n’ayant pour différentes raisons pas eu l’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’ai commencé a chercher comment le faire sur ce serveur.</p>
|
||||
<p>Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’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'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
|
||||
<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
|
||||
ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur
|
||||
d’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p>
|
||||
<p>J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),
|
||||
ou l’on m’a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d’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'image
|
||||
panel Online. Une fois cela fait, lancez une console, puis téléchargez l’image
|
||||
mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis
|
||||
choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
|
||||
sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout
|
||||
choisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter
|
||||
sur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout
|
||||
a fait classique va démarrer. Une fois ceci fait, la partie importante arrive:
|
||||
mfsbsd contient un script d'installation root-on-zfs, nommé logiquement
|
||||
mfsbsd contient un script d’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="highlight"><pre><span class="cp"># tout d'abord, wipons le MBR :</span>
|
||||
<span class="n">dd</span> <span class="o"><</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">></span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span>
|
||||
<span class="cp"># maintenant, installons le système</span>
|
||||
<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d'abord, wipons le MBR :</span>
|
||||
dd < /dev/zero > /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'autres options
|
||||
<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D’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="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">"YES"</span>
|
||||
<span class="n">sshd_load</span><span class="o">=</span><span class="s">"YES</span>
|
||||
<span class="n">hostname</span><span class="o">=</span><span class="s">"whatever"</span>
|
||||
<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">"DHCP"</span>
|
||||
<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">"YES"</span>
|
||||
<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">"YES</span>
|
||||
<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">"whatever"</span>
|
||||
<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">"DHCP"</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
@ -532,11 +891,10 @@ système) et éditez /etc/rc.conf :</p>
|
||||
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'est la fin de ce tutoriel.
|
||||
(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu
|
||||
<p>Voila, c’est la fin de ce tutoriel.
|
||||
(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu
|
||||
crédible, disons)</p>
|
||||
<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter
|
||||
<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>,
|
||||
<p>Bon sinon sur d’autres sujets, j’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>,
|
||||
@ -548,7 +906,7 @@ code</a>, qui vient de
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/SSL-ou-la-securite-sur-internet/">SSL ou la sécurité sur l'internet</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/">SSL ou la sécurité sur l'internet</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2014-05-30T08:25:00+02:00">
|
||||
@ -559,7 +917,7 @@ code</a>, qui vient de
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/notes/"><i class="icon-folder-open"></i>Notes</a>
|
||||
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
||||
<br />
|
||||
|
||||
|
||||
@ -570,146 +928,146 @@ code</a>, qui vient de
|
||||
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'effet de rendre légèrement parano. Si vous considérez que
|
||||
c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès
|
||||
ce qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que
|
||||
c’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'un endroit particulier du corps de l'admin/auteur de ce "blog",
|
||||
doigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,
|
||||
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'un système
|
||||
du fonctionnement de SSL, et les 10 nécessaires a la mise en place d’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'est très
|
||||
être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’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... Bref, un certificat
|
||||
<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc… Bref, un certificat
|
||||
différent pour chaque sous-domaine.</p>
|
||||
<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs
|
||||
<p>Il s’avère que c’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'erreur, etc) et pas plus
|
||||
sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat
|
||||
changement de sous-domaine conduit a un message d’erreur, etc) et pas plus
|
||||
sécurisé que d’avoir un seul certificat wildcard. J’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é... bah pour <code>wxcafe.net</code>.</p>
|
||||
pas <code>*.wxcafe.net</code>, et qui sera donc utilisé… 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'arrivée sur le site ne commence pas
|
||||
par une page firefox disant "Something's Wrong!", et ces redirections ne seront
|
||||
self-signed, il me semble préférable que l’arrivée sur le site ne commence pas
|
||||
par une page firefox disant “Something’s Wrong!”, et ces redirections ne seront
|
||||
donc pas mises en place.</p>
|
||||
<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus
|
||||
<p>De plus, après la lecture de l’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'est a dire que, même si
|
||||
quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les
|
||||
communications avec ce serveur soient future-proof, c’est a dire que, même si
|
||||
quelqu’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'implémentation : <br />
|
||||
Pour générer la clé, tout d'abord, il convient d'utiliser les commandes
|
||||
l’implémentation : <br />
|
||||
Pour générer la clé, tout d’abord, il convient d’utiliser les commandes
|
||||
suivantes: </p>
|
||||
<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span>
|
||||
<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span>
|
||||
<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span>
|
||||
<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, "Common Name" devant contenir le FQDN</span>
|
||||
<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span>
|
||||
<span class="cp"># enfin, nous générons la clé, d'une durée de vie de 3 ans</span>
|
||||
<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">"Common Name"</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">'</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'utiliser, et
|
||||
de n'utiliser que des ciphers PFS. La méthode dépend donc du service.
|
||||
Je vais lister ici les methodes pour quelques services que j'utilise :</p>
|
||||
Une fois la clé générée, il faut dire aux différents services de l’utiliser, et
|
||||
de n’utiliser que des ciphers PFS. La méthode dépend donc du service.
|
||||
Je vais lister ici les methodes pour quelques services que j’utilise :</p>
|
||||
<h3>apache :</h3>
|
||||
<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span>
|
||||
<span class="cp"># [...]</span>
|
||||
<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span>
|
||||
<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span>
|
||||
<span class="n">SSLCipherSuite</span> <span class="s">"EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span>
|
||||
<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span>
|
||||
<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"</span>
|
||||
<span class="cp"># [...]</span>
|
||||
<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span>
|
||||
<span class="cp"># [...]</span>
|
||||
<span class="n">SSLEngine</span> <span class="n">on</span>
|
||||
<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span>
|
||||
<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span>
|
||||
<span class="cp"># [...]</span>
|
||||
<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">"</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">"</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="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span>
|
||||
<span class="cp"># [...]</span>
|
||||
<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span>
|
||||
<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span>
|
||||
<span class="n">ssl_ciphers</span> <span class="s">"EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span>
|
||||
<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span>
|
||||
<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"</span><span class="p">;</span>
|
||||
<span class="cp"># [...]</span>
|
||||
<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span>
|
||||
<span class="cp"># [...]</span>
|
||||
<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span>
|
||||
<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span>
|
||||
<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span>
|
||||
<span class="cp"># [...]</span>
|
||||
<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">"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"</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="highlight"><pre><span class="cp"># tout d'abord, lancez la commande suivante :</span>
|
||||
<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span>
|
||||
<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span>
|
||||
<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">dhparam</span> <span class="o">=</span> <span class="s">"/etc/prosody/certs/dh-2048.pem"</span><span class="p">;</span>
|
||||
<span class="n">key</span> <span class="o">=</span> <span class="s">"/etc/certs/example.com.key"</span><span class="p">;</span>
|
||||
<span class="n">certificate</span> <span class="o">=</span> <span class="s">"/etc/certs/example.com.crt"</span><span class="p">;</span>
|
||||
<span class="p">}</span>
|
||||
<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span>
|
||||
<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">'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">"/etc/prosody/certs/dh-2048.pem"</span><span style="color: #f8f8f2">;</span>
|
||||
<span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.key"</span><span style="color: #f8f8f2">;</span>
|
||||
<span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">"/etc/certs/example.com.crt"</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="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span>
|
||||
<span class="cp"># [...]</span>
|
||||
<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span>
|
||||
<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span>
|
||||
<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span>
|
||||
<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span>
|
||||
<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span>
|
||||
<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span>
|
||||
<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span>
|
||||
<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span class="cp"># [...]</span>
|
||||
<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="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span>
|
||||
<span class="cp"># [...]</span>
|
||||
<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o"></</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span>
|
||||
<span class="n">ssl_key</span> <span class="o">=</span> <span class="o"></</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span>
|
||||
<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span>
|
||||
<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> </etc/certs/example.com.crt
|
||||
<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> </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'autres protocoles/services, je vous invite a RTFM^W vous reporter
|
||||
<p>Voila. Pour d’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'aller voir la conférence dans le
|
||||
disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future
|
||||
<p>Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le
|
||||
disclaimer, et tant qu’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'une technologie "remplaçant" le système de CAs qui existe
|
||||
implémentation d’une technologie “remplaçant” le système de CAs qui existe
|
||||
actuellement.</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/mise-en-place-dun-serveur-dns/">Mise en place d'un serveur DNS</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/mise-en-place-dun-serveur-dns/">Mise en place d'un serveur DNS</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2014-02-24T02:49:00+01:00">
|
||||
@ -735,54 +1093,53 @@ 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'époque
|
||||
en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que
|
||||
<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque
|
||||
en termes d’expérience utilisateur n’é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'abord, une petite explication théorique. Le DNS fonctionne de la même
|
||||
<p>Tout d’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'é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'est pas obligatoire et la progression se fait de droite a gauche. Par
|
||||
du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d’é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’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 "classique" permettant de résoudre les
|
||||
<p>Le reverse DNS est une variante du DNS “classique” 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'a, par définition, pas de TLD sur lequel se diriger
|
||||
quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS
|
||||
sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre
|
||||
Cependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger
|
||||
quand on lui adresse une query. Les “adresses” que l’on query en reverse DNS
|
||||
sont donc constituées de l’adresse IP, <strong><em>dans le sens contraire a l’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'abord,
|
||||
<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’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
|
||||
"enregistrements", records en anglais. Par exemple, un record A indique une
|
||||
“enregistrements”, 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'importe quelle information : par exemple, <code>dig NS
|
||||
record, vous pouvez obtenir n’importe quelle information : par exemple, <code>dig NS
|
||||
wxcafe.net</code> devrait vous renvoyer</p>
|
||||
<div class="highlight"><pre><span class="p">;</span> <span class="o"><<>></span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o"><<>></span> NS wxcafe.net
|
||||
<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd
|
||||
<span class="p">;;</span> Got answer<span class="o">:</span>
|
||||
<span class="p">;;</span> <span class="o">->></span>HEADER<span class="o"><<-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span>
|
||||
<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672"><<>></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"><<>></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">->>HEADER<<-</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 class="p">;;</span> QUESTION SECTION<span class="o">:</span>
|
||||
<span class="p">;</span>wxcafe.net. IN NS
|
||||
<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 class="p">;;</span> ANSWER SECTION<span class="o">:</span>
|
||||
wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net.
|
||||
wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net.
|
||||
<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 class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec
|
||||
<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span>
|
||||
<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span>
|
||||
<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</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>
|
||||
|
||||
|
||||
@ -792,12 +1149,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et <code>home.wxc
|
||||
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'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
|
||||
loop, se rendra compte qu'il est en train de faire une boucle infinie et
|
||||
demandera l'adresse au serveur auquel il est connecté. La première indication de
|
||||
l’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième
|
||||
loop, se rendra compte qu’il est en train de faire une boucle infinie et
|
||||
demandera l’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'écrire les fichiers de zone.
|
||||
étant en fait d’é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>.
|
||||
@ -807,48 +1164,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher
|
||||
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'autorité,
|
||||
lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’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'abord les fichiers de configuration de named.
|
||||
<code>named.conf.local</code> contient les définitions des zones forward et reverse.
|
||||
<p>Examinons tout d’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'examinerons ici que les déclarations de zones sur ce
|
||||
gérées en slave. Nous n’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'un héberge en slave les masters de l'autre.
|
||||
principale étant que l’un héberge en slave les masters de l’autre.
|
||||
Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p>
|
||||
<div class="highlight"><pre><span class="n">zone</span> <span class="s">"wxcafe.net"</span> <span class="p">{</span>
|
||||
<span class="n">type</span> <span class="n">master</span><span class="p">;</span>
|
||||
<span class="n">file</span> <span class="s">"/etc/bind/master/wxcafe.net"</span><span class="p">;</span>
|
||||
<span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span>
|
||||
<span class="mf">80.67.177.103</span><span class="p">;</span>
|
||||
<span class="p">};</span>
|
||||
<span class="p">};</span>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">"wxcafe.net"</span> <span style="color: #f92672">{</span>
|
||||
<span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
|
||||
file <span style="color: #e6db74">"/etc/bind/master/wxcafe.net"</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>
|
||||
|
||||
<span class="n">zone</span> <span class="s">"home.wxcafe.net"</span> <span class="p">{</span>
|
||||
<span class="n">type</span> <span class="n">slave</span><span class="p">;</span>
|
||||
<span class="n">file</span> <span class="s">"/etc/bind/slave/home.wxcafe.net"</span><span class="p">;</span>
|
||||
<span class="n">masters</span> <span class="p">{</span>
|
||||
<span class="mf">80.67.177.103</span><span class="p">;</span>
|
||||
<span class="p">};</span>
|
||||
<span class="p">};</span>
|
||||
zone <span style="color: #e6db74">"home.wxcafe.net"</span> <span style="color: #f92672">{</span>
|
||||
<span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
|
||||
file <span style="color: #e6db74">"/etc/bind/slave/home.wxcafe.net"</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>
|
||||
|
||||
<span class="n">zone</span> <span class="s">"46.76.39.5.in-addr.arpa"</span> <span class="p">{</span>
|
||||
<span class="n">type</span> <span class="n">master</span><span class="p">;</span>
|
||||
<span class="n">file</span> <span class="s">"/etc/bind/master/46.76.39.5.in-addr.arpa"</span><span class="p">;</span>
|
||||
<span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span>
|
||||
<span class="mf">80.67.177.103</span><span class="p">;</span>
|
||||
<span class="p">};</span>
|
||||
<span class="p">};</span>
|
||||
zone <span style="color: #e6db74">"46.76.39.5.in-addr.arpa"</span> <span style="color: #f92672">{</span>
|
||||
<span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span>
|
||||
file <span style="color: #e6db74">"/etc/bind/master/46.76.39.5.in-addr.arpa"</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>
|
||||
|
||||
<span class="n">zone</span> <span class="s">"103.177.67.80.in-addr.arpa"</span> <span class="p">{</span>
|
||||
<span class="n">type</span> <span class="n">slave</span><span class="p">;</span>
|
||||
<span class="n">file</span> <span class="s">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</span><span class="p">;</span>
|
||||
<span class="n">masters</span> <span class="p">{</span>
|
||||
<span class="mf">80.67.177.103</span><span class="p">;</span>
|
||||
<span class="p">};</span>
|
||||
<span class="p">};</span>
|
||||
zone <span style="color: #e6db74">"103.177.67.80.in-addr.arpa"</span> <span style="color: #f92672">{</span>
|
||||
<span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span>
|
||||
file <span style="color: #e6db74">"/etc/bind/slave/103.177.67.80.in-addr.arpa"</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>
|
||||
|
||||
|
||||
@ -859,89 +1215,89 @@ 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="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span>
|
||||
<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span>
|
||||
<span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span>
|
||||
<span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span>
|
||||
<span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span>
|
||||
<span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span>
|
||||
<span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span>
|
||||
<span class="p">)</span>
|
||||
<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 class="p">;</span> <span class="n">Name</span> <span class="n">servers</span>
|
||||
<span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
|
||||
<span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</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 class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span>
|
||||
<span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
|
||||
<span class="n">IN</span> <span class="n">SPF</span> <span class="s">"v=spf1 ip4:5.39.76.46 a -all"</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">"v=spf1 ip4:5.39.76.46 a -all"</span>
|
||||
|
||||
<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span>
|
||||
<span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span>
|
||||
<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</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 class="p">;</span> <span class="n">Aliases</span>
|
||||
<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
|
||||
<span class="p">;</span> <span class="p">[...]</span>
|
||||
<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</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 class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span>
|
||||
<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
|
||||
<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
|
||||
<span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span>
|
||||
<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span>
|
||||
<span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</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'abord, le TTL (time to live) est un paramètre définissant le temps
|
||||
Tout d’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'ordre :<br />
|
||||
Ce record prend de nombreux arguments, dans l’ordre :<br />
|
||||
- Le nameserver autoritaire pour le nom de domaine en question,<br />
|
||||
- L'adresse email du responsable de cette zone, avec le premier point
|
||||
- L’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 ("version" du fichier de zone, ici au format
|
||||
- Le numéro de série (“version” 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'expire, le temps qu'attendra le serveur autoritaire
|
||||
- La période d’expire, le temps qu’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'attendra le serveur secondaire
|
||||
- La période de TTL négatif, le temps qu’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'est pas le record le plus
|
||||
<p>Bon, tout ceci est peut-être un peu confus, mais ce n’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'indiquer ou il convient d'envoyer les emails pour ce domaine.
|
||||
SPF est un record d'authentification pour les emails.
|
||||
Les records A désignent l'association entre un nom de domaine et une adresse
|
||||
<p>MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine.
|
||||
SPF est un record d’authentification pour les emails.
|
||||
Les records A désignent l’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'est pas encore en IPv6.</p>
|
||||
n’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'autre (ce qui permet par
|
||||
exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p>
|
||||
mettre en place des domaines exactement semblables a d’autre (ce qui permet par
|
||||
exemple de filtrer ensuite avec les Virtual Hosts d’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'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
|
||||
l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,
|
||||
l’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on
|
||||
l’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'étant en fin de compte que des différences de valeurs (dues au
|
||||
fait que, eh bah, c'est pas les mêmes domaines...).</p>
|
||||
<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est
|
||||
différences n’étant en fin de compte que des différences de valeurs (dues au
|
||||
fait que, eh bah, c’est pas les mêmes domaines…).</p>
|
||||
<p>Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’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
|
||||
@ -952,7 +1308,7 @@ aussi.</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/nat/">NAT</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/nat/">NAT</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2014-02-17T05:02:00+01:00">
|
||||
@ -971,12 +1327,12 @@ aussi.</p></div>
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>NAT (Network Address Translation) in a word?<br />
|
||||
It's complicated. Very. Don't do it, you'd damage your brain. </p>
|
||||
It’s complicated. Very. Don’t do it, you’d damage your brain. </p>
|
||||
<p>Bon, sinon, prochain article serieux vite, bisous.</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/plan-9-from-whichever-space/">Plan9 from whichever space</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/plan-9-from-whichever-space/">Plan9 from whichever space</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-09-09T11:17:00+02:00">
|
||||
@ -995,617 +1351,67 @@ It's complicated. Very. Don't do it, you'd damage your brain. </p>
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><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'un des pires films jamais sortis. Rempli
|
||||
d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort
|
||||
d'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'indique),
|
||||
et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite
|
||||
des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a
|
||||
introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des
|
||||
ressources appartenant a d'autres ordinateurs a distance, un support de
|
||||
l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne
|
||||
Wood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli
|
||||
d’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort
|
||||
d’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’indique),
|
||||
et qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite
|
||||
des concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a
|
||||
introduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des
|
||||
ressources appartenant a d’autres ordinateurs a distance, un support de
|
||||
l’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne
|
||||
a la base en ASCII), un support de ProcFS amélioré, une interface graphique par
|
||||
défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p>
|
||||
<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit
|
||||
d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a
|
||||
quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt
|
||||
défaut, et d’autres améliorations sur les thèmes de base que propose Unix. </p>
|
||||
<p>Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit
|
||||
d’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a
|
||||
quelque chose de très intéressant à proposer. En effet, en ces jours d’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 "cloud
|
||||
computing" n'apparaisse pour la première fois, il semble que ce système ait été
|
||||
données, et bien que Plan9 ait été créé bien avant que le terme “cloud
|
||||
computing” n’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'on considère que les nouveautés qu'il apporte par rapport a
|
||||
Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà
|
||||
conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système
|
||||
d'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'un système
|
||||
distant comme n'étant qu'une poignée de fichiers permet de le monter comme
|
||||
n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder
|
||||
<p>En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a
|
||||
Unix ne sont pas extraordinaires en soit (alors qu’elles sont déjà
|
||||
conséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système
|
||||
d’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’un système
|
||||
distant comme n’étant qu’une poignée de fichiers permet de le monter comme
|
||||
n’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'ils sont hétérogènes (c'est a dire provenant
|
||||
de machines différentes), permet d'utiliser les ressources d'une machine
|
||||
distante comme si elle était présente localement. Le mécanisme d'UnionFS permet
|
||||
interagir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant
|
||||
de machines différentes), permet d’utiliser les ressources d’une machine
|
||||
distante comme si elle était présente localement. Le mécanisme d’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'ordinateur lorsque le concept même du système est d'être composé de
|
||||
parler d’ordinateur lorsque le concept même du système est d’ê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'implémenter très facilement
|
||||
différents concepts réseaux : en montant le /net d'un ordinateur du réseau local
|
||||
sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur
|
||||
du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur
|
||||
virtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement
|
||||
différents concepts réseaux : en montant le /net d’un ordinateur du réseau local
|
||||
sur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur
|
||||
du réseau local. En montant le /net d’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'accès de l'ordinateur distant, et les connections entre les
|
||||
font en utilisant l’accès de l’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 "puissance" de calcul en userspace, des superordinateurs pour
|
||||
lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels
|
||||
JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait
|
||||
partager leur “puissance” de calcul en userspace, des superordinateurs pour
|
||||
lesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels
|
||||
JoliOS qui promettent une integration du klaoude alors qu’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'ils ne proposent
|
||||
qui promettent un accès universel a toutes nos données alors qu’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'a été X11, et de nombreuses autres
|
||||
basesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres
|
||||
améliorations sur Unix.</p>
|
||||
<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative,
|
||||
et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de
|
||||
<p>Malheureusement, il n’a jamais été adopté de façon véritablement significative,
|
||||
et ce pour une raison très Unixiènne : “worse is better”. 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...</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/sed-basics/">Sed Basics</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-08-18T22:57:00+02:00">
|
||||
<i class="icon-calendar"></i> Sun 18 August 2013
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/tutoriel/"><i class="icon-folder-open"></i>Tutoriel</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><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'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'éditeur original.
|
||||
<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas
|
||||
personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des
|
||||
machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs
|
||||
dits "visuels", 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'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'empêcher
|
||||
l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
|
||||
permet de rediriger l'output dans le fichier d'input. Cela dit, l'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="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de
|
||||
n'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'utilise de
|
||||
la façon suivante : </p>
|
||||
<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</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'appliquer la commande affectée a toutes les occurrences du texte
|
||||
matché sur la/les lignes concernée-s.<br />
|
||||
Les exceptions a la "fixité" 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'il permet jusqu'à 9 "holding spaces", 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="highlight"><pre><span class="n">sed</span> <span class="err">'</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">'</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>sur le texte "hello world world" renverrait comme résultat</p>
|
||||
<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>De la même façon, le symbole <code>&</code> dans le texte de remplacement représente le
|
||||
texte original. Ainsi, la commande </p>
|
||||
<div class="highlight"><pre><span class="n">sed</span> <span class="err">'</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&</span> <span class="n">world</span><span class="o">/</span><span class="err">'</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>sur le texte "hello world" renverrait comme résultat</p>
|
||||
<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p><br/></p>
|
||||
<p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans
|
||||
l'espace courant :</p>
|
||||
<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire
|
||||
dédié, que j'appelle l'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'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'utilisent ainsi :</p>
|
||||
<div class="highlight"><pre><span class="n">c</span> \
|
||||
<span class="p">[</span><span class="n">text</span><span class="p">]</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>De la même façon, pour le i : </p>
|
||||
<div class="highlight"><pre><span class="n">i</span> \
|
||||
<span class="p">[</span><span class="n">text</span><span class="p">]</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Et de même pour a. </p>
|
||||
<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'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></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/">Le chiffrement de partitions avec dm-crypt et device-mapper</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-07-10T03:18:00+02:00">
|
||||
<i class="icon-calendar"></i> Wed 10 July 2013
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/tutoriel/"><i class="icon-folder-open"></i>Tutoriel</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Le chiffrement en tant que concept informatique est traditionnellement associé
|
||||
au chiffrement de fichiers, c'est a dire au fait de passer d'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'intégrité d'un système d'exploitation, ou
|
||||
bien la confidentialité d'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'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'expliquer les concepts qui entrent en
|
||||
jeu dans l'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'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'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'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 "block device" 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'un "fichier de périphérique" (trad.
|
||||
Wikipédia), il en "crée" 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'un chiffrement du système de fichier root, mais quasiment insignifiante dans
|
||||
le cas de chiffrement de partitions de données.</p>
|
||||
<p>D'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'appuyer sur une image initrd (l'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'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge
|
||||
en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
|
||||
charge l'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 "cible" est remonté sur la racine, et l'initrd est démonté
|
||||
est la RAM qu'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'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'attaques : l'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'initrd présente toujours le même checksum. Cela dit, cette méthode a
|
||||
l'inconvénient d'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'est pas possible pour un
|
||||
attaquant de modifier ce système de fichier, et l'initrd est alors toujours de
|
||||
confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
|
||||
l'initrd et du noyau <em>beaucoup</em> plus difficile qu'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'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
|
||||
maintenant responsable de l'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/...) 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'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela,
|
||||
dans une situation réelle ou l'on cherche a chiffrer un disque, il convient
|
||||
d'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="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p>
|
||||
<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span>
|
||||
</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="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes,
|
||||
puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous
|
||||
voyons qu'il n'y a pas de nouveau disque dans /dev. C'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'a rien a voir. On remarque
|
||||
qu'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'est pas formaté. Il nous reviens donc de
|
||||
le faire, pour pouvoir l'utiliser. </p>
|
||||
<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Maintenant que notre disque est formaté, il peut être monté : </p>
|
||||
<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span>
|
||||
</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="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span>
|
||||
</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="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o"><</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">></span> <span class="o"><</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">></span>
|
||||
<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/<</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">></span> <span class="o"><</span><span class="nx">emplacement</span><span class="o">></span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
</li>
|
||||
<li>
|
||||
<p>Pour démonter vos partitions : </p>
|
||||
<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o"><</span><span class="nx">emplacement</span><span class="o">></span>
|
||||
<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o"><</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">></span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<p>Pour simplifier la vie de tous, j'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></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/redesign-du-blog/">Redesign du blog, etc</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-06-12T19:14:00+02:00">
|
||||
<i class="icon-calendar"></i> Wed 12 June 2013
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/notes/"><i class="icon-folder-open"></i>Notes</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p>
|
||||
<p>Du coup, expliquons. J'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'ai tout de suite accroché a ce générateur de
|
||||
site statique en python, du fait de son efficacité, de sa facilité d'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'un "thème"
|
||||
constitué de templates pour les fichiers html et l'organisation du projet et
|
||||
d'une partie "statique" 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="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span>
|
||||
<span class="err">├──</span> <span class="k">static</span>
|
||||
<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span>
|
||||
<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span>
|
||||
<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span>
|
||||
<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span>
|
||||
<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span>
|
||||
<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span>
|
||||
<span class="err">└──</span> <span class="n">template</span>
|
||||
<span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span>
|
||||
<span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span>
|
||||
<span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span>
|
||||
<span class="err">├─</span> <span class="p">[...]</span>
|
||||
<span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">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'un des grands avantages de pelican est aussi la facilité qu'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'existant pas la dernière fois, etc...
|
||||
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'est moi
|
||||
qui ait modifié les templates et le css), c'est lisible (puisque c'est du
|
||||
python, par opposition au PHP...), et c'est plus "efficace". Le markdown est
|
||||
très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
|
||||
les articles, je n'ai pas besoin d'un accès continu au net, bref, c'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'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'est juste un manque de temps de ma part, mais vu
|
||||
que toutes les pages passent par les mêmes templates, c'est assez facile a
|
||||
faire.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Perte du spam:
|
||||
Pourquoi c'est dans les points négatifs, ca?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Temps d'adaptation et d'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'est parce que j'apprend a me servir de ce système
|
||||
et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous
|
||||
les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca
|
||||
dans la catëgorie positive.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/comment-saurik-a-roote-les-google-glass/">Comment Saurik a rooté les Google Glass</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-05-06T06:24:00+02:00">
|
||||
<i class="icon-calendar"></i> Mon 06 May 2013
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/hacking/"><i class="icon-folder-open"></i>Hacking</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
|
||||
pour avoir développé Cydia, un "app store" alternatif pour les iTrucs),
|
||||
après avoir reçu une paire de Google glass de la part de Google (de
|
||||
façon assez évidente...), a trouvé intéressant d'obtenir un accès root
|
||||
sur celles-ci, ce qu'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'extraire l'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'a pas utilisé cette technique pour
|
||||
rooter sa paire. Voyons comment il a fait :</p>
|
||||
<p><em>Je tiens tout d'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 "How does this exploit work". Je tente d'apporter ma maigre
|
||||
contribution a cette explication.</em></p>
|
||||
<p>Donc, d'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'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'android, et
|
||||
l'a appliqué a son problème. L'exploit en question est relativement
|
||||
simple. Depuis la version 4.0 d'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'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... 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'application. Lors de la restauration, le système supprime la
|
||||
configuration existante, puis la remplace par celle dans l'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--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'il
|
||||
fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur
|
||||
une machine virtuelle, il donne les droits root a tout utilisateur se
|
||||
connectant via ADB, ce qui est ce que l'on cherche pour l'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'android,
|
||||
dont l'application paramètres, et, dans ce cas précis, l'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'Android
|
||||
vérifie les données avant de restaurer, et ne restaure pas les symlinks,
|
||||
ce qui nous empêche d'avoir accès directement a /data/local.prop, le
|
||||
fichier qu'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'é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="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">>/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span>
|
||||
<span class="k">do</span> <span class="o">:</span>
|
||||
<span class="n">done</span>
|
||||
</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'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'ordinateur host :</p>
|
||||
<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span>
|
||||
</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'â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'on veut dans /data/local.prop, ce qui
|
||||
nous permet de faire croire a android qu'il tourne dans une machine
|
||||
virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui
|
||||
indique au noyau qu'il tourne dans qemu, un système de VM).</p>
|
||||
<p>Il nous reste a rebooter, depuis l'ordinateur host :</p>
|
||||
<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Puis nous remontons la partitions système en lecture/écriture (r/w),
|
||||
depuis le host :</p>
|
||||
<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">"mount -o remount,rw /system"</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p>
|
||||
<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir
|
||||
l’exécuter plus tard :</p>
|
||||
<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">"chmod 6755 /system/xbin/su"</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir
|
||||
redémarrer normalement :</p>
|
||||
<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">"rm /data/local.prop"</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Enfin, nous redemarrons a nouveau :</p>
|
||||
<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span>
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Et voila, une paire de google glass rootée!</p>
|
||||
<p>Il est bon de préciser que cette manipulation n'est possible que parce
|
||||
que les lunettes tournent sous une ancienne version d'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'engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
|
||||
<p>A bientôt!</p></div>
|
||||
Linux, FUSE, etc…</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="pagination">
|
||||
@ -1617,9 +1423,6 @@ qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
|
||||
<li class="">
|
||||
<a href="//wxcafe.net/author/wxcafe2.html">2</a>
|
||||
</li>
|
||||
<li class="">
|
||||
<a href="//wxcafe.net/author/wxcafe3.html">3</a>
|
||||
</li>
|
||||
<li class="next"><a href="//wxcafe.net/author/wxcafe2.html">Next →</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -1636,13 +1439,8 @@ qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/language/">
|
||||
<i class="icon-folder-open icon-large"></i>Language
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/notes/">
|
||||
<i class="icon-folder-open icon-large"></i>Notes
|
||||
<a href="//wxcafe.net/category/note/">
|
||||
<i class="icon-folder-open icon-large"></i>Note
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
@ -1650,31 +1448,21 @@ qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
|
||||
<i class="icon-folder-open icon-large"></i>OSes
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/programmation/">
|
||||
<i class="icon-folder-open icon-large"></i>Programmation
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/ranting/">
|
||||
<i class="icon-folder-open icon-large"></i>Ranting
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/teaching/">
|
||||
<i class="icon-folder-open icon-large"></i>Teaching
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/tutorial/">
|
||||
<i class="icon-folder-open icon-large"></i>Tutorial
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/tutoriel/">
|
||||
<i class="icon-folder-open icon-large"></i>Tutoriel
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="//wxcafe.net/category/vidya-games/">
|
||||
<i class="icon-folder-open icon-large"></i>Vidya Games
|
||||
</a>
|
||||
</li>
|
||||
<hr>
|
||||
|
||||
<!-- Social links -->
|
||||
@ -1693,16 +1481,14 @@ qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
|
||||
<li><a href="https://twitter.com/wxcafe"><i class="icon-twitter icon-large"></i> Twitter</a></li>
|
||||
<li><a href="https://github.com/wxcafe"><i class="icon-github icon-large"></i> Github</a></li>
|
||||
<li><a href="mailto://wxcafe@wxcafe.net"><i class="icon-envelope icon-large"></i> Email</a></li>
|
||||
<li><a href="https://data.wxcafe.net/wxcafe.asc"><i class="icon-key icon-large"></i> Gpg</a></li>
|
||||
<li><a href="finger://wxcafe@wxcafe.net"><i class="icon-terminal icon-large"></i> Finger</a></li>
|
||||
<li><a href="http://leloop.org/where.html"><i class="icon-map-marker icon-large"></i> IRL</a></li>
|
||||
<li><a href="https://pub.wxcafe.net/wxcafe.asc"><i class="icon-key icon-large"></i> Gpg</a></li>
|
||||
<li><a href="https://www.openstreetmap.org/relation/105146"><i class="icon-map-marker icon-large"></i> IRL</a></li>
|
||||
|
||||
<hr>
|
||||
|
||||
<!-- Links -->
|
||||
<li class="nav-header"><h4><i class="icon-external-link"></i> Links</h4></li>
|
||||
<li><a href="https://github.com/wxcafe/blog-source"><i class="icon-code icon-large "></i> Source!</a></li>
|
||||
<li><a href="http://paste.wxcafe.net"><i class="icon-paste icon-large "></i> Zerobin</a></li>
|
||||
<li><a href="http://git.wxcafe.net"><i class="icon-github-sign icon-large "></i> Public Git</a></li>
|
||||
<hr>
|
||||
|
||||
|
||||
@ -7,7 +7,9 @@
|
||||
<meta name="author" content="wxcafé">
|
||||
<link rel="icon" type="image/png" href="//wxcafe.net/theme/img/favicon.ico">
|
||||
<!-- Le styles -->
|
||||
<link rel="stylesheet" href="//wxcafe.net/theme/css/extra.css" type="text/css" />
|
||||
<link rel="stylesheet" href="//wxcafe.net/theme/css/bootstrap.css" type="text/css" />
|
||||
<link href='http://fonts.googleapis.com/css?family=Oswald&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
|
||||
<script type="text/javascript">
|
||||
/* <![CDATA[ */
|
||||
(function() {
|
||||
@ -61,7 +63,7 @@
|
||||
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
<a class="brand" href="//wxcafe.net/index.html">Wxcafé </a>
|
||||
<div class="nav-collapse">
|
||||
@ -81,7 +83,553 @@
|
||||
<div class="row">
|
||||
<div class="span9" id="content">
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/monter-son-propre-serveur-partie-1/">Monter son propre serveur, partie 1: le serveur et l'apache.</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/sed-basics/">Sed Basics</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-08-18T22:57:00+02:00">
|
||||
<i class="icon-calendar"></i> Sun 18 August 2013
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/tutoriel/"><i class="icon-folder-open"></i>Tutoriel</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><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’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’éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas
|
||||
personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c’est a dire des
|
||||
machines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs
|
||||
dits “visuels”, 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’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’empêcher
|
||||
l’affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui
|
||||
permet de rediriger l’output dans le fichier d’input. Cela dit, l’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’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’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’appliquer la commande affectée a toutes les occurrences du texte
|
||||
matché sur la/les lignes concernée-s.<br />
|
||||
Les exceptions a la “fixité” 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’il permet jusqu’à 9 “holding spaces”, 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 's/\(hello world\) world/\1/'
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>sur le texte “hello world world” 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>&</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 's/hello world/& world/'
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>sur le texte “hello world” 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’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’appelle l’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’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’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’utilisent de la même façon pour la bonne raison qu’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></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/">Le chiffrement de partitions avec dm-crypt et device-mapper</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-07-10T03:18:00+02:00">
|
||||
<i class="icon-calendar"></i> Wed 10 July 2013
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/tutoriel/"><i class="icon-folder-open"></i>Tutoriel</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Le chiffrement en tant que concept informatique est traditionnellement associé
|
||||
au chiffrement de fichiers, c’est a dire au fait de passer d’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’intégrité d’un système d’exploitation, ou
|
||||
bien la confidentialité d’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’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’expliquer les concepts qui entrent en
|
||||
jeu dans l’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’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’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’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 “block device” 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’un “fichier de périphérique” (trad.
|
||||
Wikipédia), il en “crée” 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’un chiffrement du système de fichier root, mais quasiment insignifiante dans
|
||||
le cas de chiffrement de partitions de données.</p>
|
||||
<p>D’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’appuyer sur une image initrd (l’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’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge
|
||||
en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et
|
||||
charge l’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 “cible” est remonté sur la racine, et l’initrd est démonté
|
||||
est la RAM qu’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’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’attaques : l’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’initrd présente toujours le même checksum. Cela dit, cette méthode a
|
||||
l’inconvénient d’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’est pas possible pour un
|
||||
attaquant de modifier ce système de fichier, et l’initrd est alors toujours de
|
||||
confiance. Cependant, cela a pour conséquence de rendre la mise a jour de
|
||||
l’initrd et du noyau <em>beaucoup</em> plus difficile qu’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’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est
|
||||
maintenant responsable de l’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/…) 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’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,
|
||||
dans une situation réelle ou l’on cherche a chiffrer un disque, il convient
|
||||
d’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’est-il passé? En cherchant un peu, nous
|
||||
voyons qu’il n’y a pas de nouveau disque dans /dev. C’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’a rien a voir. On remarque
|
||||
qu’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’est pas formaté. Il nous reviens donc de
|
||||
le faire, pour pouvoir l’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 <fichier chiffré> <nom de disque virtuel>
|
||||
sudo mount /dev/mapper/<nom de disque virtuel> <emplacement>
|
||||
</pre></div>
|
||||
|
||||
|
||||
</li>
|
||||
<li>
|
||||
<p>Pour démonter vos partitions : </p>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount <emplacement>
|
||||
sudo cryptsetup luksClose <nom de disque virtuel>
|
||||
</pre></div>
|
||||
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<p>Pour simplifier la vie de tous, j’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></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/redesign-du-blog/">Redesign du blog, etc</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-06-12T19:14:00+02:00">
|
||||
<i class="icon-calendar"></i> Wed 12 June 2013
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.</p>
|
||||
<p>Du coup, expliquons. J’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’ai tout de suite accroché a ce générateur de
|
||||
site statique en python, du fait de son efficacité, de sa facilité d’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’un “thème”
|
||||
constitué de templates pour les fichiers html et l’organisation du projet et
|
||||
d’une partie “statique” 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’un des grands avantages de pelican est aussi la facilité qu’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’existant pas la dernière fois, etc…
|
||||
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’est moi
|
||||
qui ait modifié les templates et le css), c’est lisible (puisque c’est du
|
||||
python, par opposition au PHP…), et c’est plus “efficace”. Le markdown est
|
||||
très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire
|
||||
les articles, je n’ai pas besoin d’un accès continu au net, bref, c’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’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’est juste un manque de temps de ma part, mais vu
|
||||
que toutes les pages passent par les mêmes templates, c’est assez facile a
|
||||
faire.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Perte du spam:
|
||||
Pourquoi c’est dans les points négatifs, ca?</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Temps d’adaptation et d’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’est parce que j’apprend a me servir de ce système
|
||||
et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous
|
||||
les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca
|
||||
dans la catëgorie positive.</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Voila, c’est mon retour d’expérience sur pelican. A plus. </p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/">Comment Saurik a rooté les Google Glass</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-05-06T06:24:00+02:00">
|
||||
<i class="icon-calendar"></i> Mon 06 May 2013
|
||||
</span>
|
||||
<br />
|
||||
<span class="label">By</span>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/hacking/"><i class="icon-folder-open"></i>Hacking</a>
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu
|
||||
pour avoir développé Cydia, un “app store” alternatif pour les iTrucs),
|
||||
après avoir reçu une paire de Google glass de la part de Google (de
|
||||
façon assez évidente…), a trouvé intéressant d’obtenir un accès root
|
||||
sur celles-ci, ce qu’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’extraire l’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’a pas utilisé cette technique pour
|
||||
rooter sa paire. Voyons comment il a fait :</p>
|
||||
<p><em>Je tiens tout d’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 “How does this exploit work”. Je tente d’apporter ma maigre
|
||||
contribution a cette explication.</em></p>
|
||||
<p>Donc, d’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’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’android, et
|
||||
l’a appliqué a son problème. L’exploit en question est relativement
|
||||
simple. Depuis la version 4.0 d’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’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… 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’application. Lors de la restauration, le système supprime la
|
||||
configuration existante, puis la remplace par celle dans l’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–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’il
|
||||
fonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur
|
||||
une machine virtuelle, il donne les droits root a tout utilisateur se
|
||||
connectant via ADB, ce qui est ce que l’on cherche pour l’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’android,
|
||||
dont l’application paramètres, et, dans ce cas précis, l’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’Android
|
||||
vérifie les données avant de restaurer, et ne restaure pas les symlinks,
|
||||
ce qui nous empêche d’avoir accès directement a /data/local.prop, le
|
||||
fichier qu’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’é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>/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’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’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’â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’on veut dans /data/local.prop, ce qui
|
||||
nous permet de faire croire a android qu’il tourne dans une machine
|
||||
virtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui
|
||||
indique au noyau qu’il tourne dans qemu, un système de VM).</p>
|
||||
<p>Il nous reste a rebooter, depuis l’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 "mount -o remount,rw /system"
|
||||
</pre></div>
|
||||
|
||||
|
||||
<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l’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 "chmod 6755 /system/xbin/su"
|
||||
</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 "rm /data/local.prop"
|
||||
</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’est possible que parce
|
||||
que les lunettes tournent sous une ancienne version d’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’engendrent les Google Glass, et ce sera fait dans un autre billet.</p>
|
||||
<p>A bientôt!</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/monter-son-propre-serveur-partie-1/">Monter son propre serveur, partie 1: le serveur et l'apache.</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-03-18T09:51:00+01:00">
|
||||
@ -99,61 +647,61 @@
|
||||
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il
|
||||
s'agit de posséder son propre serveur, et donc, par extension, ses
|
||||
<div class="summary"><p>Il y a un certain temps, j’avais parlé du concept du self-hosting. Il
|
||||
s’agit de posséder son propre serveur, et donc, par extension, ses
|
||||
données. </p>
|
||||
<p>Bien entendu, il n'est pas nécessaire pour cela de posséder
|
||||
<p>Bien entendu, il n’est pas nécessaire pour cela de posséder
|
||||
physiquement son propre serveur (encore que ce soit possible, mais ce
|
||||
n'est pas le sujet abordé ici.)<br />
|
||||
n’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'utilisation que l'on veut en faire ici d'installés.
|
||||
nécessaires a l’utilisation que l’on veut en faire ici d’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'est une distribution simple a utiliser comme
|
||||
serveur, stable, et facile a configurer (puisqu'une bonne partie de la
|
||||
squeeze, parce que c’est une distribution simple a utiliser comme
|
||||
serveur, stable, et facile a configurer (puisqu’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'installation simple et
|
||||
but de cet article, a savoir rendre l’installation simple et
|
||||
compréhensible).</p>
|
||||
<p>La première chose a faire est bien entendu d'obtenir le serveur en lui
|
||||
<p>La première chose a faire est bien entendu d’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'obtenir un serveur, que ce soit en le
|
||||
louant chez OVH/1&1/n'importe quel autre hébergeur commercial, en
|
||||
participant a un système d'hébergement collaboratif (je vous laisse
|
||||
existe en effet un nombre infini d’obtenir un serveur, que ce soit en le
|
||||
louant chez OVH/1&1/n’importe quel autre hébergeur commercial, en
|
||||
participant a un système d’hébergement collaboratif (je vous laisse
|
||||
chercher), en achetant un serveur et en le faisant fonctionner de chez
|
||||
vous, en utilisant un vieux PC... Bref, les possibilités sont multiples.
|
||||
vous, en utilisant un vieux PC… 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...).
|
||||
dont vous y accédez, le résultat est le même (et la procédure aussi…).
|
||||
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'IP a utiliser, il
|
||||
convient de mettre ce type précisément. Quand le type n'est pas
|
||||
<p>Dans cet article, lorsque est précisée le type d’IP a utiliser, il
|
||||
convient de mettre ce type précisément. Quand le type n’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'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou
|
||||
rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez
|
||||
n’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou
|
||||
rien n’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'éditer l'entrée DNS pour votre nom de
|
||||
interface vous permettant d’éditer l’entrée DNS pour votre nom de
|
||||
domaine. </p>
|
||||
<p>Cette entrée doit donc pour l'instant ressembler a ca :</p>
|
||||
<div class="highlight"><pre> <span class="o"><</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">></span> <span class="n">NS</span> <span class="mi">1</span>
|
||||
<span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span>
|
||||
<span class="n">IN</span> <span class="n">A</span> <span class="o"><</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">></span>
|
||||
<span class="n">IN</span> <span class="n">AAAA</span> <span class="o"><</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">></span>
|
||||
<p>Cette entrée doit donc pour l’instant ressembler a ca :</p>
|
||||
<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> <votre nom de domaine> NS 1
|
||||
IN MX 1
|
||||
IN A <IPv4 de votre serveur>
|
||||
IN AAAA <IPv6 de votre serveur>
|
||||
</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'est de la magie pour
|
||||
l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer
|
||||
compliqué a expliquer, donc on va dire que c’est de la magie pour
|
||||
l’instant, ca sera peut être le sujet d’un autre article), et d’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
|
||||
@ -162,50 +710,50 @@ le mot de passe root.</p>
|
||||
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...) Ainsi, nous allons
|
||||
arrêter d'utiliser root et nous allons commencer a utiliser des couples
|
||||
conséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons
|
||||
arrêter d’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'abord, créer un nouvel utilisateur,
|
||||
grâce auquel nous administrerons le serveur a l'avenir; puis configurer
|
||||
OpenSSH pour que celui ci n'accepte que les connections par clés et plus
|
||||
Cela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,
|
||||
grâce auquel nous administrerons le serveur a l’avenir; puis configurer
|
||||
OpenSSH pour que celui ci n’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'il crée tout les dossiers et fichiers nécessaires,
|
||||
problème avec, puisqu’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'être très chiant a
|
||||
distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait
|
||||
un simple script permettant l'utilisation d'useradd plus facilement.)</p>
|
||||
devrez utiliser useradd, qui est (en plus d’être très chiant a
|
||||
distinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait
|
||||
un simple script permettant l’utilisation d’useradd plus facilement.)</p>
|
||||
<p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant
|
||||
juste <code>adduser <username></code>, soit utiliser le mode non-interactif
|
||||
en faisant un <code>adduser --group <username></code></p>
|
||||
<p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m
|
||||
-N -g <username></code>. Cette commande ajoutera un utilisateur, créera
|
||||
son dossier principal dans /home/, et l'ajoutera au groupe du même nom
|
||||
son dossier principal dans /home/, et l’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'ajouter cet utilisateur aux groupes qu'il sera
|
||||
<p>Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera
|
||||
amené a administrer: <code>usermod <username> -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" >> /etc/sudoers</code><br />
|
||||
Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un
|
||||
Enfin, changeons d’utilisateur : <code>su</code>. A ce point, vous avec un
|
||||
utilisateur complètement fonctionnel et utilisable pour toutes les
|
||||
taches d'administration. Si vous devez encore utiliser root, c'est que
|
||||
taches d’administration. Si vous devez encore utiliser root, c’est que
|
||||
quelque chose ne va pas.</p>
|
||||
<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous
|
||||
<p>Vous êtes donc loggés sur le système en tant qu’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'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un
|
||||
Tout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’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'utiliser plusieurs clés publique pour chaque<br />
|
||||
également possible d’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'abord, il nous faut générer un couple de clés publique/privée sur le
|
||||
d’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
|
||||
@ -213,12 +761,11 @@ 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'est id_rsa et id_rsa.pub . id_rsa contient votre clé
|
||||
intéresse ici c’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...) id_rsa.pub, quand a
|
||||
lui, contient votre clé publique. Copiez la sur le serveur, avec un
|
||||
<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</code> , ou
|
||||
serveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a
|
||||
lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/</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.
|
||||
@ -230,19 +777,19 @@ domaine></code>), et il ne devrait pas vous demander de mot de passe.<strong>
|
||||
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'a installer le serveur web, et a le
|
||||
<p>Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le
|
||||
configurer: </p>
|
||||
<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \
|
||||
<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \
|
||||
<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \
|
||||
<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \
|
||||
<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \
|
||||
<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \
|
||||
<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span>
|
||||
<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'excédent plus tard...), puis activons les<br />
|
||||
<p>(faisons large, on aura besoin de l’excédent plus tard…), 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
|
||||
@ -252,18 +799,18 @@ 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'éditer, en changeant l'adresse mail au début du document
|
||||
faut encore l’éditer, en changeant l’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'il prenne en compte les
|
||||
et enfin redémarrer apache pour qu’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'installation du serveur mail (c'est suffisamment complexe pour
|
||||
prendre un article seul...)</p></div>
|
||||
verra l’installation du serveur mail (c’est suffisamment complexe pour
|
||||
prendre un article seul…)</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/">Pourquoi je vais quitter linux pour passer a FreeBSD.</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/">Pourquoi je vais quitter linux pour passer a FreeBSD.</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-02-04T17:41:00+01:00">
|
||||
@ -283,37 +830,37 @@ prendre un article seul...)</p></div>
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><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'ai passé le cap. Je suis sous GNU/Linux depuis un certain
|
||||
<p>Bon, voila. J’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'avais pas les
|
||||
changements malvenus. Bien entendu, au début, je n’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'ai même idée que quelque chose dans mon système d'exploitation avait
|
||||
n’ai même idée que quelque chose dans mon système d’exploitation avait
|
||||
cette fonction la. Par exemple, udev, ou policykit/consolekit/. A
|
||||
l'époque, je n'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'ai utilisé
|
||||
l’époque, je n’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’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'accumulant et
|
||||
mon niveau de compréhension du système s'améliorant, j'ai commencé a
|
||||
remarquer que certain bouts de l'OS ne collaient pas exactement avec les
|
||||
autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a
|
||||
cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma
|
||||
compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne
|
||||
profondeur. Cependant, avec le temps, les connaissances s’accumulant et
|
||||
mon niveau de compréhension du système s’améliorant, j’ai commencé a
|
||||
remarquer que certain bouts de l’OS ne collaient pas exactement avec les
|
||||
autres. Bien sur, je ne saurais dire si cette réalisation s’est faite a
|
||||
cause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma
|
||||
compréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne
|
||||
s’adaptant pas au reste du système se faisaient de plus en plus visible.
|
||||
Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai
|
||||
choisi de passer a Archlinux. C'était avant le passage a systemd. Ce
|
||||
système me convenait bien. Si je n'installais pas Gnome, ce que je ne
|
||||
Et puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai
|
||||
choisi de passer a Archlinux. C’était avant le passage a systemd. Ce
|
||||
système me convenait bien. Si je n’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'était le moins
|
||||
quelconque, ni dbus. Oui, udev était toujours la, mais c’é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'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
|
||||
distribution d'avoir au plus vite les dernières versions de tout.
|
||||
second n’a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la
|
||||
distribution d’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...) ont un problème très précis, qui n'importe
|
||||
pas les seuls a faire ça…) ont un problème très précis, qui n’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
|
||||
@ -322,122 +869,120 @@ ces 9 principes :</p>
|
||||
<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'efficacité</li>
|
||||
<li>Choisissez la portabilité plutôt que l’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 "capturent" l'utilisateur.</li>
|
||||
<li>Évitez les UI qui “capturent” l’utilisateur.</li>
|
||||
<li>Faites de chaque programme un filtre.</li>
|
||||
</ol>
|
||||
<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et
|
||||
on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas
|
||||
exactement la façon dont l'informatique fonctionne. Effectivement, les
|
||||
standards, les systèmes d'exploitation, les logiciels, tout doit évoluer
|
||||
- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est
|
||||
pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et
|
||||
celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
|
||||
philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans
|
||||
de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br />
|
||||
La philosophie UNIX est aussi et surtout une garantie d'utilisabilité
|
||||
<p>Alors bien entendu, un système d’exploitation est fait pour évoluer, et
|
||||
on pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas
|
||||
exactement la façon dont l’informatique fonctionne. Effectivement, les
|
||||
standards, les systèmes d’exploitation, les logiciels, tout doit évoluer
|
||||
- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est
|
||||
pas d’UNIX que nous parlons ici. C’est de la <em>philosophie</em> UNIX. Et
|
||||
celle-ci n’a pas fait son temps, <strong>elle a fait ses preuves.</strong> La
|
||||
philosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans
|
||||
de tests derrière elle, et fonctionne aussi bien qu’au premier jour.<br />
|
||||
La philosophie UNIX est aussi et surtout une garantie d’utilisabilité
|
||||
et de simplicité pour les administrateurs systèmes, pour les
|
||||
développeurs, bref pour tous ceux qui font de l'informatique
|
||||
<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique
|
||||
développeurs, bref pour tous ceux qui font de l’informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l’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'avoir un système standardisé pour faire communiquer
|
||||
<p>Tous OS se doit d’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'échanger des informations. C'est
|
||||
efficace, ça respecte le "tout est fichier", c'est standard, c'est
|
||||
fichiers spéciaux permettant d’échanger des informations. C’est
|
||||
efficace, ça respecte le “tout est fichier”, c’est standard, c’est
|
||||
simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient
|
||||
remplacer ça, avec une interface qui n'est explicitement pas faite pour
|
||||
être utilisée a la ligne de commande mais a l'aide d'APIs, et un
|
||||
programme monolithique qui effectue sa tache d'une façon complètement
|
||||
obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon
|
||||
efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus
|
||||
"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est
|
||||
<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est
|
||||
horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus
|
||||
lire facilement les échanges entre programmes. C'est peu pratique, en
|
||||
remplacer ça, avec une interface qui n’est explicitement pas faite pour
|
||||
être utilisée a la ligne de commande mais a l’aide d’APIs, et un
|
||||
programme monolithique qui effectue sa tache d’une façon complètement
|
||||
obscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon
|
||||
efficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus
|
||||
“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’est<em>beaucoup</em> moins utilisable pour l’utilisateur final. C’est
|
||||
horriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus
|
||||
lire facilement les échanges entre programmes. C’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'utilisateur final. Alors oui, il parait que ça
|
||||
augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques
|
||||
modification par l’utilisateur final. Alors oui, il parait que ça
|
||||
augmente la vitesse de boot. Eh bien, au risque d’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'est presque comme si les projets freedesktop.org avaient
|
||||
et distribué. C’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'employant plus les
|
||||
systèmes basiques d'UNIX.</p>
|
||||
<p>Le problème est qu'il est facilement visible que la direction prise par
|
||||
la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni
|
||||
concurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les
|
||||
systèmes basiques d’UNIX.</p>
|
||||
<p>Le problème est qu’il est facilement visible que la direction prise par
|
||||
la communauté Linux n’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'accepter et de pousser les
|
||||
remises au gout du jour (?), mais est bien d’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'autres raisons...), et on peut
|
||||
compter sur le fait que les autres distributions l'adopteront un jour ou
|
||||
l'autre.</p>
|
||||
<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces
|
||||
systèmes, tout du moins exprimé les raisons qui font qu'ils me
|
||||
déplaisent, on pourrait penser qu'il suffit de passer a une distribution
|
||||
n'incluant pas systemd, voire a une distribution n'incluant pas du tout
|
||||
changements (archlinux aussi, mais pour d’autres raisons…), et on peut
|
||||
compter sur le fait que les autres distributions l’adopteront un jour ou
|
||||
l’autre.</p>
|
||||
<p>Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces
|
||||
systèmes, tout du moins exprimé les raisons qui font qu’ils me
|
||||
déplaisent, on pourrait penser qu’il suffit de passer a une distribution
|
||||
n’incluant pas systemd, voire a une distribution n’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'OpenSUSE est en train de l’intégrer), il est probable que cela
|
||||
qu’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'ubuntu, qui ne changera
|
||||
et upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera
|
||||
probablement pas (je les vois mal revenir en arrière sur ce point.)
|
||||
Toujours est-il que l'init héritée du System V semble condamnée a mourir
|
||||
Toujours est-il que l’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'exploitation une date
|
||||
d'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'init
|
||||
toujours trop courte, et met sur mon système d’exploitation une date
|
||||
d’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’init
|
||||
(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options
|
||||
principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas
|
||||
vraiment un choix, vu le peu de programmes qu'il permet de faire
|
||||
fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui
|
||||
n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku
|
||||
n'est pas un choix non plus, puisque le but est de rester dans une
|
||||
principales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas
|
||||
vraiment un choix, vu le peu de programmes qu’il permet de faire
|
||||
fonctionner et le fait qu’il ne soit disponible que sur i386, ce qui
|
||||
n’est pas vraiment avantageux au vu de mon système en x86_64. Haiku
|
||||
n’est pas un choix non plus, puisque le but est de rester dans une
|
||||
optique UNIX.</p>
|
||||
<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai
|
||||
<p>OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai
|
||||
en théorie aucun problème sur cet OS, sauf que certains choix de design
|
||||
ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet,
|
||||
ne correspondent pas du tout a l’idée que j’ai d’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 "release-only"), et une tendance a faire des scripts et
|
||||
des outils installés par défaut pour tout et n'importe quoi. Bref, cela
|
||||
n'est pas le sujet. Il convient aussi de voir qu'avec la récente
|
||||
autres patchs “release-only”), et une tendance a faire des scripts et
|
||||
des outils installés par défaut pour tout et n’importe quoi. Bref, cela
|
||||
n’est pas le sujet. Il convient aussi de voir qu’avec la récente
|
||||
acquisition de Sun par Oracle, il est possible que le projet OpenSolaris
|
||||
n'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'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
|
||||
<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD
|
||||
ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est
|
||||
n’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’ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p>
|
||||
<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD
|
||||
ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est
|
||||
simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour
|
||||
réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir
|
||||
DFBSD ressemble aussi au système de l'assistance a l'user a outrance
|
||||
décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment
|
||||
réputation d’être orientées sécurité, et d’après ce que j’ai pu en voir
|
||||
DFBSD ressemble aussi au système de l’assistance a l’user a outrance
|
||||
décris plus haut. Mais la vérité est que je n’ai pas fait suffisamment
|
||||
de recherches et que FreeBSD ne va me voir arriver que par hasard, parce
|
||||
qu'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'aime
|
||||
qu’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’aime
|
||||
pouvoir configurer mes logiciels de façon assez profonde.)</p>
|
||||
<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien
|
||||
<p>Voila, c’est mon avis sur ce “problème” 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'apparaissent jamais chez certaines distributions, créant de ce fait un
|
||||
n’apparaissent jamais chez certaines distributions, créant de ce fait un
|
||||
choix pour les utilisateurs.<br />
|
||||
[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p></div>
|
||||
[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/update-et-pensees-a-propos-du-raspberry-pi/">Update et pensées a propos du Raspberry Pi</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/">Update et pensées a propos du Raspberry Pi</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-01-27T01:55:00+01:00">
|
||||
@ -456,72 +1001,71 @@ choix pour les utilisateurs.<br />
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Bon.<br />
|
||||
J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire
|
||||
J’ai annoncé il y a environ 20 jours que j’avais pour projet de faire
|
||||
une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée
|
||||
PiRatBox. Il se trouve qu'après de nombreux essais, un problème
|
||||
récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez
|
||||
PiRatBox. Il se trouve qu’après de nombreux essais, un problème
|
||||
récurrent apparait: le Raspberry Pi n’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'avec une
|
||||
alimentation provenant d'un port USB a 2A (max), je n'avais pas
|
||||
énormément de chances d'avoir 2A sur chacun des ports host du Raspi,
|
||||
Alors, autant il me semble évident qu’avec une
|
||||
alimentation provenant d’un port USB a 2A (max), je n’avais pas
|
||||
énormément de chances d’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...), qui
|
||||
servant a rien) (vous savez, celui qui est monté en USB…), 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'il soit surement possible de la désactiver au niveau du kernel,
|
||||
il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien
|
||||
bien qu’il soit surement possible de la désactiver au niveau du kernel,
|
||||
il n’est pas <strong>simplement</strong> possible de la “débrancher”. 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'avoir pas testé de lancer les différents services
|
||||
<p>Bon, je dois avouer n’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'arch utilise systemd et qu'il n'existe pas de wrapper
|
||||
systemd pour les daemons piratebox, et que j'ai la flemme d'en faire,
|
||||
bonne</del> raison qu’arch utilise systemd et qu’il n’existe pas de wrapper
|
||||
systemd pour les daemons piratebox, et que j’ai la flemme d’en faire,
|
||||
parce que systemd est une horreur a utiliser avec les scripts init. Donc
|
||||
non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas
|
||||
non, j’utiliserai debian. Le problème d’utiliser debian dans ce cas
|
||||
précis est que apt/dpkg a une gestion des dépendances dans un sens mais
|
||||
pas dans l'autre, en ce sens que si on installe un package "haut", c'est
|
||||
pas dans l’autre, en ce sens que si on installe un package “haut”, c’est
|
||||
a dire dépendant de plusieurs autres packages, apt/dpkg se charge
|
||||
efficacement d'installer toutes les dépendances nécessaires, tandis que
|
||||
si on désinstalle un package "bas", c'est a dire sur lequel de nombreux
|
||||
efficacement d’installer toutes les dépendances nécessaires, tandis que
|
||||
si on désinstalle un package “bas”, c’est a dire sur lequel de nombreux
|
||||
autres packages dépendent, apt/dpkg ne désinstalle pas ces packages
|
||||
"hauts", ce qui pose un vrai problème quand on se retrouve sur un
|
||||
Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui
|
||||
sera installé sur le système avant l'installation proprement dite
|
||||
(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd
|
||||
“hauts”, ce qui pose un vrai problème quand on se retrouve sur un
|
||||
Raspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui
|
||||
sera installé sur le système avant l’installation proprement dite
|
||||
(puisque le moyen “universel” d’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'autres critiques que l'ont pourrait faire
|
||||
concernant le Raspberry Pi. Son système de démarrage a s'arracher les
|
||||
<p>Il y a <strong>énormément</strong> d’autres critiques que l’ont pourrait faire
|
||||
concernant le Raspberry Pi. Son système de démarrage a s’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'OS qui lui même se lance, initialise le hardware,
|
||||
etc..., a un système bâtard du au fait que la puce au centre de la carte
|
||||
cherche le kernel de l’OS qui lui même se lance, initialise le hardware,
|
||||
etc…, 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'une cour d'immeuble, dans les quartiers
|
||||
pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le
|
||||
plus efficace qu'aient trouvé les personnes ayant implémenté cette
|
||||
calcul (probablement au fond d’une cour d’immeuble, dans les quartiers
|
||||
pauvres de Bratislava, vu la propreté de la greffe…), et le moyen le
|
||||
plus efficace qu’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... </p>
|
||||
etc… </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'est
|
||||
<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
|
||||
oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p>
|
||||
<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je
|
||||
le terminerai dès que j'aurai récupéré les outils nécessaires pour
|
||||
du code propriétaire a un projet se disant libre, mais en plus n’est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack,
|
||||
oui, mais uniquement quand c’est bien réalisé, sinon je dis non. </p>
|
||||
<p>Enfin, le projet que j’avais est toujours en cours de réalisation. Je
|
||||
le terminerai dès que j’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'il m'a posé, qu'il n'aurait pas du me poser, m'ont
|
||||
trop agacé pour que j'aie envie de le sortir et de jouer avec une fois
|
||||
vie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont
|
||||
trop agacé pour que j’aie envie de le sortir et de jouer avec une fois
|
||||
sa mission remplie. </p>
|
||||
<p>Dommage.</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/update/">Update</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/update/">Update</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-01-05T18:32:00+01:00">
|
||||
@ -532,7 +1076,7 @@ sa mission remplie. </p>
|
||||
<a href="//wxcafe.net/author/wxcafe.html"><i class="icon-user"></i>Wxcafe</a>
|
||||
<br />
|
||||
<span class="label">Category</span>
|
||||
<a href="//wxcafe.net/category/notes/"><i class="icon-folder-open"></i>Notes</a>
|
||||
<a href="//wxcafe.net/category/note/"><i class="icon-folder-open"></i>Note</a>
|
||||
<br />
|
||||
|
||||
|
||||
@ -540,12 +1084,12 @@ sa mission remplie. </p>
|
||||
|
||||
</footer><!-- /.post-info --></div>
|
||||
<div class="summary"><p>Juste une petite note pour annoncer le prochain article, consacré a la
|
||||
fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
|
||||
fabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt
|
||||
sur le blog!</p></div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="article">
|
||||
<h1><a href="//wxcafe.net/posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/">Mutt ou le client email le <del>meilleur</del> moins mauvais</a></h1>
|
||||
<h1><a href="//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/">Mutt ou le client email le <del>meilleur</del> moins mauvais</a></h1>
|
||||
<div class="well small"><footer class="post-info">
|
||||
<span class="label">Date</span>
|
||||
<span class="published" title="2013-01-02T02:12:00+01:00">
|
||||
@ -567,1084 +1111,257 @@ sur le blog!</p></div>
|
||||
<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'entre eux se démarque par sa moins-mauvais-itude, c'est
|
||||
Cependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’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">"just sucks less"</a>. Dans les faits, mutt est assez
|
||||
d’accueil, <a href="http://www.mutt.org">“just sucks less”</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'utiliser offlineimap en
|
||||
<code>/etc/Muttrc</code>, et il est courant d’utiliser offlineimap en
|
||||
conjonction avec celui ci, de façon a accéder aux mails même sans accès
|
||||
internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne
|
||||
internet (mutt dispose d’un système d’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'offlineimap se fait dans
|
||||
<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config
|
||||
connexion internet.) La configuration d’offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d’autre en fait, c’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'installer
|
||||
offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d’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'offlineimap :</p>
|
||||
<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span>
|
||||
<span class="cp">## Originally located in ~/.offlineimaprc</span>
|
||||
<span class="cp">## This should not be edited without creating a copy before</span>
|
||||
<span class="cp">## Created by Wxcafe (Clément Hertling)</span>
|
||||
<span class="cp">## Published under CC-BY-SA</span>
|
||||
Ma configuration d’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 class="p">[</span><span class="n">general</span><span class="p">]</span>
|
||||
<span class="cp"># List of accounts to be synced, separated by a comma.</span>
|
||||
<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</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 class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span>
|
||||
<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span>
|
||||
<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span>
|
||||
<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span>
|
||||
<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span>
|
||||
<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span>
|
||||
<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</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 class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span>
|
||||
<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span>
|
||||
<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span>
|
||||
<span class="cp"># Where should the mail be placed?</span>
|
||||
<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span>
|
||||
<span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</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 class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span>
|
||||
<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span>
|
||||
<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span>
|
||||
<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span>
|
||||
<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d'utilisateur</span>
|
||||
<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span>
|
||||
<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</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'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'ai tout bien commenté :3<br />
|
||||
<p>Ça devrait être assez simple a lire, j’ai tout bien commenté :3<br />
|
||||
Puis ma config mutt :</p>
|
||||
<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span>
|
||||
<span class="cp">## This file should not be edited without creating a copy</span>
|
||||
<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span>
|
||||
<span class="cp">## Published under CC-BY-SA</span>
|
||||
<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 class="cp"># General config for reading (fetched via offlineimap)</span>
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap)
|
||||
|
||||
<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span>
|
||||
<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span>
|
||||
set mbox_type = Maildir
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut)
|
||||
|
||||
<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span>
|
||||
<span class="cp"># dossier root mailbox/imap</span>
|
||||
set folder = ~/Email/
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap
|
||||
|
||||
<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span>
|
||||
<span class="cp"># dossier d'inbox</span>
|
||||
set spoolfile = +INBOX
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> dossier d'inbox
|
||||
|
||||
<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">'</span><span class="n">All</span> <span class="n">Mail</span><span class="err">'</span>
|
||||
<span class="cp"># dossier ou archiver les emails</span>
|
||||
set mbox = +'All Mail'
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails
|
||||
|
||||
<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span>
|
||||
<span class="cp"># enfin voila quoi.</span>
|
||||
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.
|
||||
|
||||
<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span>
|
||||
<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span>
|
||||
set header_cache = /.hcache/
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache)
|
||||
|
||||
<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span>
|
||||
<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span>
|
||||
set record = +Sent
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés
|
||||
|
||||
<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span>
|
||||
<span class="cp"># dossier dans lequel sont stockés les brouillons</span>
|
||||
set postponed = +Drafts
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons
|
||||
|
||||
<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span>
|
||||
<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span>
|
||||
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 class="cp"># General config for sending (using Mutt's native support)</span>
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt's native support)
|
||||
|
||||
<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">'</span><span class="n">password_placeholder</span><span class="err">'</span>
|
||||
<span class="cp"># votre mot de passe</span>
|
||||
set smtp_pass = 'password_placeholder'
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe
|
||||
|
||||
<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">"smtp://username@whatev.org:465/"</span>
|
||||
<span class="cp"># l'url ou envoyer les emails</span>
|
||||
set smtp_url = "smtp://username@whatev.org:465/"
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> l'url ou envoyer les emails
|
||||
|
||||
<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">"utf-8"</span>
|
||||
<span class="cp"># UTF8, NE PAS CHANGER</span>
|
||||
set send_charset = "utf-8"
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER
|
||||
|
||||
<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">".sign"</span>
|
||||
<span class="cp"># vous pouvez mettre votre signature dans .sign</span>
|
||||
set signature = ".sign"
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign
|
||||
|
||||
<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span class="cp"># il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible </span>
|
||||
<span class="cp"># comme ca.</span>
|
||||
set sig_on_top = yes
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> comme ca.
|
||||
|
||||
<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span>
|
||||
<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span>
|
||||
set ssl_verify_host = no
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement
|
||||
|
||||
<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">"wxcafe.net"</span>
|
||||
<span class="cp"># mettez l'adresse de votre serveur ici</span>
|
||||
set hostname = "wxcafe.net"
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> mettez l'adresse de votre serveur ici
|
||||
|
||||
<span class="cp"># Misc settings</span>
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> Misc settings
|
||||
|
||||
<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span>
|
||||
<span class="cp"># la façon de voir les emails par défaut.</span>
|
||||
auto_view text/html
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut.
|
||||
|
||||
<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">"%y-%m-%d %T"</span>
|
||||
<span class="cp"># format de date d'envoi/de reception.</span>
|
||||
set date_format = "%y-%m-%d %T"
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> format de date d'envoi/de reception.
|
||||
|
||||
<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">"%2C | %Z [%D] %-30.30F (%-4.4c) %s"</span>
|
||||
<span class="cp"># format de l'index (la présentation de l'interface)</span>
|
||||
<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span>
|
||||
set index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> format de l'index (la présentation de l'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>
|
||||
|
||||
<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span>
|
||||
<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">"$HOME/.mutt/aliases"</span>
|
||||
<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span>
|
||||
<span class="cp"># format : "alias short_name long_email_adress"</span>
|
||||
<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span>
|
||||
set sort_alias = alias
|
||||
set reverse_alias = yes
|
||||
set alias_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases"
|
||||
<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 : "alias short_name long_email_adress"
|
||||
source <span style="color: #f8f8f2">$alias_file</span>
|
||||
|
||||
<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span>
|
||||
<span class="cp"># ne pas biper. CE SON ME TUE T.T</span>
|
||||
set beep = no
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T
|
||||
|
||||
<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="cp"># ?</span>
|
||||
set tilde = yes
|
||||
set sleep_time = 0
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> ?
|
||||
|
||||
<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span>
|
||||
<span class="cp"># parametres de la barre coté gauche</span>
|
||||
set sidebar_visible = yes
|
||||
set sidebar_width = 15
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche
|
||||
|
||||
<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">"Clément Hertling (Wxcafé)"</span>
|
||||
<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">"wxcafe@wxcafe.net"</span>
|
||||
<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">"$HOME/.mutt/cacert"</span>
|
||||
<span class="cp"># parametres d'envoi. mettez vos propres infos a la place des miennes...</span>
|
||||
set realname = "Clément Hertling (Wxcafé)"
|
||||
set from = "wxcafe@wxcafe.net"
|
||||
set use_from = yes
|
||||
set certificate_file = "<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert"
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> parametres d'envoi. mettez vos propres infos a la place des miennes...
|
||||
|
||||
<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span>
|
||||
<span class="cp"># vous permet de vois les headers des mails. j'aime, donc je laisse.</span>
|
||||
set edit_headers = yes
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j'aime, donc je laisse.
|
||||
|
||||
<span class="cp"># Macros</span>
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> Macros
|
||||
|
||||
<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span>
|
||||
<span class="cp"># pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les </span>
|
||||
<span class="cp"># deux</span>
|
||||
<span class="cp"># \C represente la touche Control</span>
|
||||
<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'elle l'est dans la visionneuse, les deux qu'elle l'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
|
||||
|
||||
<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span>
|
||||
<span class="cp"># Control+p -> remonter d'un dossier dans la sidebar</span>
|
||||
bind index,pager \Cp sidebar-prev
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> Control+p -> remonter d'un dossier dans la sidebar
|
||||
|
||||
<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span>
|
||||
<span class="cp"># Control+n -> descendre d'un dossier dans la sidebar</span>
|
||||
bind index,pager \Cn sidebar-next
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> Control+n -> descendre d'un dossier dans la sidebar
|
||||
|
||||
<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span>
|
||||
<span class="cp"># Control+o -> ouvrir le dossier selectionné dans la sidebar</span>
|
||||
bind index,pager \Co sidebar-open
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> Control+o -> ouvrir le dossier selectionné dans la sidebar
|
||||
|
||||
<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">"=Trash"</span> <span class="s">"Trash"</span>
|
||||
<span class="cp"># d supprime le message en cours</span>
|
||||
macro index,pager d "=Trash" "Trash"
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours
|
||||
|
||||
<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span>
|
||||
<span class="cp"># permet de monter d'une ligne avec la touche up, au lieu de changer de message.</span>
|
||||
bind pager previous-line
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d'une ligne avec la touche up, au lieu de changer de message.
|
||||
|
||||
<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span>
|
||||
<span class="cp"># permet de descendre d'une ligne avec la touche down, au lieu de changer de </span>
|
||||
<span class="cp"># message</span>
|
||||
bind pager next-line
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d'une ligne avec la touche down, au lieu de changer de
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> message
|
||||
|
||||
<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span>
|
||||
<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span>
|
||||
<span class="cp"># raccourcis vim</span>
|
||||
bind pager j next-line
|
||||
bind pager k previous-line
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim
|
||||
|
||||
<span class="cp"># PGP signing commands</span>
|
||||
<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands
|
||||
|
||||
<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">"gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">"gpg --no-verbose --batch --output - --verify %s %f"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">"gpg --passphrase-fd 0 --no-verbose --batch --output - %f"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">"gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">"gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">"pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">"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"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">"gpg --no-verbose --import -v %f"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">"gpg --no-verbose --export --armor %r"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">"gpg --no-verbose --batch --fingerprint --check-sigs %r"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">"gpg --no-verbose --batch --with-colons --list-keys %r"</span>
|
||||
<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">"gpg --no-verbose --batch --with-colons --list-secret-keys %r"</span>
|
||||
<span class="n">set | ||||