(dp0 V/srv/www/content/la-cryptographie-avec-pgp-et-principalement-gnupg.md p1 (F1431623308.7538474 (V

PGP (pour pretty good privacy) est un système de\u000achiffrement asymétrique (pour plus d’information sur le chiffrement\u000aasymétrique, voir ici) utilisant en général les algorithmes RSA\u000aet/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a\u000asigner des emails. Le système de signature consiste a s’identifier en\u000atant que la personne que l’on est, en certifiant de son identité, et\u000arepose sur un système dit de Web of Trust.

\u000a

Ce concept de Web of Trust est simple: si je valide le code vous\u000aidentifiant (votre clé), en certifiant que vous êtes qui vous êtes et\u000aque je vous connais, et que d’autres personnes m’ont déjà\u000apersonnellement validé, les autres utilisateurs seront enclins a croire\u000aque vous êtes en effet la personne que vous prétendez être. Bien\u000aentendu, les utilisateurs validant trop de clés rapportées comme fausses\u000avoient la valeur de leurs signatures baissée, et toutes les clés signées\u000apar ces utilisateurs voient leur crédibilité baisser.
\u000aInversement, les “bons utilisateurs” voient la valeur de leurs\u000asignatures augmentée, ce qui augmente la crédibilité des clés qu’ils ont\u000asignées.

\u000a

Ceci dit, un email peut être a la fois signé et chiffré, de façon a être\u000asûr, non seulement que l\u2019expéditeur de l’email est bien celui qu’il dit\u000aêtre, mais aussi que l’email n’a pas été modifié entre l’envoi et\u000ala réception (en effet, avec un chiffrement de type RSA/DSA, une\u000amodification du corps de l’email rend ce dernier illisible, la clé\u000apublique ne  correspondant plus a la phrase de passe du message), ce qui\u000aoffre bien évidemment des avantages non négligeables dans un\u000aenvironnement ou la protection des échanges est importante (soit a peu\u000après partout sur internet, si vous tenez a votre vie privée. Pensez aquitter Gmail aussi, par exemple).

\u000a

Il est cependant a noter que les clés publiques sont généralement\u000asituées sur un serveur de clés publiques, tel pgp.mit.edu ou encore\u000asubkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des\u000aserveurs de clés publiques, craignant une compromission de ces serveurs.\u000aDans le cas d’utilisateurs normaux (c’est a dire n’échangeant pas de\u000asecrets classés secret-défense par email), la protection offerte par les\u000aserveurs de clé publiques est suffisante)

\u000a

L’une des implémentations les plus connues et utilisées de PGP est sans\u000aconteste GPG (GNU Privacy Guard) , qui comme son nom l’indique fait\u000apartie du projet GNU, et qui (<troll> de façon surprenante pour un\u000aprogramme GNU</troll>) est extrêmement efficace et claire.

\u000a

Après ces explications techniques, voici venue le\u000amoment intéressant/utile, a savoir l’application. Le chiffrement et la\u000asignature de mails doivent cependant attendre un petit peu, étant donné\u000aqu’il vous faut d’abord créer votre clé et la placer sur un serveur de\u000aclés publiques, de façon à ce que votre destinataire puisse vous\u000aidentifier lorsqu’il recevra le mail, mais aussi a configurer votre\u000aclient mail pour utiliser gpg (je baserai les explications de cet\u000aarticle sur Thunderbird, mais des explications efficaces sont trouvables\u000afacilement sur les interwebs).

\u000a

Tout d’abord, générons une clé GPG :

\u000a
 gpg --gen-key\u000a
\u000a\u000a\u000a

GPG va vous demander les méthodes de chiffrement que vous voulez\u000autiliser, le plus sur est de laisser la valeur par défaut. La question\u000asuivante est de savoir quelle taille votre clé doit faire, il est\u000apréférable de choisir la taille la plus importante possible (4096). GPG\u000aveut ensuite savoir quand votre clé doit expirer. La méthode simple est\u000abien évidemment de ne jamais la faire expirer, il est cependant plus\u000aintéressant dans une logique de sécurité de régler cette durée a six\u000amois/un an.

\u000a

Des informations personnelles vous sont ensuite demandées,\u000aconcernant votre nom (mettez le vrai, tel qu’il apparaît sur votre carte\u000ad’identité, si vous souhaitez utiliser votre véritable identité), votre\u000aadresse mail (mettez la plus utilisée, vous pourrez en rajouter plus\u000atard), et un mot de passe pour la clé (utilisez un mot de passe\u000asécurisé!! Il est conseillé d’utiliser au moins 8 caractères, dont majuscules,\u000aminuscules, caractères spéciaux et nombres (vous pouvez utiliser la\u000acommande makepasswd, qui génère automatiquement un mot de\u000apasse)

\u000a

GPG va maintenant prendre un peu de temps pour générer le couple clé\u000apublique/clé privée, vous devriez profiter de ce temps pour effectuer\u000ades opérations autres sur votre ordinateur : taper des textes, lancer\u000ades films, écouter de la musique… De façon à augmenter les chances\u000ad’obtenir un nombre bien aléatoire (le générateur d’aléatoire se base\u000asur la RAM pour obtenir des bits au hasard)

\u000a

Une fois cela fini, vous obtenez un couple clé publique/clé privée, que\u000avous ne pouvez pas visualiser entièrement pour l’instant. Il est\u000acependant possible (et recommandé) de les exporter pour les sauvegarder\u000avia une commande:

\u000a
gpg --armor --export --output=pubkey.gpg\u000a
\u000a\u000a\u000a

pour la clé publique, et

\u000a
gpg --armor --export-secret-keys --output=seckey.gpg\u000a
\u000a\u000a\u000a

pour la clé privée. Il est possible et même souhaitable de copier ces\u000aclés sur une clé USB, une carte SD, ou un autre support de stockage\u000arésistant, de façon a avoir une solution de sauvegarde, au cas ou vous\u000aperdiez ces clés sur ce PC.

\u000a

Cela fait, listons les informations sur votre clé publique :

\u000a
$ gpg --list-keys --fingerprint\u000apub     4096R/27D81AC8 2012-11-17\u000a    Key fingerprint = 6345 A91A FF89 97E0 13D0 96A9 9E2A 1917 27D8 1AC8\u000auid             Clément Hertling (Wxcafe) \u000auid             [jpeg image of size 14692]\u000asub     4096R/9ED7F77F 2012-11-17\u000a
\u000a\u000a\u000a

La partie pub indique que c’est une clé publique, 4096R indique que c’est \u000aune clé RSA sur 4096 bits. La partie 27D81AC8 est \u000al’identifiant de la clé publique, Key fingerprint = 6345 A91A FF89 97E0 13D0 \u000a96A9 9E2A 1917 27D8 1AC8 est appelé fingerprint de la clé. Les champs\u000auid sont des manières d’identifier la clé et la personne associée a\u000acelle-ci, et enfin le champ sub est indicateur d’une subkey, système \u000auniquement pris en charge par GPG et non inclus dans les premières \u000aversions de PGP, donc non-implémentées dans nombre de clients pgp.
\u000aPassons maintenant a la mise en place de cette clé publique sur un\u000aserveur de clés : nous utiliserons ici le serveur pgp.mit.edu.

\u000a
gpg --keyserver pgp.mit.edu --send-keys *ID de la clé a uploader*\u000a
\u000a\u000a\u000a

Maintenant que votre clé publique a été uploadée, vous pouvez l’utiliser\u000apour signer et chiffrer vos emails!
\u000aInstallons donc l’extension Enigmail pour Thunderbird, permettant de\u000achiffrer/signer vos emails de façon transparente. Il conviendra de\u000aparamétrer cette extension, via le menu OpenPGP dans Thunderbird, puis\u000aSetup Wizard (l’option entre Help et About OpenPGP). Normalement,\u000aEnigmail détecte votre installation de gpg automatiquement, si cependant\u000ace n’était pas le cas, vous pouvez utiliser la clé exportée tout a\u000al’heure (pubkey.gpg) en l’important (import key from file).

\u000a

Selon les options que vous avez utilisées, vos emails seront\u000aautomatiquement signés et/ou chiffrés a l’envoi. Gardez cependant a\u000al’esprit que si tout le monde peut lire les mails signés, il n’en est\u000apas de même pour les mails chiffrés, pour lesquels il est nécessaire de\u000aposséder la clé publique du correspondant en question, et de posséder\u000asoi même une clé privée, donc d’utiliser OpenPGP aussi.
\u000aConcernant les signatures de clés, elles fonctionnent de manière très\u000asimple :
\u000aVous devez télécharger la clé de votre correspondant, via un

\u000a
 gpg --keyserver pgp.mit.edu --search-keys *ID de la clé de votre correspondant*\u000a
\u000a\u000a\u000a

(a noter que cette commande fonctionne aussi en cherchant une adresse\u000aemail ou un nom. Cependant, en cherchant via l’identifiant de la clé,\u000avous êtes sur de trouver votre correspondant. Globalement, l’email est\u000alui aussi assez sûr en terme de recherche de clés, tandis que le nom\u000adonne rarement un résultat). L’étape suivante est de vérifier que votre\u000acorrespondant est bien la personne qui est spécifiée sur sa clé. Pour\u000acela, il convient d’avoir déjà vu physiquement cette personne et si\u000apossible d’avoir vu une pièce d’identité lui appartenant, et d’avoir une\u000aconfirmation de cette personne que la clé que vous voyez lui appartient\u000abien.
\u000aCeci fait, vous pouvez signer la clé via un

\u000a
 gpg --sign *ID de la clé a signer*\u000a
\u000a\u000a\u000a

puis la renvoyer au serveur via

\u000a
 gpg --keyserver pgp.mit.edu --send-key *ID de la clé a signer*\u000a
\u000a\u000a\u000a

Voila, la clé de votre correspondant est signée!

\u000a

Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée\u000agrâce a cette superbe invention qu’est la cryptographie!

p2 (dp3 Vdate p4 cpelican.utils SafeDatetime p5 (S'\x07\xdc\x0b\x13\x00$\x00\x00\x00\x00' p6 tp7 Rp8 sVcategory p9 ccopy_reg _reconstructor p10 (cpelican.urlwrappers Category p11 c__builtin__ object p12 Ntp13 Rp14 (dp15 S'_name' p16 VTutoriel p17 sS'slug' p18 Vtutoriel p19 sS'settings' p20 (dp21 VCATEGORY_URL p22 Vcategory/{slug}/ p23 sVPAGE_ORDER_BY p24 Vbasename p25 sVWITH_FUTURE_DATES p26 I01 sVCATEGORY_SAVE_AS p27 Vcategory/{slug}/index.html p28 sS'LINKS' p29 ((VSource! p30 Vhttps://github.com/wxcafe/blog-source p31 Vcode p32 tp33 (VZerobin p34 Vhttp://paste.wxcafe.net p35 Vpaste p36 tp37 (VPublic Git p38 Vhttp://git.wxcafe.net p39 Vgithub-sign p40 tp41 tp42 sVARTICLE_ORDER_BY p43 Vslug p44 sVDEFAULT_LANG p45 Vfr p46 sVCACHE_CONTENT p47 I01 sVPAGE_LANG_SAVE_AS p48 Vpages/{slug}-{lang}.html p49 sVDRAFT_SAVE_AS p50 Vdrafts/{slug}.html p51 sVPAGE_PATHS p52 (lp53 Vpages p54 asVDEFAULT_PAGINATION p55 I10 sVDOCUTILS_SETTINGS p56 (dp57 sVTRANSLATION_FEED_ATOM p58 Vfeeds/all-%s.atom.xml p59 sVJINJA_EXTENSIONS p60 (lp61 sVSTATIC_PATHS p62 (lp63 Vimages p64 asVDAY_ARCHIVE_SAVE_AS p65 V p66 sVARTICLE_LANG_URL p67 V{slug}-{lang}.html p68 sVSLUGIFY_SOURCE p69 Vtitle p70 sVSTATIC_URL p71 V{path} p72 sVCATEGORY_FEED_ATOM p73 Vfeeds/feed.%s.xml p74 sVOUTPUT_SOURCES p75 I00 sVDIRECT_TEMPLATES p76 (Vindex p77 Vtags p78 Vcategories p79 Vauthors p80 Varchives p81 tp82 sVPDF_GENERATOR p83 I00 sVSTATIC_EXCLUDES p84 (lp85 sVTAG_URL p86 Vtag/{slug}.html p87 sVARTICLE_PATHS p88 (lp89 g66 asVLOG_FILTER p90 (lp91 sVFILENAME_METADATA p92 V(?P\u005cd{4}-\u005cd{2}-\u005cd{2}).* p93 sVDISPLAY_PAGES_ON_MENU p94 I01 sVPELICAN_CLASS p95 Vpelican.Pelican p96 sVCACHE_PATH p97 V/srv/www/cache p98 sVAUTORELOAD_IGNORE_CACHE p99 I00 sVINTRASITE_LINK_REGEX p100 V[{|](?P.*?)[|}] p101 sVDEFAULT_ORPHANS p102 I0 sVTAG_CLOUD_MAX_ITEMS p103 I100 sS'AUTHOR' p104 Vwxcafé p105 sVDISPLAY_CATEGORIES_ON_MENU p106 I00 sVCHECK_MODIFIED_METHOD p107 Vmtime p108 sVARTICLE_EXCLUDES p109 (lp110 g54 asVDEFAULT_DATE_FORMAT p111 V%a %d %B %Y p112 sVTAG_CLOUD_STEPS p113 I4 sVPLUGINS p114 (lp115 sVTYPOGRIFY p116 I00 sVFEED_ALL_ATOM p117 Vfeeds/feed.atom.all.xml p118 sVEXTRA_TEMPLATES_PATHS p119 (lp120 sVOUTPUT_RETENTION p121 (tsVPAGE_LANG_URL p122 Vpages/{slug}-{lang}.html p123 sVTHEME p124 V/srv/www/themes/bootstrap2 p125 sVUSE_FOLDER_AS_CATEGORY p126 I01 sVDEBUG p127 I00 sVREVERSE_CATEGORY_ORDER p128 I00 sVRELATIVE_URLS p129 I00 sVDATE_FORMATS p130 (dp131 sVSITEURL p132 V//wxcafe.net p133 sVCONTENT_CACHING_LAYER p134 Vreader p135 sS'SOCIAL' p136 ((VTwitter p137 Vhttps://twitter.com/wxcafe p138 Vtwitter p139 tp140 (VGithub p141 Vhttps://github.com/wxcafe p142 Vgithub p143 tp144 (VEmail p145 Vmailto://wxcafe@wxcafe.net p146 Venvelope p147 tp148 (VGpg p149 Vhttps://pub.wxcafe.net/wxcafe.asc p150 Vkey p151 tp152 (VIRL p153 Vhttp://leloop.org/where.html p154 Vmap-marker p155 tp156 tp157 sVNEWEST_FIRST_ARCHIVES p158 I01 sVPATH_METADATA p159 g66 sVPDF_STYLE p160 Vtwelvepoint p161 sS'DISPLAY_CATEGORIES_ON_BAR' p162 I01 sVTEMPLATE_PAGES p163 (dp164 sVFEED_DOMAIN p165 g133 sVTYPOGRIFY_IGNORE_TAGS p166 (lp167 sVGZIP_CACHE p168 I01 sVAUTHOR_FEED_RSS p169 Vfeeds/%s.rss.xml p170 sS'TIMEZONE' p171 VEurope/Paris p172 sVDRAFT_URL p173 Vdrafts/{slug}.html p174 sVPAGE_EXCLUDES p175 (lp176 g66 asVAUTHOR_SAVE_AS p177 Vauthor/{slug}.html p178 sVREADERS p179 (dp180 sS'FEED_RSS' p181 Vfeeds/feed.rss.xml p182 sVDRAFT_LANG_URL p183 Vdrafts/{slug}-{lang}.html p184 sVOUTPUT_SOURCES_EXTENSION p185 V.text p186 sVPAGINATION_PATTERNS p187 (lp188 g10 (cpelican.paginator PaginationRule p189 c__builtin__ tuple p190 (I0 V{name}{number}{extension} p191 V{name}{number}{extension} p192 tp193 tp194 Rp195 asVSTATIC_EXCLUDE_SOURCES p196 I01 sVJINJA_FILTERS p197 (dp198 sVARTICLE_SAVE_AS p199 Vposts/{slug}/index.html p200 sVYEAR_ARCHIVE_SAVE_AS p201 g66 sVCSS_FILE p202 Vmain.css p203 sVAUTHOR_URL p204 Vauthor/{slug}.html p205 sVIGNORE_FILES p206 (lp207 V.#* p208 asVSUMMARY_MAX_LENGTH p209 I50 sVSLUG_SUBSTITUTIONS p210 (tsVTHEME_STATIC_PATHS p211 (lp212 Vstatic p213 asS'CATEGORY_FEED_RSS' p214 Vfeeds/feed.rss.%s.xml p215 sVTHEME_STATIC_DIR p216 Vtheme p217 sVLOAD_CONTENT_CACHE p218 I01 sVDRAFT_LANG_SAVE_AS p219 Vdrafts/{slug}-{lang}.html p220 sS'FEED_ALL_RSS' p221 Vfeeds/feed.rss.all.xml p222 sVEXTRA_PATH_METADATA p223 (dp224 sVLOCALE p225 (lp226 g66 asVWRITE_SELECTED p227 (lp228 sVDELETE_OUTPUT_DIRECTORY p229 I00 sVFEED_MAX_ITEMS p230 g66 sVPATH p231 V/srv/www/content p232 sVPAGE_URL p233 Vpages/{slug}/ p234 sVSITENAME p235 VWxcafé p236 sVARTICLE_PERMALINK_STRUCTURE p237 g66 sVARTICLE_URL p238 Vposts/{slug}/ p239 sVMONTH_ARCHIVE_SAVE_AS p240 g66 sVDEFAULT_METADATA p241 (tsVDEFAULT_CATEGORY p242 Vmisc p243 sVPLUGIN_PATHS p244 (lp245 sVPAGINATED_DIRECT_TEMPLATES p246 (Vindex p247 tp248 sVPDF_STYLE_PATH p249 g66 sVSTATIC_SAVE_AS p250 g72 sVTAG_SAVE_AS p251 Vtag/{slug}.html p252 sVPYGMENTS_RST_OPTIONS p253 (dp254 sVAUTHOR_FEED_ATOM p255 Vfeeds/%s.atom.xml p256 sVARTICLE_LANG_SAVE_AS p257 g68 sVPAGE_SAVE_AS p258 Vpages/{slug}/index.html p259 sVMD_EXTENSIONS p260 (lp261 Vcodehilite(linenums=False, guess_lang=True, noclasses=True, pygments_style=monokai) p262 aVsmarty p263 asVOUTPUT_PATH p264 V/srv/www/output p265 sS'FEED_ATOM' p266 Vfeeds/feed.atom.xml p267 sVDEFAULT_STATUS p268 Vpublished p269 ssbsVtitle p270 VLa cryptographie avec PGP et principalement GnuPG p271 sVslug p272 Vla-cryptographie-avec-pgp-et-principalement-gnupg p273 sVauthor p274 g10 (cpelican.urlwrappers Author p275 g12 Ntp276 Rp277 (dp278 g16 VWxcafe p279 sg18 Vwxcafe p280 sg20 g21 sbstp281 tp282 sV/srv/www/content/nat.md p283 (F1431623308.6978474 (V

NAT (Network Address Translation) in a word?
\u000aIt’s complicated. Very. Don’t do it, you’d damage your brain.

\u000a

Bon, sinon, prochain article serieux vite, bisous.

p284 (dp285 Vdate p286 g5 (S'\x07\xde\x02\x11\x05\x02\x00\x00\x00\x00' p287 tp288 Rp289 sVcategory p290 g10 (g11 g12 Ntp291 Rp292 (dp293 g16 VRanting p294 sg18 Vranting p295 sg20 g21 sbsVtitle p296 VNAT p297 stp298 tp299 sV/srv/www/content/update-a-propos-du-blog.md p300 (F1431623308.7018473 (V

Bonsoir! Un petit post pour faire un peu le point sur ce blog.
\u000aComme vous avez pu le remarquer, j’ai un peu de mal a tenir les délais\u000aque je m’étais fixés pour ce blog (un post tous les 8 jours), et après y\u000aavoir un tantinet réfléchi, ceci est du a deux points principaux :

\u000a\u000a

A cause de cela, j’ai pris la décision de changer le rythme de parution\u000ades articles a un *minimum* d’un post tous les 10 jours. Bien entendu,\u000asi j’ai de l’inspiration en trop, plus de posts sont envisageables.

\u000a

Voila. A part ca, je tiens a vous remercier de me lire (c’est assez\u000aétonnant de voir ca…), et je précise que je vais ajouter une page\u000aAbout Me, qui bien entendu rassemblera des informations sur moi, ma vie,\u000amon oeuvre :P

\u000a

Ceci dit, je vais bosser un peu sur le prochain article.

\u000a

A plus tard!

p301 (dp302 Vdate p303 g5 (S'\x07\xdc\t\x12\x109\x00\x00\x00\x00' p304 tp305 Rp306 sVcategory p307 g10 (g11 g12 Ntp308 Rp309 (dp310 g16 VNotes p311 sg18 Vnotes p312 sg20 g21 sbsVtitle p313 VUpdate a propos du blog p314 sVslug p315 Vupdate-a-propos-du-blog p316 sVauthor p317 g10 (g275 g12 Ntp318 Rp319 (dp320 g16 VWxcafe p321 sg18 Vwxcafe p322 sg20 g21 sbstp323 tp324 sV/srv/www/content/ssl-starttls.md p325 (F1440203789.102608 (V

Le chiffrement SSL pour les services en ligne est un problème relativement\u000arécent, par rapport a l’histoire d’Internet. Sa mise en place pose \u000aproblème : les protocoles existants ne s’accommodent qu’assez mal de recevoir\u000asoudainement un flot de données chiffrées, mais développer de nouveaux\u000aprotocoles est complexe et n’apporte rien d’intéressant. Pour palier a ce\u000aproblème, deux solutions sont apparues.

\u000a

Le première consiste à faire écouter les services sur un\u000aautre port, dans un tunnel SSL. De cette façon, le service existant écoute\u000anormalement, mais il ne répond pas directement aux requêtes. A la place, un\u000atunnel SSL est mis en place, et les requêtes et les réponses passent dans le \u000atunnel (ou elles apparaissent donc chiffrées pour l’extérieur). Cela permet de\u000aproposer un service chiffré en modifiant de façon minimale le programme, au prix\u000ade devoir aussi changer tous les clients, et de devoir les orienter sur un autre\u000aport.

\u000a

L’autre approche qui a été utilisée est une approche d’upgrade. La\u000acommunication commence en mode non chiffré, puis le client demande l’upgrade de\u000ala connexion vers le mode chiffré s’il le supporte, les deux machines\u000amachines font un handshake SSL et la communication continue a travers le\u000atunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls\u000ales clients capables de passer en SSL le feront, ce qui permet de faire la “mise\u000aa jour” en douceur.

\u000a

Il est souvent demandé quelle est la meilleure méthode pour mettre en place un\u000aservice – laisser un port pour le SSL et un pour le trafic non chiffré, ou bien\u000aun seul, avec STARTTLS, qui upgrade les connexions si nécessaire.
\u000aLa réponse est que STARTTLS est plus interessant, pour plusieurs raisons. Tout\u000ad’abord, il permet de n’utiliser qu’un seul port : ça permet de simplifier la\u000aconfiguration du firewall. En plus de ça, il permet aux clients “anciens” (ceux\u000aqui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se\u000aconnecter, même si cela signifie que leurs informations seront transmises en\u000aclair. Surtout, il permet d’éviter aux utilisateurs d’avoir a configurer leurs\u000aclients. Si le client supporte le chiffrement, il l’activera de lui même s’il\u000avoit qu’il est disponible.
\u000aBref, mettez en place du STARTTLS, et pas du SSL. C’est mieux pour la sécurité\u000ade tout le monde.

p326 (dp327 Vdate p328 g5 (S'\x07\xdf\x05\x10\x02\x00\x00\x00\x00\x00' p329 tp330 Rp331 sVcategory p332 g10 (g11 g12 Ntp333 Rp334 (dp335 g16 VNote p336 sg18 Vnote p337 sg20 (dp338 VCATEGORY_URL p339 Vcategory/{slug}/ p340 sVPAGE_ORDER_BY p341 Vbasename p342 sVWITH_FUTURE_DATES p343 I01 sVCATEGORY_SAVE_AS p344 Vcategory/{slug}/index.html p345 sS'LINKS' p346 ((VSource! p347 Vhttps://github.com/wxcafe/blog-source p348 Vcode p349 tp350 (VPublic Git p351 Vhttp://git.wxcafe.net p352 Vgithub-sign p353 tp354 tp355 sVARTICLE_ORDER_BY p356 Vslug p357 sVDEFAULT_LANG p358 Vfr p359 sVCACHE_CONTENT p360 I01 sVPAGE_LANG_SAVE_AS p361 Vpages/{slug}-{lang}.html p362 sVDRAFT_SAVE_AS p363 Vdrafts/{slug}.html p364 sVPAGE_PATHS p365 (lp366 Vpages p367 asVDEFAULT_PAGINATION p368 I10 sVDOCUTILS_SETTINGS p369 (dp370 sVTRANSLATION_FEED_ATOM p371 Vfeeds/all-%s.atom.xml p372 sVJINJA_EXTENSIONS p373 (lp374 sVSTATIC_PATHS p375 (lp376 Vimages p377 asVDAY_ARCHIVE_SAVE_AS p378 g66 sVARTICLE_LANG_URL p379 V{slug}-{lang}.html p380 sVSLUGIFY_SOURCE p381 Vtitle p382 sVSTATIC_URL p383 V{path} p384 sVCATEGORY_FEED_ATOM p385 Vfeeds/feed.%s.xml p386 sVOUTPUT_SOURCES p387 I00 sVDIRECT_TEMPLATES p388 (Vindex p389 Vtags p390 Vcategories p391 Vauthors p392 Varchives p393 tp394 sVPDF_GENERATOR p395 I00 sVSTATIC_EXCLUDES p396 (lp397 sVTAG_URL p398 Vtag/{slug}.html p399 sVARTICLE_PATHS p400 (lp401 g66 asVLOG_FILTER p402 (lp403 sVFILENAME_METADATA p404 V(?P\u005cd{4}-\u005cd{2}-\u005cd{2}).* p405 sVDISPLAY_PAGES_ON_MENU p406 I01 sVPELICAN_CLASS p407 Vpelican.Pelican p408 sVCACHE_PATH p409 V/srv/www/cache p410 sVAUTORELOAD_IGNORE_CACHE p411 I00 sVINTRASITE_LINK_REGEX p412 V[{|](?P.*?)[|}] p413 sVDEFAULT_ORPHANS p414 I0 sVTAG_CLOUD_MAX_ITEMS p415 I100 sS'AUTHOR' p416 Vwxcafé p417 sVDISPLAY_CATEGORIES_ON_MENU p418 I00 sVCHECK_MODIFIED_METHOD p419 Vmtime p420 sVARTICLE_EXCLUDES p421 (lp422 g367 asVDEFAULT_DATE_FORMAT p423 V%a %d %B %Y p424 sVTAG_CLOUD_STEPS p425 I4 sVPLUGINS p426 (lp427 sVTYPOGRIFY p428 I00 sVFEED_ALL_ATOM p429 Vfeeds/feed.atom.all.xml p430 sVEXTRA_TEMPLATES_PATHS p431 (lp432 sVOUTPUT_RETENTION p433 (tsVPAGE_LANG_URL p434 Vpages/{slug}-{lang}.html p435 sVTHEME p436 V/srv/www/themes/bootstrap2 p437 sVUSE_FOLDER_AS_CATEGORY p438 I01 sVDEBUG p439 I00 sVREVERSE_CATEGORY_ORDER p440 I00 sVRELATIVE_URLS p441 I00 sVDATE_FORMATS p442 (dp443 sVSITEURL p444 V//wxcafe.net p445 sVCONTENT_CACHING_LAYER p446 Vreader p447 sS'SOCIAL' p448 ((VTwitter p449 Vhttps://twitter.com/wxcafe p450 Vtwitter p451 tp452 (VGithub p453 Vhttps://github.com/wxcafe p454 Vgithub p455 tp456 (VEmail p457 Vmailto://wxcafe@wxcafe.net p458 Venvelope p459 tp460 (VGpg p461 Vhttps://pub.wxcafe.net/wxcafe.asc p462 Vkey p463 tp464 (VIRL p465 Vhttps://www.openstreetmap.org/relation/105146 p466 Vmap-marker p467 tp468 tp469 sVNEWEST_FIRST_ARCHIVES p470 I01 sVPATH_METADATA p471 g66 sVPDF_STYLE p472 Vtwelvepoint p473 sS'DISPLAY_CATEGORIES_ON_BAR' p474 I01 sVTEMPLATE_PAGES p475 (dp476 sVFEED_DOMAIN p477 g445 sVTYPOGRIFY_IGNORE_TAGS p478 (lp479 sVGZIP_CACHE p480 I01 sVAUTHOR_FEED_RSS p481 Vfeeds/%s.rss.xml p482 sS'TIMEZONE' p483 VEurope/Paris p484 sVDRAFT_URL p485 Vdrafts/{slug}.html p486 sVPAGE_EXCLUDES p487 (lp488 g66 asVAUTHOR_SAVE_AS p489 Vauthor/{slug}.html p490 sVREADERS p491 (dp492 sS'FEED_RSS' p493 Vfeeds/feed.rss.xml p494 sVDRAFT_LANG_URL p495 Vdrafts/{slug}-{lang}.html p496 sVOUTPUT_SOURCES_EXTENSION p497 V.text p498 sVPAGINATION_PATTERNS p499 (lp500 g10 (g189 g190 (I0 V{name}{number}{extension} p501 V{name}{number}{extension} p502 tp503 tp504 Rp505 asVSTATIC_EXCLUDE_SOURCES p506 I01 sVJINJA_FILTERS p507 (dp508 sVARTICLE_SAVE_AS p509 Vposts/{slug}/index.html p510 sVYEAR_ARCHIVE_SAVE_AS p511 g66 sVCSS_FILE p512 Vmain.css p513 sVAUTHOR_URL p514 Vauthor/{slug}.html p515 sVIGNORE_FILES p516 (lp517 V.#* p518 asVSUMMARY_MAX_LENGTH p519 I50 sVSLUG_SUBSTITUTIONS p520 (tsVTHEME_STATIC_PATHS p521 (lp522 Vstatic p523 asS'CATEGORY_FEED_RSS' p524 Vfeeds/feed.rss.%s.xml p525 sVTHEME_STATIC_DIR p526 Vtheme p527 sVLOAD_CONTENT_CACHE p528 I01 sVDRAFT_LANG_SAVE_AS p529 Vdrafts/{slug}-{lang}.html p530 sS'FEED_ALL_RSS' p531 Vfeeds/feed.rss.all.xml p532 sVEXTRA_PATH_METADATA p533 (dp534 sVLOCALE p535 (lp536 g66 asVWRITE_SELECTED p537 (lp538 sVDELETE_OUTPUT_DIRECTORY p539 I00 sVFEED_MAX_ITEMS p540 g66 sVPATH p541 V/srv/www/content p542 sVPAGE_URL p543 Vpages/{slug}/ p544 sVSITENAME p545 VWxcafé p546 sVARTICLE_PERMALINK_STRUCTURE p547 g66 sVARTICLE_URL p548 Vposts/{slug}/ p549 sVMONTH_ARCHIVE_SAVE_AS p550 g66 sVDEFAULT_METADATA p551 (tsVDEFAULT_CATEGORY p552 Vmisc p553 sVPLUGIN_PATHS p554 (lp555 sVPAGINATED_DIRECT_TEMPLATES p556 (Vindex p557 tp558 sVPDF_STYLE_PATH p559 g66 sVSTATIC_SAVE_AS p560 g384 sVTAG_SAVE_AS p561 Vtag/{slug}.html p562 sVPYGMENTS_RST_OPTIONS p563 (dp564 sVAUTHOR_FEED_ATOM p565 Vfeeds/%s.atom.xml p566 sVARTICLE_LANG_SAVE_AS p567 g380 sVPAGE_SAVE_AS p568 Vpages/{slug}/index.html p569 sVMD_EXTENSIONS p570 (lp571 Vcodehilite(linenums=False, guess_lang=True, noclasses=True, pygments_style=monokai) p572 aVsmarty p573 asVOUTPUT_PATH p574 V/srv/www/output p575 sS'FEED_ATOM' p576 Vfeeds/feed.atom.xml p577 sVDEFAULT_STATUS p578 Vpublished p579 ssbsVtitle p580 VSSL - STARTTLS p581 sVslug p582 Vssl-starttls p583 sVauthor p584 g10 (g275 g12 Ntp585 Rp586 (dp587 g16 VWxcafe p588 sg18 Vwxcafe p589 sg20 g338 sbstp590 tp591 sV/srv/www/content/les-systemes-de-fichiers.md p592 (F1431623308.6978474 (V

Un système de fichiers. Vous en avez surement déjà entendu parlé si vous\u000aavec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous\u000aconnaissez surement NTFS, EXT4, ou encore FAT32.

\u000a

Ces différents noms désignent en effet des systèmes de fichiers. Mais\u000aqu’est-ce qu’un système de fichiers?

\u000a

Pour comprendre cela, il faut déjà savoir ce qu’est exactement un\u000afichier. Un fichier est un ensemble de blocs (les blocs sont l’unité la\u000aplus petite traitable par le matériel, ils font généralement 1 ou 4 Kio\u000a(kibioctet), en fonction du système de fichier utilisé.), qui est\u000adonc composé de bits, interprétés différemment en fonction du type de\u000afichier. Cependant, seul, le fichier n’est pas accessible, puisqu’il\u000an’est pas indexé, c’est a dire que l’OS ne sait pas qu’il est présent,\u000aou il commence ni où il s’arrête (je schématise un peu, mais c’est\u000al’idée).

\u000a

Ainsi, le système de fichier donne un cadre et un standard à\u000al’arborescence des fichiers. Par exemple, le système de fichier ext4\u000autilise des blocs de 1 Kio, et de ce fait, toutes les partitions de\u000adisque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio\u000aet mesurer la taille des fichiers en blocs de cette façon. Les systèmes\u000ade fichiers nécessitent l’inclusion de drivers dans le noyau pour\u000apouvoir être pris en compte.

\u000a

Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, \u000areiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu \u000après tout type de partition récente.

\u000a

Il convient de bien faire la différence entre le système de fichier et\u000al’arborescence des fichiers. Si l’arborescence des fichiers est en fait\u000aune entité virtuelle englobant la racine / et tous les fichiers et\u000adossiers contenus dedans, le système de fichier permet a votre système\u000aGNU/Linux de distinguer les différents fichiers composants cette\u000aarborescence.

\u000a

Détaillons maintenant les types de fichiers les plus répandus:

\u000a
    \u000a
  • \u000a

    FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table,\u000a soit la définition d’un système de fichier), remplissent leur rôle le\u000a plus simplement possible. Ne permettant (historiquement) que des noms de\u000a 8 caractères (plus extension de trois caractères), ni chiffrement, ni\u000a système de distinction d’utilisateurs (DOS étant un système\u000a mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32,\u000a utlisants respectivement des blocs de 16 et 32 Kio.

    \u000a
  • \u000a
  • \u000a

    NTFS :. Le NTFS (pour New Technology File System, rapport a Windows\u000a NT) est un système de fichier qui est apparu avec Windows XP, et qui\u000a était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a\u000a FAT différentes capacités dont le chiffrement, les liens symboliques, la\u000a compression et les quotas pour les volumes, permettant de limiter la\u000a taille maximum occupée dans une partition.

    \u000a
  • \u000a
  • \u000a

    ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012.\u000a Ne différant pas énormément de NTFS, je le mentionne principalement \u000a parce qu’il est prévu qu’il soit le défaut pour Windows 8. \u000a Il apporte principalement la redondance, c’est a dire que chaque\u000a fichier possède une somme de contrôle en 64 bits stockée dans un fichier\u000a séparé pour éviter les corruption de disque.

    \u000a
  • \u000a
  • \u000a

    Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers\u000a les plus utilisés sous linux pour le grand public. (Je traiterai ici\u000a d’ext4, puisque c’est le plus récent.) Il dispose de toutes les\u000a fonctions que l’on peut attendre d’un système de fichiers moderne, ni\u000a plus ni moins. Ainsi, ext4 est un système de fichiers journalisé,\u000a acceptant les capacités jusqu\u2019à 1 Exioctet, et utilise l’allocation dite\u000a “par extent”, ce qui signifie que la création d’un fichier réserve\u000a automatiquement les zones contiguës de façon a réduire la fragmentation.

    \u000a
  • \u000a
  • \u000a

    ReiserFS : ce système de fichiers, créé par le (légèrement mégalo)\u000a programmeur Hans Reiser, est a retenir pour avoir été le premier système\u000a de fichiers journalisé, et accepte un nombre de fichiers de l’ordre des\u000a 4 milliards. Le but de ce système est de créer un système polyvalent, a\u000a la fois système de fichiers et base de donnée (de part sa grande\u000a capacité en terme de nombre de fichiers et de l’utilisation d’un\u000a journal.)

    \u000a
  • \u000a
  • \u000a

    Btrfs : ce système est l’évolution logique d’ext4, et inclut lui aussi\u000a l’allocation par extent, mais possède de plus un système de\u000a sous-volumes, qui permet d\u2019accéder a plusieurs arborescences de fichiers\u000a montées en même temps (système pratique et utile pour faire des\u000a snapshots de systèmes.). Il permet aussi de redimensionner a chaud la\u000a taille des partitions, en les agrandissant ou en les rétrécissant, est\u000a compatible avec LVM, a un système de checking intégré (btrfsck), et\u000a utilise un algorithme de compression appelé LZ4, qui accélère les accès\u000a aux fichiers compressés d’environ 30% par rapport a LZO, le système\u000a utilisé dans ext4.

    \u000a
  • \u000a
  • \u000a

    HFS+ : le système de fichier présent sur tous les macs a des capacités\u000a relativement standards, et ressemble énormément a l’ext3. Il supporte\u000a cependant les liens directs vers les dossiers, fonction rare sur les\u000a systèmes de fichiers actuels. Il est possible qu’il évolue a nouveau\u000a dans les années a venir

    \u000a
  • \u000a
  • \u000a

    ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux\u000a et *BSD, est, tel Btrfs, a la fois un système de fichier et un\u000a remplaçant/compatible avec LVM, C’est un système de fichiers conçu\u000a principalement pour les serveurs, et il intègre ainsi un système de\u000a redondance des données pour éviter les corruptions, un mode RAID-Z\u000a (apparenté au RAID5), des checks d\u2019intégrité en continu, des snapshots,\u000a etc…

    \u000a
  • \u000a
\u000a

Comme on a pu le voir, les systèmes de fichiers disponibles sont\u000alégions. Cependant, le plus adapté a Linux et a une utilisation grand\u000apublic aujourd’hui est probablement Btrfs. Malheureusement, ce dernier\u000an’est pas aujourd’hui proposé par défaut sur les distributions les plus\u000autilisées, au profit de l’ext4, qui commence a accuser son âge…

\u000a

Les systèmes de fichiers, s’ils peuvent ne pas sembler primordiaux au\u000afonctionnement du système, sont en fait de première importance, et ce\u000achoix ne devrait pas être laissé au hasard, et être mis a jour\u000arégulièrement (pour éviter les failles de sécurité…)

\u000a

Bon courage, et bon choix pour votre prochain système.

p593 (dp594 Vdate p595 g5 (S'\x07\xdc\t\x19\n\x1c\x00\x00\x00\x00' p596 tp597 Rp598 sVcategory p599 g10 (g11 g12 Ntp600 Rp601 (dp602 g16 VTeaching p603 sg18 Vteaching p604 sg20 g21 sbsVtitle p605 VLes systèmes de fichiers p606 sVslug p607 Vles-systemes-de-fichiers p608 sVauthor p609 g10 (g275 g12 Ntp610 Rp611 (dp612 g16 VWxcafe p613 sg18 Vwxcafe p614 sg20 g21 sbstp615 tp616 sV/srv/www/content/dns.md p617 (F1431623308.6978474 (V

Le DNS (Domain Name System) est le service permettant la résolution des noms de\u000adomaines en différentes informations : adresses IPv4, adresses IPv6, certificats\u000aDNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS\u000aest utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour\u000asimplifier la vie de tous les utilisateurs (je doute que tout le monde retienne\u000ade se connecter a http://173.194.45.66, ou a \u000ahttp://199.16.156.70. Voire même a \u000ahttp://5.39.76.46).

\u000a

Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque\u000aen termes d’expérience utilisateur n’étaient pas forcément aussi importantes que\u000ade nos jours. La configuration des serveurs DNS peut ainsi être assez\u000acontre intuitive.\u000aCela étant dit, comprendre le fonctionnement de DNS et contrôler ses\u000aenregistrements est important.

\u000a

Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même\u000afaçon que le système de fichiers : en arborescence. Cependant, là ou la racine\u000adu FS est /, celle de DNS est ., et là ou il convient d’écrire, par exemple,/usr/ et ou la progression se fait de gauche a droite pour le FS, pour DNS le\u000a. n’est pas obligatoire et la progression se fait de droite a gauche. Par\u000aexemple, le tld(top level domain, domaine de haut niveau) com, et le domaine\u000agoogle.com appartient a com, on écrit donc google.com sans écrire le point\u000aa la fin de façon courante.

\u000a

Le reverse DNS est une variante du DNS “classique” permettant de résoudre les\u000aadresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. \u000aCependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger\u000aquand on lui adresse une query. Les “adresses” que l’on query en reverse DNS\u000asont donc constituées de l’adresse IP, dans le sens contraire a l’ordre\u000ahabituel, et du faux domaine .in-addr.arpa\u000aPar exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire dig PTR\u000a76.46.39.5.in-addr.arpa. La réponse sera, évidemment, wxcafe.net

\u000a

Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,\u000aquelques informations. DNS fonctionne sur le port 53 en UDP, et la commande\u000autilisée pour faire des tests DNS est dig. Le DNS fonctionne avec des\u000a“enregistrements”, records en anglais. Par exemple, un record A indique une\u000aadresse IP, un record NS indique un Serveur de nom, etc. dig se base sur ces\u000arecords : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom\u000ade domaine que vous donnez en argument, mais en précisant un autre type de\u000arecord, vous pouvez obtenir n’importe quelle information : par exemple, dig NS\u000awxcafe.net devrait vous renvoyer

\u000a
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> NS wxcafe.net\u000a;; global options: +cmd\u000a;; Got answer:\u000a;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13846\u000a;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0\u000a\u000a;; QUESTION SECTION:\u000a;wxcafe.net.            IN  NS\u000a\u000a;; ANSWER SECTION:\u000awxcafe.net.     3600    IN  NS  ns.wxcafe.net.\u000awxcafe.net.     3600    IN  NS  ns.home.wxcafe.net.\u000a\u000a;; Query time: 60 msec\u000a;; SERVER: 10.0.42.1#53(10.0.42.1)\u000a;; WHEN: Tue Dec 10 13:31:18 2013\u000a;; MSG SIZE  rcvd: 67\u000a
\u000a\u000a\u000a

Comme vous pouvez le voir, les serveurs DNS principaux pour \u000awxcafe.net sont ns.wxcafe.net et ns.home.wxcafe.net,\u000aqui sont respectivement des alias pour wxcafe.net et home.wxcafe.net. Ainsi,\u000achacun fait autorité pour lui même, et le problème évident est que le résolveur\u000ane peut résoudre la query si il est renvoyé encore et encore vers le même\u000aserveur. Il convient donc de définir dans le même fichier de configuration\u000al’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième\u000aloop, se rendra compte qu’il est en train de faire une boucle infinie et\u000ademandera l’adresse au serveur auquel il est connecté. La première indication de\u000adirection se fait grâce au serveur du TLD.

\u000a

La configuration de bind est assez simple dans le principe, le plus complexe\u000aétant en fait d’écrire les fichiers de zone.\u000aLa configuration de bind sous debian se fait dans le dossier /etc/bind/. Il\u000aexiste 4 fichiers de configuration principaux : named.conf,\u000anamed.conf.default-zones, named.conf.local et named.conf.options. \u000anamed.conf contient les options par défaut de bind, named.conf.default-zones\u000ales déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),\u000anamed.conf.local contient les déclarations de vos zones, et\u000anamed.conf.options contient les options que vous rajoutez pour changer le\u000acomportement de bind.

\u000a

Pour commencer, il convient de préciser que nous allons parler ici du cas dans\u000alequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,\u000adeux serveurs DNS, et un service de résolution récursive limitée a quelques IPs\u000a(notamment mon accès chez moi).

\u000a

Examinons tout d’abord les fichiers de configuration de named.named.conf.local contient les définitions des zones forward et reverse. \u000aSur wxcafe.net, les zones wxcafe.net et 76.46.39.5.in-addr.arpa sont gérées\u000aen master, et les zones home.wxcafe.net et 103.177.67.80.in-addr.arpa sont\u000agérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce\u000aserveur, et pas sur home., car elles sont sensiblement les mêmes. La différence\u000aprincipale étant que l’un héberge en slave les masters de l’autre.\u000aLe fichier named.conf.local sur wxcafe.net contient donc

\u000a
zone "wxcafe.net" {\u000a    type master;\u000a    file "/etc/bind/master/wxcafe.net";\u000a    allow-transfer {\u000a        80.67.177.103;\u000a    };\u000a};\u000a\u000azone "home.wxcafe.net" {\u000a    type slave;\u000a    file "/etc/bind/slave/home.wxcafe.net";\u000a    masters {\u000a        80.67.177.103;\u000a    };\u000a};\u000a\u000azone "46.76.39.5.in-addr.arpa" {\u000a    type master;\u000a    file "/etc/bind/master/46.76.39.5.in-addr.arpa";\u000a    allow-transfer {\u000a        80.67.177.103;\u000a    };\u000a};\u000a\u000azone "103.177.67.80.in-addr.arpa" {\u000a    type slave;\u000a    file "/etc/bind/slave/103.177.67.80.in-addr.arpa";\u000a    masters {\u000a        80.67.177.103;\u000a    };\u000a};\u000a
\u000a\u000a\u000a

Cela devrait être relativement clair. Globalement, les zones master ont un\u000afichier dans /etc/bind/master/, et les slaves un fichier dans\u000a/etc/bind/slave/, les masters autorisent le transfert vers home.wxcafe.net\u000atandis que les slaves déclarent home.wxcafe.net comme master, et le reste est\u000aassez parlant.

\u000a

Voyons maintenant le fichier de zone concernant wxcafe.net, soit\u000a/etc/bind/master/wxcafe.net :

\u000a
$TTL 3600    ; 1 hour\u000a@               IN SOA ns.wxcafe.net. wxcafe.wxcafe.net. (\u000a                        2014011001  ; serial\u000a                        3h          ; refresh  \u000a                        1h          ; retry\u000a                        168h        ; expire\u000a                        300         ; negative response ttl\u000a                        )\u000a\u000a; Name servers\u000a                IN  NS      ns.wxcafe.net.\u000a                IN  NS      ns.home.wxcafe.net.\u000a\u000a; Mail exchangers\u000a                IN  MX  10  wxcafe.net.\u000a                IN  SPF "v=spf1 ip4:5.39.76.46 a -all"\u000a\u000a; Main A/AAAA records\u000a                IN  A       5.39.76.46\u000ans              IN  A       5.39.76.46\u000a\u000a; Aliases\u000adata            IN  CNAME   wxcafe.net.\u000a;        [...]\u000awww             IN  CNAME   wxcafe.net.\u000a\u000a\u000a; home.wxcafe.net. definition\u000a$ORIGIN home.wxcafe.net.\u000a@               IN  NS      ns.home.wxcafe.net.\u000a                IN  NS      ns.wxcafe.net.\u000ans              IN  A       80.67.177.103\u000a                IN  A       80.67.177.103\u000a
\u000a\u000a\u000a

Alors. Expliquons ligne par ligne.
\u000aTout d’abord, le TTL (time to live) est un paramètre définissant le temps\u000apendant lequel les serveurs récursif (qui font un cache des données) doivent\u000acacher ce fichier de zone.
\u000aLe @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,\u000awxcafe.net.
\u000aMaintenant, nous arrivons a un record important : SOA (Start of Authority). \u000aCe record prend de nombreux arguments, dans l’ordre :
\u000a - Le nameserver autoritaire pour le nom de domaine en question,
\u000a - L’adresse email du responsable de cette zone, avec le premier point\u000a remplacé par un @,

\u000a

puis entre parenthèses :
\u000a - Le numéro de série (“version” du fichier de zone, ici au format\u000a YYYYMMDDNN)
\u000a - La période de refresh, période entre chaque mise a jour du nameserver\u000a authoritaire secondaire,
\u000a - La période de retry, le temps entre chaque essai de mise a jour si le\u000a nameserveur authoritaire primaire est indisponible,
\u000a - La période d’expire, le temps qu’attendra le serveur autoritaire\u000a secondaire avant de supprimer les informations de son cache si le primaire\u000a reste indisponible, et enfin
\u000a - La période de TTL négatif, le temps qu’attendra le serveur secondaire\u000a avant de ne plus offrir les informations de cette zone si le serveur\u000a primaire est injoignable.

\u000a

Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus\u000aimportant a lire (pour les humains en tout cas). Continuons :

\u000a

NS (nameserver) permet de désigner les différents nameservers faisant autorité\u000apour ce domaine.

\u000a

MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine. \u000aSPF est un record d’authentification pour les emails.\u000aLes records A désignent l’association entre un nom de domaine et une adresse\u000aIPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site\u000an’est pas encore en IPv6.

\u000a

Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de\u000amettre en place des domaines exactement semblables a d’autre (ce qui permet par\u000aexemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)

\u000a

Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet\u000ade changer la valeur du @ et des noms de domaine non complets (qui ne se\u000aterminent pas avec un .). Ainsi, la partie suivant définit les nameservers et\u000al’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on\u000al’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,\u000acela permet de rediriger les requêtes nous parvenant et demandant un domaine se\u000atrouvant sous home.wxcafe.net.

\u000a

Les autres fichiers de zone sont sensiblement similaires, avec les quelques\u000adifférences n’étant en fin de compte que des différences de valeurs (dues au\u000afait que, eh bah, c’est pas les mêmes domaines…).

\u000a

Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est\u000apas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de\u000awxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez\u000aaller vous renseigner directement a la source : le RFC\u000a1034 et le \u000aRFC 1035. Dans un autre style (bien plus\u000aavancé) le blog de Stéphane Bortzmeyer est interessant\u000aaussi.

p618 (dp619 Vdate p620 g5 (S'\x07\xde\x02\x18\x021\x00\x00\x00\x00' p621 tp622 Rp623 sVcategory p624 g10 (g11 g12 Ntp625 Rp626 (dp627 g16 VTutoriel p628 sg18 Vtutoriel p629 sg20 g21 sbsVtitle p630 VMise en place d'un serveur DNS p631 sVslug p632 Vmise-en-place-dun-serveur-dns p633 sVauthor p634 g10 (g275 g12 Ntp635 Rp636 (dp637 g16 VWxcafe p638 sg18 Vwxcafe p639 sg20 g21 sbstp640 tp641 sV/srv/www/content/docker-ebooks.md p642 (F1440203874.121662 (V

Vous avez peut être déjà entendu parler de Docker. Si\u000ace n’est pas le cas, voila les bases : Docker est un système de containers. Les\u000acontainers sont une forme particulière de virtualisation, ou le kernel n’est pas\u000avirtualisé, mais ou les processus du système hôte sont séparés de ceux des\u000asystèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les Jails,\u000amais n’est devenu possible sous linux que récemment grâce aux cgroups,\u000aqui permettent justement de séparer des groupes de processus. Le principe de\u000aDocker est donc d’avoir une machine hôte sur laquelle s’exécutent plusieurs\u000aconteneurs Dockers, chacun séparé des autres et de l’hôte, mais utilisant tous\u000ale même kernel. Cela pose quelques questions en terme de sécurités, puisque la\u000aséparation est bien plus fine qu’avec de la virtualisation classique. En effet,\u000aici, en trouvant un exploit kernel, un attaquant aurait potentiellement la\u000acapacité de remonter jusqu’à l’hôte, puisqu’il n’est pas vraiment séparé des\u000ainvités.

\u000a

Quoi qu’il en soit, Docker permet donc de virtualiser a moindre coût des\u000asystèmes GNU/Linux. “Mais pourquoi utiliser Docker, dans ce cas”, vous\u000ademandez-vous peut être, “puisque Xen peut faire la même chose, et plus\u000a(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?”. Et bien\u000ac’est très simple : Docker apporte la simplicité de déploiement d’applications.\u000aLes conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui\u000apermet de répliquer un conteneur en quelques minutes sur un autre hôte, en une\u000acommande. Le Docker Hub permet aussi de récupérer\u000arapidement et facilement un grand nombre d’images déjà configurées.

\u000a

Maintenant que nous avons expliqué rapidement ce qu’était Docker, voyons le\u000arapport avec les ebooks et Twitter.

\u000a

Les comptes dits “ebooks” (le nom vient a l’origine de horse_ebooks,\u000avoir ici pourquoi) sont des bots\u000atwitter utilisant des Chaines de Markov,\u000aavec les tweets d’un utilisateur “source” comme corpus, pour produire des tweets\u000aressemblant a ceux de l’utilisateur source. Nous allons voir maintenant comment\u000aen installer un.

\u000a

C’est, comme disent certaines personnes, “fun”.

\u000a

Il existe de nombreuses librairies écrites pour créer ce genre de bots,\u000acependant dans ce cas nous nous concentrerons sur\u000acelle-ci, qui est une lib ruby créée\u000apar @m1sp, qui gère pour nous a la fois l’API\u000atwitter et la génération des messages.

\u000a

Cependant, cela n’explique toujours pas le lien avec Docker. Ce lien est très\u000asimple : nous utilisons un container pour faire tourner les bots. Depuis la\u000aversion 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une\u000aseule instance. Cependant, il est toujours plus sûr d’isoler les bots, et les\u000acontainers dockers permettent de les déployer sur n’importe quelle machine\u000a(celleux qui ont déjà tenté de mettre en place une application basée sur ruby\u000asauront le problème que cela pose habituellement). Pour ce faire, j’ai créé un\u000arepo github qui contient toutes les\u000apièces nécessaires pour mettre cela en place : le bot en lui même, les deux \u000aDockerfiles, etc.

\u000a

Le fonctionnement du bot est\u000asimple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de\u000al’utilisateur source avec ebooks archive <username> <filename> (c’est du json)\u000a, puis vous convertissez le json en fichier utilisable par le bot : ebooks\u000aconsume <filename>. Cela fait, démarrer le bot revient a lancer le container :\u000adocker run -d <container name> Pour plus d’informations, allez voir la\u000adocumentation Docker

\u000a

Bien entendu, dans l’idéal il faudrait mettre a jour les corpus de chaque\u000autilisateur régulièrement. Cela est très simple a mettre en place avec un simple\u000ascript cron :

\u000a
00 00 * * *    /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json >> /var/log/ebooks/update.log 2>&1\u000a00 05 * * *    cd /usr/local/ebooks/main/ && /usr/local/bin/ebooks consume corpus/username.json >> /var/log/ebooks/update.log 2>&1\u000a00 10 * * *    docker rm -f bots >/dev/null 2>&1\u000a00 15 * * *    docker rmi bots  > /dev/null 2>&1\u000a00 20 * * *    cd /usr/local/ebooks/main/ && docker build --rm -t bots . >> /var/log/ebooks/build.log 2>&1\u000a00 25 * * *    docker run -d --name bots bots >> /var/log/ebooks/run.log 2>&1\u000a
\u000a\u000a\u000a

Les 5 minutes entre chaque commande sont laissées pour empécher que deux\u000acommandes ne s’executent en même temps.

\u000a

Et voila, vous avez un container Docker qui fait tourner une application en ruby\u000atoute sale, et votre système hôte reste propre. Bien sûr, ce n’est qu’un exemple\u000ades possibilités de Docker : par exemple, on peut aussi faire tourner des\u000aapplications “usuelles”\u000adedans,\u000apuisque l’overhead de Docker est minimal, et beaucoup d’autres applications\u000aexistent.

p643 (dp644 Vdate p645 g5 (S'\x07\xdf\x02\x1c\x0e\x0b\x00\x00\x00\x00' p646 tp647 Rp648 sVcategory p649 g10 (g11 g12 Ntp650 Rp651 (dp652 g16 VNote p653 sg18 Vnote p654 sg20 g338 sbsVtitle p655 VDocker et les ebooks sur Twitter p656 sVslug p657 Vdocker-et-les-ebooks-sur-twitter p658 sVauthor p659 g10 (g275 g12 Ntp660 Rp661 (dp662 g16 VWxcafe p663 sg18 Vwxcafe p664 sg20 g338 sbstp665 tp666 sV/srv/www/content/plan9.md p667 (F1431623308.6938474 (V

Plan 9 from Outer Space est un film de série Z, produit en 1959 par Edward D. \u000aWood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli\u000ad’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort\u000ad’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.

\u000a

Plan 9 from Bell Labs est un OS venant de Bell Labs (comme son nom l’indique),\u000aet qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite\u000ades concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a\u000aintroduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des\u000aressources appartenant a d’autres ordinateurs a distance, un support de\u000al’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne\u000aa la base en ASCII), un support de ProcFS amélioré, une interface graphique par\u000adéfaut, et d’autres améliorations sur les thèmes de base que propose Unix.

\u000a

Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit\u000ad’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a\u000aquelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt\u000agrandissant pour le klaoude et la délocalisation a la fois du processing et des\u000adonnées, et bien que Plan9 ait été créé bien avant que le terme “cloud\u000acomputing” n’apparaisse pour la première fois, il semble que ce système ait été\u000aconçu pour apporter cette délocalisation tant rêvée.

\u000a

En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a \u000aUnix ne sont pas extraordinaires en soit (alors qu’elles sont déjà\u000aconséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système\u000ad’exploitation ultime en terme de partage de ressources et de données. \u000aAinsi, le fait que 9P permette de considérer toutes les ressources d’un système\u000adistant comme n’étant qu’une poignée de fichiers permet de le monter comme\u000an’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder\u000aa plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et \u000agérer des processus sur chacun de ces namespaces) et que chaque namespace puisse\u000ainteragir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant\u000ade machines différentes), permet d’utiliser les ressources d’une machine\u000adistante comme si elle était présente localement. Le mécanisme d’UnionFS permet\u000ade rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le\u000amême point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers\u000ade plusieurs machines a la fois (ce qui permet une délocalisation des données\u000abien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).

\u000a

Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de\u000aparler d’ordinateur lorsque le concept même du système est d’être composé de \u000aclusters eux mêmes composés de machines hétérogènes. Le système de fichier\u000avirtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement\u000adifférents concepts réseaux : en montant le /net d’un ordinateur du réseau local\u000asur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur\u000adu réseau local. En montant le /net d’un ordinateur distant sur un ordinateur\u000alocal via le protocole 9P sécurisé, on crée un VPN : les connections locales se\u000afont en utilisant l’accès de l’ordinateur distant, et les connections entre les\u000adeux sont chiffrées.

\u000a

Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour\u000apartager leur “puissance” de calcul en userspace, des superordinateurs pour\u000alesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels\u000aJoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait\u000aque des navigateurs web a peine améliorés et des services de stockage en ligne\u000aqui promettent un accès universel a toutes nos données alors qu’ils ne proposent\u000aque de les garder a disposition par le web, Plan9 promettait une technologie de \u000apartage des ressources système et de données, une intégration du réseau dans le\u000asystème particulièrement poussée, un environnement graphique supporté par le\u000abasesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres \u000aaméliorations sur Unix.

\u000a

Malheureusement, il n’a jamais été adopté de façon véritablement significative,\u000aet ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de\u000amachines Unix déjà installées était suffisamment performant et fonctionnel pour\u000aque des solutions soient développées au dessus du système pour remplir les \u000amêmes fonctions que remplit Plan9 via son kernel, tels le nouveau ProcFS de\u000aLinux, FUSE, etc…

p668 (dp669 Vdate p670 g5 (S'\x07\xdd\t\t\x0b\x11\x00\x00\x00\x00' p671 tp672 Rp673 sVcategory p674 g10 (g11 g12 Ntp675 Rp676 (dp677 g16 VOSes p678 sg18 Voses p679 sg20 g21 sbsVtitle p680 VPlan9 from whichever space p681 sVslug p682 Vplan-9-from-whichever-space p683 sVauthor p684 g10 (g275 g12 Ntp685 Rp686 (dp687 g16 VWxcafe p688 sg18 Vwxcafe p689 sg20 g21 sbstp690 tp691 sV/srv/www/content/nuc-hdmi-cec.md p692 (F1440270221.9626822 (V

J’ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé,\u000apassons rapidement sur ce qui y est lié : ne souhaitant pas “profiter” du\u000apaysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis\u000atout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais\u000abrancher sur ma télévision un système me permettant de regarder ces films et\u000aséries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix,\u000aetc…) simplement.

\u000a

Ayant un Raspberry Pi 1 qui trainait, j’ai\u000adécidé d’installer OpenELEC dessus et de voir ce que ça\u000adonnait. Le résultat n’étant pas satisfaisant (a cause des difficultés du RPi\u000aa faire fonctionner tout ça), j’ai décidé d’upgrader le système.

\u000a

J’ai donc acquis un NUC D34010WYK\u000a(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un \u000aadaptateur HDMI-CEC pour celui-ci, et un\u000aSSD mSATA, en me disant que je\u000apourrais sans trop de problème faire tourner Kodi sur un\u000adebian, avec en plus Steam pour faire du streaming depuis mon desktop. L’autre\u000aavantage de tourner sur du Intel, c’est de pouvoir mater Netflix (puisque le\u000aplugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que\u000asur x86).

\u000a

J’ai donc reçu après un certain temps le matériel sus cité, que j’ai avidement\u000amonté, avant de me rendre compte que le manuel de l’adaptateur Pulse-Eight était\u000a[PDF]assez médiocre. J’ai donc\u000acherché plusieurs heures, avant de trouver [DE]ce \u000apost\u000aexpliquant comment brancher l’adaptateur. Je vais donc résumer ici le processus,\u000ace qui devrait rendre la tache a la fois plus simple pour les autres personnes\u000acherchant l’information, et pour moi si je dois remonter ce système.

\u000a

Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit\u000a“Front Panel”, et un appelé “Custom Solution Header”. Les trois sont utilisés\u000aici. La première chose a faire est de brancher les fiches grises et rouges sur\u000ale Custom Solution Header: le branchement doit être fait ainsi :

\u000a
Custom Solution\u000a  \u250c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u2510\u000a  \u2502g\u2502 \u2502·\u2502r\u2502·\u2502\u000a  \u251c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u2524\u000a  \u2502·\u2502·\u2502·\u2502·\u2502·\u2502\u000a  \u2514\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2518\u000a\u000a  g \u2794 fiche grise\u000a  r \u2794 fiche rouge\u000a  · \u2794 pin inutilisé\u000a    \u2794 espace vide (sans pin)\u000a
\u000a\u000a\u000a

Une fois cela fait, il faut brancher le Front Panel. Heureusement, c’est plus\u000afacile, puisqu’il n’y a qu’une seule fiche a brancher ici : la orange.

\u000a
  Front Panel\u000a  \u250c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u2510\u000a  \u2502·\u2502·\u2502·\u2502·\u2502·\u2502\u000a  \u251c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u2524\u000a  \u2502 \u2502·\u2502o\u2502·\u2502·\u2502\u000a  \u2514\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2518\u000a\u000a  o \u2794 fiche orange\u000a  · \u2794 pin inutilisé\u000a    \u2794 espace vide (sans pin)\u000a
\u000a\u000a\u000a

Enfin, il faut encore brancher les fiches restantes sur le header dual-USB.\u000aÉtant donné que ce header contient deux fois les pins nécessaires a un\u000abranchement USB, il est possible de brancher les cables de plusieurs façons.

\u000a
   Dual-USB\u000a  \u250c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u2510\u000a  \u2502b\u2502B\u2502v\u2502n\u2502·\u2502\u000a  \u251c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u2524\u000a  \u2502·\u2502·\u2502·\u2502·\u2502 \u2502\u000a  \u2514\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2518\u000a\u000a  b \u2794 fiche bleue\u000a  B \u2794 fiche Blanche\u000a  v \u2794 fiche verte\u000a  n \u2794 fiche noire\u000a  · \u2794 pin inutilisé\u000a    \u2794 espace vide (sans pin)\u000a
\u000a\u000a\u000a

Tous les branchements étant effectués, il faut maintenant remonter la bête\u000a(attention a ne pas déranger les branchements avec les antennes Wifi, par\u000aexemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer\u000aun paramètre dans le BIOS intel : dans Power\u2794Secondary Power Settings, il faut\u000aque “Deep S4/S5” soit désactivé. Ceci permettant a la connection HDMI-CEC de\u000adémarrer et le NUC.

\u000a

Ne reste plus ensuite qu’a installer un système digne de ce nom dessus!

p693 (dp694 Vdate p695 g5 (S'\x07\xdf\x08\x16\x02+\x00\x00\x00\x00' p696 tp697 Rp698 sVcategory p699 g10 (g11 g12 Ntp700 Rp701 (dp702 g16 VNote p703 sg18 Vnote p704 sg20 (dp705 VCATEGORY_URL p706 Vcategory/{slug}/ p707 sVPAGE_ORDER_BY p708 Vbasename p709 sVWITH_FUTURE_DATES p710 I01 sVCATEGORY_SAVE_AS p711 Vcategory/{slug}/index.html p712 sS'LINKS' p713 ((VSource! p714 Vhttps://github.com/wxcafe/blog-source p715 Vcode p716 tp717 (VPublic Git p718 Vhttp://git.wxcafe.net p719 Vgithub-sign p720 tp721 tp722 sVARTICLE_ORDER_BY p723 Vslug p724 sVDEFAULT_LANG p725 Vfr p726 sVCACHE_CONTENT p727 I01 sVPAGE_LANG_SAVE_AS p728 Vpages/{slug}-{lang}.html p729 sVDRAFT_SAVE_AS p730 Vdrafts/{slug}.html p731 sVPAGE_PATHS p732 (lp733 Vpages p734 asVDEFAULT_PAGINATION p735 I10 sVDOCUTILS_SETTINGS p736 (dp737 sVTRANSLATION_FEED_ATOM p738 Vfeeds/all-%s.atom.xml p739 sVJINJA_EXTENSIONS p740 (lp741 sVSTATIC_PATHS p742 (lp743 Vimages p744 asVDAY_ARCHIVE_SAVE_AS p745 g66 sVARTICLE_LANG_URL p746 V{slug}-{lang}.html p747 sVSLUGIFY_SOURCE p748 Vtitle p749 sVSTATIC_URL p750 V{path} p751 sVCATEGORY_FEED_ATOM p752 Vfeeds/feed.%s.xml p753 sVOUTPUT_SOURCES p754 I00 sVDIRECT_TEMPLATES p755 (Vindex p756 Vtags p757 Vcategories p758 Vauthors p759 Varchives p760 tp761 sVPDF_GENERATOR p762 I00 sVSTATIC_EXCLUDES p763 (lp764 sVTAG_URL p765 Vtag/{slug}.html p766 sVARTICLE_PATHS p767 (lp768 g66 asVLOG_FILTER p769 (lp770 sVFILENAME_METADATA p771 V(?P\u005cd{4}-\u005cd{2}-\u005cd{2}).* p772 sVDISPLAY_PAGES_ON_MENU p773 I01 sVPELICAN_CLASS p774 Vpelican.Pelican p775 sVCACHE_PATH p776 V/srv/www/cache p777 sVAUTORELOAD_IGNORE_CACHE p778 I00 sVINTRASITE_LINK_REGEX p779 V[{|](?P.*?)[|}] p780 sVDEFAULT_ORPHANS p781 I0 sVTAG_CLOUD_MAX_ITEMS p782 I100 sS'AUTHOR' p783 Vwxcafé p784 sVDISPLAY_CATEGORIES_ON_MENU p785 I00 sVCHECK_MODIFIED_METHOD p786 Vmtime p787 sVARTICLE_EXCLUDES p788 (lp789 g734 asVDEFAULT_DATE_FORMAT p790 V%a %d %B %Y p791 sVTAG_CLOUD_STEPS p792 I4 sVPLUGINS p793 (lp794 sVTYPOGRIFY p795 I00 sVFEED_ALL_ATOM p796 Vfeeds/feed.atom.all.xml p797 sVEXTRA_TEMPLATES_PATHS p798 (lp799 sVOUTPUT_RETENTION p800 (tsVPAGE_LANG_URL p801 Vpages/{slug}-{lang}.html p802 sVTHEME p803 V/srv/www/themes/bootstrap2 p804 sVUSE_FOLDER_AS_CATEGORY p805 I01 sVDEBUG p806 I00 sVREVERSE_CATEGORY_ORDER p807 I00 sVRELATIVE_URLS p808 I00 sVDATE_FORMATS p809 (dp810 sVSITEURL p811 V//wxcafe.net p812 sVCONTENT_CACHING_LAYER p813 Vreader p814 sS'SOCIAL' p815 ((VTwitter p816 Vhttps://twitter.com/wxcafe p817 Vtwitter p818 tp819 (VGithub p820 Vhttps://github.com/wxcafe p821 Vgithub p822 tp823 (VEmail p824 Vmailto://wxcafe@wxcafe.net p825 Venvelope p826 tp827 (VGpg p828 Vhttps://pub.wxcafe.net/wxcafe.asc p829 Vkey p830 tp831 (VIRL p832 Vhttps://www.openstreetmap.org/relation/105146 p833 Vmap-marker p834 tp835 tp836 sVNEWEST_FIRST_ARCHIVES p837 I01 sVPATH_METADATA p838 g66 sVPDF_STYLE p839 Vtwelvepoint p840 sS'DISPLAY_CATEGORIES_ON_BAR' p841 I01 sVTEMPLATE_PAGES p842 (dp843 sVFEED_DOMAIN p844 g812 sVTYPOGRIFY_IGNORE_TAGS p845 (lp846 sVGZIP_CACHE p847 I01 sVAUTHOR_FEED_RSS p848 Vfeeds/%s.rss.xml p849 sS'TIMEZONE' p850 VEurope/Paris p851 sVDRAFT_URL p852 Vdrafts/{slug}.html p853 sVPAGE_EXCLUDES p854 (lp855 g66 asVAUTHOR_SAVE_AS p856 Vauthor/{slug}.html p857 sVREADERS p858 (dp859 sS'FEED_RSS' p860 Vfeeds/feed.rss.xml p861 sVDRAFT_LANG_URL p862 Vdrafts/{slug}-{lang}.html p863 sVOUTPUT_SOURCES_EXTENSION p864 V.text p865 sVPAGINATION_PATTERNS p866 (lp867 g10 (g189 g190 (I0 V{name}{number}{extension} p868 V{name}{number}{extension} p869 tp870 tp871 Rp872 asVSTATIC_EXCLUDE_SOURCES p873 I01 sVJINJA_FILTERS p874 (dp875 sVARTICLE_SAVE_AS p876 Vposts/{slug}/index.html p877 sVYEAR_ARCHIVE_SAVE_AS p878 g66 sVCSS_FILE p879 Vmain.css p880 sVAUTHOR_URL p881 Vauthor/{slug}.html p882 sVIGNORE_FILES p883 (lp884 V.#* p885 asVSUMMARY_MAX_LENGTH p886 I50 sVSLUG_SUBSTITUTIONS p887 (tsVTHEME_STATIC_PATHS p888 (lp889 Vstatic p890 asS'CATEGORY_FEED_RSS' p891 Vfeeds/feed.rss.%s.xml p892 sVTHEME_STATIC_DIR p893 Vtheme p894 sVLOAD_CONTENT_CACHE p895 I01 sVDRAFT_LANG_SAVE_AS p896 Vdrafts/{slug}-{lang}.html p897 sS'FEED_ALL_RSS' p898 Vfeeds/feed.rss.all.xml p899 sVEXTRA_PATH_METADATA p900 (dp901 sVLOCALE p902 (lp903 g66 asVWRITE_SELECTED p904 (lp905 sVDELETE_OUTPUT_DIRECTORY p906 I00 sVFEED_MAX_ITEMS p907 g66 sVPATH p908 V/srv/www/content p909 sVPAGE_URL p910 Vpages/{slug}/ p911 sVSITENAME p912 VWxcafé p913 sVARTICLE_PERMALINK_STRUCTURE p914 g66 sVARTICLE_URL p915 Vposts/{slug}/ p916 sVMONTH_ARCHIVE_SAVE_AS p917 g66 sVDEFAULT_METADATA p918 (tsVDEFAULT_CATEGORY p919 Vmisc p920 sVPLUGIN_PATHS p921 (lp922 sVPAGINATED_DIRECT_TEMPLATES p923 (Vindex p924 tp925 sVPDF_STYLE_PATH p926 g66 sVSTATIC_SAVE_AS p927 g751 sVTAG_SAVE_AS p928 Vtag/{slug}.html p929 sVPYGMENTS_RST_OPTIONS p930 (dp931 sVAUTHOR_FEED_ATOM p932 Vfeeds/%s.atom.xml p933 sVARTICLE_LANG_SAVE_AS p934 g747 sVPAGE_SAVE_AS p935 Vpages/{slug}/index.html p936 sVMD_EXTENSIONS p937 (lp938 Vcodehilite(linenums=False, guess_lang=True, noclasses=True, pygments_style=monokai) p939 aVsmarty p940 asVOUTPUT_PATH p941 V/srv/www/output p942 sS'FEED_ATOM' p943 Vfeeds/feed.atom.xml p944 sVDEFAULT_STATUS p945 Vpublished p946 ssbsVtitle p947 Vles NUCs et le HDMI-CEC p948 sVslug p949 Vnuc-hdmi-cec p950 sVauthor p951 g10 (g275 g12 Ntp952 Rp953 (dp954 g16 VWxcafe p955 sg18 Vwxcafe p956 sg20 g705 sbstp957 tp958 sV/srv/www/content/opensmtpd.md p959 (F1431623308.6898475 (V

J’avais dit il y a un certain temps que j’allais écrire un tutoriel expliquant\u000acomment gérer ses mails soi-même. Il se trouve que j’ai récemment décidé de\u000achanger le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge\u000aaussi mes emails. J’ai donc totalement changé d’infrastructure quand a la\u000agestion de mon système de mails.

\u000a

Ainsi, j’ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais\u000aeffectuer depuis un certain temps. OpenSMTPd est un\u000aprojet originaire d’OpenBSD qui a pour but de fournir un\u000aserveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux\u000aqu’a le projet OpenBSD, globalement).

\u000a

Pour rappel, le système d’emails fonctionne d’une façon très simple : votre MUA\u000a(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou\u000aserveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du\u000adestinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le\u000amail au destinataire.

\u000a

Si vous avez bien suivi, vous pouvez voir que je n’ai pas parlé de récupération\u000ani de lecture des mails. C’est pour une raison simple, qui est que ces taches\u000asont remplies par d’autres services encore (IMAP/POP pour la récupération depuis\u000ale serveur, des yeux pour la lecture).

\u000a

Or ce qui nous intéresse ici, ce n’est pas simplement d’envoyer et de recevoir\u000ades emails mais bien aussi de pouvoir les récupérer et les lire, et c’est pour\u000aça que ce tutoriel ne parlera pas que d’OpenSMTPd mais aussi de Dovecot qui fait office de serveur IMAP et\u000aamavis/spamassassin \u000apour filtrer les mails entrants et sortants. \u000aLe schéma suivant explique la façon dont les mails sont gérés sur le système

\u000a
            \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a            \u2502\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500\u2500\u2500> to filter \u2500\u2500\u2500>\u2502\u2500\u256e        \u2502\u000a  mail in   \u2502\u2502               \u2502                    \u2502 \u2502 amavis \u2502\u000a\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u256f OpenSMTPd  \u256d\u2500\u2500\u2502<\u2500\u2500\u2500 from filter<\u2500\u2500\u2500\u2502<\u256f        \u2502\u000a            \u2502             \u2502  \u2502                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a  mail out  \u2502             \u2502  \u2502                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a<\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502<\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500>\u2502\u2500\u2500\u2500\u2500\u2500> to MDA \u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500> to user's\u000a            \u2502                \u2502                    \u2502 dovecot  \u2502     mailbox\u000a            \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a
\u000a\u000a\u000a

Normalement, ceci devrait être a peu près clair.\u000aPour expliquer vite fait, les emails entrants (venant des utilisateurs mais\u000aaussi d’autres correspondants) sont transmis a OpenSMTPd, qui envoie tout aamavis, qui vérifie a la fois les spams et les malwares pour les mails\u000avenants de l’exterieur, et qui signe avec DKIM pour les mails venants de\u000anos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd,\u000aqui a ce moment-ci trie en fonction de la destination : les mails gérés \u000apar le domaine vont via dovecot dans les boites mail des destinataires \u000alocaux, les mails exterieurs vont directement vers le MTA du serveur \u000adistant.

\u000a

Voyons comment mettre cela en place. Tout d’abord, il faut décider de la façon\u000adont les différents services vont communiquer.

\u000a

Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port\u000a10024 et répondre sur le port 10025 quand il s’agit de filtrer et\u000aécouter sur le port 10026 et répondre sur le port 10027 quand il s’agit de\u000asigner, nous allons profiter de cette configuration et donc lui parler en SMTP\u000asur ces ports.

\u000a

Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail\u000aTransfer Protocol), non pas sur un port mais via un socket (dans ce cas précis,\u000a/var/run/dovecot/lmtp).

\u000a

Ainsi, pour reprendre le schéma présenté plus haut :

\u000a
            \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a            \u2502\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500> SMTP (10026) \u2500\u2500>\u2502\u2500\u256e         \u2502\u000a  SMTP in   \u2502\u2502              \u2502                    \u2502 \u2502 amavis  \u2502\u000a\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500> 25\u2502\u256f OpenSMTPd \u256d\u2500\u2500\u2502<\u2500\u2500 SMTP (10027) <\u2500\u2500\u2502<\u256f (sign)  \u2502\u000a            \u2502            \u2502  \u2502                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a  SMTP out  \u2502            \u2502  \u2502\u000a25 <\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502<\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f  \u2502\u000a            \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a
\u000a\u000a\u000a

Pour les mails sortants; et

\u000a
            \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a            \u2502\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500> SMTP (10024) \u2500\u2500>\u2502\u2500\u256e          \u2502\u000a  SMTP in   \u2502\u2502              \u2502                    \u2502 \u2502 amavis   \u2502\u000a\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500> 25\u2502\u256f OpenSMTPd \u256d\u2500\u2500\u2502<\u2500\u2500 SMTP (10025) <\u2500\u2500\u2502<\u256f(filter)  \u2502\u000a            \u2502            \u2502  \u2502                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a            \u2502            \u2502  \u2502                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a            \u2502            \u2570\u2500>\u2502\u2500\u2500> LMTP (socket) \u2500>\u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500> to user's\u000a            \u2502               \u2502                    \u2502  dovecot   \u2502     mailbox\u000a            \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a
\u000a\u000a\u000a

Pour les mails entrants.

\u000a

Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai\u000aici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour\u000ad’autres plateformes, la configuration devrait être sensiblement la même

\u000a

(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés.\u000aSi vous ne savez pas comment en créer, vous pouvez aller voir ce\u000apost)

\u000a

Tout d’abord, commençons par installer les programmes nécessaires :

\u000a
sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved\u000asudo pkg_add dovecot dovecot-pigeonhole amavisd-new\u000a
\u000a\u000a\u000a

Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :

\u000a

/etc/smtpd.conf

\u000a
# This is the smtpd server system-wide configuration file.\u000a# See smtpd.conf(5) for more information.\u000a\u000a## Certs\u000apki exem.pl certificate "/etc/certs/exem.pl.crt"\u000apki exem.pl key         "/etc/certs/exem.pl.key"\u000a\u000a## Ports to listen on, and how to listen on them\u000alisten on eth0 port 25 tls pki exem.pl hostname exem.pl auth-optional\u000alisten on eth0 port 465 tls-require pki exem.pl hostname exem.pl auth mask-source\u000alisten on eth0 port 587 tls-require pki exem.pl hostname exem.pl auth mask-source\u000a\u000a## Aliases\u000atable aliases file:/etc/aliases\u000a\u000a# coming from amavisd, checked for spam/malware\u000alisten on lo port 10025 tag Filtered\u000a# coming from amavisd, signed with DKIM\u000alisten on lo port 10027 tag Signed\u000a\u000a## Receiving\u000a# if the (incoming) mail has been through amavisd, then we can deliver it\u000aaccept tagged Filtered for any alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp"\u000a# we directly tranfer incoming mail to amavisd to be checked \u000aaccept from any for domain "exem.pl" relay via "smtp://localhost:10024"\u000a# we have to put these lines in this order to avoid infinite loops\u000a\u000a## Sending\u000a# if the (outgoint) mail has been through amavisd, then we can deliver it\u000aaccept tagged Signed for any relay\u000a# we tranfer the outgoing mail to amavisd to be signed\u000aaccept for any relay via "smtp://localhost:10026"\u000a# same, we have to put these lines in this order or infinite loops...\u000a
\u000a\u000a\u000a

Expliquons un peu ce fichier de configuration :

\u000a
    \u000a
  • Tout d’abord, le paragraphe nommé “Certs” contient les déclaration\u000a d’emplacement des certificats SSL.
  • \u000a
  • Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons :\u000a port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire
  • \u000a
  • Les alias sont définis juste après
  • \u000a
  • Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons :\u000a 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants\u000a comme “Filtered” et 10027 (port de sortie des mails signés par amavis) dont on\u000a taggue les mails sortants comme “Signed”
  • \u000a
  • Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail\u000a traité est taggué comme Filtered, alors il a été vérifié par amavis, et on\u000a peut donc le transmettre au destinataire. Sinon, c’est qu’il n’a pas encore\u000a été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024\u000a donc). Il est important de mettre les déclarations dans ce sens, car la\u000a première règle qui matche l’état du paquet est appliquée. Ici, la deuxième\u000a ligne matchant tous les mails arrivant et la première seulement ceux filtrés,\u000a inverser leur sens voudrait dire que les mails seraient toujours renvoyés a\u000a amavis
  • \u000a
  • Enfin, le dernier paragraphe traite les mails sortants. De la même façon que\u000a pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed\u000a on le transmet au MTA du destinataire, sinon il n’a pas encore été signé par\u000a DKIM par amavis et on le transmet donc a amavis pour qu’il le signe. Le\u000a problème de l’ordre des lignes se pose encore, pour la même raison qu’au\u000a dessus.
  • \u000a
\u000a

Nous allons maintenant configurer dovecot. Comme nous l’avons vu, dovecot doit\u000aécouter en LMTP via la socket /var/run/dovecot/lmtp et transmettre les\u000aemails a la boite email de l’utilisateur. Il serait aussi interessant\u000aqu’il nous permette de récuperer les mails. Pour cette configuration, on ne\u000amettra en place que du IMAPS. Cependant, si vous voulez mettre en place du\u000aPOP3[s], différents guides sont trouvables facilement sur internet.

\u000a

/etc/dovecot/dovecot.conf

\u000a
## Dovecot configuration file\u000a\u000a# basic config\u000ainfo_log_path = /var/log/dovecot-info.log\u000alog_path = /var/log/dovecot.log\u000alog_timestamp = "%Y-%m-%d %H:%M:%S "\u000amail_location = maildir:%h/mail\u000a\u000a# authentication\u000apassdb {\u000a    driver = pam\u000a}\u000auserdb {\u000a    driver = passwd\u000a}\u000a\u000a# the protocols we use\u000aprotocols = imap lmtp sieve\u000a\u000a# ssl config\u000assl_cert = </etc/certs/exem.pl.cert\u000assl_key = </etc/certs/exem.pl.key\u000assl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL\u000assl = yes\u000a\u000a## configuring services \u000a# disables imap login without SSL (yes dovecot is dumb that way)\u000aservice imap-login {\u000a    inet_listener imap {\u000a        port=0 \u000a    }\u000a}\u000a\u000aservice lmtp {\u000a    unix_listener lmtp {\u000a        mode = 0666\u000a    }\u000a}\u000a\u000a## configuring protocols\u000a# the dovecot lda, we set it to use sieve\u000aprotocol lda {\u000a    mail_plugins = $mail_plugins sieve\u000a}\u000a\u000aprotocol lmtp {\u000a    postmaster_address =  whoever@exem.pl\u000a    mail_plugins = $mail_plugins sieve\u000a}\u000a\u000aplugin {\u000a    sieve = ~/.dovecot.sieve\u000a    sieve_dir = ~/sieve\u000a}\u000a
\u000a\u000a\u000a

ATTENTION: Sous OpenBSD, remplacez

\u000a
passdb {\u000a    driver = pam\u000a}\u000a
\u000a\u000a\u000a

par

\u000a
passdb {\u000a    driver = bsdauth\u000a}\u000a
\u000a\u000a\u000a

pour identifier les utilisateurs système

\u000a

Ici aussi, voyons comment ce fichier est structuré :

\u000a
    \u000a
  • Tout d’abord, les configurations de base : ou iront les logs, comment formater\u000a leur datation, et l’endroit ou seront stockés les mails des utilisateurs.
  • \u000a
  • Nous configurons ensuite la gestion de l’authentification des utilisateurs.\u000a Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs\u000a mots de passe avec PAM (ou BSDAuth)
  • \u000a
  • Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de\u000a l’IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).
  • \u000a
  • Nous configurons le SSL
  • \u000a
  • Le section suivante contient la configuration des services. Nous avons en\u000a premier lieu le service IMAP, dont la configuration sert uniquement a\u000a désactiver IMAP. En effet, dovecot ne permet d’activer IMAPS qu’en activant\u000a IMAP avec. Comme nous ne voulons pas d’IMAP sans SSL, nous le désactivons.\u000a La configuration de lmtp sert a attribuer des permissions plus correctes au\u000a fifo qu’il utilise
  • \u000a
  • Nous configurons maintenant les protocoles, pour faire fonctionner Sieve
  • \u000a
  • enfin, nous configurons le plugin sieve en lui indiquant quel fichier et\u000a quel dossier utiliser pour sa configuration.
  • \u000a
\u000a

Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir\u000aa deux choses : signer les emails sortants, et filtrer les emails entrants. Il\u000adoit donc écouter sur les port 10026 pour les signatures et 10024 pour le\u000afiltrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en\u000aSMTP. Comme toutes les transactions se font sur le loopback, il n’y a aucun\u000arisque a utiliser des protocoles non chiffrés.\u000aPour OpenBSD, pensez a copier la configuration par défaut depuis/usr/local/share/examples/amavisd-new/amavisd.conf et ajoutez les\u000amodifications nécessaires a la fin du fichier.

\u000a

/etc/amavis/conf.d/99-local.conf (debian)\u000a/etc/amavis.conf (OpenBSD)

\u000a
use strict;\u000a\u000a$enable_dkim_verification = 1;\u000a$enable_dkim_signing = 1;\u000adkim_key("exem.pl", "main", "/etc/certs/dkim.key" );\u000a\u000a@dkim_signature_options_bysender_maps = (\u000a    { '.' =>\u000a        { ttl => 21*24*3600, c => 'relaxed/simple' }\u000a    }\u000a);\u000a\u000a$inet_socket_port = [10024, 10026];\u000a$policy_bank{'MYNETS'} = {\u000a        originating => 1,\u000a        os_fingerprint_method => undef,\u000a};\u000a\u000a$interface_policy{'10026'} = 'ORIGINATING';\u000a\u000a$policy_bank{'ORIGINATING'} = {\u000a        originating => 1,\u000a        allow_disclaimers => 1,\u000a        virus_admin_maps => ["root\u005c@$mydomain"],\u000a        spam_admin_maps => ["root\u005c@$mydomain"],\u000a        warnbadhsender => 1,\u000a        forward_method => 'smtp:localhost:10027',\u000a        smtpd_discard_ehlo_keywords => ['8BITMIME'],\u000a        bypass_banned_checks_maps => [1],\u000a        terminate_dsn_on_notify_success => 0,\u000a};\u000a\u000a#------------ Do not modify anything below this line -------------\u000a1;  # ensure a defined return\u000a
\u000a\u000a\u000a

A nouveau, expliquons ce fichier :\u000a- le premier paragraphe définit que nous voulons qu’amavis signe les emails\u000a sortants, vérifie la signature DKIM des emails rentrants, et l’endroit ou se\u000a trouve la clé privée servant a signer les emails.\u000a- le second définit les options DKIM que nous souhaitons utiliser comme défaut.\u000a Je vous invite a consulter la RFC 4871\u000a- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les\u000a paramètres que nous utiliserons pour les emails venant de nos utilisateurs :\u000a ils seront traités comme “originating” et nous ne vérifierons pas l’OS duquel\u000a ils viennent.\u000a- nous savons que les emails venants du port 10026 sont sortants, nous les\u000a traitons donc comme tel\u000a- le paragraphe suivant décrit le traitement que nous faisons subir aux emails\u000a sortants : tout d’abord, nous réaffirmons qu’ils viennent bien de notre\u000a serveur. Nous autorisons les disclaimers (voire encore une fois la RFC\u000a 4871. Nous déclarons l’adresse a\u000a prévenir en cas de spam/virus venants de notre système, et que nous voulons\u000a être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés,\u000a puis qu’il est nécessaire de convertir les emails au format 7 bits avant de\u000a les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et\u000a les notifications de succès d’envoi. Et voila!

\u000a

Vous avez pu remarquer qu’a aucun moment nous ne configurions ni la signature\u000ades emails sortants ni le filtrage des emails entrants. Ces paramètres sont en\u000afait inclus par défaut dans amavis.

\u000a

Il nous reste cependant quelques opérations a faire, encore.\u000aTout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe\u000adifférentes méthodes, j’ai personnellement utilisé opendkim (un\u000atutorial)\u000amais de nombreuses autre méthodes existent.\u000aIl nous reste encore a configurer spamassassin :

\u000a
#rewrite_header Subject *****SPAM*****\u000a# report_safe 1\u000arequired_score 2.0\u000a# use_bayes 1\u000a# bayes_auto_learn 1\u000a# bayes_ignore_header X-Bogosity\u000a# bayes_ignore_header X-Spam-Flag\u000a# bayes_ignore_header X-Spam-Status\u000aifplugin Mail::SpamAssassin::Plugin::Shortcircuit\u000a# shortcircuit USER_IN_WHITELIST       on\u000a# shortcircuit USER_IN_DEF_WHITELIST   on\u000a# shortcircuit USER_IN_ALL_SPAM_TO     on\u000a# shortcircuit SUBJECT_IN_WHITELIST    on\u000a# shortcircuit USER_IN_BLACKLIST       on\u000a# shortcircuit USER_IN_BLACKLIST_TO    on\u000a# shortcircuit SUBJECT_IN_BLACKLIST    on\u000ashortcircuit ALL_TRUSTED             off\u000a# shortcircuit BAYES_99                spam\u000a# shortcircuit BAYES_00                ham\u000a\u000aendif # Mail::SpamAssassin::Plugin::Shortcircuit\u000a
\u000a\u000a\u000a

Comme vous pouvez le voir, les modifications se résument globalement a baisser\u000ale required_score pour ma part.

\u000a

Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et\u000aspamassassin, et tout devrait fonctionner parfaitement

\u000a

Bon courage pour votre hosting de mail ensuite…

p960 (dp961 Vdate p962 g5 (S'\x07\xde\x0b\x07\r\x04\x00\x00\x00\x00' p963 tp964 Rp965 sVcategory p966 g10 (g11 g12 Ntp967 Rp968 (dp969 g16 VTutoriel p970 sg18 Vtutoriel p971 sg20 g21 sbsVtitle p972 VOpenSMTPd comme serveur mail sous debian p973 sVslug p974 Vopensmtpd-debian p975 sVauthor p976 g10 (g275 g12 Ntp977 Rp978 (dp979 g16 VWxcafé p980 sg18 Vwxcafe p981 sg20 g21 sbstp982 tp983 sV/srv/www/content/update-et-pensees-a-propos-du-raspberry-pi.md p984 (F1431623308.7538474 (V

Bon.
\u000aJ’ai annoncé il y a environ 20 jours que j’avais pour projet de faire\u000aune Piratebox basée sur un Raspberry Pi, astucieusement nommée\u000aPiRatBox. Il se trouve qu’après de nombreux essais, un problème\u000arécurrent apparait: le Raspberry Pi n’est pas capable de fournir assez\u000ade courant par défaut pour faire fonctionner a la fois un disque dur et\u000aune antenne WiFi.
\u000aAlors, autant il me semble évident qu’avec une\u000aalimentation provenant d’un port USB a 2A (max), je n’avais pas\u000aénormément de chances d’avoir 2A sur chacun des ports host du Raspi,\u000aautant avoir moins de 250 mA sur chacun de ces ports me semble un tout\u000apetit peu exagéré en terme de rentabilité.

\u000a

De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me\u000aservant a rien) (vous savez, celui qui est monté en USB…), qui\u000aconsomme énormément, est assez louche. Il devrait toujours être possible\u000ade désactiver une device USB, me semble-t-il, au niveau logiciel. La,\u000abien qu’il soit surement possible de la désactiver au niveau du kernel,\u000ail n’est pas simplement possible de la “débrancher”. Ce qui est bien\u000achiant, étant donné le besoin évident de puissance électrique dans\u000alequel on se retrouve.

\u000a

Bon, je dois avouer n’avoir pas testé de lancer les différents services\u000acomposant le système des piratebox sous arch, pour la simple et\u000abonne raison qu’arch utilise systemd et qu’il n’existe pas de wrapper\u000asystemd pour les daemons piratebox, et que j’ai la flemme d’en faire,\u000aparce que systemd est une horreur a utiliser avec les scripts init. Donc\u000anon, j’utiliserai debian. Le problème d’utiliser debian dans ce cas\u000aprécis est que apt/dpkg a une gestion des dépendances dans un sens mais\u000apas dans l’autre, en ce sens que si on installe un package “haut”, c’est\u000aa dire dépendant de plusieurs autres packages, apt/dpkg se charge\u000aefficacement d’installer toutes les dépendances nécessaires, tandis que\u000asi on désinstalle un package “bas”, c’est a dire sur lequel de nombreux\u000aautres packages dépendent, apt/dpkg ne désinstalle pas ces packages\u000a“hauts”, ce qui pose un vrai problème quand on se retrouve sur un\u000aRaspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui\u000asera installé sur le système avant l’installation proprement dite\u000a(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd\u000avers la SD qui sert de disque système.)

\u000a

Il y a énormément d’autres critiques que l’ont pourrait faire\u000aconcernant le Raspberry Pi. Son système de démarrage a s’arracher les\u000acheveux, par exemple. En effet, plutôt que de faire comme tout pc\u000anormalement constitué ou la partie calcul démarre, lance le bootloader,\u000acherche le kernel de l’OS qui lui même se lance, initialise le hardware,\u000aetc…, a un système bâtard du au fait que la puce au centre de la carte\u000aest a la base une puce graphique a laquelle on a greffé un c\u0153ur de\u000acalcul (probablement au fond d’une cour d’immeuble, dans les quartiers\u000apauvres de Bratislava, vu la propreté de la greffe…), et le moyen le\u000aplus efficace qu’aient trouvé les personnes ayant implémenté cette\u000aatrocité de gérer le boot est donc de faire démarrer le c\u0153ur graphique\u000aen premier, ce dernier exécute un code propriétaire pour démarrer le\u000ac\u0153ur de calcul, qui a son tour lance le bootloader qui cherche le kernel\u000aetc…

\u000a

Ce qui non seulement complique énormément le boot, non seulement ajoute\u000adu code propriétaire a un projet se disant libre, mais en plus n’estvisiblement pas fait pour être utilisé de cette manière. Le hack,\u000aoui, mais uniquement quand c’est bien réalisé, sinon je dis non.

\u000a

Enfin, le projet que j’avais est toujours en cours de réalisation. Je\u000ale terminerai dès que j’aurai récupéré les outils nécessaires pour\u000amonter mon alimentation personnalisée pour le Raspberry Pi. Et une fois\u000aque cela sera fait, ce Raspi restera une Piratebox pour le reste de sa\u000avie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont\u000atrop agacé pour que j’aie envie de le sortir et de jouer avec une fois\u000asa mission remplie.

\u000a

Dommage.

p985 (dp986 Vdate p987 g5 (S'\x07\xdd\x01\x1b\x017\x00\x00\x00\x00' p988 tp989 Rp990 sVcategory p991 g10 (g11 g12 Ntp992 Rp993 (dp994 g16 VRanting p995 sg18 Vranting p996 sg20 g21 sbsVtitle p997 VUpdate et pensées a propos du Raspberry Pi p998 sVslug p999 Vupdate-et-pensees-a-propos-du-raspberry-pi p1000 sVauthor p1001 g10 (g275 g12 Ntp1002 Rp1003 (dp1004 g16 VWxcafe p1005 sg18 Vwxcafe p1006 sg20 g21 sbstp1007 tp1008 sV/srv/www/content/la-programmation-expliquee-simplement.md p1009 (F1431623308.6538475 (V

Salut!
\u000aTout d’abord, je tiens a m’excuser de ne pas avoir eu le temps d’écrire\u000arécement, mais j’ai eu la chance d’avoir un PC a monter, donc j’ai passé\u000apas mal de temps assez occupé.

\u000a

Enfin, après un certain temps a farfouiller au millieu des connecteurs\u000aSATA et a apprendre que, oui, l’alimentation sert aussi pour les disques\u000adurs, je suis de retour pour un court article.
\u000aDu coup, je m’étais dit que j’allais reprendre sur le thème de\u000al’informatique expliquée au grand public, en tentant d’aller un peu plus\u000aloin que la dernière fois sur le thème de la programmation
\u000aCe qu’il faut comprendre, c’est la facon dont fonctionne un ordinateur.\u000aSi a peu près tout le monde sait que “les ordinateurs, ils ne\u000acomprennent que les 1 et les 0!”, peu de gens savent comment cela\u000afonctionne en détail.

\u000a

Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà\u000ades notions de base en informatique. Ainsi, vous savez surement que les\u000aordinateurs fonctionnent avec des programmes, qui sont composés de\u000acode.
\u000aAinsi, il faut comprendre que le code (source) est “compilé” en un\u000afichier “binaire”. Un fichier binaire est un fichier comprenant les\u000ainstructions telles qu\u2019exécutées par le processeur, et donc absolument\u000aillisible pour un humain.

\u000a

La compilation est le processus qui transforme le code source en\u000abinaire executable. Les binaires ont, sous Windows, l’extension .exe,\u000atandis que sous les systèmes UNIX-like, ils n’ont pas d’extension\u000aparticulière.
\u000aCeci étant dit, il faut comprendre que certains langages sont plus\u000aproches que d’autres du langage processeur, les langages les plus\u000aproches sont dits de “bas niveau”. Les langages les plus éloignés sont\u000adonc dits de haut niveau.

\u000a

Par exemple, l’assembleur est l’un des languages de plus bas niveau,\u000atandis que python par exemple est un langage de plus haut niveau. Les\u000alangages de haut niveau sont souvent bien plus simples a comprendre et a\u000aapprendre que les langages de bas niveau

\u000a

Ainsi, en C, un langage de niveau relativement bas, pour afficher\u000a“hello world” sur l’écran, le code nécessaire est :

\u000a
#include \u000avoid main() {\u000aprintf("hello world");\u000areturn 0;\u000a}\u000a
\u000a\u000a\u000a

le même programme en python s’écrit :

\u000a
print "hello world"\u000a
\u000a\u000a\u000a

et n’a pas besoin d’être compilé , puisqu’il peut être intepreté\u000adirectement.

\u000a

Python utilise en effet un système similaire a Java en ayant un\u000ainterpréteur dit “runtime” ou “temps réel”, qui interprète le programme\u000asans le compiler. Java utilise un système légèrement différent, puisque\u000ale code a besoin d’être compilé, mais est interpreté par un interpréteur\u000aet non par le processeur.

\u000a

Cette méthode permet le fameux “code once, run everywhere”, ce qui\u000asignifie que le même code est exécutable sur quasiment tous les systèmes\u000ad’exploitation (en fait, tous ceux sur lesquels l\u2019interpréteur est\u000adisponible.)

\u000a

Voila, je vous laisse sur le fonctionnement de Java et de Python, et je\u000avais me coucher.
\u000aA bientôt!

p1010 (dp1011 Vdate p1012 g5 (S'\x07\xdc\x08\x1b\x00\x16\x00\x00\x00\x00' p1013 tp1014 Rp1015 sVcategory p1016 g10 (g11 g12 Ntp1017 Rp1018 (dp1019 g16 VTeaching p1020 sg18 Vteaching p1021 sg20 g21 sbsVtitle p1022 VLa programmation expliquée simplement p1023 sVslug p1024 Vla-programmation-expliquee-simplement p1025 sVauthor p1026 g10 (g275 g12 Ntp1027 Rp1028 (dp1029 g16 VWxcafe p1030 sg18 Vwxcafe p1031 sg20 g21 sbstp1032 tp1033 sV/srv/www/content/mfsbsd-online.md p1034 (F1431623308.7418475 (V

J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)\u000aVoulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester bhyve)\u000aet n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon serveur auto-hebergé ni sur ce serveur ci, \u000aj’ai commencé a chercher comment le faire sur ce serveur.

\u000a

Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu\u000achercher un peu plus loin. Il se trouve que ce post sur les forums\u000ad’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier.

\u000a

J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),\u000aou l’on m’a dirigé vers mfsbsd, un projet d’installeur\u000aalternatif, minimaliste et simplifié pour FreeBSD.

\u000a

Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une\u000aconsole KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le\u000apanel Online. Une fois cela fait, lancez une console, puis téléchargez l’image\u000amfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis\u000achoisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter\u000asur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout\u000aa fait classique va démarrer. Une fois ceci fait, la partie importante arrive:\u000amfsbsd contient un script d’installation root-on-zfs, nommé logiquement\u000azfsinstall, qui va se charger de tout le travail pour nous.

\u000a

Utilisez donc ce script ainsi :

\u000a
# tout d'abord, wipons le MBR :\u000add < /dev/zero > /dev/da0 count=1\u000a# maintenant, installons le système\u000azfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c\u000a
\u000a\u000a\u000a

Avec -g da0 votre disque dur principal, -s 2G la quantité de swap désirée,\u000a-p root le nom du zpool, et -c pour activer la compression. D’autres options\u000asont disponibles, je vous invite a faire un zfsinstall -h si mon setup ne vous\u000aconvient pas.

\u000a

Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau\u000asystème) et éditez /etc/rc.conf :

\u000a
zfs_load="YES"\u000asshd_load="YES\u000ahostname="whatever"\u000aifconfig_igb0="DHCP"\u000a
\u000a\u000a\u000a

Remplacez whatever par votre hostname, et igb0 par le nom de votre interface\u000aphysique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez\u000amaintenant un système FreeBSD tout propre installé sur zfs a découvrir et\u000autiliser!

\u000a

Voila, c’est la fin de ce tutoriel.\u000a(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu \u000acrédible, disons)

\u000a

Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : wxcafe_ebooks,\u000apetitefanfare,\u000acapet_ebooks,\u000azengisse,\u000aet kim_ebooks. Ils sont tous basés sur ce\u000acode, qui vient de\u000a@m1sp\u000a(github.com/twitter_ebooks). Donc voila.

\u000a

A plus

p1035 (dp1036 Vdate p1037 g5 (S'\x07\xde\x08\x1c\x0c\x10\x00\x00\x00\x00' p1038 tp1039 Rp1040 sVcategory p1041 g10 (g11 g12 Ntp1042 Rp1043 (dp1044 g16 VTutoriel p1045 sg18 Vtutoriel p1046 sg20 g21 sbsVtitle p1047 VInstaller FreeBSD sur un serveur Online avec MfsBSD p1048 sVslug p1049 Vfreebsd-online-mfsbsd p1050 sVauthor p1051 g10 (g275 g12 Ntp1052 Rp1053 (dp1054 g16 VWxcafe p1055 sg18 Vwxcafe p1056 sg20 g21 sbstp1057 tp1058 sV/srv/www/content/les-differentes-couches-dun-systeme-dexploitation.md p1059 (F1431623308.6898475 (V

Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques\u000aannées (plus ou moins, parce que j’ai toujours un Windows en dual boot,\u000aprincipalement pour les jeux (possiblement plus pour longtemps, avec\u000al’arrivée de Steam pour Linux… ) ), je commence a connaître plus ou\u000amoins bien mon système. Or il y a plusieurs choses a savoir sur les\u000asystèmes d’exploitation, et celle dont je vais parler aujourd’hui, c’est\u000ale système de couches.

\u000a

Un système d’exploitation (de type UNIX, \u005c<troll>enfin un vrai système quoi.\u000a\u005c</troll>) incorpore plusieurs systèmes de couches.

\u000a

Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique,\u000ac’est a dire que tous les composants sont intégrés au kernel. Ce qui\u000asignifie que rien ne peut être ajouté au noyau sans recompiler celui ci.\u000aOr, quand on sait que le noyau comprend entre autres les drivers du\u000amatériel et des systèmes de fichier, cela peut poser des problèmes quand\u000aa la taille du kernel et a la licence libre de ce dernier.

\u000a

Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui\u000asignifie que des modules peuvent être chargé a tout moment en cours\u000ad\u2019exécution, ce qui permet l’utilisation de nouveaux systèmes de\u000afichiers a chaud, ou l’insertion de matériel et l’installation de\u000adrivers sans interrompre l\u2019exécution du système (Windows utilise un\u000asystème de fausse installation de drivers pour le matériel externe, et\u000aun système de pré-installation des drivers pour les périphériques dits\u000a“plug and play”)

\u000a

Après le noyau intervient le système. Or, au tous premiers instants du\u000aboot, les systèmes GNU/Linux utilisent un système permettant de limiter\u000al’utilisation de ressources systèmes si elles ne sont pas nécessaires,\u000aet incorpore ainsi un système dit de “runlevels”

\u000a

Ainsi, au runlevel 0, le système s’éteint après avoir booté. Ainsi, ce\u000arunlevel permet de tester le bon démarrage du système sans avoir a\u000aeffectuer de manipulation pour le ré-éteindre

\u000a

Le runlevel 1 est appelé mode single user, et c’est un nom plutôt adapté\u000aétant donné que ce runlevel donne accès a un système en étant\u000aautomatiquement loggé en tant que root, avec tous les autres\u000autilisateurs désactivés, de même que tous les systèmes de réseaux

\u000a

Le runlevel 2 est appelé mode multi user, et vous mets en face d’un\u000asystème classique. en ligne de commande, mais avec tous les systèmes de\u000aréseau désactivés.

\u000a

Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux\u000aactivés.

\u000a

Le runlevel 4 n’est pas officiellement défini, et est censé être\u000aactivable en fonction des besoins de l’utilisateur. Sur la plupart des\u000adistributions grand public, ce runlevel est lié au…

\u000a

Runlevel 5! Multi-user, networking, with working GUI! c’est le système\u000atel que vous le connaissez, avec l’interface graphique et le système de\u000alogin graphique.

\u000a

Le runlevel 6, enfin, est le bien nommé “reboot”, qui reboot la machine\u000aquand il devient le runlevel courant.

\u000a

(Il est a noter que Debian, et donc toutes les distribs qui en sont\u000adérivées, ne font pas de distinction entre les differents runlevels du 2\u000aau 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login\u000aet une interface graphique, et un mode réseau fonctionnel, bref avec des\u000afonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)

\u000a

Il est possible de changer de runlevel grâce a la commande runlevel\u000a(oui, c’est évident…)

\u000a

Les systèmes Linux utilisent aussi un système dit de SandBox , qui en\u000ainformatique est un système permettant d’isoler les processus les uns\u000ades autres. Ainsi, la pile réseau, qui est le système auquel les\u000adifférents processus envoient les différents paquets qui doivent sortir\u000ade la machine , et qui redistribue ces paquets, est isolée du reste du\u000asystème, en cela qu’aucun des autres processus ne peuvent modifier cette\u000apile hors du runlevel 1 ou 2.

\u000a

De la même façon, le navigateur chrom/ium fait fonctionner tous les\u000aonglets, ainsi que toutes les extensions, dans des processus différents.\u000aCertaines distributions linux implémentent un système de cette sorte\u000apour toutes les applications, ou seulement pour certaines. ainsi Chakra\u000aLinux a un système d’installation d’applications dans des disques\u000avirtuels, ce qui permet une sécurité totale du processus.

\u000a

Voila, j’espère vous en avoir appris un peu sur le fonctionnement des\u000adifférentes couches de linux, et j’espère que cet article vous poussera\u000aa tester un peu votre système et a vous amuser avec les différents\u000arunlevels

p1060 (dp1061 Vdate p1062 g5 (S'\x07\xdc\t\x06\x17\x1d\x00\x00\x00\x00' p1063 tp1064 Rp1065 sVcategory p1066 g10 (g11 g12 Ntp1067 Rp1068 (dp1069 g16 VTeaching p1070 sg18 Vteaching p1071 sg20 g21 sbsVtitle p1072 VLes différentes couches d'un système d'exploitation p1073 sVslug p1074 Vles-differentes-couches-dun-systeme-dexploitation p1075 sVauthor p1076 g10 (g275 g12 Ntp1077 Rp1078 (dp1079 g16 VWxcafe p1080 sg18 Vwxcafe p1081 sg20 g21 sbstp1082 tp1083 sV/srv/www/content/update.md p1084 (F1440203908.4932795 (V

Juste une petite note pour annoncer le prochain article, consacré a la\u000afabrication d’une PirateBox basée sur un Raspberry Pi. Voila, a bientôt\u000asur le blog!

p1085 (dp1086 Vdate p1087 g5 (S'\x07\xdd\x01\x05\x12 \x00\x00\x00\x00' p1088 tp1089 Rp1090 sVcategory p1091 g10 (g11 g12 Ntp1092 Rp1093 (dp1094 g16 VNote p1095 sg18 Vnote p1096 sg20 g338 sbsVtitle p1097 VUpdate p1098 sVslug p1099 Vupdate p1100 sVauthor p1101 g10 (g275 g12 Ntp1102 Rp1103 (dp1104 g16 VWxcafe p1105 sg18 Vwxcafe p1106 sg20 g338 sbstp1107 tp1108 sV/srv/www/content/debuts-presentation-etc.md p1109 (F1431623308.6698475 (V

Bonjour!

\u000a

Je m’appelle Wxcafé, et ça fait pas mal de temps que je sévis sur\u000aTwitter, mais aussi sur IRC (Je traîne pas mal sur\u000airc.freenode.net/##nolife et #debian-fr)

\u000a

J’ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je\u000afais partie de ce genre de personne qui sont capables d’investir tout\u000aleur temps et leur énergie a s\u2019intéresser a un sujet en particulier, et\u000aqui ne peuvent pas vivre sans leurs passions, avec une petite différence\u000acependant, qui est que je m\u2019intéresse a plusieurs choses :\u000al’informatique, qui est un champ tellement large qu’on peut passer une\u000avie a apprendre des choses dessus, et plus particulièrement à\u000al’informatique avancée (Noyaux dérivés d’UNIX et de Linux, outils libres\u000a{bien que n’étant pas un barbu intégriste [ceci est un troll assumé. Les\u000atrolls seront a partir de maintenant indiqués avec le tag [tr]] du\u000alibre, je préfère utiliser de l’open-source si c’est possible},\u000aprogrammation en C, python et java, etc…) , mais aussi a\u000al\u2019électronique.

\u000a

Dans un tout autre registre, je m\u2019intéresse aussi\u000abeaucoup aux différents aspects du féminisme et des égalités sexuelles\u000a(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) ,\u000aet a la culture dite “geek” en général.

\u000a

Je tenterai de poster ici le plus souvent possible, mais j’ai de gros\u000aproblèmes en terme de régularité de post, donc ne vous inquiétez pas si\u000avous ne voyez rien pendant deux semaines.

\u000a

Merci beaucoup de votre attention, et a bientôt!

p1110 (dp1111 Vdate p1112 g5 (S'\x07\xdc\x08\x12\x14\x1b\x00\x00\x00\x00' p1113 tp1114 Rp1115 sVcategory p1116 g10 (g11 g12 Ntp1117 Rp1118 (dp1119 g16 VNotes p1120 sg18 Vnotes p1121 sg20 g21 sbsVtitle p1122 VDébuts, présentation, etc... p1123 sVslug p1124 Vdebuts-presentation-etc p1125 sVauthor p1126 g10 (g275 g12 Ntp1127 Rp1128 (dp1129 g16 VWxcafe p1130 sg18 Vwxcafe p1131 sg20 g21 sbstp1132 tp1133 sV/srv/www/content/archlinux-made-simple.md p1134 (F1431623308.7058475 (V

Archlinux est réputée être une distribution Linux très complexe a\u000ainstaller et a maintenir.

\u000a

Je vais tenter ici de vous convaincre que ce n’est pas le cas, et\u000aqu’elle peut se monter très intéressante et très instructive a installer\u000atout autant qu’a utiliser.

\u000a

Il convient tout d’abord de rappeler a quels principes obéit Arch:

\u000a
    \u000a
  1. \u000a

    Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des\u000a programmes simples et utilisables par tous. Avec comme base de\u000a simplicité les utilisateurs de LFS… Mais il n’empêche qu’avec un peu\u000a de bonne volonté, la configuration n’est pas si compliquée!

    \u000a
  2. \u000a
  3. \u000a

    La philosophie UNIX : chaque programme est prévu pour ne remplir\u000a qu’une seule tâche. Bien entendu, cela ne concerne que les programmes\u000a conçus pour s\u2019insérer dans la philosophie UNIX, et les installations de\u000a dépendances avec le gestionnaire de paquet d’Arch fonctionnent\u000a superbement bien.

    \u000a
  4. \u000a
\u000a

De plus, posons les bases d’Arch : le gestionnaire de paquets s’appelle\u000apacman, et les commandes de base sont :

\u000a
    \u000a
  • \u000a

    recherche d’un paquet :

    \u000a
    pacman -Ss paquet\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    installation d’un paquet :

    \u000a
    sudo pacman -S paquet\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    désinstallation d’un paquet :

    \u000a
    sudo pacman -R paquet\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    mise a jour de tous les paquets installés :

    \u000a
    sudo pacman -Syu paquet\u000a
    \u000a\u000a\u000a
  • \u000a
\u000a

Archlinux est une distribution dite “rolling release”, ce qui signifie\u000aqu’il n’y a pas de version a proprement dites, et que les paquets se\u000amettent a jour en permanence, sans jamais changer la “version” d’Arch.\u000aIl n’y a d’ailleurs qu’une seule version de l’installeur sur le site,\u000apuisqu’une version plus ancienne n’aurait aucun sens.

\u000a

Arch n’offre pas d’interface graphique par défaut : après avoir installé\u000ale système, vous n’aurez qu’une invite de commande. Heureusement, je\u000avais ici vous guider a travers l’installation d’une interface graphique\u000a(mate, le fork de gnome 2)

\u000a

L’installation d’Arch se fait par le réseau, veillez a avoir une\u000aconnection WiFi ou filaire a proximité avant de suivre ce guide.

\u000a

Ce guide utilise SystemV, alors qu’Arch va prochainement passer sous\u000asystemd. N’ayant pas encore eu le temps d\u2019expérimenter assez avec ce\u000adernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.

\u000a

Bon, passons a l’explication de l’installation proprement dite :

\u000a

Tout d’abord, téléchargeons l’iso d’arch la plus récente :

\u000a
wget http://mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso\u000a
\u000a\u000a\u000a

Ensuite, gravons cette image sur un disque USB :

\u000a
dd if=archlinux-2012.09.07-dual.iso of=/dev/sdX\u000a
\u000a\u000a\u000a

Après reboot de la machine sur l’iso en question et choix de\u000al’architecture, nous sommes accueillis par un shell root.

\u000a

La première chose a faire est de paramétrer le clavier :

\u000a
loadkeys fr\u000a
\u000a\u000a\u000a

Puis nous pouvons passer a l’installation proprement dite.\u000aPartitionnement :

\u000a
cfdisk # cfdisk est suffisamment clair pour ne pas nécessiter d'explications\u000a
\u000a\u000a\u000a

formatage des partitions :

\u000a
mkfs.ext4 /dev/sda1 # partition root\u000a\u000apacman -Syu btrfs-progs && mkfs.btrfs /dev/sda2 # partition home\u000a\u000amkswap /dev/sda3 && swapon /dev/sda3 # partition de swap\u000a
\u000a\u000a\u000a

Montons les partitions nouvellement créées, puis installons le système :

\u000a
mount /dev/sda1 /mnt\u000a\u000amkdir /mnt/home && mount /dev/sda2 /mnt/home\u000a\u000adhclient eth0 # si vous utilisez une connection filaire, sinon voire http://wiki.archlinux.fr/Wifi#Configuration\u000a\u000apacstrap /mnt base base-devel\u000a\u000agenfstab -p /mnt > /mnt/etc/fstab\u000a
\u000a\u000a\u000a

Allons prendre un café le temps que ça charge, puis installons les\u000aquelques paquets nécessaires a notre installation et au premier\u000adémarrage:

\u000a
pacstrap /mnt syslinux btrfs-progs wireless_tools dhclient\u000a
\u000a\u000a\u000a

Maintenant, passons sur notre install toute fraîche d’Arch :

\u000a
arch-chroot /mnt bash\u000a
\u000a\u000a\u000a

configurons les bases :

\u000a
echo HOSTNAME > /etc/hostname\u000a\u000aln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime\u000a\u000adate MMJJhhmmAAAA\u000a\u000ahwclock --systohc\u000a\u000avim /etc/locale.gen # Décommentez les lignes correspondant au français : fr_FR.UTF-8 et fr_FR.ISO-8859-1\u000a\u000aecho  'LANG="fr_FR.UTF-8"' > /etc/locale.conf\u000a\u000alocale-gen\u000a\u000amkinitcpio -p linux\u000a
\u000a\u000a\u000a

Enfin, vérifions que syslinux est correctement configuré :

\u000a
vim /boot/syslinux/syslinux.cfg # il devrait y avoir "append root=/dev/sda1"\u000a
\u000a\u000a\u000a

Si tout est correct, installons syslinux, et paramétrons un mot de passe\u000aroot :

\u000a
syslinux-install_update /dev/sda -mia\u000a\u000apasswd root\u000a
\u000a\u000a\u000a

Et voila, l’installation est terminée! Plus qu’a quitter la session et a\u000aredémarrer l’ordinateur!

\u000a
 exit\u000aumount /mnt/home \u000aumount /mnt\u000areboot\u000a
\u000a\u000a\u000a

Fini!

\u000a

Prenons une petite pause. La partie suivante de ce tutoriel consister en\u000aun paramétrage des principaux services nécessaires a l’utilisation d’un\u000aOS, disons, moyen :

\u000a
    \u000a
  • \u000a

    Installation de MATE, le gestionnaire de bureau (voir\u000ahttp://mate-desktop.org/)

    \u000a
  • \u000a
  • \u000a

    Installation de sudo et de networkmanager pour faire fonctionner les\u000acomposants essentiels du système sans avoir a tout activer a la main a\u000achaque démarrage

    \u000a
  • \u000a
  • \u000a

    Installation de SLiM comme gestionnaire de login graphique, pour\u000aprésenter une interface plus accueillante que la console, et\u000aconfiguration de celui-ci

    \u000a
  • \u000a
  • \u000a

    Installation des principaux logiciels utiles non inclus dans mate ni\u000abase (yaourt, chromium, thunderbird, etc…).

    \u000a
  • \u000a
\u000a

Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un\u000agestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter\u000aici.

\u000a

Bon, reprenons.

\u000a

Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de\u000apasse paramétré plus haut pour le root, puis retapez la commande\u000autilisée plus tôt pour vous connecter a internet.

\u000a

Il convient d’ajouter le dépôt de MATE pour installer ce dernier, puis\u000ad’effectuer l’action en question :

\u000a
vim /etc/pacman.conf\u000a
\u000a\u000a\u000a

Ici, ajoutez les lignes suivantes :

\u000a
[mate]\u000aServer = http://repo.mate-desktop.org/archlinux/$arch\u000a
\u000a\u000a\u000a

Installons maintenant les paquets :

\u000a
pacman -Syu mate mate-extras dbus dbus-core alsa networkmanager sudo\u000a
\u000a\u000a\u000a

Ajoutons un compte utilisateur pour utiliser les composants du système\u000asans tout crasher a chaque fois :

\u000a
useradd -g users -G wheel,audio,optical,lp,scanner,log,power,floppy,storage,games,video -m -s /bin/bash *votrenom*\u000apasswd *votrenom*\u000asu *votrenom*\u000a
\u000a\u000a\u000a

Il faut maintenant éditer le fichier \u005c~/.xinitrc pour préciser a X.org\u000ace que l’on veut utiliser :

\u000a
echo "exec ck-launch-session mate-session" > ~/.xinitrc\u000a
\u000a\u000a\u000a

Profitons en pour ajouter les démons système au lancement :

\u000a
vim /etc/rc.conf\u000a
\u000a\u000a\u000a

Ajoutez donc dbus, alsa. hwclock et networkmanager dans la section\u000aDAEMONS (entre les parenthèses, après crond normalement)

\u000a
DAEMONS=(syslog-ng network crond dbus alsa hwclock networkmanager)\u000a
\u000a\u000a\u000a

Pour éviter un reboot, il est ici possible de faire un

\u000a
su\u000a
\u000a\u000a\u000a

Puis un

\u000a
 /etc/rc.d/dbus start && /etc/rc.d/alsa start && /etc/rc.d/networkmanager start\u000a
\u000a\u000a\u000a

Sinon, il est possible de juste redémarrer.
\u000aUne fois cela fait, profitez de ce moment pour vous autoriser vous même\u000aa utiliser sudo. Loggez vous en root, et :

\u000a
 vim /etc/sudoers\u000a
\u000a\u000a\u000a

Décommentez la ligne qui commence par # %wheel ALL=(ALL)
\u000aSauvegardez le fichier, puis, après un su *votrenom*, tentez de faire\u000aun sudo ls /
\u000aNormalement, vous devriez avoir un listing du dossier /
\u000aBon, maintenant, pourquoi ne pas tenter de lancer MATE?
\u000aC’est simple comme bonjour :

\u000a
 startx\u000a
\u000a\u000a\u000a

Et PAF! Voila un MATE desktop flambant neuf a configurer!
\u000aAvant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous,\u000apuis installez SLiM (sudo pacman -Syu slim).
\u000aConfigurons le:

\u000a
echo "exec dbus-launch mate-session" > ~/.xinitrc && vim /etc/slim.conf\u000a
\u000a\u000a\u000a

Éditez la ligne\u000a“sessions xfce4,icewm-session,wmaker,blackbox” de facon a\u000ace qu’elle ressemble a “sessions mate-session
\u000aPuis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.
\u000aNormalement, tout devrait fonctionner!
\u000aAh oui, et pour installer thunderbird, firefox, chromium, etc…

\u000a
sudo pacman -Syu chromium thunderbird xchat firefox rhythmbox pidgin transmission-gtk vlc\u000a
\u000a\u000a\u000a

Voila! Et comme dirait @Spartition, c’est sale, mais qu’est-ce que c’est\u000abon!
\u000aA plus~

p1135 (dp1136 Vdate p1137 g5 (S'\x07\xdc\n\x05\x0e0\x00\x00\x00\x00' p1138 tp1139 Rp1140 sVcategory p1141 g10 (g11 g12 Ntp1142 Rp1143 (dp1144 g16 VOSes p1145 sg18 Voses p1146 sg20 g21 sbsVtitle p1147 VArchlinux made simple p1148 sVslug p1149 Varchlinux-made-simple p1150 sVauthor p1151 g10 (g275 g12 Ntp1152 Rp1153 (dp1154 g16 VWxcafe p1155 sg18 Vwxcafe p1156 sg20 g21 sbstp1157 tp1158 sV/srv/www/content/comment-saurik-a-roote-les-google-glass.md p1159 (F1431623308.7258475 (V

Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu\u000apour avoir développé Cydia, un “app store” alternatif pour les iTrucs),\u000aaprès avoir reçu une paire de Google glass de la part de Google (de\u000afaçon assez évidente…), a trouvé intéressant d’obtenir un accès root\u000asur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la\u000apart de Google et de certains autres sites sont vite arrivés, disant que\u000ales lunettes possédaient un bootloader débloqué et que de fait, le root\u000aétait facile a obtenir : il suffisait de débloquer le bootloader,\u000ad’extraire l’OS, de le rooter hors-fonctionnement, puis de le\u000aréinstaller, rooté, sur les lunettes.

\u000a

Le fait est que de débloquer le bootloader laisse une trace permanente\u000asur les lunettes, et que Saurik n’a pas utilisé cette technique pour\u000arooter sa paire. Voyons comment il a fait :

\u000a

Je tiens tout d’abord a préciser que toutes les informations qui vont\u000asuivre sont extraites de cet article, et plus précisément de la\u000apartie “How does this exploit work”.  Je tente d’apporter ma maigre\u000acontribution a cette explication.

\u000a

Donc, d’après les témoignages des quelques utilisateurs de Glass dans le\u000amonde, il semblerait que ces dernières fonctionnent avec un système\u000ad’exploitation Android, avec une nouvelle interface, mais avec les mêmes\u000aoutils internes: un kernel Linux, des outils userland GNU et une machine\u000avirtuelle Java Dalvik pour les applications.

\u000a

Saurik a donc cherché un exploit connu pour cette version d’android, et\u000al’a appliqué a son problème. L’exploit en question est relativement\u000asimple. Depuis la version 4.0 d’android, le système permet la sauvegarde\u000ades données des différentes applications, une a une, via ADB (Android\u000aDebug Bridge, un protocole USB permettant l’accès a de nombreuses\u000afonctions avancées des machines fonctionnant sous android, dont, entre\u000aautre, un shell, un accès au logs de debugging, etc… Cette\u000afonctionnalité est bien entendu désactivable.) Ce backup est très simple : \u000ail crée un fichier .tgz contenant le dossier de configuration de\u000al’application. Lors de la restauration, le système supprime la\u000aconfiguration existante, puis la remplace par celle dans l’archive gzip.

\u000a

Le problème de sécurité vient du fait que les applications android\u000avoient leurs données stockées dans /data/data/identifiant/, et que\u000a/data/ a pour permissions drwxrwx–x  27  system  system, ce qui\u000asignifie que seul system et les membres du groupe system peuvent lire\u000adessus. Or, le fichier /data/local.prop définit de nombreux paramètres\u000aau démarrage, et notamment un qui permet au système de déterminer s’il\u000afonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur\u000aune machine virtuelle, il donne les droits root a tout utilisateur se\u000aconnectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le\u000afait que /data/ appartienne a system veut dire que le programme de\u000arestauration doit être setuid pour accéder aux données a l\u2019intérieur qui\u000aappartiennent a root (soit toutes les applications système d’android,\u000adont l’application paramètres, et, dans ce cas précis, l’application de\u000alog système présente sur les google glass de test. Ainsi, nous avons un\u000aprocessus tournant en tant que root, qui va écrire sur une partition qui\u000anous intéresse des données que nous possédons.

\u000a

Cependant, un problème reste : le système de restauration d’Android\u000avérifie les données avant de restaurer, et ne restaure pas les symlinks,\u000ace qui nous empêche d’avoir accès directement a /data/local.prop, le\u000afichier qu’on cherche a modifier. Cela dit, il nous reste une\u000apossiblité. Plaçons un dossier world-writable dans le fichier de backup,\u000aet nous pourrons écrire dedans pendant quelques secondes, le temps que\u000ala restauration se termine et que le système remette les permissions en\u000aplace. Ainsi, nous pouvons créer le fichier\u000a/data/local/com.google.glass.logging/whatev/x, lien vers\u000a/data/local.prop, et nous avons un toujours un processus tournant en\u000atant que root qui est en train d’écrire dans ce dossier.

\u000a

Donc, nous allons lancer deux processus en même temps :

\u000a
    \u000a
  • \u000a

    Le premier tentera en boucle de créer le symlink. Il sera consitué de\u000a la commande suivante, depuis un shell sur les lunettes :

    \u000a
    while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null\u000ado :\u000adone\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    Le deuxième sera le processus de restauration de notre exploit. Celui\u000a ci, pour une plus grande chance de réussite, devra être suffisamment\u000a lourd : au moins \u005c~50Mo. Il devra contenir whatev/bigfile et whatev/x,\u000a pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive\u000a dans x après que le symlink soit effectif. La commande sera, depuis\u000a l’ordinateur host :

    \u000a
    adb restore exploit.ab\u000a
    \u000a\u000a\u000a

    Ces commandes vont fonctionner de concert pour nous donner un accès root :
    \u000a- Le processus de restauration va créer le dossier whatev, qui sera\u000a world-readable. Il va commencer a copier le fichier bigfile.
    \u000a- Le processus de symlink va créer le lien\u000a /data/data/com.google.glass.logging/whatev/x, pointant vers\u000a /data/local.prop, puis rendre l’âme proprement.
    \u000a- Le processus de restauration, ayant enfin fini de copier\u000a whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui\u000a est lié a /data/local.prop. Comme le processus est setuid root, il ne se\u000a rendra compte de rien, et écrira tout dans /data/local.prop.

    \u000a
  • \u000a
\u000a

And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui\u000anous permet de faire croire a android qu’il tourne dans une machine\u000avirtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui\u000aindique au noyau qu’il tourne dans qemu, un système de VM).

\u000a

Il nous reste a rebooter, depuis l’ordinateur host :

\u000a
adb reboot\u000a
\u000a\u000a\u000a

Puis nous remontons la partitions système en lecture/écriture (r/w),\u000adepuis le host :

\u000a
adb shell "mount -o remount,rw /system"\u000a
\u000a\u000a\u000a

Nous copions le binaire su vers l’appareil :

\u000a
adb push su /system/xbin\u000a
\u000a\u000a\u000a

Nous donnons les bonnes permissions a ce binaire, afin de pouvoir\u000al\u2019exécuter plus tard :

\u000a
adb shell "chmod 6755 /system/xbin/su"\u000a
\u000a\u000a\u000a

Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir\u000aredémarrer normalement :

\u000a
adb shell "rm /data/local.prop"\u000a
\u000a\u000a\u000a

Enfin, nous redemarrons a nouveau :

\u000a
adb reboot\u000a
\u000a\u000a\u000a

Et voila, une paire de google glass rootée!

\u000a

Il est bon de préciser que cette manipulation n’est possible que parce\u000aque les lunettes tournent sous une ancienne version d’android, et que ce\u000abug a été fixé depuis.

\u000a

Il serait aussi interessant de couvrir les problèmes de vie privée\u000aqu’engendrent les Google Glass, et ce sera fait dans un autre billet.

\u000a

A bientôt!

p1160 (dp1161 Vdate p1162 g5 (S'\x07\xdd\x05\x06\x06\x18\x00\x00\x00\x00' p1163 tp1164 Rp1165 sVcategory p1166 g10 (g11 g12 Ntp1167 Rp1168 (dp1169 g16 VHacking p1170 sg18 Vhacking p1171 sg20 g21 sbsVtitle p1172 VComment Saurik a rooté les Google Glass p1173 sVslug p1174 Vcomment-saurik-a-roote-les-google-glass p1175 sVauthor p1176 g10 (g275 g12 Ntp1177 Rp1178 (dp1179 g16 VWxcafe p1180 sg18 Vwxcafe p1181 sg20 g21 sbstp1182 tp1183 sV/srv/www/content/2013-07-10.12:44:28.md p1184 (F1431623308.7778475 (V

Le chiffrement en tant que concept informatique est traditionnellement associé\u000aau chiffrement de fichiers, c’est a dire au fait de passer d’un fichier en\u000aclair a un fichier chiffré dit cyphertext. Cependant, il ne se limite pas a\u000aça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou\u000abien la confidentialité d’un support de stockage, par exemple. Nous allons ici\u000avoir comment mettre en place un système de ce type sous GNU/Linux. Cet article\u000an’a pas pour but de vous apprendre a mettre en place un système basé sur une\u000aprocédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en\u000ajeu dans l’utilisation du sous-système du noyau Linux dm_crypt et de\u000aprésenter un rapide tutoriel concernant la création d’un support chiffré sur\u000alequel garder vos informations confidentielles (par exemple, votre clé GPG)

\u000a

dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système\u000adu noyau Linux, et s’appuie sur LUKS, un standard de chiffrement \u000ade disques. Comme son nom l’indique, device-mapper est un système qui a pour but\u000ade mapper des block devices. Pour être plus clair, le kernel considère\u000acomme “block device” tout fichier spécial (en gros, les fichiers disques dans/dev/, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le\u000acas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de\u000afonctionnement est simple : a partir d’un “fichier de périphérique” (trad.\u000aWikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes. \u000aPar exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans\u000a/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui\u000aapparaîtront donc dans /dev/mapper)

\u000a

Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de\u000afichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et\u000adéchiffre a la volée tous les accès disques a ce périphérique non chiffré en les\u000atraduisant sur le système de fichier chiffré, le tout de manière tout a fait\u000atransparente pour les applications utilisant le disque en question. Cela induit\u000abien entendu une baisse de performance relativement significative dans le cas\u000ad’un chiffrement du système de fichier root, mais quasiment insignifiante dans\u000ale cas de chiffrement de partitions de données.

\u000a

D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer\u000asi le système de fichier root est chiffré. Dans ce cas précis, la procédure de\u000aboot doit s’appuyer sur une image initrd (l’initrd est un système de\u000afichier minimal qui sert uniquement a initialiser le système. Les kernels de\u000abase de la plupart des distributions GNU/Linux en utilisent un dans tous les\u000acas, pour des raisons de compatibilité) et sur une partition de boot qui elle\u000an’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge\u000aen mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et\u000acharge l’initrd en RAM, celui-ci a son tour lance un script permettant de \u000acharger les modules nécessaires a la suite du boot (que ce soit pour un boot \u000asans disque root local, ou bien comme ici avec un système chiffré), puis le \u000asystème de fichier “cible” est remonté sur la racine, et l’initrd est démonté\u000aest la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend\u000adepuis le système de fichier maintenant monté sur la racine.

\u000a

La méthode la plus évidente pour contourner le chiffrement du disque est alors\u000ade remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par\u000aun autre modifié, copiant par exemple la phrase de passe permettant de\u000adéchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir\u000acontre ce genre d’attaques : l’une des plus simple est de faire un checksum du\u000afichier initrd utilisé et reconnu comme sûr, et de vérifier lors du vrai boot\u000aque l’initrd présente toujours le même checksum. Cela dit, cette méthode a\u000al’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès\u000aa un fichier initrd reconnu comme sûr.
\u000aUne autre approche consisterait a placer le système de fichier /boot sur un\u000apériphérique dédié, protégé en écriture de façon matérielle (par exemple, une\u000acarte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et\u000aprotégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un\u000aattaquant de modifier ce système de fichier, et l’initrd est alors toujours de\u000aconfiance. Cependant, cela a pour conséquence de rendre la mise a jour de\u000al’initrd et du noyau beaucoup plus difficile qu’elle ne le serait sans.

\u000a

Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un\u000aprogramme dédié, cryptsetup. Ce dernier était en charge de cryptoloop,\u000al’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est\u000amaintenant responsable de l’utilisation userspace de dm-crypt, qui pour sa\u000apart est entièrement kernel-space. Cryptsetup permet ainsi le chiffrement, la\u000amanipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier\u000aLUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les\u000autilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi\u000aobligatoirement être capables de le faire en tant que root.

\u000a

Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :
\u000aTout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,\u000adans une situation réelle ou l’on cherche a chiffrer un disque, il convient \u000ad’utiliser /dev/urandom comme source, pour éviter la détection du système de \u000afichier chiffré sur le disque. \u000aIci, par exemple, nous allons faire :

\u000a
dd bs=1000 count=1000000 if=/dev/urandom of=image.img\u000a
\u000a\u000a\u000a

Maintenant que notre image est créée, nous pouvons la chiffrer :

\u000a
sudo cryptsetup luksFormat image.img\u000a
\u000a\u000a\u000a

cryptsetup va alors nous demander si nous sommes absolument surs de vouloir\u000aformater ce disque (nous allons donc valider en tapant YES), puis une\u000apassphrase. Il convient ici de choisir une passphrase particulièrement sûre,\u000apuisque toute personne ayant accès a la passphrase aura aussi accès au disque et\u000adonc a vos secrets.
\u000aUne fois cela fait, nous allons mapper cette image :

\u000a
sudo cryptsetup luksOpen image.img crypto\u000a
\u000a\u000a\u000a

cryptsetup nous redemande la passphrase, charge pendant quelques secondes,\u000apuis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous\u000avoyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En\u000aeffet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les\u000asystèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque\u000aqu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque\u000avirtuel qui correspond a notre image. Il se comporte comme toute partition, et \u000apeut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.\u000aIl se comporte en effet comme une partition, et non comme un véritable disque.)\u000aBon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de\u000ale faire, pour pouvoir l’utiliser.

\u000a
sudo mkfs.ext4 /dev/mapper/crypto\u000a
\u000a\u000a\u000a

Maintenant que notre disque est formaté, il peut être monté :

\u000a
sudo mount /dev/mapper/crypto /mnt\u000a
\u000a\u000a\u000a

Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous\u000avoulez vérifier, un mount | grep crypto devrait vous donner le résultat\u000asuivant :

\u000a
/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)\u000a
\u000a\u000a\u000a

Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils\u000asont (en fonction de votre passphrase) en sécurité.

\u000a

Pour résumer :

\u000a
    \u000a
  • \u000a

    Pour monter vos partitions :

    \u000a
    sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>\u000asudo mount /dev/mapper/<nom de disque virtuel> <emplacement>\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    Pour démonter vos partitions :

    \u000a
    sudo umount <emplacement>\u000asudo cryptsetup luksClose <nom de disque virtuel>\u000a
    \u000a\u000a\u000a
  • \u000a
\u000a

Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de\u000acréer et de monter/démonter vos images/disques chiffré-e-s en une seule\u000acommande. Ils se trouvent sur github.

\u000a

Par ailleurs, si vous comptez transferer votre image disque sur un véritable\u000adisque (ou clé usb, ou autre), il est préférable de créer une partition de\u000ataille appropriée et de faire un dd if=votre_image of=/dev/votre_partition\u000apour ce faire.

p1185 (dp1186 Vdate p1187 g5 (S'\x07\xdd\x07\n\x03\x12\x00\x00\x00\x00' p1188 tp1189 Rp1190 sVcategory p1191 g10 (g11 g12 Ntp1192 Rp1193 (dp1194 g16 VTutoriel p1195 sg18 Vtutoriel p1196 sg20 g21 sbsVtitle p1197 VLe chiffrement de partitions avec dm-crypt et device-mapper p1198 sVslug p1199 Vle-chiffrement-de-partition-avec-dm-crypt-et-device-mapper p1200 sVauthor p1201 g10 (g275 g12 Ntp1202 Rp1203 (dp1204 g16 VWxcafe p1205 sg18 Vwxcafe p1206 sg20 g21 sbstp1207 tp1208 sV/srv/www/content/linformatique-a-lecole.md p1209 (F1431623308.7658474 (V

Après avoir lu cet article paru sur écrans.fr, et au vu des\u000anombreuses réflexions que j’ai eu sur ce sujet au cours des années, je\u000acommence a me demander si la réponse logique ne serait pas d’enseigner\u000ales bases de l’informatique (bases d\u2019électronique, de programmation et\u000ade logique formelle) dès le collège.

\u000a

En effet, l’exemple qui me revient toujours est celui des technoprêtres\u000ade warhammer 40 000, dans un univers ou la technologie est ritualisée et\u000aincomprise même des plus savants, qui se contentent de reproduire ce qui\u000aexiste, et parfois par chance de retrouver un schéma explicatif lisible\u000apar une machine, et qu’ils ne comprennent pas eux mêmes, ou toute\u000atechnologie est ointe d’onguents sacrés, entourée d’encens avant d’être\u000apéniblement actionnée par des assistants ne comprenant rien a cette\u000atechnologie (ayant lu Hackers - Heroes of the Computer Revolution de\u000aSteven Levy, c’est l’ambiance que l’on retrouve quand l’auteur décrit\u000al’ambiance près des machines IBM au MIT, au début de l’ouvrage), et il\u000ame semble que de plus en plus la société se rapproche de cela.

\u000a

Cette culture de l\u2019ingénierie, qui existait beaucoup lors des débuts de\u000al’informatique (telle que décrite par exemple par Steve Wozniak dans son\u000alivre iWoz) disparait pour laisser place a une culture de la\u000aconsommation et de l’utilisation de contenus existants, et même a une\u000acertaine peur de la compréhension de la technologie. Ceux qui s’y\u000aintéressent sont considérés comme marginaux (combien de hackers créent\u000ades outils sur lesquels seront construits tous les systèmes du siècle a\u000avenir, tels des Dennis Ritchie en puissance? Combien d’entre eux ne sont\u000apas intégrés a la société dite “normale”?), et on peut souvent observer\u000ales réactions de peur que lancent les actions des hackers, ne serait-ce\u000aque dans les journaux (combien de journaux ‘mainstream’ ont-ils parlés\u000ades hackers en bien, c’est a dire tels qu’ils sont réellement, depuis\u000ales années 80?) ou a la télévision.

\u000a

Ainsi, la culture et la connaissance de ces appareils que \u000asont les ordinateurs, qui aujourd’hui se trouvent du fond de nos \u000apoches a dans l’espace en passant par l\u2019intérieur des pacemakers \u000ajusqu\u2019à être une composante indispensable de la société, se perdent et \u000arendent ainsi la compréhension de ces appareils impossible (j’ai eu \u000ala désagréable surprise récemment de voir un camarade de classe\u000ame poser ingénument la question “Ah, mais en fait, quand tu installes\u000aLinux, ça change le fond d’écran et les icônes?”. Au-delà du niveau, \u000ala misère de cette question est que cette personne n’avait probablement \u000aaucune idée de la façon dont fonctionnait son ordinateur, a part \u000apour le fond d’écran en question et pour les fameuses icônes.) pour\u000ale grand public, et cet évolution crée de fait une sorte d’oligarchie de\u000atechno-comprenants, seuls capables de manier et de créer la technologie.

\u000a

C’est pour cela qu’il me semble intéressant, important, peut être même\u000arequis, d’inclure au programme du collège puis du lycée des cours\u000ad\u2019électronique et d’informatique tels que décrits plus haut, de façon a\u000ace que les élèves comprennent le monde qui les entoure. Car c’est la le\u000abut du cycle scolaire secondaire, me semble-t-il, et non pas de former\u000ades futurs travailleurs. Sinon, pourquoi y aurait-il des cours de\u000amusique, d’arts plastiques, ou encore de philosophie? Si le but du cycle\u000asecondaire est bien d’ouvrir l’esprit des élèves sur le monde et sur ce\u000aqui les entoure, alors les cours sur l’informatique s’imposent comme une\u000aévidence, puisque ceux-ci nous entourent aujourd’hui bien plus que quoi\u000aque soit d’autre…

\u000a

Ces cours seraient susceptibles de s\u2019insérer en un mélange entre des\u000acours de technologie (qui aujourd’hui sont bien plus orientés physique\u000aet machines-outils qu’informatique ou électronique, alors que la\u000atechnologie d’aujourd’hui et vraisemblablement de demain aussi est\u000al’informatique) et de physique, pour le côté électronique, et de façon a\u000adonner enfin aux cours de physique un intérêt quelconque, sortir au delà\u000ade la théorie et de l’abstraction complète que sont actuellement ces\u000acours et passer un peu dans la réalisation, avec des arduinos par\u000aexemple.

\u000a

Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne\u000afinissent pas par ne rien comprendre a ce qui est aujourd’hui l’une des\u000acomposante les plus importantes du monde tel qu’il est programmé.

p1210 (dp1211 Vdate p1212 g5 (S'\x07\xdc\n\x0f\x14"\x00\x00\x00\x00' p1213 tp1214 Rp1215 sVcategory p1216 g10 (g11 g12 Ntp1217 Rp1218 (dp1219 g16 VRanting p1220 sg18 Vranting p1221 sg20 g21 sbsVtitle p1222 VL'informatique a l'école p1223 sVslug p1224 Vlinformatique-a-lecole p1225 sVauthor p1226 g10 (g275 g12 Ntp1227 Rp1228 (dp1229 g16 VWxcafe p1230 sg18 Vwxcafe p1231 sg20 g21 sbstp1232 tp1233 sV/srv/www/content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md p1234 (F1431623308.7618475 (V

GNU/Linux est un vaste et extraordinaire territoire technologique, mais\u000aje ne vais pas m’attarder ici sur les aspects profondément techniques de\u000ace territoire pour faire plutôt une sorte d’introduction a ce qu’est\u000avraiment GNU/Linux, pour les gens n’ayant aucune ou très peu de\u000aconnaissances en informatique.

\u000a

GNU/Linux, que j\u2019abrégerai ici en Linux pour plus de simplicité, est un\u000aSystème d’Exploitation. Un système d’exploitation est, pour simplifier,\u000aun ensemble d’outils informatiques qui vous permettent d’utiliser votre\u000aordinateur, ainsi, Windows est un système d’exploitation. L’abréviation\u000ade système d’exploitation (Operating System en anglais) est OS. Les 4\u000aprincipaux OS existants aujourd’hui sont Windows, Mac OS, GNU/Linux, et\u000aSolaris. Les trois derniers sont issus d’un autre système, plus ancien,\u000anommé UNIX.

\u000a

De ce fait, on pourrait penser que Linux remplace complètement Windows\u000aune fois installé, et comprend une interface graphique, et toutes sortes\u000ad’utilitaires permettant a l’utilisateur d’utiliser le système (sous\u000aWindows, pensez a l’explorateur de fichiers, ou a Internet Explorer.\u000aPour l’interface graphique, pensez a… Pensez que votre système affiche\u000aautre chose que des lignes de commande.) Or non, une fois installé,\u000aLinux en lui même ne vous afficherait aucune interface graphique, et\u000as’il est effectivement livré avec des utilitaires, ils ne sont que des\u000aprogrammes en ligne de commande. Autant les utilisateurs avancés sauront\u000as’en servir, et pourront argumenter que c’est plus efficace ou plus\u000arapide, autant les utilisateurs basiques préfèrent une interface\u000agraphique. Alors comment en obtenir une?

\u000a

Ici, il convient de faire une précision importante. Si il n’existe\u000aqu’une seule version de Windows, ou de Mac OS, il existe en fait\u000aplusieurs centaines de “versions” différentes de Linux. Appelées\u000adistributions, ces dernière sont développées par des groupes\u000acomplètement séparés, et se basent sur le fait que Linux soit\u000aentièrement placé sous licence libre (ce qui leur permet de l’utiliser a\u000aleur guise, a condition que leur travail soit lui aussi placé sous\u000alicence libre). De ce fait, de nombreuses distributions existent et se\u000adéveloppent en parallèle. On peut ainsi citer Debian, qui est l’une\u000ades distributions les plus importantes, ou encore Ubuntu, qui est\u000al’une des plus connues et des plus simples a utiliser.

\u000a

Ainsi, ces distributions intègrent une interface graphique. Cependant,\u000agrâce a la liberté dont bénéficient les développeurs sous Linux, il\u000aexiste de nombreuses interfaces graphiques différentes : Unity, la\u000anouvelle interface d’Ubuntu; GNOME , une interface qui vise a la\u000asimplicité; ou encore KDE, une interface utilisateur ressemblant a\u000aWindows 7.

\u000a

Ainsi, le choix astronomique de distributions Linux a bien un sens :\u000achacune d’entre elle intègre des outils différents. Par exemple, Debian\u000aintègre GNOME 2, qui est l’ancienne version de GNOME, ce qui la rend\u000aparticulièrement stable. Ubuntu intègre Unity, ce qui en fait une\u000adistribution particulièrement intuitive. Linux Mint intègre Cinnamon,\u000aqui est une version dérivée de GNOME 3, ce qui permet encore une autre\u000aexpérience. Et Arch Linux n’intègre pas d’interface graphique du tout,\u000ace qui permet a l’utilisateur de choisir entre les multiples interfaces\u000aexistantes.

\u000a

Ce qu’il est important de retenir de cela, c’est que Linux est un OS\u000acomplètement libre, ce qui signifie que n’importe qui peut modifier et\u000autiliser tout le code de Linux gratuitement et comme il l’entend. Ainsi,\u000aLinux est un OS qui est véritablement créé par des passionnés, pour tous\u000aet toutes. Surtout, il convient de retenir que Linux n’est pas compliqué\u000aa utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus.\u000aCependant, Linux donne la possibilité a l’utilisateur de le rendre\u000aaffreusement complexe, mais aussi de le rendre adapté a ses besoins,\u000aquels que soient ceux ci. Et c’est la que réside l’incroyable puissance\u000ade ce Système d’Exploitation. Il est extraordinairement adaptable.

\u000a

N’hésitez donc pas a le présenter a vos proches, même s’ils ne sont pas\u000atechnophiles. Ils pourraient adorer, et peut être même le devenir :)

\u000a

A bientôt!

p1235 (dp1236 Vdate p1237 g5 (S'\x07\xdc\x08\x16\x14!\x00\x00\x00\x00' p1238 tp1239 Rp1240 sVcategory p1241 g10 (g11 g12 Ntp1242 Rp1243 (dp1244 g16 VTeaching p1245 sg18 Vteaching p1246 sg20 g21 sbsVtitle p1247 VGNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère p1248 sVslug p1249 Vgnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere p1250 sVauthor p1251 g10 (g275 g12 Ntp1252 Rp1253 (dp1254 g16 VWxcafe p1255 sg18 Vwxcafe p1256 sg20 g21 sbstp1257 tp1258 sV/srv/www/content/redesign-du-blog.md p1259 (F1440203892.5654566 (V

Comme vous avez pu le remarquer, ce blog a “un peu” changé récemment.

\u000a

Du coup, expliquons. J’ai récemment monté serverporn, et ai par la même\u000aoccasion découvert pelican. J’ai tout de suite accroché a ce générateur de\u000asite statique en python, du fait de son efficacité, de sa facilité d’utilisation\u000aet de sa grande customisation. En gros, pelican est un logiciel qui prend des\u000afichiers markdown ou reStructuredText, les passe a la moulinette d’un “thème”\u000aconstitué de templates pour les fichiers html et l’organisation du projet et\u000ad’une partie “statique” contenant le css, et les autres fichiers nécessaires au\u000aprojet, et en fait des pages html.

\u000a

Globalement, un thème est constitué ainsi :

\u000a
thème\u000a\u251c\u2500\u2500 static\u000a\u2502   \u251c\u2500 css\u000a\u2502   \u2502  \u2514\u2500 [css files]\u000a\u2502   \u251c\u2500 img\u000a\u2502   \u2502  \u2514\u2500 [image files]\u000a\u2502   \u2514\u2500 js\u000a\u2502      \u2514\u2500 [javascript files]\u000a\u2514\u2500\u2500 template\u000a    \u251c\u2500 base.html\u000a    \u251c\u2500 index.html\u000a    \u251c\u2500 page.html\u000a    \u251c\u2500 [...]\u000a    \u2514\u2500 article.html\u000a
\u000a\u000a\u000a

Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe \u000adjango, et utilisent des variables particulières telles {{ article.content }},\u000apar exemple. La syntaxe complète est très bien documentée dans la doc de\u000apelican.

\u000a

L’un des grands avantages de pelican est aussi la facilité qu’il offre quand a\u000ala mise a jour du blog.
\u000aEn effet, il offre un système de Makefiles permettant, grâce a de nombreuses\u000acibles de compilation, de régénérer le site entier, de ne générer que les\u000afichiers modifiés depuis la dernière génération, de générer uniquement les\u000afichiers n’existant pas la dernière fois, etc…\u000aLa gestion du projet en devient donc très simple, puisque après avoir écrit un\u000aarticle, il suffit de faire un make html pour mettre a jour le blog.

\u000a

De plus, le système de wordpress commençait a ne plus me convenir, du fait du\u000amanque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec\u000apelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c’est moi\u000aqui ait modifié les templates et le css), c’est lisible (puisque c’est du\u000apython, par opposition au PHP…), et c’est plus “efficace”. Le markdown est\u000atrès pratique, je peux utiliser mon éditeur de texte de prédilection pour faire\u000ales articles, je n’ai pas besoin d’un accès continu au net, bref, c’est plus\u000aefficace.

\u000a

En ce qui concerne les points négatifs :

\u000a
    \u000a
  • \u000a

    Perte des commentaires: \u000a Je vous propose de vous référer a l’article de Gordontesos ici quand a \u000a mon avis sur ce sujet.

    \u000a
  • \u000a
  • \u000a

    Perte du bouton flattr:\u000a Il va bientôt être remis, c’est juste un manque de temps de ma part, mais vu\u000a que toutes les pages passent par les mêmes templates, c’est assez facile a\u000a faire.

    \u000a
  • \u000a
  • \u000a

    Perte du spam:\u000a Pourquoi c’est dans les points négatifs, ca?

    \u000a
  • \u000a
  • \u000a

    Temps d’adaptation et d’appréhension du système:\u000a Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins\u000a réguliers sur le blog, c’est parce que j’apprend a me servir de ce système\u000a et que j’apprend du css et du html. Ca arrive, ca passera, mais dans tous\u000a les cas ca me permet d’apprendre plein de choses, donc je mets plutôt ca\u000a dans la catëgorie positive.

    \u000a
  • \u000a
\u000a

Voila, c’est mon retour d’expérience sur pelican. A plus.

p1260 (dp1261 Vdate p1262 g5 (S'\x07\xdd\x06\x0c\x13\x0e\x00\x00\x00\x00' p1263 tp1264 Rp1265 sVcategory p1266 g10 (g11 g12 Ntp1267 Rp1268 (dp1269 g16 VNote p1270 sg18 Vnote p1271 sg20 g338 sbsVtitle p1272 VRedesign du blog, etc p1273 sVslug p1274 Vredesign-du-blog p1275 sVauthor p1276 g10 (g275 g12 Ntp1277 Rp1278 (dp1279 g16 Vwxcafe p1280 sg18 Vwxcafe p1281 sg20 g338 sbstp1282 tp1283 sV/srv/www/content/hori-vs-pdp.md p1284 (F1433445951.9884226 (V

Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus\u000acompte de quelques petits trucs : tout d’abord, Smash est bien plus drôle\u000aa plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de “choses”\u000a: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro\u000aControllers pour Wii et Wii U, et d’autres. Vous aurez aussi remarqué que le\u000aGamepad n’est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes.\u000aLes pro controllers fonctionnent, mais ne valent pas les bonnes vieilles\u000amanettes Gamecube.

\u000a

Cela étant, si comme moi vous avez, euh, “ouvert” le mode vWii de votre Wii U,\u000avous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et\u000adonc pas assez de ports libres pour connecter l’adaptateur GC pour Wii\u000aU\u000aa votre console.

\u000a

Heureusement pour vous, Nintendo a pensé a une solution (et comme d’habitude\u000aavec Nintendo, c’est une solution a moitié satisfaisante…) : les classic\u000acontroller, mais en forme de manettes Gamecube.

\u000a

Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont\u000aempressées de faire des manettes et de ramasser des brouettes d’argent, en\u000afaisant des manettes Gamecube qui se connectent a des Wiimotes.

\u000a

Nous allons ici voir deux modèles, un de chacune des boites en question\u000a: PDP et Hori.

\u000a

Toutes les photos présentes dans cet article sont disponibles en plus grande\u000ataille en cliquant dessus

\u000a

Commençons par le modèle de chez Hori :

\u000a

Hori_face

\u000a

Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette\u000ade Gamecube : a part le bouton Turbo et le bouton Home, le reste est\u000aparfaitement identique a une véritable manette Gamecube. A noter que les boutons\u000acentraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en\u000aplastique dur.

\u000a

Hori_dos

\u000a

Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne\u000asont en réalité que des boutons : c’est logique puisque c’est comme ça que les\u000aclassic controller sont faits, mais c’est décevant tout de même

\u000a

Hori_CM

\u000a

On peut voir ici que la qualité de l’assemblage n’est pas extraordinaire, et on\u000aremarque une soudure mal faite a l’emplacement du stick gauche.

\u000a

Hori_Cstick

\u000a

Le stick c n’est pas fixé au reste de la manette.\u000aJ’ai essayé de démonter plus avant les différentes parties de la manette, mais\u000ales câbles n’avaient pas l’air de très bonne qualité, et j’ai préféré abandonner\u000al’idée plutôt que de casser la manette.

\u000a

Hori_coque

\u000a

On peut voir que la coque est complètement vide, et que les gâchettes sont bien\u000aen réalité de simple boutons. Il y aurait presque la place de mettre la carte\u000amère d’une Wiimote entière la dedans…

\u000a
\u000a\u000a

Passons maintenant a la manette PDP.

\u000a

PDP_face

\u000a

Au premier coup d’\u0153il, on remarque que la manette PDP ressemble beaucoup moins\u000aa une manette gamecube. Cependant, la prise en main est exactement la même. On\u000aregrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube,\u000aet les boutons transparents (mais c’est un problème de goût).

\u000a

PDP_dos

\u000a

Les gâchettes sont des vraies gâchettes! C’est impossible normalement, mais PDP\u000aa été très intelligent sur le coup, comme on va le voir juste après.

\u000a

PDP_CM

\u000a

Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien\u000amoins de colle, et pas de soudage raté. Toutes les cartes filles sont bien\u000aattachées a la carte mère, et la structure en plastique est renforcée. Mais\u000asurtout, on peut voir deux cartes filles qui sortent de façon étrange de la\u000acarte mère, de façon péremptoire perpendiculaire…

\u000a

PDP_CF

\u000a

Vous l’avez deviné, ces deux “cartes filles” servent en réalité de connecteurs\u000aaux boutons situés sur les gâchettes, qui sont de “vraies” gâchettes en cela\u000aqu’elles sont faites de la même manière que les vraies (avec un ressort, etc)\u000amais qui sont en réalité des boutons (évidemment, puisque cette manette est en\u000afait un classic controller), par opposition aux véritables gâchettes\u000aanalogiques.

\u000a

Quelques photos des gâchettes en question :

\u000a

PDP_G_1

\u000a

PDP_G_2

\u000a

PDP_G_3

\u000a

PDP_G_4

\u000a
\u000a

Vous l’aurez compris, je préfère la version PDP de ces “Fight Pad”, la finition\u000asemble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont\u000apas en caoutchouc cheap, et bien que les sticks soient moins confortables, le\u000areste est parfait. Si vous préférez avoir une manette dont la prise en mains esttotalement identique a celle des manettes Gamecube, cependant, la version\u000aHori vous conviendra probablement mieux, a part les gâchettes, malheureusement.

p1285 (dp1286 Vdate p1287 g5 (S'\x07\xdf\x04\x13\x15;\x00\x00\x00\x00' p1288 tp1289 Rp1290 sVcategory p1291 g10 (g11 g12 Ntp1292 Rp1293 (dp1294 g16 VVidya Games p1295 sg18 Vvidya-games p1296 sg20 (dp1297 VCATEGORY_URL p1298 Vcategory/{slug}/ p1299 sVPAGE_ORDER_BY p1300 Vbasename p1301 sVWITH_FUTURE_DATES p1302 I01 sVCATEGORY_SAVE_AS p1303 Vcategory/{slug}/index.html p1304 sS'LINKS' p1305 ((VSource! p1306 Vhttps://github.com/wxcafe/blog-source p1307 Vcode p1308 tp1309 (VZerobin p1310 Vhttp://paste.wxcafe.net p1311 Vpaste p1312 tp1313 (VPublic Git p1314 Vhttp://git.wxcafe.net p1315 Vgithub-sign p1316 tp1317 tp1318 sVARTICLE_ORDER_BY p1319 Vslug p1320 sVDEFAULT_LANG p1321 Vfr p1322 sVCACHE_CONTENT p1323 I01 sVPAGE_LANG_SAVE_AS p1324 Vpages/{slug}-{lang}.html p1325 sVDRAFT_SAVE_AS p1326 Vdrafts/{slug}.html p1327 sVPAGE_PATHS p1328 (lp1329 Vpages p1330 asVDEFAULT_PAGINATION p1331 I10 sVDOCUTILS_SETTINGS p1332 (dp1333 sVTRANSLATION_FEED_ATOM p1334 Vfeeds/all-%s.atom.xml p1335 sVJINJA_EXTENSIONS p1336 (lp1337 sVSTATIC_PATHS p1338 (lp1339 Vimages p1340 asVDAY_ARCHIVE_SAVE_AS p1341 g66 sVARTICLE_LANG_URL p1342 V{slug}-{lang}.html p1343 sVSLUGIFY_SOURCE p1344 Vtitle p1345 sVSTATIC_URL p1346 V{path} p1347 sVCATEGORY_FEED_ATOM p1348 Vfeeds/feed.%s.xml p1349 sVOUTPUT_SOURCES p1350 I00 sVDIRECT_TEMPLATES p1351 (Vindex p1352 Vtags p1353 Vcategories p1354 Vauthors p1355 Varchives p1356 tp1357 sVPDF_GENERATOR p1358 I00 sVSTATIC_EXCLUDES p1359 (lp1360 sVTAG_URL p1361 Vtag/{slug}.html p1362 sVARTICLE_PATHS p1363 (lp1364 g66 asVLOG_FILTER p1365 (lp1366 sVFILENAME_METADATA p1367 V(?P\u005cd{4}-\u005cd{2}-\u005cd{2}).* p1368 sVDISPLAY_PAGES_ON_MENU p1369 I01 sVPELICAN_CLASS p1370 Vpelican.Pelican p1371 sVCACHE_PATH p1372 V/srv/www/cache p1373 sVAUTORELOAD_IGNORE_CACHE p1374 I00 sVINTRASITE_LINK_REGEX p1375 V[{|](?P.*?)[|}] p1376 sVDEFAULT_ORPHANS p1377 I0 sVTAG_CLOUD_MAX_ITEMS p1378 I100 sS'AUTHOR' p1379 Vwxcafé p1380 sVDISPLAY_CATEGORIES_ON_MENU p1381 I00 sVCHECK_MODIFIED_METHOD p1382 Vmtime p1383 sVARTICLE_EXCLUDES p1384 (lp1385 g1330 asVDEFAULT_DATE_FORMAT p1386 V%a %d %B %Y p1387 sVTAG_CLOUD_STEPS p1388 I4 sVPLUGINS p1389 (lp1390 sVTYPOGRIFY p1391 I00 sVFEED_ALL_ATOM p1392 Vfeeds/feed.atom.all.xml p1393 sVEXTRA_TEMPLATES_PATHS p1394 (lp1395 sVOUTPUT_RETENTION p1396 (tsVPAGE_LANG_URL p1397 Vpages/{slug}-{lang}.html p1398 sVTHEME p1399 V/srv/www/themes/bootstrap2 p1400 sVUSE_FOLDER_AS_CATEGORY p1401 I01 sVDEBUG p1402 I00 sVREVERSE_CATEGORY_ORDER p1403 I00 sVRELATIVE_URLS p1404 I00 sVDATE_FORMATS p1405 (dp1406 sVSITEURL p1407 V//wxcafe.net p1408 sVCONTENT_CACHING_LAYER p1409 Vreader p1410 sS'SOCIAL' p1411 ((VTwitter p1412 Vhttps://twitter.com/wxcafe p1413 Vtwitter p1414 tp1415 (VGithub p1416 Vhttps://github.com/wxcafe p1417 Vgithub p1418 tp1419 (VEmail p1420 Vmailto://wxcafe@wxcafe.net p1421 Venvelope p1422 tp1423 (VGpg p1424 Vhttps://pub.wxcafe.net/wxcafe.asc p1425 Vkey p1426 tp1427 (VIRL p1428 Vhttp://leloop.org/where.html p1429 Vmap-marker p1430 tp1431 tp1432 sVNEWEST_FIRST_ARCHIVES p1433 I01 sVPATH_METADATA p1434 g66 sVPDF_STYLE p1435 Vtwelvepoint p1436 sS'DISPLAY_CATEGORIES_ON_BAR' p1437 I01 sVTEMPLATE_PAGES p1438 (dp1439 sVFEED_DOMAIN p1440 g1408 sVTYPOGRIFY_IGNORE_TAGS p1441 (lp1442 sVGZIP_CACHE p1443 I01 sVAUTHOR_FEED_RSS p1444 Vfeeds/%s.rss.xml p1445 sS'TIMEZONE' p1446 VEurope/Paris p1447 sVDRAFT_URL p1448 Vdrafts/{slug}.html p1449 sVPAGE_EXCLUDES p1450 (lp1451 g66 asVAUTHOR_SAVE_AS p1452 Vauthor/{slug}.html p1453 sVREADERS p1454 (dp1455 sS'FEED_RSS' p1456 Vfeeds/feed.rss.xml p1457 sVDRAFT_LANG_URL p1458 Vdrafts/{slug}-{lang}.html p1459 sVOUTPUT_SOURCES_EXTENSION p1460 V.text p1461 sVPAGINATION_PATTERNS p1462 (lp1463 g10 (g189 g190 (I0 V{name}{number}{extension} p1464 V{name}{number}{extension} p1465 tp1466 tp1467 Rp1468 asVSTATIC_EXCLUDE_SOURCES p1469 I01 sVJINJA_FILTERS p1470 (dp1471 sVARTICLE_SAVE_AS p1472 Vposts/{slug}/index.html p1473 sVYEAR_ARCHIVE_SAVE_AS p1474 g66 sVCSS_FILE p1475 Vmain.css p1476 sVAUTHOR_URL p1477 Vauthor/{slug}.html p1478 sVIGNORE_FILES p1479 (lp1480 V.#* p1481 asVSUMMARY_MAX_LENGTH p1482 I50 sVSLUG_SUBSTITUTIONS p1483 (tsVTHEME_STATIC_PATHS p1484 (lp1485 Vstatic p1486 asS'CATEGORY_FEED_RSS' p1487 Vfeeds/feed.rss.%s.xml p1488 sVTHEME_STATIC_DIR p1489 Vtheme p1490 sVLOAD_CONTENT_CACHE p1491 I01 sVDRAFT_LANG_SAVE_AS p1492 Vdrafts/{slug}-{lang}.html p1493 sS'FEED_ALL_RSS' p1494 Vfeeds/feed.rss.all.xml p1495 sVEXTRA_PATH_METADATA p1496 (dp1497 sVLOCALE p1498 (lp1499 g66 asVWRITE_SELECTED p1500 (lp1501 sVDELETE_OUTPUT_DIRECTORY p1502 I00 sVFEED_MAX_ITEMS p1503 g66 sVPATH p1504 V/srv/www/content p1505 sVPAGE_URL p1506 Vpages/{slug}/ p1507 sVSITENAME p1508 VWxcafé p1509 sVARTICLE_PERMALINK_STRUCTURE p1510 g66 sVARTICLE_URL p1511 Vposts/{slug}/ p1512 sVMONTH_ARCHIVE_SAVE_AS p1513 g66 sVDEFAULT_METADATA p1514 (tsVDEFAULT_CATEGORY p1515 Vmisc p1516 sVPLUGIN_PATHS p1517 (lp1518 sVPAGINATED_DIRECT_TEMPLATES p1519 (Vindex p1520 tp1521 sVPDF_STYLE_PATH p1522 g66 sVSTATIC_SAVE_AS p1523 g1347 sVTAG_SAVE_AS p1524 Vtag/{slug}.html p1525 sVPYGMENTS_RST_OPTIONS p1526 (dp1527 sVAUTHOR_FEED_ATOM p1528 Vfeeds/%s.atom.xml p1529 sVARTICLE_LANG_SAVE_AS p1530 g1343 sVPAGE_SAVE_AS p1531 Vpages/{slug}/index.html p1532 sVMD_EXTENSIONS p1533 (lp1534 Vcodehilite(linenums=False, guess_lang=True, noclasses=True, pygments_style=monokai) p1535 aVsmarty p1536 asVOUTPUT_PATH p1537 V/srv/www/output p1538 sS'FEED_ATOM' p1539 Vfeeds/feed.atom.xml p1540 sVDEFAULT_STATUS p1541 Vpublished p1542 ssbsVtitle p1543 VManettes : Hori vs. PDP p1544 sVslug p1545 Vhori-vs-pdp p1546 sVauthor p1547 g10 (g275 g12 Ntp1548 Rp1549 (dp1550 g16 VWxcafe p1551 sg18 Vwxcafe p1552 sg20 g1297 sbstp1553 tp1554 sV/srv/www/content/mutt-ou-le-client-email-le-meilleur-moins-mauvais.md p1555 (F1431623308.7018473 (V

Les clients mails ont une particularité en commun : ils sont tous\u000atrès mauvais. Cela pour nombre de raisons, mais la principale reste\u000aque leurs interfaces/raccourcis claviers ne sont pas efficaces pour une\u000autilisation a la UNIX
\u000aCependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est\u000ale relativement bien connu Outlook Express 2003 Mutt!
\u000aMutt est un client mail en ligne de commande, qui, comme le dit sa page\u000ad\u2019accueil, “just sucks less”. Dans les faits, mutt est assez\u000achiant a configurer mais particulièrement pratique a utiliser après.

\u000a

La configuration de mutt se fait dans le fichier .muttrc ou dans\u000a/etc/Muttrc, et il est courant d’utiliser offlineimap en\u000aconjonction avec celui ci, de façon a accéder aux mails même sans accès\u000ainternet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne\u000acrée pas de cache, ce qui empêche la consultation des emails sans\u000aconnexion internet.) La configuration d’offlineimap se fait dans~/.offlineimaprc ou dans rien d’autre en fait, c’est une config\u000apar user. Offlineimap est un petit logiciel en python qui synchronise un\u000adossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque\u000ajustement mutt accepte les dossiers au format Maildir. (De plus, cela va\u000atout a fait dans le sens de la libération des données en cela que vous\u000apossédez vos mails en local.)
\u000aBref, passons aux choses serieuses : le code. Déjà, installez\u000aofflineimap et ce script fait par moi, qui vous permet d’installer\u000amutt avec le patch sidebar, qui crée un listing des dossiers sur la\u000apartie gauche.
\u000aEnsuite, voyons pour la partie configuration :
\u000aMa configuration d’offlineimap :

\u000a
## Config file for offlineimap\u000a## Originally located in ~/.offlineimaprc\u000a## This should not be edited without creating a copy before\u000a## Created by Wxcafe (Clément Hertling)\u000a## Published under CC-BY-SA\u000a\u000a[general]\u000a# List of accounts to be synced, separated by a comma.\u000aaccounts = main\u000a\u000a[Account main]\u000a# Identifier for the local repository; e.g. the maildir to be synced via IMAP.\u000alocalrepository = main-local\u000a# Identifier for the remote repository; i.e. the actual IMAP, usually non-local.\u000aremoterepository = main-remote\u000a# Status cache. Default is plain, which eventually becomes huge and slow.\u000astatus_backend = sqlite              # le type de cache. (plain ou sqlite)\u000a\u000a[Repository main-local]\u000a# Currently, offlineimap only supports maildir and IMAP for local repositories.\u000atype = Maildir                        # le type de stockage (Maildir ou IMAP)\u000a# Where should the mail be placed?\u000alocalfolders = ~/Emails/                # le dossier dans lequel vous\u000a                                        # voulez que vos emails apparaissent\u000a\u000a[Repository main-remote]\u000a# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.\u000atype = IMAP\u000aremotehost = //placeholderhost//        # le serveur de votre messagerie\u000aremoteuser = //placeholderusername//    # votre nom d'utilisateur\u000aremotepass = //placeholderpassword//    # votre mot de passe\u000acert_fingerprint = //placeholdercert//  # le certificat du serveur (IMAPS only)\u000a
\u000a\u000a\u000a

Ça devrait être assez simple a lire, j’ai tout bien commenté :3
\u000aPuis ma config mutt :

\u000a
## Mutt MUA configuration file\u000a## This file should not be edited without creating a copy\u000a## File Created and edited by Wxcafe (Clément Hertling)\u000a## Published under CC-BY-SA\u000a\u000a# General config for reading (fetched via offlineimap)\u000a\u000aset mbox_type = Maildir\u000a# type de boite mail (voir dans offlineimap, mailbox par defaut)\u000a\u000aset folder = ~/Email/\u000a# dossier root mailbox/imap\u000a\u000aset spoolfile = +INBOX\u000a# dossier d'inbox\u000a\u000aset mbox = +'All Mail'\u000a# dossier ou archiver les emails\u000a\u000aset copy = yes\u000a# yes pour copier les messages dans les differents dossier, no pour...\u000a# enfin voila quoi.\u000a\u000aset header_cache = /.hcache/\u000a# dossier ou sont stockés les headers (pour le cache)\u000a\u000aset record = +Sent\u000a# dossier dans lequel sont stockés les messages envoyés\u000a\u000aset postponed = +Drafts\u000a# dossier dans lequel sont stockés les brouillons\u000a\u000amailboxes = +INBOX +Drafts +Sent +Trash  +All\u005c Mail \u000a# liste des dossiers qui vont apparaitre dans la colonne de gauche\u000a\u000a# General config for sending (using Mutt's native support)\u000a\u000aset smtp_pass = 'password_placeholder'\u000a# votre mot de passe\u000a\u000aset smtp_url = "smtp://username@whatev.org:465/"\u000a# l'url ou envoyer les emails\u000a\u000aset send_charset = "utf-8"\u000a# UTF8, NE PAS CHANGER\u000a\u000aset signature = ".sign"\u000a# vous pouvez mettre votre signature dans .sign\u000a\u000aset sig_on_top = yes\u000a# il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible \u000a# comme ca.\u000a\u000aset ssl_verify_host = no\u000a# mettez yes ici si votre serveur a un certificat configuré correctement\u000a\u000aset hostname = "wxcafe.net"\u000a# mettez l'adresse de votre serveur ici\u000a\u000a# Misc settings\u000a\u000aauto_view text/html\u000a# la façon de voir les emails par défaut.\u000a\u000aset date_format = "%y-%m-%d %T"\u000a# format de date d'envoi/de reception.\u000a\u000aset index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"\u000a# format de l'index (la présentation de l'interface)\u000a# voir http://www.mutt.org/doc/manual/manual-6.html#index_format\u000a\u000aset sort_alias = alias\u000aset reverse_alias = yes \u000aset alias_file = "$HOME/.mutt/aliases"\u000a# liste des alias noms/email. a créer et remplir vous même.\u000a# format : "alias short_name long_email_adress"\u000asource $alias_file\u000a\u000aset beep = no\u000a# ne pas biper. CE SON ME TUE T.T\u000a\u000aset tilde = yes\u000aset sleep_time = 0\u000a# ?\u000a\u000aset sidebar_visible = yes\u000aset sidebar_width = 15\u000a# parametres de la barre coté gauche\u000a\u000aset realname = "Clément Hertling (Wxcafé)"\u000aset from = "wxcafe@wxcafe.net"\u000aset use_from = yes\u000aset certificate_file = "$HOME/.mutt/cacert"\u000a# parametres d'envoi. mettez vos propres infos a la place des miennes...\u000a\u000aset edit_headers = yes\u000a# vous permet de vois les headers des mails. j'aime, donc je laisse.\u000a\u000a# Macros\u000a\u000a# le titre dit tout. index veut dire que la macro est active dans les menus,\u000a# pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les \u000a# deux\u000a# \u005cC represente la touche Control\u000a\u000abind index,pager \u005cCp sidebar-prev\u000a# Control+p -> remonter d'un dossier dans la sidebar\u000a\u000abind index,pager \u005cCn sidebar-next\u000a# Control+n -> descendre d'un dossier dans la sidebar\u000a\u000abind index,pager \u005cCo sidebar-open\u000a# Control+o -> ouvrir le dossier selectionné dans la sidebar\u000a\u000amacro index,pager d "=Trash" "Trash"\u000a# d supprime le message en cours\u000a\u000abind pager   previous-line\u000a# permet de monter d'une ligne avec la touche up, au lieu de changer de message.\u000a\u000abind pager   next-line\u000a# permet de descendre d'une ligne avec la touche down, au lieu de changer de \u000a# message\u000a\u000abind pager j next-line\u000abind pager k previous-line\u000a# raccourcis vim\u000a\u000a# PGP signing commands\u000a\u000aset pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"\u000aset pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"\u000aset pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"\u000aset pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"\u000aset pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"\u000aset pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"\u000aset pgp_encrypt_sign_command="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"\u000aset pgp_import_command="gpg --no-verbose --import -v %f"\u000aset pgp_export_command="gpg --no-verbose --export --armor %r"\u000aset pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"\u000aset pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r" \u000aset pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r" \u000aset pgp_autosign=yes\u000aset pgp_sign_as=0x********\u000a# remplacez 0x******** par votre identifiant PGP!!!!!\u000a\u000aset pgp_replyencrypt=no\u000aset pgp_timeout=7200\u000aset pgp_good_sign="^gpg: Good signature from"\u000a\u000a# si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis\u000a# PGP signing options\u000a\u000a# Palette for use with the Linux console.  Black background.\u000a\u000a# Schéma de couleur Rouge et Noir. Commentez si vous voulez le \u000a# défaut noir et blanc.\u000a# d'autres schémas sont trouvables sur google et autre.\u000a\u000acolor hdrdefault red black\u000acolor quoted brightblack black\u000acolor signature brightblack black\u000acolor attachment red black\u000acolor message brightwhite black\u000acolor error brightred black\u000acolor indicator black red\u000acolor status white black\u000acolor tree white black\u000acolor normal white black\u000acolor markers red black\u000acolor search white black\u000acolor tilde brightmagenta black\u000acolor index red black ~F\u000acolor index red black "~N|~O"\u000a
\u000a\u000a\u000a

Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt\u000a@ http://www.mutt.org/doc/manual/
\u000aJ’espère que cette configuration “toute faite” vous aidera a commencer\u000aa utiliser mutt. Il est tout de fois important de se souvenir\u000aqu’utiliser une configuration toute faire n’aide pas a comprendre un\u000aprogramme ou un système, et que cette façon de faire devrait être\u000aréservée a l’introduction ou a des situations ou il est absolument\u000anécessaire d’avoir rapidement une configuration fonctionnelle (c’est a\u000adire, dans le cas d’un client email, euh… jamais?). Je vous invite\u000adonc a relire les annotations dont sont parsemés les fichiers de\u000aconfiguration en question, et surtout a lire le manuel, a chercher sur\u000aBing Google Yahoo Seeks, et globalement \u000aa tenter de comprendre les configurations en question et a les améliorer!

p1556 (dp1557 Vdate p1558 g5 (S'\x07\xdd\x01\x02\x02\x0c\x00\x00\x00\x00' p1559 tp1560 Rp1561 sVcategory p1562 g10 (g11 g12 Ntp1563 Rp1564 (dp1565 g16 VTutoriel p1566 sg18 Vtutoriel p1567 sg20 g21 sbsVtitle p1568 VMutt ou le client email le meilleur moins mauvais p1569 sVslug p1570 Vmutt-ou-le-client-email-le-meilleur-moins-mauvais p1571 sVauthor p1572 g10 (g275 g12 Ntp1573 Rp1574 (dp1575 g16 VWxcafe p1576 sg18 Vwxcafe p1577 sg20 g21 sbstp1578 tp1579 sV/srv/www/content/sed.md p1580 (F1431623308.6378474 (V

sed est un outil Unix très largement utilisé et très pratique pour manipuler\u000ale texte (ce qui se montre relativement indispensable dans un environnement\u000aUnix, puisque ce système est assez porté sur le texte). Cependant, il assez peu\u000aconnu en détail, et la plupart du temps une seule fonction est utilisée : le\u000aremplacement de texte.
\u000aOr sed a bien plus de possibilités que ça, comme nous allons le voir.

\u000a

Tout d’abord, rappelons les bases : sed est un programme Unix de base, mais\u000aaussi un langage de manipulation de texte dérivé de ed, l’éditeur original.ed est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas\u000apersonnels et étaient utilisés avec des téléscripteurs, c’est a dire des\u000amachines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs\u000adits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un\u000acurseur et affichant plusieurs lignes. sed est donc une évolution de ed, le\u000as signifiant stream, sed est un éditeur de flux, prenant donc avantage du\u000aconcept Unixien de flux de données (voir Flux standards) pour éditer plus d’une ligne a la fois.\u000aEn pratique, sed est principalement utilisé sur des fichiers.

\u000a

sed a quelques options pratique, notamment -s qui permet d’empêcher\u000al’affichage systématique des lignes traitées, ou bien -i (pour GNU sed) qui\u000apermet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique\u000adu programme est son langage de manipulation de texte.

\u000a

ed, et donc sed, utilise un langage basé sur les séparations (en général des\u000a/). Ainsi, la commande de base dans sed est

\u000a
/[regex]/\u000a
\u000a\u000a\u000a

qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de \u000an’exécuter les commandes qui suivent que sur ces lignes.)

\u000a


\u000aLa commande sed la plus utilisée est bien entendu le s, qui s’utilise de\u000ala façon suivante :

\u000a
s/[old text]/[new text]/[options]\u000a
\u000a\u000a\u000a

qui se propose donc de remplacer (substitute) [old text] (qui peut être une\u000aregex) par [new text] (qui doit être un texte fixe, avec quelques\u000aexceptions), en appliquant [options], la plus connue des options étant g, \u000aqui permet d’appliquer la commande affectée a toutes les occurrences du texte\u000amatché sur la/les lignes concernée-s.
\u000aLes exceptions a la “fixité” de [new text] sont particulièrement\u000aintéressantes. En effet, sed utilise un langage de regex plutôt standard,\u000aexcepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par\u000a\u005c( et \u005c), et qui sont représentées dans le texte de remplacement par \u005c1 à\u000a\u005c9.

\u000a

Par exemple, la commande

\u000a
sed 's/\u005c(hello world\u005c) world/\u005c1/'\u000a
\u000a\u000a\u000a

sur le texte “hello world world” renverrait comme résultat

\u000a
hello world\u000a
\u000a\u000a\u000a

De la même façon, le symbole & dans le texte de remplacement représente le\u000atexte original. Ainsi, la commande

\u000a
sed 's/hello world/& world/'\u000a
\u000a\u000a\u000a

sur le texte “hello world” renverrait comme résultat

\u000a
hello world world\u000a
\u000a\u000a\u000a


\u000a

Une autre commande utile est p, qui sert a afficher le texte présent dans\u000al’espace courant :

\u000a
/[regex]/p\u000a
\u000a\u000a\u000a

sed stocke en effet la ligne sur laquelle il travaille dans un espace mémoire\u000adédié, que j’appelle l’espace courant (pattern space en anglais). La commandep affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit\u000ale pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le p affiche donc ce dernier.

\u000a

Un autre exemple de commande sont c, i et a, qui s’utilisent ainsi :

\u000a
c \u005c\u000a[text]\u000a
\u000a\u000a\u000a

De la même façon, pour le i :

\u000a
i \u005c\u000a[text]\u000a
\u000a\u000a\u000a

Et de même pour a.

\u000a

Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles\u000asont très proches. i sert a insérer du texte avant le pattern space. a\u000asert a insérer du texte après le pattern space, et enfin c sert a\u000aremplacer tout le pattern space. Les trois utilisent [text] comme\u000aremplacement ou insert.\u000aAttention, les insertions se font sur la ligne précédant ou suivant le pattern\u000aspace, et non sur la ligne en question.

\u000a

Enfin, dernière commande ne fonctionnant que ligne par ligne, d :\u000a /[regex]/d\u000ad (delete) supprime les contenus du pattern space.

\u000a

sed est un outil puissant, mais complexe. Dans un prochain article, je\u000aparlerai des commandes multilignes et des labels.

p1581 (dp1582 Vdate p1583 g5 (S'\x07\xdd\x08\x12\x169\x00\x00\x00\x00' p1584 tp1585 Rp1586 sVcategory p1587 g10 (g11 g12 Ntp1588 Rp1589 (dp1590 g16 VTutoriel p1591 sg18 Vtutoriel p1592 sg20 g21 sbsVtitle p1593 VSed Basics p1594 sVslug p1595 Vsed-basics p1596 sVauthor p1597 g10 (g275 g12 Ntp1598 Rp1599 (dp1600 g16 VWxcafe p1601 sg18 Vwxcafe p1602 sg20 g21 sbstp1603 tp1604 sV/srv/www/content/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd.md p1605 (F1431623308.6738474 (V

This is subject to debate, and as most of the actors in this field are\u000anot French-speaker, there is an English version of this text here

\u000a

Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain\u000atemps, maintenant, et depuis un certain temps je remarque des\u000achangements malvenus. Bien entendu, au début, je n’avais pas les\u000aconnaissances nécessaires pour comprendre ne serait-ce que ces\u000amodifications existaient. Et puis certaines sont arrivées avant que je\u000an’ai même idée que quelque chose dans mon système d’exploitation avait\u000acette fonction la. Par exemple, udev, ou policykit/consolekit/. A\u000al’époque, je n’avais aucune idée de la façon dont les disques étaient\u000amontés sur mon système. Le premier système non-Windows que j’ai utilisé\u000afut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je\u000acherche a démonter le système pour comprendre comment il fonctionnait en\u000aprofondeur. Cependant, avec le temps, les connaissances s’accumulant et\u000amon niveau de compréhension du système s’améliorant, j’ai commencé a\u000aremarquer que certain bouts de l’OS ne collaient pas exactement avec les\u000aautres. Bien sur, je ne saurais dire si cette réalisation s’est faite a\u000acause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma\u000acompréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne\u000as\u2019adaptant pas au reste du système se faisaient de plus en plus visible.\u000aEt puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai\u000achoisi de passer a Archlinux. C’était avant le passage a systemd. Ce\u000asystème me convenait bien. Si je n’installais pas Gnome, ce que je ne\u000acomptais pas faire, il ne me forçait pas a installer un *kit\u000aquelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins\u000aenvahissant de ceux la.

\u000a

Mais Archlinux est passé a systemd. Attention hein, je ne critique ici\u000ani systemd, ni udev, ni même les kit, et surtout pas Archlinux. Les\u000apremiers sont probablement très efficaces dans leur domaine, et le\u000asecond n’a pas vraiment eu le choix, rapport a la philosophie de la\u000adistribution d’avoir au plus vite les dernières versions de tout.\u000aCependant, systemd, tout comme udev et les kits (bien que ce ne soient\u000apas les seuls a faire ça…) ont un problème très précis, qui n’importe\u000apas a tout le monde, mais qui est très gênant pour ceux a qui il\u000aimporte, et ce problème est que ces systèmes ne respectent absolument\u000apas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en\u000aces 9 principes :

\u000a
    \u000a
  1. Ce qui est petit est beau
  2. \u000a
  3. Faites en sorte que chaque programme fasse une chose, bien.
  4. \u000a
  5. Faites un prototype aussi vite que possible
  6. \u000a
  7. Choisissez la portabilité plutôt que l’efficacité
  8. \u000a
  9. Stockez les données dans des fichiers textes.
  10. \u000a
  11. Utilisez ce qui existe déjà a votre avantage. [1]
  12. \u000a
  13. Utilisez des scripts shells pour faciliter la portabilité et la\u000a réutilisation.
  14. \u000a
  15. Évitez les UI qui “capturent” l’utilisateur.
  16. \u000a
  17. Faites de chaque programme un filtre.
  18. \u000a
\u000a

Alors bien entendu, un système d’exploitation est fait pour évoluer, et\u000aon pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas\u000aexactement la façon dont l’informatique fonctionne. Effectivement, les\u000astandards, les systèmes d’exploitation, les logiciels, tout doit évoluer\u000a- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est\u000apas d’UNIX que nous parlons ici. C’est de la philosophie UNIX. Et\u000acelle-ci n’a pas fait son temps, elle a fait ses preuves. La\u000aphilosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans\u000ade tests derrière elle, et fonctionne aussi bien qu’au premier jour.
\u000aLa philosophie UNIX est aussi et surtout une garantie d’utilisabilité\u000aet de simplicité pour les administrateurs systèmes, pour les\u000adéveloppeurs, bref pour tous ceux qui font de l’informatiquesérieusement (je ne dis pas que les autres métiers de l’informatique\u000ane sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce\u000asont ceux qui sont les plus proches du système).

\u000a

Tous OS se doit d’avoir un système standardisé pour faire communiquer\u000ales programmes entre eux. UNIX a un système de pipes, des sortes de\u000afichiers spéciaux permettant d’échanger des informations. C’est\u000aefficace, ça respecte le “tout est fichier”, c’est standard, c’est\u000asimple a comprendre, bref, ça fonctionne parfaitement. Dbus vient\u000aremplacer ça, avec une interface qui n’est explicitement pas faite pour\u000aêtre utilisée a la ligne de commande mais a l’aide d’APIs, et un\u000aprogramme monolithique qui effectue sa tache d’une façon complètement\u000aobscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon\u000aefficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus\u000a“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’estbeaucoup moins utilisable pour l’utilisateur final. C’est\u000ahorriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus\u000alire facilement les échanges entre programmes. C’est peu pratique, en\u000afin de compte. Et ça ne respecte pas du tout la philosophie UNIX.
\u000aSystemd prend le même parti de créer une interface unifiée, accessible\u000avia des appels a des APIs uniquement, complètement obscure, extrêmement\u000aabstraite, bien entendu monolithique, et très peu ouverte a la\u000amodification par l’utilisateur final. Alors oui, il parait que ça\u000aaugmente la vitesse de boot. Eh bien, au risque d’en choquer quelques\u000auns, je préfère avoir un système qui boote légèrement plus lentement\u000aet que je puisse modifier facilement, et qui soit ouvert, compréhensible\u000aet distribué. C’est presque comme si les projets freedesktop.org avaient\u000apour but de remplacer la base UNIX de linux en créant un système\u000aconcurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les\u000asystèmes basiques d’UNIX.

\u000a

Le problème est qu’il est facilement visible que la direction prise par\u000ala communauté Linux n’est pas celle du retour sur les systèmes UNIX ni\u000acelle du développement de solutions respectant la philosophie UNIX, mais\u000aremises au gout du jour (?), mais est bien d’accepter et de pousser les\u000achangements apportés par les projets freedesktop.org directement dans le\u000ac\u0153ur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font\u000apartie de nombreux développeurs de ces projets), a déjà adopté tous ces\u000achangements (archlinux aussi, mais pour d’autres raisons…), et on peut\u000acompter sur le fait que les autres distributions l’adopteront un jour ou\u000al’autre.

\u000a

Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces\u000asystèmes, tout du moins exprimé les raisons qui font qu’ils me\u000adéplaisent, on pourrait penser qu’il suffit de passer a une distribution\u000an’incluant pas systemd, voire a une distribution n’incluant pas du tout\u000ade contenus freedesktop.org, et de vivre avec le fait de ne pas être sur\u000aarchlinux. Cependant, avec un peu de réflexion, on voit que si des\u000adistributions comme archlinux et Fedora ont adopté systemd (et\u000aqu’OpenSUSE est en train de l\u2019intégrer), il est probable que cela\u000adevienne un standard au fil des années, et que seuls survivent systemd\u000aet upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera\u000aprobablement pas (je les vois mal revenir en arrière sur ce point.)\u000aToujours est-il que l’init héritée du System V semble condamnée a mourir\u000asous Linux. Il pourrait être judicieux de passer sous debian squeeze,\u000aqui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne\u000ala recevra probablement que dans 2/3 ans. Cependant, cette période est\u000atoujours trop courte, et met sur mon système d’exploitation une date\u000ad’expiration, chose qui ne me plait que moyennement. Non, la solution\u000aest de passer sous un système autre, qui ait son propre système d’init\u000a(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options\u000aprincipales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas\u000avraiment un choix, vu le peu de programmes qu’il permet de faire\u000afonctionner et le fait qu’il ne soit disponible que sur i386, ce qui\u000an’est pas vraiment avantageux au vu de mon système en x86_64. Haiku\u000an’est pas un choix non plus, puisque le but est de rester dans une\u000aoptique UNIX.

\u000a

OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai\u000aen théorie aucun problème sur cet OS, sauf que certains choix de design\u000ane correspondent pas du tout a l’idée que j’ai d’un OS. En effet,\u000aOpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de\u000ases outils, avec des paquets modifiés pour les rendre plus simples a\u000autiliser (fichiers de configuration fournis par défaut, par exemple, et\u000aautres patchs “release-only”), et une tendance a faire des scripts et\u000ades outils installés par défaut pour tout et n’importe quoi. Bref, cela\u000an’est pas le sujet. Il convient aussi de voir qu’avec la récente\u000aacquisition de Sun par Oracle, il est possible que le projet OpenSolaris\u000an’ait pas de très beaux jours devant lui (la page d\u2019accueil du\u000aprojet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)

\u000a

Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD\u000aou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est\u000asimple : pour aucune raison particulière. OpenBSD et NetBSD ont pour\u000aréputation d’être orientées sécurité, et d’après ce que j’ai pu en voir\u000aDFBSD ressemble aussi au système de l’assistance a l’user a outrance\u000adécris plus haut. Mais la vérité est que je n’ai pas fait suffisamment\u000ade recherches et que FreeBSD ne va me voir arriver que par hasard, parce\u000aqu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a\u000autiliser, plus le fait que le système de ports me convient bien (j’aime\u000apouvoir configurer mes logiciels de façon assez profonde.)

\u000a

Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien\u000aentendu, je continuerai a utiliser Linux, et je ne peux qu\u2019espérer que\u000ales systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins\u000an’apparaissent jamais chez certaines distributions, créant de ce fait un\u000achoix pour les utilisateurs.
\u000a[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*

p1606 (dp1607 Vdate p1608 g5 (S'\x07\xdd\x02\x04\x11)\x00\x00\x00\x00' p1609 tp1610 Rp1611 sVcategory p1612 g10 (g11 g12 Ntp1613 Rp1614 (dp1615 g16 VRanting p1616 sg18 Vranting p1617 sg20 g21 sbsVtitle p1618 VPourquoi je vais quitter linux pour passer a FreeBSD. p1619 sVslug p1620 Vpourquoi-je-vais-quitter-linux-pour-passer-a-freebsd p1621 sVauthor p1622 g10 (g275 g12 Ntp1623 Rp1624 (dp1625 g16 VWxcafe p1626 sg18 Vwxcafe p1627 sg20 g21 sbstp1628 tp1629 sV/srv/www/content/introduction-a-bash-en-tant-que-language-de-programmation.md p1630 (F1431623308.7698474 (V

L\u2019interpréteur de commandes bash (Bourne Again SHell)\u000aest possiblement le shell le plus connu, notamment grâce a son\u000aintégration en tant que shell par défaut dans les distributions Linux\u000ales plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva -\u000aMageia, etc…).

\u000a

Cependant, il n’est souvent connu qu’en tant qu\u2019interpréteur de\u000acommande. Alors qu’en réalité, le bash est un langage de programmation\u000a(presque) complet! Ainsi, il intègre les structures de contrôle\u000ahabituelles ( pour mémoire, les structures de contrôle comprennent les\u000aconditions (les ifs), les boucles (les while), et les choix (les case),\u000aentre autres.), et est donc ce que l’on pourrait appeler un langage de\u000ascript, interprété, de la même façon que python, a la difference près\u000aqu’il contient un prompt (un système d’entrée de commande interactif)\u000abien plus complet et développé que python.

\u000a

Cependant, les programmes en bash ne sont executables que dans un\u000aenvironnement de type UNIX, et donc pas sous Windows (cygwin\u000a(cygwin.com) propose ceci dit un système permettant d’utiliser bash sous\u000awindows. Il faut malgré tout convenir que cet environnement est bien\u000aplus compliqué a manipuler, et globalement ne permet pas d’acceder a des\u000aportages de qualité satisfaisante.)

\u000a

Ainsi, il est possible de créer des fichiers .sh, contenant des\u000ainstructions bash mises a la suite (de la même façon qu’un script BATCH\u000aWindows .bat), et faisant appel autant aux commandes internes de bash,\u000aaussi bien que les commandes externes mises en place par les programmes\u000ainstallés sur le système, exactement comme dans une invite de commande.\u000aAinsi, pour appeller firefox, la commande ‘firefox’ lancera le petit\u000apanda roux directement dans la boite magique, tandis qu’un if\u000a[condition] suivi d’un then (quelque chose) lancera le fameux quelque\u000achose suscité si la condition est vérifiée. Un peu comme en C, quoi.

\u000a

De cette façon, et avec quelques informations et connaissances, il est\u000afacile de comprendre le fonctionnement de la programmation en bash.\u000aQuelques exemples commentés:

\u000a
#!/bin/bash \u000a# La ligne du dessus est très importante, c'est elle qui dit a bash quel doit être \u000a# l'interpreteur des commandes écrites dans ce script. Ici, on dit a bash d'interpréter \u000a# lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire \u000a# executer du python, par exemple, en mettant #!/usr/bin/python a la place.\u000aecho "this is a test of bash as a simple script manager" # echo est une commande d'affichage de message.\u000aecho "what's your name, user?" \u000aread your_name # la commande read permet de demander a l'utilisateur de donner une \u000a# information, stockée dans la variable en paramètre. \u000aecho $your_name "is your name" # echo permet aussi d'afficher la valeur de variables. \u000a# Ici, on renvoie la variable remplie précédemment, suivie d'un message. \u000aexit # cet appel a exit n'est pas obligatoire, mais donne un aspect plus \u000a# propre au code. Il ne quittera pas la session de terminal, cependant.\u000a
\u000a\u000a\u000a

Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite\u000ad’être clair quand aux capacités et a la simplicité du bash en tant que\u000alanguage de programmation. Alors en effet, nous n’avons ici absolument\u000apas utilisé les capacités de bash en lui même, et n’avons fait que le\u000arenvoyer a des programmes externes (sauf read, il est vrai). Voyons\u000amaintenant la syntaxe de bash quand il s’agit d’utiliser les structures\u000ade contrôle:

\u000a
#!/bin/bash \u000aecho "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?" \u000aread host_name \u000aif [ $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. \u000athen echo "you told the truth!" \u000afi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash. \u000aif [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. \u000athen echo "you lied!" \u000afi \u000aexit\u000a
\u000a\u000a\u000a

Voila un petit programme permettant d’apprendre la syntaxe du if en\u000abash. comme vous pouvez le voir, le language est plutôt lite, et la\u000astructure if n’est pas très difficile a prendre en main.

\u000a

Passons maintenant au while:

\u000a
#!/bin/bash\u000aecho "what is your name?"\u000aread name\u000awhile [ 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.\u000ado echo "i love" $name\u000adone\u000aexit\u000a
\u000a\u000a\u000a

Ce petit programme permet d’observer les bases de while (qui est la\u000aboucle de base en bash).

\u000a

Le troisième opérateur de bash est case. Voyons:

\u000a
#!/bin/bash\u000aecho "please enter a number between one and five"\u000aread number\u000acase $number in \u000a1)\u000aecho "the choosen number was one"\u000a;;\u000a2)\u000aecho "the choosen number was two"\u000a;;\u000a3)\u000aecho "the choosen number was three"\u000a;;\u000a4)\u000aecho "the choosen number was four"\u000a;;\u000a5)\u000aecho "the choosen number was five"\u000a;;\u000a*)\u000aecho "this number is not correct"\u000a;; \u000aesac\u000aexit\u000a
\u000a\u000a\u000a

case est un opérateur plus complexe a utiliser a bon escient, et sert a\u000afaire des ifs multiples sans avoir a taper des dizaines de lignes de\u000acode.
\u000a(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre\u000aque le code vérifie chacune des conditions : le 1) est validé si la\u000avaleur de \u005c$number est 1, le 2) est validé si cette valeur est 2, etc..\u000ale *) désigne toutes les valeurs, et est donc validé si aucune autre\u000avaleur n’a précédemment acceptée.

\u000a

Quelques notions manquent ici:
\u000a- les nombres aléatoires sont générés par un appel a la variable\u000a\u005c$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a\u000a16 bits donc). il est possible de faire des invocations a des nombres\u000aaléatoires plus grands, mais les méthodes permettant de faire cela sont\u000aplus complexes, et je ne les aborderai donc pas ici.
\u000a- comme vous avez pu le constater, les variables sont désignées en tant\u000aque telles par l’utilisation d’un symbole \u005c$ au début de leur nom.\u000aAinsi, echo number renverra “number”, tandis que echo \u005c$number renverra\u000ale résultat de la variable \u005c$number.
\u000aêtre utilisées dans un programme bash.
\u000a- comme vous avez pu le constater, les commandes doivent tenir en\u000athéorie en une ligne. Cependant, le caractère \u005c permet de retourner a\u000ala ligne en faisant considérer a bash qu’il s’agit de la même ligne.

\u000a

Globalement, il faut admettre que bash n’a pas vocation a être un\u000alangage de programmation extrêmement développé. Sans framework\u000agraphique, avec peu de manières d’utiliser de grandes variables, ou\u000aencore une gestion de la mémoire risible, bash n’a rien d’un langage de\u000adéveloppement professionnel.
\u000aCependant, le simple fait qu’il soit considéré comme un langage de\u000aprogrammation a part entière font de lui un langage de script d’une\u000apuissance incontestable, et sa simplicité et sa grande popularité font\u000ade lui un langage de choix pour apprendre la programmation simplement et\u000asans trop se prendre la tête.

\u000a

J’espère que cet article aura été utile a certain-e-s, et je vous\u000asouhaite bonne chance dans votre découverte de la programmation (n’allez\u000apas voir ceux qui font de l’orienté objet, c’est des méchants :3)

p1631 (dp1632 Vdate p1633 g5 (S'\x07\xdc\t\x08\x12\x0f\x00\x00\x00\x00' p1634 tp1635 Rp1636 sVcategory p1637 g10 (g11 g12 Ntp1638 Rp1639 (dp1640 g16 VProgrammation p1641 sg18 Vprogrammation p1642 sg20 g21 sbsVtitle p1643 VIntroduction a bash en tant que language de programmation. p1644 sVslug p1645 Vintroduction-a-bash-en-tant-que-language-de-programmation p1646 sVauthor p1647 g10 (g275 g12 Ntp1648 Rp1649 (dp1650 g16 VWxcafe p1651 sg18 Vwxcafe p1652 sg20 g21 sbstp1653 tp1654 sV/srv/www/content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md p1655 (F1431623308.7538474 (V

Aujourd’hui, et depuis 1901 (j’ai révisé mon histoire récemment), il\u000aexiste une loi dite de séparation des églises et de l’état, qui consiste\u000aa faire en sorte que l’état n’ait rien a voir avec les differentes\u000aéglises, pour de sombres histoires d’indépendance et de laïcité.\u000a(principes qui sont aujourd’hui en voie de disparition, mais ce n’est\u000apas le propos qui nous occupe ici). Cela dit, cette bonne idée\u000apolitique, si elle a évité a ses auteurs de nombreux tracas, et leur a\u000asurement permis de conserver une tête en état de fonctionnement bien\u000areliée a leur colonne vertébrale, ne vous interesse que moyennement, et\u000avous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer\u000a(quel mot horrible…) sur twitter?

\u000a

Ça tombe bien, vous abordez justement le sujet véritable de cet article\u000a(non, mon blog n’est pas devenu un histoblog, désolé aux déçus…), a savoir \u000ala centralisation qui se met progressivement en place sur internet depuis\u000aquelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces\u000aacteurs du web (et pas que, pour certains…) ont commencé a prendre\u000apour manie de centraliser vos données : pour prendre un exemple simple,\u000asi vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails\u000apour accorder la publicité, dites adieu a votre vie privée), vous avez\u000aun compte Google Talk, probablement aussi un Google+.

\u000a

L’outil le plus pratique aujourd’hui pour aggreger des flux RSS est\u000aGoogle Reader, et vous l’utilisez aussi probablement. Votre téléphone\u000aest un android? Ah, un Nexus? Vous avez donc toutes les applications\u000agoogle installées, et Chrome mobile comme navigateur par défaut, qui est\u000asynchronisé avec la version qui tourne sur votre PC (via les serveurs de\u000aGoogle, bien sur). \u000aDepuis peu, les recherches sur le moteur de recherche\u000asont elles aussi ajoutées a votre profil, enregistrées a jamais par\u000aGoogle (qui n’est pas touchée, en tant que société américaine, par la\u000a“loi des 10 ans” francaise.). Vous commencez a voir le truc? Non, ne\u000ajetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone\u000aayant été perdu a cause de cet article) J’ai pris ici comme exemple\u000aGoogle, parce que c’est celui qui propose le plus de services, mais\u000aApple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec\u000aWP8 et Skydrive.

\u000a

Twitter et Facebook n’ont de rôle dans ce sujet qu’en ce que vous leur \u000afournissez des informations dont ils s’empressent de devenir seuls \u000apropriétaires (cf les Conditions d’Utilisation de ces deux services), \u000apuis de les revendre a des annonceurs faisant de la publicité\u000aciblée. Le problème est simple a apprehender, vous ne voulez pas que\u000al’un de ces services connaisse trop de choses sur vous (et ils recoupent\u000atrès bien les informations venant de sources differentes), car il est \u000aévident qu’ils les vendent a des entreprises peu scrupuleuses quand \u000aa leurs engagements de confidentialité, quand a leurs securité \u000aaussi; mais surtout parce que depuis le 11 Septembre 2001 et le \u000aPatriot Act, toute entreprise américaine doitfournir toutes ses \u000ainformations au gouvernement américain sans aucune intervention d’un \u000ajuge, ou de quelque institution de controle que ce soit.

\u000a

Ce qui est, comme vous pouvez le comprendre, relativement\u000aproblématique. (pour ceux qui a ce point se disent “je n’ai rien a\u000acacher, donc je m’en fous si le gouvernement américain sait tout de\u000amoi”, je vous conseille d’aller lire cet article de Jean Marc\u000aManach, plein de bon sens…) Pour éviter cela, vous avez plusieurs\u000apossibilités: utiliser des services concurrents pour tout (Facebook\u000aMail, Skydrive, Twitter et Google Reader par exemple), tout en vous\u000asouvenant que comme ces entreprises sont toutes américaines, le\u000agouvenrnement américain détient tout de même vos informations, et que ca\u000alui prendra juste un peu plus de temps.

\u000a

Vous pouvez aussi n’utiliser que des entreprises francaises, \u000amais cela ne regle que le problème du Patriot Act, et pas celui de \u000ala revente de vos données. Et puis essayez de trouver un service équivalent \u000aa Google Reader et fourni par une entreprise française, on en reparlera.\u000aNon, la véritable alternative, c’est d’héberger vos services vous \u000amême, d’avoir votre propre serveur sur lequel vous possedez le plus \u000ade services possibles, et d’utiliser des concurents ou des services \u000alibres au maximum pour les autres, ceux qui ne sont pas distribuables \u000a(par exemple, les cartes sont difficiles a mettre en commun, \u000aor plusieurs alternatives existent: Google Maps, <troll>Apple \u000aMaps</troll>, Bing Maps, OpenStreetMaps, etc…).\u000aBeaucoup de ces services sont cependant très facilement\u000adécentralisables, surement parce qu’ils ont a la base étés conçus comme\u000ades services décentralisés. Ainsi les emails, le web, le chat (via XMPP)\u000apar exemple sont basés sur un système décentralisé.

\u000a

De plus, votre serveur peut vous servir a beaucoup d’autres des \u000achoses que vous feriez habituellement sur votre ordinateur \u000apersonnel: conserver une présence sur IRC, compiler du code, faire \u000adu rendu vidéo, etc… En bref, un serveur peut vous servir \u000aa effectuer toutes les opérations que vous effectuez sur votre \u000aordinateur sans les inconvénients de la consommation éléctrique \u000ani du bruit, mais vous permet aussi de ne dépendre aucunement\u000ad’une entreprise américaine, et cependant de disposer de tous les\u000aservices utiles offerts par ces dernières.

\u000a

Un serveur peut de plus vous permettre de controller parfaitement \u000atous ces services, sans aucune limitation d’aucune sorte, \u000avoire de vous créer une page web. Bien entendu, il est bien plus \u000autile d’avoir un serveur si vous avez aussi un nom de domaine.\u000aHeureusement, ils sont peu chers et souvent fournis avec le serveur.

\u000a

Dans de prochains articles, je vous expliquerai comment louer puis\u000aconfigurer votre serveur pour qu’il serve de serveur mail (IMAP/SMTP),\u000aweb, base de données, et proxy. Cela dit, comme c’est un serveur sous\u000alinux, vous pouvez l’utiliser pour a peu près n’importe quoi.
\u000aVoila, a bientôt!

p1656 (dp1657 Vdate p1658 g5 (S'\x07\xdc\x0c\r\x03\x08\x00\x00\x00\x00' p1659 tp1660 Rp1661 sVcategory p1662 g10 (g11 g12 Ntp1663 Rp1664 (dp1665 g16 VRanting p1666 sg18 Vranting p1667 sg20 g21 sbsVtitle p1668 VLa séparation des églises et de l'état, une idée qu'elle est bonne? p1669 sVslug p1670 Vla-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne p1671 sVauthor p1672 g10 (g275 g12 Ntp1673 Rp1674 (dp1675 g16 VWxcafe p1676 sg18 Vwxcafe p1677 sg20 g21 sbstp1678 tp1679 sV/srv/www/content/ssl.md p1680 (F1440203881.5375795 (V

Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie \u000aMarlinspike suivante: More Tricks for Defeating SSL,\u000aprésentée a la DefCon 17 (en 2011), et la lecture du billet suivant: \u000aA Critique of Lavabit, \u000ace qui peut avoir l’effet de rendre légèrement parano. Si vous considérez que \u000ac’est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès\u000aa présent dire coucou aux différentes personnes qui écoutent votre connection)

\u000a

Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous\u000aconnecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être\u000aremarqué quelque chose récemment : il se trouve que le certificat qui permet de\u000adesservir ce site a changé.

\u000a

Cela fait suite aux évènements évoqués dans le Disclaimer, mais aussi a des\u000adoigts sortis d’un endroit particulier du corps de l’admin/auteur de ce “blog”,\u000aqui a pris enfin les 5 minutes nécessaires a la compréhension superficielle\u000adu fonctionnement de SSL, et les 10 nécessaires a la mise en place d’un système\u000afonctionnel utilisant cette compréhension récemment acquise.

\u000a

Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut\u000aêtre (ou pas, mais bon, je vais expliquer de toute façon). Et bien c’est très\u000asimple : il existait auparavant un certificat pour wxcafe.net, un pour\u000apaste.wxcafe.net, un pour mail.wxcafe.net, etc… Bref, un certificat\u000adifférent pour chaque sous-domaine.

\u000a

Il s’avère que c’est a la fois très peu pratique a utiliser (les utilisateurs\u000adoivent ajouter chaque certificat a leur navigateur séparément, chaque \u000achangement de sous-domaine conduit a un message d’erreur, etc) et pas plus\u000asécurisé que d’avoir un seul certificat wildcard. J’ai donc généré un certificat\u000apour *.wxcafe.net hier, et il sera dorénavant utilisé pour tous les\u000asous-domaine de wxcafe.net; et un certificat pour wxcafe.net, qui ne matche\u000apas *.wxcafe.net, et qui sera donc utilisé… bah pour wxcafe.net.

\u000a

Il serait préférable de faire des redirections automatiques des adresses http\u000avers les adresses https, cependant, étant donné que le certificat est\u000aself-signed, il me semble préférable que l’arrivée sur le site ne commence pas\u000apar une page firefox disant “Something’s Wrong!”, et ces redirections ne seront\u000adonc pas mises en place.

\u000a

De plus, après la lecture de l’article de blog sur Lavabit dont le lien est plus\u000ahaut, il semble intéressant (et assez important) de faire en sorte que le\u000aserveur utilise en priorité (et si possible, uniquement) des ciphers supportant\u000aPFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves \u000ade ce même algorithme). Cela permet de faire en sorte que toutes les \u000acommunications avec ce serveur soient future-proof, c’est a dire que, même si \u000aquelqu’un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les \u000acommunications passées.

\u000a

Bon, maintenant que les explications basiques sont faites, voyons\u000al’implémentation :
\u000aPour générer la clé, tout d’abord, il convient d’utiliser les commandes\u000asuivantes:

\u000a
sudo openssl genrsa -out example.key 4096\u000a# nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation\u000asudo openssl req -new -key example.key -out example.csr\u000a# OpenSSL va ici vous demander de nombreuses informations, "Common Name" devant contenir le FQDN\u000asudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt\u000a# enfin, nous générons la clé, d'une durée de vie de 3 ans\u000a
\u000a\u000a\u000a

Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser\u000a*.example.com comme common name.\u000aUne fois la clé générée, il faut dire aux différents services de l’utiliser, et\u000ade n’utiliser que des ciphers PFS. La méthode dépend donc du service.\u000aJe vais lister ici les methodes pour quelques services que j’utilise :

\u000a

apache :

\u000a
# /etc/apache2/mods_enabled/ssl.conf\u000a# [...]\u000aSSLProtocol all -SSLv2 -SSLv3\u000aSSLHonorCipherOrder on\u000aSSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \u005c\u000a  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \u005c\u000a  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"\u000a# [...]\u000a# /etc/apache2/sites-enabled/default-ssl\u000a# [...]\u000aSSLEngine on\u000aSSLCertificateFile /etc/certs/example.com.crt\u000aSSLCertificateKeyFile /etc/certs/example.com.key\u000a# [...]\u000a
\u000a\u000a\u000a

nginx :

\u000a
# /etc/nginx/nginx.conf \u000a# [...]\u000assl_protocols TLSv1 TLSv1.1 TLSv1.2;\u000assl_prefer_server_ciphers on;\u000assl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \u005c\u000a  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \u005c\u000a  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";\u000a# [...]\u000a# /etc/nginx/sites-enabled/default-ssl\u000a# [...]\u000assl on;\u000assl_certificate /etc/certs/example.com.crt\u000assl_certificate_key /etc/certs/example.com.key\u000a# [...]\u000a
\u000a\u000a\u000a

prosody (jabber) :

\u000a
# tout d'abord, lancez la commande suivante :\u000asudo openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048\u000a# ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :\u000assl = {\u000a  dhparam = "/etc/prosody/certs/dh-2048.pem";\u000a  key = "/etc/certs/example.com.key";\u000a  certificate = "/etc/certs/example.com.crt";\u000a}\u000a# la cipher suite de prosody utilise par défaut EDH et EECDH\u000a
\u000a\u000a\u000a

postfix (email) :

\u000a
# /etc/postfix/main.cf\u000a# [...]\u000asmtpd_tls_cert_file = /etc/certs/example.com.crt\u000asmtpd_tls_key_file = /etc/certs/example.com.key\u000atls_preempt_cipherlist = yes\u000asmtpd_tls_eecdh_grade = strong\u000asmtdp_tls_mandatory_ciphers = high\u000asmtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS\u000asmtpd_tls_security_level = encrypt\u000asmtpd_tls_mandatory_protocols = !SSLv2, !SSLv3\u000asmtpd_use_tls = yes\u000a# [...]\u000a
\u000a\u000a\u000a

dovecot (imap) :

\u000a
# /etc/dovecot/dovecot.conf \u000a# [...]\u000assl_cert = </etc/certs/example.com.crt\u000assl_key = </etc/certs/example.com.key\u000assl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL\u000a
\u000a\u000a\u000a

Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter\u000aau manuel approprié.

\u000a

Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le\u000adisclaimer, et tant qu’a faire la conférence du même hacker SSL and the future\u000aof Authenticity qui parle de son\u000aimplémentation d’une technologie “remplaçant” le système de CAs qui existe\u000aactuellement.

p1681 (dp1682 Vdate p1683 g5 (S'\x07\xde\x05\x1e\x08\x19\x00\x00\x00\x00' p1684 tp1685 Rp1686 sVcategory p1687 g10 (g11 g12 Ntp1688 Rp1689 (dp1690 g16 VNote p1691 sg18 Vnote p1692 sg20 g338 sbsVtitle p1693 VSSL ou la sécurité sur l'internet p1694 sVslug p1695 VSSL-ou-la-securite-sur-internet p1696 sVauthor p1697 g10 (g275 g12 Ntp1698 Rp1699 (dp1700 g16 VWxcafe p1701 sg18 Vwxcafe p1702 sg20 g338 sbstp1703 tp1704 sV/srv/www/content/le-quenya-episode-o.md p1705 (F1431623308.7658474 (V

Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu\u2019à il y\u000aa peu…), le nom que donnait Tolkien au dialecte principal parlé par\u000ales Elfes dans les différentes \u0153uvres de l’auteur, dont Le Seigneur des\u000aAnneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte\u000aavant de commencer cet article que l’une des \u0153uvres les plus\u000aimpressionnantes de Tolkien, si ce n’est la plus grande, est\u000al’impressionnant travail linguistique passé sur les différentes langues\u000aprésentes dans son \u0153uvre littéraire : L’elfique, qui est donc le quenya,\u000ala langue des nains, qui est appelé le khazalide, etc.

\u000a

En effet, a contrario des “langues” développées dans d’autres \u0153uvres littéraires\u000atelles Eragon ou Harry Potter, où l’auteur-e se contente de lier un mot\u000ade français (ou d’anglais) a un mot de sa “langue”, les langues de\u000al’oeuvre de Tolkien sont des langues complètes. Elles possèdent des\u000aracines logiques, des systèmes de grammaire et de conjugaison propres,\u000aune logique inhérente dans la prononciation ou l’orthographe, et ainsi\u000ade suite.

\u000a

Un véritable rêve de linguiste donc, puisque ces langues sont\u000apratiquement entièrement documentées par Tolkien lui même (voir\u000al’appendice E du SdA, particulièrement instructif a ce sujet.)

\u000a

J’ai donc décidé d’apprendre le Quenya récemment, et je vais donc poster\u000aici des résumés des cours que je suis ( disponibles ici , une\u000atraduction en français est disponible la en pdf ), et des infos ici\u000atoutes les deux semaines.

\u000a

Si ce sujet vous intéresse, le compte twitter @Quenya101 poste\u000arégulièrement des informations sur le sujet, et pour plus d’infos sur le\u000asujet, vous pouvez en trouver par ici.

\u000a

Et en tant que première leçon, vous pouvez apprendre que ce mot que vous\u000aavez prononcé comme le Kenya tout le long de cet article se prononce en\u000afait [Kwenïa], ou bien Qwenya!

p1706 (dp1707 Vdate p1708 g5 (S'\x07\xdc\t\x12\x13\x07\x00\x00\x00\x00' p1709 tp1710 Rp1711 sVcategory p1712 g10 (g11 g12 Ntp1713 Rp1714 (dp1715 g16 VLanguage p1716 sg18 Vlanguage p1717 sg20 g21 sbsVtitle p1718 VLe Quenya - Épisode ø p1719 sVslug p1720 Vle-quenya-episode-o p1721 sVauthor p1722 g10 (g275 g12 Ntp1723 Rp1724 (dp1725 g16 VWxcafe p1726 sg18 Vwxcafe p1727 sg20 g21 sbstp1728 tp1729 sV/srv/www/content/monter-son-propre-serveur-partie-1-le-serveur-et-lapache.md p1730 (F1431623308.6938474 (V

Il y a un certain temps, j’avais parlé du concept du self-hosting. Il\u000as’agit de posséder son propre serveur, et donc, par extension, ses\u000adonnées.

\u000a

Bien entendu, il n’est pas nécessaire pour cela de posséder\u000aphysiquement son propre serveur (encore que ce soit possible, mais ce\u000an’est pas le sujet abordé ici.)
\u000aNous expliquerons ici les étapes nécessaires pour arriver a avoir un\u000aserveur utilisable, du moment ou vous arrivez sur le système fraichement\u000ainstallé, au moment ou vous possédez un serveur avec tous les paquets\u000anécessaires a l’utilisation que l’on veut en faire ici d’installés.\u000aCette partie va consister a paramétrer le système (ici un debian\u000asqueeze. Il est bien sur possible de faire la même chose avec a peu près\u000atoutes les distributions Linux disponibles, tout comme avec les BSD et\u000atous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x\u000asqueeze, parce que c’est une distribution simple a utiliser comme\u000aserveur, stable, et facile a configurer (puisqu’une bonne partie de la\u000aconfiguration est déjà faite et incluse dans le paquet), donc adaptée au\u000abut de cet article, a savoir rendre l’installation simple et\u000acompréhensible).

\u000a

La première chose a faire est bien entendu d’obtenir le serveur en lui\u000amême. Cette partie de la chose ne sera pas traitée dans cet article. Il\u000aexiste en effet un nombre infini d’obtenir un serveur, que ce soit en le\u000alouant chez OVH/1&1/n’importe quel autre hébergeur commercial, en\u000aparticipant a un système d’hébergement collaboratif (je vous laisse\u000achercher), en achetant un serveur et en le faisant fonctionner de chez\u000avous, en utilisant un vieux PC… Bref, les possibilités sont multiples.\u000aDès lors que vous avez accès a un système debian serveur, peu importe sur\u000aquel matériel il fonctionne, et a priori peu importe aussi la manière\u000adont vous y accédez, le résultat est le même (et la procédure aussi…).\u000aDans cet article, nous parlerons de la configuration de base, du moment\u000aou vous avez le serveur vierge dans les mains au moment ou vous\u000ainstallez le serveur http.

\u000a

Dans cet article, lorsque est précisée le type d’IP a utiliser, il\u000aconvient de mettre ce type précisément. Quand le type n’est pas\u000aprécisée, libre a vous de choisir ipv4 ou ipv6.

\u000a

Bref. Commençons au point ou vous avez un accès root a votre serveur,\u000an’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou\u000arien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez\u000adonc par faire un passwd, pour mettre au plus vite un mot de passe\u000asolide sur le compte root. Continuons en allant vite mettre en place le\u000anom de domaine. Pour cela, votre registrar doit vous fournir une\u000ainterface vous permettant d’éditer l’entrée DNS pour votre nom de\u000adomaine.

\u000a

Cette entrée doit donc pour l’instant ressembler a ca :

\u000a
    <votre nom de domaine>  NS 1 \u000a                            IN MX 1 \u000a                            IN A        <IPv4 de votre serveur>\u000a                            IN AAAA     <IPv6 de votre serveur>\u000a
\u000a\u000a\u000a

Cela vous permet de rediriger tout le trafic se référant a votre nom de\u000adomaine vers votre ip (le fonctionnement exact du DNS est assez\u000acompliqué a expliquer, donc on va dire que c’est de la magie pour\u000al’instant, ca sera peut être le sujet d’un autre article), et d’indiquer\u000aque les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers\u000avotre serveur, ce qui est un bon début. Faisons un petit point sécurité\u000aici : pour accéder a votre serveur, il vous suffit actuellement de taper\u000ale mot de passe root.

\u000a

root est un utilisateur assez répandu, et il est assez simple de\u000abruteforcer le mot de passe. (Relativement assez simple, en fonction\u000adu nombre de caractères, ça prend plus ou moins de temps, et si vous\u000aavez suffisamment de caractères, ça peut prendre un temps assez\u000aconséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons\u000aarrêter d’utiliser root et nous allons commencer a utiliser des couples\u000aclés publiques/privées pour nous connecter au serveur.
\u000aCela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,\u000agrâce auquel nous administrerons le serveur a l’avenir; puis configurer\u000aOpenSSH pour que celui ci n’accepte que les connections par clés et plus\u000acelles sur root.

\u000a

Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se\u000afait avec adduser, qui est interactif (vous ne devriez pas avoir de\u000aproblème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,\u000aet vous pose toutes les questions utiles pour vous aider.) sinon, vous\u000adevrez utiliser useradd, qui est (en plus d’être très chiant a\u000adistinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait\u000aun simple script permettant l’utilisation d’useradd plus facilement.)

\u000a

Avec adduser, vous pouvez soit utiliser le mode interactif en tapant\u000ajuste adduser <username>, soit utiliser le mode non-interactif\u000aen faisant un adduser --group <username>

\u000a

Avec useradd, vous devrez utiliser la commande suivante : useradd -m\u000a-N -g <username>. Cette commande ajoutera un utilisateur, créera\u000ason dossier principal dans /home/, et l’ajoutera au groupe du même nom\u000aque lui (ce qui est en général nécessaire pour des questions de vie\u000aprivée).

\u000a

Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera\u000aamené a administrer: usermod <username> -a -G www-data postfix\u000ausers staff sudo wheel, puis de changer son mot de passe\u000apasswd. Enfin, ajoutons le aux utilisateurs autorisés a utiliser\u000asudo: echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers
\u000aEnfin, changeons d’utilisateur : su. A ce point, vous avec un\u000autilisateur complètement fonctionnel et utilisable pour toutes les\u000ataches d’administration. Si vous devez encore utiliser root, c’est que\u000aquelque chose ne va pas.

\u000a

Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous\u000aallons maintenant passer a la phase 2 du plan : désactiver le login ssh\u000aroot et le login ssh par mot de passe.
\u000aTout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un\u000asystème assez semblable a celui vous permettant de chiffrer vos mail :\u000avous avec une clé publique et une clé privée sur le client, et la clé\u000apublique est aussi sur le serveur. Lorsque vous vous connectez, openssh\u000avérifie que vous possédez la clé privée qui correspond a la clé publique\u000astockée sur le serveur (pour votre utilisateur, bien entendu). Il est\u000aégalement possible d’utiliser plusieurs clés publique pour chaque
\u000autilisateur.

\u000a

Bref, maintenant que nous avons la théorie, passons a la pratique : tout\u000ad’abord, il nous faut générer un couple de clés publique/privée sur le\u000aclient. Openssh fait ça via la commande ssh-keygen -t rsa (le -t\u000arsa précise a ssh que nous voulons un chiffrement rsa, qui est\u000asuffisamment solide pour cette utilisation.) Entrez les informations que\u000assh-keygen vous demande. Trois fichiers devraient maintenant se trouver\u000adans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.
\u000aknown_hosts liste les serveurs auxquels vous vous êtes connectés déjà\u000aune fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous\u000aintéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé\u000aprivée, sauvegardez la sur une clé USB ou notez la sur un bout de\u000apapier, si vous la perdez, vous ne pourrez plus vous connecter au\u000aserveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a\u000alui, contient votre clé publique. Copiez la sur le serveur, avec unscp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/ , ou\u000aen la copiant a la main, si ça vous amuse.

\u000a

Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel \u000asur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.\u000aIl est donc nécessaire de créer le dossier .ssh (mkdir .ssh), puis\u000ade déplacer ce fichier a la bonne place (mv ~/id_rsa.pub ~/.ssh/authorized_keys).\u000aTestez si ça fonctionne : ouvez un autre terminal, et
\u000aconnectez vous a votre serveur (ssh <username>@<votre nom de\u000adomaine>), et il ne devrait pas vous demander de mot de passe.Si\u000ail vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,\u000adonc vérifiez que vous avez suivi correctement les instruction\u000aci-dessus.

\u000a

Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le\u000aconfigurer:

\u000a
sudo apt-get install \u005c\u000aapache2 apache2.2-common apache2-doc apache2-mpm-prefork \u005c\u000aapache2-utils libexpat1 ssl-cert libapache2-mod-php5 \u005c\u000aphp5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \u005c\u000aapache2-suexec php-pear php-auth php5-mcrypt mcrypt \u005c\u000aphp5-imagick imagemagick libapache2-mod-suphp libruby \u005c\u000alibapache2-mod-ruby\u000a
\u000a\u000a\u000a

(faisons large, on aura besoin de l’excédent plus tard…), puis activons les
\u000amods apache en faisant a2enmod suexec rewrite ssl actions include\u000adav_fs dav auth_digest, et faisons en sorte que ces activations\u000asoient prises en compte par apache via un sudo service apache2\u000arestart

\u000a

Le serveur fonctionne, maintenant, il est necessaire de lui expliquer\u000acomment fonctionner sur notre nom de domaine et ou trouver les fichiers\u000aa envoyer.

\u000a

Pour cela, nous allons faire un simple ln -s /etc/apache2/sites-{available,enabled}/default, car apache est assez\u000asympa pour nous filer un fichier de configuration par défaut. Il nous\u000afaut encore l’éditer, en changeant l’adresse mail au début du document\u000apar la votre, et en changeant AllowOverride none en AllowOverride All,\u000aet enfin redémarrer apache pour qu’il prenne en compte les\u000amodifications, par un sudo service apache2 restart

\u000a

Et maintenant, il vous reste a apprendre le html, parce que ca y est,\u000avotre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on\u000averra l’installation du serveur mail (c’est suffisamment complexe pour\u000aprendre un article seul…)

p1731 (dp1732 Vdate p1733 g5 (S'\x07\xdd\x03\x12\t3\x00\x00\x00\x00' p1734 tp1735 Rp1736 sVcategory p1737 g10 (g11 g12 Ntp1738 Rp1739 (dp1740 g16 VTutoriel p1741 sg18 Vtutoriel p1742 sg20 g21 sbsVtitle p1743 VMonter son propre serveur, partie 1: le serveur et l'apache. p1744 sVslug p1745 Vmonter-son-propre-serveur-partie-1 p1746 sVauthor p1747 g10 (g275 g12 Ntp1748 Rp1749 (dp1750 g16 VWxcafe p1751 sg18 Vwxcafe p1752 sg20 g21 sbstp1753 tp1754 s.