From c85df31f74f598abca75a39de585e8fbeb16d5ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wxcaf=C3=A9=20=28Cl=C3=A9ment=20Hertling=29?= Date: Thu, 3 Sep 2015 19:58:32 +0200 Subject: [PATCH] nuc-hdmi-cec, and fixes to theme --- __pycache__/pelicanconf.cpython-34.pyc | Bin 1689 -> 1701 bytes cache/ArticlesGenerator-Readers | Bin 78735 -> 86769 bytes cache/PagesGenerator-Readers | Bin 3350 -> 3925 bytes content/archlinux-made-simple.md | 262 -- content/debuts-presentation-etc.md | 36 - content/dns.md | 1 + content/docker-ebooks.md | 89 + ...iles-ou-los-libre-pour-votre-grand-mere.md | 84 - content/hori-vs-pdp.md | 126 + ...h-en-tant-que-language-de-programmation.md | 158 - ...raphie-avec-pgp-et-principalement-gnupg.md | 177 - .../la-programmation-expliquee-simplement.md | 75 - ...s-et-de-letat-une-idee-quelle-est-bonne.md | 108 - content/le-quenya-episode-o.md | 44 - ...entes-couches-dun-systeme-dexploitation.md | 94 - content/les-systemes-de-fichiers.md | 123 - content/linformatique-a-lecole.md | 81 - content/mfsbsd-online.md | 4 +- content/nuc-hdmi-cec.md | 97 + content/opensmtpd.md | 64 +- content/pages/about.md | 57 +- content/redesign-du-blog.md | 2 +- content/ssl-starttls.md | 43 + content/ssl.md | 8 +- content/update-a-propos-du-blog.md | 34 - content/update.md | 2 +- output/archives.html | 101 +- output/author/wxcafe.html | 1898 ++++----- output/author/wxcafe2.html | 2135 +++++----- output/author/wxcafe3.html | 821 ---- output/categories.html | 46 +- output/category/hacking/index.html | 137 +- output/category/language/index.html | 238 -- output/category/note/index.html | 712 ++++ output/category/notes/index.html | 561 --- output/category/oses/index.html | 427 +- output/category/programmation/index.html | 406 -- output/category/ranting/index.html | 487 +-- output/category/teaching/index.html | 585 --- output/category/tutorial/index.html | 576 --- output/category/tutoriel/index.html | 1513 ++++---- output/category/vidya-games/index.html | 275 ++ output/feeds/all-fr.atom.xml | 3441 ++++++----------- output/feeds/feed.atom.all.xml | 3441 ++++++----------- output/feeds/feed.atom.xml | 3441 ++++++----------- output/feeds/feed.hacking.xml | 98 +- output/feeds/feed.language.xml | 30 - output/feeds/feed.note.xml | 409 ++ output/feeds/feed.notes.xml | 265 -- output/feeds/feed.oses.xml | 366 +- output/feeds/feed.programmation.xml | 198 - output/feeds/feed.ranting.xml | 404 +- output/feeds/feed.rss.all.xml | 3441 ++++++----------- output/feeds/feed.rss.hacking.xml | 100 +- output/feeds/feed.rss.language.xml | 30 - output/feeds/feed.rss.note.xml | 409 ++ output/feeds/feed.rss.notes.xml | 265 -- output/feeds/feed.rss.oses.xml | 366 +- output/feeds/feed.rss.programmation.xml | 198 - output/feeds/feed.rss.ranting.xml | 404 +- output/feeds/feed.rss.teaching.xml | 311 -- output/feeds/feed.rss.tutorial.xml | 368 -- output/feeds/feed.rss.tutoriel.xml | 1426 ++++--- output/feeds/feed.rss.vidya-games.xml | 82 + output/feeds/feed.rss.xml | 3441 ++++++----------- output/feeds/feed.teaching.xml | 311 -- output/feeds/feed.tutorial.xml | 368 -- output/feeds/feed.tutoriel.xml | 1426 ++++--- output/feeds/feed.vidya-games.xml | 82 + output/feeds/wxcafe.atom.xml | 3441 ++++++----------- output/feeds/wxcafe.rss.xml | 3441 ++++++----------- output/index.html | 1898 ++++----- output/index2.html | 2135 +++++----- output/index3.html | 821 ---- output/pages/about/index.html | 88 +- .../index.html | 355 -- .../posts/%D/archlinux-made-simple/index.html | 502 --- .../%D/debuts-presentation-etc/index.html | 240 -- .../index.html | 279 -- .../index.html | 412 -- .../index.html | 377 -- .../index.html | 278 -- .../index.html | 307 -- .../posts/%D/le-quenya-episode-o/index.html | 244 -- .../index.html | 286 -- .../%D/les-systemes-de-fichiers/index.html | 330 -- .../%D/linformatique-a-lecole/index.html | 280 -- .../mise-en-place-dun-serveur-dns/index.html | 437 --- .../index.html | 469 --- output/posts/%D/opensmtpd-debian/index.html | 582 --- .../index.html | 340 ++ .../index.html | 135 +- .../index.html | 275 ++ .../{%D => }/freebsd-online-mfsbsd/index.html | 87 +- output/posts/hori-vs-pdp/index.html | 281 ++ .../index.html | 138 +- .../mise-en-place-dun-serveur-dns/index.html | 420 ++ .../index.html | 158 +- .../index.html | 453 +++ output/posts/{%D => }/nat/index.html | 41 +- output/posts/nuc-hdmi-cec/index.html | 287 ++ output/posts/opensmtpd-debian/index.html | 564 +++ .../plan-9-from-whichever-space/index.html | 117 +- .../index.html | 211 +- .../{%D => }/redesign-du-blog/index.html | 113 +- output/posts/{%D => }/sed-basics/index.html | 106 +- .../index.html | 109 +- .../index.html | 108 +- output/posts/{%D => }/update/index.html | 43 +- output/tags.html | 39 +- output/theme/css/bootstrap.css | 13 +- output/theme/css/extra.css | 7 + output/theme/css/pygments.css | 130 +- output/theme/css/pygments.css.bak | 70 + pelicanconf.py | 15 +- pelicanconf.pyc | Bin 2260 -> 2190 bytes themes/bootstrap2/static/css/bootstrap.css | 13 +- themes/bootstrap2/static/css/extra.css | 7 + themes/bootstrap2/static/css/pygments.css | 130 +- themes/bootstrap2/static/css/pygments.css.bak | 70 + themes/bootstrap2/templates/base.html | 4 +- 121 files changed, 21501 insertions(+), 37993 deletions(-) delete mode 100644 content/archlinux-made-simple.md delete mode 100644 content/debuts-presentation-etc.md create mode 100644 content/docker-ebooks.md delete mode 100644 content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md create mode 100644 content/hori-vs-pdp.md delete mode 100644 content/introduction-a-bash-en-tant-que-language-de-programmation.md delete mode 100644 content/la-cryptographie-avec-pgp-et-principalement-gnupg.md delete mode 100644 content/la-programmation-expliquee-simplement.md delete mode 100644 content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md delete mode 100644 content/le-quenya-episode-o.md delete mode 100644 content/les-differentes-couches-dun-systeme-dexploitation.md delete mode 100644 content/les-systemes-de-fichiers.md delete mode 100644 content/linformatique-a-lecole.md create mode 100644 content/nuc-hdmi-cec.md create mode 100644 content/ssl-starttls.md delete mode 100644 content/update-a-propos-du-blog.md delete mode 100644 output/author/wxcafe3.html delete mode 100644 output/category/language/index.html create mode 100644 output/category/note/index.html delete mode 100644 output/category/notes/index.html delete mode 100644 output/category/programmation/index.html delete mode 100644 output/category/teaching/index.html delete mode 100644 output/category/tutorial/index.html create mode 100644 output/category/vidya-games/index.html delete mode 100644 output/feeds/feed.language.xml create mode 100644 output/feeds/feed.note.xml delete mode 100644 output/feeds/feed.notes.xml delete mode 100644 output/feeds/feed.programmation.xml delete mode 100644 output/feeds/feed.rss.language.xml create mode 100644 output/feeds/feed.rss.note.xml delete mode 100644 output/feeds/feed.rss.notes.xml delete mode 100644 output/feeds/feed.rss.programmation.xml delete mode 100644 output/feeds/feed.rss.teaching.xml delete mode 100644 output/feeds/feed.rss.tutorial.xml create mode 100644 output/feeds/feed.rss.vidya-games.xml delete mode 100644 output/feeds/feed.teaching.xml delete mode 100644 output/feeds/feed.tutorial.xml create mode 100644 output/feeds/feed.vidya-games.xml delete mode 100644 output/index3.html delete mode 100644 output/posts/%D/SSL-ou-la-securite-sur-internet/index.html delete mode 100644 output/posts/%D/archlinux-made-simple/index.html delete mode 100644 output/posts/%D/debuts-presentation-etc/index.html delete mode 100644 output/posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/index.html delete mode 100644 output/posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/index.html delete mode 100644 output/posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/index.html delete mode 100644 output/posts/%D/la-programmation-expliquee-simplement/index.html delete mode 100644 output/posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/index.html delete mode 100644 output/posts/%D/le-quenya-episode-o/index.html delete mode 100644 output/posts/%D/les-differentes-couches-dun-systeme-dexploitation/index.html delete mode 100644 output/posts/%D/les-systemes-de-fichiers/index.html delete mode 100644 output/posts/%D/linformatique-a-lecole/index.html delete mode 100644 output/posts/%D/mise-en-place-dun-serveur-dns/index.html delete mode 100644 output/posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/index.html delete mode 100644 output/posts/%D/opensmtpd-debian/index.html create mode 100644 output/posts/SSL-ou-la-securite-sur-internet/index.html rename output/posts/{%D => }/comment-saurik-a-roote-les-google-glass/index.html (65%) create mode 100644 output/posts/docker-et-les-ebooks-sur-twitter/index.html rename output/posts/{%D => }/freebsd-online-mfsbsd/index.html (69%) create mode 100644 output/posts/hori-vs-pdp/index.html rename output/posts/{%D => }/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/index.html (59%) create mode 100644 output/posts/mise-en-place-dun-serveur-dns/index.html rename output/posts/{%D => }/monter-son-propre-serveur-partie-1/index.html (63%) create mode 100644 output/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/index.html rename output/posts/{%D => }/nat/index.html (84%) create mode 100644 output/posts/nuc-hdmi-cec/index.html create mode 100644 output/posts/opensmtpd-debian/index.html rename output/posts/{%D => }/plan-9-from-whichever-space/index.html (68%) rename output/posts/{%D => }/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/index.html (58%) rename output/posts/{%D => }/redesign-du-blog/index.html (60%) rename output/posts/{%D => }/sed-basics/index.html (66%) rename output/posts/{%D/update-a-propos-du-blog => ssl-starttls}/index.html (60%) rename output/posts/{%D => }/update-et-pensees-a-propos-du-raspberry-pi/index.html (69%) rename output/posts/{%D => }/update/index.html (82%) create mode 100644 output/theme/css/extra.css create mode 100644 output/theme/css/pygments.css.bak create mode 100644 themes/bootstrap2/static/css/extra.css create mode 100644 themes/bootstrap2/static/css/pygments.css.bak diff --git a/__pycache__/pelicanconf.cpython-34.pyc b/__pycache__/pelicanconf.cpython-34.pyc index 53ae43ad5f3ddf1de731bc112a6cd56cb3fe58c4..e37e4757b8bb705b5b44567f115407be5e004cd0 100644 GIT binary patch delta 503 zcmYk1%SyvQ6o$_+F@B06hst08}nHP?Mmqftmtc0W}T!BB;ZlFF`?GzkV?jQqyKGQ_h*`85c??^;`N6 zB<@?}?X**<*gCD&%$iH*%$h|lufg&=n#t(Gq~TGR0kuT%mR-GVz z;7)MDm_!i096X4kONbbUEI8xn6NpI;-qDBNj~M6%gXnR@P&Y`RClRS`kVYSd9Di7- z(>5P6ib)1B#vzBCDfDSX7BPdE<&Z}npMx|2BhhBwiM@vyAur_5h=Z@g6gQ3h zyN>V$J!6K?S0*;j>6x%<<#Srk{#yuk zrMKpF%aF96JM?{5tWXLyM&bCxG)lZ+bDw^zAJy`du7vHn{V z#(nNpE4E<;&+^g*G($WUP*+Tc@q5|BcDzZGzE<|?} z^q}`5`l6s8J&8y~K^i?ncHqN!b2wxWlOaI;=Z26DV>*Hu1!$_5M;}K_ASMx0h-rW} z(0o)nrQkKTy;Z~z@i9veohtwS6%^Z~2bNQw6Hd)DId!>JF%8>v>{7u!4dbg-ht(`z Xl%ZCv227nvDnufZ8bd~ps;JT@KJ6AqS zxm5RNQ#T}%EII6QIe?WD5u+-h(E83G{_gVBb(G9?ywC%%pL9Ggabe$9-fEwwdH{ep zMiN%qN}z@UyRqCO{!C_EDpj*1Vitv0@xdokrJeR|#iX!LkL&HrxC1KKLfZhqbxaas z6kRUG*S-MU(?^(LXKOmcQ=qLwLhu}y?n|Sg!t<4UkuP)g6s1no@bXh-=!SJuR<(MU z&beoG&4yEJORbmBlDkG%~?WI2%@49W#R z-;ExrK)QEF7qpS2tSBooq+lSFe|`eLXy8!<2B$9EA&_V z%DG#BFX8qU`R0`1`)SxKi)_E(QD0sOX_QtjPf{M`Y2MunrjaWqrHde}iFK%dHhAn~ z6PpEl{W;&@Ua1LpUD+K(wXgH+Tk%d(X>J$PNC6z_Outt8n-TylfmKgpVlYohQF$a! z{(x-q>iFT+c{S|{Y|THLH*Dam2GtY+{uEfTRQOJa|K9Bxl``snvJLjsC;o!RMX>nk zjtw5)U|o8^N~~4B{PMSdP6_)lSsh@$58gkOl8xLcIn)Z{*L_9qKjmsx_!1?vwBSKLrDQd z0An|lea_1?Hn~@(U$-Krb?p7?*M10}!lFm79w8*G|6q5HG$s6Tl-5o5m)kbjbdX?? z02BD&!?kF3*?c?!4Nu1>l0|y_nsXTsLNpp8_l^ZyNx-=1c@_c6l~<8{QLcCsRcGYC z8tM6&Q}~LEzQv5J(;_3foe%NM`JNe5L78W(r*!*bXmJg#cuHz0GIJQ*nSLtp0y432 z;W@_2)+PlHkHzXUkvsY*Q|U=#6kmBxO5rIlY-bG3ktmO2ZaK&3yYBhQ3IlL!5KWQY(b|iyV78N3*?>IStE9` zTkHLbmi2$Plxu~~4@|kC9ZpAVsjDHRFYh-7*E9}Y@%U#|Z*(Vs0tB)Q)$FYtlC?j* z`d4x!-wkX9*`WmU3bo)&@R*LuX**LcV&xxJzmm`WxMXuQU1-?%warkYMK3b-E=aad zo5}}q>b%7u9zr{~R2xIA&>%#T*`U9CkH6Vtzb@{(&d|T5C&@rs;he?2I)}dFInQJC zZ~TRGrXDQS2#-ouomz>nGqB<3aDcrjs}K0e_01X)ttjR<2DM%)8jGbfMo`xS7oVX> zSv(}0fXol3J_IRcnLvym0=AdIy3d7rjr8eC<8mzsF@U+Q1RB@)l!MYZW5jjkoD0`Y z6KZ1F3iN)bWP?eAL10gZbM(C@lI#|SmAzao7s;G#;L~-rg^|M5-m^n0PfTX~gEWcKt!vFOtrmVIU%dG-%ZtxF%|w|agfTDWARXo0g&sH`X7K`y&N#Sq!u zCEiLEOTSZPme@xh6t(nVlJtWDO}&)er@|CY-Y@%`POetsuGmSRpAl)n?X6Zs@l3pI z^)%4M*|!ZkH%%ZfBjIr=Uyt`bqhEeKjod8?fN{Gl3{$uf_>HwneVu7StVxm~lsZ_p zCWeQt+xm;QirunvHFV87%|^D zYIO)gw1RJ)P0z8DA`pz0NetAy-|~P~cQ~UI^NVcUlYe#sky)CQd`qY~ALY93%OojR zj}LJv{KI`KS^#Wb_;#DwxcLA(^movL^hER3=d5X)lA6L*{LRR6;_^)t})+4kw)>M3gG`4vZE7zAWdp2vHz>bINilybT7e83#Mb)%(K&w6tC zUEe$1t3Sg<*b6JOwy|Tp6l)$;NvGiZq>)fGnTvTOWl%-*HL3XM;J5T0KN#}0=2YJr z4Uv75T(88~NuLa|1;x^`#gV=u8Z~A6)_R_zjQgK~b|vvx6CTYtcM7MM-yL*-1Yy=f zpKwSz5M`G>Y7c4edJs9)#zk*UVzdnDM2Ted%ssnoxqQUgX%6r5qK77IdG&^I3$!-1 zr+>(o0m#@Wh+>1%9m<%BQfPeeLne}9<#c|fOjXG2d0XT0r?yRb0{HM^1|^rNeq=FhictEuw0 z5}##)jk`8hQjAz=#(TfhS#8Zu#0tf9V3;(SneDx!<>U$FOEppHcl#mDiO!swaZf24 z9PtXJK2&~vg29a7pSZ3dA1S+JAK{M~YX8Cpu4o~C7H;m<3E{D(W;8Wxa0l3SJnH+D zg|e$qKs}fyvK9+y;untnbq}VB_D;O1TZE%IZ#Y@|YYj1U9W!GJL!Zr=V=aw1zE6D8 zvK|KhJdcA1PnXMLFp`yaz=!P8CoQ!FYxsr)NrIu+37XB|Tf1hIeudg|Q>4A-EMVHs z*_|LVmi|X79Z8v)(#$zHRBH1Q=T+h&ycsHkCOrR=+xwP1Jj7F+iYIPLJpAY_;`@7i zSw%%|L+3V1dh8KM@sB$B0#^^ElY~4jMq$%9`4lK>kiVtHin;I?*gX|rN5j=3Iwg1DJ98ot|8x;Iz~|s7+i(S@+livz=-e!9CMFW>rUyYdv1r>}2^) zlSu2omTJj&!-(+^^#EFMASCUkiJU>pk&rRI zW&4dv*;WWN7AgIItc^@9rUBSi7Y#)Hj-XDPL);vjk$%lHnFJdc9hnFGWW+JCi%A_! zuwsOa?6CKa*+;^KQgHxseI$c~sr(OG@D!BmuvM@mABAl5f)8tKE4K98jJT~|Y;Ks- z09P+=3>ste)5&|ZuFqHg%X-IK*yCR|8Uf5#Kt^-Fl1H@lts24|tXf1cz8d0{DY!?>8{YU_9sXBmA)x&DQuv}x>r%DFm7N2(ju6a7h@wTGyL&{?ZiT)r0ILm!R zMTk;4MNSsdIHUTwR)^Gs-uv&9KC0P8sDWK#ITr&<6y7&p@;uWtY3cD|@zQp8ri~ zv2nD~fMJ!bYEB*(CLoLS^cC{_ts~AzQOl*yHtKeEsKmp}w36 zMx+x;i?1}bkWQv)_IT;$sK)mXk#lHRN8KbbOCRWoy1P-s;?(}FPQYI(POW~Es{t*` zNwOVebdV`4$k1}0%y#$sT0@BiUYM?|)iJOOYg@joy0ft=K20~zC=y^y@-Bf`<&r+_ z#LdL&<+txanX}{5{7=v!`r*i(ei%)dTGdHqWQ$`D+2~84|T~b5n-t2*VYNSC0Fu-}vF2 z{a*NF*i)Ymr%JY!>OG!Em!bq zp*VL2vCl#L<0Vlc!B`)Cm!73`zN?hqT0 zzcAB7sG8YL1c=j<7=i^FAf>z{8em)$>GO1#AV0IW?W%Hq=V0Ds^%WIfHEqr}_XNcP zEyr=D>C3ICDDQ|d_`3UAA`4m>M`_7Ly4|gXM(;MI_xC@mWisU{rWWgMfCOXkRB9T_ zFbP8|S)2jTV&Ikhy1yFloJg!78?jX&%los55{8iKYyFTy7Wz5W?`-FWe^=A+KV4@mIF zy&(SD&;)0>T2EoR#n*K^P@eJ@55lNUMGX)NoB+v+k>|eTFdd9?z$<3EASd8W31%3DZoC&Cq{LM~xSC8qm+YZ;FI`0fbPTCM;|_ z7(`+8SD}HK;YeoRO8R4v>)i7AsBv;8oIM9^(;3*W@S-X#FXfSwRH3=GuIYdcq&S)u z=ExSUW|Wu8D?LNiDh0FYGG_Xi6;?@Pg2&sa2xpY)nAij3nNWG)#`JNj1Ej7uP_fP= ze{)=PTC5JL2NzOdY474jcR-SUJg6>a{vLv+Us4}O%QCrvg-#)Si%07f=(4|)l#L2R zPCKIrXo1wdo4zXfLIeK$)17O(qcB<8f@7;`7U#wm1p7gFb3^;P_|J#QYw}4>zyVb4 z0TS8=S(HkhSpGkMb#WGRvdJW-^xH2Y;l`O%sI9na0tvWmRl7`3B90BfgccU1ta$pu zVL(j54vcUqcfuk4B2~6#kouGtT&~$mMu_o|f*pOP&PI~B&AGS8&q1|+3n$6wXYZ&6 zG0C-te(5<%37YL?`#-g`gynth`E}igJtr}L`n-od$6$Qwd~1Bve?Olt7j~u4^XQ~S zU8#G+2if6J61HG;Ro`;y`~H&-JY9yzYbkype@zFN*vyqX*kN8PnqU8>DYk2IGbC_e zYZ>O`Z1v)r=sy9N({}rb;*jY%*yorAmeq`ZdtgTxim%zv0fpL0nB6en4;+r6`6Zo4(9%BpX&1U8v{`c@3j&`s034VS~?yX{$g9_8JxNg zlC@5xcJ*uhHWiq&;2slO%I$mga703m@+*CxU?W$c%|j`A9|17NZoLMDa;x95DRdzv=z# z*LjCB0~KTyfxnh55jj*Ll*f{swXup4 zpx$P2m~CO=rLsYdU#GhOSEe)6s6@h!Gp$9M7@b%T_h4^Ko!R5!-PR}Q)zm4YR!N=Xc8=+32l7n)RH8O(2bS;8|!n?utuZgk` z8(7{Zgjm@eZ$E!%WMxXgD4$&fV=g;?q(s~$xAo%2-vzedpq=gPTtb2#9txCFaW6mr za9m3Q0ErXsV@>lqcr)7>f0cF6zoDi{MWSE!`Z)%UO`(C4+2~%j$e*$p|@zdB}BkS122XA)^ z7-z_@NT~|e80|inV%)sU??WIdas0lFk{!gkVUEf>H~MO4(?&U3F_i{u^z6HI`xn9R zR+qjnQhU-HxUJ7uWih2V;z|g{QStQxcD4Ciw_5$g1 zC{+rLXpY!NfK%L6FauY5+*i>lH2sL;6#2oZMESV|P(AGmH}w+15EbI}Q{ zaus(}NW7XXmnQD*m4-}DrK2*A5n@R&b0f|hrRbb2&}ElWp~_Ig7UE+HIPpsKU)kx^ zetpWK%G-e$Yu!l?3UY8#JRt2E@V0#LEK3p)g20vz==pn#=B-&&=2b~mUf6nrh_4@( zOAivYM79>t6|TbCW>yrAeW4Nbb@aD;y*O=bm=_D-wjH>JJp*36*(r11rjp2k`Gx3k z1z9l(ynCJ7GJ2<1rwm$H|2=KSv0y^Q(an3E5*auqkgcASieEnQa716vYJhW~GHqb) z_QaYD#~YP4lbYFGMSVVtZ1WZ)@nnS>1Z();av>(XAU*AfNVk0AiQ3%~jO=O>18 zloLJ;)gZY*5NaKUIV|C%zNibB4IfYLF8o>WnVpMUBeq@Pnk|l9VZVBo zyt&s@=|m3y$^9Ki1~*$)D7UW@w3!nZ7x7YnV>mC5vt(Mx2ecI-r?pL_U$3{&!l?aK zbqO|yv^TB&bh|Aoz?Gc_H!UmE4O**N+YCRn3#w)wD8KT6_x2BCvj3Xxn)~w5?_|hj z&#EQUM_EZX@tsorrD|I&-5?`RnaWr1DFLU)_$GU+sRmk_jIWYkDVazw_ednI zr!CPER^iKL%?+pC;DSM#+Vy>zHD6C_{~!tW%y!J8X5MW^&Z17Wo_eJ&(pFuSwi=`AFaSla0w4{JaZkBJ{#G(W#1iX&tmGsrHP6e@b^$outQ2}?8MXo*L6ra8C zgNmvw;5yY#A5i(9hw*v}yG-;bNI#AV?BZ%hr|MY4ueW&9?+WTZM#jjqhUm$|HXDWmjsUg%n6m< zC|Jw4L;IP^bUMpqCzSryHslmdN{LGWLn6E8E)h*?idR++bFWn)bIad4w#@@y>)`S_ zf1va=1VjTd#JjxUQ-ZA~_~(B74fYyMw#hi?BBuyTU1&o{L}Wi^S`Hh4ig0#pxg}nn zK8awx#TI=6KJIOW4z@q~_d!1Gw7}Fa7)3^~^L`S7fB=)oG`ho!D0bK}ZI?dW7A$R2 zb@6T|;)D|Bp7c;!aoK`!vI8L8=EQlZrOeadTbW{T!BsA|^lR@*{BD<~L1Da4F0R#= zR*pECCU~FEDt^6@(SJkk9Q7Pjlg&U&>zvodai-8ad4o&!NlGT9W2P2-+0bbnd<6;G zypIqtF~0Cg@e)RzjLY17$_2*?mGFYChX=HE21JoGM zqw49u1Z#miRj`7sAFJLzjoVI~vI-xeqb{uaCWd%i(ge~Q$$0J9O+a$zO*fL7g!iY4 zh@QaNS`$*Qp1Ao{E+8{RF)ZE*O3&0H7^=t>S>~dzrk5TJ0;pTr1>quH8xJ^3CX40qK_wIP#oWFgad$A1tlmzube_4AOjw9E8d)H5dP)WtM0HE{svSZMi%4 z7lhv{udd?>IO0eRu42E$X~4w>3&NrU)Cq!RTra%K1{yJY)E(6ad$bq24JKRouR)=8 z_Q%Xw`pKwe;#t`bE3g(c#CPt6f@;8uM;>Yrb}Kpn@%+t9)D_xQME!wpC>wmo33oOu zLgr*AV$EpVsRO#z+t-+2O`dZe!~VH6b%Y4$)t~+GL)deN&Ul&Wb_mq~qKre(`7xA$$!j%}I49n_2r;jo!z1Ns_rAW&f3Y^I`tTViVYbyq} zFxE`DwnLm~@9M-uFPnU$vl7^X#j2i{!}~EZy0AYVrFxssE)%J26TEcLL&&UN6rS>% zc5_0h_@Y>|Bb!bHkb@JtXLV^IbWDfz4eDK8xKM!-P*z!A1pM7%u9itU9^a6;!woi4 zLzk^jzO=P9EBo;6rNXiv8!(owIcR?TwJJ-aY6@L^`W8+NG1tuLr%?{Y2HVs~-B5BF z=e26i^J;}w4Vy*jfa^%jn&48zFiQ1Jlm?L)@{$=iOYj_)CCFYT9^8 z@Kuc8IclKXZ`gu7fLRnYIH1R4lEHshki5Y$~@EiPIP_hD3k+E`aB)U zf}w2Tlqg!!d12oexglm*-5h-CN^U7^t_lE~UBcW}#7`Z1 zMWO27F5i4xf>;_Zq_sK-LK;&<3D|iFDZcC19}o>jMy5uA127ciIa2n(bQob=#mF|r zD5SfLh%s0)dCco3?wi{Lb-qW=eBlf|Lru2Rq=)SQT2RzLG$2(o(>ic25h7XNr7Rk1 zSqgq}qUiADxIefj@)KMmT>D$6oA0egsgSJtriaTiu$Rh`!O@=~G8@H(!`P=0x%1`M zSkHDW;n?G9*?|y+D5-xWX#u_KS<@O2>KMl+gB0qrfIn34f20HQ z7tPhvW5nuAelc+h#!>itf5Rrxl4vv*fTin$chhND&R_RCW#n2G?PQXjRVgB&%&XFy?_fu_Lj~?)ycjB9jisqarLPc~Jy6hx4nBCFgyEvZ zzwa>{-&-979iozj)wKh=4NOkOo57XI=XNy2$`fHfNN8}TKSksQgWx4%x1#0lK(b=w zrlh5vYI&mIb4&z+>rP(&3-?K1(pHc1S@BxP8H};8(5O7dHD1e!9X>oexvFZYSqHaz z!;?h8OiMmzSSto4Mtw6y-tQ-E{!mjiuZu=(@@ld{_N(omvypX6nGr$cj3`Mh`|cuC zlk%@{=ceXNySX&p;W|tAiO``Ou2q~zHw6wmJvN_cwklC@i_IW2y{62{W%0@(kA}3` zr8}5&kmpwV1CSlw!t(p-Et=nr;JbS?fsIGY8pPT3hIlY=7Eym9Y=pAuTOX++8;{x* z2e@=^tBNU3s%ex&N4}{!&P@Sgq7R&d@(_k}6%PGGx&q$l@Z{2+VE8NL{;I z$4Ohe9c5A_vKja z9}5<-Y+274An^!J)qLr@g5BycjHiz}sIU_kB7!T{E|HI$J za|u$pcIHX|Zqwp8djqB32rhQ8PJOk!lFzR5ThuZt2a(ve(;W5$5`NW|dC>^pxN+%m zS%gCe&a>Q@LuYHcD1Qn=DE_UtZt2o$)x1)J@qj}|hzV=g92RO6q;1W3SETZ|#+Xxw z|C;&6ymAEct6F~~)S<JFmehqR|j(Fid}3;%Dv_7fIfbD*W!gXaf*@`05f?Ca(n}ozF^n1{D*rh z^d0QS^sF>gz(f%b;?|Sk;{yk{;%=4oWi#|5{v@+>JE2dWa$t|{aY*m0X(~cbopR`) zvz1Ngm;HXnvt!t?ouH%*pEBR=&|9L(jQ>QIwaYfu)sc>Nh2$hx!m>>7>MA7Fq;FI3o?t*kO3{y(W+qB4Ma z9Ihqi58<3I2H;u%f%antdGEKJzw}exEmS-7A$BPz@hBBk zLmT6$!fo>KoPW_3uz}1>)5MKJ>(-un$4BckSLedz;>rN;mVycT_9=+bD8&oPv?VOyLLQ|?B>`5|8CmLVF(U@-aZw1 zN&7J?fiOB3j#S>*X@2@wV#x`psU%xB{NR3=KIh2Z_O}4Cc_;3~z_kmDcs^M^J zK*ZklmLw%#`vs-EP{|rTR9P!-?fqC5pZT+=ic42Cf4mqJLblgDEfE6Z|Z@ZSq54{ke30lnF@L`LF*28sjr_A^T3f&VT0TA6Zg( zLmCNV=)b4UE5htuPY1u`6-fv>pS;UUSM(8=9@gVT+4<+eON~L&>NEAM z+hebsJebN;H`^aXYslI=$4yhdwlVN06lcWVHO=z_Q=71NDPUKg5=)?r0QtnaEAATu z5B~H>#4Sf~Gpu3B)}Gho?)vEcM(wN_9C7D8LiLS93%!Hxh7=>r+Z~`Em3+}h6doZM zk*ZOjhneR$MGs1-=Y)Pz#i!t&eg=B;LDTax!)$V%3_>XL5|+`JeuzIeCYSOl*dvD( z%%FEuH-$Hb9d=F{Pi}Hm=%)&pDWljYG*};FutCsp*;P&A!BpP!IyS*MzqBaQ7|;u| zT-u_CQRk|CD^hRN4u*gn@bH)jo{X`Z381CcCQ#MBBoMYfGI zd-Fz(P~Tmbo{{D~Wi3pHvqqJRVhgw%Ig%5)Rfv@+5A^qG6CVNbR3R{4Mv^Lk+U)Z5 zz?)dv4z#26z&i}252t=kSP4w@gS$OQOur5^xzGN6^f_(Bba<4Ht~ zjs{KHAEvn&@^W&8hZ0xR6q&ZGea)aTlBn%>)9B^nnjO8e*=?S|x^NnNq z=(=x|@ab6^yxZI_XiD~O&vc&G6 zMPYbu&Yf(CiNGjpAncI+yC9}Mg(oGKf_6qM#}X0}UMjUpF1~{jAorHhSWB}2{fYsP zV=kro2ey#wCWBXMxBjzeX3wpVuuXKGho@uRVr}{XtuS$dO=Fiy_9;^U3eo%oU!{Se zOj%CE%LpN@lbD8EYK}*}g{&4|1%+CRAw2Hzbfo^Km>tTCpYf91=b;wKv!Cpprug+# z#R84a0*t#&=g=SEZ5kaY0pX2IpjZJ-R*b^L0FH9tOg{FViyjg*TdvB*JnNIB+X=`9 zcUPFUgOH}+fnAGD_JC_zH)*y^v(HZ`_#^=?-+k&ko#J1dqM|zhFPz13V`k9$cJeyp z@HBdl2TMgGqA@SFgckO=jdX;1;`2HxQCRMG8LR!3!91De3s#3XoTo(W(A93?>w;!(rI+ypjxM z?4t3z z9}Q+(RKJ}@j%wC9jZ*!&QKu1y4=~RO2l=-%nRQ>DiyIH9KCV3fz-K3UQpiU_8!70` z9;G}G^uCS8ONjNkM@yI6PUEka<7J?6pDQSa1u;i1of#Ai0=Z)w*%&6zNP(p>F5RsV zH69GSy(a&yfJGKIk#rxv8703l3WgtRgM=2IE+UoMS==zZ0&23IvE;x%fbF+LhK8;_ z9i9%ahqB=xJv*Z0h4yo8jl!-)_c~v=e~IDQB09|&Vp>dA%>*n#qVjJ4D8*IB(^tq~ z#`*F(L`44B059Q{oHX9OQ}N1X;EOZeq+%q6nl+6!{bKZ-%*ysA2iN}=S-;!u(hTen z&lxb5^CwPHf@-nU?E^2_r+6?7!D7=k#qJw%bNKwbyBrL!6ZzD(^e9tm0=Ik4g(7Bw zp>Y3A*?jIuCcBSUsI*P~wYccK8O|?EYmULLKaufE*rjce5DS``1+qlu#jb{)jUSi>xeAT4Dcl};Mj-zKcQBEhNp5M6y-C`yOO4%u+<#zA zT^)43|4yPsqH3%u`N4e(Xh0NWFm74}SuGA|qTT&iXi|YDqi$r#rk3{i?dDew33F36trOvGB28L(wYyZ9q z1m}QCN$7Hm)|VJZi8=ZodTdbT^vQ@`w6AGU$oOUGRAAOQ(aFvxGY{x-|81hCc3 z_gB*#2^Q*CxK+C$WMVn-Lf41`W$;u}ydz33y93R+HxzjAZ7$$cheK`NHUYnAK z>Xzrx1F$8fvEIF|;#4F>C}TWn-V8??u)kA+ryLa=+()%D^Bf?*n$qXl=r*)HlfZjs z|B??At>S0VB#6hFcHU&Re>=Si`J_%)u*EEfs$A7j{%UBKIF_vZ|wn!ctBnY5R&a zeVj;rl?*JV4%@!m+^;H5u%04@3SR!b!>QjR=E1FW`#*QHRg zff$cil=NuM6k_-$FaPYbuVjuy&vwneUmUMJ#C0}oe-$FZ8Ta2*wl>l}zyso~ujueZ zBDm4z$eyvg+iVyIHAfg7kmP^PSDK88VsNu;?u2Tc)w>|v z8JR?gvD772De6m@Tudt+57H^Xlr`^*ea!xlhN6It!j3(J3>09eZI7y$0o~7&B`_PQ zPXnoErp|VkTv9GQ2JFd5_v@hlt*D0Ih?@FSg0~Rno!F8~%(AU|5X<$*;dFqPzzg;D zX0Tv5rQ8?Q;s4}O4HUoluXSw@g4@NGd(}oW*!6ftGU#hs1lz()9uwj{}uxs)yTVBRl%*N7`%g8=& zbLCoQ_=oi}=5*PvVo6*p9#-g=Q_?;KJMoS6C=Joj`B;6x%n~rQ{)`Uh>Gr#*Sip!) zpi-xP7UG|T#?AAT##EoKZ5bw+j@Y`Cmf+Rab9rtL0&u(pE^+6hR35MCDx0hI-_Pz_ z8}0tl3O6nrc!{mRef}46ID#J4p!e=wt=@*)_KqXC^S2U>zCUIY4J6<)R0rD2f%Er= zt&8jDxYsLLV$rR8(f!~Ymli>og{Z|lQz+;<_x>+6N$RrmAtchEXGs845s^*f|viV6WZMkhMjhZTUewq=2_$7H}5Uo1&5t)*ILN6pK zkfJZTYepXs@&nA!e%-o{VRUNB(XN+K(3nZ=3EoZDmFvz$3xC@VTov8{1Bjb)sn^5!Q4XFx~*r@wI*evQq_ z7*FQ77xv3e=go2Zv8Z3|!fcXI=-L03k*jQoJvaEfeN@@Xnk|I_b|Fp--$S_pUg(MY@`O6d#%5b~LQ3V$NJNJ%cStQRgIiqOHBT3Lq<9zMR(S1cpd{=@p zOy*j`A2=RzZGDg#HRdxAldzl3ldJfc4_6BJSy%{*he0n!c1CpQb{f&JSN+?S0XvBt z%+0)?&LFj|*`HDD?07J9-|`J)42;c{G$iV`7q(B^M}vu)e&GVYBjC@>vl?xn?-;Oz zj|0U&3<;kv)5OIO)4g-$e2iI%yA5V8MPQPL`0|;dcB^FENdCxoc`0`kg`B9l61K@Z zggDQV)}Ll)qXJgK`0#u)vJ^iOA$mRUmVC%ZRdT15Fc^QK5vrN}g%*Jjo3ciG!@l$tka_Q^w5F zv?Ss}>E0vMAl2a#Tj5xYSPP66*O0Ux8vxj09bM_UuNvG7# zint*JYpSC`ed4xm5(k-=(uqztT_%2+kHerEqzstA+VgHHT@RP}w~eDSBt&SU<+6U1 zQiTquH`R(aD7et>AVCG^G{LkHt=Y=d33)lSv1$9#T2L!hU|HlZq-(Mj4V#yCtWso( zR>l8g4puwkrZ##)q$;l&xA-LU8_or!}ClQo2u~zc)M|)lbg($ z<8J*un-JJJ0R-UAPzrim#O>P_y-N*t!zLaJzP&%Q0e1qz1?4e(a1{tS9?ct{1#2ME z3@+_mX#>0O;4zObd>y^K{M)n!_DmZkaH|=rb_l)xUYmcp4k&$6ubs4*HmuowF>)9b z!dqB2LSN^>_h9MTFPpjyP;kqfdNvtJp5wN7dwNEvmw%0gPNkL~j1(bj2NJ*4&rJ>V z0bhL*%k6!KvkR`7%6lxmU5`P=PVI7_aR@%)!76=;v3{T`-XwXntUtE9-N$vn5VkSO zaN;yp3)>4keCIy*xNTn_c-?Tyf5naN@BUsrQ8@gw7LDI}j=RO77<3!QupAaNaV~GB zThu*gy<}tGxcq`y+dRf&_nj}nY2|b*nODT9k2uYdRiH#*YaW}CvgtT1SbA&65;mg~ za~yMJzAm@L_Ie+1Q@(Pw@^iY;hcj@rt5wC7uO)~a?U;zcqJ6g4j_tHcwi zr*J;=7v|})>d^MyU{tvKg|@J%<*XE{%0NT2;9qmpV$SAjrX_p;#u?QgNk0D}pXDAg zpA`1YUczG--(44_OSv5Tv+T5W8;8X3#uX(sSq(^5-~Oly)!&FI9<4VX@8d^ND$IYh zBJ#{DX7sroLj*JM1^{qU^r)mwk)oI{;go-zO(-c`;}mh^ZOwiO=vNMwP&?q8SgF+* z%cBfG+sDNkQRo^Nk}xRqq2Q1ajQ=75Ti#pXFaU?D38rye0yiM!mpV!Xnu;Alml%MK zL}Hho$$p_la6F52pL*kdKUaG{JMkDpH~^7Hk$(WzMecwm%JD-g9$&zuS9HdMQH>Q- zpP|dqvEF8O!&gmD)k1A<4g^UmzHdK=LF$hALycdSLi&8729&xYN3;9LzlRho?TGuf zOq_NWEdtB)F3hn#vh_|x=eIlry}dOLJ5gIlJ9+YXF%u*W- z(yT4y1_?UNqGgcNN`(H9@FiuhZ7 zVuMX~fB#7C5%C{Ig$=qXO_bAW`UM|{QAq|>OwpaQ@!8oYxTl9(|FUAptv4mg+ha4& zBD0xJWTJqh_KduxEn7vkyhE>4qiL(JgspWt*++l)1fw(`C5q(i5fZq#Gnv1k_7ZA! z+E>|jWwj&cxt8CF;sM@Z5f>-X^dkugNqaz4xbE*CqX0Ql>4&9j&7>SNt ziHz7%7Oy%(H17a*Y3q_|+SjcZOpY{uhAZO*2bpE5?xoKsAU4v7Mx@QPs;S{pgQK19 z8j%FsZ`Ug6Tray*G@pMU`SnoYx{SEmoOz=|U3Ef|{Ca`Xi)6D*Hd%00`cCujgt^b&m7t;Sjf25^ z56wG54t6|p{gL7RuR^~k(4DWt^X|_*(zp7Jq@JvKoe;!NzwlVjCq)I9kJQgHh!@a~ z{I=Nu)Xg0sN4Oj<^rG+RP5Y#RFV6G#Fs1zinq@&k%uUCt?w2BOxBT5-)?L?UWpd}|8q&}UcGThL!SLD=`7RI zvR^hOt}UP2bL~p@cR*F^hy|{jspt02Nq5&)u)q z6&O+rRGfvT?JCYq?;@pIP620>mN|rZj}l=N9NWE}*^Xrj74M#gX8&MhvOfI!qr%f3 zBczysT_Tns;ujr=*{iQSxIIZMp&Nf>ioQ4@Npj>{lSc-a(kg)MKMZO}30qf})KB;< zNzR5wW|kw!7#yYMEEeDsc|`Pvyr6?fxWJJ4&F{MHsftyB_nM05;<@P*9BGEXB#e znU5IcJ3&WdgkO?nmLENQsOz?0oEZf>4i9(h5~8mM06*X7t1TXu?;dC7fWw$a#bQ!^ z{#oh#0;a5mt)5&10z$hJw)Zj>jsTJCg8&`aZ@cl&B)jl$nn=yp-J70d|98(70dJDk zvefxZRv{U37Omgb66B0yUNMTzGY+U02K=22%nNjm5=E#Mxc^7hJ#|+CHR}RSI!4EK z$F^_aTqN zzUrfuLN1tWgY#JOFDx$a;ryDypus5kmFk1p*>Yd2>08bXQ;=;twlvXKw$dYL2aR8@ zNu)k~s_*Lhh)J*$o>%a|_vt4jv779d=~HLsUdH!2m7>F01xNZCVmbCi(F#1=)0!XU zY03cttvrw&Ya+3zc^E?wWdrP3=atT4YUD&a$vjjP?^^S^WDP`uTo!@}DH@9!#S2Ay zC>W+1i4~gdGt~>y!k>xaZnRu{meYRSQFOlvTZub+D@aJSG_QL_$crR~vw&$*wAfTh zj1Dbo1eh;^ma5!9q`BwhQ}eWdsvi1QbN5@Cx9f+8o0|)p5v_aWZK0!9%|!1?)F?e? zId1x9LTOX+GPt3=mD+oBr5oX5QTV1XPJ@+^Z2%de+Y|CJ9!y`o{qNOG^U>}Wd z&jPuUaE0X~z`0XQ%xyK!wNf%}#F!DlGD}}k6IgpMT%mE!vEEHX9&{poI4(?Y(Va_k zN~CrZQ-?-Sfi0f#!|}#|05uHz*X8oa5#9%r_8$12-F!cKA!T(3fnt%c!Cq%4sjfhU zQBe8s@{-FZYPctI^4M!*S^Pz6h}cAkLnxxhROd@!4aE6OD5UMQC*Fld)<**_1Nf@_e<8 zsb2`Rxh@Vt<;%kjgQUtdy>|~X_ZTWaWA9nW;)copm&$;Oe^QYQ^{Wp8EB(50^ts|C)^`XIL|>PS^gB0!pZUr02OjC@5eJB=I& zs)Ld}@Qno$Zz)OJRp@%5$dOd5&!WE0_HYXovN`g-#Tb{sN$MML5G{HO>R4PTC&+ZK@gfI#;~}C^3e>1n2L$z z*z^O)nurr?O^FBMtT#z@YBxWEZ zSPZVJ=r-XCB;p~bAx@K;2Fz1wi^NX;I`z8VczZq+)*=>HO^#d5CI@(+2VnlV42RCr zJ-tjhs8@b2QN`7C0$I*ZD^n|vWTF|vRI6-ajzbx+gc*uIk99N>UU0fi;0L@aL%o25Y# zgOO=+%oMZuC?dh;J3_=MCwoOQKDu99{f^&sWJ*4;i~df?KV52gUTwrot3^0aYa6UT z|B<4LdiN!2oMSoJ&mr~fQ)ZQ3t_QKdym~}k5b_3+V$rqHk85v!i)O9;vyp;_?cIwY zesoACw;RiBVu){V+#r*%XuAp=xf6CpR_&7Hy8 zv3;_)J)FsUe`yBRKA$CbU})bWZF#gV=gv0eGr!N%-sRa@KAsh)DFS2WA&$ujtg`NY zv^>&ztUgyMdkTqvSB0>o_6y01jJ&v1cRt5y>C;ELyan@4;$2gDzLq04$+ll5TU)PY z`&Z})L}Z3%Dv~YiTPyzarq8zD6$N`~>uwwJB*p88OX}Tki`T2xeym3|akZ57sNTB2 zgfk`HxtY9huj>ntsdd&5xE|tBD(|Le-_|}$S^mXx^VNtM_8~Uvie+WiEB~yA4rv^;R(r-ATZ{zOsG&rmn&~CqD-ZC9s&HiPA5^BY{*W9e!?chfg6=6p@cZs%q2p@H$z$efGpe=%E-*t&eNUz8Dg;9sP)D)A ztT^Nj&8kKdW0=+^5_xd((wYF*T#0bG+vF%FB`xHhf-G{W40E5Jz;mCr>&Sg_r_6!+ zACS3RsNHixVIrikhg`b-2s%CDfKx8_M45XW*gowE|%BH>!v zCOHFBRk;|?9=zj?Un&|^dE-QhGxmOn)W=fvNNToD$|r<}XSN>ecICuMq++SAgB>d< zR>~oPZM=mrn9Dt7O{(njX*g0*f8#nzu-v6Gcvz0u+^mO zYIe)GU(?1#$2FtSeyQ;Xk0L7FPIi>#obzcb=YL5MgdHZ6AVX1HShW$;>Mpw!T&qw8rcwC+^;WBH6780GWf_^2l8Zcq5}~GUA6xb=0JB`` zu^v~WW`1E-Z043Db1JF33RDufB{egY zqY2}+nC@!b7sTJ~$^=wVDr%O$O_x|6xhc7dmW%sinj!`^_Oi(8HKVIoQAN+Cse0(y zBwgre%AdNOb{yDlHJ5jkKI=^eO#s?;U%sV&ckF&`yB$hEeY}lIc!~fL0nI{2)ZA{k z9}{pQ3r5SD&3t z)@5i6yvvoI&vH+3jM6Oi?{{U&7bS+=ofQM95&0sEBpH}%N>qvb#i7nyhi{Ta8#q>Y z(y@hmAk>HBk*#HENRZ0(B=hKxMFq5%p;RbG&TCl(D|$-Vvqtv~jW38{ON|i|GZ5qbsyu*bmETMIDji$ONBR29 z8(t-24%~&O=+K@mZ8>3Usrl%ehmCQyYK7 zCz4|WD`J-xdL&NBd7)@_tBOhtZ(1+s!aV!4D=!bTZPEQJ8D&|)mZX0C*>ubJq`zT3TJ`#24qsTjw3QP!ul-}Jdg#T z2V}R&D=AX`D$sT`Z`LN}Ci^x_0w`Rc11|f@$|+lwHtaprWYlP@#vQ*V@{;pufEU5Rdz}6@84!6zq#;Rug(1L@96Kiul)kkY!tYFi+A+7WfS{t^41Fx;A$Gz+H&h+ zda^43%KW>3L`3CNvgeO;3#7e6l09+kV^nA~+U8xPT?|EB_uOvj3-I4BtaDG|Qg;q))q3=*nB!I?qQJjh^*uADWZynDusXQ9E@IE(X>fU~ zwbMxm2tLXbf>v2sH)h^Fnu@OS1>>vh`HU0ZGgR{&_MqD}ZYrlHk4zq2B&JPgNQLJ~ zx~JEZ(-BC#8;e(3{BbBH(!k$Fxbm)*suv`?F{HgAxR9*MWD3i|jL;=!t)Pbfqj)y@ zst;vV$``^gp`wGVwnk8|$S{o?ngrdd750>oobJ6XFmO!PLwrXJ0uvcncV<;gpi;%l zWYnFe)`wmbGY?q9RmQzS`L;eH+Qoa+R~q2Fxp&NF80QRF(9choaP%(jaO`A;W$izVS+}0RO>&6wavELGr*hb!hQ-rB z{I%RkPG8oXwKb)O0<@oYE=wPPfUzglP2dh}>p$gc>)*x2>*-&>W`#<-=*yadQ{2CH zOZg7SkS#oZ^tk^?o}K@oC=%Thz7In&K#xLCa_n5Q0p?UBaRi|nsb$~g!Fcy&SU(=U4cZhOUALRV<_dZUKj&Jrsr|ESd0uc?4j;o_jIlFG}bi-H$-f8iHJo*d5y z!|8<}4>V)%?~e|=TSUq^=EHna~lSUhD{EseM?nlMF+vyzHI-?+=6 z4IO{0uXVTTuDmtGAcyKoq57>RJy3GJNr0D=f2-VOq+Rk~Lo0tDnAXTBpQ;R>kpSyH z^C0(m`@^ARf@>|Qgfxz|;J~0FI{rdm18|(0WmqOHZpAIFBv8o!hcmZPaS_jUp zVH_zvH2qC_EDhgFm8h3e@8VNW^Qqt!ptP@+ulNeh$)ekhA6xe5mT zJ*fj&z^1`o?0$$La@NZ~-pI!%dnCciBoVyp9}CKJR%5m13wha_`(-P*Bpi%2s516A zK>n~IDsB1Asy4%I>+Yl(RECtFU48;O`_zBYuzsY@>rI~Jn1>)J2l4w%Ji#G5l_=B7 z-BmRk?-d43>*q?-+(%*Br0S{`emc6!K~0B|54itSF^sEI3MI6Y=?AT1;x%Dv%HHTu z5z7FSS$o+noDNO4PwAL&ol~E@P;V0=Bh3BJ;Stg9lTdl{|oa{3K z&U8IZiSkT|9GWkv9?Mm2yKlaxMcJTLhu@j;R@`c8%GahxLd^`v6&p7x6xWfb7zr3C z-gIYLbtmB&LzGi69y_^m^S~34bPz9Kf9-9piJ<|X$DQpP@@X{11Jb3)p1(QcTz<#z z+49IMo;ALTJ+44c5#5&lR?dcnrC5F+oarf;@m@=m;{8N0=OR#&y$CwYtOtSJ8E~&~uzSXQ53TpmsE>o4urws)^ zEs+z5B1pHSCl!QXpvSsIX>AJJC>r}wBMkWSFNbjwZ?bIrLGUjoL9eTz@fV8ec4U$h z-0$y0bE9@j4hEQ#obDQUa?Q<3yvw|()jUn;kQ{M=%&Y4VluR({p3Nqu0*;7=Xf9Q= z4AXeu5~yb&oddRv%OmMNTAQx;_%T`J>$H;;SY!~05Ll(RN5GV-PFBE}b&9X%3WpKH zJ4n=aKLoN>X6`{;Y{+Lkf7)c{`-3yehNrX%XI+|R#^b66dPBwl?UJ(n~cFR0=eh4o` zvR_o7z`{N&*`{YX6A1f@En?1K+=Qu9)G|!JkWwx-hif{bwH-6`JbeBR8@q)ULKLnG=$_#nkB>~+vZ}%= zj~}ckM>cv7M#m+ zt+gllZ3oL7&c*UsSuJ}kV2(lup$DQEU#xz2JkCW68&#>iR~A`CK&gdB7-n9vpw$O| zvrvwD5!JzDQbXKK5e>L!iG`+HHv=kzvRbF4gUu?wKbPs&+^@z~iNaqCPH6@wKZeUL z9~916!lgn7uP8<)!$w5b0OI-u0!`BqteH<`o5Is>NgSDYr;o*hLOz`q6N=G>(IL88 zFCC{-Z?>vi{ij))$=qh9icNFuLVGm7i!#6z3?tu}dLtIR(s3X=e7C#5#WWz@;|5q?`F3r_CbmNt|i#GDas*Qo(#|U zE-d;h&UZhic@_&lcKF1BRlF1>W>yO|W_DLHG**<^MU`~ml~IsLRAPi_X88CzPV~3S zxy~{(!v(pIyFw;(g&5alvttl?z^tvE-oRMf^7_E0_t6!fvpdySK_~rJ!9@3!bZzJ2 zOVpM0hnPFrSHZ|FW_R-~rV{^FXYS-cw<9A4&;uB3;Bq!)R=8x%VM#>&wZ{SRR0Og} zvvH)HzUkCr5|1M9L7F`C`zDPL9U_0Q{f~~j94E#=3hhBLy4Pbs^SD+Ucu&Oa=W~;{ zOOSRQ`K_L&ja-56<^vQ+y@iJC-7pT}Y?3w@^OkICmeJLoTp<42b}V#7F}yngrXzRNheJ~aL8#qbD)&%W{6{!& zUgXo1P#9S+u$p$MR~b7=P^!58_S{-U=8dk;0v)Hno0ZbQ80rTSpVn|Wa^>`s2J7FC zRMBCr_|2)m&!M)NfUd$DnESj;!QO8n(353xEmG|??O>nGy9+U?PAe=*6paxR6X^iY zIsQ4O$K|^-%LS9gYeI$}M(U#Lt6<&7**!nyA)!7Xhe*UE>!r%N;`|@s6bQNjF^GvR zueA4#k-5PznMKkS1He|_xud(L@XTPWqo9S2_AcmVD3NIyID%XYV~^6{>k4=lgZQQ# zXatE_5znpa%dwI?#fyIlGgl(yM_0VXtHjS!qg-It@aoru*XPL|$L7+`*=kf{CD?J@ z;S%m6L(d!Ck!=1R=V?GNxz-gg^U>azI|~;bLuiSal*HIMlDT8DfU-{OLi^Ycz}w!q z_aYzu9Pt~fe?r91o41<>k88o|QZFzqRd2j;rR0v6UqJ%=xOyGExV+v>cm&+{zx@|5 zEhwY;#5b(MF0=9^nc{Dla9Hc3T_n)wNLG3%R<9;nf;r7)Mv-v6=~!fZL3O{P7Qtcg`J4$W0o0+ofJO_olO@TRS+bZq^HCM(YB7^ zG3{njaIPQe>H#68dg5KcaejWZgAgOFs}G}O7|cX_+Dfwq+Oizu)FjkS7UGZWl+V;Y zZ$3@WH|6~MZlEI}Ny7DuR=VIvpHKGvG)J(mD)XbN)NI-lpqwpaB}t5**d(?c*?6h0 zTCuR>93L7{6m7x%(LHKzS;qm=CaubE`TmRefax>K6B{H|y*J9cG>?Yx{=4&YLq_A5s>R3UX5m5k4ui#ztmzO`tjZZgSWr)&t_hzv!sGheZqh-w{98iA70ch-Zl{ z6W`PT3x76w)@hqhzW_gxLp2hzt6{hF9Oi$Zv|wxOXm-|!yI8+7N^3F6_7%M35F&zo z_PM53gW*OL$6MY+xd&nLLzzdR76p`l7OnTykG!hb1`|VCQ&6v=~)stHyHN#+cbO z`eXP|`;3muD_)&xHt?s&Kdz{0^25GRwS+sD9qpE`5w+d{WnPbkz9PPMmH)n4a*Wz~ z2F=_ZnfZ6oem^-4C+GS5QhrBD;@<11e$ho%v-
2d5WpocrsQ1YrN%6nvvX!XcO z=~;#(;^3pEH(fu5!x{tJ5GlgM@N^59gVnZGcF<<1yOs@t-FL5~*_-fVVHa>^XHHD? zH$z}WfLrh(tvkkS;*3sl5R5fW$>o1ClpD0TW*qbhauHw4EXDVt8T1FQZ@`Z{D5)@Z z8UKozW0`td9-52|IRK zbRi5c+U}K*dZSognjU^lg53W$Ke=!eYl&1|uy>rE@@tDo>3}bp0w#ZVQDEKc2QXb% z_ousm-}KBvE`4k-am{$cGhQ?Gb!mX6KdXZt0l0To0o((PJdY@ST`CM%O{IiVXB`5c?;<9)(uNr@3LO$CD?d)Z5=*)|7(HLb&LeIF|#2ZmYee*OYDWJXYRqy z0C82|jm4+b(~q|Y<@Trdp6pOJt1dL6&mg=z4xsw-JnF*@BNkA|IPh4*N>Qyf;1nFCybKYrQ45t(havj_M z4+lFcO2+~ZbZ`jN7tXO+MWw%tXjZu}5*$dXEZo-+oj=w{g96hP+hXKOJ!|VOu%1ho zpt+g)3%u$bN}H>xD;=;tJMG)XnF^DI*b}P(){0|lkUWY%Y&l2Bdp!LQ8SIij&I8D1 zPvw)JZ}NrK7;u8rd@r0s5cftWq5lz6rWb;;XPqV0J*DdOa&~0lz}{9=qrX>L;?<6G zyfYD$R4L-;-Z@nH$07b)$pC1+zAvvzS;zYRj~zz{gzV_zZu0v7B$%Ibod4y{p^M|6 zjbe_{Af;SRg-%yE6-YAjGo?5}(pxvLy zXQw+CumUX)Zg|;vgbzSF1o<}+mqrm?3uK}<$_l;F-nO$0x|rJ?SUG>k1*lwf`oPFH z4c3gHr2DVksoPm>->zM#TW1Y92Hu^|e<+wmQrmx_V1A_`Z=W3BUlQ;So87tHWxh|9 zfbH-1R{x^y4%evtYyQ{$B9y z%a#SDBNPK&>qN9yf;6*=^K$ulECfGqXD>gGkF)f$ER5sF*I#yd8R=kuqJa3;hjeGB zZl0cF{}i?4^4gt`q9I%lZcuO@pwcXO}cvS~oosM((qL2#@qg$eoRm@5su zsC>U>2vAQnFpnkDno=C~o(-N3#v-=TNHZ^e$7Cb1Qr7@{(ZQMvroAhHp{d@?+4{9B z{b^u~UPpO)UYl-a&R$!zdIhZ%Z9c6CUijSv*$6kqrU@F5n@nPFEwoc8{;5$`xijBJ4B$ZsTj@eLwoT2&YC zo%4kU(nrD0G{B>1_kH!y*>=XiFH57`=@V%Q{|5t0ZTfQ_ET`(@C{!_UAGH59R{C-! zB*ys5QIAsOydnA|>6N}5bXm*MJB?E>E%@{45n0B&Lp<=ykq)evqsi(IgB+`%lmENd zpRU<9(GO6<#+P=2qgt855F8{?c=X+;wGHrvq{1OI%nmUqjEASa-+b17+{3&qj&Ba%FpxfVO%7$Yh|?9Z5qT*>E4Bmd&g@{qrAflV{lLj>is_MT1_ zxCLr)-+{mX3kFO44-8hRd90q_9xtqUb6{6l2~IaS>hQ1#1DyuWTP?`w4UI)BtD$=& zaPB!d!LO;jY+I&rQceDW)61GMx{7x+3|b)`&cK_N#Eh| z(76vc71mipkiaOGu#_g^H+(`*TAHLfc19okeKS9Md%EL(Y!2pv{ntO9g7xto(+{Pj zZGq7$^8!Nh%avL?O-!IMEKtHt>aMUerxc>-3@~fcf%HneRC(#@vHfI8aqkQNaq6{U z$;auEDcU=A7kS(KPX>dp)cYrc88>UNr3+X7lfg8sv~CDgXP!((rGelyWMhcao5iz6 zJD0KSVMOFOq_8b<`M>+g|C<0)v>qM8li1!HyOQv`4(Q3_@RZg?EwGdhg3I6ipJ~84cllwD#6G}fZWQS>e%aFSpIP!lHuqQ;7tb=e2}J5T`jo1x-yc5{n>Rs!T3J-?sxo3x8tF zg*XBSZAozsAC{|!1D)9}f`Lv4NEmO_ zcXr|6;^_*~3To#_Go0>~qOr=@7P>BP$!1V{m836%D0LpQL`!n%qW zTCT#iRYJ9mGvPbRxbz*$B>JrmUrS&OGJbQ$_KVY74v671PJNQllx9c$mk#pJ!h#X0 za7J^D`?97YU&{-_KMD-r=N|TZ(+ z1A-Fok!ZVWCAFDat&(}>#%qHZ`=bIRS+y+iTrlCzEr+c3zE@0~z6G~uRPE|%N`ITT zN(8h>u(`^14I@ztMm&3^g<&7acBMeF;Gmgr8uuhRGxY0TK#VeB0h%7wu#WH{LW9tHS*z zo?J?oD2$-K(!+DB{Xp8abS$M5dg4PP2HbI8PTF_vdIq`=7AdCVSSvAkP_kc+S9!`> zG}@_m)hSEbEa=W_viKPAY5Vufn#Jwi{%vLEIqFQVDGh%Pv}jt|a9g1CW|NbTPm658 z9lrm3o0_8T9!cjdW&{{aqo|LXq1p(Cn=zaV0WKF0n>_I~PIFe*kF@|G#c~3>5Z;?m z=f$t4dO_j6Sc9shG98ECp>IcOj`Mpu?cKIymBA{kZ3uuvIl-PAlOFBC7W$Op6|xl! za8+gLf>Ql0pTb(&XtAQLu+XrT?>|nQvUq#D1D~Gh;<#Vl0@nhv%QENGC*cllSX)%er92qOES8>+3RImRgQa=LdpySRze( z0i#`^Ao&Mh#LG_J+G`2w&p3fz*SmSIO8mB|fD|6q7xJgswyu?r*uu{^;>l9Nuf8ty z)+aPBq;}%$fV{b;s9q*Z=J82ow`uT07zmU%U0636u0-dZ0xXqFbj{}Hk65zJO5aqX zr9K~>)G@L4lDmFyzlJN7VJQw&HTWXl$e z&D36I!g=V6^rgX&Md0rcKgVV8ggx@cB`44m1uI^uKfZfCAByG`57v+ld*CU=DTij2 zhZ;2*lnsu56C~tbKcr?p zsQGcswFGKH>{SQ;4&`S^&DZ}p0@HFXOJ)n7(KO2Vj3x}|&CGg|A!9C#WP4H__<0iB z!A4o$7xm`FKD&WffC=uhaLGz}~sZBM>8JGSVh709ic|OhV zkLR2Uc$(eoL}d>CiC?zKi$$bsv-tA{>``L%dfLR(yI)@??55jQ4*V4h-_pU`1mW{g zs!rU~T1()M4#iBq2CWeT)&>qPhj7V^ zLK@8yi!vO03|U7AI_?F=Z(ifcfr!6fbPGS@5go(i|HVkVW9F4s%2QggxHy^|d(sj_ zL~!wSe=pitFL)$5H{sfQwHMMv&^e};I#Cp=GB1fRX{|0t0$r91A6c7T1KCsOHco*F8AbG)6i|` z==pkegd0O+YLrbU3td^A+|}OSpmqZ4p|9)FgA;LbI|lAZgxg?igs*rysozyhQ7D4R zAjM>*a9nWuRvwE>IXmNAIY9;-gYnjZHr=sDS()41*N0E!M5#D3c}m+1>jm*eGvL4V#aqj0+}t zh?q#%Zz0TG^T)Yt>DSMq$%%1ZZx;tvUP*z@ch3hSJC`K*5DHn6CfWnJN@8-@%iih4 z8Ue@@s2FhJ&b7<)ZO2UMb=DL7La+3~xF5_rLd`xrzmwKkKRjKwv+uY)>|Uu0JJf?r zug3ncuB|A0rANov`MW)j9AU8u6c6>YJmxeprmOz^z8ZJ$l4iIRyS2M!q_goDaohJt zNW-i-&W=1&Plp?AWL6?^?0Nr!h?tbL z5WP*?9LrBn&*AUxW%C8prD~dZSZ9PbT~A=j^9}T2685DjZyjsy7CPxRr8X!DSSb#nkEB%W2 zjWKtG@XESnIejFaG~_}Xqin>k5tF%Z2nL#i(dsW1-I&f@I7Hr-*hpL$Np#rY7bbJc zN|)%)ODbLs_?2<}Nr=LK$-zzBq`xlTa3ujRBJQ}DV^ZEyUdwT{`Mf3<#<4Bu3O@|2 zepc0Tb(=SwQNr6E*BNpMOgx)Ly)ZPQ2^F=@EU$HHZU0I($Gs#w@`#II$(7W?h~-0u z%~YPykSksl{_8eB;VIfK#2<@qW%A_5yW!T(j)D0U(`f$O>q-ZgJ9(<$Ptq7(=C?}C+eoFfKf3(xfuhwf^~%_eQu!4zQ3=d4QR5C@hc z+R2*Z%bWU~ia9VY!j?tmRAO7-@zBXdQAYg??V%_c68(1JN8r58VN5b3on5vnZ@Te= zC6e;>k9|3N*cHkoxyPs=CnQyj*t)~F#7ZyW>ky2Sko)2<0FwZ{^^KdWB5dk2Jn(8Q zFk5$LQW;!F@sIn-xn$wXjZ8)W2)MDy~1-(2N$F?zyWJ zv7M>eG4jp@c&{Y`v(7pl3WmECY`1l?dNd|a4YiOMhtQ(nUh)Aik(M3$ zLavfDxUH*TDF?2A0qo%olnR@T_abVJT@(*$=N ziP(;!XN4vctG&dyp&d^iffP;BfUvH+U=h>ONG>0uEyqr_05?3m2c-;5xUy}8l;PK3bf)&%fz#9KKGj1SF$Y|A;rAYw&Y6!7 zAFKB|y|v#f_qUb@;I-)7S}n(urKi*-vw*6tlYX^WS%9D3c`stx(Q)L{+D=PXJzG$o zBzr>YRt;4p=+D+8E&b_f!L?%T_ah2<@i2*_h}`p53+F5eSM_%bYeW8(z2@uV7!D8Y z(eyKNeOmjcVLIAW!q1xTLNUSz+1`%(LJD_37aUvbYKw1&lj%GoqeuHC0bZ+`J|2P0 zYpx;7%F7=DL|EKGtsM=VV=r$6A6y=L(zy)?OhUF}XJ*Da!%^qt3O!$Gc_h$ZUwSUx zH3k$MSD)%|%aeLPMU(49`n=z}&2qa||1^konNZ+_G~3N=c1+vTCQq`MGfLYpNwj^l zi-{|X;rBiQYUd`N@1*CaTM8$m#Wex_B0h~A-)FNLy>F!&h=dD^T(yV z?f0jr%fM?Nuk-$ad7j*1g_<5B~@%z{tA z1U^4%@U%O9`4ioCxhlOc6Z`QH7IW?X#O99Nou5@XkZx1aB7MDw%Xpbz*Xv~Vr;bPE zNk9UHf^9R=awz(f>*5yqGkatSt_%}kr;_hlLqS%@1k=uHyEvp({_-!S2gmxwdstW) zq4}AeQ*6hb&pC}~oK()>0Y!Cyj|I5kkTSn2?17laPWM)A(We7w=^G!V`Pzkmjn#5z zmt7aN-H)x`0zHT6%TvVSvj#gNh8>$W1O?0YD3AF5RL{WgrikM`{cGpp&&%$^^lw-D zJoPY+^vf+5Gu4Nzp36@qis*VI4ObaCmv(%d;^}i@IZFuWFt#a?cZ!CE ziuPo+06nA(xI2fZopaI=hM|htQ5sT9L%8o#jU6TUayMGix4EpUElOG0X7kL@5t7(*t#loj z0BCnhU~R`4<~5%w9k~VjA(ndmZ`U?y-(x~r3SO^rSd$4Q+<0aX-BUkCv=onCh?FS^V%1(b`(y(qUw&|+5}pVW?E_3%R#VlsUxU;wALtjmgkYT{N9gv zHu|Sx@bXPwK#_rSpx;4gWNGgpT9;!#i}CV0Ple9VPZ#LXb_>^B18j!9)&Ou9ZpkNk z`L~7MokJd7GEWZ4Xm?=fc8b*6=Sx5NkO>#XtpNmuo(IruUsN9c5=jiZ@p zhhEULp{BO(MRN_~>FCeD^g_9gsrYC&*Y%wXQyQm-)2^32_#2*=JYF2(-n%_-jC9@v zuJB%T*E?_cUEcds?=qcWl9{$BtyWZ9kJN&C_|L@J(?aZ!HF1Qx(nO028 zh7r+1oeRX%NdvnUsqcnvqRv;)PpHUd#)hLwxX7-!ftPpNr3{zO>)shZ=dg9w=aDR3 z^9g1kd7Alto5$mE^%e9*2t}{=+s#mUFI|iF(KFNiHBvJ&^M%=YmY4M_bJy6}R?)~~ z#w?e)Wph=ur@L9zwr56HY0o)NbZWZ1_xg2mZ`TAU>+lR~PLX-nM9a2e^!9i9JB`O@ zV=bYhFQC-Gb~7SN0my^j?S8uUozsi^gf#+MEXN--U9CG~$rjFOqAUDv<<-sg$N_sscDL-=&nMc?PlXxzQsHmQ}L7=PgL z>`l`lqNbvuorK|8(>CjwKmdmVk@^`;12`t5yscXnVRqClA*8uc&ve%k6zT0f6;b&@0- zybK>%wP?ehGpcO*ck{;V_r5nYL3XL*`uwQyScVeLRs2CWzeeS5S$bOCKtym%6o%Ez z*kPeVdZ1^LUa(MW5u7NcFAIv;!uFsPhrTId7OK1J%(CgIQZdEL+I`BYw_DGiAb~LV zt(UCHPRzfXMWzWWv%4~TuX_aTI~J?c`_XfFwl06>6ITHCg_gY-N5xe{(zdW53v_Dy zjC{H@Aq&aHr%I{pD%67kuvXrSE>7<+7B8!twY^=0yA+DBmZjw!iA!3wA+A(@4LJo= zV*)5M$aYq^4B-~}nA^y!N%-{$Nk4pXuB3dQtifSByO!x;ROe=bZ+NWL0ld-*aZhuc zwz5eaQpJvPo1j4X!lI$kkL7Ih@`Ob(7HIPFBg0zq;bQ!~tED(|C8wD60u=h{AW~V_ zU=sS_0gEQYPkFnnqZx8a^CihW&80RR?S;4Gx%N8E{i?`#teqCM&y z`9>?`Y!QFqHg*I$m3=3ckN_Q#J=L=k_258ra#0?l@i`Y(BP8RNNB5PHH@nU0J16<2 zBKPwb6ncz z@j;0z{W1jg;ws%}a=(1sh3t3CbsywVc7O>M1b8KF=qoZVCQFr|k^zWmVEqd%64}Qq z_ia@hcdN4VM^0n6D+Rg>vY7J1Il<-I)SIvD%HbJot>5mhilJ1vqKLSPC5N}A_^EEy zNzFE(8BsJ9q&w*Rg)0>|%j-$D37u%!lY!QT)qP2P5MslU*a+nB93fGL+s9`b)MF>I z)}!ebxBr4fgMoy>5W>O*DZd1%!{-%P6XNPXj{Mum)gx^pvD0Rff{2w*VEw$fKImWx z&{eY{pXsjXb-CDY8RJghPazn0q*EEB0#;IKuy6#$J=8u^&0+$gM#-4s$?hX9Hjs8A z+?EjNt)$4rQ8)}A74`$ibKqe7oZCl2>h`*}veIhbxlVv36K>*GygJJ zJO*Uk*DP;WJg`xM0gqIt__=LI80Mu=KS{oLeEqIrJ{?dGyi)e|xGVQ9aelUHWQ1VT za8)vCtwUr(zH^+WYjGH}{rWcXNE$gwU>U7%`XCJw5yFuO7X4`1sN33o$i2*^}?mQCQ+&z zN9^pyv+vu>({H}`HOfDC$NnCA`NiXV_kZ(#=h8MQBY!^w4?4O{lh&2AzV)u($5^-* zUw?D@;^6~pC42u}@1LJe-+8cK-22_b)3cM4E~zjslkeH+{(iU7d8f@SCK6m-(`#qY z_2J!Q!P~i3Vf*-$x_L@`x>5}&fS%Q$R;XJp*z79anu~fIqugs{YmA1M6Wg08jS^SQ zhVr;De$5LRI{Sukh?+|o5av4mS_{GLIa)H+g?&|l>;^WtgxA^vz>_^$FJue<5X0%`->)QZ>BsJ{wBi@X_!SzrOj==#y_9)h?UITINZJU0`96 zI*6~|as|(iZh!KvU8KJI%7I_>{OE8)(eoo3z!4AN=)@~}zA}#-?{|xyABUYcEgX+9 zWyiNR)jV&PSc-ny^a<0M*8RA@tV*NZ_LH_>nLRU3tLn19%(y7}@$IlE`q9Cyv?m+JD*_%Dh1p*#t&(mGE~G|8qy30!dxHAqR8yU{m(-I^QZ_v#@!wci z&og6{q~r1e$rh_r%N%{J9X4O+ML$c@{BB$~?IeS;&AS<&F|nF7_dNSLZoVil2HlG4 z+8wGX=d|{Vhz_2yNI?E3d^duuMak@nj{XuBTGpUWS#pV;{iiU_V-PT5%=2 zyy2VQKvGJEVrrxTasH(jF)Gi&UxOe6Gwfg<#xS*3C_?0@@e)UM&si-s)O4yWkZjFPA1gM7$n8 z%`$VPxosX<_Z8yKO;%%b8qK6s;?0FW#!feSEfYJ>h!BY@=q2WWuCS<53qVg4GM(BC z{7q((R;V*xQ3YxEYgB2Vv<%9}K}3XvQ+IEDfuymQNc7Gq_Xqx|A~-G>Y-4)3;?bDb zRaeyq)Qzz)6TlfN>TKj=W+gA(c5yYCI|eVFM;5#)b;b}*B6ruwz0A|iGf1#bt|03fGnGTHVmL zo+B9uWPUD6B3W)`9w$|{Y!DgAnnCoy$Y(8`SvV(_J{D)9FMveNV^8aRO}-R))%rA3 z9VPoBrYr>WWwVzoU(L`l(@mG$2gfh__DGb*OkGO+dakr7O>OKuso|XJkw==j1$iTyPxrtZmYfLC#sphhpT8o2Q#D%0os_81IW+H1+ z)RMQ~c*aQcOEM>T=v zn?O6=vM7ZjI!GESv1@u^tg?oLA_5^i@@z%KsjM-0t;>pdYb2YOOLBwrldOSi(;lX; ztnJ{nP1sT1M13qsI$LsFqkd7za!)bWm-RZ|<-|zQz}pRjjKxxgDP5BkBO#KFsRS2H zFCyqf+|u1>D#y+Ahkk%aiI<>w!Mvk$H z_FczA(c)90Q-uXca2kw1bjvMmp)putDNN5I3XNqxC^X2_@&|{a{b6H+@=Eb4HNxpa zWn z<^(R>btdspvn8W=7Ee}6CG2bCDfxt0)C#S66|w8*CD}9TbMR)Ojw8v@XDXX)%`kdk zt}Am54#Wd_d_Z2b<3sC#JU$9Nkcs(w_=k%jypY4AO%BN8WAdh*z$2r_PkpD?Ch&rh zG9cQ(%r30yIceDnQgV_I zauOOsCGUeD;<{crgU#q(=ofc_y*A|pg6Rqw$?i;ChDNDH7u1?w=A$t3q~+ZQ0mQF#Rs_b+9f@_aGdsNCF@)T#sJ7_uROh&A$M5h~R|aJ5RyaQ=vnN&3lmmEx_!j);op zHoZUI`)MGF$t4VhfyWfurEqeuf+j6t;B^`(Kdfxt z-P~Fu^KXq*Br(TooR_nnMjX7OBB#z44~;L)nE?;KgJl6Q=94+4MdWXWL3GcUlbO`q zgq5(H=@k?Iln0^idudp{xJKo^g?)T#Oqoxw-(K31B(bc z#vj_z{_uoV^A+RSM06+!P%jM$+n2!Qv6+nYKnY;aX!{xF=&!tMjgj_ulTh$D3M; zRz{K%K()5|C0mTr9u+&~mb&}mx$|~-S5?iSiI(Z$au>Tw+;g* zOoi`N(Q~3RrL6?Le5@zNjy4>Jg16gqi+H9+SO==3*k9Jv@^u9lbhs`o-L&~|mPEdo zm)!4lx-Q=b+kj;@GVMqd08nk%z@e+socl6*T~@iRWkeUA)0tv6-{=T>U}8+%heb7h zPH0*4Rq{f zWxdRNbxS+nNjWTCQ8iYXnvKVwRs-&g_T1}mzM6e!9o`b2)7f(F2|6k9byKXq9Tbt` zp26P-vD6lkKW6n%kzZ-;CLXN$tH`^#nJw?^0 zf()XZb&_B+*r1h>?aQ)&*3t3$e~W|xvOGu^%n9&ii_}|8T;n%!woJC^VBUezlXQU zm>-6)D)YfQuF8CP#9uy^PAIf0Md%xTjN$&sVypZQH-oFpFGiny`?zEEcvhD)_36tF zTV?)n`;%|CauU#&4+6Kw=x~!;W5k0S$>2sOUAM-q{WZ77t>Kzm?$6nf>x!9!Mp5WK`AciZN@n0H+VW)@~2xTxDAOIKmE+V)s*5GmJ+VmJh zs$C39yUF&9L6lw$mh>dU;#5YzZlf7%*63Od8fK~P!~C&+CYp{UZkx~&0J-L z*-liX1Gg2)Q?7W4DUv<50l)0f82&zF$goT*yEkb&o=e79QpHg`LD|HLVJsd}%^aHF zeETHYp^zum2APsJ8_YEG_}MN1S#YlbFGlJRQcwkADG9-9HY2_)GBNr_Gao6o!kPlb z_})Yud!^UQ+BK_u#bA^-4zz$1C-EMh`RD=Ze6c=^?)3y4L5|vl1A4+ei`Ve6z5ihE z!M6|iU3x6-L&5tZeU+`;TcyM+B4etJicZ%lanPL9RBXbW8d9cIXV0O%L;n^{p zNY^!XhICeWXi1((HdW{pp2s%Yy17vY8nA^=Q!XZ&-ti~b@nPdCBFNQds0WB$kfrx# zN(s*>s0_HFL>{?G^E-Kl75Venp^eDvuddLhf{vE+#z$sexa+@RW&VwbfK)pM=Smjc ziGINJJk72Kqlg4LUS~_8i+=LO*Dx==1c@Y}f>+UAlAiCqNvkpf2L}H$iTB?^ZfH7w zqhdzGt+GuVYj#gXi}c^s0B|F4YZ~=u5&GP3qbc80&2k{Jmh_QjJKmF>yjP`p8rQ@~ zY_6ic;r?L1|MkPi5AU5m+>82kH2Ny)FKJUn{mHhZ6!7&jZ7_F5$%0uFdPr?p;gf6` zn|&zX#~bzQ=4=pww}2+<*YT3jV#W~d`P{_PLHig1(cr0jvn65SMg3-df`2+*Zqm6(dBhWJ7pkko9XT};smXtOt5t)Q9^$@349 zV5^79Oxqb?Cf~bASjcG3%)hTbyq+7o*X)d&&Pg`q zob0n~Hr{{FeR}Y#`_DJ^=WSx=Yc1~+>8QxL<5IRTe2ul$z2=;KCFe@0V3Xpt7=q^nQ_X^*h6Gj%!K3Cp0CWqk zm-8y~l3WBb{plt*O*b-{NzzB8*iwY zZY=H#hJXmQ%19Rm?~z%%yOw3gh^N{E{E76fTcfszbO;MYa8Ze61gB6%rFo6jsGxSN zv6%3$hy#Ib+B2-vtNOFM!9U4ZkZxVq1|`L$)3}(%mAR^ee{S2x1gSN)8~(qxZQ)H? z%%I~MSt&nxPvXv7U+F(z@D*NhtBtS>u5cj6TV0IAkF`V`x||aw~pCIc0wMv+xs2gwv0*bwJet1F8--1FF)x58qnKzO_EPn*jnV z`kd(k-;3uw7w_aj7hH9G;=GgWs`5Cp*mY!-F3z}{X32N#Zv5)$H+zq>qPXci%DM<1snwc1CVr!r2m*r%S2Uc{CXE;T2#v~$``w7M9K{PL#4SbqpOiSqqf>k+W{5(%3y0(% zM9(SMO!khWCN$(@B@4N#4h-b%4%6w zejbsVi7Wak0dC%iJEZtr#_cYL(b;QjmV?0)raO|2V3wyedOo4fHDzHv3kbW^#-?m0 zo!lZu+gZ)36%k@_tC~W%Ar^)NPp+n=u~9;MuPDtC9p>U!RjOe{$^V?_bUmwjUiObo zaggC!$Uwx24x(caHjk*y7!GizkvG0ufN+@6jI9X`1>4!Ro%ohRV z!e-QYU__z$MV?LQzz{@TG&F(p54u^kBtg1x#-5izlG6%PPC*JLv|u%pHfK(&E2EJK z(>=7D*udZmj?W}q0r7t z?Y>e>y6fl#*%3W2UELQp%WBo{v{iQ-Ge4NNmh)A`X;nZ21vnIN3`GRp%;QUmM2EWf zJ%T>k^Fb5B`k9k`5X_XmOlMqjPHG-0b1rJ;D@>pO;N|WFlm*tVlp1XDG;COZ@zH~+8_bY1;+M7kVAfLqnO1I!%4hL-HPIEj~v zV_9{gc@ys)3E^8~q9qJ+)btXvIi#h4P&tZN&Sp$OAgp~6+ufw3+AD~~x^Eu~Bvtd~ zS4Ltc0=oz_t$&m;deS4@Vi%G=t%y~aFH0w$MP2191LrCGu^ zCP?m}YsPy4#jr4Q5~*ZUpYT7mpC;+8@E|(n#C)?G5mvz?7SKZFE*X~_;@SOuN%N9H z-|*RdoR3MrckpTS1gqWW)iyTu>#}-fjtSxn%{-ESMPGgM=+n>*W5t93DNSP*nw_(& zi9j`PWLLY}Ong&b+GX0ID^S!uiecJsUA;_)06bEbg!GJ5at<1)AS8!Y0Q=&PFv|;q zxulw>g*nZLIYTcH`z9fE3A?iMi02y>Fq@P!q#jV>ze7X&dF{M}jASCDx2|QjJ{{|TKG-Zq8ZH2va zD9pLOb~HqyQMISbdrRJnj4C*_u=!4AK%5itGUZXqo#&?|d+`Y$cOUr&>uW`m{iV2O%8nhS)E_q0wzC;MDbv*xIC*CMias^({i3{xda@A| z)aWO#)K{t*dYTZRuCyGjK;)^EvqpLndy&}90Kt;wx?DX=gW@Ol6N|O8P(8vC_a5Tk zO{E&H{|zKNHoUG$nUU_zsezVn#+|xII6iP7Rk{hG4>!Z78UtOC+927GVdzKLE-2Jy z9j{6;qzn$W<7}BxznBt^3^1GGOp`M&$%^vT38S=+23>X_j0CsOH2!PJVCW(~&t~jP zfj@n*m$eHHsQau>O+eyZLNUQuS)r55Tt$XW9H=F2JPC&5rhcFa1Y}e>VI%hi+f+8M zyQ9V06kx2CP6fHnT~CafkSl>+kBRPE-#s(YHxFba_vi7eO4K?&8G)L#G4^j==ibZQ zxP$Do^Q>wB1MQkQtXBiB^LZ}G=s!B@_&V4>{Ho-YUvuFce8@D+^9o_nb z4+W2U=;2Wh*YK!~`RVWv7f7xhCL2A%hm1x&WHjnw7ma$j35|NlfXzbzY#wevqaJNS zqaIy_Mg`a3V}I2C0{q0^ct7#oTlA=pO$G7ajs30kV2D#a+K5v<;$a`ju#eVos>ka% z)#G)X>M`R~ucHVQ7qIaE-QFMV-#Xbp9^5{;H99&`fNEPe0<@zD5UDW&Eg=5C)I!VW zaMj2r?GZi-F)_MImB@Tt$&n2>FgU6Gi|dI029X@YSRvCM)QQsqEr$A7;uyzX9OH_d z@cjd`V@J`(EqlyCjAIUBoOFX2C!2y8C+z7z5l_FShCeO27dA1x&=1thf9uw9xK~|b zIQ`2HNVv3b^RHo;(mmXm(mmvq?xCb~57$zOL?g znjzdzn+fl-;aV2=p%-ZQqAcL34&%GOcA39qfSPq?j!Y7ge-#|s8km{F2@vq-oPsM^ z;T#uJ^N-XnY@SD7-;Z{FO(?Mclss^>W}nNd$v}ad6jl8Eb9jrVBvn5bn)qq8dlhhW zcx29rp94+R>6NlA>PiJYtj#R};da0(& zKUsS>=s9S^d>9|)#qo@hg=PM=GOEWcBZ48DH?g9U7L{Dgh*Nhkv(C3Cnz|}an9B3) zyb>QyPR8HrPZ?dd0tAlaLO|tcj6;J5S-MyolK7 zbL)usilmx6W_3Y0O314&m-wHBXVGzSvXcr6Vun19t8pt43xfatp0HLjAryZB=Rmty zdHIXW_c48o3bEyd>Z6^gGKj!$z2eLz|`V zOVX}6r@pDB=G$Lv7%)gJq0~l6wZrKlb|jCdXEzEYfLu)C7H6`?vS24wsLKnx9>oQ? zzC)GHpg;3y*7qdZ7niZIqrhcAm2x~w$XsvcePl;WSHNS}tgB%&t!85W*69UNPRTm# z04ms@my2>aFU>mdQMR-EJkI0?Ghj1L`f3e|MS%oO{$KFOm?^M!JDa&}PIat+jZ>G% zEKOf|+2kUk23`3Kxi5r=gy1*Jm`$kM38%42VyiCNI%fum0;$O#dLK@FCo8$o=MR;K@U#VlwlZZK30 zxW?VQt)b*?4ZXar;Z=ECBlEx8E`KXjJBFOMHRQalVK;AUxG8UI$az~s$=e!g-WJr3 z8V}i|t-^kCg^oN##@2%sF7h6ZsJ+SQ6b%Lg`i`dz50R*K#m!H@4piRZ#?-7Kr)CW$ zHEXz*nl)Tc%^I$!W(_$tYq&Wz3$&zUV)Yksq6uW8o2;d1?H@SZ_9e^Z{S4O?V?E47aGS{E-EO7Y#=F#bCbSL^vnl7V9O?1kvwQ$#-HtjM? zdXZa5nq7~H&Q(i`Jnjygg`Zjs3@KG`j>17RhzJDE^oc|%;_6;Sl2Josc;s>mLNw<3 z{_@mvD5r3Ec}Q>7yVCmxB?yCs`>}MToD%?gptdOG39wePw&k zO=d8y=Axfxd0Cs=CS!DmnPQ_e5ha4lZb$Rg>b#X4id3k(D%V*%6!N{mEfh8XK{V7~ zKr)lRDQN|4z^OSP#&iS+ZdqKT=1YH7WRKNYYszIzBul5;{hkum_&%jNSU8_rRuvf` z-7T~j8han@cE-*Ms9?Np&>Ho8EQAVXsDsV3zUTHeISz4sf_%Z&w!{9a!x!GUx@Wbc z2xZGjv!f;p2|Ngjh5Xx&6Njt^|G2dqk6V>0Bce|T&vWvDDGg`@QU6puz+2&_uh`xj z{fZxJBz2pVksZ!^7>(l?{yP}Z*Y9CKi;Qf$mu0K@T0#~hTU?>z^+#Q)%k~|Iw%2+` zJX9*y^ax)ShvkJRt7I{C$)Oe4)VcCEGdu%WlM#7shk?1aWa|D5YoS^Mmbmy0Ee5I5 z#%3*2;({Ra{v{W}(}%uHoM0Uj*HD<0xhhvZDDfYk{xLSlp(IpNeR|V~$=m}y?Q%eYAw)O>3 zRx4YLl@~ya2VJsW`qTp7PRW1&t+Aj{KgG>Db@e>9&Ta{9v2Uoh*=;N%@%AG8_bzBxl1ECO5ky1PCvcb+{*Nu~KJaTjf9u z*1>v>2|UH6KyweqRR|ysfiAw=rsKPW&7)y z5qp|jZ;UZ(B@U+5p6T13S)0*d|75U#e4YT*e$hRnF3u zxQFD9qPEV59ek2R+4Sev4l63BKc@uYI{BAvGh<1*34kVy<_C%Crg3&tay<+9r{-mL zvBubm{+W?Z8sd16isodW#gj>!5_O<5Ak{Fb2rf71@&*#5^E<-$mbFV^WehRb-d#0H zN1nsOTYcc^N4n*!^sJ;|QZ*xfHzI_hgtrwX7u%nzz&3=9r zeICgVnDDxtPK_}vq@a-7)^c>PR={K>x!n^;^_Ek`PIaxfywo9oXkBsfYFZD{i{^GD zrzRenq1)Hf*7SSotCi!Xn%2a4R7XFK7t5d09}zW4zq4(Qf;K^cFnQ{mySl^3S)N;U~scRO{56Ujn*oIAv0;2(m_i{*C$lA9_7NTi~q)vc|)?O3dcN zr^F-_%zN+bWy|23ncBBK}X`@xq><4?2Eq$-Yo8=vJF= zIW+Z0hHk76+uzjO@X@cHoxXT_@5w{i>)7X-9`AQCFF*jY*VffuZT4)s_oggTgk<*~ znocj%J&MHh^LaUmbC5>{0sz$gPoDhx*Yo*eanJnc|8o9%Vjg-G^$8MG&L{pa&$ETs zZaOfh)CiCVDgP;B;5EP>&=XYua0{3B4Dd}FWzjPOd^VqCB+I^b3wg#WgbnCG)xl_=&yQ@)IS8>+Tmexl1@Ln z`+IEgKfav+EIv#}qx7@8ryz-`Ruj(WmG~oY!&pro$b$tqTIXOEg?ufK3`Q)KCE# zm4Y3z4tF(r1pag{PE1GVbl~M8Bo@LCJ88(p0V`*JM)}lr)c-1aJx`5bkJ}_Gdl2-- z!s_MAUOkC%_4iQzXj#5CKTY#;xxDNdvl6#;Zx*B45b_X>*|i{}cAOP^Fx8`fq=-;a zF8(plxVsJRygIc!IPz>m=6}?rn*HkLP z-Fx`t+0#=Leb6LlqXU?K%)hI-s5rqcD^%F^5`}j^=xj-+e!c^?Sw)()Gv3oYzqbWDnVb%EV zeD`}=jcb12y_)dNt-Un`wBT$#)%+#p(K-J@PzPiaPx+GM1Cx7CQsp9YI%-U&ILG@z z!SOe}(;OI=ZdGH=m$R9w@M$5+@dt;4MOKiY7q)=)TcZ4a=TKpoY z4CkSJ8M>_4WX`Vp&{y0L?4c(dAt}ynJChB8aY@qC}92i zIg0OLdH2`2Cj~|eF5ZZCU%dETv~&N(*N^|{-s2bl^yS5Fj|g_;KzR5tYoWbiPsWaJ zj}H2;&a;JVlijc~Ul8l~xQYsC*Q}~+p`!S5&mB`UuAAKW|A)D>^^69bTrzdshdT29 zyO>VW+r4a(zFue_d#@MqD|0-@xtWM@c_EW)5re5zJB>XJ(NAokgew&Ki!A8y>i7GT zqc4(YyrrZYOU+nJjBt*7dQq>dr9`3&46c+6oB|<%0?(lr?&&!f+)bOV-ym=$P0fa% zmKVOO$@4CKTs*9H!S7*oVeF_zyBSsU%Vxfyy5(5{Um)eJNu}@pta%lk=i6$|Br-ll z5p@=CNk$WTEyr$c5elE({pG3s2lMs%`Gs|C)70E9tDC;qC2Q=NMz)5_NB*RL)x0p_ z)E#=9y2CD~?&J>zXQJJ~cbca`RMZcNXl$t}TQsR!*-NHJ53YK)43`dljbM%N+M1Prb&s`r zB6gkW>?F0R1Ii-QeUr^ZkRub89~HN~;AR`62Nevkw*e&?c^&gE2Xn|JA#J5d8|^CU zeTZ59S-PN<<}6j8V3@5KJC9X|fyt)uGiCuXnZoXFWNc?61UH* z1cs-|h5-b&QP zWDF8As_%HT#6s7A;mWt*^39Q-`qk5KB4MQp$OeVJDwhhQ590jX90x1reFCiTbjrbr z*Q(a(7NC1aIk~WoHlIeN`d|Vq;B}5X^Bsh5TfgZ>mLSO!h2}?mhS-+L84a zhhsW!XVDjxQCL$guh*0l6nz6W-y_^}kvgV&CBEmym{M^%w1%~Ed~o+L~ zPeAb(%R?a}aSIlddy)SXWd z4rP;*h;YjnjONn?Ty?R($1F!8Nj%xNM#G!Dq8&m;r?DGi{)3dRYzpe2J-sHm9sWJ; zCn~$29H!Rx;z8V5LJtm*q99DUjdyM?IKKa#<2WYPU%{r(*o(4}41%`s+5O_y zCoN1?3S_+Q|<3eO%>Y}N;ah# z+Nsg@6)cl$RFNt)W&f4FaCXmmn+sb>Tsf1JOOKLj)!X=-$3E=tA^|X2m3h{&sX)zW z=~WB17CC-xX>Ww9lU$cEmmKJje@h9=)uht;!feNB?uMPjf+=y7hseJVi4uxIJuqX| z^oIM6a;tSWyKt)B30at_Mr@yedp%YJWLfbfr6-lb$g0eBI)O&a)iG=ihV0Vt zvZNx3EDT+;w_Q@?i9r?Qni%f>P<$s{l;JkkBs5(5e!$~R&lJ);>TVS@C(wWnp_bY}GM1cib&o*`kZ@eh&}pDDQ@Gq-hho<$PK@(nf^G~5eG zXyI54F-rN|$4vXn>v1QF-U?VHeS%V3lv4|hjLUW+Ow~HYaw?>9cg1kXtZ7#Phlx*K ztI7tUPR=b6YKo;c&dt-jyYbKDfS9y3l@qAmiP;Z*t&qfQ(W@ z%CNm7TqFKHA+TS{Pt;BGAEc*gGW1~k>Fh;J-oPcyV5RV~E$uZ&vltw)p8P%*^dZh+ z>uF!-Wt&^layP&~`69!X=vW(|kuDT=2t*P^u2}P~6cP<5mEQBuyoe;Pf5e-MpsGE&&G*z}gr3S|YuRtn+(|D-CJ;zQK@Kw@#+ z-5UFAIf@mP4Gv$AW#?7S&UZA%Iw68m0U$@ z7gwDMcN+M$DH5hw04mx_b=~uzgeZ9FG7KB_t-8#$#f&sLNoJ9dKE(y4^er1`bX&{S zFBxrPaECSBg4bQ*W+`wo^a`8|y9G`Xf#)1bnUmv<_wGUO5`!)}R_;ieKNLoRVL zloBUHEphTIvst;A$Wsj6RlO-YN|L9;v^-w0b9o;TiFnW-=-^~TZh`ER1}US zN~B4Tl~38J!XBsuHJXSiiNfq$jzPb}FI`dXFnoV#-t4nl2$TtVdQfRv0f>_K#Gm}lbH#=rq(^Gbpo3z z^*o+0(>9D_2I=)J4Z3e9LoF8OF7M(}(qaH!qGg(7F{LTuUwg@-KdCO44H7OvH!-`L zEY9eYpY6#9q?e{%)~=W5EikTtP5^Yz6e1>n!5W3FZVBD%HsY42RE&-w0LX>tz;WCz z$5W{4Mq%@Upv{LS@^415qEKQp}|N_cX$;PC6-kXwKmZrBgiU z&mgkYhwkt@s!i*VC{`3}HxtZp@%TTRO5CBe8-a$9XE4tis)BEoL|u0WS4KExbzq-i zSoC*?H*Y5lgX7I*Aq8T^UuJd)x4pZmRJTSJH?KKv$?h4Wt1G-1!`P^7hn|J?_$#Qh zPrMjb1?lwEA;^-INC&1KIj4%9u9~&PZuwY{-5NzlcJC!W?L+3PAp9~gY6WpA$TU<4j$S~V#Y?Wwc2QatAg=0W>hR!@1pAp zfgm3ur^Mb9`ov$|5Wm4MV9s7js7j(8cb(C{JJ(nDV4>O*%FIbX2H&;i z-(zYMN^za~JDRF-$>roKR!H5EPCf8WX;-V@Vw<|+!w`T%fZ$OxQVE$QlkNj>Pt;37 zGrlyNaSX@GYL`@tH5iI2v!t!$T_sxUkjO$gI6(**M?f_r|IR4dnN{t$=V;DcAur~b z6x4*ds{ksdyl}n16ALR{>z_o4921M#YZxAjN=qz6Z-}}}TbO(INzbwj2@tj+Q9;KT z3qLW!s|kuSD~%Vo%3{S_ux-B1iWNuX1;k;d+1!zWKNK{TNHYJ%qp=V{M5loqZbaon zl7}xaB#C#R(7F=4iiy-tZa8Lo7sK6TOM}rJ2iHEEH$a@kldNEb-i9+lyatWf%cRc6 zn9U$uQcfmjBTIHco{d-4%EN4~8&2Zj6z-v<8!*@~6pyW9L*Lh^qZg}YUfMHO+w2!X zP$RGb=NeN-hq7322Uz_elee0yLQjLps&2uRiWR<2#})y0)j=Zb*ybp+|BE3^D~?7o z0ligzxHL{BvO@@!{Jq+_v#anF(H2MBrDiRM~3Y zOE>==XR{VUB1eVfSkV-+Ze=$BUTgBIZWp$^piZPrpC*f>*rg15=c7>nf0bx#!ZwK! zN=wlH6nD!&f=_By1dLMTK0PNC zhs&OTs#0t3J*sSr2T|;Rr2}xDBI)XjL-f{X+dVI*2mTBo}c`NfTM4dF;=O+-ExG{Z2kGD>9& z6S50N`tWYS-4sgH=TbwaN@Z(LR9OGRLZEhsv0Y6r7C-^t5T5t%luO7W64H%&+2`{_Q>PO>8PQ-dYDw8A!b*t>?9 z+_#Q}Eo7794vRoEQA@L_c@?0Aix-LS2QG!?=Rq=>p|RCx(F*sm?;0|5VyDT%=&{c` zH(Jl8Rs;d59bBSD8Q$aD9X~lWjni~=?J!~aiUj+HCFi!`UJ81|aCe2iQq?yeDHmZ> zA-{&1=7a^G?oU$72uzJaLZSe$&Ux(~Bvc*MzQw#qy4N_*W^n_xljfF<8C!dqPJvXJ z==7~qU3NV~aT>P?9UoSAlna!RRL=Sk^+MGEymR69J${WHo2svQX&wLZO+A0;+14BKsgo+&lSJ`aHt{3oD88kywSU%jsxzAdWwk1Ft~es*e|bY2<-hJ^;yRC&xfXUL{5u_ ze#E~rDaxXgQBHr(i<2#8H|CrdU>Z@))25>1hQbXUn0M~2+=m`IaZEVb9p&w-`b+Za zM>iem754yuiF~m#?vniy6)07M8Z+a%%v*NINLDK0_f(_hP=l~~@@d@hcMAFM&W$mj z5LdDh153>L?;f72&E-NuW&&9$Cmg0d4pIab)p6=f4Q~DFdVO)D&V^;qBv;whiDz%A zCM%L=Z<_<~QHx`1N}(DtjYU^aqL@N0bvmiirhY4#l|LimeDn(+-TC;N>6y7s+*XoX z|9kEz52#Womx4}gPgRVoGdMgdB5g@>#&8QPmgd&@XQbqLtRzNi;uWi3L=RQK#_ZTx zrY%pqhDI+rIsMx5fC{VeT-+pe&28-Ix}M8aY;Vx@ib+46A_(D4_D(8g-P$$(GgM4b zUv{B1(p9YaKY<_OD!tGQgWM=+kM8@w#vWe)75$FM+dcp)wE}|3X2tX#D5f{xuJ^EgJRE%MhG@5rri_HG4=+kOMV@%8?A=I&Y`lIw zXOUf7oN%nETlkM6ExqDL!SKB512;g!g?U>WduWI zj>3<7`~O6NHg95&r2|XxfoFEZbfOj)O6pKtm$uYS^}5G# zphemPdh+KbkPT_FyEQ$Qqiy#rOh2cCKs6~>G57EBh{<@IKO)Oj4#V_8Fk4rO6(JTa zddKZTifAf)$HXD40kgj7koa!Shoi5HX@(B^1>AlhW#Pwp^V5#$K(u=J9Ds(TE9mfB z-CrAz)U{7iyW%8)5PD;QLAx_8Ggqy%rq(FToxa2 zOi)y*HrOGBl%a)=zDWY^* z>)4@BxWw2sB=(_uI8e*T3~|H zhTbr3-!!dknc2V((dA7LdqK>ivL)Y7TaPI+MK0!DN0wWyrmIRFV9wFu$L=(t7u{p$ zG_W2@@nypTLO)H_O{te>+)J%x%Aa{8fb@NjhixK_4HPAOEHr+{9*y7e(K<@_h^YK- z{o!Ib+K3T8W+uO5X7W4fGWnfsV)8p-QoIu(#XAvFycdFnCa7w#OJbZ4N-WZgZpkfE;kNzlj`hv`_Oe z+UI!~?RUumNBe8!fTR62a=_6(kpqtQHa$2@cp`%CP`rik-J`mTFF%atfK7beg9Z zwn&;Mr_xq$@w$DI=0PdNB>T$mGL2ZZ*0KFRcKoAXG!6nVbdq_#OK7GI1xlz

$YYu(FG9$hN_O95l3VWH2nMyN7%yLG&{LL}Ym_EFYt2tr}RdjnlGN1Kq z⩔rLRFK`GnS{(V^-%8P>Q+SjE)Eazr_*^-W)M>u}8WH zEoO|!jZ!TFNA4HmG;#^%Dc=}eCV4VnEn>&sHU&L(W(78fRcr>OB!XDaK^+yTgsPdT zg({na9287wB-_c96=~g>3Z(J6z;9X1+7y*JYTTDK(Oj9;Sa~3FGl0SphscM2vs_rq zRe_E(a)xb)6$gfBzt=UBKKXs7cniA*CXNlu@8=GC$Tpng%}80~Yna8qbM~vWD%1L` zoSrrF^z6QQACl6}zE01}yk+)T`EJyY_{-*2ip-ZI{c_~KOrk+=z0(HavgmPoei>#H z*!a|9Owqt@cB`&DkY7dOzTQ&WXhPA>PNYj)BAFJ@ls)?52_(vsM=yHh8C(e%-oCFr z2SF1Dx|C>%SQHkTrIcuVw&1^kc0mpWU>GTo;SzJ^LSAu~q6S{WiLu=zKx^5AW{91e zWfi0}k$o9arD016?-OOH>2tjy?CHy>h5{HIuf_zW0eS*I(|Sa|E#DMb{EEdut)(h* zB7NL$?>sV1e0Dc8e-cC-subX#3iM(6%t}%UVy-9b4c}3n!C`GnmlKkXddNi(I zZ>;5*CRI{=TGIr7^WP;5E*BhCx&kg0f+Y1I1$H0yB1U^9T(>;ZjA4f5O5A_LX%D9= zTUflyPN;rb@+lBVno~eMFlUvOooZ!^yIEZgj6T zwoCr+1dPcz1;Gw>k=5T-vZWfXR_Wj>E|b>=;cS@VT*Cb0SoIjqCY(^9KUwMeF&HTc zcw`7-V?K4;v?tjZk!R3eF-o7IwQ*qgshM}OGI;!hU5{NEdCZ798^Jg>%A+LVHqlCz z7S0tA`fGM$P=LW|e85apBwmw1_3AtI433AiHJi)_Qvh;e9V&uZ2=AXzQwXx81+owX zz?@p*QI_{;V^n^5|Nmyk<_m4r3ZkE!zya#ZL9pdb18zS`a0FqM1&IJ4Bug;8y7fi24A;~Z7LBd zdS+OcxISw$I`Xz~@RH*)c0T*K7HrT+VvA(9Rqm3QwhgSVrosVWchew}`boC-%_YU7 zGYWLtsk8fL(bi%%TE14Ambj)FV^c&Rfw(T`Szgv9^7ej#$O1s;-k?P8+W|R3+{9CE zy^xcU-&MwNdzoZGlJMjTKHgop!CdzQe308w)d6d#xA2y?6cRTrybzs`$`c%UA{c2F zHSGnE=}eZ$FQl^Z-J6Ssx6Fl|2vhE~0|J{T&RVF_4b?@I^J-M}B zY4xgN6a4FR670*PPC`6X=(%c!X4OJ5X6Ck6a@ zHk&2%M(_%;g0*fWx~b{*%e)amCprvPs3+`SLBVB0S6CF_rZwLcF{dNx+0wR?|1yeX z*iH3*dgosPUCdeq9nMaxwumJlvG+HIBA8uIjX_uwCNsiK=bSG_(#}_y;f{3?k89BS zv*bsihVP_OGc8U$Vb&#@fl0W=2lfgSs zI;xFU6Gm6f4y|9zur+VCB2Q4hOj}sEg-z8dGPYO<+iL`4!JJttN;&D%g_-FeE{3;1+vJxX z4T-yAG$ihd(Xhi^F&b{*t{4rE_{+!gej#`G8bkraQ!yGTyF=xDb_I9EXf*od+s8i% z4y3t!ezJlCmVWP%Rg6ZrKlygEuaYGccpJ(GL<*!k6qEAXz-`tq$eZJLY zvp5_&HVZGoixbbzV=#xMQgniqLpHlAb7z(OqslTm_|Tt~J^)+&oHz)~)?auz8kA!X zJepF6#>U2&G?aD=1(OR>*s2^JRy}yNSJz%x4%YQVb9mwCoY;C3K|Llh-;I=|H`?*{ zoEAHS+t6y+40&Uf8V*W$wn*rBY};xVk{#jiu295yFC*VO-)`}^TFr0+()_?vN9)00 zm0UOxDbhH}2(&{BCBD55amGWBIAaifb3L;LT9RSANM_F_1HnH}O0Lslq)3GupH?kt z!vvl#0GD>AK%aecgH7$<8k4hpU9Y7+Zs@Wr7J*qi&tg~QHA$}@?9MaO!%eB(7nd!drXe108r2tDG$D@{ZP2vt@k?LTD1-!Mjfk*$;Q zoIfD2LFp}C6eH(l?pNXfGPhRWwyk*239}ru-;JJuhpk{}?S@yQ@0vAHMXxMn#Al)-lu zCqH`=$*tJgG(#fQUlTG+UtI;W^cNxJ*(3|I7d#|_a=AfpITa6PZje7lvAYf^)#5)K zJzMI8Q;CbqiYP2KwW0nmWo*~3i%secYX}+>&-p?xU z1tphw-`LW1%xyuNjEjVL%CD79^~!u_#qo!lNRm>=<6!Gl@X>%Zs=3}Sn+YOs#UxJV zUZqGjX;Q-SnsMToqmk{RMQs))<(C=j8G8sznP^pol$#JY1slaVS)(xG-1{}~<8@*e zm5rSE4vGSG67+fb*d1HjV) znHhU5jgZ@CUg4ymQ=6<4-=)%hWjk(*rUmHev%BBW&%rB0Yd1*mrEJu+X45iA`GwJD zp}m_N{FAkAn?wEGZ2gEw-syJfl6vs}V*l=^Z?Rm*%s)|>;&y(@~~0-nrwDajB*!n1@RHG(M)=d zrZXC?pQ&|bP5H7d;6s%;l&WAogQsCKc3w-{Pud8s22f!=?CZjLJuApG(q_;D1~Oew zGX9jBzMmQEXHlv)ssn2MF|3H6(~c#&WxFEsRkld0>En7NkawL@n)1UYLMd74LE#iK z>V%If+Hh>C{D4`fupW$Nt8P{|UDgz@J0**>d6O;k;9z>Em&9Bbbg<@!u_95hHKZE| zVj+xox+_c!qi3fZu0pyn?1Tm-xC+nxTQxfBwsFbis`}YmjWToy8O0$re!rPX>;a+g zQa3VEXx!N_n^IHU1I1LkZuh#yc(Q8`;8?xz;ngD?j`GMf_I|XcgwcW8idM6$JLzP) zd0QjBpn9->YFC!vK*rsRij3%Uq?qZz*`$pqOPZTrieHZc6y~}SL&3|V=XXm6RxHW= zM16DhX3I6lUU~*Rq`3kX;lmECW@1INv-437^gMJ9PEMA;7`p3p zH$NSzPQZq8j8}CQ;O{0?c}a0ti)XOrw%K#n`yYgzIP@ej;0iq^Srwd@r)pHMYAO*= zc|1fk%DHSx1j#vs4EHg6h0LBhgqi6=`R;f2oG}tw3}Ws~spX`?xE-Zv3D>}#-Rt>) zM^dnRXz&tZ7SJ4;*#AXDcL>JlHD&- zie8Z4)0XXS{12}H`i@Y#+j$19V+?!VpGnf`@}HQ)!MZbjk&RyQLYhm2+VfDqBUJl- zFaAw57FGuzZLAJH;_BcdsSZ9`s}4R|uMR$1uMR%q>focz)xnXy3F+HU+Wt5%XX1R7 zGT^uONBg&qPey}-!-Lxghlkgd0oP>1iljQ)GW%U@FAjL9=1$ z%v$R}dYLjGhia{?C!hc{y4=k{`6@5RvBJPm>1|FmLTZ8c(M+)M`(X)mPIPxl0m-X zyZ+D`p*q2z=8~d6rP*j>i-(8FNjf#s0^4Bn-g>Y<(ziy@`xwc!W6&8iyY=sG0A4%a zYaVXjU><(&CgS=pqJ~xd$N%1oo-JnoyXaVS%6$88z3ev`?#mBz)Ia7Be*ZE)k2z2C zhgdf4>kWFW3Q5q1=wqICL=FZ}B!0LqWJaI7_<{QXh3W_H!tV!z!5`o6>;Hf9-mSZh z<60Me_pfL>%L$nP;1#?mu^gJBBqpT9h?Ekq#G9iDG|83#G~5?TbXM~B_E`TSW4+k$ zdDt)O;hb?^&iv-3s=5JEpiL#-`(%t*640ow%dB~y-@MD^(VEKXO?WSA!f`CnIhGCP z6j~lj{1Ct_oM^L>@DYQLK#KkKsEprP5kdboS#}vKz8-a%dx6GzDv8aZqZU<%+@wMZ znE(1$s}b#}c^dugZ`LBfSL(T*CZaXN zGFn>etS*(8q>&fAA3t+ONE>FnTh1pB>G!p=H5;dnsq1YXi4f8tTH?nx0oS&86HI(% zgTTV8!38s@yd?a`VLHA?xUAUzuAx-<`cOAS9h&4Yev>e74YC?qkwuDX5gs+tT)r!I zKOJZSBRBVDJ6F>kQjXJ>skC#1lgqwU+G`q?g5z5Rc-AiHs`j(J$Oa0~#HYurg`Eu~ zC>#{|2@EP^$q?!Z4p1DuB{|~a@WeV5Fs(`G&Zi^CL2b131$E%4Lf?D{-0gT)AwLRV zBDv9m>B4recH7Y-9wd6ijpP~lc3Tag+P7KWXP9M;?|&&VY-8vD&3z#)r8&qhrB}HY z2k_z0Ul&}yci;gY`W)^w!iqUABK z*Fk?udQmfhLmdp3$Kh&g4ifJ|anWK))62yd!J9OOhH_%vaz{g2AS2A%qD(rE25P6yVJ9S9{BqI}?Z~iyKY_Riv;HxH5 zZ8QIbt_DO+krmVaKK`zgCrhaBE7PmA7$)e5G)feMx=r(Ghx1`sLAp^dWtpHnI+!HR zFTP5P8f3u@?S^M8AMp59Nn@N7QJ47xKd|(%R_DHi0`g>-HX5?7eO_5-c#m+q|;X{-WwebGFHEJL^C!M94D@Db~9&}{R<&%ap3|4() zbu+a~YgL{NGNUQQpTGZIC$b?%D;)80RmQ$GMo=l}AXkH#JqP-qq0+fPu{8&gU1upE z6+faD3{Zxv=^&Y+n+FZ8Cl{nPCAnjZ5CDz)h=!PTfDGx^CU_Ux-cDj*wKiJZg1emg zOOy*0g~DTt^Kv&Pev+qG2;jzA)DSD-xCR?RCwtsl#4&jimYh_74QECt((jhj3sG?f z0ZZ&^n3S$NTrZ#=Q|Wqf`F~w-sfKXot7M)A-me6ztu9I!Js=AbH+?jpciptRXh))` zk%iH;t>$XbR&#Y$TTQgo?EU54${PKd%#5T-Tg_EztGU{2tGPO>t>&t<)m+uKnyc1U z^I0YnaXmFh_JQT~udQv>Lulxz`9fntrbn_M=P$#O1oY2rMvwUOdNIPxMwzS9D05XC zWv*JIOdrRZZj`yY)tEHKkxrSbvpZ$d4AS;h(H{558rHH7nQQCo-R7;}iD_w-KCu?W3jUa;(Mw!`<6&G}M(ZtklK=C4sm)zoascSL3iAI%L_7Rbh0{X7 z1fs8;0aq=rarJnTP7hVdG5}nvBZ4^EL78rX%+p7MRl_3lhf`oDD8ipub(Zxv;oDXV zzdT?Ndt`c#1$c)v>D;&#IFG#NNjyx(abJQx^wBV5#*cp;;d(J(tQo1AbVob1E#G8fZ68-8654z?ZS2u5 z?NNINa+f})7q?$7^~XzJEH59d9sFVC@%|?d2X)~LW%$XiBQHf|h6ZNWMHa!BA#fbj z4&W*M+$F7ODgbP#XN)A-&rn@Xl76CCB!!iIFSv{%S5pz6rDbJ~0KRcHNL|j<#zAnD zgw`a2WmS+y#HDh+pTGl=pNR9Ny`ZZM6J`JdfO2Ck8^4X-f@Se3lF2{e1RPD}EhHtE z@id6DGl&CBkTaTO;z61`{70fKd=#@-dw>^y9ukDk>BObyFD^<>SCYTv#h17 z?n8YfTTy@%#U#e%7yW<@aWNzb%LGBOeiz95lAdmMXb+1rGH5ZL2b@qkG7LQ_rA_%i>j!%f~zws@f~0jMd#PulZ_)TfR)tZ)3gfPfu*H! zb=C>`%%;POCH&wN>4>N2{myIjj{Oaw$>Tx!*(dJ1Pog64y?20t3=l1G8{X-8t7#}8 zu>-;3V2P=;LFP}i@QN)BA0uPP)bPyP6A0f%;~7kVHa!8`piE%FP1} zL(V~4T`^CunY5E$!X9_m&GUQYN!;xeb`Nhlgx$mUo&o*%mLsqN4d$$1v4SB02Z%-w zyz@m<;xCdZ-L0N*sQ^(1LL$j!Dmp9fhlhre(ibVHm-9%wY?u>Md=p*JjlN9oOt!oH z>l-(XzkUD4$so6E-a(?%>`f!Zr|(!76P6*c1WLQAs|I;zNJF~jy>_s>Qg?Y}C1PO- zhNM3g^+Cg`Xx2LZi$zEX-Q)CK_hRuxa?FL3hxO3;`~sjP!Mmm9oS}!y$OC9vWCOTA zYUP{DSu}=V(RV$9Q$xUPpzstkyyTr65YnLT45hxTha8EAthm8Q@ z5gm@SH*t{baVSwq5xUE9(c?Gi0`}EyN9BHg%R%i_PA;&3x4obTR=R6I@X3773_HnS zIkS|6z(*G=hNwJ$;pB9XW6$k85vW7|R`>xW&phr~RfMFZqTzO1?3M+ z1Ie4QW!D?{SP>a0j$Ut58d@$bG*B3#paXOfEldd?B<}_i^dkFz%f-8%>}(A{zj@!e zzDNEaOy468IU`Lz_~zqUPnQ7AO_2$Q-m<5c+K~drka-)3oG!&hP_Zd#$|B)2Kv0-w zseX121KxF~W=d)K;(hycyNteF4>n0H0oFkP1~p6sttwG$8qcGo`(|GNi4BWaa34rQ zL&E3W<|MFRm>of`aoE4X^8mQfyPQ}{U}<>?uGLa3!@`n`#i%irRGRVv-l2yU%ZE;c z6;^VSg)EvazxqVjovdLpy_>=d-Nk^ z4-3{H8oWKr*)-}cx^|U?pH(9n#@4gIXk-}~K|ANMf$1F2g zfZ2@~eaQ+6MR=j5FzQ;*2J$k~y3|8sGwE1kCbeP^n@}iMf6cjqzNz6cJdio_%B)mH z!@1aM9-khUY0q?dwtSPbR&We5U-rCd+Y&A;MHkarNQ#tRl^*t@;>**QFAn$t`i;$D>92@r{%wgr-=@hO z?L65#eg5Ln-iy;OzNAmrmX|+z#aJCQKL2}#p8Dhd$6iK}T7F{vqvH4%2m8-{fBXynH|_Mot7Go@`Z0e%dvJ5h8$@8+ z(jk@~riCMajQ`GOu!fEvul_wD%1B4}nD+gZI;Y0~Pz#s{f4%b2EB>7S!J*c*6*`hv zM~sCVJxS%UbvFu4syRmYqgOK3HsT5V(T0q)DSx0Yap%R!{_a72+gG+fvS9NXko8_Y z+Izh7^5Eq3VCUHr{*b13p7Y;UdCzyB?w#&Fe|EC>?1VpE)6?J+#jnES0HhwLvglc~ z{|bE0zq!L;P`yVlb{?P9eucY`$LFQ}%s;e7Ls!QS8@3 zKiGe^bF%;Z8GpC((f$fA_4)40ll_C^)8oC9ll^B;c(}Dyrsy@s-aC1*^X&M5e|h?N zZ|~9R&dKvbeu~z0o+SNZDIN^kpBA0C%!ZwJGRZY8>UaCkez$YF_b1w?WBR#_y&+Rw z!zzwXXxv@Djx}A!8m&XRIN{TES;)?pr#mlppYGEZ1^a}8-;IsnWO@7L`mL?6e)MYg zrmtgZ#|JN;>_4Wv^ZezD-97%8)?_IPYp4mfDcXQ^Dt{fv<>lY_Uz_0#tZmNvmTeCH z+o9djjakRdfBy31=;evNmzU99CKBQU*?+OOdvbcRcX)JQx4pYUSAlOZ|BDt?#uvOb zU4PY6*{m+DK$0TlpL8o26#7cPmMhU^8hZ5j^vT|{y%#j;7yRXxPC^&G_ov;1mydJ~ z+j2A;`2J+aZ87ptXf{nE-B=Bd#GUWPnhvtgheoG*@chZ?m!~|;<-CqB%>wjz8UsuDwE_Qy&zuDq_J*Ex)68B*5 z_>^e*aPQem{&w3g@7}@w?#{E*-GiNDp6wl0W(56~_axF#d>+#Ak(&ZOQb* zSu8s*X><1up6@(5-GB0o{(8zkt*LeEMSV$=;v%0Xn=t|Mfq< z!h+vk#^uA#FF#-W^MCy9EB%Vo<4uX zPtcwW(QA?au@;a+NLEOc!HI7nXQ#okAni^cKYww!!(0~H!KZQbX+Qe(i|AA4+*_Nq zg&v>m9m%M)$aNekF1T#VmeMb)1t(t~J%93ou0Fomwx!4gJ~(ifn3RL?5;K1zUT0T% z8;c_D_F~6hS5NEPx-#evcHv*_L1ZWoCgowF3}uGiDCiNl$qQ}~cJg%ZkckLA!W`*I zA;HpFmX!bx9%6v?$JojP2)&(SJJT=u>lLN{M|)qqe8Qis>V~}7d$srCc+Wj9 zQj;H9bB{nY5I3gDAM-ax)WPY=7oy~?qjT6R5W6gQ9ooavQcaexa}O~UuzX)gGSMD= zsW0C~LRj4A7H8`#Ov}g5clUP=e!(BCK$$sto5G#RAFO(1rj(BZZHAv9Hd+QhSO=3_ zUjYW}6ILns)7x|+eqhry5dPPe3<6DPk2G|g-8!ikukiOWdtht+ZGGv`HIfmdVez1= ztPQQNLK}KAzTl76{X`lDnf^5{di)^qk2lFR|8+x#*`#6iW#dU{Fl}l;ugk{LI_DC| zxJqm5P$-7+xQzsI*&Di|7>E=I{sV0O+1?-bj!%e<5Ui8HdGq3fvO?{2sLSgd!mE`@cuWj4?e)Rls zXCL=(oz#j8B{jznj7Jks;op;XflIu;j&(ly_x&Tsz1P=mal%GL{J%JspE=ct1b<$b z@Lz{Uar}#u{lmR~fBtNbCl8HcugdAPmyUpa%AajIjZiNM)QOqe;QG3=Bm%a&PU-~D zySrk7R%huor*-HNqA4`T?5^?6-l5AbPp-=@c6s`?P@X>N6CsNX*4p)p2)NsNx4DuA zdt2{LD@b02!~>*(yy~DJf&Zaux9YZFzobhr%U>rQgg1e-4mJF?kp4*$V1Xp$tG~j` z`rBVe)$lCI|Mpi@IB=fz-}txd?|Y!j7hpr~mE^^)lco_jwWmPKTX(vKXvU)W@Hd-c zM6R=PVS+L^ENB?xtZ=(lH|W+`)%bF6=fw;a8J!g6vh5xpt&@JFM==2JvIaVi> zNc5;klemFEHgRe6s$f8QjY!z_Eu7EKpn0v6mVo_ud3d-((gS)3sdP_RXIdxyV4u-x zpoO0vzx?9(WdG#liP{P4q%lA`vYb0@*a_>ZHLR1?@Jf&r_)`%2@h|EMxe+R<3Qa6QZ8rgA;%vaVyb7mC&071;i%3y*@Q* zuYatwW+D2=6oZ9w0eafrx|$f<9OfwfLrgYtzxzJT6&ymvrW#~u{7?y~TXt||ow zq_dpreH7zF6o;-;6L{L8lG!EoK-s$}$X(J3rqZVQ^R96(p}8&`525n2#2;>|$^dhK zKiE=qq6zlCv>$>c#IQsGlnE@xqr;zv0kL=2JSB2)f z?4SsxqUzJ#)vZ7*2Ht}1>UPtB52muV%#&O*N(sMOX;4dzD|T5sIeb+2Ky=r{2<^gu z;o)o+fKo%OzWD5MJOEnlMU@oADX!^fCpl{5Mwv9wD)isu>kD`>i&H6?9%iHLO`INzIve*rs6*ON$;LDDLA1fX)x=yMru~ zYF5j}g44nzwFPm;B93ai-{#cyTAsRVfR-mH?p8?kGieDk8dVW*x0tIBYrVv1hpPn1JG1h#L4<+@ ztU)SdW<*7WK+u3@tD!1MzT8OZmlxLV{~KqoFTojX19??^%U-Cf$T|RQ_x!DSJzY;Zxe9R@2g|Jf79_ zB0E0^%T39=bU|yH;A^daksJ_d8x0`%ptTSk#02e95TTR1DFBz4KNl1`G-2sku)xdY zRP~|;3)k$2A=SwHhdW10N6(MA4D0aZ$W`I!9P>$H=_l;!^T5Hw@%QMjE6p&AYEarn z)BTf)7H;o2ci|o5*Xukxi_!EM8Qfg3S>buf3H*Jj6Fe|=SkhdnR{rGsIX25h(F{v-BCPHnTkp1$ zq}-X6>`S_X>(HrLY<#X#W+jnVeFf6gB5A^6uj)h#4zz<%56F=V^N^&7x2*OJmP zNY5s@KgND0tx`2FM7vlRw@0QIQRX*{zA6U}hLiQ;L1!^!PhW6>`&bhjxs4bX$6+H< z!8U(jFvG+yCa?d|a^SnlA8OZUx&)*jmvQJA65OLgge4$s&*HpOTz>Kp^`?r66hD-0 zz_Am{ZZ&(?1Q^na18m&_aSS+0?%-VZE+c(|48b=BXpd>Z?PdDmNpXHo9N={)E{nPb zDx$TAntrbxoDEyCerX=mB*8pa>R$kMxY^xY=_a2%{MpZ{J{64f zJWtW;c`&$Unk$n&5luAB9PTjW$t55JF0*RTM-fOw7cv1VL_d0)(q*pzP@PEAAnfz_ znx3E~BzJnrE{32X&#og;4WotKfmDw^P4beaezAC`0gp`cC8~p<*xhY^@n!pXr#8qf zLpjW)i)57K@!+dFygfP~Do5*iR>(%&EgRbgj+pe(eii*Dbh)u8A)WV+?{JuO)Z0Ou zwpTYc>EX}jf_8!z=*~N{BlDR11$WxQeNI(j1a{nq5;7G`l=MT+Sa@V%`xLzG{2o`Cz0($XGz*>5ye$e zF+TzNw8*jf_fuZ-)89~;=UsO6m=rtYKtcOME1L6|biF9$4!P;56}`PA6*>YidMVp? zme4&1ByV*=8$9Yq#UOiohpjC5g{KfcWP9D?MiyT~y4CO)?SDTMTJC3ay?8JmbY^)y zp6|i_e2>YI&GqO4ALd+-X4M@wd-2Y^_Qjl6=!0>aJ2CIwDo26G;JQ^a@v;%!gQ6Ns z{l4*R+y!tN=1dJ9pK`wOyjSG?lyawwp=QI(oAH169VyDJ_hw#f+l9tP-N!uvLEJ^* zi~fk1wW+D556y8&x6*Q2mlr+`xD`QLk}jK&?f#+A;a6OWg;I!K%$>a8!}7`p4s;k)}#GsoD-kC55_Oy@evhEf0LKU>=l8#vu{+VG2g zsA*$tz?9afO>bpvA^6|tpDi%qgTV4b5;d+9Z0g7CPLH0Hr%LubcR2|F!-# z4h9{*+-W!h;cvUUGmO1-ckzhb=@pMLy7|MP9P8LW8Q0idl!+(eJu^yxijTBSY|X-X zQuZ#@PZO94i{S){q>P4V*}GE+f#@@H<=@lnc+h?#_)DTOE=bufq5#31IQ}!Bd1xO# zvi8fVd5X?Rll=PP`#l}0Ep=ipP8cAAU7lgq!d6sfJmtd`~hLltfz=ZoJ(R(rztuthUNGaDj#hu z|H5>`(?IvSPcAmCYtEcfl@Bl@y4~fk@c|lutFrxDQ~@PdNHlq{zR_Khhwkg3MQ^9K zb60A*A-8f_?E7i&GS2Z2n{QQ~x3}(fRxeK;Z?&Rld(qL(akTq%=h>6J7gJM7FX*fR z*J1PM;G=t;M~G*ls7G?1{^fiH_{}pWc$$q)%WQnFa!FHc)Zi*ELP#c(JSp1P2I*R_ zfu4mGFqk$<nfC>FA&l3einv$Y4OI$cdP(GF7Ua3lFFIO+_GwzeO{A~@iuzTgAhiTEH z!An>vwR=sPZFYKWoatGTjPFx`j3k@$ zEFB}!ad$5|e*P>v+>1_L(*HXr&DWPHsfD2wXF40uq)t)nOy4Zu)5JcX)*?8mju^B^ z?dBx(>$hpYyreHzy7x2@==db4a))z8Z()>kz_?B6_;R=6K}~!%omSC;loEJ0RML`1;1+e3Qx@lzfV20mIKQ2yKe9ckPwOTPV`zdnG{ga)>dV};jzyBsxWac z&x(5;lE|bKQ#KX+ z?RyW!5qJUY?W$0OD~8g$?Ke)${dlJaz3QHZ62HYRLW@NB01n3D=n&w=($*f~VV}{- z$mz6Xmvn%!altl?b9GOX)A#>s9JPObQU02<=NR=^4X;tdy%XCc=9%%x&3HsA_dU;e zq%)=q+LPW#_c7(nO*tD|<;J~DInybVotm?m;AUDR+IMa=xoy^RIm2o9mHB_hjxzbX zeiVFiUzdXYO?fJ{MCx&rGBF2J8Emi2FhY?0DkV1CM%3ZH_=n@z4SG$q2ugDH-8}=y zY+TWINu^CHM!bD)8J!!a58C}OQ=cZ?8)lFGhBwXs-mG=rh8uR_b#oVj@7{cn0}hJ* zuF~PX3d5r(N9@^xuBL@@)9&(%@o7In5cgCc`An|T#rPun^z-rO?KZre<4d|^N&CDX zEq@-h+oP;ahSwQNvD)o3t`=#xrT#T)N1vWIbv(R9eMi%8dEapDw)~Xr?Hh)s1?1P` za^~2L+5f=FV;g_a)Tdt`=ff9>uU1~b$V>oc-R#)G%Bk3NsudGslsf6uIEY-3~A)BAPnI)W+BTvBsW?|o%}D$mRJlZHGO zwXbg4p?C9*BhR^Ye45{K_1`3Sxc)&-4k+?6>Ak`36*s&BPLNRkdoceb zO{Cq%7;T!Qe@8UqB?U2?ANvxFk=*_+xN$)(pVf?F$BW|PGfx-yC5p5k$~Pg&!Lciz z>{M$|Pzg+;`VAp=w^Jjxw^bu|K=jg`n)#X(f>hP`XG8j zp9bL>I10k!zo(TKS|d4<_T;eP;ZJgP&a~W?jq^h+bqUuOX6n zmZ9Kx*X_9-k!JATU%*SE7SRaKZ@4B0@u+uSu2xZZrCDWE@L~;K0zo{1YDe`f5&y-2 z*Ub;tc9}toVdLA#UAc$FDMGRWIY z4t{E9(~bJ~&1# z-p#e%7PbRqIMP=XK0=25?X92~VG!t(hwpiS;p2mR(%(6Ng0Zz#5bjye=2X}XVXqA8 zZrvQDF)2x)Jl29+w4cmfFCEwN9+N@GBlya!3C=luoucqa^FrxKN!v2AOhnff!j0r{ z6l`{GTDk8=hABx;9f80XE7#Bx#(8#;$K3Iyiab_@Yw9F>;9{!Q4%27yD#H8(LF7r; zxh#dFrC$lk1~Tf{e~We*di3;}W){R}=pO0=ph$+AgQegn@S{4Mj$kQ4Qwu%`ZTzB%(*AY;0iX2F9RJ5d z0UFR3B$pMohX4J9*?0KKm+@tm=?BM2g4Rp)s*6E(rl9_j(Jt_h#KRF#5VyYxXI<~b zk??G>8^g&U&GIDwSaJBfT?O#!ZaN(PZg*?CxA+SEe^vkAn+3(+?QSz*)5bCbKru*T z0L9-$!}2B+e|KX|9u~04?nYP8qE0HV1!S}Lf;u}ihsCLL(AG+orRXQDeK?V^>22YXjz*Z zQ)pS6^|kXbj62)i+@6J%RU~~yzuH=^qhD>TZEgW6lF_dOR)!unBpJng$-v^Gm!tHZ z^r{-5o37k?=6w@T7k}eGiCD~_C(gKXfFX#q08Nv4forh~7iHc+fP$DW&=Z*(lQMg# za0jo_9Nfh7CCn&nisO)d9H6y9T|OF z1yXM^=1z&s3P{9p^H1&^<>WC=S({F(2qrneQj1$l+t+%oh4`N#I-9D`dER-OzDdVP zKaB-bnf|p@CiG%P+M&08^01r?ChngFl%6^kQ!Ek3zVGf%f(cFE`x9KLt19SeJ?Wvb z9wv!o26ml`wqo7W2Q>|)j)S9HSC}L&U7ww+v>;JdxGp;-c7n?v(_ssIv^Oo8O78DN zbF*Qi_&R2-Kra=2goA<<0wmofz65Ef{4gJ0(V0ztyd2!N$(8jqpGiB`TUV@LaXJ*l zTw`X)(D?uzY#>eD9&%?>re)6?kPgO|fWfuoXB@Clh$ty0nU6Le({E47Y9U^f z_dj`ve@6CCrj146qdd!o)*b{zILnR{){cQDIW~O5!acxXjfoePbWb;BsL@(*nn8VS zoxs%J5WE)}7u(@FgLYv*1LJQ1ODTd{qhYHO%7w7?$xtOrKQVeiV@YC%XfZ_ho4KXF zEVY+OO~R9BFNsz67x8X)$2HJIhE+;j2071$5G7vNCN7>gm&V8uU?j&rpwt2ddy;<- zvPvCjS-%QcC$^qA%X>NGtbGp%JyGgx9!SeVA#E%aOZbDmrz@4i}^)6xwoEMYjziG`4ZcIHY$cz6i6 zD`-_;M4O{~?1G4{bMm`MuPQY|-Zn_P_*E%4E5r-1<30D1&SDhR&-5%e(SH!^^VHT3 zG-2B*6|QS0EPzp;6a#(A zKI9C#WMAFiYe&i3f5mH+=YDm!x?fehk!r@Mm`dcPqUO;;QISEBlBJa_M%Ys3NpvOT zR#jRr?2u&n#w@bWA3G5~-Op0@wCaB6={xK5YQjTX2EWrh>teA5<(stA0kKhtVz<(k zyAQ0RizqPBGhx+7ZqS9}h~}!95;;1)bpLi2kVFnK3U-^6zNu{1>oK?uw=At>C8nJb z<52z@F9lqM6@{D>f_70;^nowzmnx!L)h^l^5@zPTqR9l?X%34T0<42Oogm{D7nw9D z68;G-qMRZ5XGjM=c{)Gqi*CwCD?F45OF{UToXd->Cf(21RpCDUN3?B=K@}AO5k#83 z#H*6N1?yyx4%w6$hiN?B-U7s%{B=>CUiuT{h;dH)#8+RMMd1lppmAeMT3U(z5stoH z7p+J1T=EXTOzHyfgR(<95-B_@mUPWGBW#eq|{vM||J!f)u9*QkVTg(8qA9M#A>z!j!k9?zDmR&7|%(xz&WdjqNKaYp#dn~kmJAF7( zN}Sao4?25umKOBSB8p&lmUvP2_xmG)pUm;!i3nJ0s$JlhFn<`>*qsu%oajlW7mb^G zQIf;X7V{zr_DP8%K)N3IAO!NT4b=L>=fy$K|oyZV~PFtJH(a*QXHRi1V;skV)L41HGM0%En#QvbHZKN;Vy?xRc_ zJnRD#YflBOyx`BQuKZx0ZU6%5hqg%4A3p0n$*je!dAf0@Zrbg#UjpGnZyin_O~0{r zhirYuRrJylBC2m5&a&<#&v{5_-#1P1!0oW#PdP#nVl$lX2yKq=Hg%Eh zln9HYqDK_^9c$zTyYoxsl*%?qF!Uyf7cl;XSk1x2bcft}M{HXMzYpSYb-u8NooNZr z_%4)UBOg^@cO>&AnG5Nx>g%>0?fV^l;GypvV>IzP{q#aV86>dtg4}hsT}srm;E?NE zf4e`h7A!(greMy=T@(m%>4aazMcU(F;&#}YXB!>Rl79Ql ze_ij)vpusj&$di+Tc)|O-0aM=u{_n8XJdJ_8Ef2F=Ds`|%QO4(fRh2Dru{l;bK@5h zP9P#=z*q0u_?lB>>65s9o+rs!p~1#_e+GUku@ukir?8Rs$5T$FS-z+r>DE-vGC#WJJ*vDFb9lUjQ;I zLb))fOq|Ow;56^;yI{SSmsVCcpzs13KYqv@t#*mN01IMRpHB2UkG6*WnMh8=n6n%T zpsN)KvOIbAa!E4oBzw?s4(KYGB{LjLGa;OZDKAqGYZUV}n?};M$GL%}gkq>&kOo)a z2A$}O!0*Tv7yZduCHN99x8+J&)v({hhf`zb1#qAEOcDpJRG?b1zi=LK*Q(-tj4lYugpNx-8jI3}ZkOWVN_oGp+_!J;5b5%C&wos}*WnD2i~NB!(=QCIm> zb3@CJ=T#ZKJgY`!6>WD`mZRUt`7rH8zt3W%nMo%g%mMPhm*uR)k0W@Q_~64c(Uchk zKPOtVH1NUvCY@+fEynjUl3(LesOa;4QsuQszjZ3n`=OF9pv}U!1FA^afN&DOebI>S zb6mNko5`hg1!Xu!ov9l^Qfvf$#c!YHpiKgmhc8~P)Gqh(j0C7uTQDj%*h`oOxiR`DkO*I ziGw$(MrnC1*Np3h5xeKh;K{&9o)p;BAwmJLW{2(o%Sa;IAUB~@CN_{q;kJ!=Ey=JC z0@uas;)ZO^63505aR!~}I1RaoHt{h&{bZC4t(8?GwBk>ww5K@DkdtLb{EG7||5jQC z6=D=fUm$GLFW(qP1Vg2{NI005dIll#96i^-3zavNcGzGVqAJ$bj?_A&RjEUIbQNEU zVkyK&VsH@G_0mHO;`UPF-7HRnU32<>M0VlG?np0BCB*E2cSfoGhL<2be58^C90W?q zo3yMY1!7Zzvple?sf<=d6mh9DutFp^wadLs-=raz9(HLy(QLpOD&he z)FkFyTtz?CHqh-P?~?c%nGzBaT&x|v!4+R%=Ak)V+|JNTGF2`(^{S8#UOAGXEIV{j zJ2vtL4{#;aSf2E7k>M$ESAp|;6F;s*eT3$?Lm(3*_joJxkS@MwdrV{!$S>yaQ!P{1 zA^E&|iJt?0Z+uLzDwmGX&W!;^HJVPk<%QM{2|XFv>DByDT_=*$g=RzS$i;gt|At<- zZFwKa^a`#_Hn6`9(ucc=Td#C_wgeoNDY)F5p|+J+a+CbxAUu; z24uI9G;fOvkhbc}=d^?YX9G2s%x+$9{pXV)>8m;I|HRJ9ieK*Y#5F`f<_2m#Mx_M^ zni*tJs%D>Gf5!P&jJAy8l<+r8p5Vq0cLp%g&T6Jb^&YL;G!#vaLRJ`zH&fQso5oQM zWRVJ(hKz&DVr~E6VPj>mrY82hs8rEmu~4URHFWM~83p#h=f0DT!a-$CZf$v0&1HIt zGV0jEtToFc)^)K^9?AiBUB8UkhUzt>)f2OBgC=;vqr^J=1<_}b0r__qDB5D7Szo&6 zLj7>_usTjSg_{QaUf>3UEfY-;5Uw&zTy0n(|{hA68aj(2l$z`@QA`e2?^ zSJEs-Mcsil6r5s@E|FH>#90X@a4kJ}9FG~jH&*_$z8<+q5a(tUteBH+311zi!+hSK zwf;_}mutM~Oe|lz~RxY{AJWilffQMehuqe``(Nk3!fKsW{ssP44?J+0JH1{j+ z57QAOyQaSyxjC=9Ep&2~3^I}<^bj%ZJUN#KIK#6iC^M<}NCO)sBz~NHF_DIrqKe?? z7evSEt43*o7A z2}hPUyIhYjtJ&q1Ot*h_EeE`XFJ#9r4DJ>kA)BQ`cKkd#V>Q%iOFn#nym)OeoA_4Q zHN_880(Zp~v5b*Ijb5CR3@MpQmU$O@cYYYWV-3-#n{#oOZS&62zGO;I7k8m+Jl)#M zR6I{92WopIG6zWsWf1Q$(O1L`JJG)jkxR3)qKDc{xxzDKbri@~_6DE^#%o0K%BeRs zPhOk_rS!dH3+`KV(hY0@&+VY?=tCg|;87V?>4tdO#l#WIx60S05XUm27#BOW^dXZ{ z!Km`MO|(Y6;6l(_ds#IW4kQm7(;VEqYedSN12T0NE;Hi&X0vIhZpUEhdNPj%M^$d) zg3N_v=vSN{>bHW6$5^9N#R6_SxtqoVJX5F(SsEU$>=8Aj#-46-3BP!UVE$@zC| zLp0qbM8Tn01%ndG~Ik2F5fXL$SII(${!C5DdxNIy0|hOR4)4ASVUS&0VM?HEk|=sBEy)JzQpAC#qtPEL-L)zYoxp=iym&6t?{U)4 z@;F*hZ_#(Gi@r$u(bKqWiKPdnx7M+|&z-MGSwS=|(3{OMu2WrXabyENfqsU3TGgdz ztac%Gj!U)ybO-rrxZM+#S#m@Q=l9~v3-U>-GH~H0Mh%w2ThqHkU!SiR<7p?Q;AvMjAi<;qqh`^dx4*E)S*VY679(+AhA)_ORr$D^n<{kH&RL^EtUB1kghP{ zmFPZrv!o_>hc1T=eO(J?3%5B4=$;l8=@VtmHD8J4;*I+JjkE=X!F)cn?NgKgnthu`K^EikrG{RvOlM6H4$@w68$DW3a z8_j4POX{P-by^Yr?#Y#=rB{dputMm%8K|defF?Yri5$N?-ecxKtN{XDfXXF`gS7UG zJjoYZ21;NKbG71}w>r6!)IA6SH8a4A&eMTt9PH6^_zB`RroFk6VjZ2KlWNtN2Fck? z6J1Ek&PXv9K&~-S%|)OwbNo}i$_{!kcG|x8@Z(ru0)t{1NO#CRZy8U5^CQ)(AcaFj zpR@rTMQNWE5c5_tozx{6!>C#yA`+!7dPNHzVzUq`h=(IKV8k!vK)DMMCX9XI?gNv~ z>#7ewlN2`UCEy?Qld}{hDKvxRo22EdD@KBpf0f7ez=l9IaIPDKTC7nthM#zQNrPP5 z<~dcl*5H(Bxa?q_jA;`9qvo`A7h2-LGg4F4F+UW?%KO9ne05_7Ea4wX zbM?wevViWukUP)n%^7Cbi59DOqG#;Ei=BK`ax2Q_1_vr0b6D9ObBGB*^wgX|12WhDmJU({Tz9wTqG1VOk49OcVIeQ+H3tQ@TXCw>s|HO>Zco^n#wFTXf` zL}prw8u6K4R0~gWB8r5ht~frWY$))7%qTW7z!NogoNpl4^xUZ;6^R|Ot~$;}PTj)c zr)ygq8uv^aC4Q<@xw)DLpM^5!E6}PQZD16=+uAtYSnrUskiMyA4`(ap^gw8s9=U*~ zb*5ev)_sf85PDsi6%GcEPOF@?BPh!Ede0TOg!k%-E*zrWNHH2UBGh2YmlI^FNzRE^ zY=uXa5hDFXT%CvM3xzIHAY5Hf98O@!p;RKUR+o7pMvW!o1X&XSB+T>UpukCy6N1%q z8x`hy0_hM(kAz?GRu+bujrV%mQPtN%tA*q*7A;@rKSoponNVynO$u-FYeEW}3*yHr zENQ}l0xbm4GE)FKRX$3?Mkwq$@Hs;!HC0&~BOBd$NAhHl0Ams`n(850RBsb})!>c2 z#05yhcv9lj3|p;*@F(G9oZq+Pq}F=SRJzbbU$CRjOXDWdBaNpb9hij-5)(M-LfqSy zGZFZX1lc#A^kBQ{+Iw_Ci_{9Fk1H|PpXV_rjhb?x5kl2(Rr3znQ#1RkG}g!pKRiY6 zA`us)QLx!Vd=#BjnyG%5)maAs*oBPC)%<7aXbJsumJaC(EPe8D%u0ghqx5=Jk`9pn z=WqmcdaicB&5D6!m{;^ic9N(A?(gT~~-MU2E zBXMZLX~YVg%Mu8a{?Z^O2E(KfSOsS&kh&zt7q@Ecr&}Ce( zZ-jl74dq;1k3j`2hU@WIx*=AGTU-yvu}8=u_IHs_SW9p4!In8yLNl}$(jcx&~R72D4vldC{oiob~{Cj(;P`VTt;O5sVV9L6VXSEnM)c=FV}DEM{QQ zMMZv3I=)Cp7cP__21lq+;AjUf zLFkuSF0iq@p;_=A_H1K$2J9K&&es3(Ze?Y0R=L2&GGm@?tT5);#!3V8Y-42x=Gn%| znmjC+UmGim`Sk+v-O&aA%s{{L;IkVL&o=O!WAv|a?ImrgTH8XfAvEW`1!Xrw6l%XS!ib)tFrP{UHNJg?QCOp3hiuTbqeilW0ld)Hdbe%orOq; zG{v*HxNIk*Hk_HXmZXj9_lhKRyPvep;E+5SDMMImV5DtsZ2K~V1LvOr)bzyAgM6I| zUKcHV0o^W%b}r!7IDSf`x9E*N(^fR-BMCmNwm3l=BIsP?|HZaFOPll6Yy$Fo(3ADW`q+ zoI|qHsEZ3R*Frr}U^PowcTn@@7B+Loor{yV-GVgXuQ|CH3cw(dLs9D}06(amzM9Y) zz*y9prSfC*5Yx124&PlU)*@{vkyxeeu|RwIf1AtsGCoU7uCk@=R4hEHsBPWyTML1Y zG#2Or8vRr;d$?Hb91i7y8jfz&}j%U)Eu5M(d9` z=Wtv`3$rX+xR2`*d7cOwG@UP6KMu?O(Gz8jP~G*DU~Zi#x`||`@-u{@EF*<1wjSxD zjLqy^Rh3f(0^mZHZ%A>}yrclFjh!=Ad9l#DzIbaTJ^GIh&41BBxAc-;$~~)sZJCkl z;nWSDFy0|!zLgiTVaB{-7!OEyv*g^7cqSEcwhq4N0y?UXxvfpVu8?N!U>~Po;v7z0 z6y}v79MosI(DU7Ykz2v*b z+oh2$cHLFTb6A)`+TK4QcOm*>=VbS(3~9&NIg3lVZn^-uQn-oy4+c;-3BnXSlEq^h ztq@_+rAF5QsF0q@zmX|3#UmmgM9q|V{aVG~*XWQ38up2f;^Q|*l%nj0m(9v)W%tFZ z6J!7c&&g`e-qkTQem*D!>xRG6odZwl0j8P#fMx1}Y;^e|(hA?ri0z?L8j~54^2gzR zxc<|kb{y%sDx8jme#O2`i&k{IwWP=sX^ZUd|6VO&4&`RlzBCh;he}dk0e> z3_4^&bfT9MV$poGQMB7q*GZk%JgPxEGo{o}l4@yMoLwH)E*a&kW0Zr;Q}DpkPA|6F zLJ??;P0#fY_Hvg;r?pp;;=w;3G0b&|{h0kNd_n8rSGWEOdGngT1rKgfRE1CLcTnHR zc5vI&DB%|}L zik#0}9t~P!cHaL|158Wk*4~QKmTdITHrGFSD5(0SmKw*L_lxRZ-gmANQ9qWld)hoS z`_fLMx4j`)KTSsU(Li<4-VYAek7(aXxK5Q zLx~x2mmSfNZ43#N#W06WDbO%9$#F zTah|968WRPRb}x?0ff#;o^VAsBHk?NNW!y0z(5PoS4lzZF@#^D^@Ks$0kL&4xxIJ7 z0{r58nXGR{0XFIM(`t5^$H6JVf8KP3Xw01Enve?4fZ0mp^DS9z0gz9_~064?O$bm%$p4Gb5Jde1t6NkY$*S_EJrd)HR z2Y9`g2%%Kv<;QcAvCZu~o%i$@7+oVPUVl3$;iXsw>3OZtn?Bha_4m)!!c2R}8aLUi zX^5l?Vw3dtRVR5KneJ;x~$7`>UR!;TO*=2Lbb#gWYm zwm7LWP3+`?)2;(0hm>57Li{vzk`HPzN1+{7R~PQ6Ent8-2$nbY9#~qOY^|Krcq{hQ z&j;nN-}C75-53=8Zw~3f3lb=Lm98BB;8rGdNA&vz5bWZwi91CLqPOusMhXM@XN5*5 z3e^<&n!avPrVgB*sMr_D7@h!YTqdV{0uj|jQ{JojvM5g7c#!rr z!mkBPE<_>-@+!;t=@mA_R+~SSxW4`nU#)VUT&Lq&75s8B>Q4%eO$SNW@{6LLq~(Xz z^m)$Zs?9AxQwl;YkrZ7|8b!M<#81SXiaiI!M!>7~(g)#bw0Tle?~Hb%6A6?koFTW8 z)AEsOuvVDQH<_s4?dm?3qiO!AgeiMeUCu@dNLA}K(apQry) z@)2i&U4(TMoK7Z_pSDc68%i7hf6Kr)q+zkmrJB_l-XOYP?Z6_ zk(&rdwJabCJ5iRLH0&rl>>prhW0(>#fL!>p#F2v1^;#&&r>e1P zFgg_(qc8b_hL@n_fC?0Jnt{`_1-fpCB;uk#Hsv@$W1V@3R52srwGNtr;t~noj*>x* zsOsmgDI-%As$8CGhdMD-)akd@w>9Q+DQ1KqC5OgVH9IhC1UNu=(%~vi9fMy4nUF>4 zf+j^Rk}Ds`MiW;>vr?{A@?aPcyGWwohvoOp#;CvZ zy@$Tb6PK#0{Ulgjh$b{s=?E2DNlQCvJ8pdC(qW6Nx@7z>X~2R?{+=d<2#jZc(lZpH zS&4HCj(~{Ce&Zw4QmJ$kY@U{@McLVFM7(=76h(*|?mk31$=ae-t*l9ti;Xqk()hL zJoU{D{Vq1v*FJi+AJlCacMHoKZq6Ox5rY008|&SVUj5)Q5FVh`PGe(zRy&Q2b=i+~ z-H+~6JB{viJB{viJB_Zi)9B7@r!k1zMPhAxX{tp#L0<~|Sz_jcgd|j(E_OTZCrMj+ zd$oZS!IZ2eE!{?Ejm>V*S!0KB5{yS&0_Vzij9A%TUJ0x4NFZM!)dID0WFCo{hKgO* zG8wMJ08<$YmnC7wDU`yITn}O<@rf)(QB4LO`@0n7kXd8lih)(ts=*G2KZ?QvU*_bo zmOm;=zV`{6(x)@f^koJ?5*620R|G%{{mIxWt98cl{{oxrxZ)8*SaztAadUUI)Knlv zxL7ZhRJ7r3Aglvx+A07K&{WWubj)bwi(x-%u{VT|q5jP>>IbQ!#Q|DWuv90ExWoBJ zFeD7S$blM_q^!h+7L`;^F)6BCr5}=&tcFFMyVO>C?e~6R1=91gHZH#&eZ%#7ZDwq9^z( zBZ8#8JZql~vWp7`$;mn4^rA8{*gp?3jvtqAIfv`>noRnifDk8*R3YC)p=4eE8v!VF zC10qDm%88BDiyr&(ix1HD(I$QW>fLHKG0(-$X%vXJkx^ypA9CQpw*vzTZQmYbj)Ip zdt5P?SH1&;_6Fwi4DdtfHCHN~t)76PGo(JjScFIWXG2l|cgT!Bkqv4^PqOR+NBNir zILop(t>_T@{cqVh9p28E^L^`(Sg1f?TCAeC$r-ofR?yg%L9YwiL>=|rH`s`3*1r^B zks_)4tg9x{06iG!x0a=w&H+PHyY-2h(y}6UIo8Ucx`m3Q5hdCxglOGBe#(Jy)ne%+mhn(at49hCfT*RmJD@6SLvivJU(y-11qie>FK| zYE}!QR{HK`o-su0SvoKr!%=*N%ux1|1!x@_#4@n5QICE)f^;+}3u_*Q2ZbH+4U*$L z+KmD>i}97@0>c1tD<&0GgCUJWG94?z;f-0?<-TYUJ6}2MtW&aT3WCp zBCdhLvZ6q5Tv-Ollhxaw149AeZ5>XqtgH;B#~3fn(gvLJ)cahJmW)z}#ln_nfJC@I z5~iY-G$j0(@woEjTwBwSNIL`mN1~V~#gLeBKz1=hLt+sm_4-xV)h6KFi?udhfO|-r zXw>!d4UnmWjqD{bskm>smiyUl>~kLPRmxRA9)*$FsE}Q{J0KZIir7h|z4Cyskse_w zh6A4`IOQNe>+s+B$6B>^w1uA?zqv+{Z_?;+seGLg-;|>}B2fE=t65zQ35&Y0GFKNY zd;p|sfKH5uW9<)W6;BMn$a34Gb+S4z(n2)xk zp%+Y$8#x2Y_Ic6z$n(YPCwlF!5>+Y`W)3aiaf8iOqh_M9bair*A~CVXTLDn0gTZEN z`7#+Xv*aBT4QQa0>@%soi$W)D^L4dh+Hd(CaQPIyyh8D4Rj?9` z2)60|f{l}~k3rxv4N?i?rCRN+8S46Ukq8V-6x2}uS~P9nug7knif{P;SE6G;l(IW| zb(u^cK^T)!j%cG&QVe%`rCg#USVq9(e22~~^&NSH%ySb>Sf|xw2Ky~=s#j37M0VS# zZcvG^XgfHlWLKIu8#u3&4^|fmBZ2gNn>z@-w5%M_BcD8T=!)!@3OXw^3!_c)wPt6f zg;?&S;>Xtg!UH1?CJOD}iJD;^hkwZM`qJN3AWZ=bcS4bkH?WN_lrIl5f z^`yecdEhQd|~ON)b8Xo)X1_DDbw{8H|D~7XeDxf{6p07G#VG zkyaGQjhapv7XB@&P+}7~@XcL$NLeAcUW0W=TV%OW{sMAq71Q-F$n@FwCxSCzb&c#V zhn^nZMh73-GuJ#zW>9#njVCmR*<`dfmT4dk`AZ`D*Qn{!);65Ar8)JdFgc`-f`MYY zU(|5VM5d5}QsYvI1BzxdB?{m+uQ>azpM=Jc@2rV>tZSCY+J#+k$b}N3$=B$H45)F( zrR!(Q{ZYX0G%{G@lvvrfSQ!_M0kR{}=D+GsG2BdVC&vTaDP|}Qf2o-zld~khP}9y4 zEK|E~9+v^tJ9aqbmovUZ6<2MVy#UJINTT+I!SOLW_qThEMIDP8>R9a#$<^VT!wfl? zq%{SQ04svr@6us440^aQZb!@W$}ltAAYLRGX#S|MrdFz>xLt_E3N6>S@WmC$NYTcP z*0S6)h;a9{4=XL?fgSl_%qDlz9^9odZz=T!Wv;K{yw+``n5`t#^^s|p$wB5t)5I=q=8Q5JZ+kXi8dfOlp^$?~2*zwPCbg(IBPdu>9}xV~e+T6(z76pagcen(@|m%e}wk z^xrj!yUvKWb_FJILtp|onlOPIvtR-@1T1eu!SXhyVFEX1zyxmG1QWPH&mF|?iNO6r zVsEa;_}A4hI9S9t0&M$p9x4P4++63hvKf z9!j)I(PO(r9xI#C0`b7r<&_mhmV;YG3dkU*WVJfS2bS78!xE-5tu8K0+LB=+fXRdG zf^6U`C=G4vyG+LJPPA)Hn6vZfKpx*dx)BQ&+fc65H(^7Otdi!xeP2 zMQ6s=16V`~!Z5wbt*_%OGbm(?eHM<@a`5;q=jf#^TdX-2a7f>~^i*wkKZ$B!TRwLn zdcbH1W@nm7i%_4m>e7?fd^x9Rt1@TPjHM07qzOMcu-2grQTvZD$5u!#pe)>3V2<^?BFMcaAKu*v2pnFWpy3USDi zE6dZPa&r$CBd%qV2CcdLxC286X5$R$3iWw;nh^N+W~U+6?CZ4Qj$J^t)zdj}fNDy- zoWS{wDWcYJhm#r6JYyVNy6;&gec>5P*J)1H-CT!V?92i?XDhRTcn+Ns_A;YsR$xe1 z+Py4T17AY1ibZtPTdvY}Qku!Ssb$OMX7q_D5NiM&6~# zGt{xRX|+uhdY6WJR3f|B@*rW@z)+Yrj!X)AQrj#|&+%UfSMO_GVU`^qOo%<)uVK%Th%d+cV* zG&&)UkGRjF#v+1Bqc$bXv_bQ`B0z0wA^T}mipeuWnEAYcWN_Z*>JLE^@+kYkY{Nu1 zhVq}dw$&{46h=-Eb*~Ix9A_j=FBw0b$1b8jLXLdwq95!mXl#&R zN%;g|D`BW(k9KCepd2QP(EeHC*-lM13)xEu4`pd!|Jx(e{Jcu5_9huBUQI8fn*PKPn#3%R{2#D z_?~+jvWN#4nBgUQRf|pCXqr@CYvAbeNZPa(R~;k8Re|}gu7y> zdqZaMGs#7jsT)QcqgoEQnZvEn5*Wq`BT>Y~!Jd-a;3zmiT1fM4v4W5sfwtxzuDv$f zJo!3mkCL}h8*>cjTU$V{$ZhT%S|Ic1D&~2IN@5;l!WKz09ymw!=q?=~(Z{nXq(*Hp zB<==DUV8k8N6%&~=uh3{?WoPm>c`j6y|=qjI~|2fiCA{rzTmvH1+%rF*m_K+nZRB$ zo%Uz0YI|dOxw{ORYsA#HuU3-f<&|YxFtCMmd0bLiDJuJwq+H%g1Z%c0vE8)yRWA~DaQ#A4t3+c94QR0vN6%u z5?@Zm9I1v?x(S0-`UW)2+Nn=lVOfWCkfWmt*KP zRG1`I&?xR*&Ea*E4ErRRI1EuWF4rCcZt;>orGNa3z&4^K(!`f!CaX)stY4fGt0(!~ zXJ;OKZFd3f{Bx(%`D*?OY+@isc~)lh`K`s}R^J^D+;eUE?bWLMu{PhUo@S#g-(?zj zj=bTyUYU*Vv>X}!7@m?_ho6TvgshKso?p>_j(2{wvv>St_fXWJU&Sw)pU6YUPj}X~ z*0okr<{mX4SnY0vqv%iSpERC%u{(22sAl{?gapGr2xsj3Kf zyKDD3op~lu*OsS6!(2a}5+8T?RVZTS`k9D~+D=4wdJ&1CyRPaE)0+}`cl{Mfy$`t$ z^G!!5GuOlOPFO_we2*scKT0aWd=ElxnD0qaE#`ZW)Q|ZdBo$@82T6^Y??F;^YAVZ* zWgI_NuMtV|&(vxHR`)ODv0nA~;2MvO(RlBvS6F_k`VNWxBI{pA3$Np|vm{^qm#97l zRra&F@DbrIoa@2}ONu%&qhBl^AdvAc|=BzbS+@x8jY(fXJ340Y=Xm}hTwd3~!h*N!B^xloHS z;2dOnr`tvp3O`3{u7}|!o9jUdGtc$tt28gGcdai_NvyS%@b(_nMF9IvILN`~W7U4V!;-faTcmhmv>GLxj&zdXIj zv8!5_hdeg z{?to9=9p_s{#={;-Bpp`{r5@CKhCq!&#sbQRz?fyFdqLTc&yII{`_EJoj`|Y9(%Vl z;ez8I#bW8TcUF6EdFy<<)rVD1@6J@8?mv0@t2d+>JkY;EsPo?+z(M=~&ff>@rhXv4 z^1JmK<*c_x#jxGZq*(IRo39<3-<8yAyf}G$_&@$AALa=c=j8^~0?0O0-y`dbp?qeP zbZCw($_HO30YpbENq3BfC9Rc1$POtSsuy8N<%i|GTj>WUz$%QDg9w&<%Es?2NqfAc zyM=Dt^OkFEJzFo%+Q)n2-USDgxn~PnDM+fNRu`W~I~BU9m4FhuW*iVMh5=fFq^@f| zTq8L#tOhQV-sOl0^5OuFSh*RgznZO1l-H z(rz_SX%qUh`B^~ZZ0?0Q{poQmEByP4JykOn4{~sos3g5osxDY z6_1u zWn5AP7?lG~xs+5l9;}Q`vcVe$`l;xe$4DAy5JbSN#sj_q6Aw&>oVLBedEzR$idu;s zJ+#tYtFH2T{+-lbwIs!y7I~Z?8=tGO3|?(CN@7$U(*&PpXJ_CyL?a3^P9GkpgJGN# z>)}?$`xY2m$P?B_M$>M+&c`cs4xA0%P1Nh&yKTwKa)q;Yl2TGD-@ zhR}z+aM#)ZDc4qo5M(z8;{gHo3U%G25nNQn1h`6vv#hoJpuWM3scf5Oo!#^>fI{cj z0aVNqS>QR!qYQa68Jr77t+fZ^Y)07>qPvy{#^)DF3kQ_D`(JSD3ABQa-dx7tpj}2H z{Wj_a^Lwt(bSxkQbb1+&XIO-?6l07Iz22775O=i`a!b>l(AEokd3-^eK!o!&&hu*$ zn*xxU{XY#-Y;$Kky{%FqkqYq6F!LFr2A{)~Yi>HD3uH|%YT;5Ql}&MdRj#^Y;LpsJ zR620-gwM&-lcL51KjHQk-<6CPB+VtVqWG>a^;Ej{JnnJB7YH6Cm$n4-MubeEDE`Bt zlql%67`?78Vx*HRCQs2akkiD*Ar<0Ms7|jsBeDa8PtwDgg*%va;-;tpIht{+yel8>ROQl)X=EfEPQ9GePsM#;iZ-p`Xl*W~7eS zyJAd-n$HE6T=bI_PG3VxF_%(JifTA16zmA7L7YU)`%I)NXd@#=Nt!}UJEyJaROwk~ zlr532a(TY=H4l+=F3aI359t-G`Y=3!Ar{7l7!Rm7yAjMf+>2(Sv&F-+m@e9&9~0TI zN(O|`-esICy5JII_XSX>3ldNlNoU+Y7k6m2b!zmf4SY9J}sW092Q7h53IiEy|M-k>pFK25?`omC~1xy6_ybE z%nH~|n4;2LZvMnKoBlnMuGs;M5OePUgKTus0BV)?68y8ob#UPV@jw6mZ8G{_@mDP2 zxwiKYZ!wxdf^05tsBY#VK{l7SX0%{H`-PP?`D9wv-CSl!kj)i_1le3^K!R+p%zy;h zTv?Nc1^F6hw3h+@&JZvL;fFVXf^6bJuh+Gs{}hEV`oH&TbjJ{X=56A_ZIK*pEnsUi zw@lhA?ScO+DM?@Fq-fQC*Ou$rFWCcL`z59BTBNF?j~l+XYmRWGAjznFsu<}l8JALv zF*t9di8x6RXoq^s8r^yzJSQkT@`BIm?}W{W)L}5NQYz(JfDd(5n1b9_mt<4WMoqkC zU(9a`J@9z^Y*d1q@S#DGqyiQy$W>zk4h^4^R3_XAYcZ^;dsYK4 zvKlk6)(INR)lm)v`3DuU3|?Vn*Rv`+rQ;0@_l%cC*ImFX_}AY!)~WU|3752Y89;3r zZg`8q`s!oo?tK$N7;#Odm0Z)(X*H!DUIS5KMtiQ%DxiN}C6%>3&bb9dz|Cb=MaTLO z0bfDLA9ZflQ6rZwLh*1?N=c<#=z^5+5fPlFvF#kaKlvtM)5d{g6^skjY_w)grv%=E z7wwUlrlq687K*ew0Jc-8BGf>tT@#Nljvu*FDYu~tkLXp)m(TY9q_k&R3syE%;4t0+ zS!1-(S?;{6t@I{jZnnsRIeX-0SEv=>0J`fN^j8x2K`}cFYimJt$-wH9{vCR33>j1h z=+gdL&~qlQ{~-mdT=LI-uAM(i$!t-PapQhGW|SZ8lBG@E0=XFUi7-vDPFP{*CU*z{ zdONh0rJ?+fIp^>|F zdN!<$Y7#XFgFb{QiY3#jN%V(hAHKhFJW@ys=cTLTo-z~aWpqr$OkVp{99DQyAr zMTY6eKTCxpaoeryad74yy+u%JF0Jzf2IpZsrVEY37{<}jZUbOs;80QpVOVTR*EUpn z)}!y}IuEiufL;_>y2LralXE-~rWDg6cInQk#+5Nd&c?bm|z z18ycQ=$x2UUHux<0gq>0-SsI{{3x;Hq=+A&e3O2a>zGaO(nk%_)bd<`!p%kjbYyVz zwNZK?ztmM+1^X3TA3BfxBJpmqp@0N71y@b7)klEs)R_hytW6we#+@AttFN7~I$mCn zJ*n;=1>Dj%jPm91iJ{T<^p`r6GzIws1H9Xy4Q;}Cp7_=1y>h0Fe*~8qed!9i!|C{H z9c!jPH>Sabh_|q7?psA-7dZ0T)}jLmQ)8ZGr7KW3GOTMl(mH~91mjbhTLyl#L{TB2 zR`T3x4LTiDU^2Ddh75cjF5F0Cf{6=qmtq{n0{Pq~xwlXhmpt3wF53Efc83+hBUipm zlW_n;#oNBaWsycYayGGoU2`C(u_nWlf%DDOC^cp=0iGr4!WFg`{D;^TZWTuIIK%=b zWgN8uq$wdMgEGf2v|$OlvtU1^&Re1Oox6bD@#h#fgd&Xt42DUcH3Nq#H$o4T=+U!d zgGj@>WHPpOI-@2=eyME%Abhg4G>=J@*Ci^wn=O7ImoVH~T&u9Y|442`|3fq~T#D^0 zAef_w7P}Hz;@r*u+kX}v{%PJPckJ(Y_5KmvJ_ckBE)Cv2-%#|waHx%2hI(%VlcR_s z$}S@a_R~DQuud@CTqZtGd+g6=NS=|u@-t|GQCsxubPOb`CZ<~QF7B~q2*P5oH6Uud zE(KEuZLFNtqxu^(e~+}%Xc#H73gJDE6V@O#^yyID$iVr${T1N0iArKUZE9%d>8Q^$ z3L9%%Q?=jnn%lG`!2IOh=!_EAE>|S#_i|f#izfx|l_?S-3ypfN%LLd9dKz#O;!gB9 z7Nik|+%MVCD7yi{J(ntUvF2}+cp)3@AoSXlMtyCr&`l0s0cw36-??jq;|VNNR=DA zNvPu(+ez0>?6-1O*Kx&7W4Xz(&)55Xo(J_XS-0FLgpx!p$abSK-a=3z zC8nfrnB5_`pxh+m;r#63K!h-29;hmqMn3l-N&%QuV8L;ua*NJ2=j0cf0sU=b>@57X zqWZ;~C?L1~!{h~I%c0#r7S{FL#BVv`kY!u4E>(n(=1(a(GE!P4!7?R3kzHOxx6C{m z*qCN|0`@h|jp_zWg@9NS*ly4gOS(1@9ht6x4%!V8lA@}({ql@x5t!X`Dx1_E7wLJM)xxs5~YcGq(W@JT*-rVeMa z7MlClE?Io)$r?`a&B<0wJ9|+CQ|cK7b@`j34019Lm*7|)GHk4_Ds2+Ut#BAZ*%W9b zV^F{%9vSry14`IR&~!Iiokbgn5vOzu6H#Ul3DUcn1`#fcUyyuStHcq*iC?(sV&Ka_ zz+jeWuo($#rvcVVZ{S^$y5uK!e}A83X`4E!P?sQt!#-rhQb1iN46SY4}*m@v^X zfGKAT`VQED4>xh=i~vSm6(xb)vq-CifQbmEjoI)4o=iKIgTv~ce@U-*c5(6T2>u-4 z)pLjaqdro}BYuO5mU)dEttcEj45ER!d}QIKn*%zBeKpX8Q)^+KvSt zR$hQ)Z={A@tttB-QsR-3YG?auz|0A}kWHIdt{o6N+^kp?*!*|Sq6;rpUhf#+Mafus zfW#I?@0$6e#G>iB|2P|hE~zZN?$q!~%K~FWIkf~C2{$(&mOk2nFr}@6=EMJ$K~jI% zs5_)Hs=OW-5<*i*yI@;Bjs+M{CIBl`ZdZm&(^T9Xv-Eg@it0&B%iBswyY0&#Mr%MlhZVUtZ+PZ-wSr$n z#J@&+i->EMh+VmWp-oy>H>qL}VhkaXmqbKP0WZX44K(Wej1Y+88q0E~X@FmJ$%?Jl zCV@Ih|DqLOtTQk_&yh#yvCjz_)=qeB3!yo2S2f}zdZQT4m$a*VJ>tKp7_uIC!KrC6 zfd?ESih6cUUE$9Oj63bHyK-}1USoc}iR6vB&%lQ<)iS6(l*EnMY9w!EzhMp2{`bE^ zbVxj1D*G~4x`D{Ds-$c z5gw7+vbpA!`*=ue$&7E;Ec^bc*y!oUL*0>MACAX78BR|nE)s>|R$PAjw*(i{^|r}} z_#i2UVs-;ei)SW3*D+MeEQ6`kV%DHyC_0)@!=O^34 z7~LrHC@@jPyVH$?YTzzg@f{hbgRxl0sxc9iM#IN?n}e{F0B^JPXsCXWk^ zR*!jx$8glF)NI-nyf%fuaO{J@2hxL`L?7LRRSWhUC0Sc5HRjz6N=$?`@{;=VODBp7 z8)xf4<9-r^P_*kF{%~wcN$~JevfvuNq-YXr5#()reeQlaySzOA6+ggIzBqH2Z(m-W zW9H1-okYS=@5d$sBo@VEC+&)!rI-+Nv7}iSNWG~>7UwHuermQ&U=HpCdo=4q_ChI2 ztHv2)p<)i%Xbv*6MuvgqG5VLPn-widApaMpvb(6oZ()I;t`69uxGrZ;7*knnytWKf^=m!4Lr_=Q!lY5I* zw}o4{mkqu{v(4Xw_=F!ORSrftUf|y2rq*99E0wPdxN0lq))6qhvQy7u)iXTW_GGD;vdEIpBDx!XMCJ#s{o zE4HD3pX-)jB@apgrgt+0nEQcF!cZBPpv?WLFmryo=3%5eS-s|AU8N>ra7((j z8spJ9gQ2^B1LI$>IQp6E8p+GSubdS=YURV=1VWD~!2LR{(WR0h>v2qC-l)vYO7@`{ z*kTOW!f^b|bn?Wqc2BP8^R~NscR?|wE;<#lY}Z9p9GJQXIuAFH#H2-Ff=*vJIxvgp zPx097kKy17k#=e^8;UJYGgGI-6?oaU!@OxdiO9X95Ew`!lNL4!xlj+kExZKOQuisJ z>zqx)xz5?NbFMRE-pdz9zqQlBI`=6Z>6}gJNat+YInp_s4jk#6O~2+Z%Q47fIR<$} zfyunU-yQ2g$kyIG`b3@k@$}idS5zH7SY9nvgfC8`l0(=+UrB*DwP6l@&W=x>z59H* yIejxa_c=QrI`=s{<_;fAhfjLvK2Q4RK2MH%)$u2M?DGWPbn-7qGD;5Fb_4)l>xS+C literal 78735 zcmV(`K-0e;iwFp4sB=^T|3PweX=7|xYh zwrtrNS4oab9LKXz0iZlQEV)HmYQ+_n1i4tTnIKnCVVJ>t17OH`Gw)3S$z87_JF!NKVIp0DKlzI^BZKj+@L^8j#nt+f*WtR;Xq@6Ijfo__x4 z6K{HH_R!MS_CpUnw7OSL($zb6N6AjQIx5HM>ULi4uGD2)jqrz}NsDGRE1Ietx1%O2 zi`TtC{f)Oi_22*5 z|JdFdEkE?oQ`6HIKL3dykRj7*S{>YP(zc4nX*??BJHn(s*q*$%=UM z*)-3WqqJ_~X<66VcAidTVsW0v^`3l$AEtR*%P2+B4&tJ0WD0mtQtQ5q+4T^5nN z^x(eC4pWQMBE|w@S%3{PO=Knq_ji)EiN{G%%cylc&g!Phwp)CsjxS_IdpE-0`8t{Z zR3_cZ?@MRX?JOzcmH7I0TQo9>bLqIOl0kfVniiYaH`fR8MR~T$_LF!ex+vR~$%kn( z8V-lc!>3lKrz6>$GpRf+FK-5MmdC{+mMo{SkF{`dGT+5+>PPHk{cl^Nw!F+ zqph%CI7*?HgU{t@w3lpWO)Gng4U(gi2~G~~Ps*%H2M_upUs$C@p@&?{nu>9zN3ewN zWjpnix z@fi zD4&kAot;!xHo|5fyi!MUIGX03c#PBSU8X)6@K)$Hcwc4EAzaFgQl#*4{ll#XRi za>hci)3R!WSV-2hR&QQh%e|_1lB||xq{C%*2;HR$85~a5qqT3G|PRIgN82al(B?QxwX$u_}#5cbxgb^U>by=-?cm;W{V>%!@$ zno9mRb|2@N2#~UtzmK#1{vYKJ@@JXm>G(txpN!&1qxi8Xemshwh~oD~@%y6q$>_u* z(TNk$iIdTZN9E=6>{F}qJ^61l4qpSkss9c?FMG#RwUCZ~eBtyv9$wwfidA0Kr&jTy ztZe?7_=22&wkrfZZgI`!%z3;GnIoq~Gx`%sGw;wbb;9@ai7i7iQ7mri0|=&MNZ|t~-*;B_|oYb{q}{?WB6pn`O$% zoBF(hq(n9`|HjLOa3P9la`-U_O>Wz?CHPC7VIGb- z%WjA;sq||{j;gDYcbZlgXbE}{$qpol>3PCiYx(gDn*E)cjKOd!Zp86a5HPlZsG{ZQ zHZ?3`=le;Ok=Z~(CBm%^UXklFj9>qz6~b%Y=@lbZ}qJ0K9pi(##QBTX^z%z*gPOn&X!R4bAk8 z7*EE9XK>K9%57nbNuyT8L?n@(HuS}$o{CsjJ^1)FLer!f5QBA7XDrAz8|c$~2NWk+ z1*8*nTG`^PNOEDdPGRouP9PZ~6%DHpL#vcYrz6PN=gTZlhVdDHp}lIIR=TD{EL937T)44zz`RvG zj7V+woc7$aL!7p_R445Y*??D-_l5s2598;{doo@md*+m4?7+REN$#e88oFKb#d=W` zw4N2wH$lK+2&*LFS&xLnB4Jg zF(~qTLIe=DqUw^ZLDb>rNg_6l+yZ%?7hGt&YKtN(cJ&oy@w!BbT%ATmN&mUq3#YT4 zBUe{0oc`GH9NUj~+;>0lf#bjY?B&gCm)0(>ANSoG$Fje7#KL$-S&xWYF(Bk>HgLyf z)IikUPm7wD2D*y*Vp17z1mkbtZh{cSBs+Me>I8u5`1C(0qr*uGAG{FodcOePd3VWE zuU_~EAq;AqZ_j@=XRaM13gl#H{@8~<7P17bHKh<82udz-v-j|WXhz<+lRaSTVX$Oe zWT<@X2>(yi-+6{*ux*tois~eKdovqFBa+DrzrNE;6e4F-&oKs}qe$sUX>uPDdkUxV z3!qQoCKa8&Ug%Si%G>7Pb8LGA}<6nsQR9U?qvv_1^0% zvIh|DfhZOwi(c6uFG+eLIvG70Jr+G4JrTY4$4zp6p@vc%YW01g_F$QY=MNDdH}q9G z!-@FadGr4G#3RRFV)?(Lc_7~)f+67Ubl?i zcV6y$xho)JnbjHn=mB>g2Vo$DN1P)4 zzt+(fop>xd@pyFNiRi?8qZ99oPCOZ%d?Y$4*ZgF3^3mwzWB*&;anp8H%}wH>oopjK zkv4ZyIS?V47}m#5Hb;A}a`!pPAqvD%aVkIj!iV7Av)I%e(`d zyqH_r``;g({9?SgxlTOwGl;R?g)ZdX2nYZn05i(y6cZ*+?@kh_ zGkUCH>v+=UO~%+p4Plo+J%bB4nOdZ8oV_6Gld^mI|7(rvi-q>ob``Ilj+Pk48fjQ4 zQ$ILkD=osF8ohxJt(!IVZ5n1>a3)gU3w>anEOHUe%zQ3A38ym^W>p#XspS;gwIY|5=11Azh@Z+WX+%ljI30Zeto*`hwFnela^Cv zSl`X3SWM>plrbW-(*|KNCmVgdNvJGS#kG*%XmBqsQeE4)&J z&s{#uFy6#o@5qzsowB+e$#tX-{#L@uCj8B~|d`kw}9KBR^A}xU6YM!x2TAJ96lsnneuFtImB#%-5fa zuu7$#{)_s%g$=G6avPriPH7=~VOsrEF$-j1-ZDsQ=>V|fkeX6A-p^R~qY?TS-92Gj z(>9k4#0Pj)bmXfvjmxEObWV`|)OG!u&(lPdtz!2~)rj@qX@p`r!h3Ept*2b5OAM0L zXE3KAQ)A|J@p?kgk3^b_U|vaAJe$KsjKnbBOOW}o%_x)zP;3Nm@_q^Ol-(b}8&hdg z%AuJr2^9$MdLdHc&H~Zy_kR($7I_eHxqS;^nGxMHW98I%r^tj;k20rd_N6b)-n6v! zLz6uipAf z`9*Gjx?5KFW?$0{P~~?j$la=r&e+G%>}!|5d-ioN&Awjuf>lfE&-@LW@s#&+9dQZ}N zb-OH^x{*bloPEpI*J6bAi&rkJU0cU&);DKA@uk_fZeerQu3vlh^3|K15GM1Jw!Yp^ z=3O3c(Z^o=&KpZlUwH~1y3@n=JiYv}?|kXTY(NURc=qP{*0uFZn{w!zvy~gO z;nLQ(gZSjQ_A+=)mqvAcQ|$}yWmulAa-NVn$?TDI>n)h&N3L8xe|6*BM`kBJrDSz= z?cBAS7uGJF_vdhO>sxRws$>TT!9}dRh+AZ9d6Xm&d=blj>{Y(>_|~@uM}B4f>cutg z!REEA*UwzLesz8J#1?PYd%2re*Vp7^H)rpAY4)Vv5+Sskm#^ZupZUn_6mJQfOuR_% z=i2ldT)TX6_SDwf`*%R}%Lys(16$w3yL4e)4&n0kYgevcv-1V&%7g zXN5j5U%z@rj{WIRa>sakZuUs%gEwYtBq69i*=Y7m!U=R&70+E;zbdD9=Em%-XBAUX zMhcl*6${d+V<8&F(C(abm$)zDs$?buPPi z7;=!a=T+8#Z_Pf;_jvBe;kHNs^Q7VU<41T+uYBbEMcKtoVPV&9UcPdT*Y2Y)%|6Cu z;Qk^kHTyUz^}}GD2lr<;$agMWK99YYv!4Cb8?&4I+xd@fToDE(+cf)WpX98c+qm@H zT6m|E8?$Xb%g0Dnv(eT&UcD+J8SSOBG0FeR*>kcHAGxqTOSirXdvGVs_tR-9@^QAq zow&L#{0k>2hp;)@{gmEglPlQ6>zlJZjx}w!MZ4Tf$Fq!U_6+?Nk7-W2VCQakx76;< z<}AN4o9w+eAst@1a9u8g-IwCVtmL@YHZHDz^zx|GP$_6b@RgdrSq~~^@mP!43Mn|2H`K)HfPOCvz9yVR_RCD zU*_LKfkpbb6Ofxwnr9q$N$PTBSJyg8V9U98WA*~~(nfO^Pds|$C4t3CFG0_y6=8vrmxhd8KCGosbu8 zUOuz2c478CCZ6svqiFUsDBSj%W?G+GU2XKQNP0IKoBd2aZXe9P_vP95akTSUv)69V zUgpf**LV5H@Y|o{!}|Bxr(T}@EY53PO!<8Fv-xWL*p%{R{l*9NpJ9m}-e(BavviHkZbD3Z{9hTMZ>Ycr`O7&EK8P8>s zOjjmJbz5He124~hc{BSJ$|Nse0%s;4*btd1=PEqnS8{%Ew9Dhaille;@|o+`HZE-5 z++4qQO`hDG{py!yzlOx>xuYYnALNRh4tj*D^lQ6Y=_U0KZGH0`_w5PlU&mD#CFA*D ze;gJ61};o4#HGy(D&@Ls^c(q^UL#?yE8$i84DSk`#r+j_dU131irj3@b^XG|nYBwd z&sC4KA5E)rJ1b_tgJQ(UL2M;4JT5gyIV$guwCr+7l1dU0rfj08PTxw8Z6UsuTDg zvp>h(RJpG5e{=TdUz+^|lDfU!js6$+7N}FHFzE}pzx2}VFRQ%7ops;%EBfwGVG1t! zU*&~11<;h$PPv%8$*m~!yY8hqQOxtGmH%S2(F0Y-v8FI7r z+22yGf8p|(HPJr)_Kn%!fzPbmBrPwf5st`YP6T_%ZLBGnf(hYMQZVY7XBr7qG#;rQT!`XXvc5e0siX; z^W1-|FCY3cwF^wI3bd}-eIX1OKF+R>DL~*IkW$%da+lh z`HkwKFA;{VTmf&f=~rJOe?H3Kuf7x?gqo*gTh*KJ321SW)uZam@Y|cc#I3#@zhgu0 zs9jOL*$vd=%0h+JS71tigtzF@`iIxWRynr;i^aBhv-(PT;FG=YItEz1MLxPwMHoTU z#V<2OyZS1;>|L+57`ysvdA#*Ey80S?o2Fgp(yG1|Pi=FNdc~@*lfNA4FI(g1QT6rm z!18xjZC9srH|bsKBfp>hIY0*mmX zVmO#UG~K&bBSt|t_u<*ZOBR4oceX|VTx`&Sd!sb!UWvFtdkcPVMCxQy5T0AM_`)TG znbNx~h7}de(*JYTfgxPon{jOp`l`zI835A2c3VVlZWfc{Oc1Fqxrnm0a2CJ#!hGT| z0yHRPVYz`X2OS`YH#dOWq!(B>Z0}?wr(xzAV}r7grjB~kPUgaez6M+daH(s^h(uBH zVpotljLtBUtwb8{CmLy~H33NLh3+?1+F#8Qlc^CD0$4zV>iYBrtw3=_$lQU$@mwD| z(*jT~EMbsJ>&Sy}`4Nx>_}jEBG7VG(`O6#!UwUTqEaE19udGPkPrbI9Zqg7!A53MI z)i9bj$r>x(APB+}!$*d9-RgKVthipI7R)aQCh1~VK{5qr7x_yT#FMPfl>5Dt?Y7wB zB?O>YXzQXdb}S6HMDEGNm&gjK-#Yj~2Fp?ms_BQW_A50?SsrNIIvFR-8<0JTEN&dc zicr~KE48~glcSR`GKJk`^2NdZJ@5!wPmrV+rs>-W+rfLfFs8xOKn>{T-Nn}`n}{TW zcy2(N8gkM>wd5$VwB96Ze8F3=AhN&oE@;`;0R^cFnQUf}1=Hy6+n~pIFsC%i%a+mM zJ-L~epMQ4s#JiKp^!+DRi$zU@PqjdmCU95-{P>nKFU7<9elgp;eDUSQt z2<}@}3@-aF+)VawVfZWH7^%(Mhqb%4T#+eKj;5qDBF03`FsPY9*^*=x~Mos zegw>G7=H&#(%e{HC`a9kWC9tpgLLH<3$NwQWz+q~urm4g2|s@jom_sF%%hf{yFh1j z+}k|lC@FbWW!Z4_CQxZaKS=H+R4`D^jpQoXOI3xE8i&FUpkQ$}mUGkHU6NYaM$Bx` zb-B|;;>8(|t@MAm2pIQ@l#MIPh&QB#!peV zJZ<0(w&hqjGLwh|F*pCHF7s@hI#mNqSsub`IXBS&TOu9EE(t5aO(3p=4(#D7gtZAn z)LLVZoUqL+PH7w1j#lX|#2o6Puwz^-cQBf&Fk!uiTqFwB+(W;dy|k%o z)WP-bk$-yt>e4itMn>+AH|q}KyC$3D6(Zg1bh4dOaF3GM^1dICJbkEMpj|`TkG|A0|pF)+Pqu4==VmtdJn*sxC9*BkbIS{X4D`3%J zjW0w!^doQlnIa6UC?WPupv_x?n^?_&7n#agOvNtkCL$Rb1 z$T4wBW}9G$ZSj=Ild{-7&C?Qs(%(E19e2=@g87KEK7=&3D=`swO0mT#_riA%`pf zqhGeEHpspshXeh%G``k6I-X(+IUc5M!}1}>n&y%269|l2xst`SYR7m?^il_9M_p9p zJP-tuszQ2T6{dRXIW*yO21+#I!3Q~^_@JE!D| zF}mpzJ6V;jxtvH2#R_!Erws09kq(=ILkOdF*6xeWAJEDma_EOG4Fg@mcp}zY4bMcW zwyyV;h;EP&Chh$(?CHS3j)-Bn`K-=gZ9L>@%2g;9HLX4kkiNJwIv=34>1L#g$`Oq; zO&hvbkKRMA72is3l?3SNlm9T@RJy@|riLn~R?)zc($k3BrVf(vxTRk1ZhMEA7cX%b zRyyp9qWXfuaL|m`wAk&OHWvmO#O7cCR3Eh}W64Od7On$c3)h6hXbT-ogD7phhpJcB z0MgKHVv1?)lslY~=%1N$!C_^xz;1C%4gt^sg=pcf%!zU$g3Bc< zc3U-M<*>nf2XTNLXixfg2wSi%cJ(PQ|v(y);?}pY-hkn;PsIYcf zt&9$(L)b_U^iZ=`;Sq>#wQyFbRp4d}>5m@>q(kXzcEZu)%0{nrV@E+^ySF#o$SW(m zmE82>-q2f_KP9u^`ezt|3;;z3cwTbH^>uFRRwmKPrFdocxc51Kj~~hIPBM3S9Jfd! zc#e&5;Sea`SIO0aR;RsIgfIGmghz47tTifg%%dy>NHs;16wTypqH# z=i@tf?yMl=1-G`@$?isY1~@Uv&W;?_xQy@YrD@(7pWv8dP5<7tP(jb=Ji=rh#_RB< z4fMc_9b+lM(qO|kWd(OY9o)=l*%Ko3@C07g@h*wHJ6J`aEc{N;4)g>jaO&FQR}_PDI4J* zDGhtNnw{IVo+1F0-?~}hMPw}rzwhKP26`G%28(L>iu^?cXxv&&*@IJnM`NCu!_En8 zYqqlk*ZY2{>Un%B3P~Z=*E$u5XYT)~*WLSHa$hhBb|_Co-PdZT*Sm8uO)0)$o;kjB zKh&sR7{n!jab!PzRil5hixSzp{A|F#SZIns$ykrBw}!|g#P#PAF9lAS9=i?Q_RB8F z6CK>&br`Z;n5R=XAt*Cm{Js`xA;CRFCX50?#VGUv4nk7IS5@;P>K1BXtO#sCdeY)R zdT-^T;c3+|BTrhHsg5kmGTyG5nd-Zwhu&OQ`$rt<5f2H44U#79L9gG>lAa7SR#We- z+)nT9%I>W+aaAYAd1%J2G?Dzp`BDk(tss{=Njc@*3^=1v?zDWxD@sw%+%RXL1zaIV z0|iD@uyvGUzCeYo2ZTzB=q75c$&k0N0db+z2O;*8d1+P?m;rS`QCKWwVtFWIugXzm zly{1oh*#H+9|V7ja|UmyXe*IIjNAoJtb-e)?9c8EG20jxi*Qqk zrm2*DaDQJtk%*QG2VlkQ#f@thEgC2`;Lb8wVc{+7LLKf1M8M0)K%w$xT?egHzoK~P z{_JtEbu*M1C@qQJmdIx9CY9Y@(3a;Z*EgSmp;?qo_#x228>;ikG=q9+Rwv0ltr*pC zW&k0-VFu*$3y-G_hdAUziXA05^UzYLi0iVA@mVBhc!Mt^3W%fI0(B~xu?*&|rHUQPqexhhn${V&LlT#aLAjk>z7v>_Sim7c_5w1T3n6?K;k4D*w0x1u@ z=dANTxWJFY1En~ra4gCbM6XI>7ewqS0C&=Di>^Y}d9TT-_*Ek+hkVGQpdaU7PNvN< zzU7r;oZP!-@$PQ1aF7*SgKGby(KR9=EnU+fMIJljg*+fr>hRy{D5_%>!QdW8BSh{CanD zZ~FN0TN!@(fY06-iu^GQxI2C$XSbXEZ*U+xGL7*YP26=0boK}A)$662G^yUW(ICLz zz;m38s(aI8?^gfQ2a^12eIW|2v(fEiaRj;nj&Rv7OdsrU)U6>0QPW3j;52#LR&SVU9(5i_}3_o6aYbl)rO* zAqtCms!yf`oSS-=M2oot1aYyHa}LE^UZgxi-%Ivy?f`jaANu9q&2a|g67Scv7BH3& zQ@ez{m=MF5m72qmtVDrITvHcIt6?lhX9;89`_k#GgaVZzK&8hNLEB0y_wp{IATjtHKM5oz|9lR&$qu#IUb=hc&>HjMb>8+b=*gp}VjqTXg3#K$9{JzohQm)8fcS)^hJ|k2vH`hCT)I`bkm|bx60xf|Q5? zXcMu39N}S>iy`)d0b>muYS-~(86QWM>&-j~?sqmr5`xvFF$z?Anb1jm4+l8t=O*w> z184cev7!U-YX^a|)|&#EmV2aAP4Wd#i4?19F8O%uqsw|;OX`N{xxhS{9n&|0FuOy; zsna$GH^RcJZ)SnWx1d0ztCp&MBC0-~LUkYOIgTuqu!Q6jr+S&oBq=TFsJ_+J>9Drt zC*e1gAisKzNcC;*nf7Z{-&@7<->cQbcsPWTsTS~s zuU-D`>K$C&JFWbM_416rq5QQ0DHH4Y_8>AFku7OmPXcY`xXTf*F+i+_!$>4Rq zRl-#%l;;|e!DY}Uc?>k1LF8kV&VAl0Yrcg9iKSj^NWMxR5HsKMPT)R^gxV@|Ps^+~ zn>3l|gPc5)x0hp)ySGxG=b^<0MRM@NOd`=mM7ja=@lVPkfV#h2ffb+zDe&dPlTmk- z0_y6jqprMSycnJcnI>~3VkTp|iVMw}7Osn(8ZYkAnTQ)5g+VKFd!D(E3taDa6AWI( z-f%(JzK_EtB!Vx`Pb-T>YCACe{P)>GEaG#k`rtBwzp80z`=g5v7I%0;mVcuZ1IK<* z-b>o$IC0w!u&{!qM(R$yjXoeb_PWfoMxojwTsdDah@$IpVqbLln{n8R zQZq?dIVJxJY55fXR58AKJ83fA5?(Yls&pwxK5?biSwwVDHp2RI2JdYbU89&>n;`nV?=oBfPBe-B(l?U=vUn zVFQfP$Pdt^0|Qi1-OiS;3Z<8DeF0sCkiroPw~%;RIUGxXEvoWw^aIM!8I6(G?2Rq| z`V(qn0MJ%0BJ-r`tk{*WYPuGLl$G?+fO1_WtYR)Q?yYsOt~kt(u5G)HtaS36KSKJ; zL?hGc(`TYa54litKl-(v%2=abCXLU#kbl{(S2LM~&U)ni^Zz23TpN6q!oez}$jq?6$rj$M27 zz>yyd>X%D42d=Azhtcd&g|e-8OnQ2LHxuZDB_dC2;#>*kJKjXVVpGVJ{7Xy zlRj#$IZ=_NA{}ue15H!X%j_;!V2lr#>Y&4c`uss;{-*yb+3@ z)4*%SzYF-Z}2?QcDDGfEf8FH4BHY++4At~ZU049gycd}Vj)sw@ZkMmrEZ|WXJvX5q&%*fmm z#dI}mCz^j1x@6zIJ1}Bu98S;e7D90%4s(90PFD!d+H0#d{e!FYc0DrZA3OmU z*5g2|>U}w!|6+TrkD@x+a|}L;-%iMHuiMjAJ=XIRKJNU4Kl+w8f77?oPxu7=gzu%F z@O_8;giks@;VG{2{h^;QCCk{Yo;vI&bRT`-ke~2$;3s^VV}9_kpK$FsKjAaZPk4rY z!n64J$=B>B6qc647MJZ>!RK%Tu6sA&fBJX7f2(~v-GFC~Y&#(KTvBOupj-$HAjGnu zgtVYSORfX*G_?Uo$EsRpjt*RGhDkTi!3Eeo3_lNU(^E;jCqnlF3x?dMO|ir_D~3Cj z6qp zs%Sa&y7Rky?m+K@v=T}_c;&cg^wIt1_@&Q(`d5Db)1Q$4KQc&uTkZ$Ju^%+R_jDE1 z$Blnn1YXYI3mEx(j;__WPd|O!d#7EC!{g_3XsQT^)<=D9+Ox_O7;`2T71KI;?obfin#m67DEh#*Gp2{UGKm7sSS@=F!ZGZ<6v+37gz_br14s9mv?BYwSy@Vs)rEjh(T2o>= zL->#tl!pC+qwy`#%F01kgJ&j1&}B=JwnWlv+av3%rRfnbzUV>1Oo@zNddVkcC;}qL zT$_ozxB5~*iczgfrq{~li+B_=nd-c1CePHvzJ9iv7ORgAPgM)*WxrL3@bJbO8u``sy z0WoGcW-(;|B0g2*alB9vtWX>tP|>ISOk~$%y@#6L z)5DR{qs&t~%Ffw>F!x~2feT0Rc#6Q21+fo4Lo5RNc5+4oSlA4Zg}@j;B1ov-}1lT+3hp3e@MEmsqR(yIO5|&*5T5+fsEN zPRcA|kIAg@ltEV1Dfy|>$CsVQG1nev^JB?6ogD;DQBJ32ooP2JE=cnoeMpIuT`&_V zT|i6e&RjvpgOY+PTjYADY3InSn3kbQY}%j_aNIs5I+lwz>Y`yJiip;P5>3qki$$7~ zwa?XD?7-7TS~9|<09@;BmR@#~kKEin*{m0C_lZ1PS(`+bQqyeN1!^HsKJ*)HF8|3h z%`mk7VUDyKnm4BuN$NT0*QrXPOpNV!!wE_a-NRf!NY)WTWuvyTK5Pv0vtgC4?j@t! zO}3xalXNvtRy4U%wi8t}E8#TAgGE;uW#qNS5Or=ig=F6-ZDi;_wk4}vTz`cvE9vA* zJ3?Pgb&7**0L_I&%=n^1`I&%y=#DD{1ibhDE-7RRgP)XY7Vp|`IpmygQ>{T-yW~`r zwZZ)CB&2rtHZ7HQSfm_}6!gG#iI|`0a*!^HEE;z+9CqP6B_Q4N=_7``rYl=yoYi1W z8+Bkhe9?Z!fxh-Kq5{@5&{xnO%IeVMB_t?QHj2C(?bZFfFOCK|BWi-G8lFe`8xSUU zX(psl#6&qwR#~ozkD+0}w3&Mz5Y06?jQpgA`kBO_f(b6Ab@quJEVmJ^Y>vhxpalPm z!@lZWR;EZ0&A!&;EW^0Em1@k^g|bI_x=uYACC$NaB7}Xc>}$V&=BvE3-qY*2XkqO$ z)vw87i$onLGo*(x<&wu(OpWB+M z&vTwDrp541b~~G<<1EoGH1gZ(6&d5^lQ(y&a&q%Bph<3SP9d#MyYfdo5I-5?ftU}( zd?2Vl6n<&WI??@@gI<$9;*So%&&RFeHJo_z@h8ca*2i~}Y8;;(#?gn%a_qsQl_eqe z+#0yEWnbh@&7EfICd(&vd@JFVVa!Wt?kX5u772A$l}SrDU=x%p$RDA%%EMFC+#`ny z0oG(YQROXGv`~Ym=KJX^tkji>_npOh;wtDnYJR?tv%Cub{c@UR3<9&miNxMhmCEZqdZjtPg zJD|E{CJj+dvYw$+&2`Y{iFh}H=;Y2WUN5q{{?uf@4nEWR)~uR?O(%0?Ex3WMg_uxw zS9nGZIVZNq!4GQdVkF)d30$^$mp??FgVjE%lZvceXVzGDf`Z;-B4u%IlUl4$T2qeD zBKgTHVQ_0qe6O*gd)HBrRVAEMgsSdSf(O+NE7}9v>M7^|gMVm(;6`8-UlBDeqHUe&cU|7u?K~;lacYn+vdwupN__4f50dy3 zT?`f3H>m|bt*HW+M6)JX0&qpRhbZ%xfA~4=dYAQt^7%Ag809hpqFuHCMO(lrfS#GR zV-pQQ+0{}duoN(J{R#L~1o!61ZnW!Hj3~B47MWkE;_x1Pc0X)N-|eY#RCpfHkH9)P zyO^#vrDsm7<(|MHVK3yRs`MA=;h?}?$|D<;>P@9kV7`tlVJR^z@;4QZ&C)e6*5e72rsk5+k$z=xOFSTD42|_84!Dj6!n)2Hu5o+U z`bOCH z3v72&i;+}zC%LCU)0W^$HyA_}F;ZpJOKaEk0c0R`uZZSfK~3US=Vff!u$_Y8IEI3W z&1tfhmsLa63n%vcl}qudLvXcv-)n-%T5P53@R2W?-;bHehv((f5yBCDVrxVYU$Q&J zB~$6uhiwbA6%ORcP2PAlsi)gwoZXABWW1$eZ3GN znpf^3T}<*lp#XeIb9mTdZO*_-#^qGQrA}j-Gr6onZA3J5TK6L}3b2nA0TGP%;_b3e z3e~l6r-X$HP&^P%wGf&}>?>744~x8#&y1m1)b}WVUrdJ2^yD^@?uUy+npLn4KV3bcd zre96yUh|m|n-y*|+|d##p^bggV-#F<1g-M)t|vMchg&}M$Tuu(wG32q=^dB5l}16) zHgzq7r_=a7+9b%Z3a?AMMH`|SqMg{J@*!jZr5-&wChvQd4omjI=RffS!i_}M3pdml zB!i1VBhFY&1NSUmbDL9aFt}Nc1?Q11!D>;Y?EAjU8U%|$f{+eHkh)U zT0E$xvQn!ru1+mQv#~Y~RjU4LZGnZ#U+pT#qZg8()j^2jJ?JL-6$iNjgB%&Q6Kg{< zVna6zEk_F4;T3MH(r|LuimZ#&c{{wi&XNI&?r46|u(V*(aO-90e z>r*$M6^@bCH_M%y&0c!*4E+q3aXtPjWKPAm_{?%}w5*k#UaHmK?r zD`x+m5ArW26V!s43z04=cX}28W{Ux8$eNN71>aGA!s2fy3pbv*h--au)jMF z8s*u(%;vQn{Dypc;dCbd#aS&=sZ5lisSh)&6;(PJDST>wxonPEmmRn2*IimEwO(s> zgEczlK`1leppmP)K?+9YTl!6U;plXZ*8qM&ZYFuh;=KSbSex56o#PIwyXuLPq}mnp z1eg)>2hAc&<2@s3+IMsnfweXCFsXxHEtnczPb`zWYO|(3va(i0jc9ZuM)oaNhZ+q= zJu7TQxYkt!#WT(Aced5jxIsFjMYa2|I1IkdC>kBjW9D62{) zi!!rj1)Hm_l(m4*oq>E0U-p?2>c-;+8i(fD;-qqyXs@Yento%p)cYQJdKt`G@he2k zqK>gt3^`}ARS^wkXc0eXDJ^Z0cE}~L*l?fa{v=ik z8WIh9Oe>7FS_Baskd#1l0v>q*`&$9ew3V4IIV~&Fh)kV;PWf87K`Q)%>KrB*Y46vO zSXNasHW+yJx}ZS;wxg`H)uh10cm9YM*7huC!;E-`nbNc#Vz+k20(_}j0&C@PW41?x zBI#T%+34VNB0`=Pduy#-8K=2yC>m5{`>Y+c%uL2ke0`yxjJ1rgKRY~XSdIJY4lcL7 zVHmN1Qx0Zq5dbEI(u5>VPgfG0X@l;Lz6RPCx``tf2Af+-5lkrnH`+-isu$ZLhs(|_ zGgt6VE0y)WCcVwwHMZyi>l7J@5G5zicEuLmqc_1ckCjd_sRyj9MDoluae1bIkkEKR z0HfV!=w7aB3XpGNuED8JYKIZUfijf!-Sb0)&S5#fLL@`L2y(};5QvMNPx0x~J zD_BI-&An?|J*M)ORmvhOtG)7DXPINVWfuM)sS7UHyn(saazE|bdYJ}CSToXAr#^BA zy~L{DM?tdiNW?O_%@$gF%NMZfy<_}cXairs?nPR+pZQFH07v3XH>=e8Jk)Is*SpWr zt|WXBb2l!AZwIgm9AK_Xj1vd2w6nre;6Uj`*!|17b^k)&XO!LW>+q>-yF4C4#{U{9P9muk$9`=ryD%!Cl3I z9(ys@!*S#fEA`EOtb*Dl3Tjb?%j0&K5phz9K@0@~2_~*sqTfjYJ2>cAWUo(h(ql$( zz>IFCZ9!b42&gMAi&gFG!a&U&_*j*??`Brt(4BA2NU2hz*F$n=@OxIRda_qj1<9}fY! zrAvx$6R(YlX9WiHo!2(5o{5*9V+ZPkA7*jB4u$Vz)o8d=rD-86 z8y0D^`i^%1p>v0l^&Q%rb!DgW*h7R!yQcc8s99>?zd0g7{Q_D(?p$^ zw)2|wW^@$H?5R2BYY?`(7G5!#YFVe*<<%~`20C|>*JsjbKkEZo(`?XpXb^GW8v7m* zGZs~APD6*+oVMB0CFBt>@=16w91759O&K%8-&9v(lh)CTKG)M{(AnTGf@zEMy<%uPT9sEY*4a#~W2T|+Y)pU{Wrs?g4 zUX$5jzyTS20#-3o;s|Vn)^oW92%IC;oq=sCU0+CPs>(VF0CdA-R4sN&Dl4<*=vFaQ zSg~Cu<_0`-)=OG;)%BJ`w}2N^1$Wg~nhr#pDF8*jm{u}fe;D+#u?&@&C=M686UZur ze+Na?kIV_-&q4nDWcl^1#wZ3pvC$(;gS4vO*%Qvc3%`96gz?exsQTSKY5jY=p8b_? z`-X3&wEn%6*1wO^`u87_)_=fB>p#dz|Di+D`VSu?t^dd&Y5hk7Y5m7I+QDII{l|}! z)_=lD>pw|p{ipEp-fIt^CqlLev~XWg4w>%a=F7j0{3=F?Y}tyi(3NbQrYkevjTLlg zWv@6$^*`;U`oH?C`PTP;v&Pv&U~k?sdbLhG`N#=#(N>h!gd8p6J-OB;+%27Jb{Q!z z7HFkx$;(Xdj#d`ANxKW2Yr_sRg27l#;xPCkgG7l{O!xYK*rP0v^>Iv1K@B0o445l& zFB-Tu&@vPP{k!#p|otwcx~MoWhOp4OdI@3|(>hEr7m4TEJ$=)B~k zRG~^4h{;`UmhV;>m!lE-TMN5bMqCPBa2Ph~6xIfRboxe9z>lj`b&11?_Q<5ZZOKZh zxhE{I;Vx9CQQ|O*put0#PF-Tp#JWc#Iib?-V$&azPw$Qw+Hb>?B+Ym z9XXb@DS-|cri9l?i|Htjk>j|e{-?O}s97MEYl%ze3niR>5}O{U5eWM8brWrk*3a4J zGoI2RgN`6BdTjsJPrLJpy*Mt0psP&CrEcN_alHVTmLpUDYR3G^%fsf+CB2`YWFZhJsIW{4M|jQQ(hA`I~_kA zBVvY(YSFXmr{k{Y>O2f@h+!G+>SThy8s z8pYK@BU6mEPea=EK$UIYVd$hVCD=Z-d{B5{?Zim49n)w4CCQA}5Nf=O*dq}YUKM5^ zDd1qVKv^r}pLhi3?LxdGs_zKS^5ODO&&;K#z2L+p%!;ZVJ+1wd<=}DgkK*k*i0o#<)GB#J(5s&1D5RB=RWxG?N_c zqWi-NIu|W=X=j!x%_>KCX~wBfuU63;k%uYGWM@!!Co0M{daF|nl4e&hW9OwnY8XeyxJ`lT zP&fKRD9MV)IYpl}?*YzXTTeR(1-tw*&{C>{f`lnU~_3Vqk`uVO1H_!^#x9=E`wU^y~!5z%I4JA%+ag(;zf85TePMc(1MGNW1sV zg*3FD^dpxzmS|=^s^n^_{aEUPL+(+#BpRW+SQP+#EVAoB%YGopqc~=t*uKY*U(xSr zK^>9S9KKGqsm`J`gwBpg+Pib-&d}+Ch#=BIDpc^~>LZV?o;V3RQgoRW=rUp^w(M_4 zr2t0ce#S_(ylM4tO0{hMb7@k<7lr1ci%B6%9CVN-=n*1Yp;{oD6VgISU6aB9%hx#% zBlU_XzFB=L^kwz0zFYwVQFqwf@seY^G7~Uw$D#*uz?yrSQJ4$4Y}}sqTZ>+jt#JfW z70G2Zcd;q@jrN1PLP)NN=UE(aprX|@E`_@3I)FeE4e!ptSGOin?tpWvq{A2jTXDjU zdTl3*o)73+m6D>XN_90F;Yz%YAg_(gRLuz)CK^lbyLEIt9PnQu?=Ta4z06s00oPpcWtNDu9+jA_DHl^n8I8Y>Q7$H3tA1D&PXHF_>2gv zv2q%oTNG$1-W_Pww2M8;SAr+KlM@E>Q5P^d?IgLIP1;G9wdIPPJ);V%?;Rq(#v`Jo z;4Tadx2S4-^}VZUty$7QSUQd6Pg>c|sH}njK(L*btt&G>G*`B_?1g`PFsrKtHJH)`q8IdUn*W^$P|@KO4nM(KI94p#xunm$R_FQTt`<;*~4Q zA-JVw;3Ta2wa95#-P?Oh*hI}B1N;3x8F3+v8ZK56xPKky2$m6-mhP-k;ik}c z#z2l-7P{v8epG?ET239DWUw^%OIb!`O0myuebeAH{kO|#r$s$#*wieJ zgl7RT3#s1@436wUYpa!AD?+9@BAIUp{YXi3agN*djKDM`Yx6-`U%sxvhNng_8P;CN zIW|@X!=pBA%s`}EpW9bg?-0zrsnS3l%T>O@p0c!6=RXQevrzeC6E)ujL;pr!uke@s z(z+?D-lKV+iqO8x>oOF6kg|slsKd8n?lRQag)8+OJ0KJ1K1w=iX`RHnR?Nfb*|~yF z;~@~j(Cf^M)XG)nM0>NlC%AcJJE&VwJOU@&CD|yW!g)VE_z-5$3z?Gh^ z{(LV6^%q=3=1pJ8Sk+%~YR`pj8#j5_Ai&gz~?!wg6jWo)vt&qH+I~WChtA+w~Yhs(wS;5=K#-mX?X>Q?m1;{FVWNF3shcDvb(JV$UJrVQ;0Lrl^V-;0qON zsKvTjFL2;{-qFbMvYJq?hoPdACK>8Z(9U9lyC_0pXg#rT8l%E;V!3iJE6ti~KWA94 zH6d=1FERwMD)Up=vFlKW;|@DBGVgZS54;QC&0}oFx4P~rnrg}N26aPBk{scRdY-NN zk~jxUYYl-_u7ou&a~&|$VD3^s!wMj?+vl31yNWlurk%y$J1be>&6+6J0ld~Nz#YjZ zs#WD~d*?hbTrn`hVXy#aATS3*6x9jE*BP9PvRx_3KkRw?=O6hDe~ z7lHRoONR~YcI;IuIP$LJlUCtF@M|*~RrdPLp6OjBQ^QLopvy9EY~r}sSq=7{@9%yli_<+ zDro^93u;j)Cj)popZ4Oq{nl}x%xXZQw39YhOag3^)!aB-@}tpc@kNK@fERItf;d&= zTMHR|>fHe@u$5z9-qcFkJlA}C#WX{3Oig}^K}W8u+%pzyP)a~L7D^#%txZF24v8(y z**16+>QHncnde*~_9~&iT3aWZePff8nUN@|{iwenaJx^EXl_?}_({X~T2R`JI*pm@ zHirbU@Fj>8AT>=9fNckouKirF*Qq**Gjmt>N@e%8o_ZMBEvFKX8L&xN5o=8tF~fqI zudKPJS0U*YVB;8Jrevx`TOL^wuL+$}&Iola8fiO}8?BbxWu_gGLdGD$4vNGhrnCN5 z)_}Sez0R(An{mPOqBgo7)2SXaH@k5U>}XL906{qJPFX2FJGai)ol!x3&us;k@kIo% z9JaxfiJ=VM<1VSM#?KuN@yIQbVJpBTr^SA<+e_1%Nd7D?CckX;S&M3zT3l!IF9 zhkYC?=?b0cVq|_FdFD2dVN$J=h;x64b#|ue&S( zSDvGZTm}*3qS~%g$uRzyyH_Xtg}QOXXmo_J?UDSumm>Mq+8(f>iDg}cYh)?4!+8(z z0D`$5d*ZG)zd|_BuPs_paQ+shmMb_tE~$&ELqB3kqC?mf zX0nS$Jr@sU$5}2mQ>{x)?askMxFyF2hA z!E)&IV}+7!_jxOvh`5kMhxv}vVH{MWlSwXPWSUHwmY>*Nf9x?NWkd|w)KnzJgkjn? zCNSuOYT0*;?Ju(ESk-(8d*?Mdf*%GAg8~@~-n5(0H;{In9qq2U=8hR_tdzs}IKr4Y z*G*->b^)TZdnWP#Uy5SDCesx{bFp&lPfbckMx9r zwCV_Oq$mt@*tmBsO&$orsuQ~!++MOt9cGzWc8{OEM{KanEQMbP6x|L=^ct2eDl&9# ztJw99N3Rvz&Fg@*Rd#Dwg}%SYnpG=ra#)TjbR=UJbN!p9ka32jSXRp8x;{u9dVa4l zw*1kz_wGj_?XLMYGKz%YBsM5~LBpnCcKVhD7ejN)v)?11^AX0`)oaiCpk5z!?>8RC zXSbaTS1&0@Gp#XdTcb1pT4c-k7wn?4_bpZr2Fz*;VSvt2huj zwY4vxtk==QL4y-gJCg4;Qvut%p9BgjxCz9!eIE1+TBz7EcVW=gY|(s(7k0`v%VlZ{ zj$OOvOhu=PJ95E&b|ECa%KBUfM|{L`g@6jcu<8&lX;*8V_p$)Hog9cvsUGyhabek0 zPPa5*(|uge5EGQx-DT=-mlG`Nr*>saqC)Oij~1qN(i?@%2~<~&sJ5m#AEC7xuijK; z-`G&@V*f1t2@oy%B;6Klc?GW~J2()03_-!Mrdp;{`|%6NGw6Xf=u=v3lr|vpI$lir z)0%TDdhK+Z9#xa(&2o^<(GJFXYkFQgO+q~CP?eHPP@533!9!U`u_$SGCkl3*kUnem zRBV?ee1ChEl?~5=q9=@*Ik#6j?+nwLqt=S~x>BgaEEl&E!=}_5a&)P)QZXe{#qPpf zxHqXUcr*NSU2IwfL}iH@nIbdj)(m=%C!80=tJ#f+$Qq$lY2BrlSR7cJ&LJlwMbDhu zO*sYB7Cn+Qj7sadF*Ynr@fYR{X1u1G()m*xU;{UhKJv%Y8yaUw%jp@c*( zve$sktV@-pqDMek?Qv9hoWf?Px@Z>pCp(qJ;YW0^rFOBcb>(5bk2$66{gt{bH)4>m zQ{NJ>vlLmVLmxRjs~)q^IUNx1-IFWed(oG;~{EGZ3zE zDe-P51Deo0Xzfj9+MNR2*1jR1RfeiNEp-Rn^(+V!!_Yy4tanaE%Ph^aDAzQ~4MU|D zh6ze9z3Cxb1e}E)TBA7gcB8r-X;S4V+jm8IqwrcdE2(vI@~#l{#M&3y3Ol{ngcx#0 z4(?CkROAgk+FIW75#|&2`?I7H%6qu9-72k?eJX)-K$>L$KOmt{3vHolx-NLZj$s=mK`@^Dp&rX>U4 z6lL<2Wr)L}?rcs&vt{b)a5*~4@eji)V|xtd9FuXX785`3khBQ6G$~Y%R`Wk%u=0W) z^G4ngu+qV;b__QHqnM6(`3)`Ak0BM)7t(>NWfxAD?pI0Q3vA^R{f@T-#p}DXC*Qy4 z_DQo5j~K#Z51w3o6o&bnw}n`2SUGw`vE8TJA%??%zGI%wiNQuaD5S`%mNeFOCUXsJ zH6UpVg)*2smKM~;4P%$L=wwu6E|75dLQRLv&EN#h<>3+(yZPa4qb1ofx6i6y8Ms$C zv=QsFm}6GOz)C_^43tx?^f4c+wl5&$mL|jt?>nVQdL^otnU?XMXEx7@A(62ukoRdh z$Gl<$&>6o^&%CjPz!Fv#*!8^8=Bb?#Sy_&|35Z1vxhQ%TlA;Q)aIjYH(f2(ua0tPj zR^jL4oSoWtj(E}ivzBXh_kB;?eB!a8NYU(e8w}#sqPS_yzjH8P23}@I$+%hN@R8F9 z`--P}3RQ0(>*hfoNUgrt9oSEZl*McU#K$ABJO@9;aCD%jDPL$}#1ZSH-3cS0wJnB4 zC%~wW7zC}LF_l^Z5gJ2mn&yM>TIIgT_I3d*eH1Q=RW0Nz+D$Nt&ni<;Y}zDN2u=gT z3`3YA)d25m3J-4+ww3mVq;JF7x`xiewm|{O zoH2!Dny`K8LY3yJDCsL@k>6WbHb(*x1GL)M1#d!6dD=sg^;LAe7YAAJfamKcSH;@b zgCeUVN>|HD?u_VW*3~7tAS=BDT4YygMrj%)BVZwBuJ&THRh#c}mAEF?A;3hCIF6F1 z;Fu#V+BQyOg*ogGW9{2g4bBQ*S~{X5`(C>}1hhr1qY;aEJ1bUY8FyAM3Yo4hoMvty za2JsvkY>4-EVPkLCV|g_t{Dech`V&~sY{oyUR;NxyY#Dq{+8-P)bxiQNM<8<(QcG= zC{ybi>oR&%A-O1(PlAvQwGa8zAik6~@^2(8_^gQdvN)ID!=qYZf}6#_h*NO2c{bWx z*30qJa756$==s;IVAfJhtWQJ_8D$vT>p?9#0cuM0jG@rF^?8^ot{uEzTDxX8jRE_h zmo3k36kPCWYi00NboLwu53aP9NVYwnrD);?PCiobwN{l`*=f`zP#qqDHF!8ob3yqu ze#DA8a2nq*duP6XMHH59)=n{V=Yz^KBKB)Umo0vE??K{wNliPM4yTCKdrj4A-;6Ov zNdPgLo6oJjH<=~|49q`tz_uN;891{#v}yXj-4a>4mW`0P;(Ntpn6RLl6Av;&Ct=7Y zMC~JIbtyL;IUnj695&5f@B(7NkO({YJqMVhSuT-}k6HhB`G|R}NmtQh_&NkpGQS<1 z>~dXGc&RJh`KWKhdxTV{%%dD)TZ;xA>UeEdQ`@(_qOiGQr#%WCybz?7^$d%Fcb+J) zlOfnfDgeC<3A|mkbM$@e#Enx<)M_a&3S87e6rvut>fS&&v$pa{kp4nl?lgB2wrkpF z@48}l!OUYPM-{wP?Be$@JN6$ji}N4PWygLVshN+XYl&k^xF9G(SduX*U{j#?%GXeHrFah>oG6D8q9ZG=x*De9} z-*BP-_J{=7e|KyG?7u&h0Q(<;1la$`5&zTS1la$4TmtNWaS5>hl?kx_4Igj5PN+TP z4bzNIYuP2OTt-*y%HiIvOf#gt{&%1D`p;LPD8@HcUJm zy1x00%;V%*yfjJfF3;!JMhEu+%&$H7EN!9CrjqL9mM`{tW!5Gw_K*QBJP;e04I-Pb zen)*$GT6z-ABiVxM>N~?633QikY15y%D^Z~?BZ7ACA3} zdW-LSX3DfCJcRG+#zLby?R*un+nBo{zRa4+VL$0@Zs3J6v3d%qM+@+T_)R3nkH+8z zuA{pq6w!iBWxhp6_T#kcN8uoqGv{fEtR#}P!M<6`JVxs+M$PGZMTn;`BBvmg38@@q zn~BQ9JUO&DS6$R$2hZtIY(j7Rj=l|e4hO#9vZ>MJcESKy#bJETlxf^+`HItJyfTt{ zN5i6}OqqFehnZ80d1oONX>g@HolGp^rOBgFm!RNZT&p1o0Y_Y? zPR;U2Sk9h=%ZI?Zqlj2Vw|ton0q9_9&*3%nicvdDTwOqsWfFS*JDE1C1Dbz*@EM0)+~34X1Fkw2_55uM{7HPnh!;KpmDNOTm$7+r$MJ1upR*vUVT-bw1_T z>QkLj&hLVWyD8V?tJQAmqv^_S7rVUNK;7>xC#-fD0IOxJutSkf8khFSiHpEpm}^rK z6b=XSGMbyVdp-GbMGma)(xwED4B$6G@g(s5TG$#Ut@wQo|@ zbpCKv!q_FZDvVe45s){_euhsF4@gkNAU}d*TO?7;2AEZWBPwkF7$%K64bZ|TnuZOg z!2Um)c2O$QhMbQ!X|sr+HE(sDya&pPDGSQ7$xFgc`QngXBVm?Ju(N^-OoGJt{Q-GX zMi4N3Np9j8wh&-AQRF+A%XYHJHAJ6l*lh9RX**(%j*)9?z>-|lvqyT*T(q1eqS!}H8abeZUBqDKoaCEW`LdD0Wd-j zcCkD>uIaAnDWJNmS;rh$EiKa4{z)Y zC$1CR! zNCO=XW=6EN1*3f07DsfoQqEf=h6fipUzg|LRm@_BTiuhbW?HwRPUaEXaHyqtG@^@( zG6jdFli*9J$;pl*Exso1#}WLpfiwL;TE7MK`;LiXYBP2{QE^af|8{jznlA2~H_sbm z_Yl5i%~WJQ!>RCa$R9wv7xW4kNqz;UNaMfGxF(!!2u`CJlD;X@dW`G@Hgc5ml!C^v zUm^g=YN5$gdgaEA+HNePk_xnl&)B1QUkuw!rn8rbB#glJaUR6C@F0 zL{BrWEXgFUq^^~{gaD-{-o15cM%M5+-G<**CIu;L7m33fiaVb~Yj|QS|z$ny#Pz=R>=3*!YMO?bQ$7%^Z zEjD8xRmHRtLN}cwO@ogrOI;Op2^ODc!ns_JsC}S1@<5~!8PQ})BiRh9o?oQ-0i~MD zR(uD$S33?N^Ek-_$Vud+^uRH364R-Qjta8DbiAIO0S4NAPZZ&?4w_O?Zg@F^mGD*rjS( zn!Qc`am91=Pw=nDEzJILTp#H_t@w-nSqa7eonQ4d`-}cL`-}bs`-|T8$f&>Qs~%B* z(IbywQD+_*_ZNNjBX#~FG;*l=i{Ac7=`VT*kNCBZjQNYc?vWaQk@txDi{AMN{6$}n z*`7bPzlZ}I{d~w((C>PL-9g{_cYf)9@6)$``X{A3gWf;VhKvVjtj<@dM~c+gkuETr zd6C1f9~+9&3ZDi2|(My*eQWXYU;CbSKXjj zcCqCUM3VOAF4-4xWJ`=d6WyYtMUP4r)$^m#GmL}cdOON!R%;Z56}4AUH>}k3X{ZQ7Y9Z!)eQ0~!s?@Z=LKr0&2@rBvtQV7JB?npN)Ni;& zUKN{uUMRuMA+KayOMKA=$fSVj+O1`80a#)FEu7(U&%_NnG3!q}<|4;00!?~ za?lKhT-hKqa=+neNqV#t@X6N6{xTfaAXl6oZXZTu=&gsg!#9YXF$5HMXA&rb5r!%v z4IG2Ri-c6V(Vp}nr6okY-I)HD&t3X38AX?T=RY5&=?}~gN&lI<^eaE{r+?+ge_*!% z{>0CH7&|nm4E<(aVF&b%80p79H`9D|)XG4~+$Di^8~@6_W2Pah^Bl}w%9FZpKqX;1 z@mqcOo1ggD;Y|Exx!drNgR`k%HJRV%Rza|kABpfav-No zVL$Qnb@O#}EZv={H|leBGl-|opgR3=LQRwYv55F&uRZCs%UwGjZJ&VtrvLC1$oMDz z%u&qn=TCMyNdumJo)3Px$LIYgrKP(6e(p`u=#>Bd!s!T?)0Qu!mmfp8oSJMr%@I#^ zACS&h`^xWq{}aznoDe;jy(!-DK;<0Gu4}a6<6h56>|;AQIOZach_XP{lU(LCb z=&_nGHt1$E((&w~Vs*o4?{i7Fq8KZbi^Ndl zUM9C5+G?>uZeXn0_iy?pG58s0HKX|xr?Ye3n7I73r=l?nJqN3AJpDxG=|DNyd8}}W zWWyKwGWj$nYZp%c(Tp`Tqb?BcSfGiDcgf(3kSXh(JA3y01<+C1B+L2Q$JbA)*AvM_ z^FdECuZ)#Urn-H@=z~v9ANT1A<9bZWX+x_gW5#Xa9yqz|pv0@HZ--vF0cfU9f^M%| ztP@ylZCA2BNxfg;X7d0HNd2j!qR^$YOyOc&s|rsA9RWgKe>FiuFy z9kqbd_lSJy9U@2gM5Zx_llVkVzF@EZj`^qLgm^$c4aaVKGXylN#W>Bn+o+l&CWP`K zQrvzmXd=Jvm5~c?31#Ff+K8)-d_^63sOrd*Z$)+FxY|g480go5J~E<`ycJh*>N4nf ztKi*x*g|N1)*A?In%yZU5<;gRI{8Wf)WW62eS+mn0fs9#%~3xwQah*73c{*nffhi==WPO?yU?QfEG5Mf_Y7m0lyHeQcgb|$y0r`^80Iw$Y^jFR^epq9posGVYMlZmsri_3*6Cj#cfP}@7bb(< z1l<;)LP+X}kB);4zn>%1&DGs^ZX(;4Jt zuoL((BeQ_C(Ju7Nw~*&8oHV7rm<*v|Kxo*nByLHwO>y8D&GxjzngNK z@GW;0>-VZ19(9=L)yebE&XcP7=_1KL z#J2)J&ssWYvy`;xgz|2w6AKyRO5OU`esNHusVaF zAD(yslo!@ASpifH;hS%B4qg>|5)|o<7l$wcRb4kw4uGJ7Kg}p4zd`n>HcZ znc1eSb=$K^Q=y+@8c_$+YG_!bbpFP9MnJ7m16CB zYca2-b7>}1Kii@To#+8igLALrB@e z5fq^cYlQ~Jhf2dZs6WcRC^+IR@Mc|XwNM8ULx;Y|DLM~?@OFc}@C1iDEb?j0GOP9c z#=zOG6;9JQdsO>al6FtT0e~vno#w3rAYC{`X-J0I$s~9?9CY6j@;fQ=9@_tWMSg$z z$nSQ&_WWj~x68Cni@O{pwWftJlr+B#B-*G&GrK%Hg(EvPIrG%X6tP0F8UvsoV#U6tC}M4*;Ye~UI2($i?XrIAKI3$(kBqmi@(1`|#L2KfvX@!y~0 zc+{Nq_%IE2Q7jn;iU8#^I2R|OD0F=`n!!Qyr?>GdR|i?aooK6X6F|JcG~Z@Wdaeis zps9BH1ZHa{fn6zP#G)_K`?+%O{F72zySd)hc4Yv*%XO>^Pd$l$Jo(Ji&abxPs2Ai3 zyGG6Y0Px7RiqsRMNE4mWwV}8)IdFgNF2djoRrX5WFZHfRu0#qs7kEKk1%Tv+d{W4X z&xE%v3Stp}&q$JJ@1SbpJ`E?hzjMYKoWmAKP3PDv%Ez^W7>Ow(@1hZF-)7z=l54Kq zqU&WKK9sW`Ir>jaC8vC0hD~i=l;4gR3KvzJzWh*o0r6Y_Zp&{ri)_&Gp%F1)&`^0x zKhT`8*qc+@iU&7=WnC}&r7DSFpWlRk4 zw@gH~Zvcaxr(H$FqS^b^2Zz z*gF3*ZyfW|c-|!ZG)h2%BywusO=&nPyt&gRS9l*?%Pq~(E7j(nR+|gdIM5EH{#-W2 zL2uAjIZVF-VZq6Q$m<($pIRIrrzLWyOTil!G{CTea3@)qlWOa^gYF>ocy=Y$fgk}E zjMmq#G(OEVT@qNO;XT7f>~r11+qkju#3!;(H7dvloPe1bq>ZH5LzFCY+kA7UP0fXD zPDr&fduxvG#7S43A*^qM4KUidv5dcsSnd26w=(bOGj$nv$mH3Ilit=asEJi1bC*6+ z_eHBFzl~_D#symU1WjSaCr*~phxOJd_RS-w=1utO*VM+Hd>8VlPb@p=4`z(v9>=g4@*quEvTEd8G5zv)Tc?v)@x#+C|b=I(Z#L+n+zW?<~7(^|*QwCyQl(BA0lUaOlWN;@9*EVFFCd*nnX zZG6t!i$J7g{(k5eSy;RM=65qsFzN@xS_8cz}cFKTjwNder4w>50pDIndTxg4AL#6FU)*h zo?pBAe9ekKST~#1mAXeR);w~ex2#@1&G%e8T(ZP}1ckIz8)^;W}l_s_KpikeNed?*FYUh1| zEu3(FMm3u{P03u3xEnN}EM*~G6?mecHu)88rA~RO-Pmq$qEln_e;5~ZX=c>RIPmj< zDGK}4VMn#IY$HC!p&yds9lYKlT7Lj$bS1%A=m> zjaq*%rLFD?!R$Vh&ijeY8fn<8+Bd;-T*q=Yww$+mo@C`q^L4P9D}1m z-5^)THv&uZ08~Xo?S!#`F+@fp7FNwiCo!qZQE?Ok=^6sxe=Uc`T$Enw7(Gz)=vabn%j`cLmSK2`~_Mn zUEpP!&*E{`A-Do8XSGW$&k(vJ{Z2!B0}~REbHQfMbL^mjC;|sgIFAJLYl9>C3$~dq z6B$sYHDH1825sHqv|XmvlciCKre|SCTlsR_Fmz(+<1iB?6m!$BgqcmG6O)O;!nCGC z6CvD1VeXGWu~kMD^ObxBqd_(4u5vMnv>B)%lwA~Pw7X9V>Q zV7fUJw-fCo8u8P1;8V`diON-pOXGdgL$>VJmI}p`BZd-(9ZVn!(Hum7Mo5(Npu{ou+duaq6AJ;7oOULl$m$AZLCJn@DVrk5WbYa>MBv~Xh2;&Q};LM^9s`quiknRrliih-9(A8x0seYeW75ay;6-`PnS?u7%PR*B(;qxbmOhJ5Eo zuZ0V@u5IBoCRt>unsoA9osRf$#)$PO`TT>b||%wfvg8bVym<-|9vgU^@F@nmy$A zlLcC2TS2!U4W{cuwXd%e99G#&lO+G-$3D+=CFljvphGoJ{hrNC$O&eleBw^ z1a`E%d8TH|o?F|zwsvjxL~B2qLbng$Dh8h)gxxJJ!_Q9nZcQWNqbHcd4N2UY%NMGc86t^-i5VE&YUp`%BJ${FTI~8T#zuIrM|UVZMtTf$fl3y^pd$ zA2o%(`^-{pf10Cw1Cvmv-(RPg!MmT<1F+U2zJ{b2)?@ReA=%f1`moY6{GEGYP&AA; zG?7{(M1}>hn=nRwOd8R+5+Zu4^fYO`|TEDLdq-7+mo(&75AkG*b9wDnL<;mokB9 zNg4ar?Y8Z34HQmbJ4$^NhK|v?e^C(KZRk|u6ZhW;c6Oq)uXn~>vcFA#k?qd86j9rx zn%G#8)4paV7U}4y{sJ)2O}!R_!AsxU6VM>N)=;6oSL+h_z4HO5;e@`_BHn+4&LQHe zEcDhyH7cotEmmTkcDS-28>QBMx>W{(%1efu*HMdX{PlGGxiZkLsVY}%>RwGyMynCE z@h*a52y{E1eXXwEL#cCx@Pk6*)&A3TCON{AauGOso!Lo9QD4J>t1geo)=}n%LkZ># zl71#FU75==Z_@!;fZE^#wvj|BnlN|gx$AM$U(JDY9|w2Vz2h$;-&>yAga_&3^sHt2;edoBZ9m&2^WSNH;k1CRR@M1u~3l$F>G zBBC1cusI5q&|SyWxN%UB{s#t4Y(w`Zkho++X}#%VPh_lvivcHrkONzq36b!mcHh{T=!IzNOyM%nWo#?16%uW#X6 zY;E3{aSrWU&%LmEd2?(bv(MqV_2tVizNvk%Bj_?tw2I0!>Prc;@e?1TUF_=S&0Fow z)s;zIgT}m&J3Ggn?{mwqthTqFeRi}1QC64fSUbkqv!i3|mP2^s24uGeY;3yW`DJ{I zCo~m-GVk^UibHM+B-x79#Ey(B^Rt3wcrQ-21C{3iu}m_w!qkhAQsW8|F^tgVJxI%% zcvc}`ozZ(FXY8J2@R-t_YVRN4_Rz6uXC?!w%bK7oVp&5L>p@#Fxp`PLjU8i>nAtps z^ctEGG&P>?9;-a?>%rI2Rs0IIAsLWpcqx7NBX4`#Yw0)8p9{CY=523#TOQ?cn7)Vp zeS3laSvF-6gGucX1BC(QoYj!@8}Ypk=@yJS^Y()XF)b&(7DP4utb zue9^v?UrV2&-$gG;57TeM1Mgn^Z2Ijy@9)68 zcfXN;v#Huo`knaA`(8`Gix>4?`ii*m@~!pFt&L>~bKJO|em8yjqIdi2>Dw!-t1HZI zZ?@a%Z@??Rg+AR0!*15XpUpJOnxvF95BhQXJ@_6QwfX$&wbj(eKU?%qQsDZb_MGAz zp4N7p^c3H`gzJR`+MY#Z$!eK43OhruSIJlf%Rwvya@|T)Vu!y47BOX?1J4oqjLAc$B`7E?BQ(<1aq8 z@>=Uv9Mx;BXwVH0ny>=Xd9!$8-&h&ry`4UL6<`6crH|v^Utj)aV|nxWcKSj3^iyfW{5I+%vou|ze+Rd}gFeus zp=GYD-2~q^`_fLEX3Ke|X^RQuEIxb(_HX$rPve|fe;)L7X|kyE_~M)Bi?!>UH<#Na z5VzLXuD`f-bM@-#?eqzJ`_1(2Ctm&jPc3|O}piesRU9tx9aG{fBTf)DrO1zjpZI%!o(DA3w&_Bc5 zUx(ShvT@_;&9y79q|ef4KPuFEbNR~V*81}GtM&{p;`wjKtx1C&93ro8>D4$Gm}P#* z5R~&c_T|GzKl%~;=B=Bn=_TB%r+Le7t}YX0w9}6=t$xgG z5eRte#!V2-bFZY!=I$ah9Nh)d=kUqb*$cOM<63$dAHA=7+k!mlGexi9%WviDyS_@N zcH`FO#;r}I50K+3Z`rq$q_%qd^7^e6BK;e;ZeAwJxx)1NUUOTwDinE@&+vIekr}el zJLwuz z@W&6Q*XYmBrq_9F++JPE%~dVwNN>-}il(;~Dy{`Tob# zn>@(Z@U}d6>uTEOP54Io_seUW&u?A1h11$v;hVF`>&IeNmS5RgzIpliwU=V&m~gO97~WPnEIRJ=lV&2!N7GN4*ILfaL;prYFQdd{c=wj!1RJkh zy+#|~CYHLnbz@_b@APkCY7WdI!6>dT6N}$AoaSXP_xo?89ee;LxPId*&WT7P?eal| z=9{Y@U)vzIN!yz4@EKrPFRWdEVcF#(J$`7{JjB0e;!Goa_WmQqN+;;-hUp!1uQpb$ z(5}6*zM9^}NAJXj?T7Im8P3rlPh+!fH&=rUU-` zYt1%8`XuIHM}#9bcUWNqdK25}r+JMjlUl$8zOjCbE|y-xjK9v!rf;rYTmATr>#J#D zgve@6cN_%+#Nq?RP z!>u5>M$B!qogVUe-!nvKbObx&WIt{(#wE)TktBMT~vc@bQ(kHVyfTk;-c{HnFJZmT#t?V^aHO=QpfV;As9EZ z>F+jE!oTvw_5l4@*$OoMJ%-f6!Cn{>X{EoHhx&bn$6g)w(jUh^=9~$kR;lSU6xF{5 zSttDo^Wfd^F#Sm$>-U?PJYQWuC~ zh?V^@Gy9Z%M(O7bv9H{?d~0)Uy}i|5-9)NTJN@H)h5m%OLYCbddj6AU;YNR-pmY99 z6~1BBmM`GrZyOOU6|LoG%rf;7;i)&KT%eyd%cgsIy}d4yy}Z+Z%6u(%8ctaEUjNJH z%JLInFC-tXwbMT>yoVRCy1sUK`TEx7^=0CfKWFsOVHlI`IcRRk|EE81_7fr=5~gH1 ze+FNDH+=;~6ngrlPj+9u@Y)jnd0ziqY(Ad;Swr?v(c0<1Vs2TRrNX1>zlskYn|7aE zDU$wzG07lb(m%(P@~@dOKOUyZb~H%;yb-QSdP5XtJ69t8*Gmq9a_zss!~7fOj5dmG zTD?yfKK(_r(K-@M&K>99G@?r;&Fz8He~U-^xB1V%Xnw#av2x?u^4j(E-@%6;NoMu1$kV@MRc7V=P&sb3(=QrfBA-LRY9H>!hCkt^!?ziY^D0-640a|b5# zZD!2>9*f$qcdrnr`QJAeYxMf0f5jMTH&bSuPF z3;QKQw^g0Go&HBGDE?#f^fh80&yVSp|A}0OcRD+TmHelMdTMOY^glCPK$IlWs@my) z&J5uOb$ z8eIC{8k%qBFzo(2Lz(&jt8)K6KK#Ius+^MK|6nL-{l@ajmdl`5)4#^z`|bSY?H zewk0?ud8nL9%s+374|nOZkhklvOr^YZmGFJR&+c4n>^mHnB9K)CT!(48DE#lE>Hg_ z{`P-1a_Vxs%|=T4znD*un%5-rH~n8NL!tq2{Qnyc>MvPMYt+F1-=SRGX_={#0iUJ+ zhv6Jb`w?j+|EC#OxORM~b1pYl#zjE$yg~N&5d-n}t1U|F0o%(em|V)4#`O`YtHuFsH5dt>@aCYn!*k%=w3`)_#L}PA;$CxV1ujZ*`-c{v#;LUoGaM zGDJsVPXDo??#BWjP=?R>kG+!q6T=r@SzW$4#tr^y=`#?mzn%UwrlNmtZlrk;Ha-0p z`1BEQrZj!q8D&G}7dLKhJWp~v{VMw6MY-|i0!n%O2)^#}j#_U9>$zvn;Kg5kMlQ>{ z$F6nyHD|DE?{@7dxxsHgV|g0hXcqU5Gc^vUuRSwjQds}l*PT%k??zdZzimiU%9e8eK)VG`M2-9!lF^eBczn%W_L+N*5rXM@*Ok2eeGG{4R z8j?MkWJ}#*2|sK0yXkk*NLQEt>NkG)@BgjfuiS3ZofU6-mPF~J{w*N#(;WsLa_-he zD^x!teMed!+X;Oh^~2k#-@4>EaS4;B!J!3B)zG{G9f%$D06fn*p+@n*;~>gBWS88b zuNmDt%KV+^fZ^Sf@|FGqhQSnV+Q~CMV`(pPC_zx~{X-AkbW*$%DIO?LLNsJ2zW)Ys z&<2gxi3HlZ@U;w@SBFC0XwZpXE5k8GBz0=+>hsN!)|&b2T~Xj9f@W+ z=V=W5AkCvr95zSO^=QUX91E6%kMKs(>q)){z1Gv$GSGBraWf>ElN7!hwG*;F#!cb5 zOCMtz4>>nO_Rp5lOA&k7Q$da$o1jN1Q29i-9N>I=aZ7RT2>0zR22)7XZuNr~U z?GFby91>^9u<7%<_!UTxC8`Mf!_14L?KEt<(=^5Q%YG*SFcuQ0IC(}=V^YaAL#9@g zDT)Em!=F@4%s?aD#xiNOaJIt~rf1x*GfXOeGPCulaCatH4ys(h3QtT+9857$|W&{NK1 zgP!3nZ{wh@g$>5`-*y)4r+81F=A8z7HJoPkk`3BV=oT;0?+Kd<4`>7!@d$l=@>jU4{9uY2!%p5@5l`_CXS^no*o96okt zG;;X8XEbs+&$C@n>4W)RPjXTn7g_e~ev=3ud_LgMA0LxtA9Q3{gGXD^(cW%k8D0L$ zaE=^n898>A<=8pQbotnFj0koKS(Jz;E_K5tlS&9dcHRoIU)}igxBuLCuplG(WwI{a z)WfFF>4QKvfn-7wx^#Y#mIj90=qkkAg@7-B$JjOc6HQg4Z`Y$ianJxu6k4Q@K+2qK zcdPwe(_fKJ78z1R8!}P{*96ga=iS#gue2LJnO7GYlIY2y_bbbrPn>U-#G6&%>?Ng= zBmvUB`DzQYi^vUKcvfBcHIb>fwo8n#4|X$YlRjFB^g}+SAp>sMyg^B6lnu#5w91HJ z3E@G|(X`=W;2GQqXcR8)Qi01Ycbb8e;-r%Sr6be7GRKPNkuXU683!KUKGsPzGZ}1* zb1YfzLPkbm+~8blM()roNR#Jq4x4+ye=$nDs^}ugwUajYqr1^C>_&n373p8C7o+Vc zp{3;SzgEO~1aOV50ggJ3vgYL{n#<2-bC>R#AF+r-dZtZTz?Gk{zczys{1Kdvw!<^o z*>v?q5kUHFLmCo*dvcPwp#VXa8hI1aZIP*KH{5NS5EgO6g=`w|Ng)wE;L??d_EK`@ zIbql_`!cGLAAx#56Epv@A;|wiCJRoDmszVTo3?e_d{}=F4HXo$v z{hy`7Tp)g&b$0K+0e+qt4HMj)cr?G&BN<237A`h@%Z=$CM!cj+JKROS2nOmPZ5u)e zq)w_|m$mbLU zJ3)T#sn!$caRR$L*+D~CQ)GdzLTG$YJOY;co|p)%B{q+gh5 zDPkEx5i~5i6LPM2SW7&s-4>AW}ZQQ&mO7jAl+VlzMcnMZm8gx+S z)zaiDA;WSoa34mX%CwmoYmPY8TJqPu3^d!y{KUI@{Z@`k1SpRt`3r!T3VAS|c4;U=d1uz# z^sig92Mb@=rL9d;1NXKl?Q%k+7sz1Gpm`RFVsxz{(aK}nJPoxq!C}iE(fo)(3s@Bo zjDO22oyEwpcFaoM>ZpYk5(zjfu|F+YU8dNtWy| zh4V3iY~}AyoR>{6a*P6^8NmRna$8_}VM?W&M0tEXibo8Gn0AF zYGfaRC1C5XTDnunM!?dc8xgTvpeYLwi;7E>e5T$?VMiwz5+4vnLa-{UN6pxkZ1-h{ z{p|!k30Tju3@2(JWAF*cBjkOO2Tt|eUJ@65hS4i26$Wb5kEAe=2U5w@4-R1U`bno# z3{k_#QbcS)WxkWn>}H5F^ZEa#PiWcl>L3@RMAbi3WQOd5FX+6`F5$Hk) zg^j%cTs)*>qt$f63CbARtkToXFL^XEkNZE(~h`YZdU$LPIeAi%nL)GO})DLHWIQ5fLqZlS8x zP8#&s4_VI{pa(K{=uBn`4W6Zn89L|%vebJJd^{Vv^1UEV7UeL~glLGa4AIl`xDzsZ zLl`+-Me$Zk2Taj)xo@FUJYErgbtlF?YCbSFSEOjI^6P4&LLTe_2?yf*WXfbLytWHt zYuHt@FFWM*iigX7Gfd*cJ>n|h_`;B}xm-p%iM(ijY-8Yl6XOGqSWpES2&H_{WQms2 z*ary-P?q714q0h5Xo!YK(amX2auz=ajeq2L`OeN0QzF^JBcbVrxZve_hqVYaK-%a)Ngr46gm+qsz|nl*;qs4p7ffG10Gr09-_ z>TbnoWfuo~ulevr0TIU)e+*}ZxO+49J-~i93It6bP8(K%j^~3}f9cxXCHe#2m4-OX zT{>lu5Y%~akfaAGwZMj9=kB7G8T*#KAtDkZsBXOSu1-U8H)OBg$1liX@(IS=@|9Q1 zb;-)d4ypzW#$dGyMauvJ_n$cX7!y^gFs^_6M#Y+PW(HFpJO%_iiL*U_rTsw`os&&5 z^|i1A+i7Ck$$asZmm+}Q3FyHRGgo~gf;Yhx?(C7PC_xA|(cGSpcA$kQC~~H@X1P=z zp^|hEKQgwMF)kaWyDAM}G>Y0-u`jBY9N8s6c(4tGjX9($mE3x0$qMTstTs@bfPmQ* zM=`*xCv5D;Sz274xUUU7#o@_z5+e;)7=tn`<9cLUmtRZU_c%lP(nK3TSn!_{2Ss2R zY>j=u-YGpAv^2Q?1=`To=yjnx(9pPHohm?5^!^tLm0uO@u|!#xLMAzG+Cp5LpXs6K z8S2I)E>~)uOiU^SvT4d7jm}m0G`E|}Yb#41=Yba3{t0nUfggZxo}@d<6v|LP%s2HO z8#%&?!Jv?zSRiknPmtl$kIZYl*O)PrUaF}%FvMK!u% z&<%#X3ORn3;jCo45{;RoCn_kd7jmsTzpJJo`VfPL_;8p`;GU0n>1a^0F7{Z*_IY;P zvF=C`DN=pL*cAo^8&*0H)N_mBkGXq><3MD=S(hd|k;-F{mtcL?T^oSyp$jB-#lQdg zUTAlGc&W~BLL+Ak?_r#mY}0}EIDiM*?2|$hfsN9gEerg_;wl`t3=Lbdql-nc?ZRz( ziFX84qZ4|a-6T4|yG-RE8*}V`L^eStWVah+LCST9`duH9NLD*MVx+wyj;uzwFh=7$ zED%MqqRlbWDFU4nsuB4e+YJ7Vi8-~2HpFNaDm95ua7^vONIdb$Gnyq{yWQzim5Acg zXEb-KE@qZKQwb?PTZR-l=%&t)ynjEIMuADFRlB+QK%HD=!vR@rAJ9C*1R zu|Rqo2$a&uXCV*y1PGm-NIhL(k}^szww(v`j!aaY%IOI^`*7I5^m4fECp-RTS^$WU zK4|)W8TG{sVIAVv?k}Zv4Lgd_s6kR1;;74BDiFJbo6VBgXS`>zU=~N`j&*UW2Lf^# z%K+z}oLVG#8`|;$F>DKF)SYL5mCSAvsY>&S4XS&i05UvL>`!d4Sw@@s2(}hUpg7_z zluiniCvRkyHs(EgLQ)YAI|P2Ed&1}?gT^x%G~-=ucv`_gGmg5lQ<>4=S?7`H+YTs= z^j5km>Y0N*U2t}cBvm=REVf1Tgto9xM8R-i!HZ1vWw2fk05@cGj zZxZg-0Ogc9Zrr);6246aoAYa@>p9a63U;#agw@ldA6YL?Ig74chvIobb23Y6j_2JV z>?BKTWZJhAPaNtmI1Bri?53}h&Y@);br%KF>P>H4Mep|c(RzZ$M9f?3Fc;b z^YT7i77o;PLO21$dZ3?qJYt1^$PJgr2J?Y>gt1zIQ((1}bqWEf;z(Zb#n;(i$l5P) z-_Z8iVb#4DxD1!Qh=?;1ziTn4Bh|6eg#$VeY16~ZT>}EZj!NjW?_a|9iUugkCPQ+C z{uf{87CBIBnW#l^<*TxrszXN_GttYm<f=-Ms5}Ea)oy^~voKS?5!bgtYJR#%qNO|G5;DY=XfKe_ zxYWZDwB|19zx}Jy1wOcBdW;Rrlz~MzRE))yMluZ5oFhV^!vxH+Y0gVEZH4YrUNG}9 zGDM*$EQ7L-i`7Z0OS2#4&5+L3W)pc?v3)l@%$oQX$*&7w{-lCdxHeek4zyp)g0y5- zdck}6Jt#ep{7|(aCr+V5s&{W7@jrF2B-*-3e3YdP+Voa5aeyK8s*yy_vmpavp%UpB z%p1Bf(Hhc&vapjPVU^(rn5*&!OR$JQ0dhDvvBky+B@&&79Bc{16*0Or=WJNu7CSqv z$b?qmU!O17Y1w>{cV0fhghL=ETK`*l z>FV`cMtj`4TF{}*U80YC{mAE!L<@6FJ62Q%NuLusy38^-m4Kam%n@jh?$BguC=;Kg z32~1ev_vNf8OH)@D}8%Pr#(?Aa#i>$vl2?|z&g`0UO7r@bQsZcQBnl&r{p;8fGKv^ z;|b8m)XB#b?$F^d(lE9_H#uUrN{z&zN%+8#!y$G72Bed6GOAnbNQIk56WQWC6c!jbfUQ09*jlEez={LjJle}uM9ZRa5V2dZsgJEe`9DQyl1l9($WEjt<(rpESjjJRyxk8 zCffXg7&-ObHb&G(^}c;t5|%X9;LtlakW{E+P9HzGya!r5$3)`6>YCJjvqBNR9%4;!urluFqX@Zsn1?*11v>GdJry0g9 z#bFcdmvdQCnF?WpS+2i{<2KN{0L;v3d|k9JWg|8^ASM@OErdD-Wuo26Xv(}}lVx() z>S~h>5kg@vp~n_z$|7C127+S&`5g*4Mi*IB4`CMU<_+%uoZL9w%>WUD?!03h8~sh; zrfDq8B~+E;N)|q8``BVbS&TvBWgcTE6I4?J!iEJ$BUShw493(H9q^_jmtSfW*k7HO zO0hW16=i!tXLfJ&XPzDk{okXHnji&y3dqdCLCxDW1%(9mt65pv&a)rfDY8z17L;B; z8koOV^0%@fVrqf7nDDREC9h zh1gKa^)wZjT=6HAqz6y)fR#$%QU^nI4WV*bvYSBNo@7_X{j5=Tt7Pux_lpekY&M(z ziq&#RoEo!OgCDyXCnFM1wk0*7jOH_g2x8<%FjzHOQ5q#*EY*4E+f1aRmk9yhT)rkt zHsf-J8$&Z2XSQ=Xw+tjSGW8jwPq&nx76Nuo!LK<5WD@Nuda@E1bnU$;D*_=g+(+vt zm&-EGl@Z8AlZ)Uv9L{oJ4l*in(sdRe1WR+o6jLWq70_$N2=P#frq%=#^~IUHL!Lwq z2WdY^XMRdnGV^0n2VW!iKT_8hiH*7$d%%}lF+o|VusuT@V31!fJAPc1Nle7q^{njS zoGeZ6fu5}Kkc`IFQA5C)Cn}Y#o+aIB!Qs?#S)`R>r-u9sV%|p(JSjNaf`PX+V}O+y z=1Fvx`P0%`1M5HDbznxO9RVOCb4?H?xFg*J!?XDh7?WFEF|B9UZ@Ms$`j+z8|{9_*rBX=u~pG1lNIPRtYg4da_$CcPvR!<2(U|H zVEW$J3{0D@mH8eb)W*fTado31{ix`vr7~_JQ4u^{rj3g;IpesNhPyWc=?msKAvm(h zB~vsxc9EAwu2pqTG*@pdjCOInEf``4aS8tJMAn)Q#U6qd$Ms5eOps>NWxAHP#!F^rR-?6X?8qzN4MT1nMqyrxRS zfucc!iH94TzsI!>CTG zh%&Do=Ecx|Il70E|Aly7x*clv#`9r3#D)mujE=O3#%q9gkW3oSF1w3VqE2oOLm@x{ zW1b?aHR3^K|F(62c^wH|=O!&xV&2tLbKJMe@SGpr%CT!bA01ZxVn!#EjK+CSQOPf$)n5`>-OlbkGX)KOfvo0t?P0 zB5AzPlUzFSPLhsUDetH}#Db>AhG=+B7HTF+q`~c*aD|8kmhF}rZc?IWOA-Y~%|~uy zrF_z2+BvsB=c+qRBEu>?fxAIbm5JVQtEV^*a$^1KEO~~u#j6d#+orUoqT!9OI+HkA zO|g|C7Kupiu;GDS$c%{t*eK6pMU`kN^WxoA+^D_6AMPGzR+Pw@+P8!dE}r#Fn}_!b z!3ZEu*9mPfI+Q(5Q!#n));Or9b}K7%G9V72PuY>N4i5NRZjIzt zaV)#C+;m~q@g61%#jAfUDbli)v-1n-|BO=YvS+QaPs*EUVz+AUt;OJ_#A=!J3m z@_6Bz`Revq;o2)s;o8S}%ukFLu6?quaP3p3aP2p8;o27FyK(HoHHGC}$^s&SyGy}R znvi<5grdJ*lJw$msRwdJx!P~C5a_OU;}arewnir z&dAS@ z1)#nZBu3&P&J0w-Fw1lbj-?P7tV>r^H#5ykWdfr4bp$;vfT^shRn7}+C7Y7Dsr#|$ z48lfjV!1#Z>Kd~^C=|%Dhj6Fp#q^m@c)l0S0#NVwf&o{~oup$%2^NTCQO2E0u}YGH zROX>9gmn2d)U3?|K{w)UomA^0Jc4n#qi*ZmQzR=nJFg&C+&h+xogNz&16z-7C6klI-Q?m& zo3Khm)8K*lelgG=%_)I5q!&sGIQ%(Wno%hn!7URGAzaL3rxIHt20>aKPlCacnn+8< zonq>?ELsN$o!2Y&!}6e;CQ;WGc!dH%fed8MFQ-do>&oy8;if+ebj<|Q%}gazb`h_+ zi@(MOQJ8ZY=VVXi32Au$g5yebSr3+BYPpKN}N$B&aLH@=llgdP;VvNE_(iRY1Bmp zf5D5&lTJbtxYd5nb$8Pah^PokoTCDDp(Q35YUMh1MtW`zrEzUDOJK83qysm^NA0m# z;5lTwbj%G$Isq~@=`pc)G2vb`=rt4&!@tZpn&nGkt0Pt*)qx((?VFM0)m#J&%68DX zTMQL;AMY_fMBjrU&q?MExK}gp-BZL+aaS6s7sZ+5st{vud)2xce?3W!6sOyl2Zd>t z;2t$n$I_@DN=makV0a+uV~ScV!}KNcC&jdkT*N$JUi;+uy?fEnl_r*8M-uGSUr`AA zHr0AA5t$S7oElw+01cj=av^S{Cx18|rIwL9o_qx%z-9Z;^)n5Yruzr<-=(DkVzB3* zrauJH!T!aTY*ql-P#LQ~Fkp@SP*TQeRXtLIhN1c1pmad>!!^o^tm)rKD{#>=LBM6j z%^{aZE83|;`Uk#5Zhi*J3=uCYL8QYND2zdp2Yut8a?rAZDo8fRT43xzwgQUUaqii= zh?lOxho?1APN9H6%tUe1Z$nRW9;M%U4)ZLLa#=En15Ln&6C_tdxI!w! zIt%k6>MAy!g&_kZZ(%@b zjm1i(AYu=Z)lM3vq0MkDp`fuz1L>lo#={6C5|>_!7m)RGSMWN1=E9Mb%=^M|aIfmw z&Kv1uJhqCfWsY-C{nPps;}kONj`=`?j*RRYM}xa4>k*RW`4Z#2|Fi65R)49A8G-T& z6$EUQ34lX*CCIHy@PSs#3k*F2W9JgPlYSx@!ySgky~`*%{zlBE8{=ddK|;!9++Er? z_uC+iTby?zvlPqcT-Gwx(E>PE%ay)_gV)HMp|Q4 z$s0cuvk`{+LG#j1M+k5HCU}*bU^yALk^xLnci!%$UR*t%W>sC6*Gdk7)YWJ!CHvA5 zWW$RlEbSt5ua^*-Y)+&B1J@@-M|08b<|#1?EFFHwa4xxYQZmq%Hb`WmAJDH^WiX1> zn87(~%J<#5OZ&S~9M-u%AFcIe)_Uq|{jzlrv}zszdCZcXh*^P{X7n+G^d7?0PVfkw z|EzTseD`L32!EUL8NJstE=ah*j1L{urwJg$e#f+DddLaAXd`O%o9g#gc`S{K$UOE1M{hX+s*4YUkez;CtoPpfhZ z?v>FH5IUofi7$0co~E3`k2mT#eTwSGxonZriHO~;m(!g zU^&>8@2VbUn~k&NuTP`Hy}%K3Ru|HfW%zB{a^7lDkkGT7&3I7IUSI(n)AHCItw|}M zSvwbV=9Otc=ipa5*6cA<74DhI619vtp1=Qj*7uX4q%$;+wPg)II23IL zDbKJ?%epn$sLDlZ=vSu2p>{p78a$v6*#5?qC>LY;G;r`NV#n9$YKUcUWTnDqINT>@ znHU>Tg>i8dVwH0rr8^EUjJ8@JDp~JRJJfL{IIo-7t&m|1qWJ#nkNP(Tz8W=E+f;1J zNkdwfg6OQaYmVR;2o@VcAYzj!^I>(;vCzkzlnbM8H(d-2zUN$;G{q6x{B+naK5}kO zHr&()5Vw?WLE~@4?;E4IxG!C+KruO{2UPrRcHdiN@PV@|ysw_aY+w#LL*Rgm3hlOv zDiP0-z1cxZU`vjbQ$o|${vsLQx|r|*EP-|9iC<=Av3* zUxxgkegm!xvfxnBYKcb;nB2yijDlF35*%gBF3Ew;T1t*B=0mNlKtT^9bO{diym1Yk z?xqZjY`1p9idi*c*{WGpJKCxv_7$?o)Vyvh)|X?f2HZ_oHk|k<7-&}t|LLlGf~yDT zsKL$P9+(fExH`N2r0YNR^pj5-nrdO`bks-DmTfZ27fgN1N!61uK`5~=RyQFH)tial zd1a3HL*In7KQ_~&S5F7pFw6zWF5(}tsOb-v)2-$#nu10(xL@(+NhG+;jL|anZPC!H zkx~g#A@_M$XiC1KWtU*_p|s}lj3?h3`XWP26o%tMgN`_1Cx*TBjUHk|rU-+(QmYto zKyb~Ez)do%^%#C5bdZFyK>xg~QEVG9lrtHdMcS<-_k{S@Jd$pX zm!6XDR8o3+CZ*?>zvk_4|29tP+2xd;h*Ns*jHUG4H7PwYFQ@M`SARa>&JgLKl7EA5 zcJ-TNETL!UB=mfmM@+{Pda}BNp4=q#6r9krhuK~_c0vz=RNTdAsULL1B@K=CyXn47 z-}&3~U%dSnuXFm&viY?HRqwwsEVxueEKbHGbO7KLs9u74oVgMnpjyyoUkHZ17Su(h zWA6oRl`Nh(u88ZFFu?THpko?Pg-%mZQ{TeK!Sk&CaaBiVdoRjV+%z0EZq3Iu^@6*) z(X8wwJ*k5!)Ll6r*qWJ%-5Dzh7SO7>G?Q&2DFx9SGeq0B@4rD82%D3=NU;_tVCJM6U`#O zY*cSJbJf)XXxS)EvV^k&Z(U!zjb1(6m&^%VIgQc8SPr!(qL^vil~@9pp`YLXJWYP2 z_qkvj4UElgQn!VZ>JDqe8MMPt#Hfq|UYT~e4^+J#nQy}cOWg`D+fR`+00|;=LYvj$ z_awDpVC2{k%LUni9x6E{a)OeI$*fiK$X)X-i50Dl)hwtWnN{0}3^Ft9#rijAXsio5 zk5Nh2;Y2-MRO!Jmjbk}`XhL&Lr|N)P(#x7=R}*9cv--H(S*^Cs6FHXSuUez`rdE*^ zH6F^7ukaKW$j!gs%8R^t3X61`U`q2n(?VHj-8N&--Wun6SiG4Up@p>*J~mr65Ie= zY>+Mmmzj%R=JY*t%CMT=nwbd6W9X$2SQS=p)$PzEO7O2t!wPn)d)lA8aMW|bH8)E8 zU>^QJ*19{4j_X9=nR5>21=^hVW8S9f`I3UJmV)i2bJ4HlBwK3poDi@U{_vZ_duCD5 zU{7!~E!S=O&sVzp+zCC_tQepeBlL<$`o-mGpgxPS`|V^GmQ(f?`av$8%6F3VE?ZLr z(m4I|4odaNP`nwL=F@6BM9#1X3N*gL5#4j)xJ=dyo_;yH5+VI&Ct^TmA*KT~d4)sN z-x0(S%#vb@%ME&9hHC#!mU+Qnv`=CjIaj zo*W{6$)sTGpD~0?I+(Pf9fkG(Xu;L{5WXWiTNhphnb;!rYZteU=;NkSdnf=YgIuFbY2-4t1$xwy)W?=NBd z3r)?Wc{cMtn+O6QMVTKOIPJ!0Sk^=o%Q;gF;1a2V5mkddxDsclI(V>ai@|{zmmVi_ zV6uypVFgDpo2Iv6q6>qQIx{;vbldJuoHp0py}!0rul_+qaI?JLsb0p?>k9#csJ`No zczWG;gRowGt38~-?8t723If=;w)(Ml$nSms6VHCA9thQ@X4cb-6qA5oR@=Is;Pm@< zcVoR)TXUAWFL#wZ3h~v+X@_lY#r#&L{%l0;$ar``(~G{1E?9_sSET zs5{FCd!*+d#F4@^TYIGayV-s)d?<^1;^c>hIVOWI;Vj?e5!BauJG(y#D9gmjt9;B9 zVhN}OH++YA%YpHz1i5mvcu&Ck5Z?Y0GO{Vp^auGAg6>A?$p<{{6V9bN2@`r~dwc$& zZpHXS#${1GKu=Mt$CxG;wcih>K>HZyKt1X)`wD7gOQU`zgZeSy zn+Q+WY(-10s@?i>v=hDmvKthcrT}DlI=j5+*AoD|^vC$_*al)qoUwNPy>PHY>~VWm z73S0ytXano{!)f{XT~SojhSSsicE1@p>%>B4$_sCCI0;{1d5wFNg8FItxPfQR|lg` z(ly4w2c>*Y%O$+B;O<1Bn$sp;60ffR;{ofpaAQSqhG*GUo+NSYuSS^eR0Ph_mzQx~ zuX6xW6zA`t)saNXBs4dBF3s$~ah+Yq5;-M4vs=F(CMH~sMb5s`u(Mn1ZF>Gjd-MA8 zwbj#P46|QzWK9l&DH8i3RO}R4I;$o_OeLK0nS03~1hT}8kF63F3}=1UMvz9?gFie@ ziOZvD`c{zFiqmV?UU*@5x8Gl;|I`k!yWgR=+?^dxi!6;~w^KXrUetd``!jQ0Q#d$* z2D)+rpO_?!)$5lSSW)kM4W_vGzEJ1=uc!En^>5m`a&yM>xwUy^ zR(Sts>dlSQoY`9Y#>_K&=E-MgZdOoxsa$d6&*n;9U%q~ImT-^F&*hD3(xEIpQ_0Jn z{`xPGv^x<)fHF`o9&1OOA|Xo_Gs$5Al!?wTN>0ZrVP;Y4r1k02T4`_av5hXP9UjxN zF5W0dr0vhH5uJeVJK5DUlod=1M4sfaX#}#Ung1_ykeEPQHl{=Ksa7{V0ZGx#~LWEk2U+EsI6@fG7Eloepx(lIG+$x5( zYS3x>*Ji!5{V15?U6J;sM@MF+)f|k3L|tgj@KJvw<{H3xBnU@&F3C(;DBbH}Ygg(( z+>)_JXUCHb52D&WYsHCtpl{Amd+L+$W-Sf5LcHGAd~BrQz_j4z=IOXKMHV)l{y!Gb zS{uZgydB1Y$a3ye>J@|X7TU0lvZ6KS6AMkc^QNnK%p^Xnlh>Bp=gz}8xNIqhm#l&qQoA0Vy|xi&W_d9YchVeV$Toh|`herxowVLkX>?kdxe3@0t>mIU z3#C8BXXbo&+&3{+ZM|=PyEx8w$M%y?K?w=sEU3=|bLC@wDq43+s_HW6Shapdc5s0N z1xd!Xe3J4UBWfM_>al!fx!R$P+Z9L;k*3_~eRdK7rfg7?=sL|zuMG^-c-gF@U9An` z?1o`{M4WisdDo4S8J~fetjD>kdnz8z_(0YP1~q*IroATV&G^JH*`N6>JHTo`oOMB@ zW0xIUkNZ?F=!e;i&j7l8X17oOfyZY`xP@as5!8T0Olgh5Z5t zuid!b_7|j0rKUF0KX&i`OolW@ElBI6$)M{Zku1)<_xh??!W>f?i^D0I^k&r02E8LR zu-cFwmVXi@a+=mREx22!6xOv+pLDZunb43#{1aN&(l8AvQ3qIdJ2T(`$LJbX%aiMh zMP}|q_NBdz-B~e0ryM`oTWNm6%+xQhU6@AbzkYV%n1-CQ9}@#U19-CZp1ODRP60GI zCnjL93U3Y6I%BK~X}dFI$qK>2&gy<5Rjt^?659&W2%G8--(0%HgxYnSnT*EUQC#pM&iq+0$e26 z{VxRY0t?dCJyWE+x%rB}aC!6Q`UjWSH$QmgV6g$exuI;S^tWEqdlCv*Fh@uyBW^B# zseM@ZSqwtv?-rdd%1+AS1JmmvYgDs;YiRT*D7SbxY#@&Mr>ceD|Iu#batv=ysUuWS zL+3vSJDu=CBkF|veRDvK{eEzl*u-`mbnb2^2TDJ4LbsiSV^$2C#Nbuj?4i#cM*Jx+ za!J69s07KHm+@_5Hxzr7wz8FWnpkXO)Ee+rMQ={xL4s~2xe;#I&R)Y^KPe(fLa2ry zD)FTqx}!VEfg694kkeZmPQ}c&?t5pAbw4@i><0A-Z?Y}5=?1%p`EGx^{s+UT+ly)| zSMrn&TH!ZmO_s`Q4V1mOb3|LxNBz}Y1xPny!Wn~C&G$L+fqTVewyJLK(#P6P9UmIT z33hK5#HP=g^b}oE?+SnIk(jdd$T7ChF!ta9L+c%mU=Q8{Ufws;KTG@@AmORtOJA)3 z4Sv7*@kH3X^tB4C;Ad>7Q15HreU@Pbe>1}h{s6-Yes&C2@N))M@VD?xf2)E3V!#{i zFiU^10s)AR6T0^44~+o|{;&fm_#-^lkB$Qh{A1b_AK{n+huErt_Z2gE@HXdKo`-R?LHvo_4j zK7{yCT7(5%g%2?0mME6!MEBo7`zLq2u2sx3LpgyoHVU-KmWlSJf@5XedFYrJ4m_>s zr+;wcHv6@_1Mr)mW%{~vINS}>JUqzx*OmV626LMPMqkoNh$DNfpMXh*g#qj2lo0p} zNv)(OBkA3g-+!Yg?ZJ44PVXbPGa#bmo@trR$`LpG(k5*3WWn7LIVS^s!ni>ebX-y? zq#fRMr;$q3i9FUYO?M7z|AbQ!w>C+X32QYT%yRE8TyiTWInCvf8wn8e;3p9_aRSd|kFH(w3c>Aunld z$zCt%NpmMGO#8MtPaQ8FKS_ zm%9Be{)9NFe8AYzp=27kc_rHGwUTTE7(x!+3SPd0$7asj5-R$T#UV<)d^TEO?Tz&K zEUAWD&-x1vZ8Q{zXspX;35ZPwYM!;uook(Ywsr1&YvwM?z|WwGUfsCrWEKrCnJrUH zve8q(f00K;TzEKy{bjlcA%{kK{)|54RgaEuA%hndkpR3L?=1P@ty_$F*4=tBJltxB zc|nTh`mGn+BCGIb;%D7JfIwZ&moi^oy}dzmnz zp(=U6(iEo(neVpYY}Ao6`;(?GenN(E<*XFueVjq2T|zm#tqWKhPh|O=JJg(LhK56C zLxewq7#?Lb{^NF6ndQc2?R?cd(QG*r*4oC>HB45Txr|)c%=$~$RC{(XU7>lSKE=m^18E2^8YRP&SV@#su*$Iv{{InNgazB=k6#Gr zPYz*d4+uJQ8Q0!;?ObMhuGJhO1k~sSVIeXin7q-WZIlf~tLI}joD=6t2|qGT&e`h% z6^$>mWE<`!F^04_k+zSW5IF#c_5EMdTty1L5I7EtYS+L* zcK8$bP(8jb6>Y7UxL)x!s;(bok#xBp=)jVP3vyLj8DX^D&?QFPW^G?sHj%T?kPXut zeTfu$KeMTU15wkKggY9AsM;GC$6(yC9w~D*hsU}1oWifC*z{K>cBK>;LaW|*tlk(N z4wbXZy@t4VwPEuj#SX*N<~9mK9lL6}{sJTm|7}!~IM<|4KOt-1bo;^YK(E@15zj-Z z%)$zJqP1wIa)NP-6+K!(0<{f&R>2c>v_w#x`kSRqYgdzxq(Ge^y@!Iuik|nJ3auEI zL!ztgh_&2B7UW~?GmUDxQ=bbR`?bkP^*Aw@Ad;w(U4O;S#Vh=-ECF(n*!&WipHe z?9^%)f?}TPE!UK2m+Tx7nO3g=pKX(CULwZhHCtkOKIO``GikZeCkB)vOFmav*Km+> z$5?t5OV^7q)dpH%fh|?dOwkfeKpRbBJ9o39PdjP3o$iiF$OcuVp|qkGI?nF@VyZfj zsm;TJxQTedrawHP;v&HAO0N$?m}U21+YA+nA0P0wW)}qk-)=9$oIbg#z0fP zIU{_Jd-Q3LiS=qC@660oFEV+fd-{G*og$)zd_a&RSg!ZfI}HZg}aS>`>uSJ*N-3Asw+D z*+qa(cSAKGu`O1((tTp~KTv@!?R?>!h?8X40A?#Ad5=36Mi{V4c2QauP;$Zgn(f20 z$VUecv?CG(1Rx7EcwhA^VV^mXc}TP=8x0**ogTugrIAG7u^J_v>vC51d0H4j=CxD~ zLd&;1VjJFrPDi8)6iu(v#ApE$jFiTf3RL`+b)ArdT9P3lcM zY-y4qOVi#lmIsfuNS8(uUZw2_w@n9xy9!-V*N&hs4qU+k<-PEd?KtWMIrKK(O4aX! zq4Y)RGHEOH?#QH?z9I9Ml0)&HiB%ABx@ecLgDMuL)J=O@mU_9$b1Q-I#&cH_+pV*T z#%Y?eGl#)UY0_G~>ONKsoVJ9WUiF{k2#pI%9|p6u+1-E}45{rXJ)TEy^v z?>NX=+DerHv-plN+YvO*Mis9*c4+)0R5LB`?8>7WIEdnIc7>hqwa^5oy-PKs5-krz z!H@>R;`2yR#aRI_-_DY_5TB0red2Dlq?}6-L8}afr!BZQll^^rLClRNn3E21RIjYI zjU~w899o3f6x>eOG8%3E1%&l1GS$+I?4)6yO-sCUcR(GKZrgy1UkZx5F$@O}hTbMmD4Cra zoraMEwUg}uHH-ph)Ch}Rn8AP{WkgfB%piQ^(h|8pB%%F%z*OOU0TN{x_x>9n^;eD9 z3&i_03=26uZ%<_VgpM|*ho$2$XDLW34;ulF8&;hOs3-PNa|=DaREriuZG=*cxwD~< zt0K4vJ)6}W?Q@rTN2<~^Wp?>sFzM?2g#i6xxXm+@ag;XEr#VG$PBe6pR0@d>6l0$6 zii3dJEnmxCm6!bf!w#lw~gbm5s}eJu*=>=OV}BZi&8K8$)coN zc0%G;h6CWGN+LG8V2wmGciso3Sg<^0m@v&${j7F{wI)QEHcyv{yk(K~Z9sFDhmPVv z6SW4%$5zr7m<4FcrM=T;;13CY`pxg;i6B{~VB?6K+|!!nNj{`9`Wj2G72$D@`fUN4 z@Sunwhu1jh8fE6S^alTazn6wX->gH6pfrnd&-AJeZ9l3a&V$@j0DzfK`YnB6P}m2j zh~bKGd@ZtH9dnpc(UtDcSg$ML#{R6O!Dweaqur7qaVG4}UW4_L16<;GhD@aaa=thv zE0jj8u7=4*aL4ftMls2L_%M)JVQz+K<09gWva|?^rU_9jWh#z2rt*GSeClEe@ekCg zf~mOOT4rT>2h+IT!O?o_!4Zlpa?Rt(c!zjax2^v5%1de}VOq-kwAT*mtmT9Hz7zP0 zg-`9*szMw+S8uj6s24rMI+k!y%gUxbGM$&bg*SAj!`FzM(<*A}QB7+^$~RFxu@B)g zPKRDQ#Wg<&7I8UFvhd6DvQF*F$|N8ixFz;TmRl5>wzLiZ&U_H5hl@Te4g|F>(`0~5 zL9;5cS#=(V8jJ#IwW>tM_F2|42~37da$XFQHBA3huWU2A7IVr>o@WmcT)8tp61HP3jc zl0rflMYhe^3moNKEDJ7ay~wXKaT~{b@8)xOInPX@qnw-<>c-l@vli=j{b=VSJi{%S zVX`CWpYoYg=fJ=BBxa!Fa8xb*U7X7QyGIHbeh>2VKScjrpO*T>*%)Ou?MPN%`g<#7 z4!;lox=8gpwmBGsbIiYCOta+BV#oYKkd{+{81kB_3@gBKUP;0 z@p)4d@yEF);!j|{jbqnDWLbB? zdsXQ-m+69>dz$ss^JmYUli(-{=cG3#CmYE^b%GcDF+fVpk4~>3iPk|gUCzJ84!7c9 zFW8RqC2S8O_^r81%l>8k2i+}yU49^`*q(N&mU4^#zr8mBkK{_u1Eo>7W+pW=noA>T zbS1&*0WeclX!J$0InyK>sO|=dYfxyiIV6QmR3?Dz&Z;cFtU@=ML#@1*tX=PVcfFVP zoRxMx?C~KVk|p`JVcGI+%knMBvSj&?ZArG}`;0&0y_YYmDhntynxduQ_mMv?eaq49!I0@MLnrtoM+cc z0!7DSh3W~z>*t~wh7y=zs3OX?{%uXx&4c7==wKlU;0vh@pa5u9(9-z;Rk9F$b7* z?o#oz3zDR<_UP)$r(9fEE>*zO7`ryId!J881&B0kIMwQvX)#7Gl0_)gReQkgnaW72c9UQ?a4K9>aFXEOkxG2Dx@u2g`B;Mmhw3C_TI^N1>t zXU*7jhn}Dw=~M_BU^l9jKW2PeqUM@&m?BD^> zlXO#-B>D}HS-^6tJ9vmc#HvfaUJD$%!?|)wQFBb1X#q%=U_md>7~?sHlNMKj^C6tU z-Hns58K|)4KL?eYee}eKZ4M{xBeSzepBP*r-$r?{NK+&iHtih0P%7Sox?@r`aDucW7d|BOByJ6V??fi&9hM1(GSMK-vAauZ)MVzr z2r>TH1XH-#KYg~g5Vs^Z&{!h~-^@ziJeNVD9W4Nft8K}kITMrPoat!cv1>gEq+xX? z;VchWK-eF^HLeJsG9_#VPS6%L2C=`SPw*ugeK(yiBL~zegL)l#IFF+oew0VA;#87b z(Nva0QB|D0gK1v!W{ecu%%nC_SKivSMnyu@>kBtPxq5w`{+O!MlXN-R;lqk= z;xWzM3N#eB&Yf@rvWE;)Zo{3tm_G0ry^8vnG;eJMne0k-Npr9!19jux9Fe7TLW=N~ za5J(%G%f{(q@|}gH82+gFX4o|IcV4Yu(f=`XP$*=KItHyl!ONvZe>3s5Iq~a)&$M3 z{I(>3LNVqA?44+MDH6nvT{!#HrJ+8zCN=oD+`I`@b;>sjD;?PB<89JC)TrL{$h6V4hpSG?j2(hw4tX;-fVtw_Fr`KQBs#rP$Tx%Qcbl}Er6w=SN2YFz3b zgO9>sKP%l|vuB^WIBtXG@GK9zz(>a(CKcybCbO&V2xgC@#1>0Eee{?(P(FJ?u8qd2 zL_HIZtzGTseX{?{?{}{{iLtqZT1O?=W6R1`V@dDq^SfQ5Kf=+<&bozom9Q~vh z24K`HY2n;VD-E+v(rifC4B0-%zbjM-nc%$EK2$(gZ2Jz zRYopx)vwVqlfW>ot}+bZ2fpANZLA~GiQKQ&qw=TqE@aY9L}?S z$1DkaumBU_D`ryeZ(Is7{=;iRHI)yD@rT&mXdXhGelVa#7~eBmf0~`B$t$5I#7;Ar_B*I z*O!iy!;cdZ;8_~(`%|}rt*uB+AM<1ppCucQ+Hc8-EQOkXdCkzvkH8la?s7fCld`{0 zwqTzS`7L0&aCfXC?sQ(BJA2{DGS=!utx~@a-W%y?;CO;c;fnPI!~+J&jTEpX7K2$+ z$NXQElFQ=?-O`$YG@RE>WB#~o^XbvYbz%IxUNhltl}SppJKCW(IHnOI?I`1saX5aH z8Z~&_u^iz@I^LK_#2@3(ryt%J!F7-}tY#T3Cr*200cZRuxQ+}D9D`fbM^$HY=^CetJ=Hs~Clbt#4 zD`b_9`wH2xMVz*_znMgPQ8G4TL~VnrePmu7?adh_2p>Cw`~GOuIi#`k zqvzAhBFyQ;1kllps4(4&nt+UqTS4cc^aI_J`TxT^=y0x#y_(1r`jUD;)Eiq9|5Zi2 z5qd%H@Z3C>LU3d8`i+uVf3j>e^@XxmE|>r;RO1*Tqf*F4x&-7lpI8*uN>pF z9o4<7iIkPW(O7KZBxjm2nmeC3Q8r`ly(Ji3kk0ocX<>ci+VZ!)C||0Gp-L3$oY2Vy zIFUT>teDnd;$4A5a$7JvBS};fe^tVne<4Rab9pAoiRnux(m?v5&3NDdRgHu<8R$sJ z{Ye5eA9y|;&VF|{(y@|Wy6w;P=ySUpH%T|(QW>1} z5h#gi&C<5lA95HnIBYj+?zU6Z35fg&!OT7Q0!?G0AGdUVPL~8hK!4-~&2G<>nUNg4 z-^i(BU+BxhdlUI!kJCpC8(?~YlX@>9!UEmej=JhWA=mDU`1CFEYBlXulc1`#pQuVN zR_$xQsgO|jn@vL9PoDnfcYQr4)cqDtsQay)Q1`t933b2CB-H(Op26?X$#0m$O4^Mw z^*al>Z}`5=-+$jgD&6-xsdT@KTl;~*RJtE5OQriElS=oyIhF4BV5BQYPNgIA7#L7q z;HpX6Fh!Vnsam1>y*AnIm#*Ev^#kwaWV=R?^tz7?#aEjdx~@ho;(0ge|F#y80Zv;$ z3RJJd@3kfws5RrNN)iA>q6uGU7;a^Q?NOInaO<(H+yYU;3>=)=^LGGT=y!TsN!+Y3 z@*HNu!Nel;1no;A-IFwKOOSIQ$g!OG!hu!&y=v6(oC!_&$4Fy^2}UQQaAVjezMIp{ zQ00$f?eioljDvVEZgbL0&1-PF7bn(Waf<>w3p9BqK>hqRhWtXZfTufdM^4oCtjXm% zi!6ftK)ykLkXOamIzKE!I4N-#K$^mBvCr$IQ-U2qK zFxcme#|O6$K94j#056&13|u#WdUV&+A}sUE8K(|XkCOhQr{_6jaOjF;BTjpk(^jy9 zGs$`3fOQ7{$^;qKgUB&_nS(m_Eu~EzLDbun$fjwIik`qjF`YdVk|J;MOeeNzXe1^k zYW~d}d0T&JYB3a{+oh}%%?srdRZr)EbfqxUYrUWT_V0@B;dnv5Z6^3}?CnL0p3ZX; z(UPM!df5L3P-=g-$FA6XS(hYHFxFVWI=@x7+mnM)((P$=axw@NP(8~|>K>h7oNh0r zA@ujeu8@&jBkaYv9j12?TTa5ZtCIn1^kT(B&7@dj05elkC5OAaxw3exn#6Y^&F_<` z#&`?!hP(nSq^-^hXf{_dDp_7FNfA)l-T@GTFbhiw!9dSUvY2RcVb45TSOkpQHj!v} zdfNiG83L*yM5ZTAK#EOF2+0Osq>+<|+G&GZGn))#8bF?oZlDi2!Gh(IEZ5~kdm63} zIVGX)tH+&%8ZJE_PGLDZ`*i-d3zYyg|C;%m1`6Y$`FM6d#lZ?0Oe!+xSUMp7TstRU z92`?#;g~AYSR{yP+3%|;L`~0E`o^jsEtIU;vh_v+pq-N)=S}R=)=T}nsY=2Lt=*86Zq4$G>7q_H&ZkM$; z?0b9d^C})F+LTi;j1u^hx_shRltEP?_0!ZN;$z1bEL~AR9JoT*57Zh;qexDnXvmI`kf}Opc>;{! zqVdsoj1y+C!>R77C)*C3T&sHKBTKV6siX7Mc)^l%d8a7(J6WW>7{kt*v9T>H&dDy4ZkUn3bpTKL?Il zhmP~b>K!^?kTcU;0OpzC(V%Q&#aDm?*o)NuT@o+R1X5K&7*AKVvTBB|6@nKT`Cm?b zPD9N&aNZQe>JA)~Ua>-`;Kea6DL>o9kVLTswdf>GNUbO?C6Z!E^mo!W7j2o&G4C0< z(fBG7DFddp z!$SWH);lTvy{B>7JtKLlDtAkYG;bPvhN@)LCLH?>1ZR z%wcScaKRw1e9G7-rWjtg)inhi0M?*dNVYobMxoH@dRlzeGpqrsTU28<-LHJ#Skgr+?m zY|(z+K~gYJo!%7s3Z^iZbx1_MmX}8f_@VY=AM!ij-qAqp!#kN(GyW*CsQb&M+8BE-HZFh|$udf*>Lp z;#d<&?h=kL#l-l8OmI3g$Lg_rJ(Fk#t29Uwf!($Wx>Pp70kVxYr0_3q$f#=)76&Mhmy!9~QOZAzb6&*Q} ziLRZq{o^+60^MRw{uVEWy8y;Y@MK*CxX2{TB|wuf#R>%}Z`xl~&?UHbRX;sFTM#iJ z&XLoEoUi#UBLzz z+NlL25V(#vm6Vfo$mCfv(a^c(g>ie)=+Z68S*AChu}~$=xDSRP2lk6h#wLV@1;B_H zGEAz0$sGb?H)y~_3qC>ZSoTfX8D|88K@(z4oa?xDY^}T|{Fkxjs0rOxHc`X}3-xxU zDRw#$D${0Oq4H+Mmz+=I;}lN>$;K#2J00s%0*CCVwAVom&VoQNs60|~E)&09UbS}H zcqoOLfzaU-E z8JIZ$U;<5_N-{gATP?)Grm zHgV-9|6S#Ly1#Q?GAyZu!aGY8_S*5_Yo4h$1uF>me+ZbRSMhI#oq+MEa9-PHJj zv@nr^HO8*;EzW3Wz%sq@bISMlh@=tf(=<*zy?^=v40P{V-hHu(w(kHW_S$iGzgD1I zTi-cy(KIdqk|ge=!bu_R(|Id9)PE$)dwpefxz1OXl|Evy<|8%vs9{GDdwRr*-U$T@ zapKDJ3w2X&-fh)AMHv-|lrKJE&9Uh}(Z7I+RN1*lS}{Tf)0R|ejQUnpc6A`mItI!D z7BN7%_)H>gifeTm>M#c|A8EbM$v~%L)%8%y7Vzv#Of&zSyB|c)X%_@3KW0p5uDgnw ztwSmUX^*rlQ$99cS^K`0x?GdUo%oPaL)1bq#_3wqL|KmITWNPbCXKyCC%tFJ-*X2J zNZLJ(GaxfPZwH}8pI-c)DZ)vd&2=jyuKZZ<`g5wetNU(G+K$B=K4iPWQw>e5;uZTD zP`mPaOR|`pv)@a)G0T8_D|trcb%2BHEf_mijDXTNf_%a<&=Ncda@yxdg;wHM8+`{3 zi)l-of|H~@8S4Tr7T?p>*Cb8Io*U*8jeRNRhy-P@gwl(x{esdtlY-}9ZlAoq0a}*K zk%i^@Oput(`H5RysW)SM%5c7TRv{*3p{IC7`n3#0tDHDa&0Y|PJse&xjw^mU<`Uhk zOTu+#O{1<>E=;vfb7R6DEfVfE&nY4*o$1m^fkxz#65GT0Br))*UI1_@616RTok*;5 zFDjs8x{v!o7<8mfNM~`;Wff0+QF8Ya%Y`Hjrx`Q5+iO&=!$?GpLn*i0ROvo@#o+v7 z6Ir8qmD;e2T0t&26$FM717k^HIC^Dr7kvS3+9I$8zQ%>iM0u6EVES^$!go!&S~U>i zTsMh;W@~dydWKCR`ms}QhMVFD7pbIr**fC-J!L<}uAslz=PCP3@b4_r$K1DKJr7_3 zcT5#21xdUj3Yo@y#W=L{2GURc<$^Qqui#UiKAnhbNd47 z{Wv?@eqzAc_LIih_BWUsKQ+wR_BYF&Z9hHWZ2K9<+4i@%&7U1~w*BogXWQQ~&bGhH z&bGgY@m@Nzv#qtAZDnCKZ6|={Y=!FQ#A)`mFZ{@l{kqLt-!D!xMx=C*R3k3u*=z>p zh)mL6q){yeg^sxNKB=hODh%SOZQ9j=gi$Rf^k+Ejy^!`2k=$HVZ6GvdN5I>hR#^|b zrlRO-V}T+4NW=}(d$)G?_l*9+e?x;nPFyi#2DoH(HzIX&2X#P5L2Ji@==BI&b6$4v{F*w}Ohf6Is1SHRspll=d3H=r=!=ig z7gLSR!B_4lz;>#7ty*fCW`@p}=w7X}+j(ZDn|9*n%=wEKpQ!2+NWAG`RHaiP0uMhm zTMb&_r3)O@Mk)>c7RFoYy=u~(y?Cd3?(FRO8Kx`}#dsl%mzFz**GT%dNWIz!=PJ8B zWzL!=G|y_2VNLC2gh52?=-M`R`J%Rq$(&co$w6L)WP}ub8cL*22@t_O0iV8RU8VeqOb2s2%dI@%qkP&U&w0U|9xq_w2-hZWk? z+15Ql|3%k&RY*vL=+Y7i3BQKN1-sX5a?Z;uB1#FvT*qa8HUN&fC zMk2nJaqHrgrSad5JK}8dm#?muXJwa^k1kf7d4whX?nkP$Hs7ckMkhCdFgW3w*CVoi zazxsS5m|bXj6=R`opQb#7bu~$$ZgrgN3_)|YiqmP87H-(IZNv?Loe0zNyF+?r?)ku zrNNAfk|-cmV1`fKnc1_ov(@$bQhlybpYf}if9|?p?eK2(tIhJrlR4ZL2qIy1$LAUA zy3uaI%n<%seHljkT0f6Y%;Rje(Xz22iR-t!K?edUiy5gXQDAqR4z(LTRP$vG?~)Muhir1%dd#o>%D36bi+q(FPDdkl2rbJD|#@R|Gk$^*O*_|c^CL577>YhgDUtHU}BsQ)w z8L}>JaiPC+{j*R|=0mnAryb05+SzTckm6)&Wj)fiO|7+7oH=Dr;JQk?q-)*Mpd(8iq`fgk?E;X@hTLH)6AF*tlw6m$RJz+I+_dSTYZ}D;FP`6qal_9bj$h(Zpi_SUq@9^UL&`y1MZE0?!j=|L%>fiIczKkez z>#OP4xtkj|R@XOqh#20N?`XVi}OqM&Bojd_0744`U?C22PXU* z+05%8{N*zXZ_K=o^?E~lQ+B)5#;H?!@;4jx&1;^qafR!+4*We>d3CQx zr5Vb39d!Bn!(aU<9{C1`b=KV>1`Hh?Fb@dJO(C!mV^7Z;0aYjRZ<0?1j=)o;x&-CQ8nU%k0LPn`2O^XmuAZrvxw<2;U%) zy0N*sw!wS))6C6R%p@TwR^~{=KVu{f-?$t+P|xBE2*IV*>sTjZ4K>FLb=CZG{j-Z} zBsPhxYM$2s(|T@k<+(XmiY)L;b@LKG&&;W=ozi*Thuqcxr(0b&`)Y0B8d2?~rMkL- zuf7TdyBj5YQ71)w@S-6bS>r_77kCXD>N#eh_c_NTD1Wn|o;U4sCTq4Eg=)!A#~w(_ zX07|qOVE3zAQ|-LY^YV9_8N0vz&yXUbd&a)-j|=@pVv)K8;i^J&#tc2Rl}Ss^&YAH z(aahmSJg(|2XQ|!?i{iHoVqEzje#|8E-%j!4=&H$+FYuyTqp9rK)*hJjvK>9p`(uE z-9|&b$SiQn@S&lHZS^JIrSI=MmznuKTjXnEX)DKGHb)FC{rX&fu<7}}!t;IAh;QAp z*`(iU=qs0kg_CX5i1vlW1~vJTIj9$@ZIW77=hoGK!rb>Y&NHlL;Ah$aH&tLybY3GF z(H4)WX*L~iZWXfJfuwA#&M(d_sfbTMK7vIJRoi$2hk3aXqIS$~(!Z%)7Lc(K!`E56 zRkzL5N_BB{$Gjpxse~J9nNimP9H`o6NchxEt(EX>ZY-$Ouv*mS*se%*xT)8S*uCD_ zQ3@X>oB@#<6*w1r#`*}drpnBVccOjO<+gfeu-D@D4$XScjBA@e4;|OtQ}&Knwc>V= zsC(SjzG;4uMDTrl_(nZ0Y9^r>q#bt3agL90%IikPw1Q5x6{tHjgwJtfZ_t0c>e~#9 z&abZENMhNwNE!rj3`w{D)Qnz5K}fHDyJ7Z))%lwni%X5oMtx(0o^PmM!&~S-Gh4`> z0EVCcb2D+H(hpHX|BHg$u$s(&iLbw|@3bi>GXIsCrrtz&>pMnlpkHgIP5W}Cu_T9m zzNf#_{49H#j*+Unum5YaW%&(=7dkSQ8|uFi*~1g4FD=f`t!&OO&5^A9bw)+)L?~s} zuC2-c)qiU?1r8ky`oF^$pJet(B3jka$3WWac6wd)>kaEeb8D#o-ZsilJ*NJLQ#$vk z+`e^MRsZ8DZKKvi(C=aX zTzMsY{lXhn`tLdY-|5;X)c<3;;PqTsU7lN9QJ;qr_vp&G(pXFkE!AZ2tea`S-ZH2)yzCo4wV)gVb*{=G%Jx1=7#! z)^HQ8Tz$c+ibcf?=lGjNUbpAC*3BLm)-7t<4fRDnD}IxCdzs|NjR8&bH_MLrDu+^- z$!{^tQ(~E_-)iVCs*~ti4fVY&V}6_2etJlzv)_&td#5oh2P;r<1~ zqIAm9Dlt#!1rwI|G3!dem^K?XuQoOoH*SiV^A}l%{c7zwnO|DHxj+hkeXXJX613t| zVlHaU*U^sEUp9PvCh*UM{+X-(nU~aGF(%bZ^||$deg9W;pMj|O4fWTUU;et;d!{20 zUHv$|eFwV^)lV3KW1d)DU%NqvwE9VmQucN}f&B3O8~8b7idt_5E44qx9sfrZI|O8vai z5snllsD6PS?>WJY#s&L}r}~2#|Iw*DnDHO8{QW1V27(!X36%cOZ8&ZR;u-(xDIL%F z&rTtp@tGcoa8fuOIUY&+MwZvalP)JJA3xLrrR>DszFu5-zH98)`yp8XaXVM z)l_uUJ;J_l?;UWtY%fIWazUw%YS-K2Sf0^{<8aksTz-2@I7cTOFG@&#vKo!cmc;m1G=pPAWa!+q{AVn zk@FZ2zQ9T9dHfzRjcg?yzK$W|*EciI+#vf?JS&c%0E0~yldk1ye{p$kZDwtC4a03L zZ>;G}gXlmmt;tcW#0T)3<(W6F&cPQ^-cd*8^%8^Oh+H%o7>2~D@X|mTMc$DQ=dZftmmR>Dv>g7{Bzf#0 z%Wxvgej9i2ZGkrNLZn(m9Fn?BlMQ1ftLEJLfv%QbWdCkO8Z${_o?s&g%knDGYDAr` zr0?j~k&EF=;=Spm=1ge*&%FgIb)-aO=w zfV=Kj4Ettt+gdCEsK-IEc3G3$HIQ)29f`$<<99Q}Q3Y_3ufDN(=2lQWg~(|Z-wI^Q$6m_ zbBjJ4A>bcZ)|7|qJ?^incn3bSWS`f(8-=uP{@~UtZ((B>5RAKNFA0Ga=o8OJh<)W zlhl={YGr{=rj4<|svXR+qtAJ+>4t@lYI7WVEQUxj=fpqoCxC-l$}ntl76aw~X+Ns% z)cB{Cmas0-{Jl6}5nDFUrTki*Ya4Si^ENdR!%ySt=o0cWe-m3eMOv<*n~ z?)G*fMwiZ#^ls^#Gj4u!3ozF0aQwO}uO&`>F?!qQ)u zScib!`$vNN1IAqvl-ILQdq<+o04U(t;$(d^S3dl<8%GMw_Y@M=lKo0S8&BKBep#=B zw2I6MAFv>HBJbQjVHI;qbxG-=vZWuzk6POs%8+jh*37zT^A4GQ<8oo&#E#B~ApK!n zIAn=m#C@L8NX%J+Q-ote!)Hbw9@}XWj$P}Be)zVs_3ZE7a_~EZ@=o8DmD&JQ)pTztX_UUo4$a>3nycN#Yapc>& zqg&9)+XmmW2qOu09Ym;z<`r}~E;|ynoQw+VWeG>CSjUoW&Q2~-U3SxPOR-3X4e#k) z-n3|9X2vkw<4!(b9*Exp1n>^5*3rX(!{8x@gC-F3CPR8$4}jAGIE&2zY8X8h*xe5~ z7Bq1;Rbg=~t(2iG@M9@CbP-1cUz8)}9(^Ea4ujy;$qRTQgUGDa6qu#KC-QW8QpUk| zpbWqsqpeADs#IbS93-S##>hD4lmK>?Xm=@RdLKOSFQ3=O_!^QoTgD<6zs&J0aQ3V& z-<<0+?w#t5<@Ph1?c*5HqguR%#*7IK9Y#0x7Fp9Gh^~v_Z0HIN3Q;kb!PIutZSHD& z&e6h3R7xfsl=)neWE7tssm)Q80KTSN{tIS9K_ME8D30_wsUn8^=5~$Rj`aZbNu3$@wg8hw zj7w%_h5U7Xu~w^%EclJIHBR;MU+blD?Ksok<&eHj*FJy9V!R{D*X@?N0gkwDQ&YJC zHX9PRKtP#7=1*yOA@R%{OHM&wRN;y3=Z2$rkJ`?{3b0LvOwV#m)ZRD%K>3?WvX zv>lz?+!i=8<)LS{rMOyD+Ag1#meW!8NaXDCCVU(gIPyCiD#&)N34PSJa#1@dPG32K z5cY?bch``X&b^V`NZ|@w%u7zkx2PrwBe;d;LTOA@iY!%8rFt3u2i22Lg3NDogn;p7 z9cy!=UhU@iR>z@doUuYS9fRQ52V1!bGxk(_YRnSGHhmng1HV<9de2INIHDddU$}H} zW<>V7<{GgCRU%NLB(@&uy({Jap_gH?BQd@mK2p+FZk*zcIIR zy}o{|0mnPUvpp3ZbF?)yaOh~|Y8WUD_kEz5D~l6ux|hAltsQe3n`wKqn|4lEInv=I z+G&tUVI(~TQh#D#FFHX+w=G6kGtls1x~|xWJ|x1Y85~P9LP1?pE933`&GEfB^nN=X zg(nj+90D{%E({SDA+H$I%5@|d+nY>$(oif8+p#phB7nuXe3=I{9Lk(}k|GU)knwm{=lnCD^%)S2pq+J)w{e5cYocaR;%D^L4+my5cX_{f(RSZ*Ai^gY3ph7@e5zzZh$5Rv zm>;i0x4z&ovOIG<<&C2O>0o44>8&Dx?)7dQc6Z08!tBKnWPrsdglV#jnLrpjmMjw@*=DUW% z@mTWY;DbXYB75jnEQxjc>Pm7Udn!8?gB7Od`@^J4oJZ~*InXw4kBafmPs~0c6zOzA zNxQKkz1Km3K>CfVrUF*HtzpGA4Qh{K?(K4?)JV9zb%mD9{zV%30*~tXni(8}gw6*JNQss&a7@aG7yvydD&Sn@PYi?6Fb1V?! zoz9Mb=9$hj)hh16I=du*qUv_&pMA!!R@-THFH&1b2CY`NIQOku6}$|;>Yv#@w#kFR zYq$Ty4*sxFR;$vHeYu&$3H=X!?^l(72G5@qF&=u+ z`-m~Px+BTsP+};h`dQ$Yk6=>w<)rtAwCY#)9(q0RJ&NH;tCs3#)JYs!ccMpjY&p^L z5F)!#^A1=jd)SfVc4f2E+oFbd9@W?pZC>Tzq>MhH$0|{3VCep_#-7pH`__&fJw_)q z1>BrF!68Q)_OTtj_QVgeajWy3Eg8tYl7@_&8l@TA3K))9%WGi7I>i}iC!`ubhJTK$ z4y&k>>}xqXCZ$Vm%MR}omrx}5$0hU==gyuzW{*2*8g7ouOm+`^D{X?y{&i}@iC)6( zLs7g8Tggm=WH3BRs{@xkE)gw44J}{AWXaHPTm{!}!nf~d;=!rt;%_6^#Wjy~U7wNG zRFH57h->W8j>bObBsHmpstdr?eE%x(;2j_N-l%)u4o7<18>k7`3Ixum$A#zDQ{L-{#Yf%l=BWE?U9?QsDv@Csm@7nTp`xCkj1XJw zBs@ZXy4)24DOYMX?}jRrT>J7{yi$XF3p6fG1{>8acyC0z3fWU`>nGUt=n%q3-Fwi5 zVbqG+Z!NuxexZ^n-`#aE4o(sM-Lqn0=y(wOYUKoe!ZJ|Yqm z0i(CL%QgaSlDD{1LD|mU(yfz4$c1{V7qm3E#_kyuduexrN3w6Cdk;zC!KA|yJ?z@s zWQbN@`nHwNecS3`Ro--^Gfs`-uxS8@N$43Am_h)#RDRN-tUdx1qr?CTde4qTLv$k> z5ji{Z0l=K;H09?eqpSnKLyiCtjjWhwJR!;&*DjpU1>#6EM*(0{_Bv9YgOJEQqO3G- z@uj?~E`?~z%W@$|fMNEyw7vIQF9$QsA@;Mp%K8em*xilpo`HrO5_BtxvQ2_$Z z)1F(ij=>Z2+2t|A(qbXo+v8wVwI}8Cl1bFqTKvszzeE^4h_5&wYx)RXzNvT48)XR4F+Dwx#k9k52chDcTvM@MgqGK z^>$I>?sfpE#b>5#{&R)GmL5lv1i<*jaG(+f?RMJL;}1C@Oh8Fh7PU-Tn1-uFgoalf zYXlHO8XxQIs50GC8Z}UNpc%K~mO`h81a|c*DeoFRls{i*)ztmwrC>Kr^%spOx|4A) zJ4w1l`aIK*m<^z^a>M2D0LEPyYvvA?)nA!E%`%BorRx!@f5~{b|LRn+CfmOT!tJMk zsgC@6RPc@plxKAwqci}v222)Es|He5{hI>R_rJxbSpX1^i-)WJ-6^+l+rK}h3%C8m zm%rm3@8QC2Uv?UGxxV}~3b(!EbbsNtuQ;s>x1BnT$(}wvq;T6;;+YTaes~C=@H)`X)yHFsL{^x-O z>&bS13i81NI8|l^-a7sDh ztC`A9Y{UuaLBvm76qiIYTbLPA3V6qet?mVTS|(e04q53l9&Vyz!zO!eiL^7r!?Pf zPg~qGc?5>8B-Hd+sjY4oxTTO!m;I&5DA`7{0@BH`W{{CGQ{t402dGnSmS@~XeewL^ zpwo%4mh}9c-Qa$Z#5|d9v*sIA;CdVQ&QZ4_FvF-h7pL6TgdXk$?0qhG(_sKr9OVBo(h_A8!t$m_^cwwt3J4yllVyIm5Vfswr}@#7?ayXgjPI`jgU6z*xS{- zVIzX*xi+nE9GGLAMz2VUQQMte(GR$UJSfAstNBXaZ2P1PsJIJnimwj7xTnb}+{xR& zSusGoe$$yf$l)0XX+F5%&a~jtq>uFkG$xXCB|}DFH46|kgMtvL!EvxqBfkzrn?^WS z8G=>~Tv`QHWgA=QJXgo5iy09?cr(Uq=NRsE-a=D>STja_*JB_ zleUMHIjj`6T#t2zke9p1>B$k^$$)<|<(AwY&|kM{!nIz!Rcog+yX|y$d*(H6f{P}R z=8n9y;EG>iaCF*3Mh^ofv*lmjzP6L0I&#q33TR6tVL*H!g_oLrxIJ+N!0XgKV3xyef4U+JXyT7)bc~j)C1EJY>wx5na&+)UY!|}lWZ2Kh z!>b6eG32kQBJ4jaD=>R@RtODkbjMv{)4jDGL?TKLJivZC!#v{YM_hA*W@bu_Te1x< z2@gqD1YD|D#ZIx_<#r&tSyIzTdA!so^z34fIlIYbVM${#qfvL->{ZUQ)bQ}nGh4Ef znMhiW)QZkes4Oz?A=b@f1m~BZzZ7vs2!PC07 zN3J$h{e$lmEyF+fLG_{2u0HqS)4I&f5RF8A&1qL-`^agnvHkeFKlq_{vc~qctg(F^ zYiwUXps{__Xl&oWBmG84V_SlRL4?yc4QOnM`RSVnG`4SXG&Y~xd~8r-n<&%R9yc1> z$5>-KgYj05tg&TL2o3GyRzv%l@BW@!Kl)MD&;*q|gDEaR>>5Kog-Ph&Y{&O}F4jPT zRc}~rYof?QSN~?A`gsG81rm39fapf(J8FWGUMJ}3nM4$-zN!cC0A?g*GnVswaP%N) z_F@IIjLkX>#TE5A0KTm*;KRVRnu>HiUC5)RDd{Jpo+o7%05^Z|pexp#QIjCwA?&+R ztCO+Gm_-Kq#aB)30f*9ohLLA^5%K99Z=sGZL^>u( zGS<{-XtU+dNFkUSjwUMvHrUFa47O4gR$%IqhLmdE7WHR=<6gGRx!KN34OpxI;t}So z7xZXEjG#_@9q1f&SzMbhD(f5Kl-|Rk7U`~RPb6w5QTiR4k)LW{@|xH8lo^kGGSu;w zAOIaUJ$48jJm{n#4BLZb{;QB0>vHjr_9QQ&HYB_bSTTi*EfFc9_6sTIuB#LTlG6bVs}+zP4;3rK$a`v!^*0)6 zQ-Q~6WXSj9pi^huK_8LL-~h?i_JmGbei-GOAImq9e{Fo zDA&oPDMbN|wu~uVCfH73V&UMj1Y(1U*^&1!(zBU+xpIWO!6Ce+Jc6LR9c`Vj(aW0| zEe5G8;lveu^vy@9F)uPshG-9aCp?%l6ygq1Y!On&S^8#$dnDyrTXxGih zrg_1ly1sIg#AY~+-n=}tS`o!b3;+{lQb%U>muZ3a)Ip*Ymjnu7S+h5gq|Ct=!6F!w zNAfurUmz!}lEXw*A1NI!jWm1p)3{=stF9y@De0KR^f%-FGySKCAUg*S+Atjx76UVM z2+hI7sR&At)ZsD0R%SnxKgL6>905u8aw#J1PHDo$tA`?$4Y=D~wu-pm63I!OBf{xv z;wIFLgr{2w^8tsx%tLvVsHc~K8t~ea(LEBDy{-n(F{G1s$;bi9JU5%MW68>^Y2VtA zbO6)&yX4S)fYin{k{{?GK65rK*>=e8M^h9kvlXGlE0G!RIa}ry76YS$M+S%QSj&j3 ztZ}e9Ml5fdgySND9AV*)+IxF^JdzXay%?iXj4aV=bA+?(tSOLNSlSXV{?M0kE3M*^mfQ)Zb*tQ7tfmW z?D(wtx!-SKhYyk9yri@^AY1p~`?~g+uV{*klaa02*Lss=IcQq3V|w!7^Zrx*1mMmP z5JkL1w3yHWfjx1!7{(MfsCKnK9GWw{qjMF(SguR(<8jQ&H;*``kV?Lx1`Go1r#@nY_`Bb)@|Bu-15k2)6qmH|sHaxh;m~ zx}4@Qd}vFSm^lGo7OR4ftfJQ*@nmiEQS;`yxH^eNYsvK2a_h&}09`HYwB*BCfP%h( zw4#lFXFy&)yEc0VoR^(Asr+USB&diC;2S-=)7$wqMB7~a=|PY!pq=K1c41Dt%UssU z3b)W3^2}5iB@xV82gf4Qp$t8?^@{W@^-C6Rk#K2~vGC)9#2lDFGE5hXmRkstjH&xvp9_lGmkztqR_t@WN|Z7 zpD0`=e$qTalc;XV6P3apV%6Ls{=~aJ_>rgh4zb2}h% zp*-sA;=mo^CFc(D32yVr!8^pK%I**^n>)m(`3~_@KZLSLcX?utGi)rW9FI+QG zUJEM?e`+Dc4ZObs{Km#UiXu-lBj}n<2%&H;I}#3d$nuK=ftG|9EllMqpD*X!aHGQY z`(Sq4p+TMjq;p3%>10bAvG`>cC9$Ry9EsL5JDg0+HSauE`NH~i4&GRTOaT&w2 zU_H8Q#ZYsedj%*Gn5WYVRpd^_cPHbFFb{m;mp!g=Bqc=|tBa3!dvoK|mCF37+h`SG zx!C*WYQB}W*=7<2#0yOnQX9c=z*O$P0hxW`d~Nor3$+UuYnLwBu;s$Ha<9dqx8A_( zPd!zey;PgMc&YZp+5C0)TPX?u0yI5+U=3;KV(t7>wI?psF63j#zv3>7ERzn_O80 zBWLVgFgw-)F&}52dh&wSx8Q4vceKMQ%5M@qL{ESvafuV%>);v_Pr3B&yIMp>TT=rb z$_1$ntY*J7Q@)*M{%u6l)P|HumlE51yp)&&y9|XBoT67=Q!dI$ZzUBp-ivA;--c*! z9$$(S!f%~8W^)D26zWP4+`;!HjM;Q89_glwebF zaQH6m9EDwjqn7*2N8xHJp4L=EEq036M|rUGW!@o*I%M!29N+GOAAFwgeFI z9fBktl5nb0UufqCiB$_g<(U`c7L<&Q}KF?E3i-6d38#IhQ)=HR0>-z!QjcbM(T zpkl$&<900iCe|N;ol6V)f>Dac06>!OO+7gOL(mk#iUwJ}Cq}2*7o~T?OkqMt5XP!VH{7mlL1EdZ^7%1v;xl_$!Qe z{I!jBj}H<&eX-D&W;&M83gztCh- znv@$diD-jled3YGm6K#ZmYaAPZ=&z`n5g(tH!5?yGAxGjh3vKUGyWXMdVwQxJLd9N z{tR`TKjb&^YM-FSaKMIaVAkV+Ha#P59+}cgEP~uE|RfGB*;%WGoDYRGjZkVvP{8`C*7y{-yQkaJhu>E?}N3T zxbjr($=ZcOfZbH*{<*ShPbxWk_F`@JT-m#8vqv5taaT^N0XNUn_BjclvQP(otzSN@ zs#UWUj%fUPO6O!dyG!d)((s6v2Z+!&#T)gxh5C9KJq*ccW?+-jiGAi~ef^~}5Kdob zPnW&CvRYqXUtKSKJr0jXP-30g^H0JIIE*OUNw8Bsp4Z4Y3rTS-W$wY*jvUh=7^VK) zO5?@BB`9t0+@bB=+_I2e}j(L1yVQ$ zM^P>&N{*MI#c8lYvtzz6`()|%J!^X(G2!LLb-%Ir*}Ctm=HAie-=!zYuMrsRrl3aX z*l=-L7rhKR)|6ClRt5+BFgZ_76tvyoioRT8t)j3G9CO(I+Q;9<1oWJkm#h;tZR~$u zScZpHqHX703~%4qWL|SOXp+Lk=5fHT)UI*Q+0-s$)RHp3m9QH^6n-R$WnJT=5a%Qa z=&|#Ilyt{P474=`|Bs}gD_x<~_zw9Vga3lf!X7&Igy>b_jL_Woprg#RA!zG{ntL7- z7~7Y-?&UUGDEV(X6-pL94~uZ8!*Io08X6#Dk5uno3_5s8nszESMKv%fQgXkENpjXw z5IY(Cusf--rl_hkcFdgAWwt<6;8>ACUJgF!u}!NR)lSNT2W*SwNlY3TMx17xk1xp= z#{IFQ4!*ltXqSvjGMjU+z@YEV2XL{IGNMb%8*=MiBCZo1P$#z)o_4%Nnz^jEs6S)h zzn`|FnpfI)#->BG6$g$ZM|W?a)n~}cnZeUDU=uI8$Jve-3f&Z2cec05_CQIOu!hI% zChY&ArZJ_e7;|RbH3N^aw|sE7=MUIuOT8Ptk|CHIa&gMqkoDX~Gh`Yvh+$*pd~T#v zCN};W0)-zbG&@C<5sNAV+wI}IR*cP}OD+kXx0)V8q{8eA6X@@mOQmqBY+Qqpb`C>a za43uQIO!;fT-;t30b}npI5WO&VAjy4NCnP?7U5g*3Ni_Y5es0r?e(pY@xSS-AdHuu zLbEZvyA zV0?Hk6O#3QH=rK5LK=IoXm>Pd!E&O?X)TW*dj5^}X2}t|gG7l3?CSShLB<*C`X0pX zW%yB=cQt$Vd~NoLCu*0Ts6BbMv^UT62GN)$!5&R;h2aP%BPM>NKoKyR35prmHZm%4 z-k1YYGHL_)nul5;7FE9NVX37ZwYjuc%d7#PmU8K0?+vNNJkQ2lpBPjHfA`?QR-~j# z0}o!>VWQJ#I`2NOP>3q<+6D`npjh{UOB^;F~H(^8z(W z49cfRwOU%n$__q1>7;@Z_C0tndG@{CI&_(s-JImWLLZ`eMf|c+^#sY3aIW~>!E0( z?**OEP*9%Xx$1JRfTuwu$b51`W(Kc%lvNY~`CA1q<(Z`K#9$5o< zV`Hhb9BrQ;`)HSgZr;-%kagNqLm8IG_^i{J^G|;xiz{W#H&*9Lk#NhBL2D(15xS50 zQakD%@`isR{k$cEb8_-LzvQ2Rr9XFe_QKiO*|TRY4;+ziI0Z|^7OnW`U7jyXv>ITi zBacKy+qB>F297?M*+(&$uG$})DzlfKJmOG}Jdo&KC$@;}W2{d>ij3D~JKEu6shl<$ z$L^Hons>+JCnq`7^Nu{qm9qNT!qj`Yj^O!67H)&RGzw&VyGppX(-d*AzfGuebZ%M> z;-q{FYQOMFFx2v`;XkqXI9vMK+mLS>Yu83w1ACv&I@_~;+_`W$k1zKFze)z+s2VGW ztW#-uav8_rY$rgbxuP5%Fh|_b`{97^b_c$NV>tSX%;74zygE}DhXSua{dtZ==KR1Z=xsO}fFa0;TY+KS+l8)*j{IIkdk)-`iZ0A~vUfk0F;BsLZ)`02Q-}xjyD2@o7fo9r&p-vOgE!&F(-+a4aw}*Rtqu?|Ii%gBlN92^ z%!T{5AX9CNU(as_3`Zc>{EVeI4b&=tu6g_$u50@pTs7Y!Jo(R>(b+2864*diB$A7j zLGpKk>vd*N&0lQB6~Xr|1Y7FHm#vSjq9YoViuVLbD$gXyOP*Zz8>@5vRHF-E*L2&T zr9dRZ#lNfv0zRlBUjnzmV(6K;GY*6>nO}X= zbnAE&Te9I&Qs*M<`P#r0Y+O@F1*FzUVTlHQ1{@_PObK`D%yy}J0HQow@pD)_>%(t=`sy9;txArD*2Z(M6!6`x@`f&E8xsZbe)r2cN6GUWy)u?q{Q-^&o{cy zuG+8IjZ*B93&}86gVS{uBP2(GrmYhfg8j3wjQ^RoztI8r)7%QgDmQPTGxd6)ATd8`O-NQey(K zo>hy?N1r%6sFxZ1g2+kKOswqC0fSyHbaYXkDJ=ssf47I-&w(=1V*vb`c?5{Gdy>+g z4-6UgIfqX>z?vlBfu zQ$sps{y>u++2K~|3t_mh#;#P8)#03$BGOEa;Q&p})|{Onj;l#JT~kv%LiT2_Js?gc z-BXKB4{!jI25H-*f8<;%;;tkXEr6G{6(qaFK2a~zw_xC_Zsg_bZGwB-{F;-0n)z%K z`BTlHP1~gzB)l5a5~(EeK4GX*&hD~d&j{DcOfsrO?0Nl}gK`8L7=e31QwIXlD7O-+ zG#Z%tB^GO4FK8#v2bOH>qzgcnsLi!D%n6eDFT|?bqe0(Dks26I&UGLfazLHC(bjYy zI0>?nIqTQJv36|~qO{9ZYn)gw|6^jlRQ$pikz8kE9Rq(aNOUakvj*X#4@-d|R3tE$ z#yX{o31vWqQwTWInfiJReyxDNtA}hLT1?m;6T#g-QP*=bU>&e#&YJGKFVv8?gZUj& zk=B=3ZGW#@p>HUxhHp$ z{4k=kb#9{R66E8`wOo^|H*kkq;B{Rpr$6j@NLXGLx8j6r=u~oMv*4yql%BzG*D=-- zV{QY`^(Js1N4PDs3b8=g<3V{Et`kSquD=!R8c=o-)h0mDZYI=|a;|S<+=&}db7-P{ za0h(iFtC!KnsEB=RR)z{5Tv@+1@8Oe_anYb>M{MGvZNkSVfe|raL3$%}_ff3R zR#4zFTBPhwqay&=FcN)ViVN9M-TSSG&M|ug*RJZ9 zs$n}*^93BD1%pHMlkfPtcg!*lQJry!t}zbL^#L5B8wQ7Hk%#`=FdU-i%W;U725^X$ l9UP(+ZgX`IhiI(~hv+i~hiIK~h#L4<`ww8@F`bAV1OS-{wxs|7 diff --git a/cache/PagesGenerator-Readers b/cache/PagesGenerator-Readers index 2efb2cdd75d667a91301d18cfef04931c1ea7c1c..5adb2c96b8e07c71514dae9a0cf12146b1cdd8e5 100644 GIT binary patch literal 3925 zcmV-b532AViwFo6is)4W|4?CPWphVmZe?;|bZ>GkQe|OeWpZ->omp*j+DNwku3yo2 zZ)L}xasY|<*-Um7kTJ6uC?rU{J6n_xZBQa4jastfo6Y|n|BL&a?iL6qJGbh7u#mc2 zr_alCo^x8h*rp9*RTtSq{qga!9wc$jvrti7pY^4Fr#X!vi^x4&?9&sj{^>)(leW+UXZa*3K9Au=WL7De=D@9VZ=mf^)AdI zmwikMo-zM{2Y3=J$+lta=e)?U&u;~10fZ)Dt~NO?6Hg-l{eYWo>E+L9gk^pnCb3`_ z@KWk$c^DK?_Ei&Qp>F&mNSQvH#YG(~6iAP~&ZeUoHy#$ZfQ!=ZFV+mc${plDN4i zrxY4$?kC)R|jo0jwx)ZB$HwlO_jJa0qj1B1G)pJxi0~f&Y)z5z0oSByHp!t` zlEL8oG08p&>3e7rW-ln2UF>)aU1%?C?0=%@DY-BSnp^T!P0OS(Jqp+v?D2HY%9Y?o zA|YDl;HI2!DGVo0-XJW<{lkWDx0owE0Cgq#lHa7d3De*g2Vc?v|D0>Q@RD=`L7|r0 zZLuC?p0nhhU2KY6d9!rur6yrbWD=x@MC7nLJTfgURy=z$1qwaAFlFG9FO%#^dy2~X zZm+bK%MYk%OnQLb7n&=9?8@fKLa?Nkbmqr9R3%V(wAJjm5_CZq z$${q}U@B_~1KwX`l(Yx%luBjX-_mBvX}Q|3q(E;^#26D`Gp@`+LO?I@AI!REPf4K- zq6QBTIdIVO0jPS?n+Q%3r@*rlwHc{pTx`>(vD$*(jkIM1XfBasaSf=BgyH)4e26JB z!${l4h5N&=pBvp@KX14A?fjbIiXU96e?J&$$H>#Ju}FJ{SOpNULokiBZv;V-KCLsp zGjKr|k#I$jCmFirhH-J)J&PVQ>U1+<434jxrV*^yn<9)5wDsCZHXng^j9bPuPt7Lw zGh1Yk**4rC)-hNGs+b*PHHV-Cw_QWHKZvN<(Rj~TrFy(C$3bfVgTS2CATgF{tj441 zY~if0#}miJIQ$i*793Xl?;r8lGJLU`+aqT^TMV7W`rRD{+s0~xhKaVvQwJV+KlX0c z*Gq2+NkiL{lDfvYVPbB8=h19&w|4E7v$kmpij_XAe<5wZ*3oD2&$WGih%hg;os6e{ zccE$%s$Q(zq{ssPUwDMhR1O5{0ea?rv8jQ0>yK2rczuKN{aVPiSZZOPWJ`BVgsVwM zl6kQ~1lTBqTbpeqN=d3I5jAiprr=X0{j~^pF$TIMp+^^Jx3U-BcrdAYrG=9cnSwjA zdgxr+%Zaz1*wYb)pvgTj&}vGD3~rqDU^exfsfV$ac9e88tv`9H1r60{OS$Rw7tsCg ztM*fiTt8gc*Iwm~F0h{Y_j&nBxwcpCFt@!MTG*#Zw;Or`fZwE8mwIFAcxrp&*%ULD zF$Q`uIU6j!@x)!bj^~Z1BZz4?2}tc0W<7hf9!zG-;o9|_InA|=F-`n3p8jI5oe!|r zg+Q9=$jyP)mFr=bL8(={Cnx&GDm*B)It{6oeYdt3gPSqTJlfg;6mYdF@sRFYE+!ZT zhQH^u4r%00mZR}CAURtu1`Y<{=RC|KK&8_;DWwF#qhC^x{a4)gs(`+BoZ;H`X1ADt z#`m0WMV+p-SEBZrHtUktW=n6r^z>d(yK5rg4HXXZF@y}q3uoZ1J?C~lQR&k~BCcdo z;GWRil`g)U&qfQ*wJvEsA6~CV&eT~zuLWkhdM|B}^I+>=o()#8F$X_i z{B{0@*jUzycCh`@`ue)OwW_z5H84=GQ%R=TVt!*2etKjUS?f&31A7YC*)9!B##0PC zSHBqSA9Ieh2T7lO)9`T!#h5g537{ufzB1@dj}$G=|w^WR_pg(-^KaO@(ica&3(yPi$qkm(Y0ZSAO2;@sLF){uS+ zTlyVJx&|>J^tzcXK!trkQL@xC?t2x<8j|BP@qMi{Oc?xqeLEYDugAa|qH!}DQayqn z4yy2(jcSljATb*<&}IXXR{Y@IIEd(Z(wdEyT7~EeI<^Ni){)B>h}T5&NHtx|Mz_ot zw0N(PE`FXIRL+CgD*!fgZXQB%x(ND^%YkNlslhIu9%$Quf@W!gkA0NelWK z07K{9aztgmp-oyiD`(+4$Hl77&Jz8d4P~4}fQeUQ>0?yq zqX;^5|^*>w}+tlFn)Mq|`oL+Z5iZ^WJei zv}+4obw#8&x6NZ0fmZCqxF(ACPL@cj46b)KA>g8FBLX~n;Aw(04vn-ZsNd(4cQ%oa z**@}>PBlenG}BQ{Db;hC<-^&nJ*Ff>J>My4eOuy8l=)+gGdrsG2)Z?o{b9)E0HWa+ zI5}kU3CjB!&Y=%#QaTmqN7-&J2!bBz41O)QQgs#_S zN4B2c_}2NyZ0eBJDB&xo$Pm4{{CGe^=CSWm>4aka-KNXzHp{N7!l_-wmMGe~dJ_L1 zn;H{k{M#aIcDqNWdl_M>D zlD3xPuuk{wQ-4F;51kPe$>%*47nJbb*^vmOOP{)NRGO5?!Q*V-pqjS$rJZ7Jolsm^>eB0$(pmmkO1J{-3G#WD{!Ns*e2zsgYQ?;CB=-IVI~W!1Ka z5-gTJfLo?iaA3=*>eIJ%?5p1|sMmCz38>Q<(u$T^(Ux7q1ntaPXQbj+*;rU0T-6Ln z4J%Ehg+i{Yfoz2>I*Pyi{~itZOWsldX*SNAB0@*g)GY<|`1B0=c(0pNtJ$m`8XUx4 zHq5TKSPtkb0WE21Rmx?0tM-dLp)msDEh2dHo%CpyCY5+QQKQv7N8+jXvZw(#gjB<= zR^!-jmc64ztpNPovPvgXm{sp;QO&P}S$3|cIJa8WTC0y7R;#U*)KERCkGj8;$4Z^P zm6`5;NMUuBzZ;>?_uMr#0<(FUdvvS^u4HmntDe@qZC1+Ospq!Z-yEV(dbA0Str8HG z@zx7aoPEP-6GU%^XUBd^o%<~`3i89uK8(VgUqoTd!Oi05Yd;eFitP$6#F`TBXD=%- z5GO(83&DkcPM>!4e+RJ^`BTJyJ|uDS$qz4SgP!591lp(kiJtnDL^?rqBs$g8UsB|0 zL4ZfgaZG4SwZ93VDAhmZz3FDhR3BcOd; zMRier@3R1l1+FTh=tFiyOXc~`qAp}dlv8%a7TOT81F`IgRj{-A9A$N>6wtR`x~Dkm jFC7*-kd>|fT}F?{GVI!=FI^Uz3Q_xCc*_7d03ZMW=j^Hl literal 3350 zcmV+x4e9b9iwFp4sB=^T|4?CPWphVmZe?;|bZ>GkQe|OeWpZ->jaYYJ8|4)@BqX4a zMZ$)13AnLSTPi69N=@J*o#n$?y_1r2KvmDuXWb>IJH78tR$QZ&v;{ledr#=1rF(B$ zy7!`+4!ZZCrF*>Z-Dx-k(tl*>8*lx7Z+yOCRR@NQONNGq5|-CsiT0tYImZ%Juf`Iy zj#nS|y%w*E1vg-BkZ789<|oWquNA}_H8>$H-?@3>-g|Do#khOb(9nc+@$Mhu(E2I=mZu?`>BsbkEi%%q)p>25MAd>s$Qen3K+*r zO_K+9wdI)HSqL}1CgWxxRQU^jz#4c6)yL}0#dQZy`AudX6#I0%lv539*7RAedtMqz z=Sqo;?Y0h$NjvxGsWB<9OU9TKkH<&jF;y}h-wTavd%Q2HYn5b~yw)~38j7U7p^7;eP*?JiG*Xj$b#68q1nF!m5T;nB@9qfDF6K(8e*ukl5tgcO zVh+u6y>?tGT8L{KL5c~##-uiLoH42Hi9@KvuUekxNQ9}-M$4A%3!co)i2(Iu&D;at zLjM>sR0>!Xr3RMQs$0i^yUp!@MMvAh6jiEuqz=g!-U|EyQLcv>u|OzGYHURK9@xm4 zQE^T9%mfq-&kxWbjN>F{Zq@4QkIi^3scO0*s&lqb!vr7{L*J{~rh_yM1k{2`=%(eh zT_Gs2n8ae357yFh%?ucvTx~MP#yG@Vf$jJ)9qUaBH-ynKI3*cdd)J!vLzm+5 zA&A`w>oho(R8;Xy-Qx?ezAu0~ZEiL(4gFX$+K$17(ZjH@1DirCE3VmKu$jIW@Sq2$ zkvN|P!YLoNbYSaVvKM$JuEG$pMV@DSs4 z+`4x0`trzCg$a@AyW=~r8ol=VP8r6G^|+T!RTQJBg6w365IJ}#Gfoj!&J^-#O`V*9i;sk~(&WivB_rq3Jsfr! zXNz>;=9~b6oETqpOtZztR5U~{S%y@vMBuz)yJ#Da6~b?}=V~nnD~&QeL;+nC{&g1J7WPiwSwt+E z>*J{oOj?smkUk7kCgoVxilQ zMCrWaRwz^5$>h@_)`&Gcx(pRsOYc_;SfDUW@R((?`WiKNjXapsW*KJbEFB|OLDjhM z_=B%mwHVZh{)N;e24W_o05jH!7~s4z&zd-{1TaUD&=jm+0zm{phx(B)kE6aKVp!6_ zB3aGWtYiBYtAR~E_X_#}g6XL4A|iLNpQTaW=-`y0VO?et4-1(RCPS1jZW%n1TU4{k z{(Me>CLK~**r!>724R3mA~F&wB_kbW;7B=PfL_XGWu!?~HYynKiUIyL#Fi#$04FRLZ-?6P7t}XP=?1+EF)>%1X(0o z%@&SWd__07o^m^->L_NW+q+bhhm~TFtU+g)v~>?qlNEc&$`U*->~Iw7Q2*o0a0Ahv zQVI^6REzX{Qk66Cgs45?42x4VJdv84c%=CFN(sW%IL_=5$KXkHJlcR8m*6Inmc|jd zH495*dG~sq76)%H)8TL(jx52G$u31qZ}1dSExraGUJh?u9sY^qXbDdxPB3?#IY=Nvis(x1XI`z%QSw~gh6^;59@*-lgIREPVWASUqF-(Y@o(a2LKaE~X zdtn-3aUCB_rPooe&{>hcSWdG#ydE=~Y*jL9QqEP985zsXtu#z^+hrmA3vVEbiaIRp zdn2WN7f%B6He#KaFLZcQc$n(tHh8l!{6PF2EUxetdKQS93vXS5w~?IvjC-@T3vZ`3 z649Y);@fn9j_{5s8*v%lxdiVD6IRsJs)UII@22QPx6z2fyYHdm9a=W-+jSS-y9DoB zg7*_UL?0K;r(eiEV4RQZVssQE^X}_viD?x6Wg zQ}*KQr}T#UaPEVThcn8`89_9qPYjT)*Oa0$;giIml@px~pDM$r=~5Qca_T;l&1aB| z>jnZLEdDGZem}1h_#8zu?CW9w*WvRW_ySQq(%zN+MQc0FRADn&+2Fp^fiH*sQsiv+ z##ch!g9Fn*l7E#FIvN0@VYNS8z}JY3@c?H>_&T{29i=JbPUE8EP8s+{ZsIff8^nN2 zUQSg8tC<4d46A-7pOkU>_*NOdExP`ufdKXf_wV#y;NK0)NB2Qei6&KiN9pjrGTcR> z+oy@wl8*Cw5}#u5{WAQ3igZ%fX{LoA(obwEZXDl0@T0KXAN^vxd&Js7n(U>hN6<%~bHf&16HEDQ{ zG&}=;p|Ucg$l85U?OrQ<@P+fC4u37f-@-XAk}To~e>YAP8P4G!WKDN3uN9`S`@lc( zwX|i0mHo!@ujv}asrU4xk?G%M_>UmzhWlg={5PD7d*d|S;6o>1!49i}&=Q%?Pr&74 zJ^1;FVq /mnt/etc/fstab - -Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage: - - pacstrap /mnt syslinux btrfs-progs wireless_tools dhclient - -Maintenant, passons sur notre install toute fraîche d'Arch : - - arch-chroot /mnt bash - -configurons les bases : - - echo HOSTNAME > /etc/hostname - - ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime - - date MMJJhhmmAAAA - - hwclock --systohc - - vim /etc/locale.gen # Décommentez les lignes correspondant au français : fr_FR.UTF-8 et fr_FR.ISO-8859-1 - - echo 'LANG="fr_FR.UTF-8"' > /etc/locale.conf - - locale-gen - - mkinitcpio -p linux - -Enfin, vérifions que syslinux est correctement configuré : - - vim /boot/syslinux/syslinux.cfg # il devrait y avoir "append root=/dev/sda1" - -Si tout est correct, installons syslinux, et paramétrons un mot de passe -root : - - syslinux-install_update /dev/sda -mia - - passwd root - -Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur! - - exit - umount /mnt/home - umount /mnt - reboot - -Fini! - -Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen : - -- Installation de MATE, le gestionnaire de bureau (voir -[http://mate-desktop.org/][]) - -- Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage - -- Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci - -- Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...). - -Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici. - -Bon, reprenons. - -Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet. - -Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question : - - vim /etc/pacman.conf - -Ici, ajoutez les lignes suivantes : - - [mate] - Server = http://repo.mate-desktop.org/archlinux/$arch - -Installons maintenant les paquets : - - pacman -Syu mate mate-extras dbus dbus-core alsa networkmanager sudo - -Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois : - - useradd -g users -G wheel,audio,optical,lp,scanner,log,power,floppy,storage,games,video -m -s /bin/bash *votrenom* - passwd *votrenom* - su *votrenom* - -Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser : - - echo "exec ck-launch-session mate-session" > ~/.xinitrc - -Profitons en pour ajouter les démons système au lancement : - - vim /etc/rc.conf - -Ajoutez donc `dbus, alsa. hwclock` et `networkmanager` dans la section -DAEMONS (entre les parenthèses, après crond normalement) - - DAEMONS=(syslog-ng network crond dbus alsa hwclock networkmanager) - -Pour éviter un reboot, il est ici possible de faire un - - su - -Puis un - - /etc/rc.d/dbus start && /etc/rc.d/alsa start && /etc/rc.d/networkmanager start - -Sinon, il est possible de juste redémarrer. -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et : - - vim /etc/sudoers - -Décommentez la ligne qui commence par \# %wheel ALL=(ALL) -Sauvegardez le fichier, puis, après un `su *votrenom*`, tentez de faire -un sudo ls / -Normalement, vous devriez avoir un listing du dossier / -Bon, maintenant, pourquoi ne pas tenter de lancer MATE? -C'est simple comme bonjour : - - startx - -Et PAF! Voila un MATE desktop flambant neuf a configurer! -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (`sudo pacman -Syu slim`). -Configurons le: - - echo "exec dbus-launch mate-session" > ~/.xinitrc && vim /etc/slim.conf - -Éditez la ligne -"`sessions xfce4,icewm-session,wmaker,blackbox`" de facon a -ce qu'elle ressemble a "`sessions mate-session`" -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS. -Normalement, tout devrait fonctionner! -Ah oui, et pour installer thunderbird, firefox, chromium, etc... - - sudo pacman -Syu chromium thunderbird xchat firefox rhythmbox pidgin transmission-gtk vlc - -Voila! Et comme dirait [@Spartition][], c'est sale, mais qu'est-ce que c'est -bon! -A plus~ - - [@Spartition]: https://twitter.com/spartition - [http://mate-desktop.org/]: http://mate-desktop.org/ diff --git a/content/debuts-presentation-etc.md b/content/debuts-presentation-etc.md deleted file mode 100644 index adce6b8..0000000 --- a/content/debuts-presentation-etc.md +++ /dev/null @@ -1,36 +0,0 @@ -Title: Débuts, présentation, etc... -Date: 2012-08-18 20:27 -Author: Wxcafe -Category: Notes -Slug: debuts-presentation-etc - -Bonjour! - -Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/\#\#nolife et \#debian-fr) - -J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. - -Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général. - -Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines. - -Merci beaucoup de votre attention, et a bientôt! diff --git a/content/dns.md b/content/dns.md index c393af7..7486b10 100644 --- a/content/dns.md +++ b/content/dns.md @@ -102,6 +102,7 @@ serveur, et pas sur home., car elles sont sensiblement les mêmes. La différenc principale étant que l'un héberge en slave les masters de l'autre. Le fichier `named.conf.local` sur wxcafe.net contient donc + ::bash zone "wxcafe.net" { type master; file "/etc/bind/master/wxcafe.net"; diff --git a/content/docker-ebooks.md b/content/docker-ebooks.md new file mode 100644 index 0000000..2485102 --- /dev/null +++ b/content/docker-ebooks.md @@ -0,0 +1,89 @@ +Title: Docker et les ebooks sur Twitter +Date: 2015-02-28 14:11 +Author: Wxcafe +Category: Note +Slug: docker-et-les-ebooks-sur-twitter + +Vous avez peut être déjà entendu parler de [Docker](https://www.docker.com/). Si +ce n'est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n'est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les [Jails](https://www.freebsd.org/doc/en/books/handbook/jails.html), +mais n'est devenu possible sous linux que récemment grâce aux [cgroups](https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt), +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d'avoir une machine hôte sur laquelle s'exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l'hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu'avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu'à l'hôte, puisqu'il n'est pas vraiment séparé des +invités. + +Quoi qu'il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. "Mais pourquoi utiliser Docker, dans ce cas", vous +demandez-vous peut être, "puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?". Et bien +c'est très simple : Docker apporte la simplicité de déploiement d'applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le [Docker Hub](https://hub.docker.com) permet aussi de récupérer +rapidement et facilement un grand nombre d'images déjà configurées. + +Maintenant que nous avons expliqué rapidement ce qu'était Docker, voyons le +rapport avec les ebooks et Twitter. + +Les comptes dits "ebooks" (le nom vient a l'origine de [horse_ebooks](https://twitter.com/horse_ebooks), +voir [ici](https://en.wikipedia.org/wiki/Horse_ebooks) pourquoi) sont des bots +twitter utilisant des [Chaines de Markov](https://en.wikipedia.org/wiki/Markov_chain), +avec les tweets d'un utilisateur "source" comme corpus, pour produire des tweets +ressemblant a ceux de l'utilisateur source. Nous allons voir maintenant comment +en installer un. + +C'est, comme disent certaines personnes, "fun". + +Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +[celle-ci](https://github.com/mispy/twitter_ebooks), qui est une lib ruby créée +par [@m1sp](https://twitter.com/m1sp), qui gère pour nous a la fois l'API +twitter et la génération des messages. + +Cependant, cela n'explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d'isoler les bots, et les +containers dockers permettent de les déployer sur n'importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j'ai créé [un +repo github](https://github.com/wxcafe/ebooks_example) qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc. + +Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l'utilisateur source avec `ebooks archive ` (c'est du json) +, puis vous convertissez le json en fichier utilisable par le bot : `ebooks +consume `. Cela fait, démarrer le bot revient a lancer le container : +`docker run -d ` Pour plus d'informations, allez voir [la +documentation Docker](https://docs.docker.com/articles/basics/) + +Bien entendu, dans l'idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : + + 00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json >> /var/log/ebooks/update.log 2>&1 + 00 05 * * * cd /usr/local/ebooks/main/ && /usr/local/bin/ebooks consume corpus/username.json >> /var/log/ebooks/update.log 2>&1 + 00 10 * * * docker rm -f bots >/dev/null 2>&1 + 00 15 * * * docker rmi bots > /dev/null 2>&1 + 00 20 * * * cd /usr/local/ebooks/main/ && docker build --rm -t bots . >> /var/log/ebooks/build.log 2>&1 + 00 25 * * * docker run -d --name bots bots >> /var/log/ebooks/run.log 2>&1 + +Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s'executent en même temps. + +Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n'est qu'un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner [des +applications "usuelles" +dedans](https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html), +puisque l'overhead de Docker est minimal, et beaucoup d'autres applications +existent. diff --git a/content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md b/content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md deleted file mode 100644 index 6842759..0000000 --- a/content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md +++ /dev/null @@ -1,84 +0,0 @@ -Title: GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère -Date: 2012-08-22 20:33 -Author: Wxcafe -Category: Teaching -Slug: gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere - -GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique. - -GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX. - -De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une? - -Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer [Debian][], qui est l'une -des distributions les plus importantes, ou encore [Ubuntu][], qui est -l'une des plus connues et des plus simples a utiliser. - -Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : [Unity][], la -nouvelle interface d'Ubuntu; [GNOME][] , une interface qui vise a la -simplicité; ou encore [KDE][], une interface utilisateur ressemblant a -Windows 7. - -Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes. - -Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable. - -N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :) - -A bientôt! - - [Debian]: http://debian.org - [Ubuntu]: http://ubuntu.com - [Unity]: unity.ubuntu.com - [GNOME]: gnome.org - [KDE]: http://kde.org/ diff --git a/content/hori-vs-pdp.md b/content/hori-vs-pdp.md new file mode 100644 index 0000000..85ceb17 --- /dev/null +++ b/content/hori-vs-pdp.md @@ -0,0 +1,126 @@ +Title: Manettes : Hori vs. PDP +Date: 2015-04-19 21:59 +Author: Wxcafe +Category: Vidya Games +Slug: hori-vs-pdp + +Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d'abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de "choses" +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d'autres. Vous aurez aussi remarqué que le +Gamepad n'est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube. + + +Cela étant, si comme moi vous avez, euh, "ouvert" le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter [l'adaptateur GC pour Wii +U](http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI) +a votre console. + +Heureusement pour vous, Nintendo a pensé a une solution (et comme d'habitude +avec Nintendo, c'est une solution a moitié satisfaisante...) : les classic +controller, mais en forme de manettes Gamecube. + +Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d'argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes. + +Nous allons ici voir deux modèles, un de chacune des boites en question +: [PDP](http://www.pdp.com/) et [Hori](http://stores.horiusa.com/). + +__*Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus*__ + +Commençons par le modèle de chez Hori : + +[![Hori_face](//pub.wxcafe.net/img/Hori_face_ld.jpg)](//pub.wxcafe.net/img/Hori_face_fd.jpg) + +Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur. + +[![Hori_dos](//pub.wxcafe.net/img/Hori_dos_ld.jpg)](//pub.wxcafe.net/img/Hori_dos_fd.jpg) + +Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c'est logique puisque c'est comme ça que les +classic controller sont faits, mais c'est décevant tout de même + +[![Hori_CM](//pub.wxcafe.net/img/Hori_CM_ld.jpg)](//pub.wxcafe.net/img/Hori_CM_fd.jpg) + +On peut voir ici que la qualité de l'assemblage n'est pas extraordinaire, et on +remarque une soudure mal faite a l'emplacement du stick gauche. + +[![Hori_Cstick](//pub.wxcafe.net/img/Hori_Cstick_ld.jpg)](//pub.wxcafe.net/img/Hori_Cstick_fd.jpg) + +Le stick c n'est pas fixé au reste de la manette. +J'ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n'avaient pas l'air de très bonne qualité, et j'ai préféré abandonner +l'idée plutôt que de casser la manette. + +[![Hori_coque](//pub.wxcafe.net/img/Hori_coque_ld.jpg)](//pub.wxcafe.net/img/Hori_coque_fd.jpg) + +On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d'une Wiimote entière la dedans... + +


+ +Passons maintenant a la manette PDP. + +[![PDP_face](//pub.wxcafe.net/img/PDP_face_ld.jpg)](//pub.wxcafe.net/img/PDP_face_fd.jpg) + +Au premier coup d'œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c'est un problème de goût). + +[![PDP_dos](//pub.wxcafe.net/img/PDP_dos_ld.jpg)](//pub.wxcafe.net/img/PDP_dos_fd.jpg) + +Les gâchettes sont des vraies gâchettes! C'est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après. + +[![PDP_CM](//pub.wxcafe.net/img/PDP_CM_ld.jpg)](//pub.wxcafe.net/img/PDP_CM_fd.jpg) + +Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon péremptoire perpendiculaire... + +[![PDP_CF](//pub.wxcafe.net/img/PDP_CF_ld.jpg)](//pub.wxcafe.net/img/PDP_CF_fd.jpg) + +Vous l'avez deviné, ces deux "cartes filles" servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de "vraies" gâchettes en cela +qu'elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques. + +Quelques photos des gâchettes en question : + +[![PDP_G_1](//pub.wxcafe.net/img/PDP_G1_ld.jpg)](//pub.wxcafe.net/img/PDP_G1_fd.jpg) + + +[![PDP_G_2](//pub.wxcafe.net/img/PDP_G2_ld.jpg)](//pub.wxcafe.net/img/PDP_G2_fd.jpg) + + +[![PDP_G_3](//pub.wxcafe.net/img/PDP_G3_ld.jpg)](//pub.wxcafe.net/img/PDP_G3_fd.jpg) + + +[![PDP_G_4](//pub.wxcafe.net/img/PDP_G4_ld.jpg)](//pub.wxcafe.net/img/PDP_G4_fd.jpg) + + +--- + +Vous l'aurez compris, je préfère la version PDP de ces "Fight Pad", la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est +__totalement__ identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement. + diff --git a/content/introduction-a-bash-en-tant-que-language-de-programmation.md b/content/introduction-a-bash-en-tant-que-language-de-programmation.md deleted file mode 100644 index 17981af..0000000 --- a/content/introduction-a-bash-en-tant-que-language-de-programmation.md +++ /dev/null @@ -1,158 +0,0 @@ -Title: Introduction a bash en tant que language de programmation. -Date: 2012-09-08 18:15 -Author: Wxcafe -Category: Programmation -Slug: introduction-a-bash-en-tant-que-language-de-programmation - -L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...). - -Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. - -Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.) - -Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. - -De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés: - - #!/bin/bash - # La ligne du dessus est très importante, c'est elle qui dit a bash quel doit être - # l'interpreteur des commandes écrites dans ce script. Ici, on dit a bash d'interpréter - # lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire - # executer du python, par exemple, en mettant #!/usr/bin/python a la place. - echo "this is a test of bash as a simple script manager" # echo est une commande d'affichage de message. - echo "what's your name, user?" - read your_name # la commande read permet de demander a l'utilisateur de donner une - # information, stockée dans la variable en paramètre. - echo $your_name "is your name" # echo permet aussi d'afficher la valeur de variables. - # Ici, on renvoie la variable remplie précédemment, suivie d'un message. - exit # cet appel a exit n'est pas obligatoire, mais donne un aspect plus - # propre au code. Il ne quittera pas la session de terminal, cependant. - -Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle: - - #!/bin/bash - echo "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?" - read host_name - if [ $host_name == $HOSTNAME ] ## voici la syntaxe du if. Attention a bien penser a mettre les espaces avant la première variable, et après la seconde. La variable $HOSTNAME ici utilisée est une variable présente par défaut sur le système. - then echo "you told the truth!" - fi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash. - if [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. - then echo "you lied!" - fi - exit - -Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main. - -Passons maintenant au while: - - #!/bin/bash - echo "what is your name?" - read name - while [ 1 < 10 ] ## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash. - do echo "i love" $name - done - exit - -Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash). - -Le troisième opérateur de bash est case. Voyons: - - #!/bin/bash - echo "please enter a number between one and five" - read number - case $number in - 1) - echo "the choosen number was one" - ;; - 2) - echo "the choosen number was two" - ;; - 3) - echo "the choosen number was three" - ;; - 4) - echo "the choosen number was four" - ;; - 5) - echo "the choosen number was five" - ;; - *) - echo "this number is not correct" - ;; - esac - exit - -case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code. -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le \*) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée. - -Quelques notions manquent ici: -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici. -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number. -être utilisées dans un programme bash. -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \\ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne. - -Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel. -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête. - -J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3) diff --git a/content/la-cryptographie-avec-pgp-et-principalement-gnupg.md b/content/la-cryptographie-avec-pgp-et-principalement-gnupg.md deleted file mode 100644 index d93b36a..0000000 --- a/content/la-cryptographie-avec-pgp-et-principalement-gnupg.md +++ /dev/null @@ -1,177 +0,0 @@ -Title: La cryptographie avec PGP et principalement GnuPG -Date: 2012-11-19 00:36 -Author: Wxcafe -Category: Tutoriel -Slug: la-cryptographie-avec-pgp-et-principalement-gnupg - -PGP (pour [pretty good privacy][]) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir [ici][]) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de *Web of Trust*. - -Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser. -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées. - -Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -[quitter Gmail][] aussi, par exemple). - -Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante) - -L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG ([GNU Privacy Guard][]) , qui comme son nom l'indique fait -partie du projet GNU, et qui (`` de façon surprenante pour un -programme GNU``) est extrêmement efficace et claire. - -Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs). - -Tout d'abord, générons une clé GPG : - - gpg --gen-key - -GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. - -Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande `makepasswd`, qui génère automatiquement un mot de -passe) - -GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) - -Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande: - - gpg --armor --export --output=pubkey.gpg - -pour la clé publique, et - - gpg --armor --export-secret-keys --output=seckey.gpg - -pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. - -Cela fait, listons les informations sur votre clé publique : - - $ gpg --list-keys --fingerprint - pub 4096R/27D81AC8 2012-11-17 - Key fingerprint = 6345 A91A FF89 97E0 13D0 96A9 9E2A 1917 27D8 1AC8 - uid Clément Hertling (Wxcafe) - uid [jpeg image of size 14692] - sub 4096R/9ED7F77F 2012-11-17 - -La partie `pub` indique que c'est une clé publique, `4096R` indique que c'est -une clé RSA sur 4096 bits. La partie `27D81AC8` est -l'identifiant de la clé publique, `Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8` est appelé fingerprint de la clé. Les champs -`uid` sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ `sub` est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp. -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu. - - gpg --keyserver pgp.mit.edu --send-keys *ID de la clé a uploader* - -Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails! -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). - -Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi. -Concernant les signatures de clés, elles fonctionnent de manière très -simple : -Vous devez télécharger la clé de votre correspondant, via un - - gpg --keyserver pgp.mit.edu --search-keys *ID de la clé de votre correspondant* - -(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien. -Ceci fait, vous pouvez signer la clé via un - - gpg --sign *ID de la clé a signer* - -puis la renvoyer au serveur via - - gpg --keyserver pgp.mit.edu --send-key *ID de la clé a signer* - -Voila, la clé de votre correspondant est signée! - -Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie! - - [pretty good privacy]: http://fr.wikipedia.org/wiki/Pretty_Good_Privacy - [ici]: http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique - [quitter Gmail]: http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/ - [GNU Privacy Guard]: http://fr.wikipedia.org/wiki/GNU_Privacy_Guard diff --git a/content/la-programmation-expliquee-simplement.md b/content/la-programmation-expliquee-simplement.md deleted file mode 100644 index 5342b12..0000000 --- a/content/la-programmation-expliquee-simplement.md +++ /dev/null @@ -1,75 +0,0 @@ -Title: La programmation expliquée simplement -Date: 2012-08-27 00:22 -Author: Wxcafe -Category: Teaching -Slug: la-programmation-expliquee-simplement - -Salut! -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. - -Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article. -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. - -Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code. -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. - -La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière. -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. - -Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau - -Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est : - - #include - void main() { - printf("hello world"); - return 0; - } - -le même programme en python s'écrit : - - print "hello world" - -et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. - -Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. - -Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.) - -Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher. -A bientôt! diff --git a/content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md b/content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md deleted file mode 100644 index 976d720..0000000 --- a/content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md +++ /dev/null @@ -1,108 +0,0 @@ -Title: La séparation des églises et de l'état, une idée qu'elle est bonne? -Date: 2012-12-13 03:08 -Author: Wxcafe -Category: Ranting -Slug: la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne - -Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter? - -Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. - -L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. - -Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine **doit**fournir toutes ses -informations au gouvernement américain **sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.** - -Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire [cet article][] de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. - -Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, ``Apple -Maps``, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. - -De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. - -Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. - -Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi. -Voila, a bientôt! - - [cet article]: http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/ diff --git a/content/le-quenya-episode-o.md b/content/le-quenya-episode-o.md deleted file mode 100644 index e854971..0000000 --- a/content/le-quenya-episode-o.md +++ /dev/null @@ -1,44 +0,0 @@ -Title: Le Quenya - Épisode ø -Date: 2012-09-18 19:07 -Author: Wxcafe -Category: Language -Slug: le-quenya-episode-o - -Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. - -En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. - -Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.) - -J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles [ici][] , une -traduction en français est disponible [la][] en pdf ), et des infos ici -toutes les deux semaines. - -Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver [par ici][]. - -Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya! - - [ici]: http://folk.uib.no/hnohf/qcourse.htm - [la]: http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf - [par ici]: olk.uib.no/hnohf/quenya.htm diff --git a/content/les-differentes-couches-dun-systeme-dexploitation.md b/content/les-differentes-couches-dun-systeme-dexploitation.md deleted file mode 100644 index 235077b..0000000 --- a/content/les-differentes-couches-dun-systeme-dexploitation.md +++ /dev/null @@ -1,94 +0,0 @@ -Title: Les différentes couches d'un système d'exploitation -Date: 2012-09-06 23:29 -Author: Wxcafe -Category: Teaching -Slug: les-differentes-couches-dun-systeme-dexploitation - -Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches. - -Un système d'exploitation (de type UNIX, \enfin un vrai système quoi. -\) incorpore plusieurs systèmes de couches. - -Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. - -Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play") - -Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels" - -Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre - -Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux - -Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés. - -Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés. - -Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au... - -Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique. - -Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant. - -(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.) - -Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...) - -Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2. - -De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus. - -Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels - diff --git a/content/les-systemes-de-fichiers.md b/content/les-systemes-de-fichiers.md deleted file mode 100644 index 7003c88..0000000 --- a/content/les-systemes-de-fichiers.md +++ /dev/null @@ -1,123 +0,0 @@ -Title: Les systèmes de fichiers -Date: 2012-09-25 10:28 -Author: Wxcafe -Category: Teaching -Slug: les-systemes-de-fichiers - -Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32. - -Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers? - -Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -([kibioctet][]), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). - -Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. - -Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente. - -Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence. - -Détaillons maintenant les types de fichiers les plus répandus: - -- FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio. - -- NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition. - -- ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque. - -- Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation. - -- ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.) - -- Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec [LVM][], a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4. - -- HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir - -- ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et \*BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc... - -Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge... - -Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...) - -Bon courage, et bon choix pour votre prochain système. - - [kibioctet]: http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s - [LVM]: http://fr.wikipedia.org/wiki/LVM diff --git a/content/linformatique-a-lecole.md b/content/linformatique-a-lecole.md deleted file mode 100644 index e7bf923..0000000 --- a/content/linformatique-a-lecole.md +++ /dev/null @@ -1,81 +0,0 @@ -Title: L'informatique a l'école -Date: 2012-10-15 20:34 -Author: Wxcafe -Category: Ranting -Slug: linformatique-a-lecole - -Après avoir lu [cet article][] paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège. - -En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu [Hackers - Heroes of the Computer Revolution][] de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela. - -Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre [iWoz][]) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. - -Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie. - -C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre... - -Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple. - -Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé. - - [cet article]: http://t.co/5PTfe6zu - [Hackers - Heroes of the Computer Revolution]: http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution - [iWoz]: http://en.wikipedia.org/wiki/IWoz diff --git a/content/mfsbsd-online.md b/content/mfsbsd-online.md index 7c0bb95..8debba6 100644 --- a/content/mfsbsd-online.md +++ b/content/mfsbsd-online.md @@ -30,6 +30,7 @@ zfsinstall, qui va se charger de tout le travail pour nous. Utilisez donc ce script ainsi : + ::bash # tout d'abord, wipons le MBR : dd < /dev/zero > /dev/da0 count=1 # maintenant, installons le système @@ -43,6 +44,7 @@ convient pas. Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf : + ::python zfs_load="YES" sshd_load="YES hostname="whatever" @@ -57,7 +59,7 @@ Voila, c'est la fin de ce tutoriel. (Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu crédible, disons) -Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter +Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter : [wxcafe_ebooks](https://twitter.com/wxcafe_ebooks), [petitefanfare](https://twitter.com/petitefanfare), [capet_ebooks](https://twitter.com/capet_ebooks), diff --git a/content/nuc-hdmi-cec.md b/content/nuc-hdmi-cec.md new file mode 100644 index 0000000..419bc17 --- /dev/null +++ b/content/nuc-hdmi-cec.md @@ -0,0 +1,97 @@ +Title: les NUCs et le HDMI-CEC +Date: 2015-08-22 02:43 +Author: Wxcafe +Category: Note +Slug: nuc-hdmi-cec + +J'ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas "profiter" du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc...) simplement. + +Ayant un [Raspberry Pi 1](https://www.raspberrypi.org/) qui trainait, j'ai +décidé d'installer [OpenELEC](http://openelec.tv/) dessus et de voir ce que ça +donnait. Le résultat n'étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j'ai décidé d'upgrader le système. + +J'ai donc acquis un [NUC D34010WYK](http://www.amazon.fr/gp/product/B00GPJ83EU) +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +[adaptateur HDMI-CEC](http://www.amazon.fr/dp/B00WU5F8MS/) pour celui-ci, et un +[SSD mSATA](http://www.amazon.fr/gp/product/B00INTR4ZE), en me disant que je +pourrais sans trop de problème faire tourner [Kodi](http://kodi.tv/) sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L'autre +avantage de tourner sur du Intel, c'est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86). + +J'ai donc reçu après un certain temps le matériel sus cité, que j'ai avidement +monté, avant de me rendre compte que le manuel de l'adaptateur Pulse-Eight était +\[PDF\][assez médiocre](https://www.pulse-eight.com/Download/Get/30). J'ai donc +cherché plusieurs heures, avant de trouver \[DE\][ce +post](http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test) +expliquant comment brancher l'adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l'information, et pour moi si je dois remonter ce système. + +Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +"Front Panel", et un appelé "Custom Solution Header". Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi : + + Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) + +Une fois cela fait, il faut brancher le Front Panel. Heureusement, c'est plus +facile, puisqu'il n'y a qu'une seule fiche a brancher ici : la orange. + + + Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) + +Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. + + + Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) + +Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que "Deep S4/S5" soit *dés*activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC. + +Ne reste plus ensuite qu'a installer un système digne de ce nom dessus! diff --git a/content/opensmtpd.md b/content/opensmtpd.md index 1e957b7..9b58cbc 100644 --- a/content/opensmtpd.md +++ b/content/opensmtpd.md @@ -1,7 +1,7 @@ Title: OpenSMTPd comme serveur mail sous debian Date: 2014-11-07 13:04 Author: Wxcafé -Category: Tutorial +Category: Tutoriel Slug: opensmtpd-debian J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant @@ -29,21 +29,21 @@ le serveur, des yeux pour la lecture). Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de +ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de [Dovecot](http://dovecot.org/) qui fait office de serveur IMAP et [amavis](http://www.ijs.si/software/amavisd/)/[spamassassin](http://spamassassin.apache.org/) pour filtrer les mails entrants et sortants. Le schéma suivant explique la façon dont les mails sont gérés sur le système - ╭────────────────╮ ╭──────────╮ - │╭──────────────>│────> to filter ───>│─╮ │ - mail in ││ │ │ │ amavis │ - ───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │ - │ │ │ ╰──────────╯ - mail out │ │ │ ╭──────────╮ - <───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's - │ │ │ dovecot │ mailbox - ╰────────────────╯ ╰──────────╯ + ╭────────────────╮ ╭──────────╮ + │╭──────────────>│────> to filter ───>│─╮ │ + mail in ││ │ │ │ amavis │ + ───────────>│╯ OpenSMTPd ╭──│<─── from filter<───│<╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ + <───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ Normalement, ceci devrait être a peu près clair. Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais @@ -73,26 +73,26 @@ Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, Ainsi, pour reprendre le schéma présenté plus haut : - ╭───────────────╮ ╭───────────╮ - │╭─────────────>│──> SMTP (10026) ──>│─╮ │ - SMTP in ││ │ │ │ amavis │ - ────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │ - │ │ │ ╰───────────╯ - SMTP out │ │ │ - 25 <────────│<───────────╯ │ - ╰───────────────╯ + ╭───────────────╮ ╭───────────╮ + │╭─────────────>│──> SMTP (10026) ──>│─╮ │ + SMTP in ││ │ │ │ amavis │ + ────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ + 25 <────────│<───────────╯ │ + ╰───────────────╯ Pour les mails sortants; et - ╭───────────────╮ ╭────────────╮ - │╭─────────────>│──> SMTP (10024) ──>│─╮ │ - SMTP in ││ │ │ │ amavis │ - ────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │ - │ │ │ ╰────────────╯ - │ │ │ ╭────────────╮ - │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's - │ │ │ dovecot │ mailbox - ╰───────────────╯ ╰────────────╯ + ╭───────────────╮ ╭────────────╮ + │╭─────────────>│──> SMTP (10024) ──>│─╮ │ + SMTP in ││ │ │ │ amavis │ + ────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ Pour les mails entrants. @@ -100,7 +100,7 @@ Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour d'autres plateformes, la configuration devrait être sensiblement la même -(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. +(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. Si vous ne savez pas comment en créer, vous pouvez aller voir [ce post](http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/)) @@ -113,6 +113,7 @@ Continuons en configurant OpenSMTPd tel que nous avons vu plus haut : `/etc/smtpd.conf` + ::bash # This is the smtpd server system-wide configuration file. # See smtpd.conf(5) for more information. @@ -183,6 +184,7 @@ POP3[s], différents guides sont trouvables facilement sur internet. `/etc/dovecot/dovecot.conf` + ::bash ## Dovecot configuration file # basic config @@ -240,12 +242,14 @@ POP3[s], différents guides sont trouvables facilement sur internet. **ATTENTION: Sous OpenBSD, remplacez** + ::bash passdb { driver = pam } **par** + ::bash passdb { driver = bsdauth } @@ -285,6 +289,7 @@ modifications nécessaires a la fin du fichier. `/etc/amavis/conf.d/99-local.conf` (debian) `/etc/amavis.conf` (OpenBSD) + ::perl use strict; $enable_dkim_verification = 1; @@ -353,6 +358,7 @@ tutorial](https://www.digitalocean.com/community/tutorials/how-to-install-and-co mais de nombreuses autre méthodes existent. Il nous reste encore a configurer spamassassin : + ::perl #rewrite_header Subject *****SPAM***** # report_safe 1 required_score 2.0 diff --git a/content/pages/about.md b/content/pages/about.md index 1bc0f84..71a0353 100644 --- a/content/pages/about.md +++ b/content/pages/about.md @@ -4,24 +4,49 @@ Slug: about Author: wxcafé Category: Perso -Hey, it's me! -================= +Wxcafé, c'est moi. +------------------ -I'm Clément Hertling, a 18 years-old student, in my first year at [Epita](http://epita.fr), -and living in Villejuif, near Paris, France. +Je m'appelle Clément Hertling, je suis né en 1995, et je suis étudiant en DUT a +[Paris 12 (UPEC)](http://www.u-pec.fr). Je vis actuellement a Villejuif, près de +Paris, en France. -I like to mess around with computers, particularly with operating systems, and -generally speaking with UNIX based systems (GNU/Linux, \*BSD, OS X, ...). -I also like working with computer hardware, be it embedded devices or servers, -and on a smaller scale I'm interested in electronics too. I regularly try to -learn some programming, but it hasn't been very convincing for now. That will -with, well, going to school and learning this stuff. -I generally enjoy learning about tech, though. +Je suis enthousiaste dès qu'il s'agit de jouer avec des ordinateurs, que ce soit +avec des systèmes d'exploitations (et particulièrement les UNIX-like : Linux, +\*BSD, OS X, Plan 9, ...), mais aussi avec le réseau et son administration +(principalement couches 2 et 3, routage et commutation). +Je suis aussi intéressé par le hardware, que ce soit de l'embarqué ou bien des +serveurs, et dans une moindre mesure par l'électronique. Je fais un peu (et de +plus en plus) de programmation, principalement en python et en Rust. Je +m'intéresse beaucoup a la théorie de la programmation, toutefois, et notamment +de plus en plus a la programmation fonctionnelle et a la théorie des types. +On peut probablement en conclure que j'aime travailler avec la technologie. +J'aime aussi écrire a propos de ce que je fais, et de mes pensées sur la +technologie en général, et c'est ce que je fais (parfois) ici. -I like to write about what I do and my thoughts about technology, and I -(sometimes) do it here, mostly in French though. -You can also find me on some social networks, as shown in the right bar, or in -real life at LeLoop (sometimes). If you want to meet me directly, send me an +Vous pouvez aussi me lire sur Twitter. Les liens sont dans la +barre a droite. Si vous voulez me rencontrer en vrai, vous pouvez m'envoyer un email. -Thanks for visiting! + +Wxcafé, that's me. +------------------ + +I'm Clément Hertling, I was born in 1995, and I'm a student in a technical +formation at [Paris 12 (UPEC)](http://www.u-pec.fr). I live in Villejuif, near +Paris, France. + +I'm pretty enthusiastic when it's about playing with computers, whether that +means operating systems (and more specifically UNIX-like OSes : Linux, \*BSD, +OS X, Plan 9, ...), or networks and their administration (generally speaking, +layer 2 and 3, routing and switching). +I'm also interested in hardware, be it embedded systems or servers, and to a +smaller extent in electronics. I also do a bit of (but more and more) +programming, mostly in python and Rust. I'm very interested in CS theory, +though, and very much so in functionnal programming and type theory. +You could conclude that I like tech, and working in this domain. I also enjoy +writing about what I do and about my ideas on tech in general, and that's what I +(sometimes) do here. + +You can also read my thoughts on twitter. The links are in the sidebar. If you +want to meet me, you can send me an email. diff --git a/content/redesign-du-blog.md b/content/redesign-du-blog.md index 3220919..d485a28 100644 --- a/content/redesign-du-blog.md +++ b/content/redesign-du-blog.md @@ -1,7 +1,7 @@ Date: 2013-06-12 19:14 Title: Redesign du blog, etc Author: wxcafe -Category: Notes +Category: Note Slug: redesign-du-blog Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment. diff --git a/content/ssl-starttls.md b/content/ssl-starttls.md new file mode 100644 index 0000000..0c7dcd7 --- /dev/null +++ b/content/ssl-starttls.md @@ -0,0 +1,43 @@ +Title: SSL - STARTTLS +Date: 2015-05-16 02:00 +Author: Wxcafe +Category: Note +Slug: ssl-starttls + +Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l'histoire d'Internet. Sa mise en place pose +problème : les protocoles existants ne s'accommodent qu'assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n'apporte rien d'intéressant. Pour palier a ce +problème, deux solutions sont apparues. + +Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l'extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port. + +L'autre approche qui a été utilisée est une approche d'*upgrade*. La +communication commence en mode non chiffré, puis le client demande l'upgrade de +la connexion vers le mode chiffré s'il le supporte, les deux machines +machines font un *handshake* SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la "mise +a jour" en douceur. + +Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service -- laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec `STARTTLS`, qui *upgrade* les connexions si nécessaire. +La réponse est que `STARTTLS` est plus interessant, pour plusieurs raisons. Tout +d'abord, il permet de n'utiliser qu'un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients "anciens" (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d'éviter aux utilisateurs d'avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l'activera de lui même s'il +voit qu'il est disponible. +Bref, mettez en place du `STARTTLS`, et pas du SSL. C'est mieux pour la sécurité +de tout le monde. diff --git a/content/ssl.md b/content/ssl.md index 1eb21e3..735bbc2 100644 --- a/content/ssl.md +++ b/content/ssl.md @@ -1,7 +1,7 @@ Title: SSL ou la sécurité sur l'internet Date: 2014-05-30 08:25 Author: Wxcafe -Category: Notes +Category: Note Slug: SSL-ou-la-securite-sur-internet *Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie @@ -57,6 +57,7 @@ l'implémentation : Pour générer la clé, tout d'abord, il convient d'utiliser les commandes suivantes: + ::console sudo openssl genrsa -out example.key 4096 # nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation sudo openssl req -new -key example.key -out example.csr @@ -72,6 +73,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise : ###apache : + ::apache # /etc/apache2/mods_enabled/ssl.conf # [...] SSLProtocol all -SSLv2 -SSLv3 @@ -89,6 +91,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise : ###nginx : + ::nginx # /etc/nginx/nginx.conf # [...] ssl_protocols TLSv1 TLSv1.1 TLSv1.2; @@ -106,6 +109,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise : ###prosody (jabber) : + ::lua # tout d'abord, lancez la commande suivante : sudo openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048 # ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf : @@ -118,6 +122,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise : ###postfix (email) : + ::shell # /etc/postfix/main.cf # [...] smtpd_tls_cert_file = /etc/certs/example.com.crt @@ -133,6 +138,7 @@ Je vais lister ici les methodes pour quelques services que j'utilise : ###dovecot (imap) : + ::shell # /etc/dovecot/dovecot.conf # [...] ssl_cert = + + - - - - - - - - - - - - - - - -
-
-
-
-

Le Quenya - Épisode ø

-
- Date - - Tue 18 September 2012 - -
- By - Wxcafe -
- Category - Language -
- - - - -
-

Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc.

-

En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite.

-

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

-

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

-

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

-

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

-
-
-
-

Update a propos du blog

-
- Date - - Tue 18 September 2012 - -
- By - Wxcafe -
- Category - Notes -
- - - - -
-

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

-
    -
  • -

    Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (@Wxcafe)

    -
  • -
  • -

    Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.

    -
  • -
-

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

-

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

-

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

-

A plus tard!

-
-
-
-

Introduction a bash en tant que language de programmation.

-
-

L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).

-

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

-

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

-

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

-

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

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

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

-
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
#!/bin/bash 
-echo "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?" 
-read host_name 
-if [ $host_name == $HOSTNAME ] ## voici la syntaxe du if. Attention a bien penser a mettre les espaces avant la première variable, et après la seconde. La variable $HOSTNAME ici utilisée est une variable présente par défaut sur le système. 
-then echo "you told the truth!" 
-fi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash. 
-if [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. 
-then echo "you lied!" 
-fi 
-exit
-
-
- -

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

-

Passons maintenant au while:

-
1
-2
-3
-4
-5
-6
-7
#!/bin/bash
-echo "what is your name?"
-read name
-while [ 1 < 10 ]    ## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.
-do echo "i love" $name
-done
-exit
-
-
- -

Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).

-

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

-
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
#!/bin/bash
-echo "please enter a number between one and five"
-read number
-case $number in 
-1)
-echo "the choosen number was one"
-;;
-2)
-echo "the choosen number was two"
-;;
-3)
-echo "the choosen number was three"
-;;
-4)
-echo "the choosen number was four"
-;;
-5)
-echo "the choosen number was five"
-;;
-*)
-echo "this number is not correct"
-;; 
-esac
-exit
-
-
- -

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

-

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

-

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

-

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

-
-
-
-

Les différentes couches d'un système d'exploitation

-
- Date - - Thu 06 September 2012 - -
- By - Wxcafe -
- Category - Teaching -
- - - - -
-

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

-

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

-

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

-

Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")

-

Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"

-

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

-

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

-

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

-

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

-

Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...

-

Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.

-

Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.

-

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

-

Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)

-

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

-

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

-

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

-
-
-
-

La programmation expliquée simplement

-
- Date - - Mon 27 August 2012 - -
- By - Wxcafe -
- Category - Teaching -
- - - - -
-

Salut!
-Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé.

-

Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.
-Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation
-Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail.

-

Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.
-Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain.

-

La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.
-Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau.

-

Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau

-

Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :

-
#include 
-void main() {
-printf("hello world");
-return 0;
-}
-
- - -

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

-
print "hello world"
-
- - -

et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement.

-

Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur.

-

Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)

-

Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.
-A bientôt!

-
-
-
-

GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère

-
- Date - - Wed 22 August 2012 - -
- By - Wxcafe -
- Category - Teaching -
- - - - -
-

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

-

GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.

-

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

-

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

-

Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : Unity, la -nouvelle interface d'Ubuntu; GNOME , une interface qui vise a la -simplicité; ou encore KDE, une interface utilisateur ressemblant a -Windows 7.

-

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

-

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

-

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

-

A bientôt!

-
-
-
-

Débuts, présentation, etc...

-
- Date - - Sat 18 August 2012 - -
- By - Wxcafe -
- Category - Notes -
- - - - -
-

Bonjour!

-

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

-

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

-

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

-

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

-

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

-
-
- -
- -
-
-
-
- Proudly powered by Pelican, - which takes great advantage of Python.
- Powered by bootstrap2 theme, thanks! -
-
-
- - \ No newline at end of file diff --git a/output/categories.html b/output/categories.html index 94f5f29..7ea102c 100644 --- a/output/categories.html +++ b/output/categories.html @@ -7,7 +7,9 @@ + + - - - - - - - - - - - - - - - -
-
-
-
-

Le Quenya - Épisode ø

-
- Date - - Tue 18 September 2012 - -
- By - Wxcafe -
- Category - Language -
- - - - -
-

Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc.

-

En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite.

-

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

-

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

-

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

-

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

-
-
-
-

Pages

-
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/category/note/index.html b/output/category/note/index.html new file mode 100644 index 0000000..ff097f3 --- /dev/null +++ b/output/category/note/index.html @@ -0,0 +1,712 @@ + + + + + Wxcafé - Note + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +

    les NUCs et le HDMI-CEC

    +
    + Date + + Sat 22 August 2015 + +
    + By + Wxcafe +
    + Category + Note +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +

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

    +
    Custom Solution
    +  ┌─┬─┬─┬─┬─┐
    +  │g│ │·│r│·│
    +  ├─┼─┼─┼─┼─┤
    +  │·│·│·│·│·│
    +  └─┴─┴─┴─┴─┘
    +
    +  g ➔ fiche grise
    +  r ➔ fiche rouge
    +  · ➔ pin inutilisé
    +    ➔ espace vide (sans pin)
    +
    + + +

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

    +
      Front Panel
    +  ┌─┬─┬─┬─┬─┐
    +  │·│·│·│·│·│
    +  ├─┼─┼─┼─┼─┤
    +  │ │·│o│·│·│
    +  └─┴─┴─┴─┴─┘
    +
    +  o ➔ fiche orange
    +  · ➔ pin inutilisé
    +    ➔ espace vide (sans pin)
    +
    + + +

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

    +
       Dual-USB
    +  ┌─┬─┬─┬─┬─┐
    +  │b│B│v│n│·│
    +  ├─┼─┼─┼─┼─┤
    +  │·│·│·│·│ │
    +  └─┴─┴─┴─┴─┘
    +
    +  b ➔ fiche bleue
    +  B ➔ fiche Blanche
    +  v ➔ fiche verte
    +  n ➔ fiche noire
    +  · ➔ pin inutilisé
    +    ➔ espace vide (sans pin)
    +
    + + +

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

    +

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

    +
    +
    +
    +

    SSL - STARTTLS

    +
    + Date + + Sat 16 May 2015 + +
    + By + Wxcafe +
    + Category + Note +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +
    +
    +
    +

    Docker et les ebooks sur Twitter

    +
    + Date + + Sat 28 February 2015 + +
    + By + Wxcafe +
    + Category + Note +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

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

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

    +

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

    +
    +
    +
    +

    SSL ou la sécurité sur l'internet

    +
    + Date + + Fri 30 May 2014 + +
    + By + Wxcafe +
    + Category + Note +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

    Bon, maintenant que les explications basiques sont faites, voyons +l’implémentation :
    +Pour générer la clé, tout d’abord, il convient d’utiliser les commandes +suivantes:

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

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

    +

    apache :

    +
    # /etc/apache2/mods_enabled/ssl.conf
    +# [...]
    +SSLProtocol all -SSLv2 -SSLv3
    +SSLHonorCipherOrder on
    +SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    +  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    +  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
    +# [...]
    +# /etc/apache2/sites-enabled/default-ssl
    +# [...]
    +SSLEngine on
    +SSLCertificateFile /etc/certs/example.com.crt
    +SSLCertificateKeyFile /etc/certs/example.com.key
    +# [...]
    +
    + + +

    nginx :

    +
    # /etc/nginx/nginx.conf 
    +# [...]
    +ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    +ssl_prefer_server_ciphers on;
    +ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    +  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    +  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
    +# [...]
    +# /etc/nginx/sites-enabled/default-ssl
    +# [...]
    +ssl on;
    +ssl_certificate /etc/certs/example.com.crt
    +ssl_certificate_key /etc/certs/example.com.key
    +# [...]
    +
    + + +

    prosody (jabber) :

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

    postfix (email) :

    +
    # /etc/postfix/main.cf
    +# [...]
    +smtpd_tls_cert_file = /etc/certs/example.com.crt
    +smtpd_tls_key_file = /etc/certs/example.com.key
    +tls_preempt_cipherlist = yes
    +smtpd_tls_eecdh_grade = strong
    +smtdp_tls_mandatory_ciphers = high
    +smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
    +smtpd_tls_security_level = encrypt
    +smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
    +smtpd_use_tls = yes
    +# [...]
    +
    + + +

    dovecot (imap) :

    +
    # /etc/dovecot/dovecot.conf 
    +# [...]
    +ssl_cert = </etc/certs/example.com.crt
    +ssl_key = </etc/certs/example.com.key
    +ssl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
    +
    + + +

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

    +

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

    +
    +
    +
    +

    Redesign du blog, etc

    +
    + Date + + Wed 12 June 2013 + +
    + By + wxcafe +
    + Category + Note +
    + + + + +
    +

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

    +

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

    +

    Globalement, un thème est constitué ainsi :

    +
    thème
    +├── static
    +   ├─ css
    +     └─ [css files]
    +   ├─ img
    +     └─ [image files]
    +   └─ js
    +      └─ [javascript files]
    +└── template
    +    ├─ base.html
    +    ├─ index.html
    +    ├─ page.html
    +    ├─ [...]
    +    └─ article.html
    +
    + + +

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

    +

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

    +

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

    +

    En ce qui concerne les points négatifs :

    +
      +
    • +

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

      +
    • +
    • +

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

      +
    • +
    • +

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

      +
    • +
    • +

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

      +
    • +
    +

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

    +
    +
    +
    +

    Update

    +
    + Date + + Sat 05 January 2013 + +
    + By + Wxcafe +
    + Category + Note +
    + + + + +
    +

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

    +
    +
    +
    +

    Pages

    +
  • A propos
  • +
    +
    + +
    +
    +
    +
    + Proudly powered by Pelican, + which takes great advantage of Python.
    + Powered by bootstrap2 theme, thanks! +
    +
    +
    + + \ No newline at end of file diff --git a/output/category/notes/index.html b/output/category/notes/index.html deleted file mode 100644 index cd7d604..0000000 --- a/output/category/notes/index.html +++ /dev/null @@ -1,561 +0,0 @@ - - - - - Wxcafé - Notes - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    SSL ou la sécurité sur l'internet

    -
    - Date - - Fri 30 May 2014 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

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

    -

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

    -

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

    -

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

    -

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

    -

    Il serait préférable de faire des redirections automatiques des adresses http -vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront -donc pas mises en place.

    -

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

    -

    Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation :
    -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes -suivantes:

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

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

    -

    apache :

    -
    # /etc/apache2/mods_enabled/ssl.conf
    -# [...]
    -SSLProtocol all -SSLv2 -SSLv3
    -SSLHonorCipherOrder on
    -SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    -  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    -  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
    -# [...]
    -# /etc/apache2/sites-enabled/default-ssl
    -# [...]
    -SSLEngine on
    -SSLCertificateFile /etc/certs/example.com.crt
    -SSLCertificateKeyFile /etc/certs/example.com.key
    -# [...]
    -
    - - -

    nginx :

    -
    # /etc/nginx/nginx.conf 
    -# [...]
    -ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    -ssl_prefer_server_ciphers on;
    -ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    -  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    -  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
    -# [...]
    -# /etc/nginx/sites-enabled/default-ssl
    -# [...]
    -ssl on;
    -ssl_certificate /etc/certs/example.com.crt
    -ssl_certificate_key /etc/certs/example.com.key
    -# [...]
    -
    - - -

    prosody (jabber) :

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

    postfix (email) :

    -
    # /etc/postfix/main.cf
    -# [...]
    -smtpd_tls_cert_file = /etc/certs/example.com.crt
    -smtpd_tls_key_file = /etc/certs/example.com.key
    -tls_preempt_cipherlist = yes
    -smtpd_tls_eecdh_grade = strong
    -smtdp_tls_mandatory_ciphers = high
    -smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
    -smtpd_tls_security_level = encrypt
    -smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
    -smtpd_use_tls = yes
    -# [...]
    -
    - - -

    dovecot (imap) :

    -
    # /etc/dovecot/dovecot.conf 
    -# [...]
    -ssl_cert = </etc/certs/example.com.crt
    -ssl_key = </etc/certs/example.com.key
    -ssl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
    -
    - - -

    Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter -au manuel approprié.

    -

    Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker SSL and the future -of Authenticity qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.

    -
    -
    -
    -

    Redesign du blog, etc

    -
    - Date - - Wed 12 June 2013 - -
    - By - wxcafe -
    - Category - Notes -
    - - - - -
    -

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

    -

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

    -

    Globalement, un thème est constitué ainsi :

    -
    thème
    -├── static
    -   ├─ css
    -     └─ [css files]
    -   ├─ img
    -     └─ [image files]
    -   └─ js
    -      └─ [javascript files]
    -└── template
    -    ├─ base.html
    -    ├─ index.html
    -    ├─ page.html
    -    ├─ [...]
    -    └─ article.html
    -
    - - -

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

    -

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

    -

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

    -

    En ce qui concerne les points négatifs :

    -
      -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

      Perte du spam: - Pourquoi c'est dans les points négatifs, ca?

      -
    • -
    • -

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

      -
    • -
    -

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

    -
    -
    -
    -

    Update

    -
    - Date - - Sat 05 January 2013 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

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

    -
    -
    -
    -

    Update a propos du blog

    -
    - Date - - Tue 18 September 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

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

    -
      -
    • -

      Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (@Wxcafe)

      -
    • -
    • -

      Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.

      -
    • -
    -

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

    -

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

    -

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

    -

    A plus tard!

    -
    -
    -
    -

    Débuts, présentation, etc...

    -
    - Date - - Sat 18 August 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    Bonjour!

    -

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

    -

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

    -

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

    -

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

    -

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

    -
    -
    -
    -

    Pages

    -
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/category/oses/index.html b/output/category/oses/index.html index 1819598..39ed6a9 100644 --- a/output/category/oses/index.html +++ b/output/category/oses/index.html @@ -7,7 +7,9 @@ + + - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Introduction a bash en tant que language de programmation.

    -
    -

    L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).

    -

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

    -

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

    -

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

    -

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

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

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

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    #!/bin/bash 
    -echo "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?" 
    -read host_name 
    -if [ $host_name == $HOSTNAME ] ## voici la syntaxe du if. Attention a bien penser a mettre les espaces avant la première variable, et après la seconde. La variable $HOSTNAME ici utilisée est une variable présente par défaut sur le système. 
    -then echo "you told the truth!" 
    -fi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash. 
    -if [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. 
    -then echo "you lied!" 
    -fi 
    -exit
    -
    -
    - -

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

    -

    Passons maintenant au while:

    -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    #!/bin/bash
    -echo "what is your name?"
    -read name
    -while [ 1 < 10 ]    ## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.
    -do echo "i love" $name
    -done
    -exit
    -
    -
    - -

    Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).

    -

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

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    #!/bin/bash
    -echo "please enter a number between one and five"
    -read number
    -case $number in 
    -1)
    -echo "the choosen number was one"
    -;;
    -2)
    -echo "the choosen number was two"
    -;;
    -3)
    -echo "the choosen number was three"
    -;;
    -4)
    -echo "the choosen number was four"
    -;;
    -5)
    -echo "the choosen number was five"
    -;;
    -*)
    -echo "this number is not correct"
    -;; 
    -esac
    -exit
    -
    -
    - -

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

    -

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

    -

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

    -

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

    -
    -
    -
    -

    Pages

    -
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/category/ranting/index.html b/output/category/ranting/index.html index 406fb17..a508a3b 100644 --- a/output/category/ranting/index.html +++ b/output/category/ranting/index.html @@ -7,7 +7,9 @@ + + - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Les systèmes de fichiers

    -
    - Date - - Tue 25 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

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

    -

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

    -

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

    -

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

    -

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

    -

    Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.

    -

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

    -
      -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    -

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

    -

    Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)

    -

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

    -
    -
    -
    -

    Les différentes couches d'un système d'exploitation

    -
    - Date - - Thu 06 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

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

    -

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

    -

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

    -

    Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")

    -

    Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"

    -

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

    -

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

    -

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

    -

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

    -

    Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...

    -

    Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.

    -

    Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.

    -

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

    -

    Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)

    -

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

    -

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

    -

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

    -
    -
    -
    -

    La programmation expliquée simplement

    -
    - Date - - Mon 27 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Salut!
    -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé.

    -

    Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.
    -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation
    -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail.

    -

    Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.
    -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain.

    -

    La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.
    -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau.

    -

    Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau

    -

    Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :

    -
    #include 
    -void main() {
    -printf("hello world");
    -return 0;
    -}
    -
    - - -

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

    -
    print "hello world"
    -
    - - -

    et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement.

    -

    Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur.

    -

    Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)

    -

    Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.
    -A bientôt!

    -
    -
    -
    -

    GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère

    -
    - Date - - Wed 22 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

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

    -

    GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.

    -

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

    -

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

    -

    Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : Unity, la -nouvelle interface d'Ubuntu; GNOME , une interface qui vise a la -simplicité; ou encore KDE, une interface utilisateur ressemblant a -Windows 7.

    -

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

    -

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

    -

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

    -

    A bientôt!

    -
    -
    -
    -

    Pages

    -
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/category/tutorial/index.html b/output/category/tutorial/index.html deleted file mode 100644 index 79fd052..0000000 --- a/output/category/tutorial/index.html +++ /dev/null @@ -1,576 +0,0 @@ - - - - - Wxcafé - Tutorial - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    OpenSMTPd comme serveur mail sous debian

    -
    - Date - - Fri 07 November 2014 - -
    - By - Wxcafé -
    - Category - Tutorial -
    - - - - -
    -

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

    -

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

    -

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

    -

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

    -

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

    -
                ╭────────────────╮                    ╭──────────╮
    -            │╭──────────────>│────> to filter ───>│─╮        
    -  mail in   ││                                     amavis 
    -───────────>│╯ OpenSMTPd  ╭──│<─── from filter<───│<        
    -                                               ╰──────────╯
    -  mail out                                     ╭──────────╮
    -<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
    -                                                 dovecot       mailbox
    -            ╰────────────────╯                    ╰──────────╯
    -
    - - -

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

    -

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

    -

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

    -

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

    -

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

    -
                ╭───────────────╮                    ╭───────────╮
    -            │╭─────────────>│──> SMTP (10026) ──>│─╮         
    -  SMTP in   ││                                    amavis  
    -────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│< (sign)  
    -                                              ╰───────────╯
    -  SMTP out                
    -25 <────────│<───────────╯  
    -            ╰───────────────╯
    -
    - - -

    Pour les mails sortants; et

    -
                ╭───────────────╮                    ╭────────────╮
    -            │╭─────────────>│──> SMTP (10024) ──>│─╮          
    -  SMTP in   ││                                    amavis   
    -────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<(filter)  
    -                                              ╰────────────╯
    -                                              ╭────────────╮
    -                        ╰─>│──> LMTP (socket) >│───────────>│──> to user's
    -                                                 dovecot        mailbox
    -            ╰───────────────╯                    ╰────────────╯
    -
    - - -

    Pour les mails entrants.

    -

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

    -

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

    -

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

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

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

    -

    /etc/smtpd.conf

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

    Expliquons un peu ce fichier de configuration :

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

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

    -

    /etc/dovecot/dovecot.conf

    -
    ## Dovecot configuration file
    -
    -# basic config
    -info_log_path = /var/log/dovecot-info.log
    -log_path = /var/log/dovecot.log
    -log_timestamp = "%Y-%m-%d %H:%M:%S "
    -mail_location = maildir:%h/mail
    -
    -# authentication
    -passdb {
    -    driver = pam
    -}
    -userdb {
    -    driver = passwd
    -}
    -
    -# the protocols we use
    -protocols = imap lmtp sieve
    -
    -# ssl config
    -ssl_cert = </etc/certs/exem.pl.cert
    -ssl_key = </etc/certs/exem.pl.key
    -ssl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
    -ssl = yes
    -
    -## configuring services 
    -# disables imap login without SSL (yes dovecot is dumb that way)
    -service imap-login {
    -    inet_listener imap {
    -        port=0 
    -    }
    -}
    -
    -service lmtp {
    -    unix_listener lmtp {
    -        mode = 0666
    -    }
    -}
    -
    -## configuring protocols
    -# the dovecot lda, we set it to use sieve
    -protocol lda {
    -    mail_plugins = $mail_plugins sieve
    -}
    -
    -protocol lmtp {
    -    postmaster_address =  whoever@exem.pl
    -    mail_plugins = $mail_plugins sieve
    -}
    -
    -plugin {
    -    sieve = ~/.dovecot.sieve
    -    sieve_dir = ~/sieve
    -}
    -
    - - -

    ATTENTION: Sous OpenBSD, remplacez

    -
    passdb {
    -    driver = pam
    -}
    -
    - - -

    par

    -
    passdb {
    -    driver = bsdauth
    -}
    -
    - - -

    pour identifier les utilisateurs système

    -

    Ici aussi, voyons comment ce fichier est structuré :

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

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

    -

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

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

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

    -

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

    -

    Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (un -tutorial) -mais de nombreuses autre méthodes existent. -Il nous reste encore a configurer spamassassin :

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

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

    -

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

    -

    Bon courage pour votre hosting de mail ensuite...

    -
    -
    -
    -

    Pages

    -
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/category/tutoriel/index.html b/output/category/tutoriel/index.html index 8bb7860..985ef29 100644 --- a/output/category/tutoriel/index.html +++ b/output/category/tutoriel/index.html @@ -7,7 +7,9 @@ + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +

    Manettes : Hori vs. PDP

    +
    + Date + + Sun 19 April 2015 + +
    + By + Wxcafe +
    + Category + Vidya Games +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

    Hori_face

    +

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

    +

    Hori_dos

    +

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

    +

    Hori_CM

    +

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

    +

    Hori_Cstick

    +

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

    +

    Hori_coque

    +

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

    +
    + +

    Passons maintenant a la manette PDP.

    +

    PDP_face

    +

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

    +

    PDP_dos

    +

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

    +

    PDP_CM

    +

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

    +

    PDP_CF

    +

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

    +

    Quelques photos des gâchettes en question :

    +

    PDP_G_1

    +

    PDP_G_2

    +

    PDP_G_3

    +

    PDP_G_4

    +
    +

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

    +
    +
    +
    +

    Pages

    +
  • A propos
  • +
    +
    + +
    +
    +
    +
    + Proudly powered by Pelican, + which takes great advantage of Python.
    + Powered by bootstrap2 theme, thanks! +
    +
    +
    + + \ No newline at end of file diff --git a/output/feeds/all-fr.atom.xml b/output/feeds/all-fr.atom.xml index 01c165f..98d314c 100644 --- a/output/feeds/all-fr.atom.xml +++ b/output/feeds/all-fr.atom.xml @@ -1,260 +1,531 @@ -Wxcafé//wxcafe.net/2014-11-07T13:04:00+01:00OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/%D/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de +Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<p>J&rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas &ldquo;profiter&rdquo; du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc&hellip;) simplement.</p> +<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j&rsquo;ai +décidé d&rsquo;installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça +donnait. Le résultat n&rsquo;étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j&rsquo;ai décidé d&rsquo;upgrader le système.</p> +<p>J&rsquo;ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a> +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un +<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je +pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&rsquo;autre +avantage de tourner sur du Intel, c&rsquo;est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86).</p> +<p>J&rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&rsquo;ai avidement +monté, avant de me rendre compte que le manuel de l&rsquo;adaptateur Pulse-Eight était +[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J&rsquo;ai donc +cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce +post</a> +expliquant comment brancher l&rsquo;adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l&rsquo;information, et pour moi si je dois remonter ce système.</p> +<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +&ldquo;Front Panel&rdquo;, et un appelé &ldquo;Custom Solution Header&rdquo;. Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&rsquo;est plus +facile, puisqu&rsquo;il n&rsquo;y a qu&rsquo;une seule fiche a brancher ici : la orange.</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que &ldquo;Deep S4/S5&rdquo; soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC.</p> +<p>Ne reste plus ensuite qu&rsquo;a installer un système digne de ce nom dessus!</p>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose +problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce +problème, deux solutions sont apparues.</p> +<p>Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port.</p> +<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La +communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de +la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines +machines font un <em>handshake</em> SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise +a jour&rdquo; en douceur.</p> +<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> +La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout +d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il +voit qu&rsquo;il est disponible.<br /> +Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité +de tout le monde.</p>Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d&rsquo;abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &ldquo;choses&rdquo; +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d&rsquo;autres. Vous aurez aussi remarqué que le +Gamepad n&rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube.</p> +<p>Cela étant, si comme moi vous avez, euh, &ldquo;ouvert&rdquo; le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l&rsquo;adaptateur GC pour Wii +U</a> +a votre console. </p> +<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d&rsquo;habitude +avec Nintendo, c&rsquo;est une solution a moitié satisfaisante&hellip;) : les classic +controller, mais en forme de manettes Gamecube.</p> +<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d&rsquo;argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes.</p> +<p>Nous allons ici voir deux modèles, un de chacune des boites en question +: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p> +<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus</em></strong></p> +<p>Commençons par le modèle de chez Hori :</p> +<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur.</p> +<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p> +<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c&rsquo;est logique puisque c&rsquo;est comme ça que les +classic controller sont faits, mais c&rsquo;est décevant tout de même</p> +<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p> +<p>On peut voir ici que la qualité de l&rsquo;assemblage n&rsquo;est pas extraordinaire, et on +remarque une soudure mal faite a l&rsquo;emplacement du stick gauche.</p> +<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p> +<p>Le stick c n&rsquo;est pas fixé au reste de la manette. +J&rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n&rsquo;avaient pas l&rsquo;air de très bonne qualité, et j&rsquo;ai préféré abandonner +l&rsquo;idée plutôt que de casser la manette.</p> +<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p> +<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d&rsquo;une Wiimote entière la dedans&hellip;</p> +<hr> + +<p>Passons maintenant a la manette PDP.</p> +<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p> +<p>Au premier coup d&rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c&rsquo;est un problème de goût).</p> +<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p> +<p>Les gâchettes sont des vraies gâchettes! C&rsquo;est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après.</p> +<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon <strike>péremptoire</strike> perpendiculaire&hellip;</p> +<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p> +<p>Vous l&rsquo;avez deviné, ces deux &ldquo;cartes filles&rdquo; servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de &ldquo;vraies&rdquo; gâchettes en cela +qu&rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques.</p> +<p>Quelques photos des gâchettes en question :</p> +<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p> +<hr /> +<p>Vous l&rsquo;aurez compris, je préfère la version PDP de ces &ldquo;Fight Pad&rdquo;, la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si +ce n&rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n&rsquo;est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>, +mais n&rsquo;est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>, +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d&rsquo;avoir une machine hôte sur laquelle s&rsquo;exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l&rsquo;hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu&rsquo;avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu&rsquo;à l&rsquo;hôte, puisqu&rsquo;il n&rsquo;est pas vraiment séparé des +invités. </p> +<p>Quoi qu&rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. &ldquo;Mais pourquoi utiliser Docker, dans ce cas&rdquo;, vous +demandez-vous peut être, &ldquo;puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&rdquo;. Et bien +c&rsquo;est très simple : Docker apporte la simplicité de déploiement d&rsquo;applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer +rapidement et facilement un grand nombre d&rsquo;images déjà configurées. </p> +<p>Maintenant que nous avons expliqué rapidement ce qu&rsquo;était Docker, voyons le +rapport avec les ebooks et Twitter.</p> +<p>Les comptes dits &ldquo;ebooks&rdquo; (le nom vient a l&rsquo;origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>, +voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots +twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>, +avec les tweets d&rsquo;un utilisateur &ldquo;source&rdquo; comme corpus, pour produire des tweets +ressemblant a ceux de l&rsquo;utilisateur source. Nous allons voir maintenant comment +en installer un.</p> +<p>C&rsquo;est, comme disent certaines personnes, &ldquo;fun&rdquo;.</p> +<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée +par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l&rsquo;API +twitter et la génération des messages.</p> +<p>Cependant, cela n&rsquo;explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d&rsquo;isoler les bots, et les +containers dockers permettent de les déployer sur n&rsquo;importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j&rsquo;ai créé <a href="https://github.com/wxcafe/ebooks_example">un +repo github</a> qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc.</p> +<p>Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l&rsquo;utilisateur source avec <code>ebooks archive &lt;username&gt; &lt;filename&gt;</code> (c&rsquo;est du json) +, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks +consume &lt;filename&gt;</code>. Cela fait, démarrer le bot revient a lancer le container : +<code>docker run -d &lt;container name&gt;</code> Pour plus d&rsquo;informations, allez voir <a href="https://docs.docker.com/articles/basics/">la +documentation Docker</a></p> +<p>Bien entendu, dans l&rsquo;idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 05 * * * cd /usr/local/ebooks/main/ &amp;&amp; /usr/local/bin/ebooks consume corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 10 * * * docker rm -f bots &gt;/dev/null 2&gt;&amp;1 +00 15 * * * docker rmi bots &gt; /dev/null 2&gt;&amp;1 +00 20 * * * cd /usr/local/ebooks/main/ &amp;&amp; docker build --rm -t bots . &gt;&gt; /var/log/ebooks/build.log 2&gt;&amp;1 +00 25 * * * docker run -d --name bots bots &gt;&gt; /var/log/ebooks/run.log 2&gt;&amp;1 +</pre></div> + + +<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s&rsquo;executent en même temps.</p> +<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n&rsquo;est qu&rsquo;un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des +applications &ldquo;usuelles&rdquo; +dedans</a>, +puisque l&rsquo;overhead de Docker est minimal, et beaucoup d&rsquo;autres applications +existent.</p>OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant +comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la +aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais +<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un +projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA +qu&rsquo;a le projet OpenBSD, globalement).</p> +<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA (Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis +<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération +ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches +sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et +<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir +des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour +ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et <a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> pour filtrer les mails entrants et sortants. Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮ + │╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │ + mail in ││ │ │ │ amavis │ +───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ +&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ </pre></div> <p>Normalement, ceci devrait être a peu près clair. Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de +aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails +venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, qui a ce moment-ci trie en fonction de la destination : les mails gérés par le domaine vont via dovecot dans les boites mail des destinataires locaux, les mails exterieurs vont directement vers le MTA du serveur distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon +<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon dont les différents services vont communiquer.</p> <p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de +10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et +écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de signer, nous allons profiter de cette configuration et donc lui parler en SMTP sur ces ports.</p> <p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, <code>/var/run/dovecot/lmtp</code>).</p> <p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮ + │╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ +25 &lt;────────│&lt;───────────╯ │ + ╰───────────────╯ </pre></div> <p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮ + │╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ </pre></div> <p>Pour les mails entrants.</p> <p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. +d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p> +<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> +<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new </pre></div> <p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> <p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span> +<span style="color: #75715e"># See smtpd.conf(5) for more information.</span> -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> +<span style="color: #75715e">## Certs</span> +pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span> +pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span> -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> +<span style="color: #75715e">## Ports to listen on, and how to listen on them</span> +listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional +listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source +listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> +<span style="color: #75715e">## Aliases</span> +table aliases file:/etc/aliases -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> +<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span> +listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered +<span style="color: #75715e"># coming from amavisd, signed with DKIM</span> +listen on lo port <span style="color: #ae81ff">10027</span> tag Signed -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> +<span style="color: #75715e">## Receiving</span> +<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span> +accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span> +<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span> +accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span> +<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span> -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> +<span style="color: #75715e">## Sending</span> +<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span> +accept tagged Signed <span style="color: #66d9ef">for</span> any relay +<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span> +accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span> +<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span> </pre></div> <p>Expliquons un peu ce fichier de configuration :</p> <ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> +<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration + d&rsquo;emplacement des certificats SSL.</li> <li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> <li>Les alias sont définis juste après</li> <li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> + comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on + taggue les mails sortants comme &ldquo;Signed&rdquo;</li> <li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore + peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième + première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième ligne matchant tous les mails arrivant et la première seulement ceux filtrés, inverser leur sens voudrait dire que les mails seraient toujours renvoyés a amavis</li> <li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au + on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par + DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le + problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au dessus.</li> </ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit +<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne +emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant +qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du POP3[s], différents guides sont trouvables facilement sur internet.</p> <p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span> -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> +<span style="color: #75715e"># basic config</span> +<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log +<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log +<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span> +<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> +<span style="color: #75715e"># authentication</span> +passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +userdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd +<span style="color: #f92672">}</span> -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> +<span style="color: #75715e"># the protocols we use</span> +<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> +<span style="color: #75715e"># ssl config</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring services </span> +<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span> +service imap-login <span style="color: #f92672">{</span> + inet_listener imap <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span> + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> +service lmtp <span style="color: #f92672">{</span> + unix_listener lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666 + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring protocols</span> +<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span> +protocol lda <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +protocol lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> +plugin <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve + <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve +<span style="color: #f92672">}</span> </pre></div> <p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> </pre></div> <p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth +<span style="color: #f92672">}</span> </pre></div> <p><strong>pour identifier les utilisateurs système</strong></p> <p>Ici aussi, voyons comment ce fichier est structuré :</p> <ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. +<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater + leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li> +<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs. Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs mots de passe avec PAM (ou BSDAuth)</li> <li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> + l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> <li>Nous configurons le SSL</li> <li>Le section suivante contient la configuration des services. Nous avons en premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. + désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant + IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons. La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> + fifo qu&rsquo;il utilise</li> <li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> <li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et quel dossier utiliser pour sa configuration.</li> @@ -263,101 +534,100 @@ POP3[s], différents guides sont trouvables facilement sur internet.</p> a deux choses : signer les emails sortants, et filtrer les emails entrants. Il doit donc écouter sur les port 10026 pour les signatures et 10024 pour le filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun +SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les +Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les modifications nécessaires a la fin du fichier.</p> <p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) <code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span> -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> +<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span> -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> +<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span> + <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span> + <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span> + <span style="color: #f8f8f2">}</span> +<span style="color: #f8f8f2">);</span> -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span> +<span style="color: #f8f8f2">};</span> -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> +<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span> +<span style="color: #f8f8f2">};</span> -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> +<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span> +<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span> </pre></div> <p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se +- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails + sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se trouve la clé privée servant a signer les emails. - le second définit les options DKIM que nous souhaitons utiliser comme défaut. Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> - nous définissons ensuite les ports sur lesquels nous allons écouter, puis les paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel + ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel ils viennent. - nous savons que les emails venants du port 10026 sont sortants, nous les traitons donc comme tel - le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre + sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a + 4871</a>. Nous déclarons l&rsquo;adresse a prévenir en cas de spam/virus venants de notre système, et que nous voulons être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de + puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature + les notifications de succès d&rsquo;envoi. Et voila!</p> +<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en fait inclus par défaut dans amavis.</p> <p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un +Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe +différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un tutorial</a>) mais de nombreuses autre méthodes existent. Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span> +<span style="color: #75715e"># report_safe 1</span> +<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span> +<span style="color: #75715e"># use_bayes 1</span> +<span style="color: #75715e"># bayes_auto_learn 1</span> +<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span> +<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span> +<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span> +<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span> +<span style="color: #75715e"># shortcircuit BAYES_99 spam</span> +<span style="color: #75715e"># shortcircuit BAYES_00 ham</span> -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> +<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span> </pre></div> @@ -365,44 +635,43 @@ Il nous reste encore a configurer spamassassin :</p> le required_score pour ma part.</p> <p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/%D/freebsd-online-mfsbsd/<p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad) +<p>Bon courage pour votre hosting de mail ensuite&hellip;</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad) Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>) -et n'ayant pour différentes raisons pas eu l'occasion de le faire sur mon -<a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, -j'ai commencé a chercher comment le faire sur ce serveur.</p> -<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu +et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, +j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p> +<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums -d'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> -<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), -ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur +d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> +<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), +ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur alternatif, minimaliste et simplifié pour FreeBSD.</p> <p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le -panel Online. Une fois cela fait, lancez une console, puis téléchargez l'image +panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis -choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter -sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout +choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter +sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout a fait classique va démarrer. Une fois ceci fait, la partie importante arrive: -mfsbsd contient un script d'installation root-on-zfs, nommé logiquement +mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement zfsinstall, qui va se charger de tout le travail pour nous.</p> <p>Utilisez donc ce script ainsi : </p> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, wipons le MBR :</span> -<span class="n">dd</span> <span class="o">&lt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span> -<span class="cp"># maintenant, installons le système</span> -<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span> +dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1 +<span style="color: #75715e"># maintenant, installons le système</span> +zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c </pre></div> <p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée, -<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D'autres options +<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous convient pas.</p> <p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf :</p> -<div class="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">&quot;YES&quot;</span> -<span class="n">sshd_load</span><span class="o">=</span><span class="s">&quot;YES</span> -<span class="n">hostname</span><span class="o">=</span><span class="s">&quot;whatever&quot;</span> -<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">&quot;DHCP&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span> +<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span> +<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span> +<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span> </pre></div> @@ -410,11 +679,10 @@ système) et éditez /etc/rc.conf :</p> physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez maintenant un système FreeBSD tout propre installé sur zfs a découvrir et utiliser!</p> -<p>Voila, c'est la fin de ce tutoriel. -(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu +<p>Voila, c&rsquo;est la fin de ce tutoriel. +(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu crédible, disons)</p> -<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter -<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, +<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, <a href="https://twitter.com/petitefanfare">petitefanfare</a>, <a href="https://twitter.com/capet_ebooks">capet_ebooks</a>, <a href="https://twitter.com/zengisse">zengisse</a>, @@ -422,146 +690,146 @@ et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont code</a>, qui vient de <a href="https://twitter.com/m1sp">@m1sp</a> (<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p> -<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/%D/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie +<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: <a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès +ce qui peut avoir l&rsquo;effet de rendre légèrement parano. Si vous considérez que +c&rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> <p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être remarqué quelque chose récemment : il se trouve que le certificat qui permet de desservir ce site a changé.</p> <p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", +doigts sortis d&rsquo;un endroit particulier du corps de l&rsquo;admin/auteur de ce &ldquo;blog&rdquo;, qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système +du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&rsquo;un système fonctionnel utilisant cette compréhension récemment acquise.</p> <p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très +être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&rsquo;est très simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat +<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc&hellip; Bref, un certificat différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs +<p>Il s&rsquo;avère que c&rsquo;est a la fois très peu pratique a utiliser (les utilisateurs doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat +changement de sous-domaine conduit a un message d&rsquo;erreur, etc) et pas plus +sécurisé que d&rsquo;avoir un seul certificat wildcard. J&rsquo;ai donc généré un certificat pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> +pas <code>*.wxcafe.net</code>, et qui sera donc utilisé&hellip; bah pour <code>wxcafe.net</code>.</p> <p>Il serait préférable de faire des redirections automatiques des adresses http vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront +self-signed, il me semble préférable que l&rsquo;arrivée sur le site ne commence pas +par une page firefox disant &ldquo;Something&rsquo;s Wrong!&rdquo;, et ces redirections ne seront donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus +<p>De plus, après la lecture de l&rsquo;article de blog sur Lavabit dont le lien est plus haut, il semble intéressant (et assez important) de faire en sorte que le serveur utilise en priorité (et si possible, uniquement) des ciphers supportant PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les +communications avec ce serveur soient future-proof, c&rsquo;est a dire que, même si +quelqu&rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les communications passées.</p> <p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes +l&rsquo;implémentation : <br /> +Pour générer la clé, tout d&rsquo;abord, il convient d&rsquo;utiliser les commandes suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096 +# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation +sudo openssl req -new -key example.key -out example.csr +# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">&quot;Common Name&quot;</span> devant contenir le FQDN +sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt +# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">&#39;</span>une durée de vie de <span style="color: #ae81ff">3</span> ans </pre></div> <p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser <code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> +Une fois la clé générée, il faut dire aux différents services de l&rsquo;utiliser, et +de n&rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service. +Je vais lister ici les methodes pour quelques services que j&rsquo;utilise :</p> <h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3 +<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">&quot;</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \ + EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \ + EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">&quot;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">&quot;EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">&#39;abord, lancez la commande suivante :</span> +<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span> +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.key&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.crt&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">}</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span> </pre></div> <h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt +<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key +<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes +<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong +<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high +<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS +<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt +<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3 +<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes +<span style="color: #75715e"># [...]</span> </pre></div> <h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.crt +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL </pre></div> -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter +<p>Voila. Pour d&rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future +<p>Cela étant dit, je conseille a tout le monde d&rsquo;aller voir la conférence dans le +disclaimer, et tant qu&rsquo;a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/%D/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de +implémentation d&rsquo;une technologie &ldquo;remplaçant&rdquo; le système de CAs qui existe +actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de domaines en différentes informations : adresses IPv4, adresses IPv6, certificats DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour @@ -569,54 +837,53 @@ simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a <a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a <a href="http://5.39.76.46">http://5.39.76.46</a>).</p> -<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque -en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que +<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque +en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que de nos jours. La configuration des serveurs DNS peut ainsi être assez contre intuitive. Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses enregistrements est important.</p> -<p>Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même +<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d'écrire, par exemple, -<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le -<code>.</code> n'est pas obligatoire et la progression se fait de droite a gauche. Par +du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le +<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine <code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point a la fin de façon courante.</p> -<p>Le reverse DNS est une variante du DNS "classique" permettant de résoudre les +<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre +Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger +quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS +sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre habituel</em></strong>, et du faux domaine .in-addr.arpa Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR 76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p> -<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, +<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord, quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des -"enregistrements", records en anglais. Par exemple, un record A indique une +&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom de domaine que vous donnez en argument, mais en précisant un autre type de -record, vous pouvez obtenir n'importe quelle information : par exemple, <code>dig NS +record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS wxcafe.net</code> devrait vous renvoyer</p> -<div class="highlight"><pre><span class="p">;</span> <span class="o">&lt;&lt;&gt;&gt;</span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o">&lt;&lt;&gt;&gt;</span> NS wxcafe.net -<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd -<span class="p">;;</span> Got answer<span class="o">:</span> -<span class="p">;;</span> <span class="o">-&gt;&gt;</span>HEADER<span class="o">&lt;&lt;-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span> -<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span> -<span class="p">;;</span> QUESTION SECTION<span class="o">:</span> -<span class="p">;</span>wxcafe.net. IN NS +<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> -<span class="p">;;</span> ANSWER SECTION<span class="o">:</span> -wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net. -wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net. +<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span> -<span class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec -<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span> -<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span> -<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span> </pre></div> @@ -626,12 +893,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et &l chacun fait autorité pour lui même, et le problème évident est que le résolveur ne peut résoudre la query si il est renvoyé encore et encore vers le même serveur. Il convient donc de définir dans le même fichier de configuration -l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième -loop, se rendra compte qu'il est en train de faire une boucle infinie et -demandera l'adresse au serveur auquel il est connecté. La première indication de +l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième +loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et +demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de direction se fait grâce au serveur du TLD.</p> <p>La configuration de bind est assez simple dans le principe, le plus complexe -étant en fait d'écrire les fichiers de zone. +étant en fait d&rsquo;écrire les fichiers de zone. La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il existe 4 fichiers de configuration principaux : <code>named.conf</code>, <code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>. @@ -641,48 +908,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher named.conf.options contient les options que vous rajoutez pour changer le comportement de bind.</p> <p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans -lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, +lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité, deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs (notamment mon accès chez moi). </p> -<p>Examinons tout d'abord les fichiers de configuration de named. -<code>named.conf.local</code> contient les définitions des zones forward et reverse. +<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse. Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont -gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce +gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence -principale étant que l'un héberge en slave les masters de l'autre. +principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre. Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p> -<div class="highlight"><pre><span class="n">zone</span> <span class="s">&quot;wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;home.wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> </pre></div> @@ -693,250 +959,247 @@ tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est assez parlant.</p> <p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit <code>/etc/bind/master/wxcafe.net</code> : </p> -<div class="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span> - <span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span> - <span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span> - <span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span> - <span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span> - <span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span> - <span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span> + <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span> + <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span> + <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span> + <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span> + <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span> + <span style="color: #f8f8f2">)</span> -<span class="p">;</span> <span class="n">Name</span> <span class="n">servers</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">SPF</span> <span class="s">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> -<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> -<span class="p">;</span> <span class="n">Aliases</span> -<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="p">;</span> <span class="p">[...]</span> -<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span> +<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span> +<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span> -<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span> +<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> </pre></div> <p>Alors. Expliquons ligne par ligne.<br /> -Tout d'abord, le TTL (time to live) est un paramètre définissant le temps +Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps pendant lequel les serveurs récursif (qui font un cache des données) doivent cacher ce fichier de zone. <br /> Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, wxcafe.net. <br /> Maintenant, nous arrivons a un record important : SOA (Start of Authority). -Ce record prend de nombreux arguments, dans l'ordre :<br /> +Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br /> - Le nameserver autoritaire pour le nom de domaine en question,<br /> - - L'adresse email du responsable de cette zone, avec le premier point + - L&rsquo;adresse email du responsable de cette zone, avec le premier point remplacé par un @, </p> <p>puis entre parenthèses :<br /> - - Le numéro de série ("version" du fichier de zone, ici au format + - Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format YYYYMMDDNN) <br /> - La période de refresh, période entre chaque mise a jour du nameserver authoritaire secondaire, <br /> - La période de retry, le temps entre chaque essai de mise a jour si le nameserveur authoritaire primaire est indisponible, <br /> - - La période d'expire, le temps qu'attendra le serveur autoritaire + - La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire secondaire avant de supprimer les informations de son cache si le primaire reste indisponible, et enfin <br /> - - La période de TTL négatif, le temps qu'attendra le serveur secondaire + - La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire avant de ne plus offrir les informations de cette zone si le serveur primaire est injoignable. </p> -<p>Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus +<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus important a lire (pour les humains en tout cas). Continuons : </p> <p>NS (nameserver) permet de désigner les différents nameservers faisant autorité pour ce domaine. </p> -<p>MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. -SPF est un record d'authentification pour les emails. -Les records A désignent l'association entre un nom de domaine et une adresse +<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine. +SPF est un record d&rsquo;authentification pour les emails. +Les records A désignent l&rsquo;association entre un nom de domaine et une adresse IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site -n'est pas encore en IPv6.</p> +n&rsquo;est pas encore en IPv6.</p> <p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de -mettre en place des domaines exactement semblables a d'autre (ce qui permet par -exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p> +mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par +exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p> <p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet de changer la valeur du @ et des noms de domaine non complets (qui ne se terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et -l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on -l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, +l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on +l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, cela permet de rediriger les requêtes nous parvenant et demandant un domaine se trouvant sous home.wxcafe.net.</p> <p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques -différences n'étant en fin de compte que des différences de valeurs (dues au -fait que, eh bah, c'est pas les mêmes domaines...).</p> -<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est +différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au +fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p> +<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC 1034</a> et le <a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant -aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/%D/nat/<p>NAT (Network Address Translation) in a word?<br /> -It's complicated. Very. Don't do it, you'd damage your brain. </p> -<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/%D/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. -Wood. Il est assez connu comme étant l'un des pires films jamais sortis. Rempli -d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort -d'un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> -<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l'indique), -et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite -des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a -introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des -ressources appartenant a d'autres ordinateurs a distance, un support de -l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne +aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br /> +It&rsquo;s complicated. Very. Don&rsquo;t do it, you&rsquo;d damage your brain. </p> +<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. +Wood. Il est assez connu comme étant l&rsquo;un des pires films jamais sortis. Rempli +d&rsquo;erreur de montage, d&rsquo;effets spéciaux au rabais, et ayant même connu la mort +d&rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> +<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l&rsquo;indique), +et qui a été pensé comme le successeur d&rsquo;Unix. Il est conçu comme une poursuite +des concepts unixiens jusqu&rsquo;à leur but naturel. Ainsi, c&rsquo;est Plan9 qui a +introduit le concept d&rsquo;UnionFS, le protocole 9P qui permet d&rsquo;acceder a des +ressources appartenant a d&rsquo;autres ordinateurs a distance, un support de +l&rsquo;unicode par défaut et sur tout le système (a l&rsquo;inverse d&rsquo;Unix, qui fonctionne a la base en ASCII), un support de ProcFS amélioré, une interface graphique par -défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p> -<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit -d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a -quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt +défaut, et d&rsquo;autres améliorations sur les thèmes de base que propose Unix. </p> +<p>Cependant, Plan9 n&rsquo;a jamais été véritablement utilisé pour quoi que ce soit +d&rsquo;autre que la recherche en systèmes, et c&rsquo;est dommage, parce que Plan9 a +quelque chose de très intéressant à proposer. En effet, en ces jours d&rsquo;intérêt grandissant pour le klaoude et la délocalisation a la fois du processing et des -données, et bien que Plan9 ait été créé bien avant que le terme "cloud -computing" n'apparaisse pour la première fois, il semble que ce système ait été +données, et bien que Plan9 ait été créé bien avant que le terme &ldquo;cloud +computing&rdquo; n&rsquo;apparaisse pour la première fois, il semble que ce système ait été conçu pour apporter cette délocalisation tant rêvée.</p> -<p>En effet, même si l'on considère que les nouveautés qu'il apporte par rapport a -Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà -conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système -d'exploitation ultime en terme de partage de ressources et de données. -Ainsi, le fait que 9P permette de considérer toutes les ressources d'un système -distant comme n'étant qu'une poignée de fichiers permet de le monter comme -n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder +<p>En effet, même si l&rsquo;on considère que les nouveautés qu&rsquo;il apporte par rapport a +Unix ne sont pas extraordinaires en soit (alors qu&rsquo;elles sont déjà +conséquentes), lorsqu&rsquo;on les prend ensemble, elles font de Plan9 le système +d&rsquo;exploitation ultime en terme de partage de ressources et de données. +Ainsi, le fait que 9P permette de considérer toutes les ressources d&rsquo;un système +distant comme n&rsquo;étant qu&rsquo;une poignée de fichiers permet de le monter comme +n&rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse -interagir avec les autres, même s'ils sont hétérogènes (c'est a dire provenant -de machines différentes), permet d'utiliser les ressources d'une machine -distante comme si elle était présente localement. Le mécanisme d'UnionFS permet +interagir avec les autres, même s&rsquo;ils sont hétérogènes (c&rsquo;est a dire provenant +de machines différentes), permet d&rsquo;utiliser les ressources d&rsquo;une machine +distante comme si elle était présente localement. Le mécanisme d&rsquo;UnionFS permet de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers de plusieurs machines a la fois (ce qui permet une délocalisation des données bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p> <p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de -parler d'ordinateur lorsque le concept même du système est d'être composé de +parler d&rsquo;ordinateur lorsque le concept même du système est d&rsquo;être composé de clusters eux mêmes composés de machines hétérogènes. Le système de fichier -virtuel /net fourni par le kernel de Plan9 permet d'implémenter très facilement -différents concepts réseaux : en montant le /net d'un ordinateur du réseau local -sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur -du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur +virtuel /net fourni par le kernel de Plan9 permet d&rsquo;implémenter très facilement +différents concepts réseaux : en montant le /net d&rsquo;un ordinateur du réseau local +sur celui servant de gateway vers l&rsquo;internet, on crée un NAT vers cet ordinateur +du réseau local. En montant le /net d&rsquo;un ordinateur distant sur un ordinateur local via le protocole 9P sécurisé, on crée un VPN : les connections locales se -font en utilisant l'accès de l'ordinateur distant, et les connections entre les +font en utilisant l&rsquo;accès de l&rsquo;ordinateur distant, et les connections entre les deux sont chiffrées. </p> <p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour -partager leur "puissance" de calcul en userspace, des superordinateurs pour -lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels -JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait +partager leur &ldquo;puissance&rdquo; de calcul en userspace, des superordinateurs pour +lesquels le noyau Linux s&rsquo;est doté du support de jusqu&rsquo;à 4096 CPUs, des OS tels +JoliOS qui promettent une integration du klaoude alors qu&rsquo;ils ne sont en fait que des navigateurs web a peine améliorés et des services de stockage en ligne -qui promettent un accès universel a toutes nos données alors qu'ils ne proposent +qui promettent un accès universel a toutes nos données alors qu&rsquo;ils ne proposent que de les garder a disposition par le web, Plan9 promettait une technologie de partage des ressources système et de données, une intégration du réseau dans le système particulièrement poussée, un environnement graphique supporté par le -basesystem et non greffé par dessus comme l'a été X11, et de nombreuses autres +basesystem et non greffé par dessus comme l&rsquo;a été X11, et de nombreuses autres améliorations sur Unix.</p> -<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative, -et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de +<p>Malheureusement, il n&rsquo;a jamais été adopté de façon véritablement significative, +et ce pour une raison très Unixiènne : &ldquo;worse is better&rdquo;. En effet, le parc de machines Unix déjà installées était suffisamment performant et fonctionnel pour que des solutions soient développées au dessus du système pour remplir les mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de -Linux, FUSE, etc...</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/%D/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler +Linux, FUSE, etc&hellip;</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler le texte (ce qui se montre relativement indispensable dans un environnement Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu connu en détail, et la plupart du temps une seule fonction est utilisée : le remplacement de texte.<br /> Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p> -<p>Tout d'abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais -aussi un langage de manipulation de texte dérivé de <code>ed</code>, l'éditeur original. -<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas -personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des -machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs -dits "visuels", tels que vim, emacs, et globalement tous les éditeurs ayant un +<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais +aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas +personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des +machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs +dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du -concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d'une ligne a la fois. +concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois. En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p> -<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d'empêcher -l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui -permet de rediriger l'output dans le fichier d'input. Cela dit, l'intérêt unique +<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher +l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui +permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique du programme est son langage de manipulation de texte.</p> <p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des /). Ainsi, la commande de base dans <code>sed</code> est </p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/ </pre></div> <p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de -n'exécuter les commandes qui suivent que sur ces lignes.) </p> +n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p> <p><br/> -La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s'utilise de +La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de la façon suivante : </p> -<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span> </pre></div> <p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une regex) par [new text] (qui doit être un texte fixe, avec quelques exceptions), en appliquant [options], la plus connue des options étant <code>g</code>, -qui permet d'appliquer la commande affectée a toutes les occurrences du texte +qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte matché sur la/les lignes concernée-s.<br /> -Les exceptions a la "fixité" de [new text] sont particulièrement +Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard, -excepté le fait qu'il permet jusqu'à 9 "holding spaces", qui sont délimités par +excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par \( et \), et qui sont représentées dans le texte de remplacement par \1 à \9.</p> <p>Par exemple, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39; </pre></div> -<p>sur le texte "hello world world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world </pre></div> <p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le texte original. Ainsi, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&amp;</span> <span class="n">world</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39; </pre></div> -<p>sur le texte "hello world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world </pre></div> <p><br/></p> <p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans -l'espace courant :</p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span> +l&rsquo;espace courant :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p </pre></div> <p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire -dédié, que j'appelle l'espace courant (pattern space en anglais). La commande -<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit -le pattern space de façon a ce qu'il ne contienne que les lignes matchant, et le -<strong>p</strong> affiche donc ce dernier.</p> -<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s'utilisent ainsi :</p> -<div class="highlight"><pre><span class="n">c</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit +le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p> +<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \ +[text] </pre></div> <p>De la même façon, pour le i : </p> -<div class="highlight"><pre><span class="n">i</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \ +[text] </pre></div> <p>Et de même pour a. </p> -<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'elles +<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong> sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme @@ -947,26 +1210,25 @@ space, et non sur la ligne en question.</p> /[regex]/d <strong>d</strong> (delete) supprime les contenus du pattern space.</p> <p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je -parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé -au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier <em>en +parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé +au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a -ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou -bien la confidentialité d'un support de stockage, par exemple. Nous allons ici +ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou +bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici voir comment mettre en place un système de ce type sous GNU/Linux. Cet article -n'a pas pour but de vous apprendre a mettre en place un système basé sur une -procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en -jeu dans l'utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de -présenter un rapide tutoriel concernant la création d'un support chiffré sur +n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une +procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en +jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de +présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p> <p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système -du noyau Linux, et s'appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement -de disques. Comme son nom l'indique, device-mapper est un système qui a pour but +du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement +de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère -comme "block device" tout fichier spécial (en gros, les fichiers disques dans -<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le +comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de -fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. -Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. +fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad. +Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes. Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans /dev, et device-mapper est requis pour pouvoir en voir les partitions (qui apparaîtront donc dans /dev/mapper)</p> @@ -976,59 +1238,59 @@ déchiffre a la volée tous les accès disques a ce périphérique non chiffré traduisant sur le système de fichier chiffré, le tout de manière tout a fait transparente pour les applications utilisant le disque en question. Cela induit bien entendu une baisse de performance relativement significative dans le cas -d'un chiffrement du système de fichier root, mais quasiment insignifiante dans +d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans le cas de chiffrement de partitions de données.</p> -<p>D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer +<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer si le système de fichier root est chiffré. Dans ce cas précis, la procédure de -boot <strong><em>doit</em></strong> s'appuyer sur une image initrd (l'initrd est un système de +boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de fichier minimal qui sert uniquement a initialiser le système. Les kernels de base de la plupart des distributions GNU/Linux en utilisent un dans tous les cas, pour des raisons de compatibilité) et sur une partition de boot qui elle -n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge +n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et -charge l'initrd en RAM, celui-ci a son tour lance un script permettant de +charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de charger les modules nécessaires a la suite du boot (que ce soit pour un boot sans disque root local, ou bien comme ici avec un système chiffré), puis le -système de fichier "cible" est remonté sur la racine, et l'initrd est démonté -est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend +système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté +est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend depuis le système de fichier maintenant monté sur la racine.</p> <p>La méthode la plus évidente pour contourner le chiffrement du disque est alors -de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par +de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par un autre modifié, copiant par exemple la phrase de passe permettant de déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir -contre ce genre d'attaques : l'une des plus simple est de faire un checksum du +contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot -que l'initrd présente toujours le même checksum. Cela dit, cette méthode a -l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès +que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a +l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès a un fichier initrd reconnu comme sûr.<br /> Une autre approche consisterait a placer le système de fichier /boot sur un périphérique dédié, protégé en écriture de façon matérielle (par exemple, une carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et -protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un -attaquant de modifier ce système de fichier, et l'initrd est alors toujours de +protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un +attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de confiance. Cependant, cela a pour conséquence de rendre la mise a jour de -l'initrd et du noyau <em>beaucoup</em> plus difficile qu'elle ne le serait sans.</p> +l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p> <p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop, -l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est -maintenant responsable de l'utilisation <em>userspace</em> de dm-crypt, qui pour sa +l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est +maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la -manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier +manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi obligatoirement être capables de le faire en tant que root. </p> <p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br /> -Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, -dans une situation réelle ou l'on cherche a chiffrer un disque, il convient -d'utiliser /dev/urandom comme source, pour éviter la détection du système de +Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela, +dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient +d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de fichier chiffré sur le disque. Ici, par exemple, nous allons faire : </p> -<div class="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img </pre></div> <p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img </pre></div> @@ -1038,34 +1300,34 @@ passphrase. Il convient ici de choisir une passphrase particulièrement sûre, puisque toute personne ayant accès a la passphrase aura aussi accès au disque et donc a vos secrets.<br /> Une fois cela fait, nous allons mapper cette image : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto </pre></div> <p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes, -puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous -voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En +puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous +voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les -systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque -qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque +systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque +qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque virtuel qui correspond a notre image. Il se comporte comme toute partition, et peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. Il se comporte en effet comme une partition, et non comme un véritable disque.) -Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de -le faire, pour pouvoir l'utiliser. </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> +Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de +le faire, pour pouvoir l&rsquo;utiliser. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto </pre></div> <p>Maintenant que notre disque est formaté, il peut être monté : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt </pre></div> <p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat suivant : </p> -<div class="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) </pre></div> @@ -1075,51 +1337,51 @@ sont (en fonction de votre passphrase) en sécurité. </p> <ul> <li> <p>Pour monter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o">&lt;</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt; +sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt; </pre></div> </li> <li> <p>Pour démonter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt; +sudo cryptsetup luksClose &lt;nom de disque virtuel&gt; </pre></div> </li> </ul> -<p>Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de +<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de créer et de monter/démonter vos images/disques chiffré-e-s en une seule commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p> <p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable disque (ou clé usb, ou autre), il est préférable de créer une partition de taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code> -pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/%D/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation +pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a &ldquo;un peu&rdquo; changé récemment.</p> +<p>Du coup, expliquons. J&rsquo;ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même +occasion découvert <a href="http://getpelican.com">pelican</a>. J&rsquo;ai tout de suite accroché a ce générateur de +site statique en python, du fait de son efficacité, de sa facilité d&rsquo;utilisation et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au +fichiers markdown ou reStructuredText, les passe a la moulinette d&rsquo;un &ldquo;thème&rdquo; +constitué de templates pour les fichiers html et l&rsquo;organisation du projet et +d&rsquo;une partie &ldquo;statique&rdquo; contenant le css, et les autres fichiers nécessaires au projet, et en fait des pages html. </p> <p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span> +<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span> + <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span> </pre></div> @@ -1127,116 +1389,116 @@ projet, et en fait des pages html. </p> django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a +<p>L&rsquo;un des grands avantages de pelican est aussi la facilité qu&rsquo;il offre quand a la mise a jour du blog.<br /> En effet, il offre un système de Makefiles permettant, grâce a de nombreuses cibles de compilation, de régénérer le site entier, de ne générer que les fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... +fichiers n&rsquo;existant pas la dernière fois, etc&hellip; La gestion du projet en devient donc très simple, puisque après avoir écrit un article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> <p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est +pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&rsquo;est moi +qui ait modifié les templates et le css), c&rsquo;est lisible (puisque c&rsquo;est du +python, par opposition au PHP&hellip;), et c&rsquo;est plus &ldquo;efficace&rdquo;. Le markdown est très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus +les articles, je n&rsquo;ai pas besoin d&rsquo;un accès continu au net, bref, c&rsquo;est plus efficace.</p> <p>En ce qui concerne les points négatifs : </p> <ul> <li> <p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a + Je vous propose de vous référer a l&rsquo;article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a mon avis sur ce sujet.</p> </li> <li> <p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a + Il va bientôt être remis, c&rsquo;est juste un manque de temps de ma part, mais vu + que toutes les pages passent par les mêmes templates, c&rsquo;est assez facile a faire.</p> </li> <li> <p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> + Pourquoi c&rsquo;est dans les points négatifs, ca?</p> </li> <li> -<p>Temps d'adaptation et d'appréhension du système: +<p>Temps d&rsquo;adaptation et d&rsquo;appréhension du système: Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca + réguliers sur le blog, c&rsquo;est parce que j&rsquo;apprend a me servir de ce système + et que j&rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous + les cas ca me permet d&rsquo;apprendre plein de choses, donc je mets plutôt ca dans la catëgorie positive.</p> </li> </ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/%D/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu -pour avoir développé Cydia, un "app store" alternatif pour les iTrucs), +<p>Voila, c&rsquo;est mon retour d&rsquo;expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu +pour avoir développé Cydia, un &ldquo;app store&rdquo; alternatif pour les iTrucs), après avoir reçu une paire de Google glass de la part de Google (de -façon assez évidente...), a trouvé intéressant d'obtenir un accès root -sur celles-ci, ce qu'il a accompli très rapidement. Des démentis de la +façon assez évidente&hellip;), a trouvé intéressant d&rsquo;obtenir un accès root +sur celles-ci, ce qu&rsquo;il a accompli très rapidement. Des démentis de la part de Google et de certains autres sites sont vite arrivés, disant que les lunettes possédaient un bootloader débloqué et que de fait, le root était facile a obtenir : il suffisait de débloquer le bootloader, -d'extraire l'OS, de le rooter hors-fonctionnement, puis de le +d&rsquo;extraire l&rsquo;OS, de le rooter hors-fonctionnement, puis de le réinstaller, rooté, sur les lunettes.</p> <p>Le fait est que de débloquer le bootloader laisse une trace permanente -sur les lunettes, et que Saurik n'a pas utilisé cette technique pour +sur les lunettes, et que Saurik n&rsquo;a pas utilisé cette technique pour rooter sa paire. Voyons comment il a fait :</p> -<p><em>Je tiens tout d'abord a préciser que toutes les informations qui vont +<p><em>Je tiens tout d&rsquo;abord a préciser que toutes les informations qui vont suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la -partie "How does this exploit work".  Je tente d'apporter ma maigre +partie &ldquo;How does this exploit work&rdquo;.  Je tente d&rsquo;apporter ma maigre contribution a cette explication.</em></p> -<p>Donc, d'après les témoignages des quelques utilisateurs de Glass dans le +<p>Donc, d&rsquo;après les témoignages des quelques utilisateurs de Glass dans le monde, il semblerait que ces dernières fonctionnent avec un système -d'exploitation Android, avec une nouvelle interface, mais avec les mêmes +d&rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes outils internes: un kernel Linux, des outils userland GNU et une machine virtuelle Java Dalvik pour les applications.</p> -<p>Saurik a donc cherché un exploit connu pour cette version d'android, et -l'a appliqué a son problème. L'exploit en question est relativement -simple. Depuis la version 4.0 d'android, le système permet la sauvegarde +<p>Saurik a donc cherché un exploit connu pour cette version d&rsquo;android, et +l&rsquo;a appliqué a son problème. L&rsquo;exploit en question est relativement +simple. Depuis la version 4.0 d&rsquo;android, le système permet la sauvegarde des données des différentes applications, une a une, via ADB (Android -Debug Bridge, un protocole USB permettant l'accès a de nombreuses +Debug Bridge, un protocole USB permettant l&rsquo;accès a de nombreuses fonctions avancées des machines fonctionnant sous android, dont, entre -autre, un shell, un accès au logs de debugging, etc... Cette +autre, un shell, un accès au logs de debugging, etc&hellip; Cette fonctionnalité est bien entendu désactivable.) Ce backup est très simple : il crée un fichier .tgz contenant le dossier de configuration de -l'application. Lors de la restauration, le système supprime la -configuration existante, puis la remplace par celle dans l'archive gzip.</p> +l&rsquo;application. Lors de la restauration, le système supprime la +configuration existante, puis la remplace par celle dans l&rsquo;archive gzip.</p> <p>Le problème de sécurité vient du fait que les applications android voient leurs données stockées dans /data/data/identifiant/, et que -/data/ a pour permissions drwxrwx--x  27  system  system, ce qui +/data/ a pour permissions drwxrwx&ndash;x  27  system  system, ce qui signifie que seul system et les membres du groupe system peuvent lire dessus. Or, le fichier /data/local.prop définit de nombreux paramètres -au démarrage, et notamment un qui permet au système de déterminer s'il -fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur +au démarrage, et notamment un qui permet au système de déterminer s&rsquo;il +fonctionne dans une VM ou sur un véritable appareil. S&rsquo;il fonctionne sur une machine virtuelle, il donne les droits root a tout utilisateur se -connectant via ADB, ce qui est ce que l'on cherche pour l'instant. Le +connectant via ADB, ce qui est ce que l&rsquo;on cherche pour l&rsquo;instant. Le fait que /data/ appartienne a system veut dire que le programme de restauration doit être setuid pour accéder aux données a l’intérieur qui -appartiennent a root (soit toutes les applications système d'android, -dont l'application paramètres, et, dans ce cas précis, l'application de +appartiennent a root (soit toutes les applications système d&rsquo;android, +dont l&rsquo;application paramètres, et, dans ce cas précis, l&rsquo;application de log système présente sur les google glass de test. Ainsi, nous avons un processus tournant en tant que root, qui va écrire sur une partition qui nous intéresse des données que nous possédons.</p> -<p>Cependant, un problème reste : le système de restauration d'Android +<p>Cependant, un problème reste : le système de restauration d&rsquo;Android vérifie les données avant de restaurer, et ne restaure pas les symlinks, -ce qui nous empêche d'avoir accès directement a /data/local.prop, le -fichier qu'on cherche a modifier. Cela dit, il nous reste une +ce qui nous empêche d&rsquo;avoir accès directement a /data/local.prop, le +fichier qu&rsquo;on cherche a modifier. Cela dit, il nous reste une possiblité. Plaçons un dossier world-writable dans le fichier de backup, et nous pourrons écrire dedans pendant quelques secondes, le temps que la restauration se termine et que le système remette les permissions en place. Ainsi, nous pouvons créer le fichier /data/local/com.google.glass.logging/whatev/x, lien vers /data/local.prop, et nous avons un toujours un processus tournant en -tant que root qui est en train d'écrire dans ce dossier.</p> +tant que root qui est en train d&rsquo;écrire dans ce dossier.</p> <p>Donc, nous allons lancer deux processus en même temps : </p> <ul> <li> <p>Le premier tentera en boucle de créer le symlink. Il sera consitué de la commande suivante, depuis un shell sur les lunettes :</p> -<div class="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">&gt;/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span> -<span class="k">do</span> <span class="o">:</span> -<span class="n">done</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&gt;/dev/null +do : +done </pre></div> @@ -1245,10 +1507,10 @@ tant que root qui est en train d'écrire dans ce dossier.</p> <p>Le deuxième sera le processus de restauration de notre exploit. Celui ci, pour une plus grande chance de réussite, devra être suffisamment lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x, - pour qu'il crée whatev, prenne du temps a copier bigfile, puis écrive + pour qu&rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive dans x après que le symlink soit effectif. La commande sera, depuis - l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span> + l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab </pre></div> @@ -1257,111 +1519,111 @@ tant que root qui est en train d'écrire dans ce dossier.</p> world-readable. Il va commencer a copier le fichier bigfile.<br /> - Le processus de symlink va créer le lien /data/data/com.google.glass.logging/whatev/x, pointant vers - /data/local.prop, puis rendre l'âme proprement.<br /> + /data/local.prop, puis rendre l&rsquo;âme proprement.<br /> - Le processus de restauration, ayant enfin fini de copier whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui est lié a /data/local.prop. Comme le processus est setuid root, il ne se rendra compte de rien, et écrira tout dans /data/local.prop.</p> </li> </ul> -<p>And voilà! On a écrit ce que l'on veut dans /data/local.prop, ce qui -nous permet de faire croire a android qu'il tourne dans une machine -virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui -indique au noyau qu'il tourne dans qemu, un système de VM).</p> -<p>Il nous reste a rebooter, depuis l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<p>And voilà! On a écrit ce que l&rsquo;on veut dans /data/local.prop, ce qui +nous permet de faire croire a android qu&rsquo;il tourne dans une machine +virtuelle (ce que l&rsquo;on veut, c&rsquo;est en fait &ldquo;ro.kernel.qemu=1&rdquo;, qui +indique au noyau qu&rsquo;il tourne dans qemu, un système de VM).</p> +<p>Il nous reste a rebooter, depuis l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Puis nous remontons la partitions système en lecture/écriture (r/w), depuis le host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;mount -o remount,rw /system&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;mount -o remount,rw /system&quot; </pre></div> -<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span> +<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l&rsquo;appareil :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin </pre></div> <p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir l’exécuter plus tard :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;chmod 6755 /system/xbin/su&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;chmod 6755 /system/xbin/su&quot; </pre></div> <p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir redémarrer normalement :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;rm /data/local.prop&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;rm /data/local.prop&quot; </pre></div> <p>Enfin, nous redemarrons a nouveau :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Et voila, une paire de google glass rootée!</p> -<p>Il est bon de préciser que cette manipulation n'est possible que parce -que les lunettes tournent sous une ancienne version d'android, et que ce +<p>Il est bon de préciser que cette manipulation n&rsquo;est possible que parce +que les lunettes tournent sous une ancienne version d&rsquo;android, et que ce bug a été fixé depuis.</p> <p>Il serait aussi interessant de couvrir les problèmes de vie privée -qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p> -<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/%D/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il -s'agit de posséder son propre serveur, et donc, par extension, ses +qu&rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.</p> +<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il +s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses données. </p> -<p>Bien entendu, il n'est pas nécessaire pour cela de posséder +<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder physiquement son propre serveur (encore que ce soit possible, mais ce -n'est pas le sujet abordé ici.)<br /> +n&rsquo;est pas le sujet abordé ici.)<br /> Nous expliquerons ici les étapes nécessaires pour arriver a avoir un serveur utilisable, du moment ou vous arrivez sur le système fraichement installé, au moment ou vous possédez un serveur avec tous les paquets -nécessaires a l'utilisation que l'on veut en faire ici d'installés. +nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés. Cette partie va consister a paramétrer le système (ici un debian squeeze. Il est bien sur possible de faire la même chose avec a peu près toutes les distributions Linux disponibles, tout comme avec les BSD et tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x -squeeze, parce que c'est une distribution simple a utiliser comme -serveur, stable, et facile a configurer (puisqu'une bonne partie de la +squeeze, parce que c&rsquo;est une distribution simple a utiliser comme +serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la configuration est déjà faite et incluse dans le paquet), donc adaptée au -but de cet article, a savoir rendre l'installation simple et +but de cet article, a savoir rendre l&rsquo;installation simple et compréhensible).</p> -<p>La première chose a faire est bien entendu d'obtenir le serveur en lui +<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui même. Cette partie de la chose ne sera pas traitée dans cet article. Il -existe en effet un nombre infini d'obtenir un serveur, que ce soit en le -louant chez OVH/1&amp;1/n'importe quel autre hébergeur commercial, en -participant a un système d'hébergement collaboratif (je vous laisse +existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le +louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en +participant a un système d&rsquo;hébergement collaboratif (je vous laisse chercher), en achetant un serveur et en le faisant fonctionner de chez -vous, en utilisant un vieux PC... Bref, les possibilités sont multiples. +vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples. Dès lors que vous avez accès a un système debian serveur, peu importe sur quel matériel il fonctionne, et a priori peu importe aussi la manière -dont vous y accédez, le résultat est le même (et la procédure aussi...). +dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;). Dans cet article, nous parlerons de la configuration de base, du moment ou vous avez le serveur vierge dans les mains au moment ou vous installez le serveur http.</p> -<p>Dans cet article, lorsque est précisée le type d'IP a utiliser, il -convient de mettre ce type précisément. Quand le type n'est pas +<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il +convient de mettre ce type précisément. Quand le type n&rsquo;est pas précisée, libre a vous de choisir ipv4 ou ipv6.</p> <p>Bref. Commençons au point ou vous avez un accès root a votre serveur, -n'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou -rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez +n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou +rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe solide sur le compte root. Continuons en allant vite mettre en place le nom de domaine. Pour cela, votre registrar doit vous fournir une -interface vous permettant d'éditer l'entrée DNS pour votre nom de +interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de domaine. </p> -<p>Cette entrée doit donc pour l'instant ressembler a ca :</p> -<div class="highlight"><pre> <span class="o">&lt;</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">&gt;</span> <span class="n">NS</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">A</span> <span class="o">&lt;</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> - <span class="n">IN</span> <span class="n">AAAA</span> <span class="o">&lt;</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> +<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1 + IN MX 1 + IN A &lt;IPv4 de votre serveur&gt; + IN AAAA &lt;IPv6 de votre serveur&gt; </pre></div> <p>Cela vous permet de rediriger tout le trafic se référant a votre nom de domaine vers votre ip (le fonctionnement exact du DNS est assez -compliqué a expliquer, donc on va dire que c'est de la magie pour -l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer +compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour +l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers votre serveur, ce qui est un bon début. Faisons un petit point sécurité ici : pour accéder a votre serveur, il vous suffit actuellement de taper @@ -1370,50 +1632,50 @@ le mot de passe root.</p> bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction du nombre de caractères, ça prend plus ou moins de temps, et si vous avez suffisamment de caractères, ça peut prendre un temps assez -conséquent. Cela dit, il vaut mieux être prudent...) Ainsi, nous allons -arrêter d'utiliser root et nous allons commencer a utiliser des couples +conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons +arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples clés publiques/privées pour nous connecter au serveur.<br /> -Cela se fait en deux temps : tout d'abord, créer un nouvel utilisateur, -grâce auquel nous administrerons le serveur a l'avenir; puis configurer -OpenSSH pour que celui ci n'accepte que les connections par clés et plus +Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur, +grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer +OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus celles sur root.</p> <p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se fait avec adduser, qui est interactif (vous ne devriez pas avoir de -problème avec, puisqu'il crée tout les dossiers et fichiers nécessaires, +problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires, et vous pose toutes les questions utiles pour vous aider.) sinon, vous -devrez utiliser useradd, qui est (en plus d'être très chiant a -distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait -un simple script permettant l'utilisation d'useradd plus facilement.)</p> +devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a +distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait +un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p> <p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif en faisant un <code>adduser --group &lt;username&gt;</code></p> <p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m -N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera -son dossier principal dans /home/, et l'ajoutera au groupe du même nom +son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom que lui (ce qui est en général nécessaire pour des questions de vie privée).</p> -<p>Il convient maintenant d'ajouter cet utilisateur aux groupes qu'il sera +<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix users staff sudo wheel</code>, puis de changer son mot de passe <code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br /> -Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un +Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un utilisateur complètement fonctionnel et utilisable pour toutes les -taches d'administration. Si vous devez encore utiliser root, c'est que +taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que quelque chose ne va pas.</p> -<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous +<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous allons maintenant passer a la phase 2 du plan : désactiver le login ssh root et le login ssh par mot de passe.<br /> -Tout d'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un +Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un système assez semblable a celui vous permettant de chiffrer vos mail : vous avec une clé publique et une clé privée sur le client, et la clé publique est aussi sur le serveur. Lorsque vous vous connectez, openssh vérifie que vous possédez la clé privée qui correspond a la clé publique stockée sur le serveur (pour votre utilisateur, bien entendu). Il est -également possible d'utiliser plusieurs clés publique pour chaque<br /> +également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br /> utilisateur.</p> <p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout -d'abord, il nous faut générer un couple de clés publique/privée sur le +d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t rsa précise a ssh que nous voulons un chiffrement rsa, qui est suffisamment solide pour cette utilisation.) Entrez les informations que @@ -1421,12 +1683,11 @@ ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br /> known_hosts liste les serveurs auxquels vous vous êtes connectés déjà une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous -intéresse ici c'est id_rsa et id_rsa.pub . id_rsa contient votre clé +intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé privée, sauvegardez la sur une clé USB ou notez la sur un bout de papier, si vous la perdez, vous ne pourrez plus vous connecter au -serveur. (planquez la clé usb/le bout de papier...) id_rsa.pub, quand a -lui, contient votre clé publique. Copiez la sur le serveur, avec un -<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou +serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a +lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou en la copiant a la main, si ça vous amuse. </p> <p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra. @@ -1438,19 +1699,19 @@ domaine&gt;</code>), et il ne devrait pas vous demander de mot de pass il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré, donc vérifiez que vous avez suivi correctement les instruction ci-dessus.</strong></p> -<p>Continuons. Il ne nous reste plus qu'a installer le serveur web, et a le +<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le configurer: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \ -<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \ -<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \ -<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \ -<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \ +apache2 apache2.2-common apache2-doc apache2-mpm-prefork \ +apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \ +php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \ +apache2-suexec php-pear php-auth php5-mcrypt mcrypt \ +php5-imagick imagemagick libapache2-mod-suphp libruby \ +libapache2-mod-ruby </pre></div> -<p>(faisons large, on aura besoin de l'excédent plus tard...), puis activons les<br /> +<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br /> mods apache en faisant <code>a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest</code>, et faisons en sorte que ces activations soient prises en compte par apache via un <code>sudo service apache2 @@ -1460,46 +1721,46 @@ comment fonctionner sur notre nom de domaine et ou trouver les fichiers a envoyer. </p> <p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez sympa pour nous filer un fichier de configuration par défaut. Il nous -faut encore l'éditer, en changeant l'adresse mail au début du document +faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>, -et enfin redémarrer apache pour qu'il prenne en compte les +et enfin redémarrer apache pour qu&rsquo;il prenne en compte les modifications, par un <code>sudo service apache2 restart</code> </p> <p>Et maintenant, il vous reste a apprendre le html, parce que ca y est, votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on -verra l'installation du serveur mail (c'est suffisamment complexe pour -prendre un article seul...)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are +verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour +prendre un article seul&hellip;)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p> -<p>Bon, voila. J'ai passé le cap. Je suis sous GNU/Linux depuis un certain +<p>Bon, voila. J&rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain temps, maintenant, et depuis un certain temps je remarque des -changements malvenus. Bien entendu, au début, je n'avais pas les +changements malvenus. Bien entendu, au début, je n&rsquo;avais pas les connaissances nécessaires pour comprendre ne serait-ce que ces modifications existaient. Et puis certaines sont arrivées avant que je -n'ai même idée que quelque chose dans mon système d'exploitation avait +n&rsquo;ai même idée que quelque chose dans mon système d&rsquo;exploitation avait cette fonction la. Par exemple, udev, ou policykit/consolekit/. A -l'époque, je n'avais aucune idée de la façon dont les disques étaient -montés sur mon système. Le premier système non-Windows que j'ai utilisé +l&rsquo;époque, je n&rsquo;avais aucune idée de la façon dont les disques étaient +montés sur mon système. Le premier système non-Windows que j&rsquo;ai utilisé fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je cherche a démonter le système pour comprendre comment il fonctionnait en -profondeur. Cependant, avec le temps, les connaissances s'accumulant et -mon niveau de compréhension du système s'améliorant, j'ai commencé a -remarquer que certain bouts de l'OS ne collaient pas exactement avec les -autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a -cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma -compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne +profondeur. Cependant, avec le temps, les connaissances s&rsquo;accumulant et +mon niveau de compréhension du système s&rsquo;améliorant, j&rsquo;ai commencé a +remarquer que certain bouts de l&rsquo;OS ne collaient pas exactement avec les +autres. Bien sur, je ne saurais dire si cette réalisation s&rsquo;est faite a +cause de la recrudescence de ces bouts d&rsquo;OS, ou bien juste a cause de ma +compréhension plus poussée. Toujours est-il que ces petits bouts d&rsquo;OS ne s’adaptant pas au reste du système se faisaient de plus en plus visible. -Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai -choisi de passer a Archlinux. C'était avant le passage a systemd. Ce -système me convenait bien. Si je n'installais pas Gnome, ce que je ne +Et puis, un jour, j&rsquo;en ai eu marre de voir unity sur ma machine, et j&rsquo;ai +choisi de passer a Archlinux. C&rsquo;était avant le passage a systemd. Ce +système me convenait bien. Si je n&rsquo;installais pas Gnome, ce que je ne comptais pas faire, il ne me forçait pas a installer un *kit -quelconque, ni dbus. Oui, udev était toujours la, mais c'était le moins +quelconque, ni dbus. Oui, udev était toujours la, mais c&rsquo;était le moins envahissant de ceux la.</p> <p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les premiers sont probablement très efficaces dans leur domaine, et le -second n'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la -distribution d'avoir au plus vite les dernières versions de tout. +second n&rsquo;a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la +distribution d&rsquo;avoir au plus vite les dernières versions de tout. Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient -pas les seuls a faire ça...) ont un problème très précis, qui n'importe +pas les seuls a faire ça&hellip;) ont un problème très précis, qui n&rsquo;importe pas a tout le monde, mais qui est très gênant pour ceux a qui il importe, et ce problème est que ces systèmes ne respectent absolument pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en @@ -1508,1616 +1769,428 @@ ces 9 principes :</p> <li>Ce qui est petit est beau</li> <li>Faites en sorte que chaque programme fasse une chose, bien.</li> <li>Faites un prototype aussi vite que possible</li> -<li>Choisissez la portabilité plutôt que l'efficacité</li> +<li>Choisissez la portabilité plutôt que l&rsquo;efficacité</li> <li>Stockez les données dans des fichiers textes.</li> <li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li> <li>Utilisez des scripts shells pour faciliter la portabilité et la réutilisation.</li> -<li>Évitez les UI qui "capturent" l'utilisateur.</li> +<li>Évitez les UI qui &ldquo;capturent&rdquo; l&rsquo;utilisateur.</li> <li>Faites de chaque programme un filtre.</li> </ol> -<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et -on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas -exactement la façon dont l'informatique fonctionne. Effectivement, les -standards, les systèmes d'exploitation, les logiciels, tout doit évoluer -- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est -pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et -celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La -philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans -de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br /> -La philosophie UNIX est aussi et surtout une garantie d'utilisabilité +<p>Alors bien entendu, un système d&rsquo;exploitation est fait pour évoluer, et +on pourrait penser qu&rsquo;UNIX a fait son temps. Cependant, ce n&rsquo;est pas +exactement la façon dont l&rsquo;informatique fonctionne. Effectivement, les +standards, les systèmes d&rsquo;exploitation, les logiciels, tout doit évoluer +- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&rsquo;est +pas d&rsquo;UNIX que nous parlons ici. C&rsquo;est de la <em>philosophie</em> UNIX. Et +celle-ci n&rsquo;a pas fait son temps, <strong>elle a fait ses preuves.</strong> La +philosophie UNIX, en plus d&rsquo;être efficace sur le papier, a aussi 44 ans +de tests derrière elle, et fonctionne aussi bien qu&rsquo;au premier jour.<br /> +La philosophie UNIX est aussi et surtout une garantie d&rsquo;utilisabilité et de simplicité pour les administrateurs systèmes, pour les -développeurs, bref pour tous ceux qui font de l'informatique -<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique +développeurs, bref pour tous ceux qui font de l&rsquo;informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l&rsquo;informatique ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce sont ceux qui sont les plus proches du système).</p> -<p>Tous OS se doit d'avoir un système standardisé pour faire communiquer +<p>Tous OS se doit d&rsquo;avoir un système standardisé pour faire communiquer les programmes entre eux. UNIX a un système de pipes, des sortes de -fichiers spéciaux permettant d'échanger des informations. C'est -efficace, ça respecte le "tout est fichier", c'est standard, c'est +fichiers spéciaux permettant d&rsquo;échanger des informations. C&rsquo;est +efficace, ça respecte le &ldquo;tout est fichier&rdquo;, c&rsquo;est standard, c&rsquo;est simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient -remplacer ça, avec une interface qui n'est explicitement pas faite pour -être utilisée a la ligne de commande mais a l'aide d'APIs, et un -programme monolithique qui effectue sa tache d'une façon complètement -obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon -efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus -"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est -<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est -horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus -lire facilement les échanges entre programmes. C'est peu pratique, en +remplacer ça, avec une interface qui n&rsquo;est explicitement pas faite pour +être utilisée a la ligne de commande mais a l&rsquo;aide d&rsquo;APIs, et un +programme monolithique qui effectue sa tache d&rsquo;une façon complètement +obscure pour l&rsquo;utilisateur. Alors bien sur, il l&rsquo;effectue d&rsquo;une façon +efficace, cette tache. Oui, ça va plus vite qu&rsquo;avant. Oui, c&rsquo;est plus +&ldquo;rangé&rdquo;, ça fait moins &ldquo;fouillis&rdquo;. Mais c&rsquo;est moins efficace. C&rsquo;est<em>beaucoup</em> moins utilisable pour l&rsquo;utilisateur final. C&rsquo;est +horriblement chiant pour les sysadmins, parce qu&rsquo;ils ne peuvent plus +lire facilement les échanges entre programmes. C&rsquo;est peu pratique, en fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br /> Systemd prend le même parti de créer une interface unifiée, accessible via des appels a des APIs uniquement, complètement obscure, extrêmement abstraite, bien entendu monolithique, et très peu ouverte a la -modification par l'utilisateur final. Alors oui, il parait que ça -augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques +modification par l&rsquo;utilisateur final. Alors oui, il parait que ça +augmente la vitesse de boot. Eh bien, au risque d&rsquo;en choquer quelques uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement et que je puisse modifier facilement, et qui soit ouvert, compréhensible -et distribué. C'est presque comme si les projets freedesktop.org avaient +et distribué. C&rsquo;est presque comme si les projets freedesktop.org avaient pour but de remplacer la base UNIX de linux en créant un système -concurrent, bâtard, bâti sur le kernel Linux mais n'employant plus les -systèmes basiques d'UNIX.</p> -<p>Le problème est qu'il est facilement visible que la direction prise par -la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni +concurrent, bâtard, bâti sur le kernel Linux mais n&rsquo;employant plus les +systèmes basiques d&rsquo;UNIX.</p> +<p>Le problème est qu&rsquo;il est facilement visible que la direction prise par +la communauté Linux n&rsquo;est pas celle du retour sur les systèmes UNIX ni celle du développement de solutions respectant la philosophie UNIX, mais -remises au gout du jour (?), mais est bien d'accepter et de pousser les +remises au gout du jour (?), mais est bien d&rsquo;accepter et de pousser les changements apportés par les projets freedesktop.org directement dans le cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font partie de nombreux développeurs de ces projets), a déjà adopté tous ces -changements (archlinux aussi, mais pour d'autres raisons...), et on peut -compter sur le fait que les autres distributions l'adopteront un jour ou -l'autre.</p> -<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces -systèmes, tout du moins exprimé les raisons qui font qu'ils me -déplaisent, on pourrait penser qu'il suffit de passer a une distribution -n'incluant pas systemd, voire a une distribution n'incluant pas du tout +changements (archlinux aussi, mais pour d&rsquo;autres raisons&hellip;), et on peut +compter sur le fait que les autres distributions l&rsquo;adopteront un jour ou +l&rsquo;autre.</p> +<p>Bon, maintenant que nous avons, si ce n&rsquo;est démontré la nocivité de ces +systèmes, tout du moins exprimé les raisons qui font qu&rsquo;ils me +déplaisent, on pourrait penser qu&rsquo;il suffit de passer a une distribution +n&rsquo;incluant pas systemd, voire a une distribution n&rsquo;incluant pas du tout de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur archlinux. Cependant, avec un peu de réflexion, on voit que si des distributions comme archlinux et Fedora ont adopté systemd (et -qu'OpenSUSE est en train de l’intégrer), il est probable que cela +qu&rsquo;OpenSUSE est en train de l’intégrer), il est probable que cela devienne un standard au fil des années, et que seuls survivent systemd -et upstart, le gestionnaire de démarrage d'ubuntu, qui ne changera +et upstart, le gestionnaire de démarrage d&rsquo;ubuntu, qui ne changera probablement pas (je les vois mal revenir en arrière sur ce point.) -Toujours est-il que l'init héritée du System V semble condamnée a mourir +Toujours est-il que l&rsquo;init héritée du System V semble condamnée a mourir sous Linux. Il pourrait être judicieux de passer sous debian squeeze, qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne la recevra probablement que dans 2/3 ans. Cependant, cette période est -toujours trop courte, et met sur mon système d'exploitation une date -d'expiration, chose qui ne me plait que moyennement. Non, la solution -est de passer sous un système autre, qui ait son propre système d'init +toujours trop courte, et met sur mon système d&rsquo;exploitation une date +d&rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution +est de passer sous un système autre, qui ait son propre système d&rsquo;init (ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options -principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas -vraiment un choix, vu le peu de programmes qu'il permet de faire -fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui -n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku -n'est pas un choix non plus, puisque le but est de rester dans une +principales s&rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&rsquo;est pas +vraiment un choix, vu le peu de programmes qu&rsquo;il permet de faire +fonctionner et le fait qu&rsquo;il ne soit disponible que sur i386, ce qui +n&rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku +n&rsquo;est pas un choix non plus, puisque le but est de rester dans une optique UNIX.</p> -<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai +<p>OpenSolaris est un système d&rsquo;exploitation tout a fait valable. Je n&rsquo;ai en théorie aucun problème sur cet OS, sauf que certains choix de design -ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet, +ne correspondent pas du tout a l&rsquo;idée que j&rsquo;ai d&rsquo;un OS. En effet, OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de ses outils, avec des paquets modifiés pour les rendre plus simples a utiliser (fichiers de configuration fournis par défaut, par exemple, et -autres patchs "release-only"), et une tendance a faire des scripts et -des outils installés par défaut pour tout et n'importe quoi. Bref, cela -n'est pas le sujet. Il convient aussi de voir qu'avec la récente +autres patchs &ldquo;release-only&rdquo;), et une tendance a faire des scripts et +des outils installés par défaut pour tout et n&rsquo;importe quoi. Bref, cela +n&rsquo;est pas le sujet. Il convient aussi de voir qu&rsquo;avec la récente acquisition de Sun par Oracle, il est possible que le projet OpenSolaris -n'ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du -projet affiche d'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> -<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD -ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est +n&rsquo;ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du +projet affiche d&rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> +<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&rsquo;OpenBSD, NetBSD +ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&rsquo;est simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour -réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir -DFBSD ressemble aussi au système de l'assistance a l'user a outrance -décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment +réputation d&rsquo;être orientées sécurité, et d&rsquo;après ce que j&rsquo;ai pu en voir +DFBSD ressemble aussi au système de l&rsquo;assistance a l&rsquo;user a outrance +décris plus haut. Mais la vérité est que je n&rsquo;ai pas fait suffisamment de recherches et que FreeBSD ne va me voir arriver que par hasard, parce -qu'entre toutes les BSD ca me semble la plus sympa et la plus agréable a -utiliser, plus le fait que le système de ports me convient bien (j'aime +qu&rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a +utiliser, plus le fait que le système de ports me convient bien (j&rsquo;aime pouvoir configurer mes logiciels de façon assez profonde.)</p> -<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien +<p>Voila, c&rsquo;est mon avis sur ce &ldquo;problème&rdquo; actuel du monde de Linux. Bien entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins -n'apparaissent jamais chez certaines distributions, créant de ce fait un +n&rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un choix pour les utilisateurs.<br /> -[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/%D/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> -J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire +[1]: Je n&rsquo;ai pas trouvé de traduction satisfaisante a &ldquo;software leveraging&rdquo;, mais l&rsquo;idée est la&hellip;*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> +J&rsquo;ai annoncé il y a environ 20 jours que j&rsquo;avais pour projet de faire une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée -PiRatBox. Il se trouve qu'après de nombreux essais, un problème -récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez +PiRatBox. Il se trouve qu&rsquo;après de nombreux essais, un problème +récurrent apparait: le Raspberry Pi n&rsquo;est pas capable de fournir assez de courant par défaut pour faire fonctionner a la fois un disque dur et une antenne WiFi.<br /> -Alors, autant il me semble évident qu'avec une -alimentation provenant d'un port USB a 2A (max), je n'avais pas -énormément de chances d'avoir 2A sur chacun des ports host du Raspi, +Alors, autant il me semble évident qu&rsquo;avec une +alimentation provenant d&rsquo;un port USB a 2A (max), je n&rsquo;avais pas +énormément de chances d&rsquo;avoir 2A sur chacun des ports host du Raspi, autant avoir moins de 250 mA sur chacun de ces ports me semble un tout petit peu exagéré en terme de rentabilité. </p> <p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me -servant a rien) (vous savez, celui qui est monté en USB...), qui +servant a rien) (vous savez, celui qui est monté en USB&hellip;), qui consomme énormément, est assez louche. Il devrait toujours être possible de désactiver une device USB, me semble-t-il, au niveau logiciel. La, -bien qu'il soit surement possible de la désactiver au niveau du kernel, -il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien +bien qu&rsquo;il soit surement possible de la désactiver au niveau du kernel, +il n&rsquo;est pas <strong>simplement</strong> possible de la &ldquo;débrancher&rdquo;. Ce qui est bien chiant, étant donné le besoin évident de puissance électrique dans lequel on se retrouve. </p> -<p>Bon, je dois avouer n'avoir pas testé de lancer les différents services +<p>Bon, je dois avouer n&rsquo;avoir pas testé de lancer les différents services composant le système des piratebox sous arch, pour la simple <del>et -bonne</del> raison qu'arch utilise systemd et qu'il n'existe pas de wrapper -systemd pour les daemons piratebox, et que j'ai la flemme d'en faire, +bonne</del> raison qu&rsquo;arch utilise systemd et qu&rsquo;il n&rsquo;existe pas de wrapper +systemd pour les daemons piratebox, et que j&rsquo;ai la flemme d&rsquo;en faire, parce que systemd est une horreur a utiliser avec les scripts init. Donc -non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas +non, j&rsquo;utiliserai debian. Le problème d&rsquo;utiliser debian dans ce cas précis est que apt/dpkg a une gestion des dépendances dans un sens mais -pas dans l'autre, en ce sens que si on installe un package "haut", c'est +pas dans l&rsquo;autre, en ce sens que si on installe un package &ldquo;haut&rdquo;, c&rsquo;est a dire dépendant de plusieurs autres packages, apt/dpkg se charge -efficacement d'installer toutes les dépendances nécessaires, tandis que -si on désinstalle un package "bas", c'est a dire sur lequel de nombreux +efficacement d&rsquo;installer toutes les dépendances nécessaires, tandis que +si on désinstalle un package &ldquo;bas&rdquo;, c&rsquo;est a dire sur lequel de nombreux autres packages dépendent, apt/dpkg ne désinstalle pas ces packages -"hauts", ce qui pose un vrai problème quand on se retrouve sur un -Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui -sera installé sur le système avant l'installation proprement dite -(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd +&ldquo;hauts&rdquo;, ce qui pose un vrai problème quand on se retrouve sur un +Raspberry Pi, puisqu&rsquo;il n&rsquo;y a pas de moyen &ldquo;facile&rdquo; de choisir ce qui +sera installé sur le système avant l&rsquo;installation proprement dite +(puisque le moyen &ldquo;universel&rdquo; d&rsquo;installation sur Raspberry Pi est le dd vers la SD qui sert de disque système.)</p> -<p>Il y a <strong>énormément</strong> d'autres critiques que l'ont pourrait faire -concernant le Raspberry Pi. Son système de démarrage a s'arracher les +<p>Il y a <strong>énormément</strong> d&rsquo;autres critiques que l&rsquo;ont pourrait faire +concernant le Raspberry Pi. Son système de démarrage a s&rsquo;arracher les cheveux, par exemple. En effet, plutôt que de faire comme tout pc normalement constitué ou la partie calcul démarre, lance le bootloader, -cherche le kernel de l'OS qui lui même se lance, initialise le hardware, -etc..., a un système bâtard du au fait que la puce au centre de la carte +cherche le kernel de l&rsquo;OS qui lui même se lance, initialise le hardware, +etc&hellip;, a un système bâtard du au fait que la puce au centre de la carte est a la base une puce graphique a laquelle on a greffé un cœur de -calcul (probablement au fond d'une cour d'immeuble, dans les quartiers -pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le -plus efficace qu'aient trouvé les personnes ayant implémenté cette +calcul (probablement au fond d&rsquo;une cour d&rsquo;immeuble, dans les quartiers +pauvres de Bratislava, vu la propreté de la greffe&hellip;), et le moyen le +plus efficace qu&rsquo;aient trouvé les personnes ayant implémenté cette atrocité de gérer le boot est donc de faire démarrer le cœur graphique en premier, ce dernier exécute un code propriétaire pour démarrer le cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel -etc... </p> +etc&hellip; </p> <p>Ce qui non seulement complique énormément le boot, non seulement ajoute -du code propriétaire a un projet se disant libre, mais en plus n'est -<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, -oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p> -<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je -le terminerai dès que j'aurai récupéré les outils nécessaires pour +du code propriétaire a un projet se disant libre, mais en plus n&rsquo;est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, +oui, mais uniquement quand c&rsquo;est bien réalisé, sinon je dis non. </p> +<p>Enfin, le projet que j&rsquo;avais est toujours en cours de réalisation. Je +le terminerai dès que j&rsquo;aurai récupéré les outils nécessaires pour monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa -vie. Les problèmes qu'il m'a posé, qu'il n'aurait pas du me poser, m'ont -trop agacé pour que j'aie envie de le sortir et de jouer avec une fois +vie. Les problèmes qu&rsquo;il m&rsquo;a posé, qu&rsquo;il n&rsquo;aurait pas du me poser, m&rsquo;ont +trop agacé pour que j&rsquo;aie envie de le sortir et de jouer avec une fois sa mission remplie. </p> -<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/%D/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous +<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la +fabrication d&rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt +sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous <del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une utilisation <strong>a la</strong> UNIX<br /> -Cependant, un d'entre eux se démarque par sa moins-mauvais-itude, c'est +Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br /> Mutt est un client mail en ligne de commande, qui, comme le dit sa page -d’accueil, <a href="http://www.mutt.org">"just sucks less"</a>. Dans les faits, mutt est assez +d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez chiant a configurer mais particulièrement pratique a utiliser après.</p> <p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans -<code>/etc/Muttrc</code>, et il est courant d'utiliser offlineimap en +<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en conjonction avec celui ci, de façon a accéder aux mails même sans accès -internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne +internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne crée pas de cache, ce qui empêche la consultation des emails sans -connexion internet.) La configuration d'offlineimap se fait dans -<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config +connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config par user. Offlineimap est un petit logiciel en python qui synchronise un dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque justement mutt accepte les dossiers au format Maildir. (De plus, cela va tout a fait dans le sens de la libération des données en cela que vous possédez vos mails en local.)<br /> Bref, passons aux choses serieuses : le code. Déjà, installez -offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d'installer +offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer mutt avec le patch sidebar, qui crée un listing des dossiers sur la partie gauche.<br /> Ensuite, voyons pour la partie configuration :<br /> -Ma configuration d'offlineimap :</p> -<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span> -<span class="cp">## Originally located in ~/.offlineimaprc</span> -<span class="cp">## This should not be edited without creating a copy before</span> -<span class="cp">## Created by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +Ma configuration d&rsquo;offlineimap :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span> +<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span> +<span style="color: #75715e">## This should not be edited without creating a copy before</span> +<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="p">[</span><span class="n">general</span><span class="p">]</span> -<span class="cp"># List of accounts to be synced, separated by a comma.</span> -<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</span> +<span style="color: #f8f8f2">[general]</span> +<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span> +<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span> -<span class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span> -<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> -<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span> -<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> -<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span> -<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span> -<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</span> +<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span> +<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> +<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span> +<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> +<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span> +<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span> +<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span> -<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span> -<span class="cp"># Where should the mail be placed?</span> -<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span> - <span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span> +<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span> +<span style="color: #75715e"># Where should the mail be placed?</span> +<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span> + <span style="color: #75715e"># voulez que vos emails apparaissent</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span> -<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span> -<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span> -<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d&#39;utilisateur</span> -<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span> -<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span> +<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span> +<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span> +<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span> +<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span> +<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span> </pre></div> -<p>Ça devrait être assez simple a lire, j'ai tout bien commenté :3<br /> +<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br /> Puis ma config mutt :</p> -<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span> -<span class="cp">## This file should not be edited without creating a copy</span> -<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span> +<span style="color: #75715e">## This file should not be edited without creating a copy</span> +<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="cp"># General config for reading (fetched via offlineimap)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap) -<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span> -<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span> +set mbox_type = Maildir +<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut) -<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span> -<span class="cp"># dossier root mailbox/imap</span> +set folder = ~/Email/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap -<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> -<span class="cp"># dossier d&#39;inbox</span> +set spoolfile = +INBOX +<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox -<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">&#39;</span><span class="n">All</span> <span class="n">Mail</span><span class="err">&#39;</span> -<span class="cp"># dossier ou archiver les emails</span> +set mbox = +&#39;All Mail&#39; +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails -<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span> -<span class="cp"># enfin voila quoi.</span> +set copy = yes +<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour... +<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi. -<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span> -<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span> +set header_cache = /.hcache/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache) -<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span> -<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span> +set record = +Sent +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés -<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span> -<span class="cp"># dossier dans lequel sont stockés les brouillons</span> +set postponed = +Drafts +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons -<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span> -<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span> +mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail +<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche -<span class="cp"># General config for sending (using Mutt&#39;s native support)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support) -<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">password_placeholder</span><span class="err">&#39;</span> -<span class="cp"># votre mot de passe</span> +set smtp_pass = &#39;password_placeholder&#39; +<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe -<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">&quot;smtp://username@whatev.org:465/&quot;</span> -<span class="cp"># l&#39;url ou envoyer les emails</span> +set smtp_url = &quot;smtp://username@whatev.org:465/&quot; +<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails -<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">&quot;utf-8&quot;</span> -<span class="cp"># UTF8, NE PAS CHANGER</span> +set send_charset = &quot;utf-8&quot; +<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER -<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">&quot;.sign&quot;</span> -<span class="cp"># vous pouvez mettre votre signature dans .sign</span> +set signature = &quot;.sign&quot; +<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign -<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible </span> -<span class="cp"># comme ca.</span> +set sig_on_top = yes +<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible +<span style="color: #960050; background-color: #1e0010">#</span> comme ca. -<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span> +set ssl_verify_host = no +<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement -<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">&quot;wxcafe.net&quot;</span> -<span class="cp"># mettez l&#39;adresse de votre serveur ici</span> +set hostname = &quot;wxcafe.net&quot; +<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici -<span class="cp"># Misc settings</span> +<span style="color: #960050; background-color: #1e0010">#</span> Misc settings -<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span> -<span class="cp"># la façon de voir les emails par défaut.</span> +auto_view text/html +<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut. -<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">&quot;%y-%m-%d %T&quot;</span> -<span class="cp"># format de date d&#39;envoi/de reception.</span> +set date_format = &quot;%y-%m-%d %T&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception. -<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">&quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;</span> -<span class="cp"># format de l&#39;index (la présentation de l&#39;interface)</span> -<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span> +set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface) +<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span> -<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span> -<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/aliases&quot;</span> -<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span> -<span class="cp"># format : &quot;alias short_name long_email_adress&quot;</span> -<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span> +set sort_alias = alias +set reverse_alias = yes +set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot; +<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même. +<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot; +source <span style="color: #f8f8f2">$alias_file</span> -<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># ne pas biper. CE SON ME TUE T.T</span> +set beep = no +<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T -<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span> -<span class="cp"># ?</span> +set tilde = yes +set sleep_time = 0 +<span style="color: #960050; background-color: #1e0010">#</span> ? -<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span> -<span class="cp"># parametres de la barre coté gauche</span> +set sidebar_visible = yes +set sidebar_width = 15 +<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche -<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">&quot;Clément Hertling (Wxcafé)&quot;</span> -<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">&quot;wxcafe@wxcafe.net&quot;</span> -<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/cacert&quot;</span> -<span class="cp"># parametres d&#39;envoi. mettez vos propres infos a la place des miennes...</span> +set realname = &quot;Clément Hertling (Wxcafé)&quot; +set from = &quot;wxcafe@wxcafe.net&quot; +set use_from = yes +set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot; +<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes... -<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># vous permet de vois les headers des mails. j&#39;aime, donc je laisse.</span> +set edit_headers = yes +<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse. -<span class="cp"># Macros</span> +<span style="color: #960050; background-color: #1e0010">#</span> Macros -<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span> -<span class="cp"># pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les </span> -<span class="cp"># deux</span> -<span class="cp"># \C represente la touche Control</span> +<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus, +<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les +<span style="color: #960050; background-color: #1e0010">#</span> deux +<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span> -<span class="cp"># Control+p -&gt; remonter d&#39;un dossier dans la sidebar</span> +bind index,pager \Cp sidebar-prev +<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span> -<span class="cp"># Control+n -&gt; descendre d&#39;un dossier dans la sidebar</span> +bind index,pager \Cn sidebar-next +<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span> -<span class="cp"># Control+o -&gt; ouvrir le dossier selectionné dans la sidebar</span> +bind index,pager \Co sidebar-open +<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar -<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">&quot;=Trash&quot;</span> <span class="s">&quot;Trash&quot;</span> -<span class="cp"># d supprime le message en cours</span> +macro index,pager d &quot;=Trash&quot; &quot;Trash&quot; +<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours -<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.</span> +bind pager previous-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message. -<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de </span> -<span class="cp"># message</span> +bind pager next-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de +<span style="color: #960050; background-color: #1e0010">#</span> message -<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># raccourcis vim</span> +bind pager j next-line +bind pager k previous-line +<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim -<span class="cp"># PGP signing commands</span> +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands -<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --import -v %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --export --armor %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_autosign</span><span class="o">=</span><span class="n">yes</span> -<span class="n">set</span> <span class="n">pgp_sign_as</span><span class="o">=</span><span class="mi">0</span><span class="n">x</span><span class="o">********</span> -<span class="cp"># remplacez 0x******** par votre identifiant PGP!!!!!</span> +set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot; +set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot; +set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot; +set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot; +set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot; +set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot; +set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot; +set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot; +set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot; +set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot; +set pgp_autosign=yes +set pgp_sign_as=0x******** +<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!! -<span class="n">set</span> <span class="n">pgp_replyencrypt</span><span class="o">=</span><span class="n">no</span> -<span class="n">set</span> <span class="n">pgp_timeout</span><span class="o">=</span><span class="mi">7200</span> -<span class="n">set</span> <span class="n">pgp_good_sign</span><span class="o">=</span><span class="s">&quot;^gpg: Good signature from&quot;</span> +set pgp_replyencrypt=no +set pgp_timeout=7200 +set pgp_good_sign=&quot;^gpg: Good signature from&quot; -<span class="cp"># si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis</span> -<span class="cp"># PGP signing options</span> +<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options -<span class="cp"># Palette for use with the Linux console. Black background.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background. -<span class="cp"># Schéma de couleur Rouge et Noir. Commentez si vous voulez le </span> -<span class="cp"># défaut noir et blanc.</span> -<span class="cp"># d&#39;autres schémas sont trouvables sur google et autre.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le +<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc. +<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre. -<span class="n">color</span> <span class="n">hdrdefault</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">quoted</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">signature</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">attachment</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">message</span> <span class="n">brightwhite</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">error</span> <span class="n">brightred</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">indicator</span> <span class="n">black</span> <span class="n">red</span> -<span class="n">color</span> <span class="n">status</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tree</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">normal</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">markers</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">search</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tilde</span> <span class="n">brightmagenta</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="o">~</span><span class="n">F</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="s">&quot;~N|~O&quot;</span> +color hdrdefault red black +color quoted brightblack black +color signature brightblack black +color attachment red black +color message brightwhite black +color error brightred black +color indicator black red +color status white black +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index red black ~F +color index red black &quot;~N|~O&quot; </pre></div> -<p>Voila, pour plus d'informations vous pouvez aller voir le manuel de mutt +<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt @ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br /> -J'espère que cette configuration "toute faite" vous aidera a commencer +J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer a utiliser mutt. Il est tout de fois important de se souvenir -qu'utiliser une configuration toute faire n'aide pas a comprendre un +qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un programme ou un système, et que cette façon de faire devrait être -réservée a l'introduction ou a des situations ou il est absolument -nécessaire d'avoir rapidement une configuration fonctionnelle (c'est a -dire, dans le cas d'un client email, euh... jamais?). Je vous invite +réservée a l&rsquo;introduction ou a des situations ou il est absolument +nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a +dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite donc a relire les annotations dont sont parsemés les fichiers de configuration en question, et surtout a lire le manuel, a chercher sur <del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement -a tenter de comprendre les configurations en question et a les améliorer!</p>La séparation des églises et de l'état, une idée qu'elle est bonne?2012-12-13T03:08:00+01:00Wxcafetag:wxcafe.net,2012-12-13:posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/<p>Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter?</p> -<p>Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. </p> -<p>L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. </p> -<p>Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine <strong>doit</strong>fournir toutes ses -informations au gouvernement américain <strong>sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.</strong> </p> -<p>Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire <a href="http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/">cet article</a> de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. </p> -<p>Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <code>&lt;troll&gt;</code>Apple -Maps<code>&lt;/troll&gt;</code>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. </p> -<p>De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. </p> -<p>Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. </p> -<p>Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.<br /> -Voila, a bientôt!</p>La cryptographie avec PGP et principalement GnuPG2012-11-19T00:36:00+01:00Wxcafetag:wxcafe.net,2012-11-19:posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/<p>PGP (pour <a href="http://fr.wikipedia.org/wiki/Pretty_Good_Privacy">pretty good privacy</a>) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir <a href="http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">ici</a>) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de <em>Web of Trust</em>. </p> -<p>Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.<br /> -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.</p> -<p>Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -<a href="http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/">quitter Gmail</a> aussi, par exemple).</p> -<p>Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)</p> -<p>L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (<a href="http://fr.wikipedia.org/wiki/GNU_Privacy_Guard">GNU Privacy Guard</a>) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<code>&lt;troll&gt;</code> de façon surprenante pour un -programme GNU<code>&lt;/troll&gt;</code>) est extrêmement efficace et claire.</p> -<p>Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).</p> -<p>Tout d'abord, générons une clé GPG :</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">gen</span><span class="o">-</span><span class="n">key</span> -</pre></div> - - -<p>GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. </p> -<p>Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande <code>makepasswd</code>, qui génère automatiquement un mot de -passe) </p> -<p>GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) </p> -<p>Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">pubkey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé publique, et</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span><span class="o">-</span><span class="n">secret</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">seckey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. </p> -<p>Cela fait, listons les informations sur votre clé publique :</p> -<div class="highlight"><pre><span class="err">$</span> <span class="n">gpg</span> <span class="o">--</span><span class="n">list</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">fingerprint</span> -<span class="n">pub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">27</span><span class="n">D81AC8</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> - <span class="n">Key</span> <span class="n">fingerprint</span> <span class="o">=</span> <span class="mi">6345</span> <span class="n">A91A</span> <span class="n">FF89</span> <span class="mf">97E0</span> <span class="mi">13</span><span class="n">D0</span> <span class="mi">96</span><span class="n">A9</span> <span class="mf">9E2</span><span class="n">A</span> <span class="mi">1917</span> <span class="mi">27</span><span class="n">D8</span> <span class="mi">1</span><span class="n">AC8</span> -<span class="n">uid</span> <span class="n">Cl</span><span class="err">é</span><span class="n">ment</span> <span class="n">Hertling</span> <span class="p">(</span><span class="n">Wxcafe</span><span class="p">)</span> -<span class="n">uid</span> <span class="p">[</span><span class="n">jpeg</span> <span class="n">image</span> <span class="n">of</span> <span class="n">size</span> <span class="mi">14692</span><span class="p">]</span> -<span class="n">sub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">9</span><span class="n">ED7F77F</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> -</pre></div> - - -<p>La partie <code>pub</code> indique que c'est une clé publique, <code>4096R</code> indique que c'est -une clé RSA sur 4096 bits. La partie <code>27D81AC8</code> est -l'identifiant de la clé publique, <code>Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8</code> est appelé fingerprint de la clé. Les champs -<code>uid</code> sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ <code>sub</code> est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.<br /> -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">uploader</span><span class="o">*</span> -</pre></div> - - -<p>Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!<br /> -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). </p> -<p>Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.<br /> -Concernant les signatures de clés, elles fonctionnent de manière très -simple :<br /> -Vous devez télécharger la clé de votre correspondant, via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">search</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">correspondant</span><span class="o">*</span> -</pre></div> - - -<p>(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.<br /> -Ceci fait, vous pouvez signer la clé via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">sign</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>puis la renvoyer au serveur via</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">key</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>Voila, la clé de votre correspondant est signée!</p> -<p>Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!</p>L'informatique a l'école2012-10-15T20:34:00+02:00Wxcafetag:wxcafe.net,2012-10-15:posts/%D/linformatique-a-lecole/<p>Après avoir lu <a href="http://t.co/5PTfe6zu">cet article</a> paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.</p> -<p>En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu <a href="http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers - Heroes of the Computer Revolution</a> de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.</p> -<p>Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre <a href="http://en.wikipedia.org/wiki/IWoz">iWoz</a>) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. </p> -<p>Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.</p> -<p>C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...</p> -<p>Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.</p> -<p>Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.</p>Archlinux made simple2012-10-05T14:48:00+02:00Wxcafetag:wxcafe.net,2012-10-05:posts/%D/archlinux-made-simple/<p>Archlinux est réputée être une distribution Linux très complexe a -installer et a maintenir.</p> -<p>Je vais tenter ici de vous convaincre que ce n'est pas le cas, et -qu'elle peut se monter très intéressante et très instructive a installer -tout autant qu'a utiliser.</p> -<p>Il convient tout d'abord de rappeler a quels principes obéit Arch:</p> -<ol> -<li> -<p>Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des - programmes simples et utilisables par tous. Avec comme base de - simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu - de bonne volonté, la configuration n'est pas si compliquée!</p> -</li> -<li> -<p>La philosophie UNIX : chaque programme est prévu pour ne remplir - qu'une seule tâche. Bien entendu, cela ne concerne que les programmes - conçus pour s’insérer dans la philosophie UNIX, et les installations de - dépendances avec le gestionnaire de paquet d'Arch fonctionnent - superbement bien.</p> -</li> -</ol> -<p>De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :</p> -<ul> -<li> -<p>recherche d'un paquet :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Ss</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>installation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">S</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>désinstallation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">R</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>mise a jour de tous les paquets installés :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">paquet</span> -</pre></div> - - -</li> -</ul> -<p>Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.</p> -<p>Arch n'offre pas d'interface graphique par défaut : après avoir installé -le système, vous n'aurez qu'une invite de commande. Heureusement, je -vais ici vous guider a travers l'installation d'une interface graphique -(mate, le fork de gnome 2)</p> -<p>L'installation d'Arch se fait par le réseau, veillez a avoir une -connection WiFi ou filaire a proximité avant de suivre ce guide.</p> -<p>Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous -systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce -dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.</p> -<p>Bon, passons a l'explication de l'installation proprement dite :</p> -<p>Tout d'abord, téléchargeons l'iso d'arch la plus récente :</p> -<div class="highlight"><pre><span class="n">wget</span> <span class="n">http</span><span class="o">:</span><span class="c1">//mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso</span> -</pre></div> - - -<p>Ensuite, gravons cette image sur un disque USB :</p> -<div class="highlight"><pre><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">archlinux</span><span class="o">-</span><span class="mf">2012.09.07</span><span class="o">-</span><span class="n">dual</span><span class="p">.</span><span class="n">iso</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> -</pre></div> - - -<p>Après reboot de la machine sur l'iso en question et choix de -l'architecture, nous sommes accueillis par un shell root.</p> -<p>La première chose a faire est de paramétrer le clavier :</p> -<div class="highlight"><pre><span class="n">loadkeys</span> <span class="n">fr</span> -</pre></div> - - -<p>Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :</p> -<div class="highlight"><pre><span class="n">cfdisk</span> <span class="err">#</span> <span class="n">cfdisk</span> <span class="n">est</span> <span class="n">suffisamment</span> <span class="n">clair</span> <span class="n">pour</span> <span class="n">ne</span> <span class="n">pas</span> <span class="n">n</span><span class="err">é</span><span class="n">cessiter</span> <span class="n">d</span><span class="err">&#39;</span><span class="n">explications</span> -</pre></div> - - -<p>formatage des partitions :</p> -<div class="highlight"><pre><span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">root</span> - -<span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="o">&amp;&amp;</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">btrfs</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">home</span> - -<span class="n">mkswap</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="o">&amp;&amp;</span> <span class="n">swapon</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">de</span> <span class="n">swap</span> -</pre></div> - - -<p>Montons les partitions nouvellement créées, puis installons le système :</p> -<div class="highlight"><pre><span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="o">/</span><span class="n">mnt</span> - -<span class="n">mkdir</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> <span class="o">&amp;&amp;</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> - -<span class="n">dhclient</span> <span class="n">eth0</span> <span class="err">#</span> <span class="n">si</span> <span class="n">vous</span> <span class="n">utilisez</span> <span class="n">une</span> <span class="n">connection</span> <span class="n">filaire</span><span class="p">,</span> <span class="n">sinon</span> <span class="n">voire</span> <span class="n">http</span><span class="o">:</span><span class="c1">//wiki.archlinux.fr/Wifi#Configuration</span> - -<span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">base</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> - -<span class="n">genfstab</span> <span class="o">-</span><span class="n">p</span> <span class="o">/</span><span class="n">mnt</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">fstab</span> -</pre></div> - - -<p>Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage:</p> -<div class="highlight"><pre><span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">syslinux</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="n">wireless_tools</span> <span class="n">dhclient</span> -</pre></div> - - -<p>Maintenant, passons sur notre install toute fraîche d'Arch :</p> -<div class="highlight"><pre><span class="n">arch</span><span class="o">-</span><span class="n">chroot</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">bash</span> -</pre></div> - - -<p>configurons les bases :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="n">HOSTNAME</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">hostname</span> - -<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">zoneinfo</span><span class="o">/</span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">localtime</span> - -<span class="n">date</span> <span class="n">MMJJhhmmAAAA</span> - -<span class="n">hwclock</span> <span class="o">--</span><span class="n">systohc</span> - -<span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">gen</span> <span class="err">#</span> <span class="n">D</span><span class="err">é</span><span class="n">commentez</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">correspondant</span> <span class="n">au</span> <span class="n">fran</span><span class="err">ç</span><span class="n">ais</span> <span class="o">:</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="n">et</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">ISO</span><span class="o">-</span><span class="mi">8859</span><span class="o">-</span><span class="mi">1</span> - -<span class="n">echo</span> <span class="err">&#39;</span><span class="n">LANG</span><span class="o">=</span><span class="s">&quot;fr_FR.UTF-8&quot;</span><span class="err">&#39;</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">conf</span> - -<span class="n">locale</span><span class="o">-</span><span class="n">gen</span> - -<span class="n">mkinitcpio</span> <span class="o">-</span><span class="n">p</span> <span class="n">linux</span> -</pre></div> - - -<p>Enfin, vérifions que syslinux est correctement configuré :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">syslinux</span><span class="o">/</span><span class="n">syslinux</span><span class="p">.</span><span class="n">cfg</span> <span class="err">#</span> <span class="n">il</span> <span class="n">devrait</span> <span class="n">y</span> <span class="n">avoir</span> <span class="s">&quot;append root=/dev/sda1&quot;</span> -</pre></div> - - -<p>Si tout est correct, installons syslinux, et paramétrons un mot de passe -root :</p> -<div class="highlight"><pre><span class="n">syslinux</span><span class="o">-</span><span class="n">install_update</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda</span> <span class="o">-</span><span class="n">mia</span> - -<span class="n">passwd</span> <span class="n">root</span> -</pre></div> - - -<p>Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!</p> -<div class="highlight"><pre> <span class="n">exit</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span> -<span class="n">reboot</span> -</pre></div> - - -<p>Fini!</p> -<p>Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen :</p> -<ul> -<li> -<p>Installation de MATE, le gestionnaire de bureau (voir -<a href="http://mate-desktop.org/">http://mate-desktop.org/</a>)</p> -</li> -<li> -<p>Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage</p> -</li> -<li> -<p>Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci</p> -</li> -<li> -<p>Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).</p> -</li> -</ul> -<p>Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici.</p> -<p>Bon, reprenons.</p> -<p>Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet.</p> -<p>Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">pacman</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ici, ajoutez les lignes suivantes :</p> -<div class="highlight"><pre><span class="k">[mate]</span> -<span class="na">Server</span> <span class="o">=</span> <span class="s">http://repo.mate-desktop.org/archlinux/$arch</span> -</pre></div> - - -<p>Installons maintenant les paquets :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">mate</span> <span class="n">mate</span><span class="o">-</span><span class="n">extras</span> <span class="n">dbus</span> <span class="n">dbus</span><span class="o">-</span><span class="n">core</span> <span class="n">alsa</span> <span class="n">networkmanager</span> <span class="n">sudo</span> -</pre></div> - - -<p>Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois :</p> -<div class="highlight"><pre><span class="n">useradd</span> <span class="o">-</span><span class="n">g</span> <span class="n">users</span> <span class="o">-</span><span class="n">G</span> <span class="n">wheel</span><span class="p">,</span><span class="n">audio</span><span class="p">,</span><span class="n">optical</span><span class="p">,</span><span class="n">lp</span><span class="p">,</span><span class="n">scanner</span><span class="p">,</span><span class="n">log</span><span class="p">,</span><span class="n">power</span><span class="p">,</span><span class="n">floppy</span><span class="p">,</span><span class="n">storage</span><span class="p">,</span><span class="n">games</span><span class="p">,</span><span class="n">video</span> <span class="o">-</span><span class="n">m</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">bash</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">passwd</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">su</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -</pre></div> - - -<p>Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec ck-launch-session mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> -</pre></div> - - -<p>Profitons en pour ajouter les démons système au lancement :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ajoutez donc <code>dbus, alsa. hwclock</code> et <code>networkmanager</code> dans la section -DAEMONS (entre les parenthèses, après crond normalement)</p> -<div class="highlight"><pre><span class="n">DAEMONS</span><span class="o">=</span><span class="p">(</span><span class="n">syslog</span><span class="o">-</span><span class="n">ng</span> <span class="n">network</span> <span class="n">crond</span> <span class="n">dbus</span> <span class="n">alsa</span> <span class="n">hwclock</span> <span class="n">networkmanager</span><span class="p">)</span> -</pre></div> - - -<p>Pour éviter un reboot, il est ici possible de faire un</p> -<div class="highlight"><pre><span class="n">su</span> -</pre></div> - - -<p>Puis un</p> -<div class="highlight"><pre> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">dbus</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">alsa</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">networkmanager</span> <span class="n">start</span> -</pre></div> - - -<p>Sinon, il est possible de juste redémarrer.<br /> -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et :</p> -<div class="highlight"><pre> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">sudoers</span> -</pre></div> - - -<p>Décommentez la ligne qui commence par # %wheel ALL=(ALL)<br /> -Sauvegardez le fichier, puis, après un <code>su *votrenom*</code>, tentez de faire -un sudo ls /<br /> -Normalement, vous devriez avoir un listing du dossier /<br /> -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?<br /> -C'est simple comme bonjour :</p> -<div class="highlight"><pre> <span class="n">startx</span> -</pre></div> - - -<p>Et PAF! Voila un MATE desktop flambant neuf a configurer!<br /> -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (<code>sudo pacman -Syu slim</code>).<br /> -Configurons le:</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec dbus-launch mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> <span class="o">&amp;&amp;</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">slim</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Éditez la ligne -"<code>sessions xfce4,icewm-session,wmaker,blackbox</code>" de facon a -ce qu'elle ressemble a "<code>sessions mate-session</code>"<br /> -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.<br /> -Normalement, tout devrait fonctionner!<br /> -Ah oui, et pour installer thunderbird, firefox, chromium, etc...</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">chromium</span> <span class="n">thunderbird</span> <span class="n">xchat</span> <span class="n">firefox</span> <span class="n">rhythmbox</span> <span class="n">pidgin</span> <span class="n">transmission</span><span class="o">-</span><span class="n">gtk</span> <span class="n">vlc</span> -</pre></div> - - -<p>Voila! Et comme dirait <a href="https://twitter.com/spartition">@Spartition</a>, c'est sale, mais qu'est-ce que c'est -bon!<br /> -A plus~</p>Les systèmes de fichiers2012-09-25T10:28:00+02:00Wxcafetag:wxcafe.net,2012-09-25:posts/%D/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>Le Quenya - Épisode ø2012-09-18T19:07:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p>Update a propos du blog2012-09-18T16:57:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>Introduction a bash en tant que language de programmation.2012-09-08T18:15:00+02:00Wxcafetag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/<p>L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).</p> -<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. </p> -<p>Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.)</p> -<p>Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p> -<p>De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code.<br /> -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le *) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée.</p> -<p>Quelques notions manquent ici:<br /> -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici.<br /> -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number.<br /> -être utilisées dans un programme bash.<br /> -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p> -<p>Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel.<br /> -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête.</p> -<p>J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p>Les différentes couches d'un système d'exploitation2012-09-06T23:29:00+02:00Wxcafetag:wxcafe.net,2012-09-06:posts/%D/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>La programmation expliquée simplement2012-08-27T00:22:00+02:00Wxcafetag:wxcafe.net,2012-08-27:posts/%D/la-programmation-expliquee-simplement/<p>Salut!<br /> -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. </p> -<p>Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.<br /> -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation<br /> -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. </p> -<p>Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.<br /> -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. </p> -<p>La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.<br /> -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. </p> -<p>Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. </p> -<p>Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère2012-08-22T20:33:00+02:00Wxcafetag:wxcafe.net,2012-08-22:posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique.</p> -<p>GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.</p> -<p>De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une?</p> -<p>Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes.</p> -<p>Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable.</p> -<p>N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :)</p> -<p>A bientôt!</p>Débuts, présentation, etc...2012-08-18T20:27:00+02:00Wxcafetag:wxcafe.net,2012-08-18:posts/%D/debuts-presentation-etc/<p>Bonjour!</p> -<p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/##nolife et #debian-fr)</p> -<p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. </p> -<p>Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général.</p> -<p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p> \ No newline at end of file +a tenter de comprendre les configurations en question et a les améliorer!</p> \ No newline at end of file diff --git a/output/feeds/feed.atom.all.xml b/output/feeds/feed.atom.all.xml index 81723d6..fd69f54 100644 --- a/output/feeds/feed.atom.all.xml +++ b/output/feeds/feed.atom.all.xml @@ -1,260 +1,531 @@ -Wxcafé//wxcafe.net/2014-11-07T13:04:00+01:00OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/%D/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de +Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<p>J&rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas &ldquo;profiter&rdquo; du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc&hellip;) simplement.</p> +<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j&rsquo;ai +décidé d&rsquo;installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça +donnait. Le résultat n&rsquo;étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j&rsquo;ai décidé d&rsquo;upgrader le système.</p> +<p>J&rsquo;ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a> +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un +<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je +pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&rsquo;autre +avantage de tourner sur du Intel, c&rsquo;est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86).</p> +<p>J&rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&rsquo;ai avidement +monté, avant de me rendre compte que le manuel de l&rsquo;adaptateur Pulse-Eight était +[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J&rsquo;ai donc +cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce +post</a> +expliquant comment brancher l&rsquo;adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l&rsquo;information, et pour moi si je dois remonter ce système.</p> +<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +&ldquo;Front Panel&rdquo;, et un appelé &ldquo;Custom Solution Header&rdquo;. Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&rsquo;est plus +facile, puisqu&rsquo;il n&rsquo;y a qu&rsquo;une seule fiche a brancher ici : la orange.</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que &ldquo;Deep S4/S5&rdquo; soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC.</p> +<p>Ne reste plus ensuite qu&rsquo;a installer un système digne de ce nom dessus!</p>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose +problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce +problème, deux solutions sont apparues.</p> +<p>Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port.</p> +<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La +communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de +la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines +machines font un <em>handshake</em> SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise +a jour&rdquo; en douceur.</p> +<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> +La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout +d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il +voit qu&rsquo;il est disponible.<br /> +Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité +de tout le monde.</p>Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d&rsquo;abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &ldquo;choses&rdquo; +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d&rsquo;autres. Vous aurez aussi remarqué que le +Gamepad n&rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube.</p> +<p>Cela étant, si comme moi vous avez, euh, &ldquo;ouvert&rdquo; le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l&rsquo;adaptateur GC pour Wii +U</a> +a votre console. </p> +<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d&rsquo;habitude +avec Nintendo, c&rsquo;est une solution a moitié satisfaisante&hellip;) : les classic +controller, mais en forme de manettes Gamecube.</p> +<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d&rsquo;argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes.</p> +<p>Nous allons ici voir deux modèles, un de chacune des boites en question +: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p> +<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus</em></strong></p> +<p>Commençons par le modèle de chez Hori :</p> +<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur.</p> +<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p> +<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c&rsquo;est logique puisque c&rsquo;est comme ça que les +classic controller sont faits, mais c&rsquo;est décevant tout de même</p> +<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p> +<p>On peut voir ici que la qualité de l&rsquo;assemblage n&rsquo;est pas extraordinaire, et on +remarque une soudure mal faite a l&rsquo;emplacement du stick gauche.</p> +<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p> +<p>Le stick c n&rsquo;est pas fixé au reste de la manette. +J&rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n&rsquo;avaient pas l&rsquo;air de très bonne qualité, et j&rsquo;ai préféré abandonner +l&rsquo;idée plutôt que de casser la manette.</p> +<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p> +<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d&rsquo;une Wiimote entière la dedans&hellip;</p> +<hr> + +<p>Passons maintenant a la manette PDP.</p> +<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p> +<p>Au premier coup d&rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c&rsquo;est un problème de goût).</p> +<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p> +<p>Les gâchettes sont des vraies gâchettes! C&rsquo;est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après.</p> +<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon <strike>péremptoire</strike> perpendiculaire&hellip;</p> +<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p> +<p>Vous l&rsquo;avez deviné, ces deux &ldquo;cartes filles&rdquo; servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de &ldquo;vraies&rdquo; gâchettes en cela +qu&rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques.</p> +<p>Quelques photos des gâchettes en question :</p> +<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p> +<hr /> +<p>Vous l&rsquo;aurez compris, je préfère la version PDP de ces &ldquo;Fight Pad&rdquo;, la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si +ce n&rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n&rsquo;est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>, +mais n&rsquo;est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>, +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d&rsquo;avoir une machine hôte sur laquelle s&rsquo;exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l&rsquo;hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu&rsquo;avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu&rsquo;à l&rsquo;hôte, puisqu&rsquo;il n&rsquo;est pas vraiment séparé des +invités. </p> +<p>Quoi qu&rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. &ldquo;Mais pourquoi utiliser Docker, dans ce cas&rdquo;, vous +demandez-vous peut être, &ldquo;puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&rdquo;. Et bien +c&rsquo;est très simple : Docker apporte la simplicité de déploiement d&rsquo;applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer +rapidement et facilement un grand nombre d&rsquo;images déjà configurées. </p> +<p>Maintenant que nous avons expliqué rapidement ce qu&rsquo;était Docker, voyons le +rapport avec les ebooks et Twitter.</p> +<p>Les comptes dits &ldquo;ebooks&rdquo; (le nom vient a l&rsquo;origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>, +voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots +twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>, +avec les tweets d&rsquo;un utilisateur &ldquo;source&rdquo; comme corpus, pour produire des tweets +ressemblant a ceux de l&rsquo;utilisateur source. Nous allons voir maintenant comment +en installer un.</p> +<p>C&rsquo;est, comme disent certaines personnes, &ldquo;fun&rdquo;.</p> +<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée +par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l&rsquo;API +twitter et la génération des messages.</p> +<p>Cependant, cela n&rsquo;explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d&rsquo;isoler les bots, et les +containers dockers permettent de les déployer sur n&rsquo;importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j&rsquo;ai créé <a href="https://github.com/wxcafe/ebooks_example">un +repo github</a> qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc.</p> +<p>Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l&rsquo;utilisateur source avec <code>ebooks archive &lt;username&gt; &lt;filename&gt;</code> (c&rsquo;est du json) +, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks +consume &lt;filename&gt;</code>. Cela fait, démarrer le bot revient a lancer le container : +<code>docker run -d &lt;container name&gt;</code> Pour plus d&rsquo;informations, allez voir <a href="https://docs.docker.com/articles/basics/">la +documentation Docker</a></p> +<p>Bien entendu, dans l&rsquo;idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 05 * * * cd /usr/local/ebooks/main/ &amp;&amp; /usr/local/bin/ebooks consume corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 10 * * * docker rm -f bots &gt;/dev/null 2&gt;&amp;1 +00 15 * * * docker rmi bots &gt; /dev/null 2&gt;&amp;1 +00 20 * * * cd /usr/local/ebooks/main/ &amp;&amp; docker build --rm -t bots . &gt;&gt; /var/log/ebooks/build.log 2&gt;&amp;1 +00 25 * * * docker run -d --name bots bots &gt;&gt; /var/log/ebooks/run.log 2&gt;&amp;1 +</pre></div> + + +<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s&rsquo;executent en même temps.</p> +<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n&rsquo;est qu&rsquo;un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des +applications &ldquo;usuelles&rdquo; +dedans</a>, +puisque l&rsquo;overhead de Docker est minimal, et beaucoup d&rsquo;autres applications +existent.</p>OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant +comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la +aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais +<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un +projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA +qu&rsquo;a le projet OpenBSD, globalement).</p> +<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA (Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis +<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération +ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches +sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et +<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir +des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour +ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et <a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> pour filtrer les mails entrants et sortants. Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮ + │╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │ + mail in ││ │ │ │ amavis │ +───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ +&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ </pre></div> <p>Normalement, ceci devrait être a peu près clair. Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de +aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails +venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, qui a ce moment-ci trie en fonction de la destination : les mails gérés par le domaine vont via dovecot dans les boites mail des destinataires locaux, les mails exterieurs vont directement vers le MTA du serveur distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon +<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon dont les différents services vont communiquer.</p> <p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de +10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et +écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de signer, nous allons profiter de cette configuration et donc lui parler en SMTP sur ces ports.</p> <p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, <code>/var/run/dovecot/lmtp</code>).</p> <p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮ + │╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ +25 &lt;────────│&lt;───────────╯ │ + ╰───────────────╯ </pre></div> <p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮ + │╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ </pre></div> <p>Pour les mails entrants.</p> <p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. +d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p> +<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> +<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new </pre></div> <p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> <p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span> +<span style="color: #75715e"># See smtpd.conf(5) for more information.</span> -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> +<span style="color: #75715e">## Certs</span> +pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span> +pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span> -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> +<span style="color: #75715e">## Ports to listen on, and how to listen on them</span> +listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional +listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source +listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> +<span style="color: #75715e">## Aliases</span> +table aliases file:/etc/aliases -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> +<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span> +listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered +<span style="color: #75715e"># coming from amavisd, signed with DKIM</span> +listen on lo port <span style="color: #ae81ff">10027</span> tag Signed -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> +<span style="color: #75715e">## Receiving</span> +<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span> +accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span> +<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span> +accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span> +<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span> -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> +<span style="color: #75715e">## Sending</span> +<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span> +accept tagged Signed <span style="color: #66d9ef">for</span> any relay +<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span> +accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span> +<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span> </pre></div> <p>Expliquons un peu ce fichier de configuration :</p> <ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> +<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration + d&rsquo;emplacement des certificats SSL.</li> <li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> <li>Les alias sont définis juste après</li> <li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> + comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on + taggue les mails sortants comme &ldquo;Signed&rdquo;</li> <li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore + peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième + première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième ligne matchant tous les mails arrivant et la première seulement ceux filtrés, inverser leur sens voudrait dire que les mails seraient toujours renvoyés a amavis</li> <li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au + on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par + DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le + problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au dessus.</li> </ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit +<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne +emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant +qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du POP3[s], différents guides sont trouvables facilement sur internet.</p> <p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span> -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> +<span style="color: #75715e"># basic config</span> +<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log +<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log +<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span> +<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> +<span style="color: #75715e"># authentication</span> +passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +userdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd +<span style="color: #f92672">}</span> -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> +<span style="color: #75715e"># the protocols we use</span> +<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> +<span style="color: #75715e"># ssl config</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring services </span> +<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span> +service imap-login <span style="color: #f92672">{</span> + inet_listener imap <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span> + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> +service lmtp <span style="color: #f92672">{</span> + unix_listener lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666 + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring protocols</span> +<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span> +protocol lda <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +protocol lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> +plugin <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve + <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve +<span style="color: #f92672">}</span> </pre></div> <p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> </pre></div> <p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth +<span style="color: #f92672">}</span> </pre></div> <p><strong>pour identifier les utilisateurs système</strong></p> <p>Ici aussi, voyons comment ce fichier est structuré :</p> <ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. +<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater + leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li> +<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs. Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs mots de passe avec PAM (ou BSDAuth)</li> <li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> + l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> <li>Nous configurons le SSL</li> <li>Le section suivante contient la configuration des services. Nous avons en premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. + désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant + IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons. La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> + fifo qu&rsquo;il utilise</li> <li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> <li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et quel dossier utiliser pour sa configuration.</li> @@ -263,101 +534,100 @@ POP3[s], différents guides sont trouvables facilement sur internet.</p> a deux choses : signer les emails sortants, et filtrer les emails entrants. Il doit donc écouter sur les port 10026 pour les signatures et 10024 pour le filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun +SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les +Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les modifications nécessaires a la fin du fichier.</p> <p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) <code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span> -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> +<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span> -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> +<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span> + <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span> + <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span> + <span style="color: #f8f8f2">}</span> +<span style="color: #f8f8f2">);</span> -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span> +<span style="color: #f8f8f2">};</span> -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> +<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span> +<span style="color: #f8f8f2">};</span> -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> +<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span> +<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span> </pre></div> <p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se +- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails + sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se trouve la clé privée servant a signer les emails. - le second définit les options DKIM que nous souhaitons utiliser comme défaut. Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> - nous définissons ensuite les ports sur lesquels nous allons écouter, puis les paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel + ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel ils viennent. - nous savons que les emails venants du port 10026 sont sortants, nous les traitons donc comme tel - le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre + sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a + 4871</a>. Nous déclarons l&rsquo;adresse a prévenir en cas de spam/virus venants de notre système, et que nous voulons être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de + puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature + les notifications de succès d&rsquo;envoi. Et voila!</p> +<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en fait inclus par défaut dans amavis.</p> <p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un +Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe +différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un tutorial</a>) mais de nombreuses autre méthodes existent. Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span> +<span style="color: #75715e"># report_safe 1</span> +<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span> +<span style="color: #75715e"># use_bayes 1</span> +<span style="color: #75715e"># bayes_auto_learn 1</span> +<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span> +<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span> +<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span> +<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span> +<span style="color: #75715e"># shortcircuit BAYES_99 spam</span> +<span style="color: #75715e"># shortcircuit BAYES_00 ham</span> -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> +<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span> </pre></div> @@ -365,44 +635,43 @@ Il nous reste encore a configurer spamassassin :</p> le required_score pour ma part.</p> <p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/%D/freebsd-online-mfsbsd/<p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad) +<p>Bon courage pour votre hosting de mail ensuite&hellip;</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad) Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>) -et n'ayant pour différentes raisons pas eu l'occasion de le faire sur mon -<a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, -j'ai commencé a chercher comment le faire sur ce serveur.</p> -<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu +et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, +j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p> +<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums -d'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> -<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), -ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur +d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> +<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), +ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur alternatif, minimaliste et simplifié pour FreeBSD.</p> <p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le -panel Online. Une fois cela fait, lancez une console, puis téléchargez l'image +panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis -choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter -sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout +choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter +sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout a fait classique va démarrer. Une fois ceci fait, la partie importante arrive: -mfsbsd contient un script d'installation root-on-zfs, nommé logiquement +mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement zfsinstall, qui va se charger de tout le travail pour nous.</p> <p>Utilisez donc ce script ainsi : </p> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, wipons le MBR :</span> -<span class="n">dd</span> <span class="o">&lt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span> -<span class="cp"># maintenant, installons le système</span> -<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span> +dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1 +<span style="color: #75715e"># maintenant, installons le système</span> +zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c </pre></div> <p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée, -<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D'autres options +<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous convient pas.</p> <p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf :</p> -<div class="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">&quot;YES&quot;</span> -<span class="n">sshd_load</span><span class="o">=</span><span class="s">&quot;YES</span> -<span class="n">hostname</span><span class="o">=</span><span class="s">&quot;whatever&quot;</span> -<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">&quot;DHCP&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span> +<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span> +<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span> +<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span> </pre></div> @@ -410,11 +679,10 @@ système) et éditez /etc/rc.conf :</p> physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez maintenant un système FreeBSD tout propre installé sur zfs a découvrir et utiliser!</p> -<p>Voila, c'est la fin de ce tutoriel. -(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu +<p>Voila, c&rsquo;est la fin de ce tutoriel. +(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu crédible, disons)</p> -<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter -<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, +<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, <a href="https://twitter.com/petitefanfare">petitefanfare</a>, <a href="https://twitter.com/capet_ebooks">capet_ebooks</a>, <a href="https://twitter.com/zengisse">zengisse</a>, @@ -422,146 +690,146 @@ et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont code</a>, qui vient de <a href="https://twitter.com/m1sp">@m1sp</a> (<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p> -<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/%D/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie +<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: <a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès +ce qui peut avoir l&rsquo;effet de rendre légèrement parano. Si vous considérez que +c&rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> <p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être remarqué quelque chose récemment : il se trouve que le certificat qui permet de desservir ce site a changé.</p> <p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", +doigts sortis d&rsquo;un endroit particulier du corps de l&rsquo;admin/auteur de ce &ldquo;blog&rdquo;, qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système +du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&rsquo;un système fonctionnel utilisant cette compréhension récemment acquise.</p> <p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très +être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&rsquo;est très simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat +<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc&hellip; Bref, un certificat différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs +<p>Il s&rsquo;avère que c&rsquo;est a la fois très peu pratique a utiliser (les utilisateurs doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat +changement de sous-domaine conduit a un message d&rsquo;erreur, etc) et pas plus +sécurisé que d&rsquo;avoir un seul certificat wildcard. J&rsquo;ai donc généré un certificat pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> +pas <code>*.wxcafe.net</code>, et qui sera donc utilisé&hellip; bah pour <code>wxcafe.net</code>.</p> <p>Il serait préférable de faire des redirections automatiques des adresses http vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront +self-signed, il me semble préférable que l&rsquo;arrivée sur le site ne commence pas +par une page firefox disant &ldquo;Something&rsquo;s Wrong!&rdquo;, et ces redirections ne seront donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus +<p>De plus, après la lecture de l&rsquo;article de blog sur Lavabit dont le lien est plus haut, il semble intéressant (et assez important) de faire en sorte que le serveur utilise en priorité (et si possible, uniquement) des ciphers supportant PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les +communications avec ce serveur soient future-proof, c&rsquo;est a dire que, même si +quelqu&rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les communications passées.</p> <p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes +l&rsquo;implémentation : <br /> +Pour générer la clé, tout d&rsquo;abord, il convient d&rsquo;utiliser les commandes suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096 +# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation +sudo openssl req -new -key example.key -out example.csr +# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">&quot;Common Name&quot;</span> devant contenir le FQDN +sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt +# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">&#39;</span>une durée de vie de <span style="color: #ae81ff">3</span> ans </pre></div> <p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser <code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> +Une fois la clé générée, il faut dire aux différents services de l&rsquo;utiliser, et +de n&rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service. +Je vais lister ici les methodes pour quelques services que j&rsquo;utilise :</p> <h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3 +<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">&quot;</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \ + EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \ + EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">&quot;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">&quot;EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">&#39;abord, lancez la commande suivante :</span> +<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span> +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.key&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.crt&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">}</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span> </pre></div> <h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt +<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key +<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes +<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong +<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high +<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS +<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt +<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3 +<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes +<span style="color: #75715e"># [...]</span> </pre></div> <h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.crt +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL </pre></div> -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter +<p>Voila. Pour d&rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future +<p>Cela étant dit, je conseille a tout le monde d&rsquo;aller voir la conférence dans le +disclaimer, et tant qu&rsquo;a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/%D/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de +implémentation d&rsquo;une technologie &ldquo;remplaçant&rdquo; le système de CAs qui existe +actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de domaines en différentes informations : adresses IPv4, adresses IPv6, certificats DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour @@ -569,54 +837,53 @@ simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a <a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a <a href="http://5.39.76.46">http://5.39.76.46</a>).</p> -<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque -en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que +<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque +en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que de nos jours. La configuration des serveurs DNS peut ainsi être assez contre intuitive. Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses enregistrements est important.</p> -<p>Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même +<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d'écrire, par exemple, -<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le -<code>.</code> n'est pas obligatoire et la progression se fait de droite a gauche. Par +du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le +<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine <code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point a la fin de façon courante.</p> -<p>Le reverse DNS est une variante du DNS "classique" permettant de résoudre les +<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre +Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger +quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS +sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre habituel</em></strong>, et du faux domaine .in-addr.arpa Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR 76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p> -<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, +<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord, quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des -"enregistrements", records en anglais. Par exemple, un record A indique une +&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom de domaine que vous donnez en argument, mais en précisant un autre type de -record, vous pouvez obtenir n'importe quelle information : par exemple, <code>dig NS +record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS wxcafe.net</code> devrait vous renvoyer</p> -<div class="highlight"><pre><span class="p">;</span> <span class="o">&lt;&lt;&gt;&gt;</span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o">&lt;&lt;&gt;&gt;</span> NS wxcafe.net -<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd -<span class="p">;;</span> Got answer<span class="o">:</span> -<span class="p">;;</span> <span class="o">-&gt;&gt;</span>HEADER<span class="o">&lt;&lt;-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span> -<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span> -<span class="p">;;</span> QUESTION SECTION<span class="o">:</span> -<span class="p">;</span>wxcafe.net. IN NS +<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> -<span class="p">;;</span> ANSWER SECTION<span class="o">:</span> -wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net. -wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net. +<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span> -<span class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec -<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span> -<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span> -<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span> </pre></div> @@ -626,12 +893,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et &l chacun fait autorité pour lui même, et le problème évident est que le résolveur ne peut résoudre la query si il est renvoyé encore et encore vers le même serveur. Il convient donc de définir dans le même fichier de configuration -l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième -loop, se rendra compte qu'il est en train de faire une boucle infinie et -demandera l'adresse au serveur auquel il est connecté. La première indication de +l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième +loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et +demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de direction se fait grâce au serveur du TLD.</p> <p>La configuration de bind est assez simple dans le principe, le plus complexe -étant en fait d'écrire les fichiers de zone. +étant en fait d&rsquo;écrire les fichiers de zone. La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il existe 4 fichiers de configuration principaux : <code>named.conf</code>, <code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>. @@ -641,48 +908,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher named.conf.options contient les options que vous rajoutez pour changer le comportement de bind.</p> <p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans -lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, +lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité, deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs (notamment mon accès chez moi). </p> -<p>Examinons tout d'abord les fichiers de configuration de named. -<code>named.conf.local</code> contient les définitions des zones forward et reverse. +<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse. Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont -gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce +gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence -principale étant que l'un héberge en slave les masters de l'autre. +principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre. Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p> -<div class="highlight"><pre><span class="n">zone</span> <span class="s">&quot;wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;home.wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> </pre></div> @@ -693,250 +959,247 @@ tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est assez parlant.</p> <p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit <code>/etc/bind/master/wxcafe.net</code> : </p> -<div class="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span> - <span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span> - <span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span> - <span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span> - <span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span> - <span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span> - <span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span> + <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span> + <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span> + <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span> + <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span> + <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span> + <span style="color: #f8f8f2">)</span> -<span class="p">;</span> <span class="n">Name</span> <span class="n">servers</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">SPF</span> <span class="s">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> -<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> -<span class="p">;</span> <span class="n">Aliases</span> -<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="p">;</span> <span class="p">[...]</span> -<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span> +<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span> +<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span> -<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span> +<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> </pre></div> <p>Alors. Expliquons ligne par ligne.<br /> -Tout d'abord, le TTL (time to live) est un paramètre définissant le temps +Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps pendant lequel les serveurs récursif (qui font un cache des données) doivent cacher ce fichier de zone. <br /> Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, wxcafe.net. <br /> Maintenant, nous arrivons a un record important : SOA (Start of Authority). -Ce record prend de nombreux arguments, dans l'ordre :<br /> +Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br /> - Le nameserver autoritaire pour le nom de domaine en question,<br /> - - L'adresse email du responsable de cette zone, avec le premier point + - L&rsquo;adresse email du responsable de cette zone, avec le premier point remplacé par un @, </p> <p>puis entre parenthèses :<br /> - - Le numéro de série ("version" du fichier de zone, ici au format + - Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format YYYYMMDDNN) <br /> - La période de refresh, période entre chaque mise a jour du nameserver authoritaire secondaire, <br /> - La période de retry, le temps entre chaque essai de mise a jour si le nameserveur authoritaire primaire est indisponible, <br /> - - La période d'expire, le temps qu'attendra le serveur autoritaire + - La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire secondaire avant de supprimer les informations de son cache si le primaire reste indisponible, et enfin <br /> - - La période de TTL négatif, le temps qu'attendra le serveur secondaire + - La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire avant de ne plus offrir les informations de cette zone si le serveur primaire est injoignable. </p> -<p>Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus +<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus important a lire (pour les humains en tout cas). Continuons : </p> <p>NS (nameserver) permet de désigner les différents nameservers faisant autorité pour ce domaine. </p> -<p>MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. -SPF est un record d'authentification pour les emails. -Les records A désignent l'association entre un nom de domaine et une adresse +<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine. +SPF est un record d&rsquo;authentification pour les emails. +Les records A désignent l&rsquo;association entre un nom de domaine et une adresse IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site -n'est pas encore en IPv6.</p> +n&rsquo;est pas encore en IPv6.</p> <p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de -mettre en place des domaines exactement semblables a d'autre (ce qui permet par -exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p> +mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par +exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p> <p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet de changer la valeur du @ et des noms de domaine non complets (qui ne se terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et -l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on -l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, +l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on +l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, cela permet de rediriger les requêtes nous parvenant et demandant un domaine se trouvant sous home.wxcafe.net.</p> <p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques -différences n'étant en fin de compte que des différences de valeurs (dues au -fait que, eh bah, c'est pas les mêmes domaines...).</p> -<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est +différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au +fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p> +<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC 1034</a> et le <a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant -aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/%D/nat/<p>NAT (Network Address Translation) in a word?<br /> -It's complicated. Very. Don't do it, you'd damage your brain. </p> -<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/%D/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. -Wood. Il est assez connu comme étant l'un des pires films jamais sortis. Rempli -d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort -d'un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> -<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l'indique), -et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite -des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a -introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des -ressources appartenant a d'autres ordinateurs a distance, un support de -l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne +aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br /> +It&rsquo;s complicated. Very. Don&rsquo;t do it, you&rsquo;d damage your brain. </p> +<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. +Wood. Il est assez connu comme étant l&rsquo;un des pires films jamais sortis. Rempli +d&rsquo;erreur de montage, d&rsquo;effets spéciaux au rabais, et ayant même connu la mort +d&rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> +<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l&rsquo;indique), +et qui a été pensé comme le successeur d&rsquo;Unix. Il est conçu comme une poursuite +des concepts unixiens jusqu&rsquo;à leur but naturel. Ainsi, c&rsquo;est Plan9 qui a +introduit le concept d&rsquo;UnionFS, le protocole 9P qui permet d&rsquo;acceder a des +ressources appartenant a d&rsquo;autres ordinateurs a distance, un support de +l&rsquo;unicode par défaut et sur tout le système (a l&rsquo;inverse d&rsquo;Unix, qui fonctionne a la base en ASCII), un support de ProcFS amélioré, une interface graphique par -défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p> -<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit -d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a -quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt +défaut, et d&rsquo;autres améliorations sur les thèmes de base que propose Unix. </p> +<p>Cependant, Plan9 n&rsquo;a jamais été véritablement utilisé pour quoi que ce soit +d&rsquo;autre que la recherche en systèmes, et c&rsquo;est dommage, parce que Plan9 a +quelque chose de très intéressant à proposer. En effet, en ces jours d&rsquo;intérêt grandissant pour le klaoude et la délocalisation a la fois du processing et des -données, et bien que Plan9 ait été créé bien avant que le terme "cloud -computing" n'apparaisse pour la première fois, il semble que ce système ait été +données, et bien que Plan9 ait été créé bien avant que le terme &ldquo;cloud +computing&rdquo; n&rsquo;apparaisse pour la première fois, il semble que ce système ait été conçu pour apporter cette délocalisation tant rêvée.</p> -<p>En effet, même si l'on considère que les nouveautés qu'il apporte par rapport a -Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà -conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système -d'exploitation ultime en terme de partage de ressources et de données. -Ainsi, le fait que 9P permette de considérer toutes les ressources d'un système -distant comme n'étant qu'une poignée de fichiers permet de le monter comme -n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder +<p>En effet, même si l&rsquo;on considère que les nouveautés qu&rsquo;il apporte par rapport a +Unix ne sont pas extraordinaires en soit (alors qu&rsquo;elles sont déjà +conséquentes), lorsqu&rsquo;on les prend ensemble, elles font de Plan9 le système +d&rsquo;exploitation ultime en terme de partage de ressources et de données. +Ainsi, le fait que 9P permette de considérer toutes les ressources d&rsquo;un système +distant comme n&rsquo;étant qu&rsquo;une poignée de fichiers permet de le monter comme +n&rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse -interagir avec les autres, même s'ils sont hétérogènes (c'est a dire provenant -de machines différentes), permet d'utiliser les ressources d'une machine -distante comme si elle était présente localement. Le mécanisme d'UnionFS permet +interagir avec les autres, même s&rsquo;ils sont hétérogènes (c&rsquo;est a dire provenant +de machines différentes), permet d&rsquo;utiliser les ressources d&rsquo;une machine +distante comme si elle était présente localement. Le mécanisme d&rsquo;UnionFS permet de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers de plusieurs machines a la fois (ce qui permet une délocalisation des données bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p> <p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de -parler d'ordinateur lorsque le concept même du système est d'être composé de +parler d&rsquo;ordinateur lorsque le concept même du système est d&rsquo;être composé de clusters eux mêmes composés de machines hétérogènes. Le système de fichier -virtuel /net fourni par le kernel de Plan9 permet d'implémenter très facilement -différents concepts réseaux : en montant le /net d'un ordinateur du réseau local -sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur -du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur +virtuel /net fourni par le kernel de Plan9 permet d&rsquo;implémenter très facilement +différents concepts réseaux : en montant le /net d&rsquo;un ordinateur du réseau local +sur celui servant de gateway vers l&rsquo;internet, on crée un NAT vers cet ordinateur +du réseau local. En montant le /net d&rsquo;un ordinateur distant sur un ordinateur local via le protocole 9P sécurisé, on crée un VPN : les connections locales se -font en utilisant l'accès de l'ordinateur distant, et les connections entre les +font en utilisant l&rsquo;accès de l&rsquo;ordinateur distant, et les connections entre les deux sont chiffrées. </p> <p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour -partager leur "puissance" de calcul en userspace, des superordinateurs pour -lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels -JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait +partager leur &ldquo;puissance&rdquo; de calcul en userspace, des superordinateurs pour +lesquels le noyau Linux s&rsquo;est doté du support de jusqu&rsquo;à 4096 CPUs, des OS tels +JoliOS qui promettent une integration du klaoude alors qu&rsquo;ils ne sont en fait que des navigateurs web a peine améliorés et des services de stockage en ligne -qui promettent un accès universel a toutes nos données alors qu'ils ne proposent +qui promettent un accès universel a toutes nos données alors qu&rsquo;ils ne proposent que de les garder a disposition par le web, Plan9 promettait une technologie de partage des ressources système et de données, une intégration du réseau dans le système particulièrement poussée, un environnement graphique supporté par le -basesystem et non greffé par dessus comme l'a été X11, et de nombreuses autres +basesystem et non greffé par dessus comme l&rsquo;a été X11, et de nombreuses autres améliorations sur Unix.</p> -<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative, -et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de +<p>Malheureusement, il n&rsquo;a jamais été adopté de façon véritablement significative, +et ce pour une raison très Unixiènne : &ldquo;worse is better&rdquo;. En effet, le parc de machines Unix déjà installées était suffisamment performant et fonctionnel pour que des solutions soient développées au dessus du système pour remplir les mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de -Linux, FUSE, etc...</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/%D/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler +Linux, FUSE, etc&hellip;</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler le texte (ce qui se montre relativement indispensable dans un environnement Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu connu en détail, et la plupart du temps une seule fonction est utilisée : le remplacement de texte.<br /> Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p> -<p>Tout d'abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais -aussi un langage de manipulation de texte dérivé de <code>ed</code>, l'éditeur original. -<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas -personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des -machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs -dits "visuels", tels que vim, emacs, et globalement tous les éditeurs ayant un +<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais +aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas +personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des +machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs +dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du -concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d'une ligne a la fois. +concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois. En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p> -<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d'empêcher -l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui -permet de rediriger l'output dans le fichier d'input. Cela dit, l'intérêt unique +<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher +l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui +permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique du programme est son langage de manipulation de texte.</p> <p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des /). Ainsi, la commande de base dans <code>sed</code> est </p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/ </pre></div> <p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de -n'exécuter les commandes qui suivent que sur ces lignes.) </p> +n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p> <p><br/> -La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s'utilise de +La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de la façon suivante : </p> -<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span> </pre></div> <p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une regex) par [new text] (qui doit être un texte fixe, avec quelques exceptions), en appliquant [options], la plus connue des options étant <code>g</code>, -qui permet d'appliquer la commande affectée a toutes les occurrences du texte +qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte matché sur la/les lignes concernée-s.<br /> -Les exceptions a la "fixité" de [new text] sont particulièrement +Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard, -excepté le fait qu'il permet jusqu'à 9 "holding spaces", qui sont délimités par +excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par \( et \), et qui sont représentées dans le texte de remplacement par \1 à \9.</p> <p>Par exemple, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39; </pre></div> -<p>sur le texte "hello world world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world </pre></div> <p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le texte original. Ainsi, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&amp;</span> <span class="n">world</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39; </pre></div> -<p>sur le texte "hello world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world </pre></div> <p><br/></p> <p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans -l'espace courant :</p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span> +l&rsquo;espace courant :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p </pre></div> <p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire -dédié, que j'appelle l'espace courant (pattern space en anglais). La commande -<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit -le pattern space de façon a ce qu'il ne contienne que les lignes matchant, et le -<strong>p</strong> affiche donc ce dernier.</p> -<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s'utilisent ainsi :</p> -<div class="highlight"><pre><span class="n">c</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit +le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p> +<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \ +[text] </pre></div> <p>De la même façon, pour le i : </p> -<div class="highlight"><pre><span class="n">i</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \ +[text] </pre></div> <p>Et de même pour a. </p> -<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'elles +<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong> sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme @@ -947,26 +1210,25 @@ space, et non sur la ligne en question.</p> /[regex]/d <strong>d</strong> (delete) supprime les contenus du pattern space.</p> <p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je -parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé -au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier <em>en +parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé +au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a -ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou -bien la confidentialité d'un support de stockage, par exemple. Nous allons ici +ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou +bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici voir comment mettre en place un système de ce type sous GNU/Linux. Cet article -n'a pas pour but de vous apprendre a mettre en place un système basé sur une -procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en -jeu dans l'utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de -présenter un rapide tutoriel concernant la création d'un support chiffré sur +n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une +procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en +jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de +présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p> <p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système -du noyau Linux, et s'appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement -de disques. Comme son nom l'indique, device-mapper est un système qui a pour but +du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement +de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère -comme "block device" tout fichier spécial (en gros, les fichiers disques dans -<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le +comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de -fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. -Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. +fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad. +Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes. Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans /dev, et device-mapper est requis pour pouvoir en voir les partitions (qui apparaîtront donc dans /dev/mapper)</p> @@ -976,59 +1238,59 @@ déchiffre a la volée tous les accès disques a ce périphérique non chiffré traduisant sur le système de fichier chiffré, le tout de manière tout a fait transparente pour les applications utilisant le disque en question. Cela induit bien entendu une baisse de performance relativement significative dans le cas -d'un chiffrement du système de fichier root, mais quasiment insignifiante dans +d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans le cas de chiffrement de partitions de données.</p> -<p>D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer +<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer si le système de fichier root est chiffré. Dans ce cas précis, la procédure de -boot <strong><em>doit</em></strong> s'appuyer sur une image initrd (l'initrd est un système de +boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de fichier minimal qui sert uniquement a initialiser le système. Les kernels de base de la plupart des distributions GNU/Linux en utilisent un dans tous les cas, pour des raisons de compatibilité) et sur une partition de boot qui elle -n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge +n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et -charge l'initrd en RAM, celui-ci a son tour lance un script permettant de +charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de charger les modules nécessaires a la suite du boot (que ce soit pour un boot sans disque root local, ou bien comme ici avec un système chiffré), puis le -système de fichier "cible" est remonté sur la racine, et l'initrd est démonté -est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend +système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté +est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend depuis le système de fichier maintenant monté sur la racine.</p> <p>La méthode la plus évidente pour contourner le chiffrement du disque est alors -de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par +de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par un autre modifié, copiant par exemple la phrase de passe permettant de déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir -contre ce genre d'attaques : l'une des plus simple est de faire un checksum du +contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot -que l'initrd présente toujours le même checksum. Cela dit, cette méthode a -l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès +que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a +l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès a un fichier initrd reconnu comme sûr.<br /> Une autre approche consisterait a placer le système de fichier /boot sur un périphérique dédié, protégé en écriture de façon matérielle (par exemple, une carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et -protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un -attaquant de modifier ce système de fichier, et l'initrd est alors toujours de +protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un +attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de confiance. Cependant, cela a pour conséquence de rendre la mise a jour de -l'initrd et du noyau <em>beaucoup</em> plus difficile qu'elle ne le serait sans.</p> +l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p> <p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop, -l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est -maintenant responsable de l'utilisation <em>userspace</em> de dm-crypt, qui pour sa +l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est +maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la -manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier +manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi obligatoirement être capables de le faire en tant que root. </p> <p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br /> -Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, -dans une situation réelle ou l'on cherche a chiffrer un disque, il convient -d'utiliser /dev/urandom comme source, pour éviter la détection du système de +Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela, +dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient +d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de fichier chiffré sur le disque. Ici, par exemple, nous allons faire : </p> -<div class="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img </pre></div> <p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img </pre></div> @@ -1038,34 +1300,34 @@ passphrase. Il convient ici de choisir une passphrase particulièrement sûre, puisque toute personne ayant accès a la passphrase aura aussi accès au disque et donc a vos secrets.<br /> Une fois cela fait, nous allons mapper cette image : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto </pre></div> <p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes, -puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous -voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En +puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous +voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les -systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque -qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque +systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque +qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque virtuel qui correspond a notre image. Il se comporte comme toute partition, et peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. Il se comporte en effet comme une partition, et non comme un véritable disque.) -Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de -le faire, pour pouvoir l'utiliser. </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> +Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de +le faire, pour pouvoir l&rsquo;utiliser. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto </pre></div> <p>Maintenant que notre disque est formaté, il peut être monté : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt </pre></div> <p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat suivant : </p> -<div class="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) </pre></div> @@ -1075,51 +1337,51 @@ sont (en fonction de votre passphrase) en sécurité. </p> <ul> <li> <p>Pour monter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o">&lt;</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt; +sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt; </pre></div> </li> <li> <p>Pour démonter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt; +sudo cryptsetup luksClose &lt;nom de disque virtuel&gt; </pre></div> </li> </ul> -<p>Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de +<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de créer et de monter/démonter vos images/disques chiffré-e-s en une seule commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p> <p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable disque (ou clé usb, ou autre), il est préférable de créer une partition de taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code> -pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/%D/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation +pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a &ldquo;un peu&rdquo; changé récemment.</p> +<p>Du coup, expliquons. J&rsquo;ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même +occasion découvert <a href="http://getpelican.com">pelican</a>. J&rsquo;ai tout de suite accroché a ce générateur de +site statique en python, du fait de son efficacité, de sa facilité d&rsquo;utilisation et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au +fichiers markdown ou reStructuredText, les passe a la moulinette d&rsquo;un &ldquo;thème&rdquo; +constitué de templates pour les fichiers html et l&rsquo;organisation du projet et +d&rsquo;une partie &ldquo;statique&rdquo; contenant le css, et les autres fichiers nécessaires au projet, et en fait des pages html. </p> <p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span> +<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span> + <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span> </pre></div> @@ -1127,116 +1389,116 @@ projet, et en fait des pages html. </p> django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a +<p>L&rsquo;un des grands avantages de pelican est aussi la facilité qu&rsquo;il offre quand a la mise a jour du blog.<br /> En effet, il offre un système de Makefiles permettant, grâce a de nombreuses cibles de compilation, de régénérer le site entier, de ne générer que les fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... +fichiers n&rsquo;existant pas la dernière fois, etc&hellip; La gestion du projet en devient donc très simple, puisque après avoir écrit un article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> <p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est +pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&rsquo;est moi +qui ait modifié les templates et le css), c&rsquo;est lisible (puisque c&rsquo;est du +python, par opposition au PHP&hellip;), et c&rsquo;est plus &ldquo;efficace&rdquo;. Le markdown est très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus +les articles, je n&rsquo;ai pas besoin d&rsquo;un accès continu au net, bref, c&rsquo;est plus efficace.</p> <p>En ce qui concerne les points négatifs : </p> <ul> <li> <p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a + Je vous propose de vous référer a l&rsquo;article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a mon avis sur ce sujet.</p> </li> <li> <p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a + Il va bientôt être remis, c&rsquo;est juste un manque de temps de ma part, mais vu + que toutes les pages passent par les mêmes templates, c&rsquo;est assez facile a faire.</p> </li> <li> <p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> + Pourquoi c&rsquo;est dans les points négatifs, ca?</p> </li> <li> -<p>Temps d'adaptation et d'appréhension du système: +<p>Temps d&rsquo;adaptation et d&rsquo;appréhension du système: Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca + réguliers sur le blog, c&rsquo;est parce que j&rsquo;apprend a me servir de ce système + et que j&rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous + les cas ca me permet d&rsquo;apprendre plein de choses, donc je mets plutôt ca dans la catëgorie positive.</p> </li> </ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/%D/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu -pour avoir développé Cydia, un "app store" alternatif pour les iTrucs), +<p>Voila, c&rsquo;est mon retour d&rsquo;expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu +pour avoir développé Cydia, un &ldquo;app store&rdquo; alternatif pour les iTrucs), après avoir reçu une paire de Google glass de la part de Google (de -façon assez évidente...), a trouvé intéressant d'obtenir un accès root -sur celles-ci, ce qu'il a accompli très rapidement. Des démentis de la +façon assez évidente&hellip;), a trouvé intéressant d&rsquo;obtenir un accès root +sur celles-ci, ce qu&rsquo;il a accompli très rapidement. Des démentis de la part de Google et de certains autres sites sont vite arrivés, disant que les lunettes possédaient un bootloader débloqué et que de fait, le root était facile a obtenir : il suffisait de débloquer le bootloader, -d'extraire l'OS, de le rooter hors-fonctionnement, puis de le +d&rsquo;extraire l&rsquo;OS, de le rooter hors-fonctionnement, puis de le réinstaller, rooté, sur les lunettes.</p> <p>Le fait est que de débloquer le bootloader laisse une trace permanente -sur les lunettes, et que Saurik n'a pas utilisé cette technique pour +sur les lunettes, et que Saurik n&rsquo;a pas utilisé cette technique pour rooter sa paire. Voyons comment il a fait :</p> -<p><em>Je tiens tout d'abord a préciser que toutes les informations qui vont +<p><em>Je tiens tout d&rsquo;abord a préciser que toutes les informations qui vont suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la -partie "How does this exploit work".  Je tente d'apporter ma maigre +partie &ldquo;How does this exploit work&rdquo;.  Je tente d&rsquo;apporter ma maigre contribution a cette explication.</em></p> -<p>Donc, d'après les témoignages des quelques utilisateurs de Glass dans le +<p>Donc, d&rsquo;après les témoignages des quelques utilisateurs de Glass dans le monde, il semblerait que ces dernières fonctionnent avec un système -d'exploitation Android, avec une nouvelle interface, mais avec les mêmes +d&rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes outils internes: un kernel Linux, des outils userland GNU et une machine virtuelle Java Dalvik pour les applications.</p> -<p>Saurik a donc cherché un exploit connu pour cette version d'android, et -l'a appliqué a son problème. L'exploit en question est relativement -simple. Depuis la version 4.0 d'android, le système permet la sauvegarde +<p>Saurik a donc cherché un exploit connu pour cette version d&rsquo;android, et +l&rsquo;a appliqué a son problème. L&rsquo;exploit en question est relativement +simple. Depuis la version 4.0 d&rsquo;android, le système permet la sauvegarde des données des différentes applications, une a une, via ADB (Android -Debug Bridge, un protocole USB permettant l'accès a de nombreuses +Debug Bridge, un protocole USB permettant l&rsquo;accès a de nombreuses fonctions avancées des machines fonctionnant sous android, dont, entre -autre, un shell, un accès au logs de debugging, etc... Cette +autre, un shell, un accès au logs de debugging, etc&hellip; Cette fonctionnalité est bien entendu désactivable.) Ce backup est très simple : il crée un fichier .tgz contenant le dossier de configuration de -l'application. Lors de la restauration, le système supprime la -configuration existante, puis la remplace par celle dans l'archive gzip.</p> +l&rsquo;application. Lors de la restauration, le système supprime la +configuration existante, puis la remplace par celle dans l&rsquo;archive gzip.</p> <p>Le problème de sécurité vient du fait que les applications android voient leurs données stockées dans /data/data/identifiant/, et que -/data/ a pour permissions drwxrwx--x  27  system  system, ce qui +/data/ a pour permissions drwxrwx&ndash;x  27  system  system, ce qui signifie que seul system et les membres du groupe system peuvent lire dessus. Or, le fichier /data/local.prop définit de nombreux paramètres -au démarrage, et notamment un qui permet au système de déterminer s'il -fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur +au démarrage, et notamment un qui permet au système de déterminer s&rsquo;il +fonctionne dans une VM ou sur un véritable appareil. S&rsquo;il fonctionne sur une machine virtuelle, il donne les droits root a tout utilisateur se -connectant via ADB, ce qui est ce que l'on cherche pour l'instant. Le +connectant via ADB, ce qui est ce que l&rsquo;on cherche pour l&rsquo;instant. Le fait que /data/ appartienne a system veut dire que le programme de restauration doit être setuid pour accéder aux données a l’intérieur qui -appartiennent a root (soit toutes les applications système d'android, -dont l'application paramètres, et, dans ce cas précis, l'application de +appartiennent a root (soit toutes les applications système d&rsquo;android, +dont l&rsquo;application paramètres, et, dans ce cas précis, l&rsquo;application de log système présente sur les google glass de test. Ainsi, nous avons un processus tournant en tant que root, qui va écrire sur une partition qui nous intéresse des données que nous possédons.</p> -<p>Cependant, un problème reste : le système de restauration d'Android +<p>Cependant, un problème reste : le système de restauration d&rsquo;Android vérifie les données avant de restaurer, et ne restaure pas les symlinks, -ce qui nous empêche d'avoir accès directement a /data/local.prop, le -fichier qu'on cherche a modifier. Cela dit, il nous reste une +ce qui nous empêche d&rsquo;avoir accès directement a /data/local.prop, le +fichier qu&rsquo;on cherche a modifier. Cela dit, il nous reste une possiblité. Plaçons un dossier world-writable dans le fichier de backup, et nous pourrons écrire dedans pendant quelques secondes, le temps que la restauration se termine et que le système remette les permissions en place. Ainsi, nous pouvons créer le fichier /data/local/com.google.glass.logging/whatev/x, lien vers /data/local.prop, et nous avons un toujours un processus tournant en -tant que root qui est en train d'écrire dans ce dossier.</p> +tant que root qui est en train d&rsquo;écrire dans ce dossier.</p> <p>Donc, nous allons lancer deux processus en même temps : </p> <ul> <li> <p>Le premier tentera en boucle de créer le symlink. Il sera consitué de la commande suivante, depuis un shell sur les lunettes :</p> -<div class="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">&gt;/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span> -<span class="k">do</span> <span class="o">:</span> -<span class="n">done</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&gt;/dev/null +do : +done </pre></div> @@ -1245,10 +1507,10 @@ tant que root qui est en train d'écrire dans ce dossier.</p> <p>Le deuxième sera le processus de restauration de notre exploit. Celui ci, pour une plus grande chance de réussite, devra être suffisamment lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x, - pour qu'il crée whatev, prenne du temps a copier bigfile, puis écrive + pour qu&rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive dans x après que le symlink soit effectif. La commande sera, depuis - l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span> + l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab </pre></div> @@ -1257,111 +1519,111 @@ tant que root qui est en train d'écrire dans ce dossier.</p> world-readable. Il va commencer a copier le fichier bigfile.<br /> - Le processus de symlink va créer le lien /data/data/com.google.glass.logging/whatev/x, pointant vers - /data/local.prop, puis rendre l'âme proprement.<br /> + /data/local.prop, puis rendre l&rsquo;âme proprement.<br /> - Le processus de restauration, ayant enfin fini de copier whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui est lié a /data/local.prop. Comme le processus est setuid root, il ne se rendra compte de rien, et écrira tout dans /data/local.prop.</p> </li> </ul> -<p>And voilà! On a écrit ce que l'on veut dans /data/local.prop, ce qui -nous permet de faire croire a android qu'il tourne dans une machine -virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui -indique au noyau qu'il tourne dans qemu, un système de VM).</p> -<p>Il nous reste a rebooter, depuis l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<p>And voilà! On a écrit ce que l&rsquo;on veut dans /data/local.prop, ce qui +nous permet de faire croire a android qu&rsquo;il tourne dans une machine +virtuelle (ce que l&rsquo;on veut, c&rsquo;est en fait &ldquo;ro.kernel.qemu=1&rdquo;, qui +indique au noyau qu&rsquo;il tourne dans qemu, un système de VM).</p> +<p>Il nous reste a rebooter, depuis l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Puis nous remontons la partitions système en lecture/écriture (r/w), depuis le host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;mount -o remount,rw /system&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;mount -o remount,rw /system&quot; </pre></div> -<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span> +<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l&rsquo;appareil :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin </pre></div> <p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir l’exécuter plus tard :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;chmod 6755 /system/xbin/su&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;chmod 6755 /system/xbin/su&quot; </pre></div> <p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir redémarrer normalement :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;rm /data/local.prop&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;rm /data/local.prop&quot; </pre></div> <p>Enfin, nous redemarrons a nouveau :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Et voila, une paire de google glass rootée!</p> -<p>Il est bon de préciser que cette manipulation n'est possible que parce -que les lunettes tournent sous une ancienne version d'android, et que ce +<p>Il est bon de préciser que cette manipulation n&rsquo;est possible que parce +que les lunettes tournent sous une ancienne version d&rsquo;android, et que ce bug a été fixé depuis.</p> <p>Il serait aussi interessant de couvrir les problèmes de vie privée -qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p> -<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/%D/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il -s'agit de posséder son propre serveur, et donc, par extension, ses +qu&rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.</p> +<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il +s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses données. </p> -<p>Bien entendu, il n'est pas nécessaire pour cela de posséder +<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder physiquement son propre serveur (encore que ce soit possible, mais ce -n'est pas le sujet abordé ici.)<br /> +n&rsquo;est pas le sujet abordé ici.)<br /> Nous expliquerons ici les étapes nécessaires pour arriver a avoir un serveur utilisable, du moment ou vous arrivez sur le système fraichement installé, au moment ou vous possédez un serveur avec tous les paquets -nécessaires a l'utilisation que l'on veut en faire ici d'installés. +nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés. Cette partie va consister a paramétrer le système (ici un debian squeeze. Il est bien sur possible de faire la même chose avec a peu près toutes les distributions Linux disponibles, tout comme avec les BSD et tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x -squeeze, parce que c'est une distribution simple a utiliser comme -serveur, stable, et facile a configurer (puisqu'une bonne partie de la +squeeze, parce que c&rsquo;est une distribution simple a utiliser comme +serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la configuration est déjà faite et incluse dans le paquet), donc adaptée au -but de cet article, a savoir rendre l'installation simple et +but de cet article, a savoir rendre l&rsquo;installation simple et compréhensible).</p> -<p>La première chose a faire est bien entendu d'obtenir le serveur en lui +<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui même. Cette partie de la chose ne sera pas traitée dans cet article. Il -existe en effet un nombre infini d'obtenir un serveur, que ce soit en le -louant chez OVH/1&amp;1/n'importe quel autre hébergeur commercial, en -participant a un système d'hébergement collaboratif (je vous laisse +existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le +louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en +participant a un système d&rsquo;hébergement collaboratif (je vous laisse chercher), en achetant un serveur et en le faisant fonctionner de chez -vous, en utilisant un vieux PC... Bref, les possibilités sont multiples. +vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples. Dès lors que vous avez accès a un système debian serveur, peu importe sur quel matériel il fonctionne, et a priori peu importe aussi la manière -dont vous y accédez, le résultat est le même (et la procédure aussi...). +dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;). Dans cet article, nous parlerons de la configuration de base, du moment ou vous avez le serveur vierge dans les mains au moment ou vous installez le serveur http.</p> -<p>Dans cet article, lorsque est précisée le type d'IP a utiliser, il -convient de mettre ce type précisément. Quand le type n'est pas +<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il +convient de mettre ce type précisément. Quand le type n&rsquo;est pas précisée, libre a vous de choisir ipv4 ou ipv6.</p> <p>Bref. Commençons au point ou vous avez un accès root a votre serveur, -n'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou -rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez +n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou +rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe solide sur le compte root. Continuons en allant vite mettre en place le nom de domaine. Pour cela, votre registrar doit vous fournir une -interface vous permettant d'éditer l'entrée DNS pour votre nom de +interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de domaine. </p> -<p>Cette entrée doit donc pour l'instant ressembler a ca :</p> -<div class="highlight"><pre> <span class="o">&lt;</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">&gt;</span> <span class="n">NS</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">A</span> <span class="o">&lt;</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> - <span class="n">IN</span> <span class="n">AAAA</span> <span class="o">&lt;</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> +<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1 + IN MX 1 + IN A &lt;IPv4 de votre serveur&gt; + IN AAAA &lt;IPv6 de votre serveur&gt; </pre></div> <p>Cela vous permet de rediriger tout le trafic se référant a votre nom de domaine vers votre ip (le fonctionnement exact du DNS est assez -compliqué a expliquer, donc on va dire que c'est de la magie pour -l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer +compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour +l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers votre serveur, ce qui est un bon début. Faisons un petit point sécurité ici : pour accéder a votre serveur, il vous suffit actuellement de taper @@ -1370,50 +1632,50 @@ le mot de passe root.</p> bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction du nombre de caractères, ça prend plus ou moins de temps, et si vous avez suffisamment de caractères, ça peut prendre un temps assez -conséquent. Cela dit, il vaut mieux être prudent...) Ainsi, nous allons -arrêter d'utiliser root et nous allons commencer a utiliser des couples +conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons +arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples clés publiques/privées pour nous connecter au serveur.<br /> -Cela se fait en deux temps : tout d'abord, créer un nouvel utilisateur, -grâce auquel nous administrerons le serveur a l'avenir; puis configurer -OpenSSH pour que celui ci n'accepte que les connections par clés et plus +Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur, +grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer +OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus celles sur root.</p> <p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se fait avec adduser, qui est interactif (vous ne devriez pas avoir de -problème avec, puisqu'il crée tout les dossiers et fichiers nécessaires, +problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires, et vous pose toutes les questions utiles pour vous aider.) sinon, vous -devrez utiliser useradd, qui est (en plus d'être très chiant a -distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait -un simple script permettant l'utilisation d'useradd plus facilement.)</p> +devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a +distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait +un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p> <p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif en faisant un <code>adduser --group &lt;username&gt;</code></p> <p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m -N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera -son dossier principal dans /home/, et l'ajoutera au groupe du même nom +son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom que lui (ce qui est en général nécessaire pour des questions de vie privée).</p> -<p>Il convient maintenant d'ajouter cet utilisateur aux groupes qu'il sera +<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix users staff sudo wheel</code>, puis de changer son mot de passe <code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br /> -Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un +Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un utilisateur complètement fonctionnel et utilisable pour toutes les -taches d'administration. Si vous devez encore utiliser root, c'est que +taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que quelque chose ne va pas.</p> -<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous +<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous allons maintenant passer a la phase 2 du plan : désactiver le login ssh root et le login ssh par mot de passe.<br /> -Tout d'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un +Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un système assez semblable a celui vous permettant de chiffrer vos mail : vous avec une clé publique et une clé privée sur le client, et la clé publique est aussi sur le serveur. Lorsque vous vous connectez, openssh vérifie que vous possédez la clé privée qui correspond a la clé publique stockée sur le serveur (pour votre utilisateur, bien entendu). Il est -également possible d'utiliser plusieurs clés publique pour chaque<br /> +également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br /> utilisateur.</p> <p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout -d'abord, il nous faut générer un couple de clés publique/privée sur le +d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t rsa précise a ssh que nous voulons un chiffrement rsa, qui est suffisamment solide pour cette utilisation.) Entrez les informations que @@ -1421,12 +1683,11 @@ ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br /> known_hosts liste les serveurs auxquels vous vous êtes connectés déjà une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous -intéresse ici c'est id_rsa et id_rsa.pub . id_rsa contient votre clé +intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé privée, sauvegardez la sur une clé USB ou notez la sur un bout de papier, si vous la perdez, vous ne pourrez plus vous connecter au -serveur. (planquez la clé usb/le bout de papier...) id_rsa.pub, quand a -lui, contient votre clé publique. Copiez la sur le serveur, avec un -<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou +serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a +lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou en la copiant a la main, si ça vous amuse. </p> <p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra. @@ -1438,19 +1699,19 @@ domaine&gt;</code>), et il ne devrait pas vous demander de mot de pass il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré, donc vérifiez que vous avez suivi correctement les instruction ci-dessus.</strong></p> -<p>Continuons. Il ne nous reste plus qu'a installer le serveur web, et a le +<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le configurer: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \ -<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \ -<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \ -<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \ -<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \ +apache2 apache2.2-common apache2-doc apache2-mpm-prefork \ +apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \ +php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \ +apache2-suexec php-pear php-auth php5-mcrypt mcrypt \ +php5-imagick imagemagick libapache2-mod-suphp libruby \ +libapache2-mod-ruby </pre></div> -<p>(faisons large, on aura besoin de l'excédent plus tard...), puis activons les<br /> +<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br /> mods apache en faisant <code>a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest</code>, et faisons en sorte que ces activations soient prises en compte par apache via un <code>sudo service apache2 @@ -1460,46 +1721,46 @@ comment fonctionner sur notre nom de domaine et ou trouver les fichiers a envoyer. </p> <p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez sympa pour nous filer un fichier de configuration par défaut. Il nous -faut encore l'éditer, en changeant l'adresse mail au début du document +faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>, -et enfin redémarrer apache pour qu'il prenne en compte les +et enfin redémarrer apache pour qu&rsquo;il prenne en compte les modifications, par un <code>sudo service apache2 restart</code> </p> <p>Et maintenant, il vous reste a apprendre le html, parce que ca y est, votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on -verra l'installation du serveur mail (c'est suffisamment complexe pour -prendre un article seul...)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are +verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour +prendre un article seul&hellip;)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p> -<p>Bon, voila. J'ai passé le cap. Je suis sous GNU/Linux depuis un certain +<p>Bon, voila. J&rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain temps, maintenant, et depuis un certain temps je remarque des -changements malvenus. Bien entendu, au début, je n'avais pas les +changements malvenus. Bien entendu, au début, je n&rsquo;avais pas les connaissances nécessaires pour comprendre ne serait-ce que ces modifications existaient. Et puis certaines sont arrivées avant que je -n'ai même idée que quelque chose dans mon système d'exploitation avait +n&rsquo;ai même idée que quelque chose dans mon système d&rsquo;exploitation avait cette fonction la. Par exemple, udev, ou policykit/consolekit/. A -l'époque, je n'avais aucune idée de la façon dont les disques étaient -montés sur mon système. Le premier système non-Windows que j'ai utilisé +l&rsquo;époque, je n&rsquo;avais aucune idée de la façon dont les disques étaient +montés sur mon système. Le premier système non-Windows que j&rsquo;ai utilisé fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je cherche a démonter le système pour comprendre comment il fonctionnait en -profondeur. Cependant, avec le temps, les connaissances s'accumulant et -mon niveau de compréhension du système s'améliorant, j'ai commencé a -remarquer que certain bouts de l'OS ne collaient pas exactement avec les -autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a -cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma -compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne +profondeur. Cependant, avec le temps, les connaissances s&rsquo;accumulant et +mon niveau de compréhension du système s&rsquo;améliorant, j&rsquo;ai commencé a +remarquer que certain bouts de l&rsquo;OS ne collaient pas exactement avec les +autres. Bien sur, je ne saurais dire si cette réalisation s&rsquo;est faite a +cause de la recrudescence de ces bouts d&rsquo;OS, ou bien juste a cause de ma +compréhension plus poussée. Toujours est-il que ces petits bouts d&rsquo;OS ne s’adaptant pas au reste du système se faisaient de plus en plus visible. -Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai -choisi de passer a Archlinux. C'était avant le passage a systemd. Ce -système me convenait bien. Si je n'installais pas Gnome, ce que je ne +Et puis, un jour, j&rsquo;en ai eu marre de voir unity sur ma machine, et j&rsquo;ai +choisi de passer a Archlinux. C&rsquo;était avant le passage a systemd. Ce +système me convenait bien. Si je n&rsquo;installais pas Gnome, ce que je ne comptais pas faire, il ne me forçait pas a installer un *kit -quelconque, ni dbus. Oui, udev était toujours la, mais c'était le moins +quelconque, ni dbus. Oui, udev était toujours la, mais c&rsquo;était le moins envahissant de ceux la.</p> <p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les premiers sont probablement très efficaces dans leur domaine, et le -second n'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la -distribution d'avoir au plus vite les dernières versions de tout. +second n&rsquo;a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la +distribution d&rsquo;avoir au plus vite les dernières versions de tout. Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient -pas les seuls a faire ça...) ont un problème très précis, qui n'importe +pas les seuls a faire ça&hellip;) ont un problème très précis, qui n&rsquo;importe pas a tout le monde, mais qui est très gênant pour ceux a qui il importe, et ce problème est que ces systèmes ne respectent absolument pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en @@ -1508,1616 +1769,428 @@ ces 9 principes :</p> <li>Ce qui est petit est beau</li> <li>Faites en sorte que chaque programme fasse une chose, bien.</li> <li>Faites un prototype aussi vite que possible</li> -<li>Choisissez la portabilité plutôt que l'efficacité</li> +<li>Choisissez la portabilité plutôt que l&rsquo;efficacité</li> <li>Stockez les données dans des fichiers textes.</li> <li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li> <li>Utilisez des scripts shells pour faciliter la portabilité et la réutilisation.</li> -<li>Évitez les UI qui "capturent" l'utilisateur.</li> +<li>Évitez les UI qui &ldquo;capturent&rdquo; l&rsquo;utilisateur.</li> <li>Faites de chaque programme un filtre.</li> </ol> -<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et -on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas -exactement la façon dont l'informatique fonctionne. Effectivement, les -standards, les systèmes d'exploitation, les logiciels, tout doit évoluer -- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est -pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et -celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La -philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans -de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br /> -La philosophie UNIX est aussi et surtout une garantie d'utilisabilité +<p>Alors bien entendu, un système d&rsquo;exploitation est fait pour évoluer, et +on pourrait penser qu&rsquo;UNIX a fait son temps. Cependant, ce n&rsquo;est pas +exactement la façon dont l&rsquo;informatique fonctionne. Effectivement, les +standards, les systèmes d&rsquo;exploitation, les logiciels, tout doit évoluer +- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&rsquo;est +pas d&rsquo;UNIX que nous parlons ici. C&rsquo;est de la <em>philosophie</em> UNIX. Et +celle-ci n&rsquo;a pas fait son temps, <strong>elle a fait ses preuves.</strong> La +philosophie UNIX, en plus d&rsquo;être efficace sur le papier, a aussi 44 ans +de tests derrière elle, et fonctionne aussi bien qu&rsquo;au premier jour.<br /> +La philosophie UNIX est aussi et surtout une garantie d&rsquo;utilisabilité et de simplicité pour les administrateurs systèmes, pour les -développeurs, bref pour tous ceux qui font de l'informatique -<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique +développeurs, bref pour tous ceux qui font de l&rsquo;informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l&rsquo;informatique ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce sont ceux qui sont les plus proches du système).</p> -<p>Tous OS se doit d'avoir un système standardisé pour faire communiquer +<p>Tous OS se doit d&rsquo;avoir un système standardisé pour faire communiquer les programmes entre eux. UNIX a un système de pipes, des sortes de -fichiers spéciaux permettant d'échanger des informations. C'est -efficace, ça respecte le "tout est fichier", c'est standard, c'est +fichiers spéciaux permettant d&rsquo;échanger des informations. C&rsquo;est +efficace, ça respecte le &ldquo;tout est fichier&rdquo;, c&rsquo;est standard, c&rsquo;est simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient -remplacer ça, avec une interface qui n'est explicitement pas faite pour -être utilisée a la ligne de commande mais a l'aide d'APIs, et un -programme monolithique qui effectue sa tache d'une façon complètement -obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon -efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus -"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est -<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est -horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus -lire facilement les échanges entre programmes. C'est peu pratique, en +remplacer ça, avec une interface qui n&rsquo;est explicitement pas faite pour +être utilisée a la ligne de commande mais a l&rsquo;aide d&rsquo;APIs, et un +programme monolithique qui effectue sa tache d&rsquo;une façon complètement +obscure pour l&rsquo;utilisateur. Alors bien sur, il l&rsquo;effectue d&rsquo;une façon +efficace, cette tache. Oui, ça va plus vite qu&rsquo;avant. Oui, c&rsquo;est plus +&ldquo;rangé&rdquo;, ça fait moins &ldquo;fouillis&rdquo;. Mais c&rsquo;est moins efficace. C&rsquo;est<em>beaucoup</em> moins utilisable pour l&rsquo;utilisateur final. C&rsquo;est +horriblement chiant pour les sysadmins, parce qu&rsquo;ils ne peuvent plus +lire facilement les échanges entre programmes. C&rsquo;est peu pratique, en fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br /> Systemd prend le même parti de créer une interface unifiée, accessible via des appels a des APIs uniquement, complètement obscure, extrêmement abstraite, bien entendu monolithique, et très peu ouverte a la -modification par l'utilisateur final. Alors oui, il parait que ça -augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques +modification par l&rsquo;utilisateur final. Alors oui, il parait que ça +augmente la vitesse de boot. Eh bien, au risque d&rsquo;en choquer quelques uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement et que je puisse modifier facilement, et qui soit ouvert, compréhensible -et distribué. C'est presque comme si les projets freedesktop.org avaient +et distribué. C&rsquo;est presque comme si les projets freedesktop.org avaient pour but de remplacer la base UNIX de linux en créant un système -concurrent, bâtard, bâti sur le kernel Linux mais n'employant plus les -systèmes basiques d'UNIX.</p> -<p>Le problème est qu'il est facilement visible que la direction prise par -la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni +concurrent, bâtard, bâti sur le kernel Linux mais n&rsquo;employant plus les +systèmes basiques d&rsquo;UNIX.</p> +<p>Le problème est qu&rsquo;il est facilement visible que la direction prise par +la communauté Linux n&rsquo;est pas celle du retour sur les systèmes UNIX ni celle du développement de solutions respectant la philosophie UNIX, mais -remises au gout du jour (?), mais est bien d'accepter et de pousser les +remises au gout du jour (?), mais est bien d&rsquo;accepter et de pousser les changements apportés par les projets freedesktop.org directement dans le cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font partie de nombreux développeurs de ces projets), a déjà adopté tous ces -changements (archlinux aussi, mais pour d'autres raisons...), et on peut -compter sur le fait que les autres distributions l'adopteront un jour ou -l'autre.</p> -<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces -systèmes, tout du moins exprimé les raisons qui font qu'ils me -déplaisent, on pourrait penser qu'il suffit de passer a une distribution -n'incluant pas systemd, voire a une distribution n'incluant pas du tout +changements (archlinux aussi, mais pour d&rsquo;autres raisons&hellip;), et on peut +compter sur le fait que les autres distributions l&rsquo;adopteront un jour ou +l&rsquo;autre.</p> +<p>Bon, maintenant que nous avons, si ce n&rsquo;est démontré la nocivité de ces +systèmes, tout du moins exprimé les raisons qui font qu&rsquo;ils me +déplaisent, on pourrait penser qu&rsquo;il suffit de passer a une distribution +n&rsquo;incluant pas systemd, voire a une distribution n&rsquo;incluant pas du tout de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur archlinux. Cependant, avec un peu de réflexion, on voit que si des distributions comme archlinux et Fedora ont adopté systemd (et -qu'OpenSUSE est en train de l’intégrer), il est probable que cela +qu&rsquo;OpenSUSE est en train de l’intégrer), il est probable que cela devienne un standard au fil des années, et que seuls survivent systemd -et upstart, le gestionnaire de démarrage d'ubuntu, qui ne changera +et upstart, le gestionnaire de démarrage d&rsquo;ubuntu, qui ne changera probablement pas (je les vois mal revenir en arrière sur ce point.) -Toujours est-il que l'init héritée du System V semble condamnée a mourir +Toujours est-il que l&rsquo;init héritée du System V semble condamnée a mourir sous Linux. Il pourrait être judicieux de passer sous debian squeeze, qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne la recevra probablement que dans 2/3 ans. Cependant, cette période est -toujours trop courte, et met sur mon système d'exploitation une date -d'expiration, chose qui ne me plait que moyennement. Non, la solution -est de passer sous un système autre, qui ait son propre système d'init +toujours trop courte, et met sur mon système d&rsquo;exploitation une date +d&rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution +est de passer sous un système autre, qui ait son propre système d&rsquo;init (ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options -principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas -vraiment un choix, vu le peu de programmes qu'il permet de faire -fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui -n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku -n'est pas un choix non plus, puisque le but est de rester dans une +principales s&rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&rsquo;est pas +vraiment un choix, vu le peu de programmes qu&rsquo;il permet de faire +fonctionner et le fait qu&rsquo;il ne soit disponible que sur i386, ce qui +n&rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku +n&rsquo;est pas un choix non plus, puisque le but est de rester dans une optique UNIX.</p> -<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai +<p>OpenSolaris est un système d&rsquo;exploitation tout a fait valable. Je n&rsquo;ai en théorie aucun problème sur cet OS, sauf que certains choix de design -ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet, +ne correspondent pas du tout a l&rsquo;idée que j&rsquo;ai d&rsquo;un OS. En effet, OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de ses outils, avec des paquets modifiés pour les rendre plus simples a utiliser (fichiers de configuration fournis par défaut, par exemple, et -autres patchs "release-only"), et une tendance a faire des scripts et -des outils installés par défaut pour tout et n'importe quoi. Bref, cela -n'est pas le sujet. Il convient aussi de voir qu'avec la récente +autres patchs &ldquo;release-only&rdquo;), et une tendance a faire des scripts et +des outils installés par défaut pour tout et n&rsquo;importe quoi. Bref, cela +n&rsquo;est pas le sujet. Il convient aussi de voir qu&rsquo;avec la récente acquisition de Sun par Oracle, il est possible que le projet OpenSolaris -n'ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du -projet affiche d'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> -<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD -ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est +n&rsquo;ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du +projet affiche d&rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> +<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&rsquo;OpenBSD, NetBSD +ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&rsquo;est simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour -réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir -DFBSD ressemble aussi au système de l'assistance a l'user a outrance -décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment +réputation d&rsquo;être orientées sécurité, et d&rsquo;après ce que j&rsquo;ai pu en voir +DFBSD ressemble aussi au système de l&rsquo;assistance a l&rsquo;user a outrance +décris plus haut. Mais la vérité est que je n&rsquo;ai pas fait suffisamment de recherches et que FreeBSD ne va me voir arriver que par hasard, parce -qu'entre toutes les BSD ca me semble la plus sympa et la plus agréable a -utiliser, plus le fait que le système de ports me convient bien (j'aime +qu&rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a +utiliser, plus le fait que le système de ports me convient bien (j&rsquo;aime pouvoir configurer mes logiciels de façon assez profonde.)</p> -<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien +<p>Voila, c&rsquo;est mon avis sur ce &ldquo;problème&rdquo; actuel du monde de Linux. Bien entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins -n'apparaissent jamais chez certaines distributions, créant de ce fait un +n&rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un choix pour les utilisateurs.<br /> -[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/%D/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> -J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire +[1]: Je n&rsquo;ai pas trouvé de traduction satisfaisante a &ldquo;software leveraging&rdquo;, mais l&rsquo;idée est la&hellip;*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> +J&rsquo;ai annoncé il y a environ 20 jours que j&rsquo;avais pour projet de faire une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée -PiRatBox. Il se trouve qu'après de nombreux essais, un problème -récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez +PiRatBox. Il se trouve qu&rsquo;après de nombreux essais, un problème +récurrent apparait: le Raspberry Pi n&rsquo;est pas capable de fournir assez de courant par défaut pour faire fonctionner a la fois un disque dur et une antenne WiFi.<br /> -Alors, autant il me semble évident qu'avec une -alimentation provenant d'un port USB a 2A (max), je n'avais pas -énormément de chances d'avoir 2A sur chacun des ports host du Raspi, +Alors, autant il me semble évident qu&rsquo;avec une +alimentation provenant d&rsquo;un port USB a 2A (max), je n&rsquo;avais pas +énormément de chances d&rsquo;avoir 2A sur chacun des ports host du Raspi, autant avoir moins de 250 mA sur chacun de ces ports me semble un tout petit peu exagéré en terme de rentabilité. </p> <p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me -servant a rien) (vous savez, celui qui est monté en USB...), qui +servant a rien) (vous savez, celui qui est monté en USB&hellip;), qui consomme énormément, est assez louche. Il devrait toujours être possible de désactiver une device USB, me semble-t-il, au niveau logiciel. La, -bien qu'il soit surement possible de la désactiver au niveau du kernel, -il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien +bien qu&rsquo;il soit surement possible de la désactiver au niveau du kernel, +il n&rsquo;est pas <strong>simplement</strong> possible de la &ldquo;débrancher&rdquo;. Ce qui est bien chiant, étant donné le besoin évident de puissance électrique dans lequel on se retrouve. </p> -<p>Bon, je dois avouer n'avoir pas testé de lancer les différents services +<p>Bon, je dois avouer n&rsquo;avoir pas testé de lancer les différents services composant le système des piratebox sous arch, pour la simple <del>et -bonne</del> raison qu'arch utilise systemd et qu'il n'existe pas de wrapper -systemd pour les daemons piratebox, et que j'ai la flemme d'en faire, +bonne</del> raison qu&rsquo;arch utilise systemd et qu&rsquo;il n&rsquo;existe pas de wrapper +systemd pour les daemons piratebox, et que j&rsquo;ai la flemme d&rsquo;en faire, parce que systemd est une horreur a utiliser avec les scripts init. Donc -non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas +non, j&rsquo;utiliserai debian. Le problème d&rsquo;utiliser debian dans ce cas précis est que apt/dpkg a une gestion des dépendances dans un sens mais -pas dans l'autre, en ce sens que si on installe un package "haut", c'est +pas dans l&rsquo;autre, en ce sens que si on installe un package &ldquo;haut&rdquo;, c&rsquo;est a dire dépendant de plusieurs autres packages, apt/dpkg se charge -efficacement d'installer toutes les dépendances nécessaires, tandis que -si on désinstalle un package "bas", c'est a dire sur lequel de nombreux +efficacement d&rsquo;installer toutes les dépendances nécessaires, tandis que +si on désinstalle un package &ldquo;bas&rdquo;, c&rsquo;est a dire sur lequel de nombreux autres packages dépendent, apt/dpkg ne désinstalle pas ces packages -"hauts", ce qui pose un vrai problème quand on se retrouve sur un -Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui -sera installé sur le système avant l'installation proprement dite -(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd +&ldquo;hauts&rdquo;, ce qui pose un vrai problème quand on se retrouve sur un +Raspberry Pi, puisqu&rsquo;il n&rsquo;y a pas de moyen &ldquo;facile&rdquo; de choisir ce qui +sera installé sur le système avant l&rsquo;installation proprement dite +(puisque le moyen &ldquo;universel&rdquo; d&rsquo;installation sur Raspberry Pi est le dd vers la SD qui sert de disque système.)</p> -<p>Il y a <strong>énormément</strong> d'autres critiques que l'ont pourrait faire -concernant le Raspberry Pi. Son système de démarrage a s'arracher les +<p>Il y a <strong>énormément</strong> d&rsquo;autres critiques que l&rsquo;ont pourrait faire +concernant le Raspberry Pi. Son système de démarrage a s&rsquo;arracher les cheveux, par exemple. En effet, plutôt que de faire comme tout pc normalement constitué ou la partie calcul démarre, lance le bootloader, -cherche le kernel de l'OS qui lui même se lance, initialise le hardware, -etc..., a un système bâtard du au fait que la puce au centre de la carte +cherche le kernel de l&rsquo;OS qui lui même se lance, initialise le hardware, +etc&hellip;, a un système bâtard du au fait que la puce au centre de la carte est a la base une puce graphique a laquelle on a greffé un cœur de -calcul (probablement au fond d'une cour d'immeuble, dans les quartiers -pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le -plus efficace qu'aient trouvé les personnes ayant implémenté cette +calcul (probablement au fond d&rsquo;une cour d&rsquo;immeuble, dans les quartiers +pauvres de Bratislava, vu la propreté de la greffe&hellip;), et le moyen le +plus efficace qu&rsquo;aient trouvé les personnes ayant implémenté cette atrocité de gérer le boot est donc de faire démarrer le cœur graphique en premier, ce dernier exécute un code propriétaire pour démarrer le cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel -etc... </p> +etc&hellip; </p> <p>Ce qui non seulement complique énormément le boot, non seulement ajoute -du code propriétaire a un projet se disant libre, mais en plus n'est -<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, -oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p> -<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je -le terminerai dès que j'aurai récupéré les outils nécessaires pour +du code propriétaire a un projet se disant libre, mais en plus n&rsquo;est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, +oui, mais uniquement quand c&rsquo;est bien réalisé, sinon je dis non. </p> +<p>Enfin, le projet que j&rsquo;avais est toujours en cours de réalisation. Je +le terminerai dès que j&rsquo;aurai récupéré les outils nécessaires pour monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa -vie. Les problèmes qu'il m'a posé, qu'il n'aurait pas du me poser, m'ont -trop agacé pour que j'aie envie de le sortir et de jouer avec une fois +vie. Les problèmes qu&rsquo;il m&rsquo;a posé, qu&rsquo;il n&rsquo;aurait pas du me poser, m&rsquo;ont +trop agacé pour que j&rsquo;aie envie de le sortir et de jouer avec une fois sa mission remplie. </p> -<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/%D/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous +<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la +fabrication d&rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt +sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous <del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une utilisation <strong>a la</strong> UNIX<br /> -Cependant, un d'entre eux se démarque par sa moins-mauvais-itude, c'est +Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br /> Mutt est un client mail en ligne de commande, qui, comme le dit sa page -d’accueil, <a href="http://www.mutt.org">"just sucks less"</a>. Dans les faits, mutt est assez +d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez chiant a configurer mais particulièrement pratique a utiliser après.</p> <p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans -<code>/etc/Muttrc</code>, et il est courant d'utiliser offlineimap en +<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en conjonction avec celui ci, de façon a accéder aux mails même sans accès -internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne +internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne crée pas de cache, ce qui empêche la consultation des emails sans -connexion internet.) La configuration d'offlineimap se fait dans -<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config +connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config par user. Offlineimap est un petit logiciel en python qui synchronise un dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque justement mutt accepte les dossiers au format Maildir. (De plus, cela va tout a fait dans le sens de la libération des données en cela que vous possédez vos mails en local.)<br /> Bref, passons aux choses serieuses : le code. Déjà, installez -offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d'installer +offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer mutt avec le patch sidebar, qui crée un listing des dossiers sur la partie gauche.<br /> Ensuite, voyons pour la partie configuration :<br /> -Ma configuration d'offlineimap :</p> -<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span> -<span class="cp">## Originally located in ~/.offlineimaprc</span> -<span class="cp">## This should not be edited without creating a copy before</span> -<span class="cp">## Created by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +Ma configuration d&rsquo;offlineimap :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span> +<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span> +<span style="color: #75715e">## This should not be edited without creating a copy before</span> +<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="p">[</span><span class="n">general</span><span class="p">]</span> -<span class="cp"># List of accounts to be synced, separated by a comma.</span> -<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</span> +<span style="color: #f8f8f2">[general]</span> +<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span> +<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span> -<span class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span> -<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> -<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span> -<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> -<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span> -<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span> -<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</span> +<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span> +<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> +<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span> +<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> +<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span> +<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span> +<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span> -<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span> -<span class="cp"># Where should the mail be placed?</span> -<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span> - <span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span> +<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span> +<span style="color: #75715e"># Where should the mail be placed?</span> +<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span> + <span style="color: #75715e"># voulez que vos emails apparaissent</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span> -<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span> -<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span> -<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d&#39;utilisateur</span> -<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span> -<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span> +<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span> +<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span> +<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span> +<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span> +<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span> </pre></div> -<p>Ça devrait être assez simple a lire, j'ai tout bien commenté :3<br /> +<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br /> Puis ma config mutt :</p> -<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span> -<span class="cp">## This file should not be edited without creating a copy</span> -<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span> +<span style="color: #75715e">## This file should not be edited without creating a copy</span> +<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="cp"># General config for reading (fetched via offlineimap)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap) -<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span> -<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span> +set mbox_type = Maildir +<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut) -<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span> -<span class="cp"># dossier root mailbox/imap</span> +set folder = ~/Email/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap -<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> -<span class="cp"># dossier d&#39;inbox</span> +set spoolfile = +INBOX +<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox -<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">&#39;</span><span class="n">All</span> <span class="n">Mail</span><span class="err">&#39;</span> -<span class="cp"># dossier ou archiver les emails</span> +set mbox = +&#39;All Mail&#39; +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails -<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span> -<span class="cp"># enfin voila quoi.</span> +set copy = yes +<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour... +<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi. -<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span> -<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span> +set header_cache = /.hcache/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache) -<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span> -<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span> +set record = +Sent +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés -<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span> -<span class="cp"># dossier dans lequel sont stockés les brouillons</span> +set postponed = +Drafts +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons -<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span> -<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span> +mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail +<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche -<span class="cp"># General config for sending (using Mutt&#39;s native support)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support) -<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">password_placeholder</span><span class="err">&#39;</span> -<span class="cp"># votre mot de passe</span> +set smtp_pass = &#39;password_placeholder&#39; +<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe -<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">&quot;smtp://username@whatev.org:465/&quot;</span> -<span class="cp"># l&#39;url ou envoyer les emails</span> +set smtp_url = &quot;smtp://username@whatev.org:465/&quot; +<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails -<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">&quot;utf-8&quot;</span> -<span class="cp"># UTF8, NE PAS CHANGER</span> +set send_charset = &quot;utf-8&quot; +<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER -<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">&quot;.sign&quot;</span> -<span class="cp"># vous pouvez mettre votre signature dans .sign</span> +set signature = &quot;.sign&quot; +<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign -<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible </span> -<span class="cp"># comme ca.</span> +set sig_on_top = yes +<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible +<span style="color: #960050; background-color: #1e0010">#</span> comme ca. -<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span> +set ssl_verify_host = no +<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement -<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">&quot;wxcafe.net&quot;</span> -<span class="cp"># mettez l&#39;adresse de votre serveur ici</span> +set hostname = &quot;wxcafe.net&quot; +<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici -<span class="cp"># Misc settings</span> +<span style="color: #960050; background-color: #1e0010">#</span> Misc settings -<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span> -<span class="cp"># la façon de voir les emails par défaut.</span> +auto_view text/html +<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut. -<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">&quot;%y-%m-%d %T&quot;</span> -<span class="cp"># format de date d&#39;envoi/de reception.</span> +set date_format = &quot;%y-%m-%d %T&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception. -<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">&quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;</span> -<span class="cp"># format de l&#39;index (la présentation de l&#39;interface)</span> -<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span> +set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface) +<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span> -<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span> -<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/aliases&quot;</span> -<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span> -<span class="cp"># format : &quot;alias short_name long_email_adress&quot;</span> -<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span> +set sort_alias = alias +set reverse_alias = yes +set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot; +<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même. +<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot; +source <span style="color: #f8f8f2">$alias_file</span> -<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># ne pas biper. CE SON ME TUE T.T</span> +set beep = no +<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T -<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span> -<span class="cp"># ?</span> +set tilde = yes +set sleep_time = 0 +<span style="color: #960050; background-color: #1e0010">#</span> ? -<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span> -<span class="cp"># parametres de la barre coté gauche</span> +set sidebar_visible = yes +set sidebar_width = 15 +<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche -<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">&quot;Clément Hertling (Wxcafé)&quot;</span> -<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">&quot;wxcafe@wxcafe.net&quot;</span> -<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/cacert&quot;</span> -<span class="cp"># parametres d&#39;envoi. mettez vos propres infos a la place des miennes...</span> +set realname = &quot;Clément Hertling (Wxcafé)&quot; +set from = &quot;wxcafe@wxcafe.net&quot; +set use_from = yes +set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot; +<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes... -<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># vous permet de vois les headers des mails. j&#39;aime, donc je laisse.</span> +set edit_headers = yes +<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse. -<span class="cp"># Macros</span> +<span style="color: #960050; background-color: #1e0010">#</span> Macros -<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span> -<span class="cp"># pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les </span> -<span class="cp"># deux</span> -<span class="cp"># \C represente la touche Control</span> +<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus, +<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les +<span style="color: #960050; background-color: #1e0010">#</span> deux +<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span> -<span class="cp"># Control+p -&gt; remonter d&#39;un dossier dans la sidebar</span> +bind index,pager \Cp sidebar-prev +<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span> -<span class="cp"># Control+n -&gt; descendre d&#39;un dossier dans la sidebar</span> +bind index,pager \Cn sidebar-next +<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span> -<span class="cp"># Control+o -&gt; ouvrir le dossier selectionné dans la sidebar</span> +bind index,pager \Co sidebar-open +<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar -<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">&quot;=Trash&quot;</span> <span class="s">&quot;Trash&quot;</span> -<span class="cp"># d supprime le message en cours</span> +macro index,pager d &quot;=Trash&quot; &quot;Trash&quot; +<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours -<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.</span> +bind pager previous-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message. -<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de </span> -<span class="cp"># message</span> +bind pager next-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de +<span style="color: #960050; background-color: #1e0010">#</span> message -<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># raccourcis vim</span> +bind pager j next-line +bind pager k previous-line +<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim -<span class="cp"># PGP signing commands</span> +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands -<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --import -v %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --export --armor %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_autosign</span><span class="o">=</span><span class="n">yes</span> -<span class="n">set</span> <span class="n">pgp_sign_as</span><span class="o">=</span><span class="mi">0</span><span class="n">x</span><span class="o">********</span> -<span class="cp"># remplacez 0x******** par votre identifiant PGP!!!!!</span> +set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot; +set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot; +set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot; +set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot; +set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot; +set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot; +set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot; +set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot; +set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot; +set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot; +set pgp_autosign=yes +set pgp_sign_as=0x******** +<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!! -<span class="n">set</span> <span class="n">pgp_replyencrypt</span><span class="o">=</span><span class="n">no</span> -<span class="n">set</span> <span class="n">pgp_timeout</span><span class="o">=</span><span class="mi">7200</span> -<span class="n">set</span> <span class="n">pgp_good_sign</span><span class="o">=</span><span class="s">&quot;^gpg: Good signature from&quot;</span> +set pgp_replyencrypt=no +set pgp_timeout=7200 +set pgp_good_sign=&quot;^gpg: Good signature from&quot; -<span class="cp"># si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis</span> -<span class="cp"># PGP signing options</span> +<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options -<span class="cp"># Palette for use with the Linux console. Black background.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background. -<span class="cp"># Schéma de couleur Rouge et Noir. Commentez si vous voulez le </span> -<span class="cp"># défaut noir et blanc.</span> -<span class="cp"># d&#39;autres schémas sont trouvables sur google et autre.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le +<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc. +<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre. -<span class="n">color</span> <span class="n">hdrdefault</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">quoted</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">signature</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">attachment</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">message</span> <span class="n">brightwhite</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">error</span> <span class="n">brightred</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">indicator</span> <span class="n">black</span> <span class="n">red</span> -<span class="n">color</span> <span class="n">status</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tree</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">normal</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">markers</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">search</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tilde</span> <span class="n">brightmagenta</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="o">~</span><span class="n">F</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="s">&quot;~N|~O&quot;</span> +color hdrdefault red black +color quoted brightblack black +color signature brightblack black +color attachment red black +color message brightwhite black +color error brightred black +color indicator black red +color status white black +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index red black ~F +color index red black &quot;~N|~O&quot; </pre></div> -<p>Voila, pour plus d'informations vous pouvez aller voir le manuel de mutt +<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt @ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br /> -J'espère que cette configuration "toute faite" vous aidera a commencer +J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer a utiliser mutt. Il est tout de fois important de se souvenir -qu'utiliser une configuration toute faire n'aide pas a comprendre un +qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un programme ou un système, et que cette façon de faire devrait être -réservée a l'introduction ou a des situations ou il est absolument -nécessaire d'avoir rapidement une configuration fonctionnelle (c'est a -dire, dans le cas d'un client email, euh... jamais?). Je vous invite +réservée a l&rsquo;introduction ou a des situations ou il est absolument +nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a +dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite donc a relire les annotations dont sont parsemés les fichiers de configuration en question, et surtout a lire le manuel, a chercher sur <del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement -a tenter de comprendre les configurations en question et a les améliorer!</p>La séparation des églises et de l'état, une idée qu'elle est bonne?2012-12-13T03:08:00+01:00Wxcafetag:wxcafe.net,2012-12-13:posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/<p>Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter?</p> -<p>Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. </p> -<p>L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. </p> -<p>Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine <strong>doit</strong>fournir toutes ses -informations au gouvernement américain <strong>sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.</strong> </p> -<p>Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire <a href="http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/">cet article</a> de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. </p> -<p>Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <code>&lt;troll&gt;</code>Apple -Maps<code>&lt;/troll&gt;</code>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. </p> -<p>De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. </p> -<p>Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. </p> -<p>Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.<br /> -Voila, a bientôt!</p>La cryptographie avec PGP et principalement GnuPG2012-11-19T00:36:00+01:00Wxcafetag:wxcafe.net,2012-11-19:posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/<p>PGP (pour <a href="http://fr.wikipedia.org/wiki/Pretty_Good_Privacy">pretty good privacy</a>) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir <a href="http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">ici</a>) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de <em>Web of Trust</em>. </p> -<p>Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.<br /> -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.</p> -<p>Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -<a href="http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/">quitter Gmail</a> aussi, par exemple).</p> -<p>Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)</p> -<p>L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (<a href="http://fr.wikipedia.org/wiki/GNU_Privacy_Guard">GNU Privacy Guard</a>) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<code>&lt;troll&gt;</code> de façon surprenante pour un -programme GNU<code>&lt;/troll&gt;</code>) est extrêmement efficace et claire.</p> -<p>Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).</p> -<p>Tout d'abord, générons une clé GPG :</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">gen</span><span class="o">-</span><span class="n">key</span> -</pre></div> - - -<p>GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. </p> -<p>Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande <code>makepasswd</code>, qui génère automatiquement un mot de -passe) </p> -<p>GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) </p> -<p>Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">pubkey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé publique, et</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span><span class="o">-</span><span class="n">secret</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">seckey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. </p> -<p>Cela fait, listons les informations sur votre clé publique :</p> -<div class="highlight"><pre><span class="err">$</span> <span class="n">gpg</span> <span class="o">--</span><span class="n">list</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">fingerprint</span> -<span class="n">pub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">27</span><span class="n">D81AC8</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> - <span class="n">Key</span> <span class="n">fingerprint</span> <span class="o">=</span> <span class="mi">6345</span> <span class="n">A91A</span> <span class="n">FF89</span> <span class="mf">97E0</span> <span class="mi">13</span><span class="n">D0</span> <span class="mi">96</span><span class="n">A9</span> <span class="mf">9E2</span><span class="n">A</span> <span class="mi">1917</span> <span class="mi">27</span><span class="n">D8</span> <span class="mi">1</span><span class="n">AC8</span> -<span class="n">uid</span> <span class="n">Cl</span><span class="err">é</span><span class="n">ment</span> <span class="n">Hertling</span> <span class="p">(</span><span class="n">Wxcafe</span><span class="p">)</span> -<span class="n">uid</span> <span class="p">[</span><span class="n">jpeg</span> <span class="n">image</span> <span class="n">of</span> <span class="n">size</span> <span class="mi">14692</span><span class="p">]</span> -<span class="n">sub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">9</span><span class="n">ED7F77F</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> -</pre></div> - - -<p>La partie <code>pub</code> indique que c'est une clé publique, <code>4096R</code> indique que c'est -une clé RSA sur 4096 bits. La partie <code>27D81AC8</code> est -l'identifiant de la clé publique, <code>Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8</code> est appelé fingerprint de la clé. Les champs -<code>uid</code> sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ <code>sub</code> est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.<br /> -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">uploader</span><span class="o">*</span> -</pre></div> - - -<p>Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!<br /> -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). </p> -<p>Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.<br /> -Concernant les signatures de clés, elles fonctionnent de manière très -simple :<br /> -Vous devez télécharger la clé de votre correspondant, via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">search</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">correspondant</span><span class="o">*</span> -</pre></div> - - -<p>(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.<br /> -Ceci fait, vous pouvez signer la clé via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">sign</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>puis la renvoyer au serveur via</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">key</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>Voila, la clé de votre correspondant est signée!</p> -<p>Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!</p>L'informatique a l'école2012-10-15T20:34:00+02:00Wxcafetag:wxcafe.net,2012-10-15:posts/%D/linformatique-a-lecole/<p>Après avoir lu <a href="http://t.co/5PTfe6zu">cet article</a> paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.</p> -<p>En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu <a href="http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers - Heroes of the Computer Revolution</a> de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.</p> -<p>Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre <a href="http://en.wikipedia.org/wiki/IWoz">iWoz</a>) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. </p> -<p>Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.</p> -<p>C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...</p> -<p>Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.</p> -<p>Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.</p>Archlinux made simple2012-10-05T14:48:00+02:00Wxcafetag:wxcafe.net,2012-10-05:posts/%D/archlinux-made-simple/<p>Archlinux est réputée être une distribution Linux très complexe a -installer et a maintenir.</p> -<p>Je vais tenter ici de vous convaincre que ce n'est pas le cas, et -qu'elle peut se monter très intéressante et très instructive a installer -tout autant qu'a utiliser.</p> -<p>Il convient tout d'abord de rappeler a quels principes obéit Arch:</p> -<ol> -<li> -<p>Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des - programmes simples et utilisables par tous. Avec comme base de - simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu - de bonne volonté, la configuration n'est pas si compliquée!</p> -</li> -<li> -<p>La philosophie UNIX : chaque programme est prévu pour ne remplir - qu'une seule tâche. Bien entendu, cela ne concerne que les programmes - conçus pour s’insérer dans la philosophie UNIX, et les installations de - dépendances avec le gestionnaire de paquet d'Arch fonctionnent - superbement bien.</p> -</li> -</ol> -<p>De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :</p> -<ul> -<li> -<p>recherche d'un paquet :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Ss</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>installation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">S</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>désinstallation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">R</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>mise a jour de tous les paquets installés :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">paquet</span> -</pre></div> - - -</li> -</ul> -<p>Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.</p> -<p>Arch n'offre pas d'interface graphique par défaut : après avoir installé -le système, vous n'aurez qu'une invite de commande. Heureusement, je -vais ici vous guider a travers l'installation d'une interface graphique -(mate, le fork de gnome 2)</p> -<p>L'installation d'Arch se fait par le réseau, veillez a avoir une -connection WiFi ou filaire a proximité avant de suivre ce guide.</p> -<p>Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous -systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce -dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.</p> -<p>Bon, passons a l'explication de l'installation proprement dite :</p> -<p>Tout d'abord, téléchargeons l'iso d'arch la plus récente :</p> -<div class="highlight"><pre><span class="n">wget</span> <span class="n">http</span><span class="o">:</span><span class="c1">//mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso</span> -</pre></div> - - -<p>Ensuite, gravons cette image sur un disque USB :</p> -<div class="highlight"><pre><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">archlinux</span><span class="o">-</span><span class="mf">2012.09.07</span><span class="o">-</span><span class="n">dual</span><span class="p">.</span><span class="n">iso</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> -</pre></div> - - -<p>Après reboot de la machine sur l'iso en question et choix de -l'architecture, nous sommes accueillis par un shell root.</p> -<p>La première chose a faire est de paramétrer le clavier :</p> -<div class="highlight"><pre><span class="n">loadkeys</span> <span class="n">fr</span> -</pre></div> - - -<p>Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :</p> -<div class="highlight"><pre><span class="n">cfdisk</span> <span class="err">#</span> <span class="n">cfdisk</span> <span class="n">est</span> <span class="n">suffisamment</span> <span class="n">clair</span> <span class="n">pour</span> <span class="n">ne</span> <span class="n">pas</span> <span class="n">n</span><span class="err">é</span><span class="n">cessiter</span> <span class="n">d</span><span class="err">&#39;</span><span class="n">explications</span> -</pre></div> - - -<p>formatage des partitions :</p> -<div class="highlight"><pre><span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">root</span> - -<span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="o">&amp;&amp;</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">btrfs</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">home</span> - -<span class="n">mkswap</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="o">&amp;&amp;</span> <span class="n">swapon</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">de</span> <span class="n">swap</span> -</pre></div> - - -<p>Montons les partitions nouvellement créées, puis installons le système :</p> -<div class="highlight"><pre><span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="o">/</span><span class="n">mnt</span> - -<span class="n">mkdir</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> <span class="o">&amp;&amp;</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> - -<span class="n">dhclient</span> <span class="n">eth0</span> <span class="err">#</span> <span class="n">si</span> <span class="n">vous</span> <span class="n">utilisez</span> <span class="n">une</span> <span class="n">connection</span> <span class="n">filaire</span><span class="p">,</span> <span class="n">sinon</span> <span class="n">voire</span> <span class="n">http</span><span class="o">:</span><span class="c1">//wiki.archlinux.fr/Wifi#Configuration</span> - -<span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">base</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> - -<span class="n">genfstab</span> <span class="o">-</span><span class="n">p</span> <span class="o">/</span><span class="n">mnt</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">fstab</span> -</pre></div> - - -<p>Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage:</p> -<div class="highlight"><pre><span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">syslinux</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="n">wireless_tools</span> <span class="n">dhclient</span> -</pre></div> - - -<p>Maintenant, passons sur notre install toute fraîche d'Arch :</p> -<div class="highlight"><pre><span class="n">arch</span><span class="o">-</span><span class="n">chroot</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">bash</span> -</pre></div> - - -<p>configurons les bases :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="n">HOSTNAME</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">hostname</span> - -<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">zoneinfo</span><span class="o">/</span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">localtime</span> - -<span class="n">date</span> <span class="n">MMJJhhmmAAAA</span> - -<span class="n">hwclock</span> <span class="o">--</span><span class="n">systohc</span> - -<span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">gen</span> <span class="err">#</span> <span class="n">D</span><span class="err">é</span><span class="n">commentez</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">correspondant</span> <span class="n">au</span> <span class="n">fran</span><span class="err">ç</span><span class="n">ais</span> <span class="o">:</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="n">et</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">ISO</span><span class="o">-</span><span class="mi">8859</span><span class="o">-</span><span class="mi">1</span> - -<span class="n">echo</span> <span class="err">&#39;</span><span class="n">LANG</span><span class="o">=</span><span class="s">&quot;fr_FR.UTF-8&quot;</span><span class="err">&#39;</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">conf</span> - -<span class="n">locale</span><span class="o">-</span><span class="n">gen</span> - -<span class="n">mkinitcpio</span> <span class="o">-</span><span class="n">p</span> <span class="n">linux</span> -</pre></div> - - -<p>Enfin, vérifions que syslinux est correctement configuré :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">syslinux</span><span class="o">/</span><span class="n">syslinux</span><span class="p">.</span><span class="n">cfg</span> <span class="err">#</span> <span class="n">il</span> <span class="n">devrait</span> <span class="n">y</span> <span class="n">avoir</span> <span class="s">&quot;append root=/dev/sda1&quot;</span> -</pre></div> - - -<p>Si tout est correct, installons syslinux, et paramétrons un mot de passe -root :</p> -<div class="highlight"><pre><span class="n">syslinux</span><span class="o">-</span><span class="n">install_update</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda</span> <span class="o">-</span><span class="n">mia</span> - -<span class="n">passwd</span> <span class="n">root</span> -</pre></div> - - -<p>Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!</p> -<div class="highlight"><pre> <span class="n">exit</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span> -<span class="n">reboot</span> -</pre></div> - - -<p>Fini!</p> -<p>Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen :</p> -<ul> -<li> -<p>Installation de MATE, le gestionnaire de bureau (voir -<a href="http://mate-desktop.org/">http://mate-desktop.org/</a>)</p> -</li> -<li> -<p>Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage</p> -</li> -<li> -<p>Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci</p> -</li> -<li> -<p>Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).</p> -</li> -</ul> -<p>Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici.</p> -<p>Bon, reprenons.</p> -<p>Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet.</p> -<p>Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">pacman</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ici, ajoutez les lignes suivantes :</p> -<div class="highlight"><pre><span class="k">[mate]</span> -<span class="na">Server</span> <span class="o">=</span> <span class="s">http://repo.mate-desktop.org/archlinux/$arch</span> -</pre></div> - - -<p>Installons maintenant les paquets :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">mate</span> <span class="n">mate</span><span class="o">-</span><span class="n">extras</span> <span class="n">dbus</span> <span class="n">dbus</span><span class="o">-</span><span class="n">core</span> <span class="n">alsa</span> <span class="n">networkmanager</span> <span class="n">sudo</span> -</pre></div> - - -<p>Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois :</p> -<div class="highlight"><pre><span class="n">useradd</span> <span class="o">-</span><span class="n">g</span> <span class="n">users</span> <span class="o">-</span><span class="n">G</span> <span class="n">wheel</span><span class="p">,</span><span class="n">audio</span><span class="p">,</span><span class="n">optical</span><span class="p">,</span><span class="n">lp</span><span class="p">,</span><span class="n">scanner</span><span class="p">,</span><span class="n">log</span><span class="p">,</span><span class="n">power</span><span class="p">,</span><span class="n">floppy</span><span class="p">,</span><span class="n">storage</span><span class="p">,</span><span class="n">games</span><span class="p">,</span><span class="n">video</span> <span class="o">-</span><span class="n">m</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">bash</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">passwd</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">su</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -</pre></div> - - -<p>Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec ck-launch-session mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> -</pre></div> - - -<p>Profitons en pour ajouter les démons système au lancement :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ajoutez donc <code>dbus, alsa. hwclock</code> et <code>networkmanager</code> dans la section -DAEMONS (entre les parenthèses, après crond normalement)</p> -<div class="highlight"><pre><span class="n">DAEMONS</span><span class="o">=</span><span class="p">(</span><span class="n">syslog</span><span class="o">-</span><span class="n">ng</span> <span class="n">network</span> <span class="n">crond</span> <span class="n">dbus</span> <span class="n">alsa</span> <span class="n">hwclock</span> <span class="n">networkmanager</span><span class="p">)</span> -</pre></div> - - -<p>Pour éviter un reboot, il est ici possible de faire un</p> -<div class="highlight"><pre><span class="n">su</span> -</pre></div> - - -<p>Puis un</p> -<div class="highlight"><pre> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">dbus</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">alsa</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">networkmanager</span> <span class="n">start</span> -</pre></div> - - -<p>Sinon, il est possible de juste redémarrer.<br /> -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et :</p> -<div class="highlight"><pre> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">sudoers</span> -</pre></div> - - -<p>Décommentez la ligne qui commence par # %wheel ALL=(ALL)<br /> -Sauvegardez le fichier, puis, après un <code>su *votrenom*</code>, tentez de faire -un sudo ls /<br /> -Normalement, vous devriez avoir un listing du dossier /<br /> -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?<br /> -C'est simple comme bonjour :</p> -<div class="highlight"><pre> <span class="n">startx</span> -</pre></div> - - -<p>Et PAF! Voila un MATE desktop flambant neuf a configurer!<br /> -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (<code>sudo pacman -Syu slim</code>).<br /> -Configurons le:</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec dbus-launch mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> <span class="o">&amp;&amp;</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">slim</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Éditez la ligne -"<code>sessions xfce4,icewm-session,wmaker,blackbox</code>" de facon a -ce qu'elle ressemble a "<code>sessions mate-session</code>"<br /> -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.<br /> -Normalement, tout devrait fonctionner!<br /> -Ah oui, et pour installer thunderbird, firefox, chromium, etc...</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">chromium</span> <span class="n">thunderbird</span> <span class="n">xchat</span> <span class="n">firefox</span> <span class="n">rhythmbox</span> <span class="n">pidgin</span> <span class="n">transmission</span><span class="o">-</span><span class="n">gtk</span> <span class="n">vlc</span> -</pre></div> - - -<p>Voila! Et comme dirait <a href="https://twitter.com/spartition">@Spartition</a>, c'est sale, mais qu'est-ce que c'est -bon!<br /> -A plus~</p>Les systèmes de fichiers2012-09-25T10:28:00+02:00Wxcafetag:wxcafe.net,2012-09-25:posts/%D/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>Le Quenya - Épisode ø2012-09-18T19:07:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p>Update a propos du blog2012-09-18T16:57:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>Introduction a bash en tant que language de programmation.2012-09-08T18:15:00+02:00Wxcafetag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/<p>L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).</p> -<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. </p> -<p>Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.)</p> -<p>Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p> -<p>De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code.<br /> -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le *) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée.</p> -<p>Quelques notions manquent ici:<br /> -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici.<br /> -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number.<br /> -être utilisées dans un programme bash.<br /> -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p> -<p>Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel.<br /> -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête.</p> -<p>J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p>Les différentes couches d'un système d'exploitation2012-09-06T23:29:00+02:00Wxcafetag:wxcafe.net,2012-09-06:posts/%D/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>La programmation expliquée simplement2012-08-27T00:22:00+02:00Wxcafetag:wxcafe.net,2012-08-27:posts/%D/la-programmation-expliquee-simplement/<p>Salut!<br /> -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. </p> -<p>Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.<br /> -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation<br /> -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. </p> -<p>Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.<br /> -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. </p> -<p>La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.<br /> -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. </p> -<p>Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. </p> -<p>Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère2012-08-22T20:33:00+02:00Wxcafetag:wxcafe.net,2012-08-22:posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique.</p> -<p>GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.</p> -<p>De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une?</p> -<p>Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes.</p> -<p>Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable.</p> -<p>N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :)</p> -<p>A bientôt!</p>Débuts, présentation, etc...2012-08-18T20:27:00+02:00Wxcafetag:wxcafe.net,2012-08-18:posts/%D/debuts-presentation-etc/<p>Bonjour!</p> -<p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/##nolife et #debian-fr)</p> -<p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. </p> -<p>Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général.</p> -<p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p> \ No newline at end of file +a tenter de comprendre les configurations en question et a les améliorer!</p> \ No newline at end of file diff --git a/output/feeds/feed.atom.xml b/output/feeds/feed.atom.xml index 7a6d906..ecf6fd9 100644 --- a/output/feeds/feed.atom.xml +++ b/output/feeds/feed.atom.xml @@ -1,260 +1,531 @@ -Wxcafé//wxcafe.net/2014-11-07T13:04:00+01:00OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/%D/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de +Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<p>J&rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas &ldquo;profiter&rdquo; du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc&hellip;) simplement.</p> +<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j&rsquo;ai +décidé d&rsquo;installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça +donnait. Le résultat n&rsquo;étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j&rsquo;ai décidé d&rsquo;upgrader le système.</p> +<p>J&rsquo;ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a> +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un +<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je +pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&rsquo;autre +avantage de tourner sur du Intel, c&rsquo;est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86).</p> +<p>J&rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&rsquo;ai avidement +monté, avant de me rendre compte que le manuel de l&rsquo;adaptateur Pulse-Eight était +[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J&rsquo;ai donc +cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce +post</a> +expliquant comment brancher l&rsquo;adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l&rsquo;information, et pour moi si je dois remonter ce système.</p> +<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +&ldquo;Front Panel&rdquo;, et un appelé &ldquo;Custom Solution Header&rdquo;. Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&rsquo;est plus +facile, puisqu&rsquo;il n&rsquo;y a qu&rsquo;une seule fiche a brancher ici : la orange.</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que &ldquo;Deep S4/S5&rdquo; soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC.</p> +<p>Ne reste plus ensuite qu&rsquo;a installer un système digne de ce nom dessus!</p>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose +problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce +problème, deux solutions sont apparues.</p> +<p>Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port.</p> +<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La +communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de +la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines +machines font un <em>handshake</em> SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise +a jour&rdquo; en douceur.</p> +<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> +La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout +d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il +voit qu&rsquo;il est disponible.<br /> +Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité +de tout le monde.</p>Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d&rsquo;abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &ldquo;choses&rdquo; +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d&rsquo;autres. Vous aurez aussi remarqué que le +Gamepad n&rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube.</p> +<p>Cela étant, si comme moi vous avez, euh, &ldquo;ouvert&rdquo; le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l&rsquo;adaptateur GC pour Wii +U</a> +a votre console. </p> +<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d&rsquo;habitude +avec Nintendo, c&rsquo;est une solution a moitié satisfaisante&hellip;) : les classic +controller, mais en forme de manettes Gamecube.</p> +<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d&rsquo;argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes.</p> +<p>Nous allons ici voir deux modèles, un de chacune des boites en question +: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p> +<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus</em></strong></p> +<p>Commençons par le modèle de chez Hori :</p> +<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur.</p> +<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p> +<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c&rsquo;est logique puisque c&rsquo;est comme ça que les +classic controller sont faits, mais c&rsquo;est décevant tout de même</p> +<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p> +<p>On peut voir ici que la qualité de l&rsquo;assemblage n&rsquo;est pas extraordinaire, et on +remarque une soudure mal faite a l&rsquo;emplacement du stick gauche.</p> +<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p> +<p>Le stick c n&rsquo;est pas fixé au reste de la manette. +J&rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n&rsquo;avaient pas l&rsquo;air de très bonne qualité, et j&rsquo;ai préféré abandonner +l&rsquo;idée plutôt que de casser la manette.</p> +<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p> +<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d&rsquo;une Wiimote entière la dedans&hellip;</p> +<hr> + +<p>Passons maintenant a la manette PDP.</p> +<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p> +<p>Au premier coup d&rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c&rsquo;est un problème de goût).</p> +<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p> +<p>Les gâchettes sont des vraies gâchettes! C&rsquo;est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après.</p> +<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon <strike>péremptoire</strike> perpendiculaire&hellip;</p> +<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p> +<p>Vous l&rsquo;avez deviné, ces deux &ldquo;cartes filles&rdquo; servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de &ldquo;vraies&rdquo; gâchettes en cela +qu&rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques.</p> +<p>Quelques photos des gâchettes en question :</p> +<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p> +<hr /> +<p>Vous l&rsquo;aurez compris, je préfère la version PDP de ces &ldquo;Fight Pad&rdquo;, la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si +ce n&rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n&rsquo;est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>, +mais n&rsquo;est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>, +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d&rsquo;avoir une machine hôte sur laquelle s&rsquo;exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l&rsquo;hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu&rsquo;avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu&rsquo;à l&rsquo;hôte, puisqu&rsquo;il n&rsquo;est pas vraiment séparé des +invités. </p> +<p>Quoi qu&rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. &ldquo;Mais pourquoi utiliser Docker, dans ce cas&rdquo;, vous +demandez-vous peut être, &ldquo;puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&rdquo;. Et bien +c&rsquo;est très simple : Docker apporte la simplicité de déploiement d&rsquo;applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer +rapidement et facilement un grand nombre d&rsquo;images déjà configurées. </p> +<p>Maintenant que nous avons expliqué rapidement ce qu&rsquo;était Docker, voyons le +rapport avec les ebooks et Twitter.</p> +<p>Les comptes dits &ldquo;ebooks&rdquo; (le nom vient a l&rsquo;origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>, +voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots +twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>, +avec les tweets d&rsquo;un utilisateur &ldquo;source&rdquo; comme corpus, pour produire des tweets +ressemblant a ceux de l&rsquo;utilisateur source. Nous allons voir maintenant comment +en installer un.</p> +<p>C&rsquo;est, comme disent certaines personnes, &ldquo;fun&rdquo;.</p> +<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée +par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l&rsquo;API +twitter et la génération des messages.</p> +<p>Cependant, cela n&rsquo;explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d&rsquo;isoler les bots, et les +containers dockers permettent de les déployer sur n&rsquo;importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j&rsquo;ai créé <a href="https://github.com/wxcafe/ebooks_example">un +repo github</a> qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc.</p> +<p>Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l&rsquo;utilisateur source avec <code>ebooks archive &lt;username&gt; &lt;filename&gt;</code> (c&rsquo;est du json) +, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks +consume &lt;filename&gt;</code>. Cela fait, démarrer le bot revient a lancer le container : +<code>docker run -d &lt;container name&gt;</code> Pour plus d&rsquo;informations, allez voir <a href="https://docs.docker.com/articles/basics/">la +documentation Docker</a></p> +<p>Bien entendu, dans l&rsquo;idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 05 * * * cd /usr/local/ebooks/main/ &amp;&amp; /usr/local/bin/ebooks consume corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 10 * * * docker rm -f bots &gt;/dev/null 2&gt;&amp;1 +00 15 * * * docker rmi bots &gt; /dev/null 2&gt;&amp;1 +00 20 * * * cd /usr/local/ebooks/main/ &amp;&amp; docker build --rm -t bots . &gt;&gt; /var/log/ebooks/build.log 2&gt;&amp;1 +00 25 * * * docker run -d --name bots bots &gt;&gt; /var/log/ebooks/run.log 2&gt;&amp;1 +</pre></div> + + +<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s&rsquo;executent en même temps.</p> +<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n&rsquo;est qu&rsquo;un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des +applications &ldquo;usuelles&rdquo; +dedans</a>, +puisque l&rsquo;overhead de Docker est minimal, et beaucoup d&rsquo;autres applications +existent.</p>OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant +comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la +aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais +<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un +projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA +qu&rsquo;a le projet OpenBSD, globalement).</p> +<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA (Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis +<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération +ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches +sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et +<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir +des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour +ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et <a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> pour filtrer les mails entrants et sortants. Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮ + │╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │ + mail in ││ │ │ │ amavis │ +───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ +&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ </pre></div> <p>Normalement, ceci devrait être a peu près clair. Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de +aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails +venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, qui a ce moment-ci trie en fonction de la destination : les mails gérés par le domaine vont via dovecot dans les boites mail des destinataires locaux, les mails exterieurs vont directement vers le MTA du serveur distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon +<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon dont les différents services vont communiquer.</p> <p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de +10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et +écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de signer, nous allons profiter de cette configuration et donc lui parler en SMTP sur ces ports.</p> <p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, <code>/var/run/dovecot/lmtp</code>).</p> <p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮ + │╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ +25 &lt;────────│&lt;───────────╯ │ + ╰───────────────╯ </pre></div> <p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮ + │╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ </pre></div> <p>Pour les mails entrants.</p> <p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. +d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p> +<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> +<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new </pre></div> <p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> <p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span> +<span style="color: #75715e"># See smtpd.conf(5) for more information.</span> -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> +<span style="color: #75715e">## Certs</span> +pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span> +pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span> -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> +<span style="color: #75715e">## Ports to listen on, and how to listen on them</span> +listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional +listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source +listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> +<span style="color: #75715e">## Aliases</span> +table aliases file:/etc/aliases -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> +<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span> +listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered +<span style="color: #75715e"># coming from amavisd, signed with DKIM</span> +listen on lo port <span style="color: #ae81ff">10027</span> tag Signed -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> +<span style="color: #75715e">## Receiving</span> +<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span> +accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span> +<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span> +accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span> +<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span> -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> +<span style="color: #75715e">## Sending</span> +<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span> +accept tagged Signed <span style="color: #66d9ef">for</span> any relay +<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span> +accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span> +<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span> </pre></div> <p>Expliquons un peu ce fichier de configuration :</p> <ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> +<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration + d&rsquo;emplacement des certificats SSL.</li> <li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> <li>Les alias sont définis juste après</li> <li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> + comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on + taggue les mails sortants comme &ldquo;Signed&rdquo;</li> <li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore + peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième + première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième ligne matchant tous les mails arrivant et la première seulement ceux filtrés, inverser leur sens voudrait dire que les mails seraient toujours renvoyés a amavis</li> <li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au + on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par + DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le + problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au dessus.</li> </ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit +<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne +emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant +qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du POP3[s], différents guides sont trouvables facilement sur internet.</p> <p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span> -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> +<span style="color: #75715e"># basic config</span> +<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log +<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log +<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span> +<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> +<span style="color: #75715e"># authentication</span> +passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +userdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd +<span style="color: #f92672">}</span> -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> +<span style="color: #75715e"># the protocols we use</span> +<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> +<span style="color: #75715e"># ssl config</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring services </span> +<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span> +service imap-login <span style="color: #f92672">{</span> + inet_listener imap <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span> + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> +service lmtp <span style="color: #f92672">{</span> + unix_listener lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666 + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring protocols</span> +<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span> +protocol lda <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +protocol lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> +plugin <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve + <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve +<span style="color: #f92672">}</span> </pre></div> <p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> </pre></div> <p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth +<span style="color: #f92672">}</span> </pre></div> <p><strong>pour identifier les utilisateurs système</strong></p> <p>Ici aussi, voyons comment ce fichier est structuré :</p> <ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. +<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater + leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li> +<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs. Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs mots de passe avec PAM (ou BSDAuth)</li> <li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> + l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> <li>Nous configurons le SSL</li> <li>Le section suivante contient la configuration des services. Nous avons en premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. + désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant + IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons. La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> + fifo qu&rsquo;il utilise</li> <li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> <li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et quel dossier utiliser pour sa configuration.</li> @@ -263,101 +534,100 @@ POP3[s], différents guides sont trouvables facilement sur internet.</p> a deux choses : signer les emails sortants, et filtrer les emails entrants. Il doit donc écouter sur les port 10026 pour les signatures et 10024 pour le filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun +SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les +Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les modifications nécessaires a la fin du fichier.</p> <p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) <code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span> -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> +<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span> -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> +<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span> + <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span> + <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span> + <span style="color: #f8f8f2">}</span> +<span style="color: #f8f8f2">);</span> -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span> +<span style="color: #f8f8f2">};</span> -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> +<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span> +<span style="color: #f8f8f2">};</span> -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> +<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span> +<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span> </pre></div> <p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se +- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails + sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se trouve la clé privée servant a signer les emails. - le second définit les options DKIM que nous souhaitons utiliser comme défaut. Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> - nous définissons ensuite les ports sur lesquels nous allons écouter, puis les paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel + ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel ils viennent. - nous savons que les emails venants du port 10026 sont sortants, nous les traitons donc comme tel - le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre + sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a + 4871</a>. Nous déclarons l&rsquo;adresse a prévenir en cas de spam/virus venants de notre système, et que nous voulons être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de + puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature + les notifications de succès d&rsquo;envoi. Et voila!</p> +<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en fait inclus par défaut dans amavis.</p> <p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un +Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe +différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un tutorial</a>) mais de nombreuses autre méthodes existent. Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span> +<span style="color: #75715e"># report_safe 1</span> +<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span> +<span style="color: #75715e"># use_bayes 1</span> +<span style="color: #75715e"># bayes_auto_learn 1</span> +<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span> +<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span> +<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span> +<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span> +<span style="color: #75715e"># shortcircuit BAYES_99 spam</span> +<span style="color: #75715e"># shortcircuit BAYES_00 ham</span> -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> +<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span> </pre></div> @@ -365,44 +635,43 @@ Il nous reste encore a configurer spamassassin :</p> le required_score pour ma part.</p> <p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/%D/freebsd-online-mfsbsd/<p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad) +<p>Bon courage pour votre hosting de mail ensuite&hellip;</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad) Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>) -et n'ayant pour différentes raisons pas eu l'occasion de le faire sur mon -<a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, -j'ai commencé a chercher comment le faire sur ce serveur.</p> -<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu +et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, +j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p> +<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums -d'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> -<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), -ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur +d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> +<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), +ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur alternatif, minimaliste et simplifié pour FreeBSD.</p> <p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le -panel Online. Une fois cela fait, lancez une console, puis téléchargez l'image +panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis -choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter -sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout +choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter +sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout a fait classique va démarrer. Une fois ceci fait, la partie importante arrive: -mfsbsd contient un script d'installation root-on-zfs, nommé logiquement +mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement zfsinstall, qui va se charger de tout le travail pour nous.</p> <p>Utilisez donc ce script ainsi : </p> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, wipons le MBR :</span> -<span class="n">dd</span> <span class="o">&lt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span> -<span class="cp"># maintenant, installons le système</span> -<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span> +dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1 +<span style="color: #75715e"># maintenant, installons le système</span> +zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c </pre></div> <p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée, -<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D'autres options +<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous convient pas.</p> <p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf :</p> -<div class="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">&quot;YES&quot;</span> -<span class="n">sshd_load</span><span class="o">=</span><span class="s">&quot;YES</span> -<span class="n">hostname</span><span class="o">=</span><span class="s">&quot;whatever&quot;</span> -<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">&quot;DHCP&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span> +<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span> +<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span> +<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span> </pre></div> @@ -410,11 +679,10 @@ système) et éditez /etc/rc.conf :</p> physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez maintenant un système FreeBSD tout propre installé sur zfs a découvrir et utiliser!</p> -<p>Voila, c'est la fin de ce tutoriel. -(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu +<p>Voila, c&rsquo;est la fin de ce tutoriel. +(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu crédible, disons)</p> -<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter -<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, +<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, <a href="https://twitter.com/petitefanfare">petitefanfare</a>, <a href="https://twitter.com/capet_ebooks">capet_ebooks</a>, <a href="https://twitter.com/zengisse">zengisse</a>, @@ -422,146 +690,146 @@ et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont code</a>, qui vient de <a href="https://twitter.com/m1sp">@m1sp</a> (<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p> -<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/%D/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie +<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: <a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès +ce qui peut avoir l&rsquo;effet de rendre légèrement parano. Si vous considérez que +c&rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> <p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être remarqué quelque chose récemment : il se trouve que le certificat qui permet de desservir ce site a changé.</p> <p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", +doigts sortis d&rsquo;un endroit particulier du corps de l&rsquo;admin/auteur de ce &ldquo;blog&rdquo;, qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système +du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&rsquo;un système fonctionnel utilisant cette compréhension récemment acquise.</p> <p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très +être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&rsquo;est très simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat +<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc&hellip; Bref, un certificat différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs +<p>Il s&rsquo;avère que c&rsquo;est a la fois très peu pratique a utiliser (les utilisateurs doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat +changement de sous-domaine conduit a un message d&rsquo;erreur, etc) et pas plus +sécurisé que d&rsquo;avoir un seul certificat wildcard. J&rsquo;ai donc généré un certificat pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> +pas <code>*.wxcafe.net</code>, et qui sera donc utilisé&hellip; bah pour <code>wxcafe.net</code>.</p> <p>Il serait préférable de faire des redirections automatiques des adresses http vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront +self-signed, il me semble préférable que l&rsquo;arrivée sur le site ne commence pas +par une page firefox disant &ldquo;Something&rsquo;s Wrong!&rdquo;, et ces redirections ne seront donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus +<p>De plus, après la lecture de l&rsquo;article de blog sur Lavabit dont le lien est plus haut, il semble intéressant (et assez important) de faire en sorte que le serveur utilise en priorité (et si possible, uniquement) des ciphers supportant PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les +communications avec ce serveur soient future-proof, c&rsquo;est a dire que, même si +quelqu&rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les communications passées.</p> <p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes +l&rsquo;implémentation : <br /> +Pour générer la clé, tout d&rsquo;abord, il convient d&rsquo;utiliser les commandes suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096 +# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation +sudo openssl req -new -key example.key -out example.csr +# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">&quot;Common Name&quot;</span> devant contenir le FQDN +sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt +# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">&#39;</span>une durée de vie de <span style="color: #ae81ff">3</span> ans </pre></div> <p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser <code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> +Une fois la clé générée, il faut dire aux différents services de l&rsquo;utiliser, et +de n&rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service. +Je vais lister ici les methodes pour quelques services que j&rsquo;utilise :</p> <h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3 +<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">&quot;</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \ + EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \ + EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">&quot;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">&quot;EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">&#39;abord, lancez la commande suivante :</span> +<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span> +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.key&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.crt&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">}</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span> </pre></div> <h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt +<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key +<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes +<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong +<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high +<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS +<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt +<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3 +<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes +<span style="color: #75715e"># [...]</span> </pre></div> <h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.crt +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL </pre></div> -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter +<p>Voila. Pour d&rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future +<p>Cela étant dit, je conseille a tout le monde d&rsquo;aller voir la conférence dans le +disclaimer, et tant qu&rsquo;a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/%D/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de +implémentation d&rsquo;une technologie &ldquo;remplaçant&rdquo; le système de CAs qui existe +actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de domaines en différentes informations : adresses IPv4, adresses IPv6, certificats DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour @@ -569,54 +837,53 @@ simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a <a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a <a href="http://5.39.76.46">http://5.39.76.46</a>).</p> -<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque -en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que +<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque +en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que de nos jours. La configuration des serveurs DNS peut ainsi être assez contre intuitive. Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses enregistrements est important.</p> -<p>Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même +<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d'écrire, par exemple, -<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le -<code>.</code> n'est pas obligatoire et la progression se fait de droite a gauche. Par +du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le +<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine <code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point a la fin de façon courante.</p> -<p>Le reverse DNS est une variante du DNS "classique" permettant de résoudre les +<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre +Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger +quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS +sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre habituel</em></strong>, et du faux domaine .in-addr.arpa Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR 76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p> -<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, +<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord, quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des -"enregistrements", records en anglais. Par exemple, un record A indique une +&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom de domaine que vous donnez en argument, mais en précisant un autre type de -record, vous pouvez obtenir n'importe quelle information : par exemple, <code>dig NS +record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS wxcafe.net</code> devrait vous renvoyer</p> -<div class="highlight"><pre><span class="p">;</span> <span class="o">&lt;&lt;&gt;&gt;</span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o">&lt;&lt;&gt;&gt;</span> NS wxcafe.net -<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd -<span class="p">;;</span> Got answer<span class="o">:</span> -<span class="p">;;</span> <span class="o">-&gt;&gt;</span>HEADER<span class="o">&lt;&lt;-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span> -<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span> -<span class="p">;;</span> QUESTION SECTION<span class="o">:</span> -<span class="p">;</span>wxcafe.net. IN NS +<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> -<span class="p">;;</span> ANSWER SECTION<span class="o">:</span> -wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net. -wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net. +<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span> -<span class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec -<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span> -<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span> -<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span> </pre></div> @@ -626,12 +893,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et &l chacun fait autorité pour lui même, et le problème évident est que le résolveur ne peut résoudre la query si il est renvoyé encore et encore vers le même serveur. Il convient donc de définir dans le même fichier de configuration -l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième -loop, se rendra compte qu'il est en train de faire une boucle infinie et -demandera l'adresse au serveur auquel il est connecté. La première indication de +l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième +loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et +demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de direction se fait grâce au serveur du TLD.</p> <p>La configuration de bind est assez simple dans le principe, le plus complexe -étant en fait d'écrire les fichiers de zone. +étant en fait d&rsquo;écrire les fichiers de zone. La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il existe 4 fichiers de configuration principaux : <code>named.conf</code>, <code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>. @@ -641,48 +908,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher named.conf.options contient les options que vous rajoutez pour changer le comportement de bind.</p> <p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans -lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, +lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité, deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs (notamment mon accès chez moi). </p> -<p>Examinons tout d'abord les fichiers de configuration de named. -<code>named.conf.local</code> contient les définitions des zones forward et reverse. +<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse. Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont -gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce +gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence -principale étant que l'un héberge en slave les masters de l'autre. +principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre. Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p> -<div class="highlight"><pre><span class="n">zone</span> <span class="s">&quot;wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;home.wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> </pre></div> @@ -693,250 +959,247 @@ tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est assez parlant.</p> <p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit <code>/etc/bind/master/wxcafe.net</code> : </p> -<div class="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span> - <span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span> - <span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span> - <span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span> - <span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span> - <span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span> - <span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span> + <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span> + <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span> + <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span> + <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span> + <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span> + <span style="color: #f8f8f2">)</span> -<span class="p">;</span> <span class="n">Name</span> <span class="n">servers</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">SPF</span> <span class="s">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> -<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> -<span class="p">;</span> <span class="n">Aliases</span> -<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="p">;</span> <span class="p">[...]</span> -<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span> +<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span> +<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span> -<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span> +<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> </pre></div> <p>Alors. Expliquons ligne par ligne.<br /> -Tout d'abord, le TTL (time to live) est un paramètre définissant le temps +Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps pendant lequel les serveurs récursif (qui font un cache des données) doivent cacher ce fichier de zone. <br /> Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, wxcafe.net. <br /> Maintenant, nous arrivons a un record important : SOA (Start of Authority). -Ce record prend de nombreux arguments, dans l'ordre :<br /> +Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br /> - Le nameserver autoritaire pour le nom de domaine en question,<br /> - - L'adresse email du responsable de cette zone, avec le premier point + - L&rsquo;adresse email du responsable de cette zone, avec le premier point remplacé par un @, </p> <p>puis entre parenthèses :<br /> - - Le numéro de série ("version" du fichier de zone, ici au format + - Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format YYYYMMDDNN) <br /> - La période de refresh, période entre chaque mise a jour du nameserver authoritaire secondaire, <br /> - La période de retry, le temps entre chaque essai de mise a jour si le nameserveur authoritaire primaire est indisponible, <br /> - - La période d'expire, le temps qu'attendra le serveur autoritaire + - La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire secondaire avant de supprimer les informations de son cache si le primaire reste indisponible, et enfin <br /> - - La période de TTL négatif, le temps qu'attendra le serveur secondaire + - La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire avant de ne plus offrir les informations de cette zone si le serveur primaire est injoignable. </p> -<p>Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus +<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus important a lire (pour les humains en tout cas). Continuons : </p> <p>NS (nameserver) permet de désigner les différents nameservers faisant autorité pour ce domaine. </p> -<p>MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. -SPF est un record d'authentification pour les emails. -Les records A désignent l'association entre un nom de domaine et une adresse +<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine. +SPF est un record d&rsquo;authentification pour les emails. +Les records A désignent l&rsquo;association entre un nom de domaine et une adresse IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site -n'est pas encore en IPv6.</p> +n&rsquo;est pas encore en IPv6.</p> <p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de -mettre en place des domaines exactement semblables a d'autre (ce qui permet par -exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p> +mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par +exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p> <p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet de changer la valeur du @ et des noms de domaine non complets (qui ne se terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et -l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on -l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, +l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on +l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, cela permet de rediriger les requêtes nous parvenant et demandant un domaine se trouvant sous home.wxcafe.net.</p> <p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques -différences n'étant en fin de compte que des différences de valeurs (dues au -fait que, eh bah, c'est pas les mêmes domaines...).</p> -<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est +différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au +fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p> +<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC 1034</a> et le <a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant -aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/%D/nat/<p>NAT (Network Address Translation) in a word?<br /> -It's complicated. Very. Don't do it, you'd damage your brain. </p> -<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/%D/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. -Wood. Il est assez connu comme étant l'un des pires films jamais sortis. Rempli -d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort -d'un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> -<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l'indique), -et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite -des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a -introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des -ressources appartenant a d'autres ordinateurs a distance, un support de -l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne +aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br /> +It&rsquo;s complicated. Very. Don&rsquo;t do it, you&rsquo;d damage your brain. </p> +<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. +Wood. Il est assez connu comme étant l&rsquo;un des pires films jamais sortis. Rempli +d&rsquo;erreur de montage, d&rsquo;effets spéciaux au rabais, et ayant même connu la mort +d&rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> +<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l&rsquo;indique), +et qui a été pensé comme le successeur d&rsquo;Unix. Il est conçu comme une poursuite +des concepts unixiens jusqu&rsquo;à leur but naturel. Ainsi, c&rsquo;est Plan9 qui a +introduit le concept d&rsquo;UnionFS, le protocole 9P qui permet d&rsquo;acceder a des +ressources appartenant a d&rsquo;autres ordinateurs a distance, un support de +l&rsquo;unicode par défaut et sur tout le système (a l&rsquo;inverse d&rsquo;Unix, qui fonctionne a la base en ASCII), un support de ProcFS amélioré, une interface graphique par -défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p> -<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit -d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a -quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt +défaut, et d&rsquo;autres améliorations sur les thèmes de base que propose Unix. </p> +<p>Cependant, Plan9 n&rsquo;a jamais été véritablement utilisé pour quoi que ce soit +d&rsquo;autre que la recherche en systèmes, et c&rsquo;est dommage, parce que Plan9 a +quelque chose de très intéressant à proposer. En effet, en ces jours d&rsquo;intérêt grandissant pour le klaoude et la délocalisation a la fois du processing et des -données, et bien que Plan9 ait été créé bien avant que le terme "cloud -computing" n'apparaisse pour la première fois, il semble que ce système ait été +données, et bien que Plan9 ait été créé bien avant que le terme &ldquo;cloud +computing&rdquo; n&rsquo;apparaisse pour la première fois, il semble que ce système ait été conçu pour apporter cette délocalisation tant rêvée.</p> -<p>En effet, même si l'on considère que les nouveautés qu'il apporte par rapport a -Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà -conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système -d'exploitation ultime en terme de partage de ressources et de données. -Ainsi, le fait que 9P permette de considérer toutes les ressources d'un système -distant comme n'étant qu'une poignée de fichiers permet de le monter comme -n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder +<p>En effet, même si l&rsquo;on considère que les nouveautés qu&rsquo;il apporte par rapport a +Unix ne sont pas extraordinaires en soit (alors qu&rsquo;elles sont déjà +conséquentes), lorsqu&rsquo;on les prend ensemble, elles font de Plan9 le système +d&rsquo;exploitation ultime en terme de partage de ressources et de données. +Ainsi, le fait que 9P permette de considérer toutes les ressources d&rsquo;un système +distant comme n&rsquo;étant qu&rsquo;une poignée de fichiers permet de le monter comme +n&rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse -interagir avec les autres, même s'ils sont hétérogènes (c'est a dire provenant -de machines différentes), permet d'utiliser les ressources d'une machine -distante comme si elle était présente localement. Le mécanisme d'UnionFS permet +interagir avec les autres, même s&rsquo;ils sont hétérogènes (c&rsquo;est a dire provenant +de machines différentes), permet d&rsquo;utiliser les ressources d&rsquo;une machine +distante comme si elle était présente localement. Le mécanisme d&rsquo;UnionFS permet de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers de plusieurs machines a la fois (ce qui permet une délocalisation des données bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p> <p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de -parler d'ordinateur lorsque le concept même du système est d'être composé de +parler d&rsquo;ordinateur lorsque le concept même du système est d&rsquo;être composé de clusters eux mêmes composés de machines hétérogènes. Le système de fichier -virtuel /net fourni par le kernel de Plan9 permet d'implémenter très facilement -différents concepts réseaux : en montant le /net d'un ordinateur du réseau local -sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur -du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur +virtuel /net fourni par le kernel de Plan9 permet d&rsquo;implémenter très facilement +différents concepts réseaux : en montant le /net d&rsquo;un ordinateur du réseau local +sur celui servant de gateway vers l&rsquo;internet, on crée un NAT vers cet ordinateur +du réseau local. En montant le /net d&rsquo;un ordinateur distant sur un ordinateur local via le protocole 9P sécurisé, on crée un VPN : les connections locales se -font en utilisant l'accès de l'ordinateur distant, et les connections entre les +font en utilisant l&rsquo;accès de l&rsquo;ordinateur distant, et les connections entre les deux sont chiffrées. </p> <p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour -partager leur "puissance" de calcul en userspace, des superordinateurs pour -lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels -JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait +partager leur &ldquo;puissance&rdquo; de calcul en userspace, des superordinateurs pour +lesquels le noyau Linux s&rsquo;est doté du support de jusqu&rsquo;à 4096 CPUs, des OS tels +JoliOS qui promettent une integration du klaoude alors qu&rsquo;ils ne sont en fait que des navigateurs web a peine améliorés et des services de stockage en ligne -qui promettent un accès universel a toutes nos données alors qu'ils ne proposent +qui promettent un accès universel a toutes nos données alors qu&rsquo;ils ne proposent que de les garder a disposition par le web, Plan9 promettait une technologie de partage des ressources système et de données, une intégration du réseau dans le système particulièrement poussée, un environnement graphique supporté par le -basesystem et non greffé par dessus comme l'a été X11, et de nombreuses autres +basesystem et non greffé par dessus comme l&rsquo;a été X11, et de nombreuses autres améliorations sur Unix.</p> -<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative, -et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de +<p>Malheureusement, il n&rsquo;a jamais été adopté de façon véritablement significative, +et ce pour une raison très Unixiènne : &ldquo;worse is better&rdquo;. En effet, le parc de machines Unix déjà installées était suffisamment performant et fonctionnel pour que des solutions soient développées au dessus du système pour remplir les mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de -Linux, FUSE, etc...</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/%D/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler +Linux, FUSE, etc&hellip;</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler le texte (ce qui se montre relativement indispensable dans un environnement Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu connu en détail, et la plupart du temps une seule fonction est utilisée : le remplacement de texte.<br /> Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p> -<p>Tout d'abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais -aussi un langage de manipulation de texte dérivé de <code>ed</code>, l'éditeur original. -<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas -personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des -machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs -dits "visuels", tels que vim, emacs, et globalement tous les éditeurs ayant un +<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais +aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas +personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des +machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs +dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du -concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d'une ligne a la fois. +concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois. En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p> -<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d'empêcher -l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui -permet de rediriger l'output dans le fichier d'input. Cela dit, l'intérêt unique +<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher +l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui +permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique du programme est son langage de manipulation de texte.</p> <p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des /). Ainsi, la commande de base dans <code>sed</code> est </p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/ </pre></div> <p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de -n'exécuter les commandes qui suivent que sur ces lignes.) </p> +n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p> <p><br/> -La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s'utilise de +La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de la façon suivante : </p> -<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span> </pre></div> <p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une regex) par [new text] (qui doit être un texte fixe, avec quelques exceptions), en appliquant [options], la plus connue des options étant <code>g</code>, -qui permet d'appliquer la commande affectée a toutes les occurrences du texte +qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte matché sur la/les lignes concernée-s.<br /> -Les exceptions a la "fixité" de [new text] sont particulièrement +Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard, -excepté le fait qu'il permet jusqu'à 9 "holding spaces", qui sont délimités par +excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par \( et \), et qui sont représentées dans le texte de remplacement par \1 à \9.</p> <p>Par exemple, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39; </pre></div> -<p>sur le texte "hello world world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world </pre></div> <p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le texte original. Ainsi, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&amp;</span> <span class="n">world</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39; </pre></div> -<p>sur le texte "hello world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world </pre></div> <p><br/></p> <p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans -l'espace courant :</p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span> +l&rsquo;espace courant :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p </pre></div> <p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire -dédié, que j'appelle l'espace courant (pattern space en anglais). La commande -<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit -le pattern space de façon a ce qu'il ne contienne que les lignes matchant, et le -<strong>p</strong> affiche donc ce dernier.</p> -<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s'utilisent ainsi :</p> -<div class="highlight"><pre><span class="n">c</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit +le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p> +<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \ +[text] </pre></div> <p>De la même façon, pour le i : </p> -<div class="highlight"><pre><span class="n">i</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \ +[text] </pre></div> <p>Et de même pour a. </p> -<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'elles +<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong> sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme @@ -947,26 +1210,25 @@ space, et non sur la ligne en question.</p> /[regex]/d <strong>d</strong> (delete) supprime les contenus du pattern space.</p> <p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je -parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé -au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier <em>en +parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé +au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a -ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou -bien la confidentialité d'un support de stockage, par exemple. Nous allons ici +ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou +bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici voir comment mettre en place un système de ce type sous GNU/Linux. Cet article -n'a pas pour but de vous apprendre a mettre en place un système basé sur une -procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en -jeu dans l'utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de -présenter un rapide tutoriel concernant la création d'un support chiffré sur +n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une +procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en +jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de +présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p> <p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système -du noyau Linux, et s'appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement -de disques. Comme son nom l'indique, device-mapper est un système qui a pour but +du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement +de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère -comme "block device" tout fichier spécial (en gros, les fichiers disques dans -<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le +comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de -fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. -Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. +fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad. +Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes. Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans /dev, et device-mapper est requis pour pouvoir en voir les partitions (qui apparaîtront donc dans /dev/mapper)</p> @@ -976,59 +1238,59 @@ déchiffre a la volée tous les accès disques a ce périphérique non chiffré traduisant sur le système de fichier chiffré, le tout de manière tout a fait transparente pour les applications utilisant le disque en question. Cela induit bien entendu une baisse de performance relativement significative dans le cas -d'un chiffrement du système de fichier root, mais quasiment insignifiante dans +d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans le cas de chiffrement de partitions de données.</p> -<p>D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer +<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer si le système de fichier root est chiffré. Dans ce cas précis, la procédure de -boot <strong><em>doit</em></strong> s'appuyer sur une image initrd (l'initrd est un système de +boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de fichier minimal qui sert uniquement a initialiser le système. Les kernels de base de la plupart des distributions GNU/Linux en utilisent un dans tous les cas, pour des raisons de compatibilité) et sur une partition de boot qui elle -n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge +n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et -charge l'initrd en RAM, celui-ci a son tour lance un script permettant de +charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de charger les modules nécessaires a la suite du boot (que ce soit pour un boot sans disque root local, ou bien comme ici avec un système chiffré), puis le -système de fichier "cible" est remonté sur la racine, et l'initrd est démonté -est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend +système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté +est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend depuis le système de fichier maintenant monté sur la racine.</p> <p>La méthode la plus évidente pour contourner le chiffrement du disque est alors -de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par +de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par un autre modifié, copiant par exemple la phrase de passe permettant de déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir -contre ce genre d'attaques : l'une des plus simple est de faire un checksum du +contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot -que l'initrd présente toujours le même checksum. Cela dit, cette méthode a -l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès +que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a +l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès a un fichier initrd reconnu comme sûr.<br /> Une autre approche consisterait a placer le système de fichier /boot sur un périphérique dédié, protégé en écriture de façon matérielle (par exemple, une carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et -protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un -attaquant de modifier ce système de fichier, et l'initrd est alors toujours de +protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un +attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de confiance. Cependant, cela a pour conséquence de rendre la mise a jour de -l'initrd et du noyau <em>beaucoup</em> plus difficile qu'elle ne le serait sans.</p> +l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p> <p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop, -l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est -maintenant responsable de l'utilisation <em>userspace</em> de dm-crypt, qui pour sa +l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est +maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la -manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier +manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi obligatoirement être capables de le faire en tant que root. </p> <p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br /> -Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, -dans une situation réelle ou l'on cherche a chiffrer un disque, il convient -d'utiliser /dev/urandom comme source, pour éviter la détection du système de +Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela, +dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient +d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de fichier chiffré sur le disque. Ici, par exemple, nous allons faire : </p> -<div class="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img </pre></div> <p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img </pre></div> @@ -1038,34 +1300,34 @@ passphrase. Il convient ici de choisir une passphrase particulièrement sûre, puisque toute personne ayant accès a la passphrase aura aussi accès au disque et donc a vos secrets.<br /> Une fois cela fait, nous allons mapper cette image : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto </pre></div> <p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes, -puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous -voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En +puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous +voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les -systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque -qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque +systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque +qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque virtuel qui correspond a notre image. Il se comporte comme toute partition, et peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. Il se comporte en effet comme une partition, et non comme un véritable disque.) -Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de -le faire, pour pouvoir l'utiliser. </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> +Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de +le faire, pour pouvoir l&rsquo;utiliser. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto </pre></div> <p>Maintenant que notre disque est formaté, il peut être monté : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt </pre></div> <p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat suivant : </p> -<div class="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) </pre></div> @@ -1075,51 +1337,51 @@ sont (en fonction de votre passphrase) en sécurité. </p> <ul> <li> <p>Pour monter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o">&lt;</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt; +sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt; </pre></div> </li> <li> <p>Pour démonter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt; +sudo cryptsetup luksClose &lt;nom de disque virtuel&gt; </pre></div> </li> </ul> -<p>Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de +<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de créer et de monter/démonter vos images/disques chiffré-e-s en une seule commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p> <p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable disque (ou clé usb, ou autre), il est préférable de créer une partition de taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code> -pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/%D/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation +pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a &ldquo;un peu&rdquo; changé récemment.</p> +<p>Du coup, expliquons. J&rsquo;ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même +occasion découvert <a href="http://getpelican.com">pelican</a>. J&rsquo;ai tout de suite accroché a ce générateur de +site statique en python, du fait de son efficacité, de sa facilité d&rsquo;utilisation et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au +fichiers markdown ou reStructuredText, les passe a la moulinette d&rsquo;un &ldquo;thème&rdquo; +constitué de templates pour les fichiers html et l&rsquo;organisation du projet et +d&rsquo;une partie &ldquo;statique&rdquo; contenant le css, et les autres fichiers nécessaires au projet, et en fait des pages html. </p> <p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span> +<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span> + <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span> </pre></div> @@ -1127,116 +1389,116 @@ projet, et en fait des pages html. </p> django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a +<p>L&rsquo;un des grands avantages de pelican est aussi la facilité qu&rsquo;il offre quand a la mise a jour du blog.<br /> En effet, il offre un système de Makefiles permettant, grâce a de nombreuses cibles de compilation, de régénérer le site entier, de ne générer que les fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... +fichiers n&rsquo;existant pas la dernière fois, etc&hellip; La gestion du projet en devient donc très simple, puisque après avoir écrit un article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> <p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est +pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&rsquo;est moi +qui ait modifié les templates et le css), c&rsquo;est lisible (puisque c&rsquo;est du +python, par opposition au PHP&hellip;), et c&rsquo;est plus &ldquo;efficace&rdquo;. Le markdown est très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus +les articles, je n&rsquo;ai pas besoin d&rsquo;un accès continu au net, bref, c&rsquo;est plus efficace.</p> <p>En ce qui concerne les points négatifs : </p> <ul> <li> <p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a + Je vous propose de vous référer a l&rsquo;article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a mon avis sur ce sujet.</p> </li> <li> <p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a + Il va bientôt être remis, c&rsquo;est juste un manque de temps de ma part, mais vu + que toutes les pages passent par les mêmes templates, c&rsquo;est assez facile a faire.</p> </li> <li> <p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> + Pourquoi c&rsquo;est dans les points négatifs, ca?</p> </li> <li> -<p>Temps d'adaptation et d'appréhension du système: +<p>Temps d&rsquo;adaptation et d&rsquo;appréhension du système: Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca + réguliers sur le blog, c&rsquo;est parce que j&rsquo;apprend a me servir de ce système + et que j&rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous + les cas ca me permet d&rsquo;apprendre plein de choses, donc je mets plutôt ca dans la catëgorie positive.</p> </li> </ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/%D/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu -pour avoir développé Cydia, un "app store" alternatif pour les iTrucs), +<p>Voila, c&rsquo;est mon retour d&rsquo;expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu +pour avoir développé Cydia, un &ldquo;app store&rdquo; alternatif pour les iTrucs), après avoir reçu une paire de Google glass de la part de Google (de -façon assez évidente...), a trouvé intéressant d'obtenir un accès root -sur celles-ci, ce qu'il a accompli très rapidement. Des démentis de la +façon assez évidente&hellip;), a trouvé intéressant d&rsquo;obtenir un accès root +sur celles-ci, ce qu&rsquo;il a accompli très rapidement. Des démentis de la part de Google et de certains autres sites sont vite arrivés, disant que les lunettes possédaient un bootloader débloqué et que de fait, le root était facile a obtenir : il suffisait de débloquer le bootloader, -d'extraire l'OS, de le rooter hors-fonctionnement, puis de le +d&rsquo;extraire l&rsquo;OS, de le rooter hors-fonctionnement, puis de le réinstaller, rooté, sur les lunettes.</p> <p>Le fait est que de débloquer le bootloader laisse une trace permanente -sur les lunettes, et que Saurik n'a pas utilisé cette technique pour +sur les lunettes, et que Saurik n&rsquo;a pas utilisé cette technique pour rooter sa paire. Voyons comment il a fait :</p> -<p><em>Je tiens tout d'abord a préciser que toutes les informations qui vont +<p><em>Je tiens tout d&rsquo;abord a préciser que toutes les informations qui vont suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la -partie "How does this exploit work".  Je tente d'apporter ma maigre +partie &ldquo;How does this exploit work&rdquo;.  Je tente d&rsquo;apporter ma maigre contribution a cette explication.</em></p> -<p>Donc, d'après les témoignages des quelques utilisateurs de Glass dans le +<p>Donc, d&rsquo;après les témoignages des quelques utilisateurs de Glass dans le monde, il semblerait que ces dernières fonctionnent avec un système -d'exploitation Android, avec une nouvelle interface, mais avec les mêmes +d&rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes outils internes: un kernel Linux, des outils userland GNU et une machine virtuelle Java Dalvik pour les applications.</p> -<p>Saurik a donc cherché un exploit connu pour cette version d'android, et -l'a appliqué a son problème. L'exploit en question est relativement -simple. Depuis la version 4.0 d'android, le système permet la sauvegarde +<p>Saurik a donc cherché un exploit connu pour cette version d&rsquo;android, et +l&rsquo;a appliqué a son problème. L&rsquo;exploit en question est relativement +simple. Depuis la version 4.0 d&rsquo;android, le système permet la sauvegarde des données des différentes applications, une a une, via ADB (Android -Debug Bridge, un protocole USB permettant l'accès a de nombreuses +Debug Bridge, un protocole USB permettant l&rsquo;accès a de nombreuses fonctions avancées des machines fonctionnant sous android, dont, entre -autre, un shell, un accès au logs de debugging, etc... Cette +autre, un shell, un accès au logs de debugging, etc&hellip; Cette fonctionnalité est bien entendu désactivable.) Ce backup est très simple : il crée un fichier .tgz contenant le dossier de configuration de -l'application. Lors de la restauration, le système supprime la -configuration existante, puis la remplace par celle dans l'archive gzip.</p> +l&rsquo;application. Lors de la restauration, le système supprime la +configuration existante, puis la remplace par celle dans l&rsquo;archive gzip.</p> <p>Le problème de sécurité vient du fait que les applications android voient leurs données stockées dans /data/data/identifiant/, et que -/data/ a pour permissions drwxrwx--x  27  system  system, ce qui +/data/ a pour permissions drwxrwx&ndash;x  27  system  system, ce qui signifie que seul system et les membres du groupe system peuvent lire dessus. Or, le fichier /data/local.prop définit de nombreux paramètres -au démarrage, et notamment un qui permet au système de déterminer s'il -fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur +au démarrage, et notamment un qui permet au système de déterminer s&rsquo;il +fonctionne dans une VM ou sur un véritable appareil. S&rsquo;il fonctionne sur une machine virtuelle, il donne les droits root a tout utilisateur se -connectant via ADB, ce qui est ce que l'on cherche pour l'instant. Le +connectant via ADB, ce qui est ce que l&rsquo;on cherche pour l&rsquo;instant. Le fait que /data/ appartienne a system veut dire que le programme de restauration doit être setuid pour accéder aux données a l’intérieur qui -appartiennent a root (soit toutes les applications système d'android, -dont l'application paramètres, et, dans ce cas précis, l'application de +appartiennent a root (soit toutes les applications système d&rsquo;android, +dont l&rsquo;application paramètres, et, dans ce cas précis, l&rsquo;application de log système présente sur les google glass de test. Ainsi, nous avons un processus tournant en tant que root, qui va écrire sur une partition qui nous intéresse des données que nous possédons.</p> -<p>Cependant, un problème reste : le système de restauration d'Android +<p>Cependant, un problème reste : le système de restauration d&rsquo;Android vérifie les données avant de restaurer, et ne restaure pas les symlinks, -ce qui nous empêche d'avoir accès directement a /data/local.prop, le -fichier qu'on cherche a modifier. Cela dit, il nous reste une +ce qui nous empêche d&rsquo;avoir accès directement a /data/local.prop, le +fichier qu&rsquo;on cherche a modifier. Cela dit, il nous reste une possiblité. Plaçons un dossier world-writable dans le fichier de backup, et nous pourrons écrire dedans pendant quelques secondes, le temps que la restauration se termine et que le système remette les permissions en place. Ainsi, nous pouvons créer le fichier /data/local/com.google.glass.logging/whatev/x, lien vers /data/local.prop, et nous avons un toujours un processus tournant en -tant que root qui est en train d'écrire dans ce dossier.</p> +tant que root qui est en train d&rsquo;écrire dans ce dossier.</p> <p>Donc, nous allons lancer deux processus en même temps : </p> <ul> <li> <p>Le premier tentera en boucle de créer le symlink. Il sera consitué de la commande suivante, depuis un shell sur les lunettes :</p> -<div class="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">&gt;/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span> -<span class="k">do</span> <span class="o">:</span> -<span class="n">done</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&gt;/dev/null +do : +done </pre></div> @@ -1245,10 +1507,10 @@ tant que root qui est en train d'écrire dans ce dossier.</p> <p>Le deuxième sera le processus de restauration de notre exploit. Celui ci, pour une plus grande chance de réussite, devra être suffisamment lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x, - pour qu'il crée whatev, prenne du temps a copier bigfile, puis écrive + pour qu&rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive dans x après que le symlink soit effectif. La commande sera, depuis - l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span> + l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab </pre></div> @@ -1257,111 +1519,111 @@ tant que root qui est en train d'écrire dans ce dossier.</p> world-readable. Il va commencer a copier le fichier bigfile.<br /> - Le processus de symlink va créer le lien /data/data/com.google.glass.logging/whatev/x, pointant vers - /data/local.prop, puis rendre l'âme proprement.<br /> + /data/local.prop, puis rendre l&rsquo;âme proprement.<br /> - Le processus de restauration, ayant enfin fini de copier whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui est lié a /data/local.prop. Comme le processus est setuid root, il ne se rendra compte de rien, et écrira tout dans /data/local.prop.</p> </li> </ul> -<p>And voilà! On a écrit ce que l'on veut dans /data/local.prop, ce qui -nous permet de faire croire a android qu'il tourne dans une machine -virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui -indique au noyau qu'il tourne dans qemu, un système de VM).</p> -<p>Il nous reste a rebooter, depuis l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<p>And voilà! On a écrit ce que l&rsquo;on veut dans /data/local.prop, ce qui +nous permet de faire croire a android qu&rsquo;il tourne dans une machine +virtuelle (ce que l&rsquo;on veut, c&rsquo;est en fait &ldquo;ro.kernel.qemu=1&rdquo;, qui +indique au noyau qu&rsquo;il tourne dans qemu, un système de VM).</p> +<p>Il nous reste a rebooter, depuis l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Puis nous remontons la partitions système en lecture/écriture (r/w), depuis le host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;mount -o remount,rw /system&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;mount -o remount,rw /system&quot; </pre></div> -<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span> +<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l&rsquo;appareil :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin </pre></div> <p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir l’exécuter plus tard :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;chmod 6755 /system/xbin/su&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;chmod 6755 /system/xbin/su&quot; </pre></div> <p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir redémarrer normalement :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;rm /data/local.prop&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;rm /data/local.prop&quot; </pre></div> <p>Enfin, nous redemarrons a nouveau :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Et voila, une paire de google glass rootée!</p> -<p>Il est bon de préciser que cette manipulation n'est possible que parce -que les lunettes tournent sous une ancienne version d'android, et que ce +<p>Il est bon de préciser que cette manipulation n&rsquo;est possible que parce +que les lunettes tournent sous une ancienne version d&rsquo;android, et que ce bug a été fixé depuis.</p> <p>Il serait aussi interessant de couvrir les problèmes de vie privée -qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p> -<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/%D/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il -s'agit de posséder son propre serveur, et donc, par extension, ses +qu&rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.</p> +<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il +s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses données. </p> -<p>Bien entendu, il n'est pas nécessaire pour cela de posséder +<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder physiquement son propre serveur (encore que ce soit possible, mais ce -n'est pas le sujet abordé ici.)<br /> +n&rsquo;est pas le sujet abordé ici.)<br /> Nous expliquerons ici les étapes nécessaires pour arriver a avoir un serveur utilisable, du moment ou vous arrivez sur le système fraichement installé, au moment ou vous possédez un serveur avec tous les paquets -nécessaires a l'utilisation que l'on veut en faire ici d'installés. +nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés. Cette partie va consister a paramétrer le système (ici un debian squeeze. Il est bien sur possible de faire la même chose avec a peu près toutes les distributions Linux disponibles, tout comme avec les BSD et tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x -squeeze, parce que c'est une distribution simple a utiliser comme -serveur, stable, et facile a configurer (puisqu'une bonne partie de la +squeeze, parce que c&rsquo;est une distribution simple a utiliser comme +serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la configuration est déjà faite et incluse dans le paquet), donc adaptée au -but de cet article, a savoir rendre l'installation simple et +but de cet article, a savoir rendre l&rsquo;installation simple et compréhensible).</p> -<p>La première chose a faire est bien entendu d'obtenir le serveur en lui +<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui même. Cette partie de la chose ne sera pas traitée dans cet article. Il -existe en effet un nombre infini d'obtenir un serveur, que ce soit en le -louant chez OVH/1&amp;1/n'importe quel autre hébergeur commercial, en -participant a un système d'hébergement collaboratif (je vous laisse +existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le +louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en +participant a un système d&rsquo;hébergement collaboratif (je vous laisse chercher), en achetant un serveur et en le faisant fonctionner de chez -vous, en utilisant un vieux PC... Bref, les possibilités sont multiples. +vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples. Dès lors que vous avez accès a un système debian serveur, peu importe sur quel matériel il fonctionne, et a priori peu importe aussi la manière -dont vous y accédez, le résultat est le même (et la procédure aussi...). +dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;). Dans cet article, nous parlerons de la configuration de base, du moment ou vous avez le serveur vierge dans les mains au moment ou vous installez le serveur http.</p> -<p>Dans cet article, lorsque est précisée le type d'IP a utiliser, il -convient de mettre ce type précisément. Quand le type n'est pas +<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il +convient de mettre ce type précisément. Quand le type n&rsquo;est pas précisée, libre a vous de choisir ipv4 ou ipv6.</p> <p>Bref. Commençons au point ou vous avez un accès root a votre serveur, -n'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou -rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez +n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou +rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe solide sur le compte root. Continuons en allant vite mettre en place le nom de domaine. Pour cela, votre registrar doit vous fournir une -interface vous permettant d'éditer l'entrée DNS pour votre nom de +interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de domaine. </p> -<p>Cette entrée doit donc pour l'instant ressembler a ca :</p> -<div class="highlight"><pre> <span class="o">&lt;</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">&gt;</span> <span class="n">NS</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">A</span> <span class="o">&lt;</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> - <span class="n">IN</span> <span class="n">AAAA</span> <span class="o">&lt;</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> +<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1 + IN MX 1 + IN A &lt;IPv4 de votre serveur&gt; + IN AAAA &lt;IPv6 de votre serveur&gt; </pre></div> <p>Cela vous permet de rediriger tout le trafic se référant a votre nom de domaine vers votre ip (le fonctionnement exact du DNS est assez -compliqué a expliquer, donc on va dire que c'est de la magie pour -l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer +compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour +l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers votre serveur, ce qui est un bon début. Faisons un petit point sécurité ici : pour accéder a votre serveur, il vous suffit actuellement de taper @@ -1370,50 +1632,50 @@ le mot de passe root.</p> bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction du nombre de caractères, ça prend plus ou moins de temps, et si vous avez suffisamment de caractères, ça peut prendre un temps assez -conséquent. Cela dit, il vaut mieux être prudent...) Ainsi, nous allons -arrêter d'utiliser root et nous allons commencer a utiliser des couples +conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons +arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples clés publiques/privées pour nous connecter au serveur.<br /> -Cela se fait en deux temps : tout d'abord, créer un nouvel utilisateur, -grâce auquel nous administrerons le serveur a l'avenir; puis configurer -OpenSSH pour que celui ci n'accepte que les connections par clés et plus +Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur, +grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer +OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus celles sur root.</p> <p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se fait avec adduser, qui est interactif (vous ne devriez pas avoir de -problème avec, puisqu'il crée tout les dossiers et fichiers nécessaires, +problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires, et vous pose toutes les questions utiles pour vous aider.) sinon, vous -devrez utiliser useradd, qui est (en plus d'être très chiant a -distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait -un simple script permettant l'utilisation d'useradd plus facilement.)</p> +devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a +distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait +un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p> <p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif en faisant un <code>adduser --group &lt;username&gt;</code></p> <p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m -N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera -son dossier principal dans /home/, et l'ajoutera au groupe du même nom +son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom que lui (ce qui est en général nécessaire pour des questions de vie privée).</p> -<p>Il convient maintenant d'ajouter cet utilisateur aux groupes qu'il sera +<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix users staff sudo wheel</code>, puis de changer son mot de passe <code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br /> -Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un +Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un utilisateur complètement fonctionnel et utilisable pour toutes les -taches d'administration. Si vous devez encore utiliser root, c'est que +taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que quelque chose ne va pas.</p> -<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous +<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous allons maintenant passer a la phase 2 du plan : désactiver le login ssh root et le login ssh par mot de passe.<br /> -Tout d'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un +Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un système assez semblable a celui vous permettant de chiffrer vos mail : vous avec une clé publique et une clé privée sur le client, et la clé publique est aussi sur le serveur. Lorsque vous vous connectez, openssh vérifie que vous possédez la clé privée qui correspond a la clé publique stockée sur le serveur (pour votre utilisateur, bien entendu). Il est -également possible d'utiliser plusieurs clés publique pour chaque<br /> +également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br /> utilisateur.</p> <p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout -d'abord, il nous faut générer un couple de clés publique/privée sur le +d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t rsa précise a ssh que nous voulons un chiffrement rsa, qui est suffisamment solide pour cette utilisation.) Entrez les informations que @@ -1421,12 +1683,11 @@ ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br /> known_hosts liste les serveurs auxquels vous vous êtes connectés déjà une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous -intéresse ici c'est id_rsa et id_rsa.pub . id_rsa contient votre clé +intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé privée, sauvegardez la sur une clé USB ou notez la sur un bout de papier, si vous la perdez, vous ne pourrez plus vous connecter au -serveur. (planquez la clé usb/le bout de papier...) id_rsa.pub, quand a -lui, contient votre clé publique. Copiez la sur le serveur, avec un -<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou +serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a +lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou en la copiant a la main, si ça vous amuse. </p> <p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra. @@ -1438,19 +1699,19 @@ domaine&gt;</code>), et il ne devrait pas vous demander de mot de pass il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré, donc vérifiez que vous avez suivi correctement les instruction ci-dessus.</strong></p> -<p>Continuons. Il ne nous reste plus qu'a installer le serveur web, et a le +<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le configurer: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \ -<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \ -<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \ -<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \ -<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \ +apache2 apache2.2-common apache2-doc apache2-mpm-prefork \ +apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \ +php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \ +apache2-suexec php-pear php-auth php5-mcrypt mcrypt \ +php5-imagick imagemagick libapache2-mod-suphp libruby \ +libapache2-mod-ruby </pre></div> -<p>(faisons large, on aura besoin de l'excédent plus tard...), puis activons les<br /> +<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br /> mods apache en faisant <code>a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest</code>, et faisons en sorte que ces activations soient prises en compte par apache via un <code>sudo service apache2 @@ -1460,46 +1721,46 @@ comment fonctionner sur notre nom de domaine et ou trouver les fichiers a envoyer. </p> <p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez sympa pour nous filer un fichier de configuration par défaut. Il nous -faut encore l'éditer, en changeant l'adresse mail au début du document +faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>, -et enfin redémarrer apache pour qu'il prenne en compte les +et enfin redémarrer apache pour qu&rsquo;il prenne en compte les modifications, par un <code>sudo service apache2 restart</code> </p> <p>Et maintenant, il vous reste a apprendre le html, parce que ca y est, votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on -verra l'installation du serveur mail (c'est suffisamment complexe pour -prendre un article seul...)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are +verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour +prendre un article seul&hellip;)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p> -<p>Bon, voila. J'ai passé le cap. Je suis sous GNU/Linux depuis un certain +<p>Bon, voila. J&rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain temps, maintenant, et depuis un certain temps je remarque des -changements malvenus. Bien entendu, au début, je n'avais pas les +changements malvenus. Bien entendu, au début, je n&rsquo;avais pas les connaissances nécessaires pour comprendre ne serait-ce que ces modifications existaient. Et puis certaines sont arrivées avant que je -n'ai même idée que quelque chose dans mon système d'exploitation avait +n&rsquo;ai même idée que quelque chose dans mon système d&rsquo;exploitation avait cette fonction la. Par exemple, udev, ou policykit/consolekit/. A -l'époque, je n'avais aucune idée de la façon dont les disques étaient -montés sur mon système. Le premier système non-Windows que j'ai utilisé +l&rsquo;époque, je n&rsquo;avais aucune idée de la façon dont les disques étaient +montés sur mon système. Le premier système non-Windows que j&rsquo;ai utilisé fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je cherche a démonter le système pour comprendre comment il fonctionnait en -profondeur. Cependant, avec le temps, les connaissances s'accumulant et -mon niveau de compréhension du système s'améliorant, j'ai commencé a -remarquer que certain bouts de l'OS ne collaient pas exactement avec les -autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a -cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma -compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne +profondeur. Cependant, avec le temps, les connaissances s&rsquo;accumulant et +mon niveau de compréhension du système s&rsquo;améliorant, j&rsquo;ai commencé a +remarquer que certain bouts de l&rsquo;OS ne collaient pas exactement avec les +autres. Bien sur, je ne saurais dire si cette réalisation s&rsquo;est faite a +cause de la recrudescence de ces bouts d&rsquo;OS, ou bien juste a cause de ma +compréhension plus poussée. Toujours est-il que ces petits bouts d&rsquo;OS ne s’adaptant pas au reste du système se faisaient de plus en plus visible. -Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai -choisi de passer a Archlinux. C'était avant le passage a systemd. Ce -système me convenait bien. Si je n'installais pas Gnome, ce que je ne +Et puis, un jour, j&rsquo;en ai eu marre de voir unity sur ma machine, et j&rsquo;ai +choisi de passer a Archlinux. C&rsquo;était avant le passage a systemd. Ce +système me convenait bien. Si je n&rsquo;installais pas Gnome, ce que je ne comptais pas faire, il ne me forçait pas a installer un *kit -quelconque, ni dbus. Oui, udev était toujours la, mais c'était le moins +quelconque, ni dbus. Oui, udev était toujours la, mais c&rsquo;était le moins envahissant de ceux la.</p> <p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les premiers sont probablement très efficaces dans leur domaine, et le -second n'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la -distribution d'avoir au plus vite les dernières versions de tout. +second n&rsquo;a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la +distribution d&rsquo;avoir au plus vite les dernières versions de tout. Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient -pas les seuls a faire ça...) ont un problème très précis, qui n'importe +pas les seuls a faire ça&hellip;) ont un problème très précis, qui n&rsquo;importe pas a tout le monde, mais qui est très gênant pour ceux a qui il importe, et ce problème est que ces systèmes ne respectent absolument pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en @@ -1508,1616 +1769,428 @@ ces 9 principes :</p> <li>Ce qui est petit est beau</li> <li>Faites en sorte que chaque programme fasse une chose, bien.</li> <li>Faites un prototype aussi vite que possible</li> -<li>Choisissez la portabilité plutôt que l'efficacité</li> +<li>Choisissez la portabilité plutôt que l&rsquo;efficacité</li> <li>Stockez les données dans des fichiers textes.</li> <li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li> <li>Utilisez des scripts shells pour faciliter la portabilité et la réutilisation.</li> -<li>Évitez les UI qui "capturent" l'utilisateur.</li> +<li>Évitez les UI qui &ldquo;capturent&rdquo; l&rsquo;utilisateur.</li> <li>Faites de chaque programme un filtre.</li> </ol> -<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et -on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas -exactement la façon dont l'informatique fonctionne. Effectivement, les -standards, les systèmes d'exploitation, les logiciels, tout doit évoluer -- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est -pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et -celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La -philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans -de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br /> -La philosophie UNIX est aussi et surtout une garantie d'utilisabilité +<p>Alors bien entendu, un système d&rsquo;exploitation est fait pour évoluer, et +on pourrait penser qu&rsquo;UNIX a fait son temps. Cependant, ce n&rsquo;est pas +exactement la façon dont l&rsquo;informatique fonctionne. Effectivement, les +standards, les systèmes d&rsquo;exploitation, les logiciels, tout doit évoluer +- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&rsquo;est +pas d&rsquo;UNIX que nous parlons ici. C&rsquo;est de la <em>philosophie</em> UNIX. Et +celle-ci n&rsquo;a pas fait son temps, <strong>elle a fait ses preuves.</strong> La +philosophie UNIX, en plus d&rsquo;être efficace sur le papier, a aussi 44 ans +de tests derrière elle, et fonctionne aussi bien qu&rsquo;au premier jour.<br /> +La philosophie UNIX est aussi et surtout une garantie d&rsquo;utilisabilité et de simplicité pour les administrateurs systèmes, pour les -développeurs, bref pour tous ceux qui font de l'informatique -<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique +développeurs, bref pour tous ceux qui font de l&rsquo;informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l&rsquo;informatique ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce sont ceux qui sont les plus proches du système).</p> -<p>Tous OS se doit d'avoir un système standardisé pour faire communiquer +<p>Tous OS se doit d&rsquo;avoir un système standardisé pour faire communiquer les programmes entre eux. UNIX a un système de pipes, des sortes de -fichiers spéciaux permettant d'échanger des informations. C'est -efficace, ça respecte le "tout est fichier", c'est standard, c'est +fichiers spéciaux permettant d&rsquo;échanger des informations. C&rsquo;est +efficace, ça respecte le &ldquo;tout est fichier&rdquo;, c&rsquo;est standard, c&rsquo;est simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient -remplacer ça, avec une interface qui n'est explicitement pas faite pour -être utilisée a la ligne de commande mais a l'aide d'APIs, et un -programme monolithique qui effectue sa tache d'une façon complètement -obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon -efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus -"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est -<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est -horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus -lire facilement les échanges entre programmes. C'est peu pratique, en +remplacer ça, avec une interface qui n&rsquo;est explicitement pas faite pour +être utilisée a la ligne de commande mais a l&rsquo;aide d&rsquo;APIs, et un +programme monolithique qui effectue sa tache d&rsquo;une façon complètement +obscure pour l&rsquo;utilisateur. Alors bien sur, il l&rsquo;effectue d&rsquo;une façon +efficace, cette tache. Oui, ça va plus vite qu&rsquo;avant. Oui, c&rsquo;est plus +&ldquo;rangé&rdquo;, ça fait moins &ldquo;fouillis&rdquo;. Mais c&rsquo;est moins efficace. C&rsquo;est<em>beaucoup</em> moins utilisable pour l&rsquo;utilisateur final. C&rsquo;est +horriblement chiant pour les sysadmins, parce qu&rsquo;ils ne peuvent plus +lire facilement les échanges entre programmes. C&rsquo;est peu pratique, en fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br /> Systemd prend le même parti de créer une interface unifiée, accessible via des appels a des APIs uniquement, complètement obscure, extrêmement abstraite, bien entendu monolithique, et très peu ouverte a la -modification par l'utilisateur final. Alors oui, il parait que ça -augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques +modification par l&rsquo;utilisateur final. Alors oui, il parait que ça +augmente la vitesse de boot. Eh bien, au risque d&rsquo;en choquer quelques uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement et que je puisse modifier facilement, et qui soit ouvert, compréhensible -et distribué. C'est presque comme si les projets freedesktop.org avaient +et distribué. C&rsquo;est presque comme si les projets freedesktop.org avaient pour but de remplacer la base UNIX de linux en créant un système -concurrent, bâtard, bâti sur le kernel Linux mais n'employant plus les -systèmes basiques d'UNIX.</p> -<p>Le problème est qu'il est facilement visible que la direction prise par -la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni +concurrent, bâtard, bâti sur le kernel Linux mais n&rsquo;employant plus les +systèmes basiques d&rsquo;UNIX.</p> +<p>Le problème est qu&rsquo;il est facilement visible que la direction prise par +la communauté Linux n&rsquo;est pas celle du retour sur les systèmes UNIX ni celle du développement de solutions respectant la philosophie UNIX, mais -remises au gout du jour (?), mais est bien d'accepter et de pousser les +remises au gout du jour (?), mais est bien d&rsquo;accepter et de pousser les changements apportés par les projets freedesktop.org directement dans le cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font partie de nombreux développeurs de ces projets), a déjà adopté tous ces -changements (archlinux aussi, mais pour d'autres raisons...), et on peut -compter sur le fait que les autres distributions l'adopteront un jour ou -l'autre.</p> -<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces -systèmes, tout du moins exprimé les raisons qui font qu'ils me -déplaisent, on pourrait penser qu'il suffit de passer a une distribution -n'incluant pas systemd, voire a une distribution n'incluant pas du tout +changements (archlinux aussi, mais pour d&rsquo;autres raisons&hellip;), et on peut +compter sur le fait que les autres distributions l&rsquo;adopteront un jour ou +l&rsquo;autre.</p> +<p>Bon, maintenant que nous avons, si ce n&rsquo;est démontré la nocivité de ces +systèmes, tout du moins exprimé les raisons qui font qu&rsquo;ils me +déplaisent, on pourrait penser qu&rsquo;il suffit de passer a une distribution +n&rsquo;incluant pas systemd, voire a une distribution n&rsquo;incluant pas du tout de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur archlinux. Cependant, avec un peu de réflexion, on voit que si des distributions comme archlinux et Fedora ont adopté systemd (et -qu'OpenSUSE est en train de l’intégrer), il est probable que cela +qu&rsquo;OpenSUSE est en train de l’intégrer), il est probable que cela devienne un standard au fil des années, et que seuls survivent systemd -et upstart, le gestionnaire de démarrage d'ubuntu, qui ne changera +et upstart, le gestionnaire de démarrage d&rsquo;ubuntu, qui ne changera probablement pas (je les vois mal revenir en arrière sur ce point.) -Toujours est-il que l'init héritée du System V semble condamnée a mourir +Toujours est-il que l&rsquo;init héritée du System V semble condamnée a mourir sous Linux. Il pourrait être judicieux de passer sous debian squeeze, qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne la recevra probablement que dans 2/3 ans. Cependant, cette période est -toujours trop courte, et met sur mon système d'exploitation une date -d'expiration, chose qui ne me plait que moyennement. Non, la solution -est de passer sous un système autre, qui ait son propre système d'init +toujours trop courte, et met sur mon système d&rsquo;exploitation une date +d&rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution +est de passer sous un système autre, qui ait son propre système d&rsquo;init (ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options -principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas -vraiment un choix, vu le peu de programmes qu'il permet de faire -fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui -n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku -n'est pas un choix non plus, puisque le but est de rester dans une +principales s&rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&rsquo;est pas +vraiment un choix, vu le peu de programmes qu&rsquo;il permet de faire +fonctionner et le fait qu&rsquo;il ne soit disponible que sur i386, ce qui +n&rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku +n&rsquo;est pas un choix non plus, puisque le but est de rester dans une optique UNIX.</p> -<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai +<p>OpenSolaris est un système d&rsquo;exploitation tout a fait valable. Je n&rsquo;ai en théorie aucun problème sur cet OS, sauf que certains choix de design -ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet, +ne correspondent pas du tout a l&rsquo;idée que j&rsquo;ai d&rsquo;un OS. En effet, OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de ses outils, avec des paquets modifiés pour les rendre plus simples a utiliser (fichiers de configuration fournis par défaut, par exemple, et -autres patchs "release-only"), et une tendance a faire des scripts et -des outils installés par défaut pour tout et n'importe quoi. Bref, cela -n'est pas le sujet. Il convient aussi de voir qu'avec la récente +autres patchs &ldquo;release-only&rdquo;), et une tendance a faire des scripts et +des outils installés par défaut pour tout et n&rsquo;importe quoi. Bref, cela +n&rsquo;est pas le sujet. Il convient aussi de voir qu&rsquo;avec la récente acquisition de Sun par Oracle, il est possible que le projet OpenSolaris -n'ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du -projet affiche d'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> -<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD -ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est +n&rsquo;ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du +projet affiche d&rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> +<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&rsquo;OpenBSD, NetBSD +ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&rsquo;est simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour -réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir -DFBSD ressemble aussi au système de l'assistance a l'user a outrance -décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment +réputation d&rsquo;être orientées sécurité, et d&rsquo;après ce que j&rsquo;ai pu en voir +DFBSD ressemble aussi au système de l&rsquo;assistance a l&rsquo;user a outrance +décris plus haut. Mais la vérité est que je n&rsquo;ai pas fait suffisamment de recherches et que FreeBSD ne va me voir arriver que par hasard, parce -qu'entre toutes les BSD ca me semble la plus sympa et la plus agréable a -utiliser, plus le fait que le système de ports me convient bien (j'aime +qu&rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a +utiliser, plus le fait que le système de ports me convient bien (j&rsquo;aime pouvoir configurer mes logiciels de façon assez profonde.)</p> -<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien +<p>Voila, c&rsquo;est mon avis sur ce &ldquo;problème&rdquo; actuel du monde de Linux. Bien entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins -n'apparaissent jamais chez certaines distributions, créant de ce fait un +n&rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un choix pour les utilisateurs.<br /> -[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/%D/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> -J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire +[1]: Je n&rsquo;ai pas trouvé de traduction satisfaisante a &ldquo;software leveraging&rdquo;, mais l&rsquo;idée est la&hellip;*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> +J&rsquo;ai annoncé il y a environ 20 jours que j&rsquo;avais pour projet de faire une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée -PiRatBox. Il se trouve qu'après de nombreux essais, un problème -récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez +PiRatBox. Il se trouve qu&rsquo;après de nombreux essais, un problème +récurrent apparait: le Raspberry Pi n&rsquo;est pas capable de fournir assez de courant par défaut pour faire fonctionner a la fois un disque dur et une antenne WiFi.<br /> -Alors, autant il me semble évident qu'avec une -alimentation provenant d'un port USB a 2A (max), je n'avais pas -énormément de chances d'avoir 2A sur chacun des ports host du Raspi, +Alors, autant il me semble évident qu&rsquo;avec une +alimentation provenant d&rsquo;un port USB a 2A (max), je n&rsquo;avais pas +énormément de chances d&rsquo;avoir 2A sur chacun des ports host du Raspi, autant avoir moins de 250 mA sur chacun de ces ports me semble un tout petit peu exagéré en terme de rentabilité. </p> <p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me -servant a rien) (vous savez, celui qui est monté en USB...), qui +servant a rien) (vous savez, celui qui est monté en USB&hellip;), qui consomme énormément, est assez louche. Il devrait toujours être possible de désactiver une device USB, me semble-t-il, au niveau logiciel. La, -bien qu'il soit surement possible de la désactiver au niveau du kernel, -il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien +bien qu&rsquo;il soit surement possible de la désactiver au niveau du kernel, +il n&rsquo;est pas <strong>simplement</strong> possible de la &ldquo;débrancher&rdquo;. Ce qui est bien chiant, étant donné le besoin évident de puissance électrique dans lequel on se retrouve. </p> -<p>Bon, je dois avouer n'avoir pas testé de lancer les différents services +<p>Bon, je dois avouer n&rsquo;avoir pas testé de lancer les différents services composant le système des piratebox sous arch, pour la simple <del>et -bonne</del> raison qu'arch utilise systemd et qu'il n'existe pas de wrapper -systemd pour les daemons piratebox, et que j'ai la flemme d'en faire, +bonne</del> raison qu&rsquo;arch utilise systemd et qu&rsquo;il n&rsquo;existe pas de wrapper +systemd pour les daemons piratebox, et que j&rsquo;ai la flemme d&rsquo;en faire, parce que systemd est une horreur a utiliser avec les scripts init. Donc -non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas +non, j&rsquo;utiliserai debian. Le problème d&rsquo;utiliser debian dans ce cas précis est que apt/dpkg a une gestion des dépendances dans un sens mais -pas dans l'autre, en ce sens que si on installe un package "haut", c'est +pas dans l&rsquo;autre, en ce sens que si on installe un package &ldquo;haut&rdquo;, c&rsquo;est a dire dépendant de plusieurs autres packages, apt/dpkg se charge -efficacement d'installer toutes les dépendances nécessaires, tandis que -si on désinstalle un package "bas", c'est a dire sur lequel de nombreux +efficacement d&rsquo;installer toutes les dépendances nécessaires, tandis que +si on désinstalle un package &ldquo;bas&rdquo;, c&rsquo;est a dire sur lequel de nombreux autres packages dépendent, apt/dpkg ne désinstalle pas ces packages -"hauts", ce qui pose un vrai problème quand on se retrouve sur un -Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui -sera installé sur le système avant l'installation proprement dite -(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd +&ldquo;hauts&rdquo;, ce qui pose un vrai problème quand on se retrouve sur un +Raspberry Pi, puisqu&rsquo;il n&rsquo;y a pas de moyen &ldquo;facile&rdquo; de choisir ce qui +sera installé sur le système avant l&rsquo;installation proprement dite +(puisque le moyen &ldquo;universel&rdquo; d&rsquo;installation sur Raspberry Pi est le dd vers la SD qui sert de disque système.)</p> -<p>Il y a <strong>énormément</strong> d'autres critiques que l'ont pourrait faire -concernant le Raspberry Pi. Son système de démarrage a s'arracher les +<p>Il y a <strong>énormément</strong> d&rsquo;autres critiques que l&rsquo;ont pourrait faire +concernant le Raspberry Pi. Son système de démarrage a s&rsquo;arracher les cheveux, par exemple. En effet, plutôt que de faire comme tout pc normalement constitué ou la partie calcul démarre, lance le bootloader, -cherche le kernel de l'OS qui lui même se lance, initialise le hardware, -etc..., a un système bâtard du au fait que la puce au centre de la carte +cherche le kernel de l&rsquo;OS qui lui même se lance, initialise le hardware, +etc&hellip;, a un système bâtard du au fait que la puce au centre de la carte est a la base une puce graphique a laquelle on a greffé un cœur de -calcul (probablement au fond d'une cour d'immeuble, dans les quartiers -pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le -plus efficace qu'aient trouvé les personnes ayant implémenté cette +calcul (probablement au fond d&rsquo;une cour d&rsquo;immeuble, dans les quartiers +pauvres de Bratislava, vu la propreté de la greffe&hellip;), et le moyen le +plus efficace qu&rsquo;aient trouvé les personnes ayant implémenté cette atrocité de gérer le boot est donc de faire démarrer le cœur graphique en premier, ce dernier exécute un code propriétaire pour démarrer le cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel -etc... </p> +etc&hellip; </p> <p>Ce qui non seulement complique énormément le boot, non seulement ajoute -du code propriétaire a un projet se disant libre, mais en plus n'est -<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, -oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p> -<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je -le terminerai dès que j'aurai récupéré les outils nécessaires pour +du code propriétaire a un projet se disant libre, mais en plus n&rsquo;est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, +oui, mais uniquement quand c&rsquo;est bien réalisé, sinon je dis non. </p> +<p>Enfin, le projet que j&rsquo;avais est toujours en cours de réalisation. Je +le terminerai dès que j&rsquo;aurai récupéré les outils nécessaires pour monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa -vie. Les problèmes qu'il m'a posé, qu'il n'aurait pas du me poser, m'ont -trop agacé pour que j'aie envie de le sortir et de jouer avec une fois +vie. Les problèmes qu&rsquo;il m&rsquo;a posé, qu&rsquo;il n&rsquo;aurait pas du me poser, m&rsquo;ont +trop agacé pour que j&rsquo;aie envie de le sortir et de jouer avec une fois sa mission remplie. </p> -<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/%D/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous +<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la +fabrication d&rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt +sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous <del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une utilisation <strong>a la</strong> UNIX<br /> -Cependant, un d'entre eux se démarque par sa moins-mauvais-itude, c'est +Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br /> Mutt est un client mail en ligne de commande, qui, comme le dit sa page -d’accueil, <a href="http://www.mutt.org">"just sucks less"</a>. Dans les faits, mutt est assez +d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez chiant a configurer mais particulièrement pratique a utiliser après.</p> <p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans -<code>/etc/Muttrc</code>, et il est courant d'utiliser offlineimap en +<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en conjonction avec celui ci, de façon a accéder aux mails même sans accès -internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne +internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne crée pas de cache, ce qui empêche la consultation des emails sans -connexion internet.) La configuration d'offlineimap se fait dans -<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config +connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config par user. Offlineimap est un petit logiciel en python qui synchronise un dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque justement mutt accepte les dossiers au format Maildir. (De plus, cela va tout a fait dans le sens de la libération des données en cela que vous possédez vos mails en local.)<br /> Bref, passons aux choses serieuses : le code. Déjà, installez -offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d'installer +offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer mutt avec le patch sidebar, qui crée un listing des dossiers sur la partie gauche.<br /> Ensuite, voyons pour la partie configuration :<br /> -Ma configuration d'offlineimap :</p> -<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span> -<span class="cp">## Originally located in ~/.offlineimaprc</span> -<span class="cp">## This should not be edited without creating a copy before</span> -<span class="cp">## Created by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +Ma configuration d&rsquo;offlineimap :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span> +<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span> +<span style="color: #75715e">## This should not be edited without creating a copy before</span> +<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="p">[</span><span class="n">general</span><span class="p">]</span> -<span class="cp"># List of accounts to be synced, separated by a comma.</span> -<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</span> +<span style="color: #f8f8f2">[general]</span> +<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span> +<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span> -<span class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span> -<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> -<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span> -<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> -<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span> -<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span> -<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</span> +<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span> +<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> +<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span> +<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> +<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span> +<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span> +<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span> -<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span> -<span class="cp"># Where should the mail be placed?</span> -<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span> - <span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span> +<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span> +<span style="color: #75715e"># Where should the mail be placed?</span> +<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span> + <span style="color: #75715e"># voulez que vos emails apparaissent</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span> -<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span> -<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span> -<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d&#39;utilisateur</span> -<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span> -<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span> +<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span> +<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span> +<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span> +<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span> +<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span> </pre></div> -<p>Ça devrait être assez simple a lire, j'ai tout bien commenté :3<br /> +<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br /> Puis ma config mutt :</p> -<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span> -<span class="cp">## This file should not be edited without creating a copy</span> -<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span> +<span style="color: #75715e">## This file should not be edited without creating a copy</span> +<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="cp"># General config for reading (fetched via offlineimap)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap) -<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span> -<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span> +set mbox_type = Maildir +<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut) -<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span> -<span class="cp"># dossier root mailbox/imap</span> +set folder = ~/Email/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap -<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> -<span class="cp"># dossier d&#39;inbox</span> +set spoolfile = +INBOX +<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox -<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">&#39;</span><span class="n">All</span> <span class="n">Mail</span><span class="err">&#39;</span> -<span class="cp"># dossier ou archiver les emails</span> +set mbox = +&#39;All Mail&#39; +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails -<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span> -<span class="cp"># enfin voila quoi.</span> +set copy = yes +<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour... +<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi. -<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span> -<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span> +set header_cache = /.hcache/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache) -<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span> -<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span> +set record = +Sent +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés -<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span> -<span class="cp"># dossier dans lequel sont stockés les brouillons</span> +set postponed = +Drafts +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons -<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span> -<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span> +mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail +<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche -<span class="cp"># General config for sending (using Mutt&#39;s native support)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support) -<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">password_placeholder</span><span class="err">&#39;</span> -<span class="cp"># votre mot de passe</span> +set smtp_pass = &#39;password_placeholder&#39; +<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe -<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">&quot;smtp://username@whatev.org:465/&quot;</span> -<span class="cp"># l&#39;url ou envoyer les emails</span> +set smtp_url = &quot;smtp://username@whatev.org:465/&quot; +<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails -<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">&quot;utf-8&quot;</span> -<span class="cp"># UTF8, NE PAS CHANGER</span> +set send_charset = &quot;utf-8&quot; +<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER -<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">&quot;.sign&quot;</span> -<span class="cp"># vous pouvez mettre votre signature dans .sign</span> +set signature = &quot;.sign&quot; +<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign -<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible </span> -<span class="cp"># comme ca.</span> +set sig_on_top = yes +<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible +<span style="color: #960050; background-color: #1e0010">#</span> comme ca. -<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span> +set ssl_verify_host = no +<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement -<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">&quot;wxcafe.net&quot;</span> -<span class="cp"># mettez l&#39;adresse de votre serveur ici</span> +set hostname = &quot;wxcafe.net&quot; +<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici -<span class="cp"># Misc settings</span> +<span style="color: #960050; background-color: #1e0010">#</span> Misc settings -<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span> -<span class="cp"># la façon de voir les emails par défaut.</span> +auto_view text/html +<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut. -<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">&quot;%y-%m-%d %T&quot;</span> -<span class="cp"># format de date d&#39;envoi/de reception.</span> +set date_format = &quot;%y-%m-%d %T&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception. -<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">&quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;</span> -<span class="cp"># format de l&#39;index (la présentation de l&#39;interface)</span> -<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span> +set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface) +<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span> -<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span> -<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/aliases&quot;</span> -<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span> -<span class="cp"># format : &quot;alias short_name long_email_adress&quot;</span> -<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span> +set sort_alias = alias +set reverse_alias = yes +set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot; +<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même. +<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot; +source <span style="color: #f8f8f2">$alias_file</span> -<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># ne pas biper. CE SON ME TUE T.T</span> +set beep = no +<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T -<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span> -<span class="cp"># ?</span> +set tilde = yes +set sleep_time = 0 +<span style="color: #960050; background-color: #1e0010">#</span> ? -<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span> -<span class="cp"># parametres de la barre coté gauche</span> +set sidebar_visible = yes +set sidebar_width = 15 +<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche -<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">&quot;Clément Hertling (Wxcafé)&quot;</span> -<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">&quot;wxcafe@wxcafe.net&quot;</span> -<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/cacert&quot;</span> -<span class="cp"># parametres d&#39;envoi. mettez vos propres infos a la place des miennes...</span> +set realname = &quot;Clément Hertling (Wxcafé)&quot; +set from = &quot;wxcafe@wxcafe.net&quot; +set use_from = yes +set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot; +<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes... -<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># vous permet de vois les headers des mails. j&#39;aime, donc je laisse.</span> +set edit_headers = yes +<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse. -<span class="cp"># Macros</span> +<span style="color: #960050; background-color: #1e0010">#</span> Macros -<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span> -<span class="cp"># pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les </span> -<span class="cp"># deux</span> -<span class="cp"># \C represente la touche Control</span> +<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus, +<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les +<span style="color: #960050; background-color: #1e0010">#</span> deux +<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span> -<span class="cp"># Control+p -&gt; remonter d&#39;un dossier dans la sidebar</span> +bind index,pager \Cp sidebar-prev +<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span> -<span class="cp"># Control+n -&gt; descendre d&#39;un dossier dans la sidebar</span> +bind index,pager \Cn sidebar-next +<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span> -<span class="cp"># Control+o -&gt; ouvrir le dossier selectionné dans la sidebar</span> +bind index,pager \Co sidebar-open +<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar -<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">&quot;=Trash&quot;</span> <span class="s">&quot;Trash&quot;</span> -<span class="cp"># d supprime le message en cours</span> +macro index,pager d &quot;=Trash&quot; &quot;Trash&quot; +<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours -<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.</span> +bind pager previous-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message. -<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de </span> -<span class="cp"># message</span> +bind pager next-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de +<span style="color: #960050; background-color: #1e0010">#</span> message -<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># raccourcis vim</span> +bind pager j next-line +bind pager k previous-line +<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim -<span class="cp"># PGP signing commands</span> +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands -<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --import -v %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --export --armor %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_autosign</span><span class="o">=</span><span class="n">yes</span> -<span class="n">set</span> <span class="n">pgp_sign_as</span><span class="o">=</span><span class="mi">0</span><span class="n">x</span><span class="o">********</span> -<span class="cp"># remplacez 0x******** par votre identifiant PGP!!!!!</span> +set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot; +set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot; +set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot; +set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot; +set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot; +set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot; +set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot; +set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot; +set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot; +set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot; +set pgp_autosign=yes +set pgp_sign_as=0x******** +<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!! -<span class="n">set</span> <span class="n">pgp_replyencrypt</span><span class="o">=</span><span class="n">no</span> -<span class="n">set</span> <span class="n">pgp_timeout</span><span class="o">=</span><span class="mi">7200</span> -<span class="n">set</span> <span class="n">pgp_good_sign</span><span class="o">=</span><span class="s">&quot;^gpg: Good signature from&quot;</span> +set pgp_replyencrypt=no +set pgp_timeout=7200 +set pgp_good_sign=&quot;^gpg: Good signature from&quot; -<span class="cp"># si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis</span> -<span class="cp"># PGP signing options</span> +<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options -<span class="cp"># Palette for use with the Linux console. Black background.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background. -<span class="cp"># Schéma de couleur Rouge et Noir. Commentez si vous voulez le </span> -<span class="cp"># défaut noir et blanc.</span> -<span class="cp"># d&#39;autres schémas sont trouvables sur google et autre.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le +<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc. +<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre. -<span class="n">color</span> <span class="n">hdrdefault</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">quoted</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">signature</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">attachment</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">message</span> <span class="n">brightwhite</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">error</span> <span class="n">brightred</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">indicator</span> <span class="n">black</span> <span class="n">red</span> -<span class="n">color</span> <span class="n">status</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tree</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">normal</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">markers</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">search</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tilde</span> <span class="n">brightmagenta</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="o">~</span><span class="n">F</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="s">&quot;~N|~O&quot;</span> +color hdrdefault red black +color quoted brightblack black +color signature brightblack black +color attachment red black +color message brightwhite black +color error brightred black +color indicator black red +color status white black +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index red black ~F +color index red black &quot;~N|~O&quot; </pre></div> -<p>Voila, pour plus d'informations vous pouvez aller voir le manuel de mutt +<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt @ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br /> -J'espère que cette configuration "toute faite" vous aidera a commencer +J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer a utiliser mutt. Il est tout de fois important de se souvenir -qu'utiliser une configuration toute faire n'aide pas a comprendre un +qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un programme ou un système, et que cette façon de faire devrait être -réservée a l'introduction ou a des situations ou il est absolument -nécessaire d'avoir rapidement une configuration fonctionnelle (c'est a -dire, dans le cas d'un client email, euh... jamais?). Je vous invite +réservée a l&rsquo;introduction ou a des situations ou il est absolument +nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a +dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite donc a relire les annotations dont sont parsemés les fichiers de configuration en question, et surtout a lire le manuel, a chercher sur <del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement -a tenter de comprendre les configurations en question et a les améliorer!</p>La séparation des églises et de l'état, une idée qu'elle est bonne?2012-12-13T03:08:00+01:00Wxcafetag:wxcafe.net,2012-12-13:posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/<p>Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter?</p> -<p>Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. </p> -<p>L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. </p> -<p>Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine <strong>doit</strong>fournir toutes ses -informations au gouvernement américain <strong>sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.</strong> </p> -<p>Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire <a href="http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/">cet article</a> de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. </p> -<p>Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <code>&lt;troll&gt;</code>Apple -Maps<code>&lt;/troll&gt;</code>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. </p> -<p>De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. </p> -<p>Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. </p> -<p>Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.<br /> -Voila, a bientôt!</p>La cryptographie avec PGP et principalement GnuPG2012-11-19T00:36:00+01:00Wxcafetag:wxcafe.net,2012-11-19:posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/<p>PGP (pour <a href="http://fr.wikipedia.org/wiki/Pretty_Good_Privacy">pretty good privacy</a>) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir <a href="http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">ici</a>) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de <em>Web of Trust</em>. </p> -<p>Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.<br /> -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.</p> -<p>Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -<a href="http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/">quitter Gmail</a> aussi, par exemple).</p> -<p>Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)</p> -<p>L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (<a href="http://fr.wikipedia.org/wiki/GNU_Privacy_Guard">GNU Privacy Guard</a>) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<code>&lt;troll&gt;</code> de façon surprenante pour un -programme GNU<code>&lt;/troll&gt;</code>) est extrêmement efficace et claire.</p> -<p>Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).</p> -<p>Tout d'abord, générons une clé GPG :</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">gen</span><span class="o">-</span><span class="n">key</span> -</pre></div> - - -<p>GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. </p> -<p>Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande <code>makepasswd</code>, qui génère automatiquement un mot de -passe) </p> -<p>GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) </p> -<p>Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">pubkey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé publique, et</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span><span class="o">-</span><span class="n">secret</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">seckey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. </p> -<p>Cela fait, listons les informations sur votre clé publique :</p> -<div class="highlight"><pre><span class="err">$</span> <span class="n">gpg</span> <span class="o">--</span><span class="n">list</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">fingerprint</span> -<span class="n">pub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">27</span><span class="n">D81AC8</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> - <span class="n">Key</span> <span class="n">fingerprint</span> <span class="o">=</span> <span class="mi">6345</span> <span class="n">A91A</span> <span class="n">FF89</span> <span class="mf">97E0</span> <span class="mi">13</span><span class="n">D0</span> <span class="mi">96</span><span class="n">A9</span> <span class="mf">9E2</span><span class="n">A</span> <span class="mi">1917</span> <span class="mi">27</span><span class="n">D8</span> <span class="mi">1</span><span class="n">AC8</span> -<span class="n">uid</span> <span class="n">Cl</span><span class="err">é</span><span class="n">ment</span> <span class="n">Hertling</span> <span class="p">(</span><span class="n">Wxcafe</span><span class="p">)</span> -<span class="n">uid</span> <span class="p">[</span><span class="n">jpeg</span> <span class="n">image</span> <span class="n">of</span> <span class="n">size</span> <span class="mi">14692</span><span class="p">]</span> -<span class="n">sub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">9</span><span class="n">ED7F77F</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> -</pre></div> - - -<p>La partie <code>pub</code> indique que c'est une clé publique, <code>4096R</code> indique que c'est -une clé RSA sur 4096 bits. La partie <code>27D81AC8</code> est -l'identifiant de la clé publique, <code>Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8</code> est appelé fingerprint de la clé. Les champs -<code>uid</code> sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ <code>sub</code> est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.<br /> -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">uploader</span><span class="o">*</span> -</pre></div> - - -<p>Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!<br /> -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). </p> -<p>Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.<br /> -Concernant les signatures de clés, elles fonctionnent de manière très -simple :<br /> -Vous devez télécharger la clé de votre correspondant, via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">search</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">correspondant</span><span class="o">*</span> -</pre></div> - - -<p>(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.<br /> -Ceci fait, vous pouvez signer la clé via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">sign</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>puis la renvoyer au serveur via</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">key</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>Voila, la clé de votre correspondant est signée!</p> -<p>Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!</p>L'informatique a l'école2012-10-15T20:34:00+02:00Wxcafetag:wxcafe.net,2012-10-15:posts/%D/linformatique-a-lecole/<p>Après avoir lu <a href="http://t.co/5PTfe6zu">cet article</a> paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.</p> -<p>En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu <a href="http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers - Heroes of the Computer Revolution</a> de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.</p> -<p>Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre <a href="http://en.wikipedia.org/wiki/IWoz">iWoz</a>) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. </p> -<p>Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.</p> -<p>C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...</p> -<p>Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.</p> -<p>Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.</p>Archlinux made simple2012-10-05T14:48:00+02:00Wxcafetag:wxcafe.net,2012-10-05:posts/%D/archlinux-made-simple/<p>Archlinux est réputée être une distribution Linux très complexe a -installer et a maintenir.</p> -<p>Je vais tenter ici de vous convaincre que ce n'est pas le cas, et -qu'elle peut se monter très intéressante et très instructive a installer -tout autant qu'a utiliser.</p> -<p>Il convient tout d'abord de rappeler a quels principes obéit Arch:</p> -<ol> -<li> -<p>Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des - programmes simples et utilisables par tous. Avec comme base de - simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu - de bonne volonté, la configuration n'est pas si compliquée!</p> -</li> -<li> -<p>La philosophie UNIX : chaque programme est prévu pour ne remplir - qu'une seule tâche. Bien entendu, cela ne concerne que les programmes - conçus pour s’insérer dans la philosophie UNIX, et les installations de - dépendances avec le gestionnaire de paquet d'Arch fonctionnent - superbement bien.</p> -</li> -</ol> -<p>De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :</p> -<ul> -<li> -<p>recherche d'un paquet :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Ss</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>installation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">S</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>désinstallation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">R</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>mise a jour de tous les paquets installés :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">paquet</span> -</pre></div> - - -</li> -</ul> -<p>Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.</p> -<p>Arch n'offre pas d'interface graphique par défaut : après avoir installé -le système, vous n'aurez qu'une invite de commande. Heureusement, je -vais ici vous guider a travers l'installation d'une interface graphique -(mate, le fork de gnome 2)</p> -<p>L'installation d'Arch se fait par le réseau, veillez a avoir une -connection WiFi ou filaire a proximité avant de suivre ce guide.</p> -<p>Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous -systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce -dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.</p> -<p>Bon, passons a l'explication de l'installation proprement dite :</p> -<p>Tout d'abord, téléchargeons l'iso d'arch la plus récente :</p> -<div class="highlight"><pre><span class="n">wget</span> <span class="n">http</span><span class="o">:</span><span class="c1">//mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso</span> -</pre></div> - - -<p>Ensuite, gravons cette image sur un disque USB :</p> -<div class="highlight"><pre><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">archlinux</span><span class="o">-</span><span class="mf">2012.09.07</span><span class="o">-</span><span class="n">dual</span><span class="p">.</span><span class="n">iso</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> -</pre></div> - - -<p>Après reboot de la machine sur l'iso en question et choix de -l'architecture, nous sommes accueillis par un shell root.</p> -<p>La première chose a faire est de paramétrer le clavier :</p> -<div class="highlight"><pre><span class="n">loadkeys</span> <span class="n">fr</span> -</pre></div> - - -<p>Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :</p> -<div class="highlight"><pre><span class="n">cfdisk</span> <span class="err">#</span> <span class="n">cfdisk</span> <span class="n">est</span> <span class="n">suffisamment</span> <span class="n">clair</span> <span class="n">pour</span> <span class="n">ne</span> <span class="n">pas</span> <span class="n">n</span><span class="err">é</span><span class="n">cessiter</span> <span class="n">d</span><span class="err">&#39;</span><span class="n">explications</span> -</pre></div> - - -<p>formatage des partitions :</p> -<div class="highlight"><pre><span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">root</span> - -<span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="o">&amp;&amp;</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">btrfs</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">home</span> - -<span class="n">mkswap</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="o">&amp;&amp;</span> <span class="n">swapon</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">de</span> <span class="n">swap</span> -</pre></div> - - -<p>Montons les partitions nouvellement créées, puis installons le système :</p> -<div class="highlight"><pre><span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="o">/</span><span class="n">mnt</span> - -<span class="n">mkdir</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> <span class="o">&amp;&amp;</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> - -<span class="n">dhclient</span> <span class="n">eth0</span> <span class="err">#</span> <span class="n">si</span> <span class="n">vous</span> <span class="n">utilisez</span> <span class="n">une</span> <span class="n">connection</span> <span class="n">filaire</span><span class="p">,</span> <span class="n">sinon</span> <span class="n">voire</span> <span class="n">http</span><span class="o">:</span><span class="c1">//wiki.archlinux.fr/Wifi#Configuration</span> - -<span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">base</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> - -<span class="n">genfstab</span> <span class="o">-</span><span class="n">p</span> <span class="o">/</span><span class="n">mnt</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">fstab</span> -</pre></div> - - -<p>Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage:</p> -<div class="highlight"><pre><span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">syslinux</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="n">wireless_tools</span> <span class="n">dhclient</span> -</pre></div> - - -<p>Maintenant, passons sur notre install toute fraîche d'Arch :</p> -<div class="highlight"><pre><span class="n">arch</span><span class="o">-</span><span class="n">chroot</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">bash</span> -</pre></div> - - -<p>configurons les bases :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="n">HOSTNAME</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">hostname</span> - -<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">zoneinfo</span><span class="o">/</span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">localtime</span> - -<span class="n">date</span> <span class="n">MMJJhhmmAAAA</span> - -<span class="n">hwclock</span> <span class="o">--</span><span class="n">systohc</span> - -<span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">gen</span> <span class="err">#</span> <span class="n">D</span><span class="err">é</span><span class="n">commentez</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">correspondant</span> <span class="n">au</span> <span class="n">fran</span><span class="err">ç</span><span class="n">ais</span> <span class="o">:</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="n">et</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">ISO</span><span class="o">-</span><span class="mi">8859</span><span class="o">-</span><span class="mi">1</span> - -<span class="n">echo</span> <span class="err">&#39;</span><span class="n">LANG</span><span class="o">=</span><span class="s">&quot;fr_FR.UTF-8&quot;</span><span class="err">&#39;</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">conf</span> - -<span class="n">locale</span><span class="o">-</span><span class="n">gen</span> - -<span class="n">mkinitcpio</span> <span class="o">-</span><span class="n">p</span> <span class="n">linux</span> -</pre></div> - - -<p>Enfin, vérifions que syslinux est correctement configuré :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">syslinux</span><span class="o">/</span><span class="n">syslinux</span><span class="p">.</span><span class="n">cfg</span> <span class="err">#</span> <span class="n">il</span> <span class="n">devrait</span> <span class="n">y</span> <span class="n">avoir</span> <span class="s">&quot;append root=/dev/sda1&quot;</span> -</pre></div> - - -<p>Si tout est correct, installons syslinux, et paramétrons un mot de passe -root :</p> -<div class="highlight"><pre><span class="n">syslinux</span><span class="o">-</span><span class="n">install_update</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda</span> <span class="o">-</span><span class="n">mia</span> - -<span class="n">passwd</span> <span class="n">root</span> -</pre></div> - - -<p>Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!</p> -<div class="highlight"><pre> <span class="n">exit</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span> -<span class="n">reboot</span> -</pre></div> - - -<p>Fini!</p> -<p>Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen :</p> -<ul> -<li> -<p>Installation de MATE, le gestionnaire de bureau (voir -<a href="http://mate-desktop.org/">http://mate-desktop.org/</a>)</p> -</li> -<li> -<p>Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage</p> -</li> -<li> -<p>Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci</p> -</li> -<li> -<p>Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).</p> -</li> -</ul> -<p>Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici.</p> -<p>Bon, reprenons.</p> -<p>Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet.</p> -<p>Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">pacman</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ici, ajoutez les lignes suivantes :</p> -<div class="highlight"><pre><span class="k">[mate]</span> -<span class="na">Server</span> <span class="o">=</span> <span class="s">http://repo.mate-desktop.org/archlinux/$arch</span> -</pre></div> - - -<p>Installons maintenant les paquets :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">mate</span> <span class="n">mate</span><span class="o">-</span><span class="n">extras</span> <span class="n">dbus</span> <span class="n">dbus</span><span class="o">-</span><span class="n">core</span> <span class="n">alsa</span> <span class="n">networkmanager</span> <span class="n">sudo</span> -</pre></div> - - -<p>Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois :</p> -<div class="highlight"><pre><span class="n">useradd</span> <span class="o">-</span><span class="n">g</span> <span class="n">users</span> <span class="o">-</span><span class="n">G</span> <span class="n">wheel</span><span class="p">,</span><span class="n">audio</span><span class="p">,</span><span class="n">optical</span><span class="p">,</span><span class="n">lp</span><span class="p">,</span><span class="n">scanner</span><span class="p">,</span><span class="n">log</span><span class="p">,</span><span class="n">power</span><span class="p">,</span><span class="n">floppy</span><span class="p">,</span><span class="n">storage</span><span class="p">,</span><span class="n">games</span><span class="p">,</span><span class="n">video</span> <span class="o">-</span><span class="n">m</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">bash</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">passwd</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">su</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -</pre></div> - - -<p>Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec ck-launch-session mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> -</pre></div> - - -<p>Profitons en pour ajouter les démons système au lancement :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ajoutez donc <code>dbus, alsa. hwclock</code> et <code>networkmanager</code> dans la section -DAEMONS (entre les parenthèses, après crond normalement)</p> -<div class="highlight"><pre><span class="n">DAEMONS</span><span class="o">=</span><span class="p">(</span><span class="n">syslog</span><span class="o">-</span><span class="n">ng</span> <span class="n">network</span> <span class="n">crond</span> <span class="n">dbus</span> <span class="n">alsa</span> <span class="n">hwclock</span> <span class="n">networkmanager</span><span class="p">)</span> -</pre></div> - - -<p>Pour éviter un reboot, il est ici possible de faire un</p> -<div class="highlight"><pre><span class="n">su</span> -</pre></div> - - -<p>Puis un</p> -<div class="highlight"><pre> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">dbus</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">alsa</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">networkmanager</span> <span class="n">start</span> -</pre></div> - - -<p>Sinon, il est possible de juste redémarrer.<br /> -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et :</p> -<div class="highlight"><pre> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">sudoers</span> -</pre></div> - - -<p>Décommentez la ligne qui commence par # %wheel ALL=(ALL)<br /> -Sauvegardez le fichier, puis, après un <code>su *votrenom*</code>, tentez de faire -un sudo ls /<br /> -Normalement, vous devriez avoir un listing du dossier /<br /> -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?<br /> -C'est simple comme bonjour :</p> -<div class="highlight"><pre> <span class="n">startx</span> -</pre></div> - - -<p>Et PAF! Voila un MATE desktop flambant neuf a configurer!<br /> -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (<code>sudo pacman -Syu slim</code>).<br /> -Configurons le:</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec dbus-launch mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> <span class="o">&amp;&amp;</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">slim</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Éditez la ligne -"<code>sessions xfce4,icewm-session,wmaker,blackbox</code>" de facon a -ce qu'elle ressemble a "<code>sessions mate-session</code>"<br /> -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.<br /> -Normalement, tout devrait fonctionner!<br /> -Ah oui, et pour installer thunderbird, firefox, chromium, etc...</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">chromium</span> <span class="n">thunderbird</span> <span class="n">xchat</span> <span class="n">firefox</span> <span class="n">rhythmbox</span> <span class="n">pidgin</span> <span class="n">transmission</span><span class="o">-</span><span class="n">gtk</span> <span class="n">vlc</span> -</pre></div> - - -<p>Voila! Et comme dirait <a href="https://twitter.com/spartition">@Spartition</a>, c'est sale, mais qu'est-ce que c'est -bon!<br /> -A plus~</p>Les systèmes de fichiers2012-09-25T10:28:00+02:00Wxcafetag:wxcafe.net,2012-09-25:posts/%D/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>Le Quenya - Épisode ø2012-09-18T19:07:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p>Update a propos du blog2012-09-18T16:57:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>Introduction a bash en tant que language de programmation.2012-09-08T18:15:00+02:00Wxcafetag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/<p>L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).</p> -<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. </p> -<p>Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.)</p> -<p>Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p> -<p>De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code.<br /> -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le *) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée.</p> -<p>Quelques notions manquent ici:<br /> -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici.<br /> -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number.<br /> -être utilisées dans un programme bash.<br /> -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p> -<p>Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel.<br /> -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête.</p> -<p>J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p>Les différentes couches d'un système d'exploitation2012-09-06T23:29:00+02:00Wxcafetag:wxcafe.net,2012-09-06:posts/%D/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>La programmation expliquée simplement2012-08-27T00:22:00+02:00Wxcafetag:wxcafe.net,2012-08-27:posts/%D/la-programmation-expliquee-simplement/<p>Salut!<br /> -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. </p> -<p>Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.<br /> -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation<br /> -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. </p> -<p>Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.<br /> -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. </p> -<p>La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.<br /> -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. </p> -<p>Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. </p> -<p>Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère2012-08-22T20:33:00+02:00Wxcafetag:wxcafe.net,2012-08-22:posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique.</p> -<p>GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.</p> -<p>De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une?</p> -<p>Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes.</p> -<p>Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable.</p> -<p>N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :)</p> -<p>A bientôt!</p>Débuts, présentation, etc...2012-08-18T20:27:00+02:00Wxcafetag:wxcafe.net,2012-08-18:posts/%D/debuts-presentation-etc/<p>Bonjour!</p> -<p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/##nolife et #debian-fr)</p> -<p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. </p> -<p>Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général.</p> -<p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p> \ No newline at end of file +a tenter de comprendre les configurations en question et a les améliorer!</p> \ No newline at end of file diff --git a/output/feeds/feed.hacking.xml b/output/feeds/feed.hacking.xml index 06c68c6..5801cb5 100644 --- a/output/feeds/feed.hacking.xml +++ b/output/feeds/feed.hacking.xml @@ -1,72 +1,72 @@ -Wxcafé//wxcafe.net/2013-05-06T06:24:00+02:00Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/%D/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu -pour avoir développé Cydia, un "app store" alternatif pour les iTrucs), +Wxcafé//wxcafe.net/2013-05-06T06:24:00+02:00Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu +pour avoir développé Cydia, un &ldquo;app store&rdquo; alternatif pour les iTrucs), après avoir reçu une paire de Google glass de la part de Google (de -façon assez évidente...), a trouvé intéressant d'obtenir un accès root -sur celles-ci, ce qu'il a accompli très rapidement. Des démentis de la +façon assez évidente&hellip;), a trouvé intéressant d&rsquo;obtenir un accès root +sur celles-ci, ce qu&rsquo;il a accompli très rapidement. Des démentis de la part de Google et de certains autres sites sont vite arrivés, disant que les lunettes possédaient un bootloader débloqué et que de fait, le root était facile a obtenir : il suffisait de débloquer le bootloader, -d'extraire l'OS, de le rooter hors-fonctionnement, puis de le +d&rsquo;extraire l&rsquo;OS, de le rooter hors-fonctionnement, puis de le réinstaller, rooté, sur les lunettes.</p> <p>Le fait est que de débloquer le bootloader laisse une trace permanente -sur les lunettes, et que Saurik n'a pas utilisé cette technique pour +sur les lunettes, et que Saurik n&rsquo;a pas utilisé cette technique pour rooter sa paire. Voyons comment il a fait :</p> -<p><em>Je tiens tout d'abord a préciser que toutes les informations qui vont +<p><em>Je tiens tout d&rsquo;abord a préciser que toutes les informations qui vont suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la -partie "How does this exploit work".  Je tente d'apporter ma maigre +partie &ldquo;How does this exploit work&rdquo;.  Je tente d&rsquo;apporter ma maigre contribution a cette explication.</em></p> -<p>Donc, d'après les témoignages des quelques utilisateurs de Glass dans le +<p>Donc, d&rsquo;après les témoignages des quelques utilisateurs de Glass dans le monde, il semblerait que ces dernières fonctionnent avec un système -d'exploitation Android, avec une nouvelle interface, mais avec les mêmes +d&rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes outils internes: un kernel Linux, des outils userland GNU et une machine virtuelle Java Dalvik pour les applications.</p> -<p>Saurik a donc cherché un exploit connu pour cette version d'android, et -l'a appliqué a son problème. L'exploit en question est relativement -simple. Depuis la version 4.0 d'android, le système permet la sauvegarde +<p>Saurik a donc cherché un exploit connu pour cette version d&rsquo;android, et +l&rsquo;a appliqué a son problème. L&rsquo;exploit en question est relativement +simple. Depuis la version 4.0 d&rsquo;android, le système permet la sauvegarde des données des différentes applications, une a une, via ADB (Android -Debug Bridge, un protocole USB permettant l'accès a de nombreuses +Debug Bridge, un protocole USB permettant l&rsquo;accès a de nombreuses fonctions avancées des machines fonctionnant sous android, dont, entre -autre, un shell, un accès au logs de debugging, etc... Cette +autre, un shell, un accès au logs de debugging, etc&hellip; Cette fonctionnalité est bien entendu désactivable.) Ce backup est très simple : il crée un fichier .tgz contenant le dossier de configuration de -l'application. Lors de la restauration, le système supprime la -configuration existante, puis la remplace par celle dans l'archive gzip.</p> +l&rsquo;application. Lors de la restauration, le système supprime la +configuration existante, puis la remplace par celle dans l&rsquo;archive gzip.</p> <p>Le problème de sécurité vient du fait que les applications android voient leurs données stockées dans /data/data/identifiant/, et que -/data/ a pour permissions drwxrwx--x  27  system  system, ce qui +/data/ a pour permissions drwxrwx&ndash;x  27  system  system, ce qui signifie que seul system et les membres du groupe system peuvent lire dessus. Or, le fichier /data/local.prop définit de nombreux paramètres -au démarrage, et notamment un qui permet au système de déterminer s'il -fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur +au démarrage, et notamment un qui permet au système de déterminer s&rsquo;il +fonctionne dans une VM ou sur un véritable appareil. S&rsquo;il fonctionne sur une machine virtuelle, il donne les droits root a tout utilisateur se -connectant via ADB, ce qui est ce que l'on cherche pour l'instant. Le +connectant via ADB, ce qui est ce que l&rsquo;on cherche pour l&rsquo;instant. Le fait que /data/ appartienne a system veut dire que le programme de restauration doit être setuid pour accéder aux données a l’intérieur qui -appartiennent a root (soit toutes les applications système d'android, -dont l'application paramètres, et, dans ce cas précis, l'application de +appartiennent a root (soit toutes les applications système d&rsquo;android, +dont l&rsquo;application paramètres, et, dans ce cas précis, l&rsquo;application de log système présente sur les google glass de test. Ainsi, nous avons un processus tournant en tant que root, qui va écrire sur une partition qui nous intéresse des données que nous possédons.</p> -<p>Cependant, un problème reste : le système de restauration d'Android +<p>Cependant, un problème reste : le système de restauration d&rsquo;Android vérifie les données avant de restaurer, et ne restaure pas les symlinks, -ce qui nous empêche d'avoir accès directement a /data/local.prop, le -fichier qu'on cherche a modifier. Cela dit, il nous reste une +ce qui nous empêche d&rsquo;avoir accès directement a /data/local.prop, le +fichier qu&rsquo;on cherche a modifier. Cela dit, il nous reste une possiblité. Plaçons un dossier world-writable dans le fichier de backup, et nous pourrons écrire dedans pendant quelques secondes, le temps que la restauration se termine et que le système remette les permissions en place. Ainsi, nous pouvons créer le fichier /data/local/com.google.glass.logging/whatev/x, lien vers /data/local.prop, et nous avons un toujours un processus tournant en -tant que root qui est en train d'écrire dans ce dossier.</p> +tant que root qui est en train d&rsquo;écrire dans ce dossier.</p> <p>Donc, nous allons lancer deux processus en même temps : </p> <ul> <li> <p>Le premier tentera en boucle de créer le symlink. Il sera consitué de la commande suivante, depuis un shell sur les lunettes :</p> -<div class="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">&gt;/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span> -<span class="k">do</span> <span class="o">:</span> -<span class="n">done</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&gt;/dev/null +do : +done </pre></div> @@ -75,10 +75,10 @@ tant que root qui est en train d'écrire dans ce dossier.</p> <p>Le deuxième sera le processus de restauration de notre exploit. Celui ci, pour une plus grande chance de réussite, devra être suffisamment lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x, - pour qu'il crée whatev, prenne du temps a copier bigfile, puis écrive + pour qu&rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive dans x après que le symlink soit effectif. La commande sera, depuis - l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span> + l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab </pre></div> @@ -87,54 +87,54 @@ tant que root qui est en train d'écrire dans ce dossier.</p> world-readable. Il va commencer a copier le fichier bigfile.<br /> - Le processus de symlink va créer le lien /data/data/com.google.glass.logging/whatev/x, pointant vers - /data/local.prop, puis rendre l'âme proprement.<br /> + /data/local.prop, puis rendre l&rsquo;âme proprement.<br /> - Le processus de restauration, ayant enfin fini de copier whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui est lié a /data/local.prop. Comme le processus est setuid root, il ne se rendra compte de rien, et écrira tout dans /data/local.prop.</p> </li> </ul> -<p>And voilà! On a écrit ce que l'on veut dans /data/local.prop, ce qui -nous permet de faire croire a android qu'il tourne dans une machine -virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui -indique au noyau qu'il tourne dans qemu, un système de VM).</p> -<p>Il nous reste a rebooter, depuis l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<p>And voilà! On a écrit ce que l&rsquo;on veut dans /data/local.prop, ce qui +nous permet de faire croire a android qu&rsquo;il tourne dans une machine +virtuelle (ce que l&rsquo;on veut, c&rsquo;est en fait &ldquo;ro.kernel.qemu=1&rdquo;, qui +indique au noyau qu&rsquo;il tourne dans qemu, un système de VM).</p> +<p>Il nous reste a rebooter, depuis l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Puis nous remontons la partitions système en lecture/écriture (r/w), depuis le host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;mount -o remount,rw /system&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;mount -o remount,rw /system&quot; </pre></div> -<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span> +<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l&rsquo;appareil :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin </pre></div> <p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir l’exécuter plus tard :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;chmod 6755 /system/xbin/su&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;chmod 6755 /system/xbin/su&quot; </pre></div> <p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir redémarrer normalement :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;rm /data/local.prop&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;rm /data/local.prop&quot; </pre></div> <p>Enfin, nous redemarrons a nouveau :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Et voila, une paire de google glass rootée!</p> -<p>Il est bon de préciser que cette manipulation n'est possible que parce -que les lunettes tournent sous une ancienne version d'android, et que ce +<p>Il est bon de préciser que cette manipulation n&rsquo;est possible que parce +que les lunettes tournent sous une ancienne version d&rsquo;android, et que ce bug a été fixé depuis.</p> <p>Il serait aussi interessant de couvrir les problèmes de vie privée -qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p> +qu&rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.</p> <p>A bientôt!</p> \ No newline at end of file diff --git a/output/feeds/feed.language.xml b/output/feeds/feed.language.xml deleted file mode 100644 index d803376..0000000 --- a/output/feeds/feed.language.xml +++ /dev/null @@ -1,30 +0,0 @@ - -Wxcafé//wxcafe.net/2012-09-18T19:07:00+02:00Le Quenya - Épisode ø2012-09-18T19:07:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p> \ No newline at end of file diff --git a/output/feeds/feed.note.xml b/output/feeds/feed.note.xml new file mode 100644 index 0000000..479a811 --- /dev/null +++ b/output/feeds/feed.note.xml @@ -0,0 +1,409 @@ + +Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<p>J&rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas &ldquo;profiter&rdquo; du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc&hellip;) simplement.</p> +<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j&rsquo;ai +décidé d&rsquo;installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça +donnait. Le résultat n&rsquo;étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j&rsquo;ai décidé d&rsquo;upgrader le système.</p> +<p>J&rsquo;ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a> +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un +<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je +pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&rsquo;autre +avantage de tourner sur du Intel, c&rsquo;est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86).</p> +<p>J&rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&rsquo;ai avidement +monté, avant de me rendre compte que le manuel de l&rsquo;adaptateur Pulse-Eight était +[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J&rsquo;ai donc +cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce +post</a> +expliquant comment brancher l&rsquo;adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l&rsquo;information, et pour moi si je dois remonter ce système.</p> +<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +&ldquo;Front Panel&rdquo;, et un appelé &ldquo;Custom Solution Header&rdquo;. Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&rsquo;est plus +facile, puisqu&rsquo;il n&rsquo;y a qu&rsquo;une seule fiche a brancher ici : la orange.</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que &ldquo;Deep S4/S5&rdquo; soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC.</p> +<p>Ne reste plus ensuite qu&rsquo;a installer un système digne de ce nom dessus!</p>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose +problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce +problème, deux solutions sont apparues.</p> +<p>Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port.</p> +<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La +communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de +la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines +machines font un <em>handshake</em> SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise +a jour&rdquo; en douceur.</p> +<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> +La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout +d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il +voit qu&rsquo;il est disponible.<br /> +Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité +de tout le monde.</p>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si +ce n&rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n&rsquo;est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>, +mais n&rsquo;est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>, +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d&rsquo;avoir une machine hôte sur laquelle s&rsquo;exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l&rsquo;hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu&rsquo;avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu&rsquo;à l&rsquo;hôte, puisqu&rsquo;il n&rsquo;est pas vraiment séparé des +invités. </p> +<p>Quoi qu&rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. &ldquo;Mais pourquoi utiliser Docker, dans ce cas&rdquo;, vous +demandez-vous peut être, &ldquo;puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&rdquo;. Et bien +c&rsquo;est très simple : Docker apporte la simplicité de déploiement d&rsquo;applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer +rapidement et facilement un grand nombre d&rsquo;images déjà configurées. </p> +<p>Maintenant que nous avons expliqué rapidement ce qu&rsquo;était Docker, voyons le +rapport avec les ebooks et Twitter.</p> +<p>Les comptes dits &ldquo;ebooks&rdquo; (le nom vient a l&rsquo;origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>, +voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots +twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>, +avec les tweets d&rsquo;un utilisateur &ldquo;source&rdquo; comme corpus, pour produire des tweets +ressemblant a ceux de l&rsquo;utilisateur source. Nous allons voir maintenant comment +en installer un.</p> +<p>C&rsquo;est, comme disent certaines personnes, &ldquo;fun&rdquo;.</p> +<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée +par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l&rsquo;API +twitter et la génération des messages.</p> +<p>Cependant, cela n&rsquo;explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d&rsquo;isoler les bots, et les +containers dockers permettent de les déployer sur n&rsquo;importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j&rsquo;ai créé <a href="https://github.com/wxcafe/ebooks_example">un +repo github</a> qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc.</p> +<p>Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l&rsquo;utilisateur source avec <code>ebooks archive &lt;username&gt; &lt;filename&gt;</code> (c&rsquo;est du json) +, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks +consume &lt;filename&gt;</code>. Cela fait, démarrer le bot revient a lancer le container : +<code>docker run -d &lt;container name&gt;</code> Pour plus d&rsquo;informations, allez voir <a href="https://docs.docker.com/articles/basics/">la +documentation Docker</a></p> +<p>Bien entendu, dans l&rsquo;idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 05 * * * cd /usr/local/ebooks/main/ &amp;&amp; /usr/local/bin/ebooks consume corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 10 * * * docker rm -f bots &gt;/dev/null 2&gt;&amp;1 +00 15 * * * docker rmi bots &gt; /dev/null 2&gt;&amp;1 +00 20 * * * cd /usr/local/ebooks/main/ &amp;&amp; docker build --rm -t bots . &gt;&gt; /var/log/ebooks/build.log 2&gt;&amp;1 +00 25 * * * docker run -d --name bots bots &gt;&gt; /var/log/ebooks/run.log 2&gt;&amp;1 +</pre></div> + + +<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s&rsquo;executent en même temps.</p> +<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n&rsquo;est qu&rsquo;un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des +applications &ldquo;usuelles&rdquo; +dedans</a>, +puisque l&rsquo;overhead de Docker est minimal, et beaucoup d&rsquo;autres applications +existent.</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie +Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, +présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: +<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, +ce qui peut avoir l&rsquo;effet de rendre légèrement parano. Si vous considérez que +c&rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès +a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> +<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous +connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être +remarqué quelque chose récemment : il se trouve que le certificat qui permet de +desservir ce site a changé.</p> +<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des +doigts sortis d&rsquo;un endroit particulier du corps de l&rsquo;admin/auteur de ce &ldquo;blog&rdquo;, +qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle +du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&rsquo;un système +fonctionnel utilisant cette compréhension récemment acquise.</p> +<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut +être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&rsquo;est très +simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour +<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc&hellip; Bref, un certificat +différent pour chaque sous-domaine.</p> +<p>Il s&rsquo;avère que c&rsquo;est a la fois très peu pratique a utiliser (les utilisateurs +doivent ajouter chaque certificat a leur navigateur séparément, chaque +changement de sous-domaine conduit a un message d&rsquo;erreur, etc) et pas plus +sécurisé que d&rsquo;avoir un seul certificat wildcard. J&rsquo;ai donc généré un certificat +pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les +sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche +pas <code>*.wxcafe.net</code>, et qui sera donc utilisé&hellip; bah pour <code>wxcafe.net</code>.</p> +<p>Il serait préférable de faire des redirections automatiques des adresses http +vers les adresses https, cependant, étant donné que le certificat est +self-signed, il me semble préférable que l&rsquo;arrivée sur le site ne commence pas +par une page firefox disant &ldquo;Something&rsquo;s Wrong!&rdquo;, et ces redirections ne seront +donc pas mises en place.</p> +<p>De plus, après la lecture de l&rsquo;article de blog sur Lavabit dont le lien est plus +haut, il semble intéressant (et assez important) de faire en sorte que le +serveur utilise en priorité (et si possible, uniquement) des ciphers supportant +PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves +de ce même algorithme). Cela permet de faire en sorte que toutes les +communications avec ce serveur soient future-proof, c&rsquo;est a dire que, même si +quelqu&rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les +communications passées.</p> +<p>Bon, maintenant que les explications basiques sont faites, voyons +l&rsquo;implémentation : <br /> +Pour générer la clé, tout d&rsquo;abord, il convient d&rsquo;utiliser les commandes +suivantes: </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096 +# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation +sudo openssl req -new -key example.key -out example.csr +# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">&quot;Common Name&quot;</span> devant contenir le FQDN +sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt +# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">&#39;</span>une durée de vie de <span style="color: #ae81ff">3</span> ans +</pre></div> + + +<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser +<code>*.example.com</code> comme common name. +Une fois la clé générée, il faut dire aux différents services de l&rsquo;utiliser, et +de n&rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service. +Je vais lister ici les methodes pour quelques services que j&rsquo;utilise :</p> +<h3>apache :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3 +<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">&quot;</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \ + EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \ + EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">&quot;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> +</pre></div> + + +<h3>nginx :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">&quot;EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> +</pre></div> + + +<h3>prosody (jabber) :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">&#39;abord, lancez la commande suivante :</span> +<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span> +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.key&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.crt&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">}</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span> +</pre></div> + + +<h3>postfix (email) :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt +<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key +<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes +<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong +<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high +<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS +<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt +<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3 +<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes +<span style="color: #75715e"># [...]</span> +</pre></div> + + +<h3>dovecot (imap) :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.crt +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +</pre></div> + + +<p>Voila. Pour d&rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter +au manuel approprié.</p> +<p>Cela étant dit, je conseille a tout le monde d&rsquo;aller voir la conférence dans le +disclaimer, et tant qu&rsquo;a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future +of Authenticity</a> qui parle de son +implémentation d&rsquo;une technologie &ldquo;remplaçant&rdquo; le système de CAs qui existe +actuellement.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a &ldquo;un peu&rdquo; changé récemment.</p> +<p>Du coup, expliquons. J&rsquo;ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même +occasion découvert <a href="http://getpelican.com">pelican</a>. J&rsquo;ai tout de suite accroché a ce générateur de +site statique en python, du fait de son efficacité, de sa facilité d&rsquo;utilisation +et de sa grande customisation. En gros, pelican est un logiciel qui prend des +fichiers markdown ou reStructuredText, les passe a la moulinette d&rsquo;un &ldquo;thème&rdquo; +constitué de templates pour les fichiers html et l&rsquo;organisation du projet et +d&rsquo;une partie &ldquo;statique&rdquo; contenant le css, et les autres fichiers nécessaires au +projet, et en fait des pages html. </p> +<p>Globalement, un thème est constitué ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span> +<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span> + <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span> +</pre></div> + + +<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe +django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, +par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de +pelican.</p> +<p>L&rsquo;un des grands avantages de pelican est aussi la facilité qu&rsquo;il offre quand a +la mise a jour du blog.<br /> +En effet, il offre un système de Makefiles permettant, grâce a de nombreuses +cibles de compilation, de régénérer le site entier, de ne générer que les +fichiers modifiés depuis la dernière génération, de générer uniquement les +fichiers n&rsquo;existant pas la dernière fois, etc&hellip; +La gestion du projet en devient donc très simple, puisque après avoir écrit un +article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> +<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du +manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec +pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&rsquo;est moi +qui ait modifié les templates et le css), c&rsquo;est lisible (puisque c&rsquo;est du +python, par opposition au PHP&hellip;), et c&rsquo;est plus &ldquo;efficace&rdquo;. Le markdown est +très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire +les articles, je n&rsquo;ai pas besoin d&rsquo;un accès continu au net, bref, c&rsquo;est plus +efficace.</p> +<p>En ce qui concerne les points négatifs : </p> +<ul> +<li> +<p>Perte des commentaires: + Je vous propose de vous référer a l&rsquo;article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a + mon avis sur ce sujet.</p> +</li> +<li> +<p>Perte du bouton flattr: + Il va bientôt être remis, c&rsquo;est juste un manque de temps de ma part, mais vu + que toutes les pages passent par les mêmes templates, c&rsquo;est assez facile a + faire.</p> +</li> +<li> +<p>Perte du spam: + Pourquoi c&rsquo;est dans les points négatifs, ca?</p> +</li> +<li> +<p>Temps d&rsquo;adaptation et d&rsquo;appréhension du système: + Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins + réguliers sur le blog, c&rsquo;est parce que j&rsquo;apprend a me servir de ce système + et que j&rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous + les cas ca me permet d&rsquo;apprendre plein de choses, donc je mets plutôt ca + dans la catëgorie positive.</p> +</li> +</ul> +<p>Voila, c&rsquo;est mon retour d&rsquo;expérience sur pelican. A plus. </p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la +fabrication d&rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt +sur le blog!</p> \ No newline at end of file diff --git a/output/feeds/feed.notes.xml b/output/feeds/feed.notes.xml deleted file mode 100644 index 7cf68b0..0000000 --- a/output/feeds/feed.notes.xml +++ /dev/null @@ -1,265 +0,0 @@ - -Wxcafé//wxcafe.net/2014-05-30T08:25:00+02:00SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/%D/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie -Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, -présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: -<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès -a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> -<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous -connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être -remarqué quelque chose récemment : il se trouve que le certificat qui permet de -desservir ce site a changé.</p> -<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", -qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système -fonctionnel utilisant cette compréhension récemment acquise.</p> -<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très -simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat -différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs -doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat -pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les -sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> -<p>Il serait préférable de faire des redirections automatiques des adresses http -vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront -donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus -haut, il semble intéressant (et assez important) de faire en sorte que le -serveur utilise en priorité (et si possible, uniquement) des ciphers supportant -PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves -de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les -communications passées.</p> -<p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes -suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> -</pre></div> - - -<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser -<code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> -<h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> -</pre></div> - - -<h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -</pre></div> - - -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter -au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future -of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/%D/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation -et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au -projet, et en fait des pages html. </p> -<p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> -</pre></div> - - -<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe -django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, -par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de -pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a -la mise a jour du blog.<br /> -En effet, il offre un système de Makefiles permettant, grâce a de nombreuses -cibles de compilation, de régénérer le site entier, de ne générer que les -fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... -La gestion du projet en devient donc très simple, puisque après avoir écrit un -article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> -<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du -manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est -très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus -efficace.</p> -<p>En ce qui concerne les points négatifs : </p> -<ul> -<li> -<p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a - mon avis sur ce sujet.</p> -</li> -<li> -<p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a - faire.</p> -</li> -<li> -<p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> -</li> -<li> -<p>Temps d'adaptation et d'appréhension du système: - Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca - dans la catëgorie positive.</p> -</li> -</ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/%D/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>Update a propos du blog2012-09-18T16:57:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>Débuts, présentation, etc...2012-08-18T20:27:00+02:00Wxcafetag:wxcafe.net,2012-08-18:posts/%D/debuts-presentation-etc/<p>Bonjour!</p> -<p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/##nolife et #debian-fr)</p> -<p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. </p> -<p>Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général.</p> -<p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p> \ No newline at end of file diff --git a/output/feeds/feed.oses.xml b/output/feeds/feed.oses.xml index aad7083..79e0295 100644 --- a/output/feeds/feed.oses.xml +++ b/output/feeds/feed.oses.xml @@ -1,349 +1,63 @@ -Wxcafé//wxcafe.net/2013-09-09T11:17:00+02:00Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/%D/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. -Wood. Il est assez connu comme étant l'un des pires films jamais sortis. Rempli -d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort -d'un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> -<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l'indique), -et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite -des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a -introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des -ressources appartenant a d'autres ordinateurs a distance, un support de -l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne +Wxcafé//wxcafe.net/2013-09-09T11:17:00+02:00Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. +Wood. Il est assez connu comme étant l&rsquo;un des pires films jamais sortis. Rempli +d&rsquo;erreur de montage, d&rsquo;effets spéciaux au rabais, et ayant même connu la mort +d&rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> +<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l&rsquo;indique), +et qui a été pensé comme le successeur d&rsquo;Unix. Il est conçu comme une poursuite +des concepts unixiens jusqu&rsquo;à leur but naturel. Ainsi, c&rsquo;est Plan9 qui a +introduit le concept d&rsquo;UnionFS, le protocole 9P qui permet d&rsquo;acceder a des +ressources appartenant a d&rsquo;autres ordinateurs a distance, un support de +l&rsquo;unicode par défaut et sur tout le système (a l&rsquo;inverse d&rsquo;Unix, qui fonctionne a la base en ASCII), un support de ProcFS amélioré, une interface graphique par -défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p> -<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit -d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a -quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt +défaut, et d&rsquo;autres améliorations sur les thèmes de base que propose Unix. </p> +<p>Cependant, Plan9 n&rsquo;a jamais été véritablement utilisé pour quoi que ce soit +d&rsquo;autre que la recherche en systèmes, et c&rsquo;est dommage, parce que Plan9 a +quelque chose de très intéressant à proposer. En effet, en ces jours d&rsquo;intérêt grandissant pour le klaoude et la délocalisation a la fois du processing et des -données, et bien que Plan9 ait été créé bien avant que le terme "cloud -computing" n'apparaisse pour la première fois, il semble que ce système ait été +données, et bien que Plan9 ait été créé bien avant que le terme &ldquo;cloud +computing&rdquo; n&rsquo;apparaisse pour la première fois, il semble que ce système ait été conçu pour apporter cette délocalisation tant rêvée.</p> -<p>En effet, même si l'on considère que les nouveautés qu'il apporte par rapport a -Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà -conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système -d'exploitation ultime en terme de partage de ressources et de données. -Ainsi, le fait que 9P permette de considérer toutes les ressources d'un système -distant comme n'étant qu'une poignée de fichiers permet de le monter comme -n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder +<p>En effet, même si l&rsquo;on considère que les nouveautés qu&rsquo;il apporte par rapport a +Unix ne sont pas extraordinaires en soit (alors qu&rsquo;elles sont déjà +conséquentes), lorsqu&rsquo;on les prend ensemble, elles font de Plan9 le système +d&rsquo;exploitation ultime en terme de partage de ressources et de données. +Ainsi, le fait que 9P permette de considérer toutes les ressources d&rsquo;un système +distant comme n&rsquo;étant qu&rsquo;une poignée de fichiers permet de le monter comme +n&rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse -interagir avec les autres, même s'ils sont hétérogènes (c'est a dire provenant -de machines différentes), permet d'utiliser les ressources d'une machine -distante comme si elle était présente localement. Le mécanisme d'UnionFS permet +interagir avec les autres, même s&rsquo;ils sont hétérogènes (c&rsquo;est a dire provenant +de machines différentes), permet d&rsquo;utiliser les ressources d&rsquo;une machine +distante comme si elle était présente localement. Le mécanisme d&rsquo;UnionFS permet de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers de plusieurs machines a la fois (ce qui permet une délocalisation des données bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p> <p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de -parler d'ordinateur lorsque le concept même du système est d'être composé de +parler d&rsquo;ordinateur lorsque le concept même du système est d&rsquo;être composé de clusters eux mêmes composés de machines hétérogènes. Le système de fichier -virtuel /net fourni par le kernel de Plan9 permet d'implémenter très facilement -différents concepts réseaux : en montant le /net d'un ordinateur du réseau local -sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur -du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur +virtuel /net fourni par le kernel de Plan9 permet d&rsquo;implémenter très facilement +différents concepts réseaux : en montant le /net d&rsquo;un ordinateur du réseau local +sur celui servant de gateway vers l&rsquo;internet, on crée un NAT vers cet ordinateur +du réseau local. En montant le /net d&rsquo;un ordinateur distant sur un ordinateur local via le protocole 9P sécurisé, on crée un VPN : les connections locales se -font en utilisant l'accès de l'ordinateur distant, et les connections entre les +font en utilisant l&rsquo;accès de l&rsquo;ordinateur distant, et les connections entre les deux sont chiffrées. </p> <p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour -partager leur "puissance" de calcul en userspace, des superordinateurs pour -lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels -JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait +partager leur &ldquo;puissance&rdquo; de calcul en userspace, des superordinateurs pour +lesquels le noyau Linux s&rsquo;est doté du support de jusqu&rsquo;à 4096 CPUs, des OS tels +JoliOS qui promettent une integration du klaoude alors qu&rsquo;ils ne sont en fait que des navigateurs web a peine améliorés et des services de stockage en ligne -qui promettent un accès universel a toutes nos données alors qu'ils ne proposent +qui promettent un accès universel a toutes nos données alors qu&rsquo;ils ne proposent que de les garder a disposition par le web, Plan9 promettait une technologie de partage des ressources système et de données, une intégration du réseau dans le système particulièrement poussée, un environnement graphique supporté par le -basesystem et non greffé par dessus comme l'a été X11, et de nombreuses autres +basesystem et non greffé par dessus comme l&rsquo;a été X11, et de nombreuses autres améliorations sur Unix.</p> -<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative, -et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de +<p>Malheureusement, il n&rsquo;a jamais été adopté de façon véritablement significative, +et ce pour une raison très Unixiènne : &ldquo;worse is better&rdquo;. En effet, le parc de machines Unix déjà installées était suffisamment performant et fonctionnel pour que des solutions soient développées au dessus du système pour remplir les mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de -Linux, FUSE, etc...</p>Archlinux made simple2012-10-05T14:48:00+02:00Wxcafetag:wxcafe.net,2012-10-05:posts/%D/archlinux-made-simple/<p>Archlinux est réputée être une distribution Linux très complexe a -installer et a maintenir.</p> -<p>Je vais tenter ici de vous convaincre que ce n'est pas le cas, et -qu'elle peut se monter très intéressante et très instructive a installer -tout autant qu'a utiliser.</p> -<p>Il convient tout d'abord de rappeler a quels principes obéit Arch:</p> -<ol> -<li> -<p>Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des - programmes simples et utilisables par tous. Avec comme base de - simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu - de bonne volonté, la configuration n'est pas si compliquée!</p> -</li> -<li> -<p>La philosophie UNIX : chaque programme est prévu pour ne remplir - qu'une seule tâche. Bien entendu, cela ne concerne que les programmes - conçus pour s’insérer dans la philosophie UNIX, et les installations de - dépendances avec le gestionnaire de paquet d'Arch fonctionnent - superbement bien.</p> -</li> -</ol> -<p>De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :</p> -<ul> -<li> -<p>recherche d'un paquet :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Ss</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>installation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">S</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>désinstallation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">R</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>mise a jour de tous les paquets installés :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">paquet</span> -</pre></div> - - -</li> -</ul> -<p>Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.</p> -<p>Arch n'offre pas d'interface graphique par défaut : après avoir installé -le système, vous n'aurez qu'une invite de commande. Heureusement, je -vais ici vous guider a travers l'installation d'une interface graphique -(mate, le fork de gnome 2)</p> -<p>L'installation d'Arch se fait par le réseau, veillez a avoir une -connection WiFi ou filaire a proximité avant de suivre ce guide.</p> -<p>Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous -systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce -dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.</p> -<p>Bon, passons a l'explication de l'installation proprement dite :</p> -<p>Tout d'abord, téléchargeons l'iso d'arch la plus récente :</p> -<div class="highlight"><pre><span class="n">wget</span> <span class="n">http</span><span class="o">:</span><span class="c1">//mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso</span> -</pre></div> - - -<p>Ensuite, gravons cette image sur un disque USB :</p> -<div class="highlight"><pre><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">archlinux</span><span class="o">-</span><span class="mf">2012.09.07</span><span class="o">-</span><span class="n">dual</span><span class="p">.</span><span class="n">iso</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> -</pre></div> - - -<p>Après reboot de la machine sur l'iso en question et choix de -l'architecture, nous sommes accueillis par un shell root.</p> -<p>La première chose a faire est de paramétrer le clavier :</p> -<div class="highlight"><pre><span class="n">loadkeys</span> <span class="n">fr</span> -</pre></div> - - -<p>Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :</p> -<div class="highlight"><pre><span class="n">cfdisk</span> <span class="err">#</span> <span class="n">cfdisk</span> <span class="n">est</span> <span class="n">suffisamment</span> <span class="n">clair</span> <span class="n">pour</span> <span class="n">ne</span> <span class="n">pas</span> <span class="n">n</span><span class="err">é</span><span class="n">cessiter</span> <span class="n">d</span><span class="err">&#39;</span><span class="n">explications</span> -</pre></div> - - -<p>formatage des partitions :</p> -<div class="highlight"><pre><span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">root</span> - -<span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="o">&amp;&amp;</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">btrfs</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">home</span> - -<span class="n">mkswap</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="o">&amp;&amp;</span> <span class="n">swapon</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">de</span> <span class="n">swap</span> -</pre></div> - - -<p>Montons les partitions nouvellement créées, puis installons le système :</p> -<div class="highlight"><pre><span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="o">/</span><span class="n">mnt</span> - -<span class="n">mkdir</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> <span class="o">&amp;&amp;</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> - -<span class="n">dhclient</span> <span class="n">eth0</span> <span class="err">#</span> <span class="n">si</span> <span class="n">vous</span> <span class="n">utilisez</span> <span class="n">une</span> <span class="n">connection</span> <span class="n">filaire</span><span class="p">,</span> <span class="n">sinon</span> <span class="n">voire</span> <span class="n">http</span><span class="o">:</span><span class="c1">//wiki.archlinux.fr/Wifi#Configuration</span> - -<span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">base</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> - -<span class="n">genfstab</span> <span class="o">-</span><span class="n">p</span> <span class="o">/</span><span class="n">mnt</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">fstab</span> -</pre></div> - - -<p>Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage:</p> -<div class="highlight"><pre><span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">syslinux</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="n">wireless_tools</span> <span class="n">dhclient</span> -</pre></div> - - -<p>Maintenant, passons sur notre install toute fraîche d'Arch :</p> -<div class="highlight"><pre><span class="n">arch</span><span class="o">-</span><span class="n">chroot</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">bash</span> -</pre></div> - - -<p>configurons les bases :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="n">HOSTNAME</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">hostname</span> - -<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">zoneinfo</span><span class="o">/</span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">localtime</span> - -<span class="n">date</span> <span class="n">MMJJhhmmAAAA</span> - -<span class="n">hwclock</span> <span class="o">--</span><span class="n">systohc</span> - -<span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">gen</span> <span class="err">#</span> <span class="n">D</span><span class="err">é</span><span class="n">commentez</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">correspondant</span> <span class="n">au</span> <span class="n">fran</span><span class="err">ç</span><span class="n">ais</span> <span class="o">:</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="n">et</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">ISO</span><span class="o">-</span><span class="mi">8859</span><span class="o">-</span><span class="mi">1</span> - -<span class="n">echo</span> <span class="err">&#39;</span><span class="n">LANG</span><span class="o">=</span><span class="s">&quot;fr_FR.UTF-8&quot;</span><span class="err">&#39;</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">conf</span> - -<span class="n">locale</span><span class="o">-</span><span class="n">gen</span> - -<span class="n">mkinitcpio</span> <span class="o">-</span><span class="n">p</span> <span class="n">linux</span> -</pre></div> - - -<p>Enfin, vérifions que syslinux est correctement configuré :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">syslinux</span><span class="o">/</span><span class="n">syslinux</span><span class="p">.</span><span class="n">cfg</span> <span class="err">#</span> <span class="n">il</span> <span class="n">devrait</span> <span class="n">y</span> <span class="n">avoir</span> <span class="s">&quot;append root=/dev/sda1&quot;</span> -</pre></div> - - -<p>Si tout est correct, installons syslinux, et paramétrons un mot de passe -root :</p> -<div class="highlight"><pre><span class="n">syslinux</span><span class="o">-</span><span class="n">install_update</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda</span> <span class="o">-</span><span class="n">mia</span> - -<span class="n">passwd</span> <span class="n">root</span> -</pre></div> - - -<p>Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!</p> -<div class="highlight"><pre> <span class="n">exit</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span> -<span class="n">reboot</span> -</pre></div> - - -<p>Fini!</p> -<p>Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen :</p> -<ul> -<li> -<p>Installation de MATE, le gestionnaire de bureau (voir -<a href="http://mate-desktop.org/">http://mate-desktop.org/</a>)</p> -</li> -<li> -<p>Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage</p> -</li> -<li> -<p>Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci</p> -</li> -<li> -<p>Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).</p> -</li> -</ul> -<p>Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici.</p> -<p>Bon, reprenons.</p> -<p>Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet.</p> -<p>Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">pacman</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ici, ajoutez les lignes suivantes :</p> -<div class="highlight"><pre><span class="k">[mate]</span> -<span class="na">Server</span> <span class="o">=</span> <span class="s">http://repo.mate-desktop.org/archlinux/$arch</span> -</pre></div> - - -<p>Installons maintenant les paquets :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">mate</span> <span class="n">mate</span><span class="o">-</span><span class="n">extras</span> <span class="n">dbus</span> <span class="n">dbus</span><span class="o">-</span><span class="n">core</span> <span class="n">alsa</span> <span class="n">networkmanager</span> <span class="n">sudo</span> -</pre></div> - - -<p>Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois :</p> -<div class="highlight"><pre><span class="n">useradd</span> <span class="o">-</span><span class="n">g</span> <span class="n">users</span> <span class="o">-</span><span class="n">G</span> <span class="n">wheel</span><span class="p">,</span><span class="n">audio</span><span class="p">,</span><span class="n">optical</span><span class="p">,</span><span class="n">lp</span><span class="p">,</span><span class="n">scanner</span><span class="p">,</span><span class="n">log</span><span class="p">,</span><span class="n">power</span><span class="p">,</span><span class="n">floppy</span><span class="p">,</span><span class="n">storage</span><span class="p">,</span><span class="n">games</span><span class="p">,</span><span class="n">video</span> <span class="o">-</span><span class="n">m</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">bash</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">passwd</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">su</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -</pre></div> - - -<p>Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec ck-launch-session mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> -</pre></div> - - -<p>Profitons en pour ajouter les démons système au lancement :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ajoutez donc <code>dbus, alsa. hwclock</code> et <code>networkmanager</code> dans la section -DAEMONS (entre les parenthèses, après crond normalement)</p> -<div class="highlight"><pre><span class="n">DAEMONS</span><span class="o">=</span><span class="p">(</span><span class="n">syslog</span><span class="o">-</span><span class="n">ng</span> <span class="n">network</span> <span class="n">crond</span> <span class="n">dbus</span> <span class="n">alsa</span> <span class="n">hwclock</span> <span class="n">networkmanager</span><span class="p">)</span> -</pre></div> - - -<p>Pour éviter un reboot, il est ici possible de faire un</p> -<div class="highlight"><pre><span class="n">su</span> -</pre></div> - - -<p>Puis un</p> -<div class="highlight"><pre> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">dbus</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">alsa</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">networkmanager</span> <span class="n">start</span> -</pre></div> - - -<p>Sinon, il est possible de juste redémarrer.<br /> -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et :</p> -<div class="highlight"><pre> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">sudoers</span> -</pre></div> - - -<p>Décommentez la ligne qui commence par # %wheel ALL=(ALL)<br /> -Sauvegardez le fichier, puis, après un <code>su *votrenom*</code>, tentez de faire -un sudo ls /<br /> -Normalement, vous devriez avoir un listing du dossier /<br /> -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?<br /> -C'est simple comme bonjour :</p> -<div class="highlight"><pre> <span class="n">startx</span> -</pre></div> - - -<p>Et PAF! Voila un MATE desktop flambant neuf a configurer!<br /> -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (<code>sudo pacman -Syu slim</code>).<br /> -Configurons le:</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec dbus-launch mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> <span class="o">&amp;&amp;</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">slim</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Éditez la ligne -"<code>sessions xfce4,icewm-session,wmaker,blackbox</code>" de facon a -ce qu'elle ressemble a "<code>sessions mate-session</code>"<br /> -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.<br /> -Normalement, tout devrait fonctionner!<br /> -Ah oui, et pour installer thunderbird, firefox, chromium, etc...</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">chromium</span> <span class="n">thunderbird</span> <span class="n">xchat</span> <span class="n">firefox</span> <span class="n">rhythmbox</span> <span class="n">pidgin</span> <span class="n">transmission</span><span class="o">-</span><span class="n">gtk</span> <span class="n">vlc</span> -</pre></div> - - -<p>Voila! Et comme dirait <a href="https://twitter.com/spartition">@Spartition</a>, c'est sale, mais qu'est-ce que c'est -bon!<br /> -A plus~</p> \ No newline at end of file +Linux, FUSE, etc&hellip;</p> \ No newline at end of file diff --git a/output/feeds/feed.programmation.xml b/output/feeds/feed.programmation.xml deleted file mode 100644 index c900450..0000000 --- a/output/feeds/feed.programmation.xml +++ /dev/null @@ -1,198 +0,0 @@ - -Wxcafé//wxcafe.net/2012-09-08T18:15:00+02:00Introduction a bash en tant que language de programmation.2012-09-08T18:15:00+02:00Wxcafetag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/<p>L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).</p> -<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. </p> -<p>Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.)</p> -<p>Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p> -<p>De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code.<br /> -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le *) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée.</p> -<p>Quelques notions manquent ici:<br /> -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici.<br /> -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number.<br /> -être utilisées dans un programme bash.<br /> -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p> -<p>Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel.<br /> -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête.</p> -<p>J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p> \ No newline at end of file diff --git a/output/feeds/feed.ranting.xml b/output/feeds/feed.ranting.xml index 262553f..073f370 100644 --- a/output/feeds/feed.ranting.xml +++ b/output/feeds/feed.ranting.xml @@ -1,39 +1,39 @@ -Wxcafé//wxcafe.net/2014-02-17T05:02:00+01:00NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/%D/nat/<p>NAT (Network Address Translation) in a word?<br /> -It's complicated. Very. Don't do it, you'd damage your brain. </p> -<p>Bon, sinon, prochain article serieux vite, bisous.</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are +Wxcafé//wxcafe.net/2014-02-17T05:02:00+01:00NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br /> +It&rsquo;s complicated. Very. Don&rsquo;t do it, you&rsquo;d damage your brain. </p> +<p>Bon, sinon, prochain article serieux vite, bisous.</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p> -<p>Bon, voila. J'ai passé le cap. Je suis sous GNU/Linux depuis un certain +<p>Bon, voila. J&rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain temps, maintenant, et depuis un certain temps je remarque des -changements malvenus. Bien entendu, au début, je n'avais pas les +changements malvenus. Bien entendu, au début, je n&rsquo;avais pas les connaissances nécessaires pour comprendre ne serait-ce que ces modifications existaient. Et puis certaines sont arrivées avant que je -n'ai même idée que quelque chose dans mon système d'exploitation avait +n&rsquo;ai même idée que quelque chose dans mon système d&rsquo;exploitation avait cette fonction la. Par exemple, udev, ou policykit/consolekit/. A -l'époque, je n'avais aucune idée de la façon dont les disques étaient -montés sur mon système. Le premier système non-Windows que j'ai utilisé +l&rsquo;époque, je n&rsquo;avais aucune idée de la façon dont les disques étaient +montés sur mon système. Le premier système non-Windows que j&rsquo;ai utilisé fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je cherche a démonter le système pour comprendre comment il fonctionnait en -profondeur. Cependant, avec le temps, les connaissances s'accumulant et -mon niveau de compréhension du système s'améliorant, j'ai commencé a -remarquer que certain bouts de l'OS ne collaient pas exactement avec les -autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a -cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma -compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne +profondeur. Cependant, avec le temps, les connaissances s&rsquo;accumulant et +mon niveau de compréhension du système s&rsquo;améliorant, j&rsquo;ai commencé a +remarquer que certain bouts de l&rsquo;OS ne collaient pas exactement avec les +autres. Bien sur, je ne saurais dire si cette réalisation s&rsquo;est faite a +cause de la recrudescence de ces bouts d&rsquo;OS, ou bien juste a cause de ma +compréhension plus poussée. Toujours est-il que ces petits bouts d&rsquo;OS ne s’adaptant pas au reste du système se faisaient de plus en plus visible. -Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai -choisi de passer a Archlinux. C'était avant le passage a systemd. Ce -système me convenait bien. Si je n'installais pas Gnome, ce que je ne +Et puis, un jour, j&rsquo;en ai eu marre de voir unity sur ma machine, et j&rsquo;ai +choisi de passer a Archlinux. C&rsquo;était avant le passage a systemd. Ce +système me convenait bien. Si je n&rsquo;installais pas Gnome, ce que je ne comptais pas faire, il ne me forçait pas a installer un *kit -quelconque, ni dbus. Oui, udev était toujours la, mais c'était le moins +quelconque, ni dbus. Oui, udev était toujours la, mais c&rsquo;était le moins envahissant de ceux la.</p> <p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les premiers sont probablement très efficaces dans leur domaine, et le -second n'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la -distribution d'avoir au plus vite les dernières versions de tout. +second n&rsquo;a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la +distribution d&rsquo;avoir au plus vite les dernières versions de tout. Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient -pas les seuls a faire ça...) ont un problème très précis, qui n'importe +pas les seuls a faire ça&hellip;) ont un problème très précis, qui n&rsquo;importe pas a tout le monde, mais qui est très gênant pour ceux a qui il importe, et ce problème est que ces systèmes ne respectent absolument pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en @@ -42,332 +42,174 @@ ces 9 principes :</p> <li>Ce qui est petit est beau</li> <li>Faites en sorte que chaque programme fasse une chose, bien.</li> <li>Faites un prototype aussi vite que possible</li> -<li>Choisissez la portabilité plutôt que l'efficacité</li> +<li>Choisissez la portabilité plutôt que l&rsquo;efficacité</li> <li>Stockez les données dans des fichiers textes.</li> <li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li> <li>Utilisez des scripts shells pour faciliter la portabilité et la réutilisation.</li> -<li>Évitez les UI qui "capturent" l'utilisateur.</li> +<li>Évitez les UI qui &ldquo;capturent&rdquo; l&rsquo;utilisateur.</li> <li>Faites de chaque programme un filtre.</li> </ol> -<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et -on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas -exactement la façon dont l'informatique fonctionne. Effectivement, les -standards, les systèmes d'exploitation, les logiciels, tout doit évoluer -- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est -pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et -celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La -philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans -de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br /> -La philosophie UNIX est aussi et surtout une garantie d'utilisabilité +<p>Alors bien entendu, un système d&rsquo;exploitation est fait pour évoluer, et +on pourrait penser qu&rsquo;UNIX a fait son temps. Cependant, ce n&rsquo;est pas +exactement la façon dont l&rsquo;informatique fonctionne. Effectivement, les +standards, les systèmes d&rsquo;exploitation, les logiciels, tout doit évoluer +- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&rsquo;est +pas d&rsquo;UNIX que nous parlons ici. C&rsquo;est de la <em>philosophie</em> UNIX. Et +celle-ci n&rsquo;a pas fait son temps, <strong>elle a fait ses preuves.</strong> La +philosophie UNIX, en plus d&rsquo;être efficace sur le papier, a aussi 44 ans +de tests derrière elle, et fonctionne aussi bien qu&rsquo;au premier jour.<br /> +La philosophie UNIX est aussi et surtout une garantie d&rsquo;utilisabilité et de simplicité pour les administrateurs systèmes, pour les -développeurs, bref pour tous ceux qui font de l'informatique -<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique +développeurs, bref pour tous ceux qui font de l&rsquo;informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l&rsquo;informatique ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce sont ceux qui sont les plus proches du système).</p> -<p>Tous OS se doit d'avoir un système standardisé pour faire communiquer +<p>Tous OS se doit d&rsquo;avoir un système standardisé pour faire communiquer les programmes entre eux. UNIX a un système de pipes, des sortes de -fichiers spéciaux permettant d'échanger des informations. C'est -efficace, ça respecte le "tout est fichier", c'est standard, c'est +fichiers spéciaux permettant d&rsquo;échanger des informations. C&rsquo;est +efficace, ça respecte le &ldquo;tout est fichier&rdquo;, c&rsquo;est standard, c&rsquo;est simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient -remplacer ça, avec une interface qui n'est explicitement pas faite pour -être utilisée a la ligne de commande mais a l'aide d'APIs, et un -programme monolithique qui effectue sa tache d'une façon complètement -obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon -efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus -"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est -<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est -horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus -lire facilement les échanges entre programmes. C'est peu pratique, en +remplacer ça, avec une interface qui n&rsquo;est explicitement pas faite pour +être utilisée a la ligne de commande mais a l&rsquo;aide d&rsquo;APIs, et un +programme monolithique qui effectue sa tache d&rsquo;une façon complètement +obscure pour l&rsquo;utilisateur. Alors bien sur, il l&rsquo;effectue d&rsquo;une façon +efficace, cette tache. Oui, ça va plus vite qu&rsquo;avant. Oui, c&rsquo;est plus +&ldquo;rangé&rdquo;, ça fait moins &ldquo;fouillis&rdquo;. Mais c&rsquo;est moins efficace. C&rsquo;est<em>beaucoup</em> moins utilisable pour l&rsquo;utilisateur final. C&rsquo;est +horriblement chiant pour les sysadmins, parce qu&rsquo;ils ne peuvent plus +lire facilement les échanges entre programmes. C&rsquo;est peu pratique, en fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br /> Systemd prend le même parti de créer une interface unifiée, accessible via des appels a des APIs uniquement, complètement obscure, extrêmement abstraite, bien entendu monolithique, et très peu ouverte a la -modification par l'utilisateur final. Alors oui, il parait que ça -augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques +modification par l&rsquo;utilisateur final. Alors oui, il parait que ça +augmente la vitesse de boot. Eh bien, au risque d&rsquo;en choquer quelques uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement et que je puisse modifier facilement, et qui soit ouvert, compréhensible -et distribué. C'est presque comme si les projets freedesktop.org avaient +et distribué. C&rsquo;est presque comme si les projets freedesktop.org avaient pour but de remplacer la base UNIX de linux en créant un système -concurrent, bâtard, bâti sur le kernel Linux mais n'employant plus les -systèmes basiques d'UNIX.</p> -<p>Le problème est qu'il est facilement visible que la direction prise par -la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni +concurrent, bâtard, bâti sur le kernel Linux mais n&rsquo;employant plus les +systèmes basiques d&rsquo;UNIX.</p> +<p>Le problème est qu&rsquo;il est facilement visible que la direction prise par +la communauté Linux n&rsquo;est pas celle du retour sur les systèmes UNIX ni celle du développement de solutions respectant la philosophie UNIX, mais -remises au gout du jour (?), mais est bien d'accepter et de pousser les +remises au gout du jour (?), mais est bien d&rsquo;accepter et de pousser les changements apportés par les projets freedesktop.org directement dans le cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font partie de nombreux développeurs de ces projets), a déjà adopté tous ces -changements (archlinux aussi, mais pour d'autres raisons...), et on peut -compter sur le fait que les autres distributions l'adopteront un jour ou -l'autre.</p> -<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces -systèmes, tout du moins exprimé les raisons qui font qu'ils me -déplaisent, on pourrait penser qu'il suffit de passer a une distribution -n'incluant pas systemd, voire a une distribution n'incluant pas du tout +changements (archlinux aussi, mais pour d&rsquo;autres raisons&hellip;), et on peut +compter sur le fait que les autres distributions l&rsquo;adopteront un jour ou +l&rsquo;autre.</p> +<p>Bon, maintenant que nous avons, si ce n&rsquo;est démontré la nocivité de ces +systèmes, tout du moins exprimé les raisons qui font qu&rsquo;ils me +déplaisent, on pourrait penser qu&rsquo;il suffit de passer a une distribution +n&rsquo;incluant pas systemd, voire a une distribution n&rsquo;incluant pas du tout de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur archlinux. Cependant, avec un peu de réflexion, on voit que si des distributions comme archlinux et Fedora ont adopté systemd (et -qu'OpenSUSE est en train de l’intégrer), il est probable que cela +qu&rsquo;OpenSUSE est en train de l’intégrer), il est probable que cela devienne un standard au fil des années, et que seuls survivent systemd -et upstart, le gestionnaire de démarrage d'ubuntu, qui ne changera +et upstart, le gestionnaire de démarrage d&rsquo;ubuntu, qui ne changera probablement pas (je les vois mal revenir en arrière sur ce point.) -Toujours est-il que l'init héritée du System V semble condamnée a mourir +Toujours est-il que l&rsquo;init héritée du System V semble condamnée a mourir sous Linux. Il pourrait être judicieux de passer sous debian squeeze, qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne la recevra probablement que dans 2/3 ans. Cependant, cette période est -toujours trop courte, et met sur mon système d'exploitation une date -d'expiration, chose qui ne me plait que moyennement. Non, la solution -est de passer sous un système autre, qui ait son propre système d'init +toujours trop courte, et met sur mon système d&rsquo;exploitation une date +d&rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution +est de passer sous un système autre, qui ait son propre système d&rsquo;init (ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options -principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas -vraiment un choix, vu le peu de programmes qu'il permet de faire -fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui -n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku -n'est pas un choix non plus, puisque le but est de rester dans une +principales s&rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&rsquo;est pas +vraiment un choix, vu le peu de programmes qu&rsquo;il permet de faire +fonctionner et le fait qu&rsquo;il ne soit disponible que sur i386, ce qui +n&rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku +n&rsquo;est pas un choix non plus, puisque le but est de rester dans une optique UNIX.</p> -<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai +<p>OpenSolaris est un système d&rsquo;exploitation tout a fait valable. Je n&rsquo;ai en théorie aucun problème sur cet OS, sauf que certains choix de design -ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet, +ne correspondent pas du tout a l&rsquo;idée que j&rsquo;ai d&rsquo;un OS. En effet, OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de ses outils, avec des paquets modifiés pour les rendre plus simples a utiliser (fichiers de configuration fournis par défaut, par exemple, et -autres patchs "release-only"), et une tendance a faire des scripts et -des outils installés par défaut pour tout et n'importe quoi. Bref, cela -n'est pas le sujet. Il convient aussi de voir qu'avec la récente +autres patchs &ldquo;release-only&rdquo;), et une tendance a faire des scripts et +des outils installés par défaut pour tout et n&rsquo;importe quoi. Bref, cela +n&rsquo;est pas le sujet. Il convient aussi de voir qu&rsquo;avec la récente acquisition de Sun par Oracle, il est possible que le projet OpenSolaris -n'ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du -projet affiche d'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> -<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD -ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est +n&rsquo;ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du +projet affiche d&rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> +<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&rsquo;OpenBSD, NetBSD +ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&rsquo;est simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour -réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir -DFBSD ressemble aussi au système de l'assistance a l'user a outrance -décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment +réputation d&rsquo;être orientées sécurité, et d&rsquo;après ce que j&rsquo;ai pu en voir +DFBSD ressemble aussi au système de l&rsquo;assistance a l&rsquo;user a outrance +décris plus haut. Mais la vérité est que je n&rsquo;ai pas fait suffisamment de recherches et que FreeBSD ne va me voir arriver que par hasard, parce -qu'entre toutes les BSD ca me semble la plus sympa et la plus agréable a -utiliser, plus le fait que le système de ports me convient bien (j'aime +qu&rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a +utiliser, plus le fait que le système de ports me convient bien (j&rsquo;aime pouvoir configurer mes logiciels de façon assez profonde.)</p> -<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien +<p>Voila, c&rsquo;est mon avis sur ce &ldquo;problème&rdquo; actuel du monde de Linux. Bien entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins -n'apparaissent jamais chez certaines distributions, créant de ce fait un +n&rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un choix pour les utilisateurs.<br /> -[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/%D/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> -J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire +[1]: Je n&rsquo;ai pas trouvé de traduction satisfaisante a &ldquo;software leveraging&rdquo;, mais l&rsquo;idée est la&hellip;*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> +J&rsquo;ai annoncé il y a environ 20 jours que j&rsquo;avais pour projet de faire une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée -PiRatBox. Il se trouve qu'après de nombreux essais, un problème -récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez +PiRatBox. Il se trouve qu&rsquo;après de nombreux essais, un problème +récurrent apparait: le Raspberry Pi n&rsquo;est pas capable de fournir assez de courant par défaut pour faire fonctionner a la fois un disque dur et une antenne WiFi.<br /> -Alors, autant il me semble évident qu'avec une -alimentation provenant d'un port USB a 2A (max), je n'avais pas -énormément de chances d'avoir 2A sur chacun des ports host du Raspi, +Alors, autant il me semble évident qu&rsquo;avec une +alimentation provenant d&rsquo;un port USB a 2A (max), je n&rsquo;avais pas +énormément de chances d&rsquo;avoir 2A sur chacun des ports host du Raspi, autant avoir moins de 250 mA sur chacun de ces ports me semble un tout petit peu exagéré en terme de rentabilité. </p> <p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me -servant a rien) (vous savez, celui qui est monté en USB...), qui +servant a rien) (vous savez, celui qui est monté en USB&hellip;), qui consomme énormément, est assez louche. Il devrait toujours être possible de désactiver une device USB, me semble-t-il, au niveau logiciel. La, -bien qu'il soit surement possible de la désactiver au niveau du kernel, -il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien +bien qu&rsquo;il soit surement possible de la désactiver au niveau du kernel, +il n&rsquo;est pas <strong>simplement</strong> possible de la &ldquo;débrancher&rdquo;. Ce qui est bien chiant, étant donné le besoin évident de puissance électrique dans lequel on se retrouve. </p> -<p>Bon, je dois avouer n'avoir pas testé de lancer les différents services +<p>Bon, je dois avouer n&rsquo;avoir pas testé de lancer les différents services composant le système des piratebox sous arch, pour la simple <del>et -bonne</del> raison qu'arch utilise systemd et qu'il n'existe pas de wrapper -systemd pour les daemons piratebox, et que j'ai la flemme d'en faire, +bonne</del> raison qu&rsquo;arch utilise systemd et qu&rsquo;il n&rsquo;existe pas de wrapper +systemd pour les daemons piratebox, et que j&rsquo;ai la flemme d&rsquo;en faire, parce que systemd est une horreur a utiliser avec les scripts init. Donc -non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas +non, j&rsquo;utiliserai debian. Le problème d&rsquo;utiliser debian dans ce cas précis est que apt/dpkg a une gestion des dépendances dans un sens mais -pas dans l'autre, en ce sens que si on installe un package "haut", c'est +pas dans l&rsquo;autre, en ce sens que si on installe un package &ldquo;haut&rdquo;, c&rsquo;est a dire dépendant de plusieurs autres packages, apt/dpkg se charge -efficacement d'installer toutes les dépendances nécessaires, tandis que -si on désinstalle un package "bas", c'est a dire sur lequel de nombreux +efficacement d&rsquo;installer toutes les dépendances nécessaires, tandis que +si on désinstalle un package &ldquo;bas&rdquo;, c&rsquo;est a dire sur lequel de nombreux autres packages dépendent, apt/dpkg ne désinstalle pas ces packages -"hauts", ce qui pose un vrai problème quand on se retrouve sur un -Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui -sera installé sur le système avant l'installation proprement dite -(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd +&ldquo;hauts&rdquo;, ce qui pose un vrai problème quand on se retrouve sur un +Raspberry Pi, puisqu&rsquo;il n&rsquo;y a pas de moyen &ldquo;facile&rdquo; de choisir ce qui +sera installé sur le système avant l&rsquo;installation proprement dite +(puisque le moyen &ldquo;universel&rdquo; d&rsquo;installation sur Raspberry Pi est le dd vers la SD qui sert de disque système.)</p> -<p>Il y a <strong>énormément</strong> d'autres critiques que l'ont pourrait faire -concernant le Raspberry Pi. Son système de démarrage a s'arracher les +<p>Il y a <strong>énormément</strong> d&rsquo;autres critiques que l&rsquo;ont pourrait faire +concernant le Raspberry Pi. Son système de démarrage a s&rsquo;arracher les cheveux, par exemple. En effet, plutôt que de faire comme tout pc normalement constitué ou la partie calcul démarre, lance le bootloader, -cherche le kernel de l'OS qui lui même se lance, initialise le hardware, -etc..., a un système bâtard du au fait que la puce au centre de la carte +cherche le kernel de l&rsquo;OS qui lui même se lance, initialise le hardware, +etc&hellip;, a un système bâtard du au fait que la puce au centre de la carte est a la base une puce graphique a laquelle on a greffé un cœur de -calcul (probablement au fond d'une cour d'immeuble, dans les quartiers -pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le -plus efficace qu'aient trouvé les personnes ayant implémenté cette +calcul (probablement au fond d&rsquo;une cour d&rsquo;immeuble, dans les quartiers +pauvres de Bratislava, vu la propreté de la greffe&hellip;), et le moyen le +plus efficace qu&rsquo;aient trouvé les personnes ayant implémenté cette atrocité de gérer le boot est donc de faire démarrer le cœur graphique en premier, ce dernier exécute un code propriétaire pour démarrer le cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel -etc... </p> +etc&hellip; </p> <p>Ce qui non seulement complique énormément le boot, non seulement ajoute -du code propriétaire a un projet se disant libre, mais en plus n'est -<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, -oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p> -<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je -le terminerai dès que j'aurai récupéré les outils nécessaires pour +du code propriétaire a un projet se disant libre, mais en plus n&rsquo;est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, +oui, mais uniquement quand c&rsquo;est bien réalisé, sinon je dis non. </p> +<p>Enfin, le projet que j&rsquo;avais est toujours en cours de réalisation. Je +le terminerai dès que j&rsquo;aurai récupéré les outils nécessaires pour monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa -vie. Les problèmes qu'il m'a posé, qu'il n'aurait pas du me poser, m'ont -trop agacé pour que j'aie envie de le sortir et de jouer avec une fois +vie. Les problèmes qu&rsquo;il m&rsquo;a posé, qu&rsquo;il n&rsquo;aurait pas du me poser, m&rsquo;ont +trop agacé pour que j&rsquo;aie envie de le sortir et de jouer avec une fois sa mission remplie. </p> -<p>Dommage.</p>La séparation des églises et de l'état, une idée qu'elle est bonne?2012-12-13T03:08:00+01:00Wxcafetag:wxcafe.net,2012-12-13:posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/<p>Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter?</p> -<p>Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. </p> -<p>L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. </p> -<p>Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine <strong>doit</strong>fournir toutes ses -informations au gouvernement américain <strong>sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.</strong> </p> -<p>Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire <a href="http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/">cet article</a> de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. </p> -<p>Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <code>&lt;troll&gt;</code>Apple -Maps<code>&lt;/troll&gt;</code>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. </p> -<p>De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. </p> -<p>Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. </p> -<p>Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.<br /> -Voila, a bientôt!</p>L'informatique a l'école2012-10-15T20:34:00+02:00Wxcafetag:wxcafe.net,2012-10-15:posts/%D/linformatique-a-lecole/<p>Après avoir lu <a href="http://t.co/5PTfe6zu">cet article</a> paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.</p> -<p>En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu <a href="http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers - Heroes of the Computer Revolution</a> de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.</p> -<p>Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre <a href="http://en.wikipedia.org/wiki/IWoz">iWoz</a>) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. </p> -<p>Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.</p> -<p>C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...</p> -<p>Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.</p> -<p>Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.</p> \ No newline at end of file +<p>Dommage.</p> \ No newline at end of file diff --git a/output/feeds/feed.rss.all.xml b/output/feeds/feed.rss.all.xml index 101005c..e513e85 100644 --- a/output/feeds/feed.rss.all.xml +++ b/output/feeds/feed.rss.all.xml @@ -1,260 +1,531 @@ -Wxcafé//wxcafe.net/Fri, 07 Nov 2014 13:04:00 +0100OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/%D/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de +Wxcafé//wxcafe.net/Sat, 22 Aug 2015 02:43:00 +0200les NUCs et le HDMI-CEC//wxcafe.net/posts/nuc-hdmi-cec/<p>J&rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas &ldquo;profiter&rdquo; du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc&hellip;) simplement.</p> +<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j&rsquo;ai +décidé d&rsquo;installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça +donnait. Le résultat n&rsquo;étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j&rsquo;ai décidé d&rsquo;upgrader le système.</p> +<p>J&rsquo;ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a> +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un +<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je +pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&rsquo;autre +avantage de tourner sur du Intel, c&rsquo;est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86).</p> +<p>J&rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&rsquo;ai avidement +monté, avant de me rendre compte que le manuel de l&rsquo;adaptateur Pulse-Eight était +[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J&rsquo;ai donc +cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce +post</a> +expliquant comment brancher l&rsquo;adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l&rsquo;information, et pour moi si je dois remonter ce système.</p> +<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +&ldquo;Front Panel&rdquo;, et un appelé &ldquo;Custom Solution Header&rdquo;. Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&rsquo;est plus +facile, puisqu&rsquo;il n&rsquo;y a qu&rsquo;une seule fiche a brancher ici : la orange.</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que &ldquo;Deep S4/S5&rdquo; soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC.</p> +<p>Ne reste plus ensuite qu&rsquo;a installer un système digne de ce nom dessus!</p>WxcafeSat, 22 Aug 2015 02:43:00 +0200tag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/SSL - STARTTLS//wxcafe.net/posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose +problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce +problème, deux solutions sont apparues.</p> +<p>Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port.</p> +<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La +communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de +la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines +machines font un <em>handshake</em> SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise +a jour&rdquo; en douceur.</p> +<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> +La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout +d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il +voit qu&rsquo;il est disponible.<br /> +Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité +de tout le monde.</p>WxcafeSat, 16 May 2015 02:00:00 +0200tag:wxcafe.net,2015-05-16:posts/ssl-starttls/Manettes : Hori vs. PDP//wxcafe.net/posts/hori-vs-pdp/<p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d&rsquo;abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &ldquo;choses&rdquo; +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d&rsquo;autres. Vous aurez aussi remarqué que le +Gamepad n&rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube.</p> +<p>Cela étant, si comme moi vous avez, euh, &ldquo;ouvert&rdquo; le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l&rsquo;adaptateur GC pour Wii +U</a> +a votre console. </p> +<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d&rsquo;habitude +avec Nintendo, c&rsquo;est une solution a moitié satisfaisante&hellip;) : les classic +controller, mais en forme de manettes Gamecube.</p> +<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d&rsquo;argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes.</p> +<p>Nous allons ici voir deux modèles, un de chacune des boites en question +: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p> +<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus</em></strong></p> +<p>Commençons par le modèle de chez Hori :</p> +<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur.</p> +<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p> +<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c&rsquo;est logique puisque c&rsquo;est comme ça que les +classic controller sont faits, mais c&rsquo;est décevant tout de même</p> +<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p> +<p>On peut voir ici que la qualité de l&rsquo;assemblage n&rsquo;est pas extraordinaire, et on +remarque une soudure mal faite a l&rsquo;emplacement du stick gauche.</p> +<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p> +<p>Le stick c n&rsquo;est pas fixé au reste de la manette. +J&rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n&rsquo;avaient pas l&rsquo;air de très bonne qualité, et j&rsquo;ai préféré abandonner +l&rsquo;idée plutôt que de casser la manette.</p> +<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p> +<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d&rsquo;une Wiimote entière la dedans&hellip;</p> +<hr> + +<p>Passons maintenant a la manette PDP.</p> +<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p> +<p>Au premier coup d&rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c&rsquo;est un problème de goût).</p> +<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p> +<p>Les gâchettes sont des vraies gâchettes! C&rsquo;est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après.</p> +<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon <strike>péremptoire</strike> perpendiculaire&hellip;</p> +<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p> +<p>Vous l&rsquo;avez deviné, ces deux &ldquo;cartes filles&rdquo; servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de &ldquo;vraies&rdquo; gâchettes en cela +qu&rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques.</p> +<p>Quelques photos des gâchettes en question :</p> +<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p> +<hr /> +<p>Vous l&rsquo;aurez compris, je préfère la version PDP de ces &ldquo;Fight Pad&rdquo;, la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p>WxcafeSun, 19 Apr 2015 21:59:00 +0200tag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/Docker et les ebooks sur Twitter//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si +ce n&rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n&rsquo;est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>, +mais n&rsquo;est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>, +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d&rsquo;avoir une machine hôte sur laquelle s&rsquo;exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l&rsquo;hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu&rsquo;avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu&rsquo;à l&rsquo;hôte, puisqu&rsquo;il n&rsquo;est pas vraiment séparé des +invités. </p> +<p>Quoi qu&rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. &ldquo;Mais pourquoi utiliser Docker, dans ce cas&rdquo;, vous +demandez-vous peut être, &ldquo;puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&rdquo;. Et bien +c&rsquo;est très simple : Docker apporte la simplicité de déploiement d&rsquo;applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer +rapidement et facilement un grand nombre d&rsquo;images déjà configurées. </p> +<p>Maintenant que nous avons expliqué rapidement ce qu&rsquo;était Docker, voyons le +rapport avec les ebooks et Twitter.</p> +<p>Les comptes dits &ldquo;ebooks&rdquo; (le nom vient a l&rsquo;origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>, +voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots +twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>, +avec les tweets d&rsquo;un utilisateur &ldquo;source&rdquo; comme corpus, pour produire des tweets +ressemblant a ceux de l&rsquo;utilisateur source. Nous allons voir maintenant comment +en installer un.</p> +<p>C&rsquo;est, comme disent certaines personnes, &ldquo;fun&rdquo;.</p> +<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée +par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l&rsquo;API +twitter et la génération des messages.</p> +<p>Cependant, cela n&rsquo;explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d&rsquo;isoler les bots, et les +containers dockers permettent de les déployer sur n&rsquo;importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j&rsquo;ai créé <a href="https://github.com/wxcafe/ebooks_example">un +repo github</a> qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc.</p> +<p>Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l&rsquo;utilisateur source avec <code>ebooks archive &lt;username&gt; &lt;filename&gt;</code> (c&rsquo;est du json) +, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks +consume &lt;filename&gt;</code>. Cela fait, démarrer le bot revient a lancer le container : +<code>docker run -d &lt;container name&gt;</code> Pour plus d&rsquo;informations, allez voir <a href="https://docs.docker.com/articles/basics/">la +documentation Docker</a></p> +<p>Bien entendu, dans l&rsquo;idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 05 * * * cd /usr/local/ebooks/main/ &amp;&amp; /usr/local/bin/ebooks consume corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 10 * * * docker rm -f bots &gt;/dev/null 2&gt;&amp;1 +00 15 * * * docker rmi bots &gt; /dev/null 2&gt;&amp;1 +00 20 * * * cd /usr/local/ebooks/main/ &amp;&amp; docker build --rm -t bots . &gt;&gt; /var/log/ebooks/build.log 2&gt;&amp;1 +00 25 * * * docker run -d --name bots bots &gt;&gt; /var/log/ebooks/run.log 2&gt;&amp;1 +</pre></div> + + +<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s&rsquo;executent en même temps.</p> +<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n&rsquo;est qu&rsquo;un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des +applications &ldquo;usuelles&rdquo; +dedans</a>, +puisque l&rsquo;overhead de Docker est minimal, et beaucoup d&rsquo;autres applications +existent.</p>WxcafeSat, 28 Feb 2015 14:11:00 +0100tag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/opensmtpd-debian/<p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant +comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la +aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais +<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un +projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA +qu&rsquo;a le projet OpenBSD, globalement).</p> +<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA (Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis +<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération +ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches +sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et +<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir +des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour +ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et <a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> pour filtrer les mails entrants et sortants. Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮ + │╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │ + mail in ││ │ │ │ amavis │ +───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ +&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ </pre></div> <p>Normalement, ceci devrait être a peu près clair. Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de +aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails +venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, qui a ce moment-ci trie en fonction de la destination : les mails gérés par le domaine vont via dovecot dans les boites mail des destinataires locaux, les mails exterieurs vont directement vers le MTA du serveur distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon +<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon dont les différents services vont communiquer.</p> <p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de +10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et +écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de signer, nous allons profiter de cette configuration et donc lui parler en SMTP sur ces ports.</p> <p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, <code>/var/run/dovecot/lmtp</code>).</p> <p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮ + │╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ +25 &lt;────────│&lt;───────────╯ │ + ╰───────────────╯ </pre></div> <p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮ + │╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ </pre></div> <p>Pour les mails entrants.</p> <p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. +d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p> +<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> +<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new </pre></div> <p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> <p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span> +<span style="color: #75715e"># See smtpd.conf(5) for more information.</span> -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> +<span style="color: #75715e">## Certs</span> +pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span> +pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span> -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> +<span style="color: #75715e">## Ports to listen on, and how to listen on them</span> +listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional +listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source +listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> +<span style="color: #75715e">## Aliases</span> +table aliases file:/etc/aliases -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> +<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span> +listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered +<span style="color: #75715e"># coming from amavisd, signed with DKIM</span> +listen on lo port <span style="color: #ae81ff">10027</span> tag Signed -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> +<span style="color: #75715e">## Receiving</span> +<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span> +accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span> +<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span> +accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span> +<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span> -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> +<span style="color: #75715e">## Sending</span> +<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span> +accept tagged Signed <span style="color: #66d9ef">for</span> any relay +<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span> +accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span> +<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span> </pre></div> <p>Expliquons un peu ce fichier de configuration :</p> <ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> +<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration + d&rsquo;emplacement des certificats SSL.</li> <li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> <li>Les alias sont définis juste après</li> <li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> + comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on + taggue les mails sortants comme &ldquo;Signed&rdquo;</li> <li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore + peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième + première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième ligne matchant tous les mails arrivant et la première seulement ceux filtrés, inverser leur sens voudrait dire que les mails seraient toujours renvoyés a amavis</li> <li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au + on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par + DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le + problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au dessus.</li> </ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit +<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne +emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant +qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du POP3[s], différents guides sont trouvables facilement sur internet.</p> <p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span> -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> +<span style="color: #75715e"># basic config</span> +<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log +<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log +<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span> +<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> +<span style="color: #75715e"># authentication</span> +passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +userdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd +<span style="color: #f92672">}</span> -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> +<span style="color: #75715e"># the protocols we use</span> +<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> +<span style="color: #75715e"># ssl config</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring services </span> +<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span> +service imap-login <span style="color: #f92672">{</span> + inet_listener imap <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span> + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> +service lmtp <span style="color: #f92672">{</span> + unix_listener lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666 + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring protocols</span> +<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span> +protocol lda <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +protocol lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> +plugin <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve + <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve +<span style="color: #f92672">}</span> </pre></div> <p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> </pre></div> <p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth +<span style="color: #f92672">}</span> </pre></div> <p><strong>pour identifier les utilisateurs système</strong></p> <p>Ici aussi, voyons comment ce fichier est structuré :</p> <ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. +<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater + leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li> +<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs. Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs mots de passe avec PAM (ou BSDAuth)</li> <li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> + l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> <li>Nous configurons le SSL</li> <li>Le section suivante contient la configuration des services. Nous avons en premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. + désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant + IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons. La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> + fifo qu&rsquo;il utilise</li> <li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> <li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et quel dossier utiliser pour sa configuration.</li> @@ -263,101 +534,100 @@ POP3[s], différents guides sont trouvables facilement sur internet.</p> a deux choses : signer les emails sortants, et filtrer les emails entrants. Il doit donc écouter sur les port 10026 pour les signatures et 10024 pour le filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun +SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les +Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les modifications nécessaires a la fin du fichier.</p> <p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) <code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span> -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> +<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span> -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> +<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span> + <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span> + <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span> + <span style="color: #f8f8f2">}</span> +<span style="color: #f8f8f2">);</span> -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span> +<span style="color: #f8f8f2">};</span> -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> +<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span> +<span style="color: #f8f8f2">};</span> -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> +<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span> +<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span> </pre></div> <p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se +- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails + sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se trouve la clé privée servant a signer les emails. - le second définit les options DKIM que nous souhaitons utiliser comme défaut. Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> - nous définissons ensuite les ports sur lesquels nous allons écouter, puis les paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel + ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel ils viennent. - nous savons que les emails venants du port 10026 sont sortants, nous les traitons donc comme tel - le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre + sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a + 4871</a>. Nous déclarons l&rsquo;adresse a prévenir en cas de spam/virus venants de notre système, et que nous voulons être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de + puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature + les notifications de succès d&rsquo;envoi. Et voila!</p> +<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en fait inclus par défaut dans amavis.</p> <p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un +Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe +différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un tutorial</a>) mais de nombreuses autre méthodes existent. Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span> +<span style="color: #75715e"># report_safe 1</span> +<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span> +<span style="color: #75715e"># use_bayes 1</span> +<span style="color: #75715e"># bayes_auto_learn 1</span> +<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span> +<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span> +<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span> +<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span> +<span style="color: #75715e"># shortcircuit BAYES_99 spam</span> +<span style="color: #75715e"># shortcircuit BAYES_00 ham</span> -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> +<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span> </pre></div> @@ -365,44 +635,43 @@ Il nous reste encore a configurer spamassassin :</p> le required_score pour ma part.</p> <p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/%D/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/%D/freebsd-online-mfsbsd/<p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad) +<p>Bon courage pour votre hosting de mail ensuite&hellip;</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/freebsd-online-mfsbsd/<p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad) Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>) -et n'ayant pour différentes raisons pas eu l'occasion de le faire sur mon -<a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, -j'ai commencé a chercher comment le faire sur ce serveur.</p> -<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu +et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, +j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p> +<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums -d'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> -<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), -ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur +d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> +<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), +ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur alternatif, minimaliste et simplifié pour FreeBSD.</p> <p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le -panel Online. Une fois cela fait, lancez une console, puis téléchargez l'image +panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis -choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter -sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout +choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter +sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout a fait classique va démarrer. Une fois ceci fait, la partie importante arrive: -mfsbsd contient un script d'installation root-on-zfs, nommé logiquement +mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement zfsinstall, qui va se charger de tout le travail pour nous.</p> <p>Utilisez donc ce script ainsi : </p> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, wipons le MBR :</span> -<span class="n">dd</span> <span class="o">&lt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span> -<span class="cp"># maintenant, installons le système</span> -<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span> +dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1 +<span style="color: #75715e"># maintenant, installons le système</span> +zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c </pre></div> <p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée, -<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D'autres options +<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous convient pas.</p> <p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf :</p> -<div class="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">&quot;YES&quot;</span> -<span class="n">sshd_load</span><span class="o">=</span><span class="s">&quot;YES</span> -<span class="n">hostname</span><span class="o">=</span><span class="s">&quot;whatever&quot;</span> -<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">&quot;DHCP&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span> +<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span> +<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span> +<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span> </pre></div> @@ -410,11 +679,10 @@ système) et éditez /etc/rc.conf :</p> physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez maintenant un système FreeBSD tout propre installé sur zfs a découvrir et utiliser!</p> -<p>Voila, c'est la fin de ce tutoriel. -(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu +<p>Voila, c&rsquo;est la fin de ce tutoriel. +(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu crédible, disons)</p> -<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter -<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, +<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, <a href="https://twitter.com/petitefanfare">petitefanfare</a>, <a href="https://twitter.com/capet_ebooks">capet_ebooks</a>, <a href="https://twitter.com/zengisse">zengisse</a>, @@ -422,146 +690,146 @@ et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont code</a>, qui vient de <a href="https://twitter.com/m1sp">@m1sp</a> (<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p> -<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/%D/freebsd-online-mfsbsd/SSL ou la sécurité sur l'internet//wxcafe.net/posts/%D/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie +<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/SSL ou la sécurité sur l'internet//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: <a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès +ce qui peut avoir l&rsquo;effet de rendre légèrement parano. Si vous considérez que +c&rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> <p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être remarqué quelque chose récemment : il se trouve que le certificat qui permet de desservir ce site a changé.</p> <p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", +doigts sortis d&rsquo;un endroit particulier du corps de l&rsquo;admin/auteur de ce &ldquo;blog&rdquo;, qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système +du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&rsquo;un système fonctionnel utilisant cette compréhension récemment acquise.</p> <p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très +être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&rsquo;est très simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat +<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc&hellip; Bref, un certificat différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs +<p>Il s&rsquo;avère que c&rsquo;est a la fois très peu pratique a utiliser (les utilisateurs doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat +changement de sous-domaine conduit a un message d&rsquo;erreur, etc) et pas plus +sécurisé que d&rsquo;avoir un seul certificat wildcard. J&rsquo;ai donc généré un certificat pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> +pas <code>*.wxcafe.net</code>, et qui sera donc utilisé&hellip; bah pour <code>wxcafe.net</code>.</p> <p>Il serait préférable de faire des redirections automatiques des adresses http vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront +self-signed, il me semble préférable que l&rsquo;arrivée sur le site ne commence pas +par une page firefox disant &ldquo;Something&rsquo;s Wrong!&rdquo;, et ces redirections ne seront donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus +<p>De plus, après la lecture de l&rsquo;article de blog sur Lavabit dont le lien est plus haut, il semble intéressant (et assez important) de faire en sorte que le serveur utilise en priorité (et si possible, uniquement) des ciphers supportant PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les +communications avec ce serveur soient future-proof, c&rsquo;est a dire que, même si +quelqu&rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les communications passées.</p> <p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes +l&rsquo;implémentation : <br /> +Pour générer la clé, tout d&rsquo;abord, il convient d&rsquo;utiliser les commandes suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096 +# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation +sudo openssl req -new -key example.key -out example.csr +# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">&quot;Common Name&quot;</span> devant contenir le FQDN +sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt +# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">&#39;</span>une durée de vie de <span style="color: #ae81ff">3</span> ans </pre></div> <p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser <code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> +Une fois la clé générée, il faut dire aux différents services de l&rsquo;utiliser, et +de n&rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service. +Je vais lister ici les methodes pour quelques services que j&rsquo;utilise :</p> <h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3 +<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">&quot;</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \ + EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \ + EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">&quot;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">&quot;EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">&#39;abord, lancez la commande suivante :</span> +<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span> +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.key&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.crt&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">}</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span> </pre></div> <h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt +<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key +<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes +<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong +<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high +<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS +<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt +<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3 +<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes +<span style="color: #75715e"># [...]</span> </pre></div> <h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.crt +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL </pre></div> -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter +<p>Voila. Pour d&rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future +<p>Cela étant dit, je conseille a tout le monde d&rsquo;aller voir la conférence dans le +disclaimer, et tant qu&rsquo;a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/%D/SSL-ou-la-securite-sur-internet/Mise en place d'un serveur DNS//wxcafe.net/posts/%D/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de +implémentation d&rsquo;une technologie &ldquo;remplaçant&rdquo; le système de CAs qui existe +actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/Mise en place d'un serveur DNS//wxcafe.net/posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de domaines en différentes informations : adresses IPv4, adresses IPv6, certificats DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour @@ -569,54 +837,53 @@ simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a <a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a <a href="http://5.39.76.46">http://5.39.76.46</a>).</p> -<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque -en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que +<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque +en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que de nos jours. La configuration des serveurs DNS peut ainsi être assez contre intuitive. Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses enregistrements est important.</p> -<p>Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même +<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d'écrire, par exemple, -<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le -<code>.</code> n'est pas obligatoire et la progression se fait de droite a gauche. Par +du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le +<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine <code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point a la fin de façon courante.</p> -<p>Le reverse DNS est une variante du DNS "classique" permettant de résoudre les +<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre +Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger +quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS +sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre habituel</em></strong>, et du faux domaine .in-addr.arpa Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR 76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p> -<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, +<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord, quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des -"enregistrements", records en anglais. Par exemple, un record A indique une +&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom de domaine que vous donnez en argument, mais en précisant un autre type de -record, vous pouvez obtenir n'importe quelle information : par exemple, <code>dig NS +record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS wxcafe.net</code> devrait vous renvoyer</p> -<div class="highlight"><pre><span class="p">;</span> <span class="o">&lt;&lt;&gt;&gt;</span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o">&lt;&lt;&gt;&gt;</span> NS wxcafe.net -<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd -<span class="p">;;</span> Got answer<span class="o">:</span> -<span class="p">;;</span> <span class="o">-&gt;&gt;</span>HEADER<span class="o">&lt;&lt;-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span> -<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span> -<span class="p">;;</span> QUESTION SECTION<span class="o">:</span> -<span class="p">;</span>wxcafe.net. IN NS +<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> -<span class="p">;;</span> ANSWER SECTION<span class="o">:</span> -wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net. -wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net. +<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span> -<span class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec -<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span> -<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span> -<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span> </pre></div> @@ -626,12 +893,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et &l chacun fait autorité pour lui même, et le problème évident est que le résolveur ne peut résoudre la query si il est renvoyé encore et encore vers le même serveur. Il convient donc de définir dans le même fichier de configuration -l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième -loop, se rendra compte qu'il est en train de faire une boucle infinie et -demandera l'adresse au serveur auquel il est connecté. La première indication de +l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième +loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et +demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de direction se fait grâce au serveur du TLD.</p> <p>La configuration de bind est assez simple dans le principe, le plus complexe -étant en fait d'écrire les fichiers de zone. +étant en fait d&rsquo;écrire les fichiers de zone. La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il existe 4 fichiers de configuration principaux : <code>named.conf</code>, <code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>. @@ -641,48 +908,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher named.conf.options contient les options que vous rajoutez pour changer le comportement de bind.</p> <p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans -lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, +lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité, deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs (notamment mon accès chez moi). </p> -<p>Examinons tout d'abord les fichiers de configuration de named. -<code>named.conf.local</code> contient les définitions des zones forward et reverse. +<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse. Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont -gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce +gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence -principale étant que l'un héberge en slave les masters de l'autre. +principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre. Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p> -<div class="highlight"><pre><span class="n">zone</span> <span class="s">&quot;wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;home.wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> </pre></div> @@ -693,250 +959,247 @@ tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est assez parlant.</p> <p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit <code>/etc/bind/master/wxcafe.net</code> : </p> -<div class="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span> - <span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span> - <span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span> - <span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span> - <span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span> - <span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span> - <span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span> + <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span> + <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span> + <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span> + <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span> + <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span> + <span style="color: #f8f8f2">)</span> -<span class="p">;</span> <span class="n">Name</span> <span class="n">servers</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">SPF</span> <span class="s">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> -<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> -<span class="p">;</span> <span class="n">Aliases</span> -<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="p">;</span> <span class="p">[...]</span> -<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span> +<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span> +<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span> -<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span> +<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> </pre></div> <p>Alors. Expliquons ligne par ligne.<br /> -Tout d'abord, le TTL (time to live) est un paramètre définissant le temps +Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps pendant lequel les serveurs récursif (qui font un cache des données) doivent cacher ce fichier de zone. <br /> Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, wxcafe.net. <br /> Maintenant, nous arrivons a un record important : SOA (Start of Authority). -Ce record prend de nombreux arguments, dans l'ordre :<br /> +Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br /> - Le nameserver autoritaire pour le nom de domaine en question,<br /> - - L'adresse email du responsable de cette zone, avec le premier point + - L&rsquo;adresse email du responsable de cette zone, avec le premier point remplacé par un @, </p> <p>puis entre parenthèses :<br /> - - Le numéro de série ("version" du fichier de zone, ici au format + - Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format YYYYMMDDNN) <br /> - La période de refresh, période entre chaque mise a jour du nameserver authoritaire secondaire, <br /> - La période de retry, le temps entre chaque essai de mise a jour si le nameserveur authoritaire primaire est indisponible, <br /> - - La période d'expire, le temps qu'attendra le serveur autoritaire + - La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire secondaire avant de supprimer les informations de son cache si le primaire reste indisponible, et enfin <br /> - - La période de TTL négatif, le temps qu'attendra le serveur secondaire + - La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire avant de ne plus offrir les informations de cette zone si le serveur primaire est injoignable. </p> -<p>Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus +<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus important a lire (pour les humains en tout cas). Continuons : </p> <p>NS (nameserver) permet de désigner les différents nameservers faisant autorité pour ce domaine. </p> -<p>MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. -SPF est un record d'authentification pour les emails. -Les records A désignent l'association entre un nom de domaine et une adresse +<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine. +SPF est un record d&rsquo;authentification pour les emails. +Les records A désignent l&rsquo;association entre un nom de domaine et une adresse IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site -n'est pas encore en IPv6.</p> +n&rsquo;est pas encore en IPv6.</p> <p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de -mettre en place des domaines exactement semblables a d'autre (ce qui permet par -exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p> +mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par +exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p> <p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet de changer la valeur du @ et des noms de domaine non complets (qui ne se terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et -l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on -l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, +l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on +l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, cela permet de rediriger les requêtes nous parvenant et demandant un domaine se trouvant sous home.wxcafe.net.</p> <p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques -différences n'étant en fin de compte que des différences de valeurs (dues au -fait que, eh bah, c'est pas les mêmes domaines...).</p> -<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est +différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au +fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p> +<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC 1034</a> et le <a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant -aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/%D/mise-en-place-dun-serveur-dns/NAT//wxcafe.net/posts/%D/nat/<p>NAT (Network Address Translation) in a word?<br /> -It's complicated. Very. Don't do it, you'd damage your brain. </p> -<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/%D/nat/Plan9 from whichever space//wxcafe.net/posts/%D/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. -Wood. Il est assez connu comme étant l'un des pires films jamais sortis. Rempli -d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort -d'un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> -<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l'indique), -et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite -des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a -introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des -ressources appartenant a d'autres ordinateurs a distance, un support de -l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne +aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/NAT//wxcafe.net/posts/nat/<p>NAT (Network Address Translation) in a word?<br /> +It&rsquo;s complicated. Very. Don&rsquo;t do it, you&rsquo;d damage your brain. </p> +<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/nat/Plan9 from whichever space//wxcafe.net/posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. +Wood. Il est assez connu comme étant l&rsquo;un des pires films jamais sortis. Rempli +d&rsquo;erreur de montage, d&rsquo;effets spéciaux au rabais, et ayant même connu la mort +d&rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> +<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l&rsquo;indique), +et qui a été pensé comme le successeur d&rsquo;Unix. Il est conçu comme une poursuite +des concepts unixiens jusqu&rsquo;à leur but naturel. Ainsi, c&rsquo;est Plan9 qui a +introduit le concept d&rsquo;UnionFS, le protocole 9P qui permet d&rsquo;acceder a des +ressources appartenant a d&rsquo;autres ordinateurs a distance, un support de +l&rsquo;unicode par défaut et sur tout le système (a l&rsquo;inverse d&rsquo;Unix, qui fonctionne a la base en ASCII), un support de ProcFS amélioré, une interface graphique par -défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p> -<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit -d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a -quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt +défaut, et d&rsquo;autres améliorations sur les thèmes de base que propose Unix. </p> +<p>Cependant, Plan9 n&rsquo;a jamais été véritablement utilisé pour quoi que ce soit +d&rsquo;autre que la recherche en systèmes, et c&rsquo;est dommage, parce que Plan9 a +quelque chose de très intéressant à proposer. En effet, en ces jours d&rsquo;intérêt grandissant pour le klaoude et la délocalisation a la fois du processing et des -données, et bien que Plan9 ait été créé bien avant que le terme "cloud -computing" n'apparaisse pour la première fois, il semble que ce système ait été +données, et bien que Plan9 ait été créé bien avant que le terme &ldquo;cloud +computing&rdquo; n&rsquo;apparaisse pour la première fois, il semble que ce système ait été conçu pour apporter cette délocalisation tant rêvée.</p> -<p>En effet, même si l'on considère que les nouveautés qu'il apporte par rapport a -Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà -conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système -d'exploitation ultime en terme de partage de ressources et de données. -Ainsi, le fait que 9P permette de considérer toutes les ressources d'un système -distant comme n'étant qu'une poignée de fichiers permet de le monter comme -n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder +<p>En effet, même si l&rsquo;on considère que les nouveautés qu&rsquo;il apporte par rapport a +Unix ne sont pas extraordinaires en soit (alors qu&rsquo;elles sont déjà +conséquentes), lorsqu&rsquo;on les prend ensemble, elles font de Plan9 le système +d&rsquo;exploitation ultime en terme de partage de ressources et de données. +Ainsi, le fait que 9P permette de considérer toutes les ressources d&rsquo;un système +distant comme n&rsquo;étant qu&rsquo;une poignée de fichiers permet de le monter comme +n&rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse -interagir avec les autres, même s'ils sont hétérogènes (c'est a dire provenant -de machines différentes), permet d'utiliser les ressources d'une machine -distante comme si elle était présente localement. Le mécanisme d'UnionFS permet +interagir avec les autres, même s&rsquo;ils sont hétérogènes (c&rsquo;est a dire provenant +de machines différentes), permet d&rsquo;utiliser les ressources d&rsquo;une machine +distante comme si elle était présente localement. Le mécanisme d&rsquo;UnionFS permet de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers de plusieurs machines a la fois (ce qui permet une délocalisation des données bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p> <p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de -parler d'ordinateur lorsque le concept même du système est d'être composé de +parler d&rsquo;ordinateur lorsque le concept même du système est d&rsquo;être composé de clusters eux mêmes composés de machines hétérogènes. Le système de fichier -virtuel /net fourni par le kernel de Plan9 permet d'implémenter très facilement -différents concepts réseaux : en montant le /net d'un ordinateur du réseau local -sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur -du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur +virtuel /net fourni par le kernel de Plan9 permet d&rsquo;implémenter très facilement +différents concepts réseaux : en montant le /net d&rsquo;un ordinateur du réseau local +sur celui servant de gateway vers l&rsquo;internet, on crée un NAT vers cet ordinateur +du réseau local. En montant le /net d&rsquo;un ordinateur distant sur un ordinateur local via le protocole 9P sécurisé, on crée un VPN : les connections locales se -font en utilisant l'accès de l'ordinateur distant, et les connections entre les +font en utilisant l&rsquo;accès de l&rsquo;ordinateur distant, et les connections entre les deux sont chiffrées. </p> <p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour -partager leur "puissance" de calcul en userspace, des superordinateurs pour -lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels -JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait +partager leur &ldquo;puissance&rdquo; de calcul en userspace, des superordinateurs pour +lesquels le noyau Linux s&rsquo;est doté du support de jusqu&rsquo;à 4096 CPUs, des OS tels +JoliOS qui promettent une integration du klaoude alors qu&rsquo;ils ne sont en fait que des navigateurs web a peine améliorés et des services de stockage en ligne -qui promettent un accès universel a toutes nos données alors qu'ils ne proposent +qui promettent un accès universel a toutes nos données alors qu&rsquo;ils ne proposent que de les garder a disposition par le web, Plan9 promettait une technologie de partage des ressources système et de données, une intégration du réseau dans le système particulièrement poussée, un environnement graphique supporté par le -basesystem et non greffé par dessus comme l'a été X11, et de nombreuses autres +basesystem et non greffé par dessus comme l&rsquo;a été X11, et de nombreuses autres améliorations sur Unix.</p> -<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative, -et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de +<p>Malheureusement, il n&rsquo;a jamais été adopté de façon véritablement significative, +et ce pour une raison très Unixiènne : &ldquo;worse is better&rdquo;. En effet, le parc de machines Unix déjà installées était suffisamment performant et fonctionnel pour que des solutions soient développées au dessus du système pour remplir les mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de -Linux, FUSE, etc...</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/%D/plan-9-from-whichever-space/Sed Basics//wxcafe.net/posts/%D/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler +Linux, FUSE, etc&hellip;</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/Sed Basics//wxcafe.net/posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler le texte (ce qui se montre relativement indispensable dans un environnement Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu connu en détail, et la plupart du temps une seule fonction est utilisée : le remplacement de texte.<br /> Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p> -<p>Tout d'abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais -aussi un langage de manipulation de texte dérivé de <code>ed</code>, l'éditeur original. -<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas -personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des -machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs -dits "visuels", tels que vim, emacs, et globalement tous les éditeurs ayant un +<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais +aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas +personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des +machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs +dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du -concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d'une ligne a la fois. +concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois. En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p> -<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d'empêcher -l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui -permet de rediriger l'output dans le fichier d'input. Cela dit, l'intérêt unique +<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher +l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui +permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique du programme est son langage de manipulation de texte.</p> <p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des /). Ainsi, la commande de base dans <code>sed</code> est </p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/ </pre></div> <p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de -n'exécuter les commandes qui suivent que sur ces lignes.) </p> +n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p> <p><br/> -La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s'utilise de +La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de la façon suivante : </p> -<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span> </pre></div> <p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une regex) par [new text] (qui doit être un texte fixe, avec quelques exceptions), en appliquant [options], la plus connue des options étant <code>g</code>, -qui permet d'appliquer la commande affectée a toutes les occurrences du texte +qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte matché sur la/les lignes concernée-s.<br /> -Les exceptions a la "fixité" de [new text] sont particulièrement +Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard, -excepté le fait qu'il permet jusqu'à 9 "holding spaces", qui sont délimités par +excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par \( et \), et qui sont représentées dans le texte de remplacement par \1 à \9.</p> <p>Par exemple, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39; </pre></div> -<p>sur le texte "hello world world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world </pre></div> <p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le texte original. Ainsi, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&amp;</span> <span class="n">world</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39; </pre></div> -<p>sur le texte "hello world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world </pre></div> <p><br/></p> <p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans -l'espace courant :</p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span> +l&rsquo;espace courant :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p </pre></div> <p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire -dédié, que j'appelle l'espace courant (pattern space en anglais). La commande -<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit -le pattern space de façon a ce qu'il ne contienne que les lignes matchant, et le -<strong>p</strong> affiche donc ce dernier.</p> -<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s'utilisent ainsi :</p> -<div class="highlight"><pre><span class="n">c</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit +le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p> +<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \ +[text] </pre></div> <p>De la même façon, pour le i : </p> -<div class="highlight"><pre><span class="n">i</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \ +[text] </pre></div> <p>Et de même pour a. </p> -<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'elles +<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong> sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme @@ -947,26 +1210,25 @@ space, et non sur la ligne en question.</p> /[regex]/d <strong>d</strong> (delete) supprime les contenus du pattern space.</p> <p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je -parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/%D/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé -au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier <em>en +parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé +au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a -ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou -bien la confidentialité d'un support de stockage, par exemple. Nous allons ici +ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou +bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici voir comment mettre en place un système de ce type sous GNU/Linux. Cet article -n'a pas pour but de vous apprendre a mettre en place un système basé sur une -procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en -jeu dans l'utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de -présenter un rapide tutoriel concernant la création d'un support chiffré sur +n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une +procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en +jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de +présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p> <p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système -du noyau Linux, et s'appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement -de disques. Comme son nom l'indique, device-mapper est un système qui a pour but +du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement +de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère -comme "block device" tout fichier spécial (en gros, les fichiers disques dans -<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le +comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de -fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. -Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. +fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad. +Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes. Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans /dev, et device-mapper est requis pour pouvoir en voir les partitions (qui apparaîtront donc dans /dev/mapper)</p> @@ -976,59 +1238,59 @@ déchiffre a la volée tous les accès disques a ce périphérique non chiffré traduisant sur le système de fichier chiffré, le tout de manière tout a fait transparente pour les applications utilisant le disque en question. Cela induit bien entendu une baisse de performance relativement significative dans le cas -d'un chiffrement du système de fichier root, mais quasiment insignifiante dans +d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans le cas de chiffrement de partitions de données.</p> -<p>D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer +<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer si le système de fichier root est chiffré. Dans ce cas précis, la procédure de -boot <strong><em>doit</em></strong> s'appuyer sur une image initrd (l'initrd est un système de +boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de fichier minimal qui sert uniquement a initialiser le système. Les kernels de base de la plupart des distributions GNU/Linux en utilisent un dans tous les cas, pour des raisons de compatibilité) et sur une partition de boot qui elle -n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge +n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et -charge l'initrd en RAM, celui-ci a son tour lance un script permettant de +charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de charger les modules nécessaires a la suite du boot (que ce soit pour un boot sans disque root local, ou bien comme ici avec un système chiffré), puis le -système de fichier "cible" est remonté sur la racine, et l'initrd est démonté -est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend +système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté +est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend depuis le système de fichier maintenant monté sur la racine.</p> <p>La méthode la plus évidente pour contourner le chiffrement du disque est alors -de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par +de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par un autre modifié, copiant par exemple la phrase de passe permettant de déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir -contre ce genre d'attaques : l'une des plus simple est de faire un checksum du +contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot -que l'initrd présente toujours le même checksum. Cela dit, cette méthode a -l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès +que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a +l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès a un fichier initrd reconnu comme sûr.<br /> Une autre approche consisterait a placer le système de fichier /boot sur un périphérique dédié, protégé en écriture de façon matérielle (par exemple, une carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et -protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un -attaquant de modifier ce système de fichier, et l'initrd est alors toujours de +protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un +attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de confiance. Cependant, cela a pour conséquence de rendre la mise a jour de -l'initrd et du noyau <em>beaucoup</em> plus difficile qu'elle ne le serait sans.</p> +l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p> <p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop, -l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est -maintenant responsable de l'utilisation <em>userspace</em> de dm-crypt, qui pour sa +l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est +maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la -manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier +manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi obligatoirement être capables de le faire en tant que root. </p> <p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br /> -Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, -dans une situation réelle ou l'on cherche a chiffrer un disque, il convient -d'utiliser /dev/urandom comme source, pour éviter la détection du système de +Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela, +dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient +d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de fichier chiffré sur le disque. Ici, par exemple, nous allons faire : </p> -<div class="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img </pre></div> <p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img </pre></div> @@ -1038,34 +1300,34 @@ passphrase. Il convient ici de choisir une passphrase particulièrement sûre, puisque toute personne ayant accès a la passphrase aura aussi accès au disque et donc a vos secrets.<br /> Une fois cela fait, nous allons mapper cette image : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto </pre></div> <p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes, -puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous -voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En +puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous +voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les -systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque -qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque +systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque +qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque virtuel qui correspond a notre image. Il se comporte comme toute partition, et peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. Il se comporte en effet comme une partition, et non comme un véritable disque.) -Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de -le faire, pour pouvoir l'utiliser. </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> +Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de +le faire, pour pouvoir l&rsquo;utiliser. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto </pre></div> <p>Maintenant que notre disque est formaté, il peut être monté : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt </pre></div> <p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat suivant : </p> -<div class="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) </pre></div> @@ -1075,51 +1337,51 @@ sont (en fonction de votre passphrase) en sécurité. </p> <ul> <li> <p>Pour monter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o">&lt;</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt; +sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt; </pre></div> </li> <li> <p>Pour démonter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt; +sudo cryptsetup luksClose &lt;nom de disque virtuel&gt; </pre></div> </li> </ul> -<p>Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de +<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de créer et de monter/démonter vos images/disques chiffré-e-s en une seule commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p> <p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable disque (ou clé usb, ou autre), il est préférable de créer une partition de taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code> -pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Redesign du blog, etc//wxcafe.net/posts/%D/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation +pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Redesign du blog, etc//wxcafe.net/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a &ldquo;un peu&rdquo; changé récemment.</p> +<p>Du coup, expliquons. J&rsquo;ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même +occasion découvert <a href="http://getpelican.com">pelican</a>. J&rsquo;ai tout de suite accroché a ce générateur de +site statique en python, du fait de son efficacité, de sa facilité d&rsquo;utilisation et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au +fichiers markdown ou reStructuredText, les passe a la moulinette d&rsquo;un &ldquo;thème&rdquo; +constitué de templates pour les fichiers html et l&rsquo;organisation du projet et +d&rsquo;une partie &ldquo;statique&rdquo; contenant le css, et les autres fichiers nécessaires au projet, et en fait des pages html. </p> <p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span> +<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span> + <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span> </pre></div> @@ -1127,116 +1389,116 @@ projet, et en fait des pages html. </p> django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a +<p>L&rsquo;un des grands avantages de pelican est aussi la facilité qu&rsquo;il offre quand a la mise a jour du blog.<br /> En effet, il offre un système de Makefiles permettant, grâce a de nombreuses cibles de compilation, de régénérer le site entier, de ne générer que les fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... +fichiers n&rsquo;existant pas la dernière fois, etc&hellip; La gestion du projet en devient donc très simple, puisque après avoir écrit un article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> <p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est +pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&rsquo;est moi +qui ait modifié les templates et le css), c&rsquo;est lisible (puisque c&rsquo;est du +python, par opposition au PHP&hellip;), et c&rsquo;est plus &ldquo;efficace&rdquo;. Le markdown est très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus +les articles, je n&rsquo;ai pas besoin d&rsquo;un accès continu au net, bref, c&rsquo;est plus efficace.</p> <p>En ce qui concerne les points négatifs : </p> <ul> <li> <p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a + Je vous propose de vous référer a l&rsquo;article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a mon avis sur ce sujet.</p> </li> <li> <p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a + Il va bientôt être remis, c&rsquo;est juste un manque de temps de ma part, mais vu + que toutes les pages passent par les mêmes templates, c&rsquo;est assez facile a faire.</p> </li> <li> <p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> + Pourquoi c&rsquo;est dans les points négatifs, ca?</p> </li> <li> -<p>Temps d'adaptation et d'appréhension du système: +<p>Temps d&rsquo;adaptation et d&rsquo;appréhension du système: Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca + réguliers sur le blog, c&rsquo;est parce que j&rsquo;apprend a me servir de ce système + et que j&rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous + les cas ca me permet d&rsquo;apprendre plein de choses, donc je mets plutôt ca dans la catëgorie positive.</p> </li> </ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/%D/redesign-du-blog/Comment Saurik a rooté les Google Glass//wxcafe.net/posts/%D/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu -pour avoir développé Cydia, un "app store" alternatif pour les iTrucs), +<p>Voila, c&rsquo;est mon retour d&rsquo;expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/redesign-du-blog/Comment Saurik a rooté les Google Glass//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu +pour avoir développé Cydia, un &ldquo;app store&rdquo; alternatif pour les iTrucs), après avoir reçu une paire de Google glass de la part de Google (de -façon assez évidente...), a trouvé intéressant d'obtenir un accès root -sur celles-ci, ce qu'il a accompli très rapidement. Des démentis de la +façon assez évidente&hellip;), a trouvé intéressant d&rsquo;obtenir un accès root +sur celles-ci, ce qu&rsquo;il a accompli très rapidement. Des démentis de la part de Google et de certains autres sites sont vite arrivés, disant que les lunettes possédaient un bootloader débloqué et que de fait, le root était facile a obtenir : il suffisait de débloquer le bootloader, -d'extraire l'OS, de le rooter hors-fonctionnement, puis de le +d&rsquo;extraire l&rsquo;OS, de le rooter hors-fonctionnement, puis de le réinstaller, rooté, sur les lunettes.</p> <p>Le fait est que de débloquer le bootloader laisse une trace permanente -sur les lunettes, et que Saurik n'a pas utilisé cette technique pour +sur les lunettes, et que Saurik n&rsquo;a pas utilisé cette technique pour rooter sa paire. Voyons comment il a fait :</p> -<p><em>Je tiens tout d'abord a préciser que toutes les informations qui vont +<p><em>Je tiens tout d&rsquo;abord a préciser que toutes les informations qui vont suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la -partie "How does this exploit work".  Je tente d'apporter ma maigre +partie &ldquo;How does this exploit work&rdquo;.  Je tente d&rsquo;apporter ma maigre contribution a cette explication.</em></p> -<p>Donc, d'après les témoignages des quelques utilisateurs de Glass dans le +<p>Donc, d&rsquo;après les témoignages des quelques utilisateurs de Glass dans le monde, il semblerait que ces dernières fonctionnent avec un système -d'exploitation Android, avec une nouvelle interface, mais avec les mêmes +d&rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes outils internes: un kernel Linux, des outils userland GNU et une machine virtuelle Java Dalvik pour les applications.</p> -<p>Saurik a donc cherché un exploit connu pour cette version d'android, et -l'a appliqué a son problème. L'exploit en question est relativement -simple. Depuis la version 4.0 d'android, le système permet la sauvegarde +<p>Saurik a donc cherché un exploit connu pour cette version d&rsquo;android, et +l&rsquo;a appliqué a son problème. L&rsquo;exploit en question est relativement +simple. Depuis la version 4.0 d&rsquo;android, le système permet la sauvegarde des données des différentes applications, une a une, via ADB (Android -Debug Bridge, un protocole USB permettant l'accès a de nombreuses +Debug Bridge, un protocole USB permettant l&rsquo;accès a de nombreuses fonctions avancées des machines fonctionnant sous android, dont, entre -autre, un shell, un accès au logs de debugging, etc... Cette +autre, un shell, un accès au logs de debugging, etc&hellip; Cette fonctionnalité est bien entendu désactivable.) Ce backup est très simple : il crée un fichier .tgz contenant le dossier de configuration de -l'application. Lors de la restauration, le système supprime la -configuration existante, puis la remplace par celle dans l'archive gzip.</p> +l&rsquo;application. Lors de la restauration, le système supprime la +configuration existante, puis la remplace par celle dans l&rsquo;archive gzip.</p> <p>Le problème de sécurité vient du fait que les applications android voient leurs données stockées dans /data/data/identifiant/, et que -/data/ a pour permissions drwxrwx--x  27  system  system, ce qui +/data/ a pour permissions drwxrwx&ndash;x  27  system  system, ce qui signifie que seul system et les membres du groupe system peuvent lire dessus. Or, le fichier /data/local.prop définit de nombreux paramètres -au démarrage, et notamment un qui permet au système de déterminer s'il -fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur +au démarrage, et notamment un qui permet au système de déterminer s&rsquo;il +fonctionne dans une VM ou sur un véritable appareil. S&rsquo;il fonctionne sur une machine virtuelle, il donne les droits root a tout utilisateur se -connectant via ADB, ce qui est ce que l'on cherche pour l'instant. Le +connectant via ADB, ce qui est ce que l&rsquo;on cherche pour l&rsquo;instant. Le fait que /data/ appartienne a system veut dire que le programme de restauration doit être setuid pour accéder aux données a l’intérieur qui -appartiennent a root (soit toutes les applications système d'android, -dont l'application paramètres, et, dans ce cas précis, l'application de +appartiennent a root (soit toutes les applications système d&rsquo;android, +dont l&rsquo;application paramètres, et, dans ce cas précis, l&rsquo;application de log système présente sur les google glass de test. Ainsi, nous avons un processus tournant en tant que root, qui va écrire sur une partition qui nous intéresse des données que nous possédons.</p> -<p>Cependant, un problème reste : le système de restauration d'Android +<p>Cependant, un problème reste : le système de restauration d&rsquo;Android vérifie les données avant de restaurer, et ne restaure pas les symlinks, -ce qui nous empêche d'avoir accès directement a /data/local.prop, le -fichier qu'on cherche a modifier. Cela dit, il nous reste une +ce qui nous empêche d&rsquo;avoir accès directement a /data/local.prop, le +fichier qu&rsquo;on cherche a modifier. Cela dit, il nous reste une possiblité. Plaçons un dossier world-writable dans le fichier de backup, et nous pourrons écrire dedans pendant quelques secondes, le temps que la restauration se termine et que le système remette les permissions en place. Ainsi, nous pouvons créer le fichier /data/local/com.google.glass.logging/whatev/x, lien vers /data/local.prop, et nous avons un toujours un processus tournant en -tant que root qui est en train d'écrire dans ce dossier.</p> +tant que root qui est en train d&rsquo;écrire dans ce dossier.</p> <p>Donc, nous allons lancer deux processus en même temps : </p> <ul> <li> <p>Le premier tentera en boucle de créer le symlink. Il sera consitué de la commande suivante, depuis un shell sur les lunettes :</p> -<div class="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">&gt;/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span> -<span class="k">do</span> <span class="o">:</span> -<span class="n">done</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&gt;/dev/null +do : +done </pre></div> @@ -1245,10 +1507,10 @@ tant que root qui est en train d'écrire dans ce dossier.</p> <p>Le deuxième sera le processus de restauration de notre exploit. Celui ci, pour une plus grande chance de réussite, devra être suffisamment lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x, - pour qu'il crée whatev, prenne du temps a copier bigfile, puis écrive + pour qu&rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive dans x après que le symlink soit effectif. La commande sera, depuis - l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span> + l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab </pre></div> @@ -1257,111 +1519,111 @@ tant que root qui est en train d'écrire dans ce dossier.</p> world-readable. Il va commencer a copier le fichier bigfile.<br /> - Le processus de symlink va créer le lien /data/data/com.google.glass.logging/whatev/x, pointant vers - /data/local.prop, puis rendre l'âme proprement.<br /> + /data/local.prop, puis rendre l&rsquo;âme proprement.<br /> - Le processus de restauration, ayant enfin fini de copier whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui est lié a /data/local.prop. Comme le processus est setuid root, il ne se rendra compte de rien, et écrira tout dans /data/local.prop.</p> </li> </ul> -<p>And voilà! On a écrit ce que l'on veut dans /data/local.prop, ce qui -nous permet de faire croire a android qu'il tourne dans une machine -virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui -indique au noyau qu'il tourne dans qemu, un système de VM).</p> -<p>Il nous reste a rebooter, depuis l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<p>And voilà! On a écrit ce que l&rsquo;on veut dans /data/local.prop, ce qui +nous permet de faire croire a android qu&rsquo;il tourne dans une machine +virtuelle (ce que l&rsquo;on veut, c&rsquo;est en fait &ldquo;ro.kernel.qemu=1&rdquo;, qui +indique au noyau qu&rsquo;il tourne dans qemu, un système de VM).</p> +<p>Il nous reste a rebooter, depuis l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Puis nous remontons la partitions système en lecture/écriture (r/w), depuis le host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;mount -o remount,rw /system&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;mount -o remount,rw /system&quot; </pre></div> -<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span> +<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l&rsquo;appareil :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin </pre></div> <p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir l’exécuter plus tard :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;chmod 6755 /system/xbin/su&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;chmod 6755 /system/xbin/su&quot; </pre></div> <p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir redémarrer normalement :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;rm /data/local.prop&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;rm /data/local.prop&quot; </pre></div> <p>Enfin, nous redemarrons a nouveau :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Et voila, une paire de google glass rootée!</p> -<p>Il est bon de préciser que cette manipulation n'est possible que parce -que les lunettes tournent sous une ancienne version d'android, et que ce +<p>Il est bon de préciser que cette manipulation n&rsquo;est possible que parce +que les lunettes tournent sous une ancienne version d&rsquo;android, et que ce bug a été fixé depuis.</p> <p>Il serait aussi interessant de couvrir les problèmes de vie privée -qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p> -<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/%D/comment-saurik-a-roote-les-google-glass/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/%D/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il -s'agit de posséder son propre serveur, et donc, par extension, ses +qu&rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.</p> +<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il +s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses données. </p> -<p>Bien entendu, il n'est pas nécessaire pour cela de posséder +<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder physiquement son propre serveur (encore que ce soit possible, mais ce -n'est pas le sujet abordé ici.)<br /> +n&rsquo;est pas le sujet abordé ici.)<br /> Nous expliquerons ici les étapes nécessaires pour arriver a avoir un serveur utilisable, du moment ou vous arrivez sur le système fraichement installé, au moment ou vous possédez un serveur avec tous les paquets -nécessaires a l'utilisation que l'on veut en faire ici d'installés. +nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés. Cette partie va consister a paramétrer le système (ici un debian squeeze. Il est bien sur possible de faire la même chose avec a peu près toutes les distributions Linux disponibles, tout comme avec les BSD et tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x -squeeze, parce que c'est une distribution simple a utiliser comme -serveur, stable, et facile a configurer (puisqu'une bonne partie de la +squeeze, parce que c&rsquo;est une distribution simple a utiliser comme +serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la configuration est déjà faite et incluse dans le paquet), donc adaptée au -but de cet article, a savoir rendre l'installation simple et +but de cet article, a savoir rendre l&rsquo;installation simple et compréhensible).</p> -<p>La première chose a faire est bien entendu d'obtenir le serveur en lui +<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui même. Cette partie de la chose ne sera pas traitée dans cet article. Il -existe en effet un nombre infini d'obtenir un serveur, que ce soit en le -louant chez OVH/1&amp;1/n'importe quel autre hébergeur commercial, en -participant a un système d'hébergement collaboratif (je vous laisse +existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le +louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en +participant a un système d&rsquo;hébergement collaboratif (je vous laisse chercher), en achetant un serveur et en le faisant fonctionner de chez -vous, en utilisant un vieux PC... Bref, les possibilités sont multiples. +vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples. Dès lors que vous avez accès a un système debian serveur, peu importe sur quel matériel il fonctionne, et a priori peu importe aussi la manière -dont vous y accédez, le résultat est le même (et la procédure aussi...). +dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;). Dans cet article, nous parlerons de la configuration de base, du moment ou vous avez le serveur vierge dans les mains au moment ou vous installez le serveur http.</p> -<p>Dans cet article, lorsque est précisée le type d'IP a utiliser, il -convient de mettre ce type précisément. Quand le type n'est pas +<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il +convient de mettre ce type précisément. Quand le type n&rsquo;est pas précisée, libre a vous de choisir ipv4 ou ipv6.</p> <p>Bref. Commençons au point ou vous avez un accès root a votre serveur, -n'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou -rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez +n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou +rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe solide sur le compte root. Continuons en allant vite mettre en place le nom de domaine. Pour cela, votre registrar doit vous fournir une -interface vous permettant d'éditer l'entrée DNS pour votre nom de +interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de domaine. </p> -<p>Cette entrée doit donc pour l'instant ressembler a ca :</p> -<div class="highlight"><pre> <span class="o">&lt;</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">&gt;</span> <span class="n">NS</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">A</span> <span class="o">&lt;</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> - <span class="n">IN</span> <span class="n">AAAA</span> <span class="o">&lt;</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> +<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1 + IN MX 1 + IN A &lt;IPv4 de votre serveur&gt; + IN AAAA &lt;IPv6 de votre serveur&gt; </pre></div> <p>Cela vous permet de rediriger tout le trafic se référant a votre nom de domaine vers votre ip (le fonctionnement exact du DNS est assez -compliqué a expliquer, donc on va dire que c'est de la magie pour -l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer +compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour +l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers votre serveur, ce qui est un bon début. Faisons un petit point sécurité ici : pour accéder a votre serveur, il vous suffit actuellement de taper @@ -1370,50 +1632,50 @@ le mot de passe root.</p> bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction du nombre de caractères, ça prend plus ou moins de temps, et si vous avez suffisamment de caractères, ça peut prendre un temps assez -conséquent. Cela dit, il vaut mieux être prudent...) Ainsi, nous allons -arrêter d'utiliser root et nous allons commencer a utiliser des couples +conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons +arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples clés publiques/privées pour nous connecter au serveur.<br /> -Cela se fait en deux temps : tout d'abord, créer un nouvel utilisateur, -grâce auquel nous administrerons le serveur a l'avenir; puis configurer -OpenSSH pour que celui ci n'accepte que les connections par clés et plus +Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur, +grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer +OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus celles sur root.</p> <p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se fait avec adduser, qui est interactif (vous ne devriez pas avoir de -problème avec, puisqu'il crée tout les dossiers et fichiers nécessaires, +problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires, et vous pose toutes les questions utiles pour vous aider.) sinon, vous -devrez utiliser useradd, qui est (en plus d'être très chiant a -distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait -un simple script permettant l'utilisation d'useradd plus facilement.)</p> +devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a +distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait +un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p> <p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif en faisant un <code>adduser --group &lt;username&gt;</code></p> <p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m -N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera -son dossier principal dans /home/, et l'ajoutera au groupe du même nom +son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom que lui (ce qui est en général nécessaire pour des questions de vie privée).</p> -<p>Il convient maintenant d'ajouter cet utilisateur aux groupes qu'il sera +<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix users staff sudo wheel</code>, puis de changer son mot de passe <code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br /> -Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un +Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un utilisateur complètement fonctionnel et utilisable pour toutes les -taches d'administration. Si vous devez encore utiliser root, c'est que +taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que quelque chose ne va pas.</p> -<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous +<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous allons maintenant passer a la phase 2 du plan : désactiver le login ssh root et le login ssh par mot de passe.<br /> -Tout d'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un +Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un système assez semblable a celui vous permettant de chiffrer vos mail : vous avec une clé publique et une clé privée sur le client, et la clé publique est aussi sur le serveur. Lorsque vous vous connectez, openssh vérifie que vous possédez la clé privée qui correspond a la clé publique stockée sur le serveur (pour votre utilisateur, bien entendu). Il est -également possible d'utiliser plusieurs clés publique pour chaque<br /> +également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br /> utilisateur.</p> <p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout -d'abord, il nous faut générer un couple de clés publique/privée sur le +d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t rsa précise a ssh que nous voulons un chiffrement rsa, qui est suffisamment solide pour cette utilisation.) Entrez les informations que @@ -1421,12 +1683,11 @@ ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br /> known_hosts liste les serveurs auxquels vous vous êtes connectés déjà une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous -intéresse ici c'est id_rsa et id_rsa.pub . id_rsa contient votre clé +intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé privée, sauvegardez la sur une clé USB ou notez la sur un bout de papier, si vous la perdez, vous ne pourrez plus vous connecter au -serveur. (planquez la clé usb/le bout de papier...) id_rsa.pub, quand a -lui, contient votre clé publique. Copiez la sur le serveur, avec un -<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou +serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a +lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou en la copiant a la main, si ça vous amuse. </p> <p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra. @@ -1438,19 +1699,19 @@ domaine&gt;</code>), et il ne devrait pas vous demander de mot de pass il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré, donc vérifiez que vous avez suivi correctement les instruction ci-dessus.</strong></p> -<p>Continuons. Il ne nous reste plus qu'a installer le serveur web, et a le +<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le configurer: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \ -<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \ -<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \ -<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \ -<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \ +apache2 apache2.2-common apache2-doc apache2-mpm-prefork \ +apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \ +php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \ +apache2-suexec php-pear php-auth php5-mcrypt mcrypt \ +php5-imagick imagemagick libapache2-mod-suphp libruby \ +libapache2-mod-ruby </pre></div> -<p>(faisons large, on aura besoin de l'excédent plus tard...), puis activons les<br /> +<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br /> mods apache en faisant <code>a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest</code>, et faisons en sorte que ces activations soient prises en compte par apache via un <code>sudo service apache2 @@ -1460,46 +1721,46 @@ comment fonctionner sur notre nom de domaine et ou trouver les fichiers a envoyer. </p> <p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez sympa pour nous filer un fichier de configuration par défaut. Il nous -faut encore l'éditer, en changeant l'adresse mail au début du document +faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>, -et enfin redémarrer apache pour qu'il prenne en compte les +et enfin redémarrer apache pour qu&rsquo;il prenne en compte les modifications, par un <code>sudo service apache2 restart</code> </p> <p>Et maintenant, il vous reste a apprendre le html, parce que ca y est, votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on -verra l'installation du serveur mail (c'est suffisamment complexe pour -prendre un article seul...)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/%D/monter-son-propre-serveur-partie-1/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are +verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour +prendre un article seul&hellip;)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p> -<p>Bon, voila. J'ai passé le cap. Je suis sous GNU/Linux depuis un certain +<p>Bon, voila. J&rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain temps, maintenant, et depuis un certain temps je remarque des -changements malvenus. Bien entendu, au début, je n'avais pas les +changements malvenus. Bien entendu, au début, je n&rsquo;avais pas les connaissances nécessaires pour comprendre ne serait-ce que ces modifications existaient. Et puis certaines sont arrivées avant que je -n'ai même idée que quelque chose dans mon système d'exploitation avait +n&rsquo;ai même idée que quelque chose dans mon système d&rsquo;exploitation avait cette fonction la. Par exemple, udev, ou policykit/consolekit/. A -l'époque, je n'avais aucune idée de la façon dont les disques étaient -montés sur mon système. Le premier système non-Windows que j'ai utilisé +l&rsquo;époque, je n&rsquo;avais aucune idée de la façon dont les disques étaient +montés sur mon système. Le premier système non-Windows que j&rsquo;ai utilisé fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je cherche a démonter le système pour comprendre comment il fonctionnait en -profondeur. Cependant, avec le temps, les connaissances s'accumulant et -mon niveau de compréhension du système s'améliorant, j'ai commencé a -remarquer que certain bouts de l'OS ne collaient pas exactement avec les -autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a -cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma -compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne +profondeur. Cependant, avec le temps, les connaissances s&rsquo;accumulant et +mon niveau de compréhension du système s&rsquo;améliorant, j&rsquo;ai commencé a +remarquer que certain bouts de l&rsquo;OS ne collaient pas exactement avec les +autres. Bien sur, je ne saurais dire si cette réalisation s&rsquo;est faite a +cause de la recrudescence de ces bouts d&rsquo;OS, ou bien juste a cause de ma +compréhension plus poussée. Toujours est-il que ces petits bouts d&rsquo;OS ne s’adaptant pas au reste du système se faisaient de plus en plus visible. -Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai -choisi de passer a Archlinux. C'était avant le passage a systemd. Ce -système me convenait bien. Si je n'installais pas Gnome, ce que je ne +Et puis, un jour, j&rsquo;en ai eu marre de voir unity sur ma machine, et j&rsquo;ai +choisi de passer a Archlinux. C&rsquo;était avant le passage a systemd. Ce +système me convenait bien. Si je n&rsquo;installais pas Gnome, ce que je ne comptais pas faire, il ne me forçait pas a installer un *kit -quelconque, ni dbus. Oui, udev était toujours la, mais c'était le moins +quelconque, ni dbus. Oui, udev était toujours la, mais c&rsquo;était le moins envahissant de ceux la.</p> <p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les premiers sont probablement très efficaces dans leur domaine, et le -second n'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la -distribution d'avoir au plus vite les dernières versions de tout. +second n&rsquo;a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la +distribution d&rsquo;avoir au plus vite les dernières versions de tout. Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient -pas les seuls a faire ça...) ont un problème très précis, qui n'importe +pas les seuls a faire ça&hellip;) ont un problème très précis, qui n&rsquo;importe pas a tout le monde, mais qui est très gênant pour ceux a qui il importe, et ce problème est que ces systèmes ne respectent absolument pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en @@ -1508,1616 +1769,428 @@ ces 9 principes :</p> <li>Ce qui est petit est beau</li> <li>Faites en sorte que chaque programme fasse une chose, bien.</li> <li>Faites un prototype aussi vite que possible</li> -<li>Choisissez la portabilité plutôt que l'efficacité</li> +<li>Choisissez la portabilité plutôt que l&rsquo;efficacité</li> <li>Stockez les données dans des fichiers textes.</li> <li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li> <li>Utilisez des scripts shells pour faciliter la portabilité et la réutilisation.</li> -<li>Évitez les UI qui "capturent" l'utilisateur.</li> +<li>Évitez les UI qui &ldquo;capturent&rdquo; l&rsquo;utilisateur.</li> <li>Faites de chaque programme un filtre.</li> </ol> -<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et -on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas -exactement la façon dont l'informatique fonctionne. Effectivement, les -standards, les systèmes d'exploitation, les logiciels, tout doit évoluer -- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est -pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et -celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La -philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans -de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br /> -La philosophie UNIX est aussi et surtout une garantie d'utilisabilité +<p>Alors bien entendu, un système d&rsquo;exploitation est fait pour évoluer, et +on pourrait penser qu&rsquo;UNIX a fait son temps. Cependant, ce n&rsquo;est pas +exactement la façon dont l&rsquo;informatique fonctionne. Effectivement, les +standards, les systèmes d&rsquo;exploitation, les logiciels, tout doit évoluer +- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&rsquo;est +pas d&rsquo;UNIX que nous parlons ici. C&rsquo;est de la <em>philosophie</em> UNIX. Et +celle-ci n&rsquo;a pas fait son temps, <strong>elle a fait ses preuves.</strong> La +philosophie UNIX, en plus d&rsquo;être efficace sur le papier, a aussi 44 ans +de tests derrière elle, et fonctionne aussi bien qu&rsquo;au premier jour.<br /> +La philosophie UNIX est aussi et surtout une garantie d&rsquo;utilisabilité et de simplicité pour les administrateurs systèmes, pour les -développeurs, bref pour tous ceux qui font de l'informatique -<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique +développeurs, bref pour tous ceux qui font de l&rsquo;informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l&rsquo;informatique ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce sont ceux qui sont les plus proches du système).</p> -<p>Tous OS se doit d'avoir un système standardisé pour faire communiquer +<p>Tous OS se doit d&rsquo;avoir un système standardisé pour faire communiquer les programmes entre eux. UNIX a un système de pipes, des sortes de -fichiers spéciaux permettant d'échanger des informations. C'est -efficace, ça respecte le "tout est fichier", c'est standard, c'est +fichiers spéciaux permettant d&rsquo;échanger des informations. C&rsquo;est +efficace, ça respecte le &ldquo;tout est fichier&rdquo;, c&rsquo;est standard, c&rsquo;est simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient -remplacer ça, avec une interface qui n'est explicitement pas faite pour -être utilisée a la ligne de commande mais a l'aide d'APIs, et un -programme monolithique qui effectue sa tache d'une façon complètement -obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon -efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus -"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est -<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est -horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus -lire facilement les échanges entre programmes. C'est peu pratique, en +remplacer ça, avec une interface qui n&rsquo;est explicitement pas faite pour +être utilisée a la ligne de commande mais a l&rsquo;aide d&rsquo;APIs, et un +programme monolithique qui effectue sa tache d&rsquo;une façon complètement +obscure pour l&rsquo;utilisateur. Alors bien sur, il l&rsquo;effectue d&rsquo;une façon +efficace, cette tache. Oui, ça va plus vite qu&rsquo;avant. Oui, c&rsquo;est plus +&ldquo;rangé&rdquo;, ça fait moins &ldquo;fouillis&rdquo;. Mais c&rsquo;est moins efficace. C&rsquo;est<em>beaucoup</em> moins utilisable pour l&rsquo;utilisateur final. C&rsquo;est +horriblement chiant pour les sysadmins, parce qu&rsquo;ils ne peuvent plus +lire facilement les échanges entre programmes. C&rsquo;est peu pratique, en fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br /> Systemd prend le même parti de créer une interface unifiée, accessible via des appels a des APIs uniquement, complètement obscure, extrêmement abstraite, bien entendu monolithique, et très peu ouverte a la -modification par l'utilisateur final. Alors oui, il parait que ça -augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques +modification par l&rsquo;utilisateur final. Alors oui, il parait que ça +augmente la vitesse de boot. Eh bien, au risque d&rsquo;en choquer quelques uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement et que je puisse modifier facilement, et qui soit ouvert, compréhensible -et distribué. C'est presque comme si les projets freedesktop.org avaient +et distribué. C&rsquo;est presque comme si les projets freedesktop.org avaient pour but de remplacer la base UNIX de linux en créant un système -concurrent, bâtard, bâti sur le kernel Linux mais n'employant plus les -systèmes basiques d'UNIX.</p> -<p>Le problème est qu'il est facilement visible que la direction prise par -la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni +concurrent, bâtard, bâti sur le kernel Linux mais n&rsquo;employant plus les +systèmes basiques d&rsquo;UNIX.</p> +<p>Le problème est qu&rsquo;il est facilement visible que la direction prise par +la communauté Linux n&rsquo;est pas celle du retour sur les systèmes UNIX ni celle du développement de solutions respectant la philosophie UNIX, mais -remises au gout du jour (?), mais est bien d'accepter et de pousser les +remises au gout du jour (?), mais est bien d&rsquo;accepter et de pousser les changements apportés par les projets freedesktop.org directement dans le cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font partie de nombreux développeurs de ces projets), a déjà adopté tous ces -changements (archlinux aussi, mais pour d'autres raisons...), et on peut -compter sur le fait que les autres distributions l'adopteront un jour ou -l'autre.</p> -<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces -systèmes, tout du moins exprimé les raisons qui font qu'ils me -déplaisent, on pourrait penser qu'il suffit de passer a une distribution -n'incluant pas systemd, voire a une distribution n'incluant pas du tout +changements (archlinux aussi, mais pour d&rsquo;autres raisons&hellip;), et on peut +compter sur le fait que les autres distributions l&rsquo;adopteront un jour ou +l&rsquo;autre.</p> +<p>Bon, maintenant que nous avons, si ce n&rsquo;est démontré la nocivité de ces +systèmes, tout du moins exprimé les raisons qui font qu&rsquo;ils me +déplaisent, on pourrait penser qu&rsquo;il suffit de passer a une distribution +n&rsquo;incluant pas systemd, voire a une distribution n&rsquo;incluant pas du tout de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur archlinux. Cependant, avec un peu de réflexion, on voit que si des distributions comme archlinux et Fedora ont adopté systemd (et -qu'OpenSUSE est en train de l’intégrer), il est probable que cela +qu&rsquo;OpenSUSE est en train de l’intégrer), il est probable que cela devienne un standard au fil des années, et que seuls survivent systemd -et upstart, le gestionnaire de démarrage d'ubuntu, qui ne changera +et upstart, le gestionnaire de démarrage d&rsquo;ubuntu, qui ne changera probablement pas (je les vois mal revenir en arrière sur ce point.) -Toujours est-il que l'init héritée du System V semble condamnée a mourir +Toujours est-il que l&rsquo;init héritée du System V semble condamnée a mourir sous Linux. Il pourrait être judicieux de passer sous debian squeeze, qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne la recevra probablement que dans 2/3 ans. Cependant, cette période est -toujours trop courte, et met sur mon système d'exploitation une date -d'expiration, chose qui ne me plait que moyennement. Non, la solution -est de passer sous un système autre, qui ait son propre système d'init +toujours trop courte, et met sur mon système d&rsquo;exploitation une date +d&rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution +est de passer sous un système autre, qui ait son propre système d&rsquo;init (ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options -principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas -vraiment un choix, vu le peu de programmes qu'il permet de faire -fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui -n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku -n'est pas un choix non plus, puisque le but est de rester dans une +principales s&rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&rsquo;est pas +vraiment un choix, vu le peu de programmes qu&rsquo;il permet de faire +fonctionner et le fait qu&rsquo;il ne soit disponible que sur i386, ce qui +n&rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku +n&rsquo;est pas un choix non plus, puisque le but est de rester dans une optique UNIX.</p> -<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai +<p>OpenSolaris est un système d&rsquo;exploitation tout a fait valable. Je n&rsquo;ai en théorie aucun problème sur cet OS, sauf que certains choix de design -ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet, +ne correspondent pas du tout a l&rsquo;idée que j&rsquo;ai d&rsquo;un OS. En effet, OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de ses outils, avec des paquets modifiés pour les rendre plus simples a utiliser (fichiers de configuration fournis par défaut, par exemple, et -autres patchs "release-only"), et une tendance a faire des scripts et -des outils installés par défaut pour tout et n'importe quoi. Bref, cela -n'est pas le sujet. Il convient aussi de voir qu'avec la récente +autres patchs &ldquo;release-only&rdquo;), et une tendance a faire des scripts et +des outils installés par défaut pour tout et n&rsquo;importe quoi. Bref, cela +n&rsquo;est pas le sujet. Il convient aussi de voir qu&rsquo;avec la récente acquisition de Sun par Oracle, il est possible que le projet OpenSolaris -n'ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du -projet affiche d'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> -<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD -ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est +n&rsquo;ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du +projet affiche d&rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> +<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&rsquo;OpenBSD, NetBSD +ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&rsquo;est simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour -réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir -DFBSD ressemble aussi au système de l'assistance a l'user a outrance -décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment +réputation d&rsquo;être orientées sécurité, et d&rsquo;après ce que j&rsquo;ai pu en voir +DFBSD ressemble aussi au système de l&rsquo;assistance a l&rsquo;user a outrance +décris plus haut. Mais la vérité est que je n&rsquo;ai pas fait suffisamment de recherches et que FreeBSD ne va me voir arriver que par hasard, parce -qu'entre toutes les BSD ca me semble la plus sympa et la plus agréable a -utiliser, plus le fait que le système de ports me convient bien (j'aime +qu&rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a +utiliser, plus le fait que le système de ports me convient bien (j&rsquo;aime pouvoir configurer mes logiciels de façon assez profonde.)</p> -<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien +<p>Voila, c&rsquo;est mon avis sur ce &ldquo;problème&rdquo; actuel du monde de Linux. Bien entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins -n'apparaissent jamais chez certaines distributions, créant de ce fait un +n&rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un choix pour les utilisateurs.<br /> -[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/%D/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> -J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire +[1]: Je n&rsquo;ai pas trouvé de traduction satisfaisante a &ldquo;software leveraging&rdquo;, mais l&rsquo;idée est la&hellip;*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> +J&rsquo;ai annoncé il y a environ 20 jours que j&rsquo;avais pour projet de faire une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée -PiRatBox. Il se trouve qu'après de nombreux essais, un problème -récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez +PiRatBox. Il se trouve qu&rsquo;après de nombreux essais, un problème +récurrent apparait: le Raspberry Pi n&rsquo;est pas capable de fournir assez de courant par défaut pour faire fonctionner a la fois un disque dur et une antenne WiFi.<br /> -Alors, autant il me semble évident qu'avec une -alimentation provenant d'un port USB a 2A (max), je n'avais pas -énormément de chances d'avoir 2A sur chacun des ports host du Raspi, +Alors, autant il me semble évident qu&rsquo;avec une +alimentation provenant d&rsquo;un port USB a 2A (max), je n&rsquo;avais pas +énormément de chances d&rsquo;avoir 2A sur chacun des ports host du Raspi, autant avoir moins de 250 mA sur chacun de ces ports me semble un tout petit peu exagéré en terme de rentabilité. </p> <p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me -servant a rien) (vous savez, celui qui est monté en USB...), qui +servant a rien) (vous savez, celui qui est monté en USB&hellip;), qui consomme énormément, est assez louche. Il devrait toujours être possible de désactiver une device USB, me semble-t-il, au niveau logiciel. La, -bien qu'il soit surement possible de la désactiver au niveau du kernel, -il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien +bien qu&rsquo;il soit surement possible de la désactiver au niveau du kernel, +il n&rsquo;est pas <strong>simplement</strong> possible de la &ldquo;débrancher&rdquo;. Ce qui est bien chiant, étant donné le besoin évident de puissance électrique dans lequel on se retrouve. </p> -<p>Bon, je dois avouer n'avoir pas testé de lancer les différents services +<p>Bon, je dois avouer n&rsquo;avoir pas testé de lancer les différents services composant le système des piratebox sous arch, pour la simple <del>et -bonne</del> raison qu'arch utilise systemd et qu'il n'existe pas de wrapper -systemd pour les daemons piratebox, et que j'ai la flemme d'en faire, +bonne</del> raison qu&rsquo;arch utilise systemd et qu&rsquo;il n&rsquo;existe pas de wrapper +systemd pour les daemons piratebox, et que j&rsquo;ai la flemme d&rsquo;en faire, parce que systemd est une horreur a utiliser avec les scripts init. Donc -non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas +non, j&rsquo;utiliserai debian. Le problème d&rsquo;utiliser debian dans ce cas précis est que apt/dpkg a une gestion des dépendances dans un sens mais -pas dans l'autre, en ce sens que si on installe un package "haut", c'est +pas dans l&rsquo;autre, en ce sens que si on installe un package &ldquo;haut&rdquo;, c&rsquo;est a dire dépendant de plusieurs autres packages, apt/dpkg se charge -efficacement d'installer toutes les dépendances nécessaires, tandis que -si on désinstalle un package "bas", c'est a dire sur lequel de nombreux +efficacement d&rsquo;installer toutes les dépendances nécessaires, tandis que +si on désinstalle un package &ldquo;bas&rdquo;, c&rsquo;est a dire sur lequel de nombreux autres packages dépendent, apt/dpkg ne désinstalle pas ces packages -"hauts", ce qui pose un vrai problème quand on se retrouve sur un -Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui -sera installé sur le système avant l'installation proprement dite -(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd +&ldquo;hauts&rdquo;, ce qui pose un vrai problème quand on se retrouve sur un +Raspberry Pi, puisqu&rsquo;il n&rsquo;y a pas de moyen &ldquo;facile&rdquo; de choisir ce qui +sera installé sur le système avant l&rsquo;installation proprement dite +(puisque le moyen &ldquo;universel&rdquo; d&rsquo;installation sur Raspberry Pi est le dd vers la SD qui sert de disque système.)</p> -<p>Il y a <strong>énormément</strong> d'autres critiques que l'ont pourrait faire -concernant le Raspberry Pi. Son système de démarrage a s'arracher les +<p>Il y a <strong>énormément</strong> d&rsquo;autres critiques que l&rsquo;ont pourrait faire +concernant le Raspberry Pi. Son système de démarrage a s&rsquo;arracher les cheveux, par exemple. En effet, plutôt que de faire comme tout pc normalement constitué ou la partie calcul démarre, lance le bootloader, -cherche le kernel de l'OS qui lui même se lance, initialise le hardware, -etc..., a un système bâtard du au fait que la puce au centre de la carte +cherche le kernel de l&rsquo;OS qui lui même se lance, initialise le hardware, +etc&hellip;, a un système bâtard du au fait que la puce au centre de la carte est a la base une puce graphique a laquelle on a greffé un cœur de -calcul (probablement au fond d'une cour d'immeuble, dans les quartiers -pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le -plus efficace qu'aient trouvé les personnes ayant implémenté cette +calcul (probablement au fond d&rsquo;une cour d&rsquo;immeuble, dans les quartiers +pauvres de Bratislava, vu la propreté de la greffe&hellip;), et le moyen le +plus efficace qu&rsquo;aient trouvé les personnes ayant implémenté cette atrocité de gérer le boot est donc de faire démarrer le cœur graphique en premier, ce dernier exécute un code propriétaire pour démarrer le cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel -etc... </p> +etc&hellip; </p> <p>Ce qui non seulement complique énormément le boot, non seulement ajoute -du code propriétaire a un projet se disant libre, mais en plus n'est -<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, -oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p> -<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je -le terminerai dès que j'aurai récupéré les outils nécessaires pour +du code propriétaire a un projet se disant libre, mais en plus n&rsquo;est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, +oui, mais uniquement quand c&rsquo;est bien réalisé, sinon je dis non. </p> +<p>Enfin, le projet que j&rsquo;avais est toujours en cours de réalisation. Je +le terminerai dès que j&rsquo;aurai récupéré les outils nécessaires pour monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa -vie. Les problèmes qu'il m'a posé, qu'il n'aurait pas du me poser, m'ont -trop agacé pour que j'aie envie de le sortir et de jouer avec une fois +vie. Les problèmes qu&rsquo;il m&rsquo;a posé, qu&rsquo;il n&rsquo;aurait pas du me poser, m&rsquo;ont +trop agacé pour que j&rsquo;aie envie de le sortir et de jouer avec une fois sa mission remplie. </p> -<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/%D/update-et-pensees-a-propos-du-raspberry-pi/Update//wxcafe.net/posts/%D/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/%D/update/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous +<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/Update//wxcafe.net/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la +fabrication d&rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt +sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/update/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous <del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une utilisation <strong>a la</strong> UNIX<br /> -Cependant, un d'entre eux se démarque par sa moins-mauvais-itude, c'est +Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br /> Mutt est un client mail en ligne de commande, qui, comme le dit sa page -d’accueil, <a href="http://www.mutt.org">"just sucks less"</a>. Dans les faits, mutt est assez +d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez chiant a configurer mais particulièrement pratique a utiliser après.</p> <p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans -<code>/etc/Muttrc</code>, et il est courant d'utiliser offlineimap en +<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en conjonction avec celui ci, de façon a accéder aux mails même sans accès -internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne +internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne crée pas de cache, ce qui empêche la consultation des emails sans -connexion internet.) La configuration d'offlineimap se fait dans -<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config +connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config par user. Offlineimap est un petit logiciel en python qui synchronise un dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque justement mutt accepte les dossiers au format Maildir. (De plus, cela va tout a fait dans le sens de la libération des données en cela que vous possédez vos mails en local.)<br /> Bref, passons aux choses serieuses : le code. Déjà, installez -offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d'installer +offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer mutt avec le patch sidebar, qui crée un listing des dossiers sur la partie gauche.<br /> Ensuite, voyons pour la partie configuration :<br /> -Ma configuration d'offlineimap :</p> -<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span> -<span class="cp">## Originally located in ~/.offlineimaprc</span> -<span class="cp">## This should not be edited without creating a copy before</span> -<span class="cp">## Created by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +Ma configuration d&rsquo;offlineimap :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span> +<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span> +<span style="color: #75715e">## This should not be edited without creating a copy before</span> +<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="p">[</span><span class="n">general</span><span class="p">]</span> -<span class="cp"># List of accounts to be synced, separated by a comma.</span> -<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</span> +<span style="color: #f8f8f2">[general]</span> +<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span> +<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span> -<span class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span> -<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> -<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span> -<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> -<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span> -<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span> -<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</span> +<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span> +<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> +<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span> +<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> +<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span> +<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span> +<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span> -<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span> -<span class="cp"># Where should the mail be placed?</span> -<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span> - <span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span> +<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span> +<span style="color: #75715e"># Where should the mail be placed?</span> +<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span> + <span style="color: #75715e"># voulez que vos emails apparaissent</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span> -<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span> -<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span> -<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d&#39;utilisateur</span> -<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span> -<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span> +<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span> +<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span> +<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span> +<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span> +<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span> </pre></div> -<p>Ça devrait être assez simple a lire, j'ai tout bien commenté :3<br /> +<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br /> Puis ma config mutt :</p> -<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span> -<span class="cp">## This file should not be edited without creating a copy</span> -<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span> +<span style="color: #75715e">## This file should not be edited without creating a copy</span> +<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="cp"># General config for reading (fetched via offlineimap)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap) -<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span> -<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span> +set mbox_type = Maildir +<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut) -<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span> -<span class="cp"># dossier root mailbox/imap</span> +set folder = ~/Email/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap -<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> -<span class="cp"># dossier d&#39;inbox</span> +set spoolfile = +INBOX +<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox -<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">&#39;</span><span class="n">All</span> <span class="n">Mail</span><span class="err">&#39;</span> -<span class="cp"># dossier ou archiver les emails</span> +set mbox = +&#39;All Mail&#39; +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails -<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span> -<span class="cp"># enfin voila quoi.</span> +set copy = yes +<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour... +<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi. -<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span> -<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span> +set header_cache = /.hcache/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache) -<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span> -<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span> +set record = +Sent +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés -<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span> -<span class="cp"># dossier dans lequel sont stockés les brouillons</span> +set postponed = +Drafts +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons -<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span> -<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span> +mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail +<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche -<span class="cp"># General config for sending (using Mutt&#39;s native support)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support) -<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">password_placeholder</span><span class="err">&#39;</span> -<span class="cp"># votre mot de passe</span> +set smtp_pass = &#39;password_placeholder&#39; +<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe -<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">&quot;smtp://username@whatev.org:465/&quot;</span> -<span class="cp"># l&#39;url ou envoyer les emails</span> +set smtp_url = &quot;smtp://username@whatev.org:465/&quot; +<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails -<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">&quot;utf-8&quot;</span> -<span class="cp"># UTF8, NE PAS CHANGER</span> +set send_charset = &quot;utf-8&quot; +<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER -<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">&quot;.sign&quot;</span> -<span class="cp"># vous pouvez mettre votre signature dans .sign</span> +set signature = &quot;.sign&quot; +<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign -<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible </span> -<span class="cp"># comme ca.</span> +set sig_on_top = yes +<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible +<span style="color: #960050; background-color: #1e0010">#</span> comme ca. -<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span> +set ssl_verify_host = no +<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement -<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">&quot;wxcafe.net&quot;</span> -<span class="cp"># mettez l&#39;adresse de votre serveur ici</span> +set hostname = &quot;wxcafe.net&quot; +<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici -<span class="cp"># Misc settings</span> +<span style="color: #960050; background-color: #1e0010">#</span> Misc settings -<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span> -<span class="cp"># la façon de voir les emails par défaut.</span> +auto_view text/html +<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut. -<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">&quot;%y-%m-%d %T&quot;</span> -<span class="cp"># format de date d&#39;envoi/de reception.</span> +set date_format = &quot;%y-%m-%d %T&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception. -<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">&quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;</span> -<span class="cp"># format de l&#39;index (la présentation de l&#39;interface)</span> -<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span> +set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface) +<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span> -<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span> -<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/aliases&quot;</span> -<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span> -<span class="cp"># format : &quot;alias short_name long_email_adress&quot;</span> -<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span> +set sort_alias = alias +set reverse_alias = yes +set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot; +<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même. +<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot; +source <span style="color: #f8f8f2">$alias_file</span> -<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># ne pas biper. CE SON ME TUE T.T</span> +set beep = no +<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T -<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span> -<span class="cp"># ?</span> +set tilde = yes +set sleep_time = 0 +<span style="color: #960050; background-color: #1e0010">#</span> ? -<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span> -<span class="cp"># parametres de la barre coté gauche</span> +set sidebar_visible = yes +set sidebar_width = 15 +<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche -<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">&quot;Clément Hertling (Wxcafé)&quot;</span> -<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">&quot;wxcafe@wxcafe.net&quot;</span> -<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/cacert&quot;</span> -<span class="cp"># parametres d&#39;envoi. mettez vos propres infos a la place des miennes...</span> +set realname = &quot;Clément Hertling (Wxcafé)&quot; +set from = &quot;wxcafe@wxcafe.net&quot; +set use_from = yes +set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot; +<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes... -<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># vous permet de vois les headers des mails. j&#39;aime, donc je laisse.</span> +set edit_headers = yes +<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse. -<span class="cp"># Macros</span> +<span style="color: #960050; background-color: #1e0010">#</span> Macros -<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span> -<span class="cp"># pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les </span> -<span class="cp"># deux</span> -<span class="cp"># \C represente la touche Control</span> +<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus, +<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les +<span style="color: #960050; background-color: #1e0010">#</span> deux +<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span> -<span class="cp"># Control+p -&gt; remonter d&#39;un dossier dans la sidebar</span> +bind index,pager \Cp sidebar-prev +<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span> -<span class="cp"># Control+n -&gt; descendre d&#39;un dossier dans la sidebar</span> +bind index,pager \Cn sidebar-next +<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span> -<span class="cp"># Control+o -&gt; ouvrir le dossier selectionné dans la sidebar</span> +bind index,pager \Co sidebar-open +<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar -<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">&quot;=Trash&quot;</span> <span class="s">&quot;Trash&quot;</span> -<span class="cp"># d supprime le message en cours</span> +macro index,pager d &quot;=Trash&quot; &quot;Trash&quot; +<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours -<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.</span> +bind pager previous-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message. -<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de </span> -<span class="cp"># message</span> +bind pager next-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de +<span style="color: #960050; background-color: #1e0010">#</span> message -<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># raccourcis vim</span> +bind pager j next-line +bind pager k previous-line +<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim -<span class="cp"># PGP signing commands</span> +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands -<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --import -v %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --export --armor %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_autosign</span><span class="o">=</span><span class="n">yes</span> -<span class="n">set</span> <span class="n">pgp_sign_as</span><span class="o">=</span><span class="mi">0</span><span class="n">x</span><span class="o">********</span> -<span class="cp"># remplacez 0x******** par votre identifiant PGP!!!!!</span> +set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot; +set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot; +set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot; +set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot; +set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot; +set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot; +set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot; +set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot; +set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot; +set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot; +set pgp_autosign=yes +set pgp_sign_as=0x******** +<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!! -<span class="n">set</span> <span class="n">pgp_replyencrypt</span><span class="o">=</span><span class="n">no</span> -<span class="n">set</span> <span class="n">pgp_timeout</span><span class="o">=</span><span class="mi">7200</span> -<span class="n">set</span> <span class="n">pgp_good_sign</span><span class="o">=</span><span class="s">&quot;^gpg: Good signature from&quot;</span> +set pgp_replyencrypt=no +set pgp_timeout=7200 +set pgp_good_sign=&quot;^gpg: Good signature from&quot; -<span class="cp"># si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis</span> -<span class="cp"># PGP signing options</span> +<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options -<span class="cp"># Palette for use with the Linux console. Black background.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background. -<span class="cp"># Schéma de couleur Rouge et Noir. Commentez si vous voulez le </span> -<span class="cp"># défaut noir et blanc.</span> -<span class="cp"># d&#39;autres schémas sont trouvables sur google et autre.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le +<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc. +<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre. -<span class="n">color</span> <span class="n">hdrdefault</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">quoted</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">signature</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">attachment</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">message</span> <span class="n">brightwhite</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">error</span> <span class="n">brightred</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">indicator</span> <span class="n">black</span> <span class="n">red</span> -<span class="n">color</span> <span class="n">status</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tree</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">normal</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">markers</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">search</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tilde</span> <span class="n">brightmagenta</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="o">~</span><span class="n">F</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="s">&quot;~N|~O&quot;</span> +color hdrdefault red black +color quoted brightblack black +color signature brightblack black +color attachment red black +color message brightwhite black +color error brightred black +color indicator black red +color status white black +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index red black ~F +color index red black &quot;~N|~O&quot; </pre></div> -<p>Voila, pour plus d'informations vous pouvez aller voir le manuel de mutt +<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt @ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br /> -J'espère que cette configuration "toute faite" vous aidera a commencer +J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer a utiliser mutt. Il est tout de fois important de se souvenir -qu'utiliser une configuration toute faire n'aide pas a comprendre un +qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un programme ou un système, et que cette façon de faire devrait être -réservée a l'introduction ou a des situations ou il est absolument -nécessaire d'avoir rapidement une configuration fonctionnelle (c'est a -dire, dans le cas d'un client email, euh... jamais?). Je vous invite +réservée a l&rsquo;introduction ou a des situations ou il est absolument +nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a +dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite donc a relire les annotations dont sont parsemés les fichiers de configuration en question, et surtout a lire le manuel, a chercher sur <del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement -a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/La séparation des églises et de l'état, une idée qu'elle est bonne?//wxcafe.net/posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/<p>Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter?</p> -<p>Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. </p> -<p>L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. </p> -<p>Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine <strong>doit</strong>fournir toutes ses -informations au gouvernement américain <strong>sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.</strong> </p> -<p>Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire <a href="http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/">cet article</a> de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. </p> -<p>Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <code>&lt;troll&gt;</code>Apple -Maps<code>&lt;/troll&gt;</code>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. </p> -<p>De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. </p> -<p>Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. </p> -<p>Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.<br /> -Voila, a bientôt!</p>WxcafeThu, 13 Dec 2012 03:08:00 +0100tag:wxcafe.net,2012-12-13:posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/La cryptographie avec PGP et principalement GnuPG//wxcafe.net/posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/<p>PGP (pour <a href="http://fr.wikipedia.org/wiki/Pretty_Good_Privacy">pretty good privacy</a>) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir <a href="http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">ici</a>) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de <em>Web of Trust</em>. </p> -<p>Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.<br /> -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.</p> -<p>Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -<a href="http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/">quitter Gmail</a> aussi, par exemple).</p> -<p>Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)</p> -<p>L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (<a href="http://fr.wikipedia.org/wiki/GNU_Privacy_Guard">GNU Privacy Guard</a>) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<code>&lt;troll&gt;</code> de façon surprenante pour un -programme GNU<code>&lt;/troll&gt;</code>) est extrêmement efficace et claire.</p> -<p>Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).</p> -<p>Tout d'abord, générons une clé GPG :</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">gen</span><span class="o">-</span><span class="n">key</span> -</pre></div> - - -<p>GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. </p> -<p>Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande <code>makepasswd</code>, qui génère automatiquement un mot de -passe) </p> -<p>GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) </p> -<p>Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">pubkey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé publique, et</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span><span class="o">-</span><span class="n">secret</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">seckey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. </p> -<p>Cela fait, listons les informations sur votre clé publique :</p> -<div class="highlight"><pre><span class="err">$</span> <span class="n">gpg</span> <span class="o">--</span><span class="n">list</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">fingerprint</span> -<span class="n">pub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">27</span><span class="n">D81AC8</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> - <span class="n">Key</span> <span class="n">fingerprint</span> <span class="o">=</span> <span class="mi">6345</span> <span class="n">A91A</span> <span class="n">FF89</span> <span class="mf">97E0</span> <span class="mi">13</span><span class="n">D0</span> <span class="mi">96</span><span class="n">A9</span> <span class="mf">9E2</span><span class="n">A</span> <span class="mi">1917</span> <span class="mi">27</span><span class="n">D8</span> <span class="mi">1</span><span class="n">AC8</span> -<span class="n">uid</span> <span class="n">Cl</span><span class="err">é</span><span class="n">ment</span> <span class="n">Hertling</span> <span class="p">(</span><span class="n">Wxcafe</span><span class="p">)</span> -<span class="n">uid</span> <span class="p">[</span><span class="n">jpeg</span> <span class="n">image</span> <span class="n">of</span> <span class="n">size</span> <span class="mi">14692</span><span class="p">]</span> -<span class="n">sub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">9</span><span class="n">ED7F77F</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> -</pre></div> - - -<p>La partie <code>pub</code> indique que c'est une clé publique, <code>4096R</code> indique que c'est -une clé RSA sur 4096 bits. La partie <code>27D81AC8</code> est -l'identifiant de la clé publique, <code>Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8</code> est appelé fingerprint de la clé. Les champs -<code>uid</code> sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ <code>sub</code> est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.<br /> -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">uploader</span><span class="o">*</span> -</pre></div> - - -<p>Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!<br /> -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). </p> -<p>Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.<br /> -Concernant les signatures de clés, elles fonctionnent de manière très -simple :<br /> -Vous devez télécharger la clé de votre correspondant, via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">search</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">correspondant</span><span class="o">*</span> -</pre></div> - - -<p>(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.<br /> -Ceci fait, vous pouvez signer la clé via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">sign</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>puis la renvoyer au serveur via</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">key</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>Voila, la clé de votre correspondant est signée!</p> -<p>Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!</p>WxcafeMon, 19 Nov 2012 00:36:00 +0100tag:wxcafe.net,2012-11-19:posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/L'informatique a l'école//wxcafe.net/posts/%D/linformatique-a-lecole/<p>Après avoir lu <a href="http://t.co/5PTfe6zu">cet article</a> paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.</p> -<p>En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu <a href="http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers - Heroes of the Computer Revolution</a> de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.</p> -<p>Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre <a href="http://en.wikipedia.org/wiki/IWoz">iWoz</a>) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. </p> -<p>Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.</p> -<p>C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...</p> -<p>Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.</p> -<p>Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.</p>WxcafeMon, 15 Oct 2012 20:34:00 +0200tag:wxcafe.net,2012-10-15:posts/%D/linformatique-a-lecole/Archlinux made simple//wxcafe.net/posts/%D/archlinux-made-simple/<p>Archlinux est réputée être une distribution Linux très complexe a -installer et a maintenir.</p> -<p>Je vais tenter ici de vous convaincre que ce n'est pas le cas, et -qu'elle peut se monter très intéressante et très instructive a installer -tout autant qu'a utiliser.</p> -<p>Il convient tout d'abord de rappeler a quels principes obéit Arch:</p> -<ol> -<li> -<p>Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des - programmes simples et utilisables par tous. Avec comme base de - simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu - de bonne volonté, la configuration n'est pas si compliquée!</p> -</li> -<li> -<p>La philosophie UNIX : chaque programme est prévu pour ne remplir - qu'une seule tâche. Bien entendu, cela ne concerne que les programmes - conçus pour s’insérer dans la philosophie UNIX, et les installations de - dépendances avec le gestionnaire de paquet d'Arch fonctionnent - superbement bien.</p> -</li> -</ol> -<p>De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :</p> -<ul> -<li> -<p>recherche d'un paquet :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Ss</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>installation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">S</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>désinstallation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">R</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>mise a jour de tous les paquets installés :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">paquet</span> -</pre></div> - - -</li> -</ul> -<p>Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.</p> -<p>Arch n'offre pas d'interface graphique par défaut : après avoir installé -le système, vous n'aurez qu'une invite de commande. Heureusement, je -vais ici vous guider a travers l'installation d'une interface graphique -(mate, le fork de gnome 2)</p> -<p>L'installation d'Arch se fait par le réseau, veillez a avoir une -connection WiFi ou filaire a proximité avant de suivre ce guide.</p> -<p>Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous -systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce -dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.</p> -<p>Bon, passons a l'explication de l'installation proprement dite :</p> -<p>Tout d'abord, téléchargeons l'iso d'arch la plus récente :</p> -<div class="highlight"><pre><span class="n">wget</span> <span class="n">http</span><span class="o">:</span><span class="c1">//mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso</span> -</pre></div> - - -<p>Ensuite, gravons cette image sur un disque USB :</p> -<div class="highlight"><pre><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">archlinux</span><span class="o">-</span><span class="mf">2012.09.07</span><span class="o">-</span><span class="n">dual</span><span class="p">.</span><span class="n">iso</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> -</pre></div> - - -<p>Après reboot de la machine sur l'iso en question et choix de -l'architecture, nous sommes accueillis par un shell root.</p> -<p>La première chose a faire est de paramétrer le clavier :</p> -<div class="highlight"><pre><span class="n">loadkeys</span> <span class="n">fr</span> -</pre></div> - - -<p>Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :</p> -<div class="highlight"><pre><span class="n">cfdisk</span> <span class="err">#</span> <span class="n">cfdisk</span> <span class="n">est</span> <span class="n">suffisamment</span> <span class="n">clair</span> <span class="n">pour</span> <span class="n">ne</span> <span class="n">pas</span> <span class="n">n</span><span class="err">é</span><span class="n">cessiter</span> <span class="n">d</span><span class="err">&#39;</span><span class="n">explications</span> -</pre></div> - - -<p>formatage des partitions :</p> -<div class="highlight"><pre><span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">root</span> - -<span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="o">&amp;&amp;</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">btrfs</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">home</span> - -<span class="n">mkswap</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="o">&amp;&amp;</span> <span class="n">swapon</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">de</span> <span class="n">swap</span> -</pre></div> - - -<p>Montons les partitions nouvellement créées, puis installons le système :</p> -<div class="highlight"><pre><span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="o">/</span><span class="n">mnt</span> - -<span class="n">mkdir</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> <span class="o">&amp;&amp;</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> - -<span class="n">dhclient</span> <span class="n">eth0</span> <span class="err">#</span> <span class="n">si</span> <span class="n">vous</span> <span class="n">utilisez</span> <span class="n">une</span> <span class="n">connection</span> <span class="n">filaire</span><span class="p">,</span> <span class="n">sinon</span> <span class="n">voire</span> <span class="n">http</span><span class="o">:</span><span class="c1">//wiki.archlinux.fr/Wifi#Configuration</span> - -<span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">base</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> - -<span class="n">genfstab</span> <span class="o">-</span><span class="n">p</span> <span class="o">/</span><span class="n">mnt</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">fstab</span> -</pre></div> - - -<p>Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage:</p> -<div class="highlight"><pre><span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">syslinux</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="n">wireless_tools</span> <span class="n">dhclient</span> -</pre></div> - - -<p>Maintenant, passons sur notre install toute fraîche d'Arch :</p> -<div class="highlight"><pre><span class="n">arch</span><span class="o">-</span><span class="n">chroot</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">bash</span> -</pre></div> - - -<p>configurons les bases :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="n">HOSTNAME</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">hostname</span> - -<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">zoneinfo</span><span class="o">/</span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">localtime</span> - -<span class="n">date</span> <span class="n">MMJJhhmmAAAA</span> - -<span class="n">hwclock</span> <span class="o">--</span><span class="n">systohc</span> - -<span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">gen</span> <span class="err">#</span> <span class="n">D</span><span class="err">é</span><span class="n">commentez</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">correspondant</span> <span class="n">au</span> <span class="n">fran</span><span class="err">ç</span><span class="n">ais</span> <span class="o">:</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="n">et</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">ISO</span><span class="o">-</span><span class="mi">8859</span><span class="o">-</span><span class="mi">1</span> - -<span class="n">echo</span> <span class="err">&#39;</span><span class="n">LANG</span><span class="o">=</span><span class="s">&quot;fr_FR.UTF-8&quot;</span><span class="err">&#39;</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">conf</span> - -<span class="n">locale</span><span class="o">-</span><span class="n">gen</span> - -<span class="n">mkinitcpio</span> <span class="o">-</span><span class="n">p</span> <span class="n">linux</span> -</pre></div> - - -<p>Enfin, vérifions que syslinux est correctement configuré :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">syslinux</span><span class="o">/</span><span class="n">syslinux</span><span class="p">.</span><span class="n">cfg</span> <span class="err">#</span> <span class="n">il</span> <span class="n">devrait</span> <span class="n">y</span> <span class="n">avoir</span> <span class="s">&quot;append root=/dev/sda1&quot;</span> -</pre></div> - - -<p>Si tout est correct, installons syslinux, et paramétrons un mot de passe -root :</p> -<div class="highlight"><pre><span class="n">syslinux</span><span class="o">-</span><span class="n">install_update</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda</span> <span class="o">-</span><span class="n">mia</span> - -<span class="n">passwd</span> <span class="n">root</span> -</pre></div> - - -<p>Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!</p> -<div class="highlight"><pre> <span class="n">exit</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span> -<span class="n">reboot</span> -</pre></div> - - -<p>Fini!</p> -<p>Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen :</p> -<ul> -<li> -<p>Installation de MATE, le gestionnaire de bureau (voir -<a href="http://mate-desktop.org/">http://mate-desktop.org/</a>)</p> -</li> -<li> -<p>Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage</p> -</li> -<li> -<p>Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci</p> -</li> -<li> -<p>Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).</p> -</li> -</ul> -<p>Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici.</p> -<p>Bon, reprenons.</p> -<p>Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet.</p> -<p>Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">pacman</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ici, ajoutez les lignes suivantes :</p> -<div class="highlight"><pre><span class="k">[mate]</span> -<span class="na">Server</span> <span class="o">=</span> <span class="s">http://repo.mate-desktop.org/archlinux/$arch</span> -</pre></div> - - -<p>Installons maintenant les paquets :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">mate</span> <span class="n">mate</span><span class="o">-</span><span class="n">extras</span> <span class="n">dbus</span> <span class="n">dbus</span><span class="o">-</span><span class="n">core</span> <span class="n">alsa</span> <span class="n">networkmanager</span> <span class="n">sudo</span> -</pre></div> - - -<p>Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois :</p> -<div class="highlight"><pre><span class="n">useradd</span> <span class="o">-</span><span class="n">g</span> <span class="n">users</span> <span class="o">-</span><span class="n">G</span> <span class="n">wheel</span><span class="p">,</span><span class="n">audio</span><span class="p">,</span><span class="n">optical</span><span class="p">,</span><span class="n">lp</span><span class="p">,</span><span class="n">scanner</span><span class="p">,</span><span class="n">log</span><span class="p">,</span><span class="n">power</span><span class="p">,</span><span class="n">floppy</span><span class="p">,</span><span class="n">storage</span><span class="p">,</span><span class="n">games</span><span class="p">,</span><span class="n">video</span> <span class="o">-</span><span class="n">m</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">bash</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">passwd</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">su</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -</pre></div> - - -<p>Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec ck-launch-session mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> -</pre></div> - - -<p>Profitons en pour ajouter les démons système au lancement :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ajoutez donc <code>dbus, alsa. hwclock</code> et <code>networkmanager</code> dans la section -DAEMONS (entre les parenthèses, après crond normalement)</p> -<div class="highlight"><pre><span class="n">DAEMONS</span><span class="o">=</span><span class="p">(</span><span class="n">syslog</span><span class="o">-</span><span class="n">ng</span> <span class="n">network</span> <span class="n">crond</span> <span class="n">dbus</span> <span class="n">alsa</span> <span class="n">hwclock</span> <span class="n">networkmanager</span><span class="p">)</span> -</pre></div> - - -<p>Pour éviter un reboot, il est ici possible de faire un</p> -<div class="highlight"><pre><span class="n">su</span> -</pre></div> - - -<p>Puis un</p> -<div class="highlight"><pre> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">dbus</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">alsa</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">networkmanager</span> <span class="n">start</span> -</pre></div> - - -<p>Sinon, il est possible de juste redémarrer.<br /> -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et :</p> -<div class="highlight"><pre> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">sudoers</span> -</pre></div> - - -<p>Décommentez la ligne qui commence par # %wheel ALL=(ALL)<br /> -Sauvegardez le fichier, puis, après un <code>su *votrenom*</code>, tentez de faire -un sudo ls /<br /> -Normalement, vous devriez avoir un listing du dossier /<br /> -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?<br /> -C'est simple comme bonjour :</p> -<div class="highlight"><pre> <span class="n">startx</span> -</pre></div> - - -<p>Et PAF! Voila un MATE desktop flambant neuf a configurer!<br /> -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (<code>sudo pacman -Syu slim</code>).<br /> -Configurons le:</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec dbus-launch mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> <span class="o">&amp;&amp;</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">slim</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Éditez la ligne -"<code>sessions xfce4,icewm-session,wmaker,blackbox</code>" de facon a -ce qu'elle ressemble a "<code>sessions mate-session</code>"<br /> -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.<br /> -Normalement, tout devrait fonctionner!<br /> -Ah oui, et pour installer thunderbird, firefox, chromium, etc...</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">chromium</span> <span class="n">thunderbird</span> <span class="n">xchat</span> <span class="n">firefox</span> <span class="n">rhythmbox</span> <span class="n">pidgin</span> <span class="n">transmission</span><span class="o">-</span><span class="n">gtk</span> <span class="n">vlc</span> -</pre></div> - - -<p>Voila! Et comme dirait <a href="https://twitter.com/spartition">@Spartition</a>, c'est sale, mais qu'est-ce que c'est -bon!<br /> -A plus~</p>WxcafeFri, 05 Oct 2012 14:48:00 +0200tag:wxcafe.net,2012-10-05:posts/%D/archlinux-made-simple/Les systèmes de fichiers//wxcafe.net/posts/%D/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>WxcafeTue, 25 Sep 2012 10:28:00 +0200tag:wxcafe.net,2012-09-25:posts/%D/les-systemes-de-fichiers/Le Quenya - Épisode ø//wxcafe.net/posts/%D/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p>WxcafeTue, 18 Sep 2012 19:07:00 +0200tag:wxcafe.net,2012-09-18:posts/%D/le-quenya-episode-o/Update a propos du blog//wxcafe.net/posts/%D/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>WxcafeTue, 18 Sep 2012 16:57:00 +0200tag:wxcafe.net,2012-09-18:posts/%D/update-a-propos-du-blog/Introduction a bash en tant que language de programmation.//wxcafe.net/posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/<p>L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).</p> -<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. </p> -<p>Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.)</p> -<p>Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p> -<p>De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code.<br /> -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le *) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée.</p> -<p>Quelques notions manquent ici:<br /> -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici.<br /> -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number.<br /> -être utilisées dans un programme bash.<br /> -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p> -<p>Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel.<br /> -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête.</p> -<p>J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p>WxcafeSat, 08 Sep 2012 18:15:00 +0200tag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/Les différentes couches d'un système d'exploitation//wxcafe.net/posts/%D/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>WxcafeThu, 06 Sep 2012 23:29:00 +0200tag:wxcafe.net,2012-09-06:posts/%D/les-differentes-couches-dun-systeme-dexploitation/La programmation expliquée simplement//wxcafe.net/posts/%D/la-programmation-expliquee-simplement/<p>Salut!<br /> -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. </p> -<p>Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.<br /> -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation<br /> -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. </p> -<p>Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.<br /> -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. </p> -<p>La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.<br /> -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. </p> -<p>Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. </p> -<p>Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>WxcafeMon, 27 Aug 2012 00:22:00 +0200tag:wxcafe.net,2012-08-27:posts/%D/la-programmation-expliquee-simplement/GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère//wxcafe.net/posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique.</p> -<p>GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.</p> -<p>De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une?</p> -<p>Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes.</p> -<p>Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable.</p> -<p>N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :)</p> -<p>A bientôt!</p>WxcafeWed, 22 Aug 2012 20:33:00 +0200tag:wxcafe.net,2012-08-22:posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/Débuts, présentation, etc...//wxcafe.net/posts/%D/debuts-presentation-etc/<p>Bonjour!</p> -<p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/##nolife et #debian-fr)</p> -<p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. </p> -<p>Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général.</p> -<p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p>WxcafeSat, 18 Aug 2012 20:27:00 +0200tag:wxcafe.net,2012-08-18:posts/%D/debuts-presentation-etc/ \ No newline at end of file +a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/ \ No newline at end of file diff --git a/output/feeds/feed.rss.hacking.xml b/output/feeds/feed.rss.hacking.xml index bbb5f49..70d1b44 100644 --- a/output/feeds/feed.rss.hacking.xml +++ b/output/feeds/feed.rss.hacking.xml @@ -1,72 +1,72 @@ -Wxcafé//wxcafe.net/Mon, 06 May 2013 06:24:00 +0200Comment Saurik a rooté les Google Glass//wxcafe.net/posts/%D/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu -pour avoir développé Cydia, un "app store" alternatif pour les iTrucs), +Wxcafé//wxcafe.net/Mon, 06 May 2013 06:24:00 +0200Comment Saurik a rooté les Google Glass//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu +pour avoir développé Cydia, un &ldquo;app store&rdquo; alternatif pour les iTrucs), après avoir reçu une paire de Google glass de la part de Google (de -façon assez évidente...), a trouvé intéressant d'obtenir un accès root -sur celles-ci, ce qu'il a accompli très rapidement. Des démentis de la +façon assez évidente&hellip;), a trouvé intéressant d&rsquo;obtenir un accès root +sur celles-ci, ce qu&rsquo;il a accompli très rapidement. Des démentis de la part de Google et de certains autres sites sont vite arrivés, disant que les lunettes possédaient un bootloader débloqué et que de fait, le root était facile a obtenir : il suffisait de débloquer le bootloader, -d'extraire l'OS, de le rooter hors-fonctionnement, puis de le +d&rsquo;extraire l&rsquo;OS, de le rooter hors-fonctionnement, puis de le réinstaller, rooté, sur les lunettes.</p> <p>Le fait est que de débloquer le bootloader laisse une trace permanente -sur les lunettes, et que Saurik n'a pas utilisé cette technique pour +sur les lunettes, et que Saurik n&rsquo;a pas utilisé cette technique pour rooter sa paire. Voyons comment il a fait :</p> -<p><em>Je tiens tout d'abord a préciser que toutes les informations qui vont +<p><em>Je tiens tout d&rsquo;abord a préciser que toutes les informations qui vont suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la -partie "How does this exploit work".  Je tente d'apporter ma maigre +partie &ldquo;How does this exploit work&rdquo;.  Je tente d&rsquo;apporter ma maigre contribution a cette explication.</em></p> -<p>Donc, d'après les témoignages des quelques utilisateurs de Glass dans le +<p>Donc, d&rsquo;après les témoignages des quelques utilisateurs de Glass dans le monde, il semblerait que ces dernières fonctionnent avec un système -d'exploitation Android, avec une nouvelle interface, mais avec les mêmes +d&rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes outils internes: un kernel Linux, des outils userland GNU et une machine virtuelle Java Dalvik pour les applications.</p> -<p>Saurik a donc cherché un exploit connu pour cette version d'android, et -l'a appliqué a son problème. L'exploit en question est relativement -simple. Depuis la version 4.0 d'android, le système permet la sauvegarde +<p>Saurik a donc cherché un exploit connu pour cette version d&rsquo;android, et +l&rsquo;a appliqué a son problème. L&rsquo;exploit en question est relativement +simple. Depuis la version 4.0 d&rsquo;android, le système permet la sauvegarde des données des différentes applications, une a une, via ADB (Android -Debug Bridge, un protocole USB permettant l'accès a de nombreuses +Debug Bridge, un protocole USB permettant l&rsquo;accès a de nombreuses fonctions avancées des machines fonctionnant sous android, dont, entre -autre, un shell, un accès au logs de debugging, etc... Cette +autre, un shell, un accès au logs de debugging, etc&hellip; Cette fonctionnalité est bien entendu désactivable.) Ce backup est très simple : il crée un fichier .tgz contenant le dossier de configuration de -l'application. Lors de la restauration, le système supprime la -configuration existante, puis la remplace par celle dans l'archive gzip.</p> +l&rsquo;application. Lors de la restauration, le système supprime la +configuration existante, puis la remplace par celle dans l&rsquo;archive gzip.</p> <p>Le problème de sécurité vient du fait que les applications android voient leurs données stockées dans /data/data/identifiant/, et que -/data/ a pour permissions drwxrwx--x  27  system  system, ce qui +/data/ a pour permissions drwxrwx&ndash;x  27  system  system, ce qui signifie que seul system et les membres du groupe system peuvent lire dessus. Or, le fichier /data/local.prop définit de nombreux paramètres -au démarrage, et notamment un qui permet au système de déterminer s'il -fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur +au démarrage, et notamment un qui permet au système de déterminer s&rsquo;il +fonctionne dans une VM ou sur un véritable appareil. S&rsquo;il fonctionne sur une machine virtuelle, il donne les droits root a tout utilisateur se -connectant via ADB, ce qui est ce que l'on cherche pour l'instant. Le +connectant via ADB, ce qui est ce que l&rsquo;on cherche pour l&rsquo;instant. Le fait que /data/ appartienne a system veut dire que le programme de restauration doit être setuid pour accéder aux données a l’intérieur qui -appartiennent a root (soit toutes les applications système d'android, -dont l'application paramètres, et, dans ce cas précis, l'application de +appartiennent a root (soit toutes les applications système d&rsquo;android, +dont l&rsquo;application paramètres, et, dans ce cas précis, l&rsquo;application de log système présente sur les google glass de test. Ainsi, nous avons un processus tournant en tant que root, qui va écrire sur une partition qui nous intéresse des données que nous possédons.</p> -<p>Cependant, un problème reste : le système de restauration d'Android +<p>Cependant, un problème reste : le système de restauration d&rsquo;Android vérifie les données avant de restaurer, et ne restaure pas les symlinks, -ce qui nous empêche d'avoir accès directement a /data/local.prop, le -fichier qu'on cherche a modifier. Cela dit, il nous reste une +ce qui nous empêche d&rsquo;avoir accès directement a /data/local.prop, le +fichier qu&rsquo;on cherche a modifier. Cela dit, il nous reste une possiblité. Plaçons un dossier world-writable dans le fichier de backup, et nous pourrons écrire dedans pendant quelques secondes, le temps que la restauration se termine et que le système remette les permissions en place. Ainsi, nous pouvons créer le fichier /data/local/com.google.glass.logging/whatev/x, lien vers /data/local.prop, et nous avons un toujours un processus tournant en -tant que root qui est en train d'écrire dans ce dossier.</p> +tant que root qui est en train d&rsquo;écrire dans ce dossier.</p> <p>Donc, nous allons lancer deux processus en même temps : </p> <ul> <li> <p>Le premier tentera en boucle de créer le symlink. Il sera consitué de la commande suivante, depuis un shell sur les lunettes :</p> -<div class="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">&gt;/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span> -<span class="k">do</span> <span class="o">:</span> -<span class="n">done</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&gt;/dev/null +do : +done </pre></div> @@ -75,10 +75,10 @@ tant que root qui est en train d'écrire dans ce dossier.</p> <p>Le deuxième sera le processus de restauration de notre exploit. Celui ci, pour une plus grande chance de réussite, devra être suffisamment lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x, - pour qu'il crée whatev, prenne du temps a copier bigfile, puis écrive + pour qu&rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive dans x après que le symlink soit effectif. La commande sera, depuis - l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span> + l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab </pre></div> @@ -87,54 +87,54 @@ tant que root qui est en train d'écrire dans ce dossier.</p> world-readable. Il va commencer a copier le fichier bigfile.<br /> - Le processus de symlink va créer le lien /data/data/com.google.glass.logging/whatev/x, pointant vers - /data/local.prop, puis rendre l'âme proprement.<br /> + /data/local.prop, puis rendre l&rsquo;âme proprement.<br /> - Le processus de restauration, ayant enfin fini de copier whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui est lié a /data/local.prop. Comme le processus est setuid root, il ne se rendra compte de rien, et écrira tout dans /data/local.prop.</p> </li> </ul> -<p>And voilà! On a écrit ce que l'on veut dans /data/local.prop, ce qui -nous permet de faire croire a android qu'il tourne dans une machine -virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui -indique au noyau qu'il tourne dans qemu, un système de VM).</p> -<p>Il nous reste a rebooter, depuis l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<p>And voilà! On a écrit ce que l&rsquo;on veut dans /data/local.prop, ce qui +nous permet de faire croire a android qu&rsquo;il tourne dans une machine +virtuelle (ce que l&rsquo;on veut, c&rsquo;est en fait &ldquo;ro.kernel.qemu=1&rdquo;, qui +indique au noyau qu&rsquo;il tourne dans qemu, un système de VM).</p> +<p>Il nous reste a rebooter, depuis l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Puis nous remontons la partitions système en lecture/écriture (r/w), depuis le host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;mount -o remount,rw /system&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;mount -o remount,rw /system&quot; </pre></div> -<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span> +<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l&rsquo;appareil :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin </pre></div> <p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir l’exécuter plus tard :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;chmod 6755 /system/xbin/su&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;chmod 6755 /system/xbin/su&quot; </pre></div> <p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir redémarrer normalement :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;rm /data/local.prop&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;rm /data/local.prop&quot; </pre></div> <p>Enfin, nous redemarrons a nouveau :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Et voila, une paire de google glass rootée!</p> -<p>Il est bon de préciser que cette manipulation n'est possible que parce -que les lunettes tournent sous une ancienne version d'android, et que ce +<p>Il est bon de préciser que cette manipulation n&rsquo;est possible que parce +que les lunettes tournent sous une ancienne version d&rsquo;android, et que ce bug a été fixé depuis.</p> <p>Il serait aussi interessant de couvrir les problèmes de vie privée -qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p> -<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/%D/comment-saurik-a-roote-les-google-glass/ \ No newline at end of file +qu&rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.</p> +<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/ \ No newline at end of file diff --git a/output/feeds/feed.rss.language.xml b/output/feeds/feed.rss.language.xml deleted file mode 100644 index ba0474f..0000000 --- a/output/feeds/feed.rss.language.xml +++ /dev/null @@ -1,30 +0,0 @@ - -Wxcafé//wxcafe.net/Tue, 18 Sep 2012 19:07:00 +0200Le Quenya - Épisode ø//wxcafe.net/posts/%D/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p>WxcafeTue, 18 Sep 2012 19:07:00 +0200tag:wxcafe.net,2012-09-18:posts/%D/le-quenya-episode-o/ \ No newline at end of file diff --git a/output/feeds/feed.rss.note.xml b/output/feeds/feed.rss.note.xml new file mode 100644 index 0000000..93df5ce --- /dev/null +++ b/output/feeds/feed.rss.note.xml @@ -0,0 +1,409 @@ + +Wxcafé//wxcafe.net/Sat, 22 Aug 2015 02:43:00 +0200les NUCs et le HDMI-CEC//wxcafe.net/posts/nuc-hdmi-cec/<p>J&rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas &ldquo;profiter&rdquo; du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc&hellip;) simplement.</p> +<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j&rsquo;ai +décidé d&rsquo;installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça +donnait. Le résultat n&rsquo;étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j&rsquo;ai décidé d&rsquo;upgrader le système.</p> +<p>J&rsquo;ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a> +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un +<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je +pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&rsquo;autre +avantage de tourner sur du Intel, c&rsquo;est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86).</p> +<p>J&rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&rsquo;ai avidement +monté, avant de me rendre compte que le manuel de l&rsquo;adaptateur Pulse-Eight était +[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J&rsquo;ai donc +cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce +post</a> +expliquant comment brancher l&rsquo;adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l&rsquo;information, et pour moi si je dois remonter ce système.</p> +<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +&ldquo;Front Panel&rdquo;, et un appelé &ldquo;Custom Solution Header&rdquo;. Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&rsquo;est plus +facile, puisqu&rsquo;il n&rsquo;y a qu&rsquo;une seule fiche a brancher ici : la orange.</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que &ldquo;Deep S4/S5&rdquo; soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC.</p> +<p>Ne reste plus ensuite qu&rsquo;a installer un système digne de ce nom dessus!</p>WxcafeSat, 22 Aug 2015 02:43:00 +0200tag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/SSL - STARTTLS//wxcafe.net/posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose +problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce +problème, deux solutions sont apparues.</p> +<p>Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port.</p> +<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La +communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de +la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines +machines font un <em>handshake</em> SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise +a jour&rdquo; en douceur.</p> +<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> +La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout +d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il +voit qu&rsquo;il est disponible.<br /> +Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité +de tout le monde.</p>WxcafeSat, 16 May 2015 02:00:00 +0200tag:wxcafe.net,2015-05-16:posts/ssl-starttls/Docker et les ebooks sur Twitter//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si +ce n&rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n&rsquo;est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>, +mais n&rsquo;est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>, +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d&rsquo;avoir une machine hôte sur laquelle s&rsquo;exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l&rsquo;hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu&rsquo;avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu&rsquo;à l&rsquo;hôte, puisqu&rsquo;il n&rsquo;est pas vraiment séparé des +invités. </p> +<p>Quoi qu&rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. &ldquo;Mais pourquoi utiliser Docker, dans ce cas&rdquo;, vous +demandez-vous peut être, &ldquo;puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&rdquo;. Et bien +c&rsquo;est très simple : Docker apporte la simplicité de déploiement d&rsquo;applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer +rapidement et facilement un grand nombre d&rsquo;images déjà configurées. </p> +<p>Maintenant que nous avons expliqué rapidement ce qu&rsquo;était Docker, voyons le +rapport avec les ebooks et Twitter.</p> +<p>Les comptes dits &ldquo;ebooks&rdquo; (le nom vient a l&rsquo;origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>, +voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots +twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>, +avec les tweets d&rsquo;un utilisateur &ldquo;source&rdquo; comme corpus, pour produire des tweets +ressemblant a ceux de l&rsquo;utilisateur source. Nous allons voir maintenant comment +en installer un.</p> +<p>C&rsquo;est, comme disent certaines personnes, &ldquo;fun&rdquo;.</p> +<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée +par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l&rsquo;API +twitter et la génération des messages.</p> +<p>Cependant, cela n&rsquo;explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d&rsquo;isoler les bots, et les +containers dockers permettent de les déployer sur n&rsquo;importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j&rsquo;ai créé <a href="https://github.com/wxcafe/ebooks_example">un +repo github</a> qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc.</p> +<p>Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l&rsquo;utilisateur source avec <code>ebooks archive &lt;username&gt; &lt;filename&gt;</code> (c&rsquo;est du json) +, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks +consume &lt;filename&gt;</code>. Cela fait, démarrer le bot revient a lancer le container : +<code>docker run -d &lt;container name&gt;</code> Pour plus d&rsquo;informations, allez voir <a href="https://docs.docker.com/articles/basics/">la +documentation Docker</a></p> +<p>Bien entendu, dans l&rsquo;idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 05 * * * cd /usr/local/ebooks/main/ &amp;&amp; /usr/local/bin/ebooks consume corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 10 * * * docker rm -f bots &gt;/dev/null 2&gt;&amp;1 +00 15 * * * docker rmi bots &gt; /dev/null 2&gt;&amp;1 +00 20 * * * cd /usr/local/ebooks/main/ &amp;&amp; docker build --rm -t bots . &gt;&gt; /var/log/ebooks/build.log 2&gt;&amp;1 +00 25 * * * docker run -d --name bots bots &gt;&gt; /var/log/ebooks/run.log 2&gt;&amp;1 +</pre></div> + + +<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s&rsquo;executent en même temps.</p> +<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n&rsquo;est qu&rsquo;un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des +applications &ldquo;usuelles&rdquo; +dedans</a>, +puisque l&rsquo;overhead de Docker est minimal, et beaucoup d&rsquo;autres applications +existent.</p>WxcafeSat, 28 Feb 2015 14:11:00 +0100tag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/SSL ou la sécurité sur l'internet//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie +Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, +présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: +<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, +ce qui peut avoir l&rsquo;effet de rendre légèrement parano. Si vous considérez que +c&rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès +a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> +<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous +connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être +remarqué quelque chose récemment : il se trouve que le certificat qui permet de +desservir ce site a changé.</p> +<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des +doigts sortis d&rsquo;un endroit particulier du corps de l&rsquo;admin/auteur de ce &ldquo;blog&rdquo;, +qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle +du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&rsquo;un système +fonctionnel utilisant cette compréhension récemment acquise.</p> +<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut +être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&rsquo;est très +simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour +<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc&hellip; Bref, un certificat +différent pour chaque sous-domaine.</p> +<p>Il s&rsquo;avère que c&rsquo;est a la fois très peu pratique a utiliser (les utilisateurs +doivent ajouter chaque certificat a leur navigateur séparément, chaque +changement de sous-domaine conduit a un message d&rsquo;erreur, etc) et pas plus +sécurisé que d&rsquo;avoir un seul certificat wildcard. J&rsquo;ai donc généré un certificat +pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les +sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche +pas <code>*.wxcafe.net</code>, et qui sera donc utilisé&hellip; bah pour <code>wxcafe.net</code>.</p> +<p>Il serait préférable de faire des redirections automatiques des adresses http +vers les adresses https, cependant, étant donné que le certificat est +self-signed, il me semble préférable que l&rsquo;arrivée sur le site ne commence pas +par une page firefox disant &ldquo;Something&rsquo;s Wrong!&rdquo;, et ces redirections ne seront +donc pas mises en place.</p> +<p>De plus, après la lecture de l&rsquo;article de blog sur Lavabit dont le lien est plus +haut, il semble intéressant (et assez important) de faire en sorte que le +serveur utilise en priorité (et si possible, uniquement) des ciphers supportant +PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves +de ce même algorithme). Cela permet de faire en sorte que toutes les +communications avec ce serveur soient future-proof, c&rsquo;est a dire que, même si +quelqu&rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les +communications passées.</p> +<p>Bon, maintenant que les explications basiques sont faites, voyons +l&rsquo;implémentation : <br /> +Pour générer la clé, tout d&rsquo;abord, il convient d&rsquo;utiliser les commandes +suivantes: </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096 +# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation +sudo openssl req -new -key example.key -out example.csr +# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">&quot;Common Name&quot;</span> devant contenir le FQDN +sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt +# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">&#39;</span>une durée de vie de <span style="color: #ae81ff">3</span> ans +</pre></div> + + +<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser +<code>*.example.com</code> comme common name. +Une fois la clé générée, il faut dire aux différents services de l&rsquo;utiliser, et +de n&rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service. +Je vais lister ici les methodes pour quelques services que j&rsquo;utilise :</p> +<h3>apache :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3 +<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">&quot;</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \ + EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \ + EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">&quot;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> +</pre></div> + + +<h3>nginx :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">&quot;EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> +</pre></div> + + +<h3>prosody (jabber) :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">&#39;abord, lancez la commande suivante :</span> +<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span> +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.key&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.crt&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">}</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span> +</pre></div> + + +<h3>postfix (email) :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt +<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key +<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes +<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong +<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high +<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS +<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt +<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3 +<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes +<span style="color: #75715e"># [...]</span> +</pre></div> + + +<h3>dovecot (imap) :</h3> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.crt +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +</pre></div> + + +<p>Voila. Pour d&rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter +au manuel approprié.</p> +<p>Cela étant dit, je conseille a tout le monde d&rsquo;aller voir la conférence dans le +disclaimer, et tant qu&rsquo;a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future +of Authenticity</a> qui parle de son +implémentation d&rsquo;une technologie &ldquo;remplaçant&rdquo; le système de CAs qui existe +actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/Redesign du blog, etc//wxcafe.net/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a &ldquo;un peu&rdquo; changé récemment.</p> +<p>Du coup, expliquons. J&rsquo;ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même +occasion découvert <a href="http://getpelican.com">pelican</a>. J&rsquo;ai tout de suite accroché a ce générateur de +site statique en python, du fait de son efficacité, de sa facilité d&rsquo;utilisation +et de sa grande customisation. En gros, pelican est un logiciel qui prend des +fichiers markdown ou reStructuredText, les passe a la moulinette d&rsquo;un &ldquo;thème&rdquo; +constitué de templates pour les fichiers html et l&rsquo;organisation du projet et +d&rsquo;une partie &ldquo;statique&rdquo; contenant le css, et les autres fichiers nécessaires au +projet, et en fait des pages html. </p> +<p>Globalement, un thème est constitué ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span> +<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span> + <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span> +</pre></div> + + +<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe +django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, +par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de +pelican.</p> +<p>L&rsquo;un des grands avantages de pelican est aussi la facilité qu&rsquo;il offre quand a +la mise a jour du blog.<br /> +En effet, il offre un système de Makefiles permettant, grâce a de nombreuses +cibles de compilation, de régénérer le site entier, de ne générer que les +fichiers modifiés depuis la dernière génération, de générer uniquement les +fichiers n&rsquo;existant pas la dernière fois, etc&hellip; +La gestion du projet en devient donc très simple, puisque après avoir écrit un +article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> +<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du +manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec +pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&rsquo;est moi +qui ait modifié les templates et le css), c&rsquo;est lisible (puisque c&rsquo;est du +python, par opposition au PHP&hellip;), et c&rsquo;est plus &ldquo;efficace&rdquo;. Le markdown est +très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire +les articles, je n&rsquo;ai pas besoin d&rsquo;un accès continu au net, bref, c&rsquo;est plus +efficace.</p> +<p>En ce qui concerne les points négatifs : </p> +<ul> +<li> +<p>Perte des commentaires: + Je vous propose de vous référer a l&rsquo;article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a + mon avis sur ce sujet.</p> +</li> +<li> +<p>Perte du bouton flattr: + Il va bientôt être remis, c&rsquo;est juste un manque de temps de ma part, mais vu + que toutes les pages passent par les mêmes templates, c&rsquo;est assez facile a + faire.</p> +</li> +<li> +<p>Perte du spam: + Pourquoi c&rsquo;est dans les points négatifs, ca?</p> +</li> +<li> +<p>Temps d&rsquo;adaptation et d&rsquo;appréhension du système: + Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins + réguliers sur le blog, c&rsquo;est parce que j&rsquo;apprend a me servir de ce système + et que j&rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous + les cas ca me permet d&rsquo;apprendre plein de choses, donc je mets plutôt ca + dans la catëgorie positive.</p> +</li> +</ul> +<p>Voila, c&rsquo;est mon retour d&rsquo;expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/redesign-du-blog/Update//wxcafe.net/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la +fabrication d&rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt +sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/update/ \ No newline at end of file diff --git a/output/feeds/feed.rss.notes.xml b/output/feeds/feed.rss.notes.xml deleted file mode 100644 index 1f28618..0000000 --- a/output/feeds/feed.rss.notes.xml +++ /dev/null @@ -1,265 +0,0 @@ - -Wxcafé//wxcafe.net/Fri, 30 May 2014 08:25:00 +0200SSL ou la sécurité sur l'internet//wxcafe.net/posts/%D/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie -Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, -présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: -<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès -a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> -<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous -connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être -remarqué quelque chose récemment : il se trouve que le certificat qui permet de -desservir ce site a changé.</p> -<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", -qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système -fonctionnel utilisant cette compréhension récemment acquise.</p> -<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très -simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat -différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs -doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat -pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les -sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> -<p>Il serait préférable de faire des redirections automatiques des adresses http -vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront -donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus -haut, il semble intéressant (et assez important) de faire en sorte que le -serveur utilise en priorité (et si possible, uniquement) des ciphers supportant -PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves -de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les -communications passées.</p> -<p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes -suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> -</pre></div> - - -<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser -<code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> -<h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> -</pre></div> - - -<h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -</pre></div> - - -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter -au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future -of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/%D/SSL-ou-la-securite-sur-internet/Redesign du blog, etc//wxcafe.net/posts/%D/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation -et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au -projet, et en fait des pages html. </p> -<p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> -</pre></div> - - -<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe -django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, -par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de -pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a -la mise a jour du blog.<br /> -En effet, il offre un système de Makefiles permettant, grâce a de nombreuses -cibles de compilation, de régénérer le site entier, de ne générer que les -fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... -La gestion du projet en devient donc très simple, puisque après avoir écrit un -article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> -<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du -manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est -très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus -efficace.</p> -<p>En ce qui concerne les points négatifs : </p> -<ul> -<li> -<p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a - mon avis sur ce sujet.</p> -</li> -<li> -<p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a - faire.</p> -</li> -<li> -<p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> -</li> -<li> -<p>Temps d'adaptation et d'appréhension du système: - Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca - dans la catëgorie positive.</p> -</li> -</ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/%D/redesign-du-blog/Update//wxcafe.net/posts/%D/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/%D/update/Update a propos du blog//wxcafe.net/posts/%D/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>WxcafeTue, 18 Sep 2012 16:57:00 +0200tag:wxcafe.net,2012-09-18:posts/%D/update-a-propos-du-blog/Débuts, présentation, etc...//wxcafe.net/posts/%D/debuts-presentation-etc/<p>Bonjour!</p> -<p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/##nolife et #debian-fr)</p> -<p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. </p> -<p>Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général.</p> -<p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p>WxcafeSat, 18 Aug 2012 20:27:00 +0200tag:wxcafe.net,2012-08-18:posts/%D/debuts-presentation-etc/ \ No newline at end of file diff --git a/output/feeds/feed.rss.oses.xml b/output/feeds/feed.rss.oses.xml index b785419..764eab1 100644 --- a/output/feeds/feed.rss.oses.xml +++ b/output/feeds/feed.rss.oses.xml @@ -1,349 +1,63 @@ -Wxcafé//wxcafe.net/Mon, 09 Sep 2013 11:17:00 +0200Plan9 from whichever space//wxcafe.net/posts/%D/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. -Wood. Il est assez connu comme étant l'un des pires films jamais sortis. Rempli -d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort -d'un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> -<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l'indique), -et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite -des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a -introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des -ressources appartenant a d'autres ordinateurs a distance, un support de -l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne +Wxcafé//wxcafe.net/Mon, 09 Sep 2013 11:17:00 +0200Plan9 from whichever space//wxcafe.net/posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. +Wood. Il est assez connu comme étant l&rsquo;un des pires films jamais sortis. Rempli +d&rsquo;erreur de montage, d&rsquo;effets spéciaux au rabais, et ayant même connu la mort +d&rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> +<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l&rsquo;indique), +et qui a été pensé comme le successeur d&rsquo;Unix. Il est conçu comme une poursuite +des concepts unixiens jusqu&rsquo;à leur but naturel. Ainsi, c&rsquo;est Plan9 qui a +introduit le concept d&rsquo;UnionFS, le protocole 9P qui permet d&rsquo;acceder a des +ressources appartenant a d&rsquo;autres ordinateurs a distance, un support de +l&rsquo;unicode par défaut et sur tout le système (a l&rsquo;inverse d&rsquo;Unix, qui fonctionne a la base en ASCII), un support de ProcFS amélioré, une interface graphique par -défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p> -<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit -d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a -quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt +défaut, et d&rsquo;autres améliorations sur les thèmes de base que propose Unix. </p> +<p>Cependant, Plan9 n&rsquo;a jamais été véritablement utilisé pour quoi que ce soit +d&rsquo;autre que la recherche en systèmes, et c&rsquo;est dommage, parce que Plan9 a +quelque chose de très intéressant à proposer. En effet, en ces jours d&rsquo;intérêt grandissant pour le klaoude et la délocalisation a la fois du processing et des -données, et bien que Plan9 ait été créé bien avant que le terme "cloud -computing" n'apparaisse pour la première fois, il semble que ce système ait été +données, et bien que Plan9 ait été créé bien avant que le terme &ldquo;cloud +computing&rdquo; n&rsquo;apparaisse pour la première fois, il semble que ce système ait été conçu pour apporter cette délocalisation tant rêvée.</p> -<p>En effet, même si l'on considère que les nouveautés qu'il apporte par rapport a -Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà -conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système -d'exploitation ultime en terme de partage de ressources et de données. -Ainsi, le fait que 9P permette de considérer toutes les ressources d'un système -distant comme n'étant qu'une poignée de fichiers permet de le monter comme -n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder +<p>En effet, même si l&rsquo;on considère que les nouveautés qu&rsquo;il apporte par rapport a +Unix ne sont pas extraordinaires en soit (alors qu&rsquo;elles sont déjà +conséquentes), lorsqu&rsquo;on les prend ensemble, elles font de Plan9 le système +d&rsquo;exploitation ultime en terme de partage de ressources et de données. +Ainsi, le fait que 9P permette de considérer toutes les ressources d&rsquo;un système +distant comme n&rsquo;étant qu&rsquo;une poignée de fichiers permet de le monter comme +n&rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse -interagir avec les autres, même s'ils sont hétérogènes (c'est a dire provenant -de machines différentes), permet d'utiliser les ressources d'une machine -distante comme si elle était présente localement. Le mécanisme d'UnionFS permet +interagir avec les autres, même s&rsquo;ils sont hétérogènes (c&rsquo;est a dire provenant +de machines différentes), permet d&rsquo;utiliser les ressources d&rsquo;une machine +distante comme si elle était présente localement. Le mécanisme d&rsquo;UnionFS permet de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers de plusieurs machines a la fois (ce qui permet une délocalisation des données bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p> <p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de -parler d'ordinateur lorsque le concept même du système est d'être composé de +parler d&rsquo;ordinateur lorsque le concept même du système est d&rsquo;être composé de clusters eux mêmes composés de machines hétérogènes. Le système de fichier -virtuel /net fourni par le kernel de Plan9 permet d'implémenter très facilement -différents concepts réseaux : en montant le /net d'un ordinateur du réseau local -sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur -du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur +virtuel /net fourni par le kernel de Plan9 permet d&rsquo;implémenter très facilement +différents concepts réseaux : en montant le /net d&rsquo;un ordinateur du réseau local +sur celui servant de gateway vers l&rsquo;internet, on crée un NAT vers cet ordinateur +du réseau local. En montant le /net d&rsquo;un ordinateur distant sur un ordinateur local via le protocole 9P sécurisé, on crée un VPN : les connections locales se -font en utilisant l'accès de l'ordinateur distant, et les connections entre les +font en utilisant l&rsquo;accès de l&rsquo;ordinateur distant, et les connections entre les deux sont chiffrées. </p> <p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour -partager leur "puissance" de calcul en userspace, des superordinateurs pour -lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels -JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait +partager leur &ldquo;puissance&rdquo; de calcul en userspace, des superordinateurs pour +lesquels le noyau Linux s&rsquo;est doté du support de jusqu&rsquo;à 4096 CPUs, des OS tels +JoliOS qui promettent une integration du klaoude alors qu&rsquo;ils ne sont en fait que des navigateurs web a peine améliorés et des services de stockage en ligne -qui promettent un accès universel a toutes nos données alors qu'ils ne proposent +qui promettent un accès universel a toutes nos données alors qu&rsquo;ils ne proposent que de les garder a disposition par le web, Plan9 promettait une technologie de partage des ressources système et de données, une intégration du réseau dans le système particulièrement poussée, un environnement graphique supporté par le -basesystem et non greffé par dessus comme l'a été X11, et de nombreuses autres +basesystem et non greffé par dessus comme l&rsquo;a été X11, et de nombreuses autres améliorations sur Unix.</p> -<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative, -et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de +<p>Malheureusement, il n&rsquo;a jamais été adopté de façon véritablement significative, +et ce pour une raison très Unixiènne : &ldquo;worse is better&rdquo;. En effet, le parc de machines Unix déjà installées était suffisamment performant et fonctionnel pour que des solutions soient développées au dessus du système pour remplir les mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de -Linux, FUSE, etc...</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/%D/plan-9-from-whichever-space/Archlinux made simple//wxcafe.net/posts/%D/archlinux-made-simple/<p>Archlinux est réputée être une distribution Linux très complexe a -installer et a maintenir.</p> -<p>Je vais tenter ici de vous convaincre que ce n'est pas le cas, et -qu'elle peut se monter très intéressante et très instructive a installer -tout autant qu'a utiliser.</p> -<p>Il convient tout d'abord de rappeler a quels principes obéit Arch:</p> -<ol> -<li> -<p>Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des - programmes simples et utilisables par tous. Avec comme base de - simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu - de bonne volonté, la configuration n'est pas si compliquée!</p> -</li> -<li> -<p>La philosophie UNIX : chaque programme est prévu pour ne remplir - qu'une seule tâche. Bien entendu, cela ne concerne que les programmes - conçus pour s’insérer dans la philosophie UNIX, et les installations de - dépendances avec le gestionnaire de paquet d'Arch fonctionnent - superbement bien.</p> -</li> -</ol> -<p>De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :</p> -<ul> -<li> -<p>recherche d'un paquet :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Ss</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>installation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">S</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>désinstallation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">R</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>mise a jour de tous les paquets installés :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">paquet</span> -</pre></div> - - -</li> -</ul> -<p>Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.</p> -<p>Arch n'offre pas d'interface graphique par défaut : après avoir installé -le système, vous n'aurez qu'une invite de commande. Heureusement, je -vais ici vous guider a travers l'installation d'une interface graphique -(mate, le fork de gnome 2)</p> -<p>L'installation d'Arch se fait par le réseau, veillez a avoir une -connection WiFi ou filaire a proximité avant de suivre ce guide.</p> -<p>Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous -systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce -dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.</p> -<p>Bon, passons a l'explication de l'installation proprement dite :</p> -<p>Tout d'abord, téléchargeons l'iso d'arch la plus récente :</p> -<div class="highlight"><pre><span class="n">wget</span> <span class="n">http</span><span class="o">:</span><span class="c1">//mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso</span> -</pre></div> - - -<p>Ensuite, gravons cette image sur un disque USB :</p> -<div class="highlight"><pre><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">archlinux</span><span class="o">-</span><span class="mf">2012.09.07</span><span class="o">-</span><span class="n">dual</span><span class="p">.</span><span class="n">iso</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> -</pre></div> - - -<p>Après reboot de la machine sur l'iso en question et choix de -l'architecture, nous sommes accueillis par un shell root.</p> -<p>La première chose a faire est de paramétrer le clavier :</p> -<div class="highlight"><pre><span class="n">loadkeys</span> <span class="n">fr</span> -</pre></div> - - -<p>Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :</p> -<div class="highlight"><pre><span class="n">cfdisk</span> <span class="err">#</span> <span class="n">cfdisk</span> <span class="n">est</span> <span class="n">suffisamment</span> <span class="n">clair</span> <span class="n">pour</span> <span class="n">ne</span> <span class="n">pas</span> <span class="n">n</span><span class="err">é</span><span class="n">cessiter</span> <span class="n">d</span><span class="err">&#39;</span><span class="n">explications</span> -</pre></div> - - -<p>formatage des partitions :</p> -<div class="highlight"><pre><span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">root</span> - -<span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="o">&amp;&amp;</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">btrfs</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">home</span> - -<span class="n">mkswap</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="o">&amp;&amp;</span> <span class="n">swapon</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">de</span> <span class="n">swap</span> -</pre></div> - - -<p>Montons les partitions nouvellement créées, puis installons le système :</p> -<div class="highlight"><pre><span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="o">/</span><span class="n">mnt</span> - -<span class="n">mkdir</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> <span class="o">&amp;&amp;</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> - -<span class="n">dhclient</span> <span class="n">eth0</span> <span class="err">#</span> <span class="n">si</span> <span class="n">vous</span> <span class="n">utilisez</span> <span class="n">une</span> <span class="n">connection</span> <span class="n">filaire</span><span class="p">,</span> <span class="n">sinon</span> <span class="n">voire</span> <span class="n">http</span><span class="o">:</span><span class="c1">//wiki.archlinux.fr/Wifi#Configuration</span> - -<span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">base</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> - -<span class="n">genfstab</span> <span class="o">-</span><span class="n">p</span> <span class="o">/</span><span class="n">mnt</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">fstab</span> -</pre></div> - - -<p>Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage:</p> -<div class="highlight"><pre><span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">syslinux</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="n">wireless_tools</span> <span class="n">dhclient</span> -</pre></div> - - -<p>Maintenant, passons sur notre install toute fraîche d'Arch :</p> -<div class="highlight"><pre><span class="n">arch</span><span class="o">-</span><span class="n">chroot</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">bash</span> -</pre></div> - - -<p>configurons les bases :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="n">HOSTNAME</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">hostname</span> - -<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">zoneinfo</span><span class="o">/</span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">localtime</span> - -<span class="n">date</span> <span class="n">MMJJhhmmAAAA</span> - -<span class="n">hwclock</span> <span class="o">--</span><span class="n">systohc</span> - -<span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">gen</span> <span class="err">#</span> <span class="n">D</span><span class="err">é</span><span class="n">commentez</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">correspondant</span> <span class="n">au</span> <span class="n">fran</span><span class="err">ç</span><span class="n">ais</span> <span class="o">:</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="n">et</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">ISO</span><span class="o">-</span><span class="mi">8859</span><span class="o">-</span><span class="mi">1</span> - -<span class="n">echo</span> <span class="err">&#39;</span><span class="n">LANG</span><span class="o">=</span><span class="s">&quot;fr_FR.UTF-8&quot;</span><span class="err">&#39;</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">conf</span> - -<span class="n">locale</span><span class="o">-</span><span class="n">gen</span> - -<span class="n">mkinitcpio</span> <span class="o">-</span><span class="n">p</span> <span class="n">linux</span> -</pre></div> - - -<p>Enfin, vérifions que syslinux est correctement configuré :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">syslinux</span><span class="o">/</span><span class="n">syslinux</span><span class="p">.</span><span class="n">cfg</span> <span class="err">#</span> <span class="n">il</span> <span class="n">devrait</span> <span class="n">y</span> <span class="n">avoir</span> <span class="s">&quot;append root=/dev/sda1&quot;</span> -</pre></div> - - -<p>Si tout est correct, installons syslinux, et paramétrons un mot de passe -root :</p> -<div class="highlight"><pre><span class="n">syslinux</span><span class="o">-</span><span class="n">install_update</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda</span> <span class="o">-</span><span class="n">mia</span> - -<span class="n">passwd</span> <span class="n">root</span> -</pre></div> - - -<p>Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!</p> -<div class="highlight"><pre> <span class="n">exit</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span> -<span class="n">reboot</span> -</pre></div> - - -<p>Fini!</p> -<p>Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen :</p> -<ul> -<li> -<p>Installation de MATE, le gestionnaire de bureau (voir -<a href="http://mate-desktop.org/">http://mate-desktop.org/</a>)</p> -</li> -<li> -<p>Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage</p> -</li> -<li> -<p>Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci</p> -</li> -<li> -<p>Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).</p> -</li> -</ul> -<p>Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici.</p> -<p>Bon, reprenons.</p> -<p>Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet.</p> -<p>Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">pacman</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ici, ajoutez les lignes suivantes :</p> -<div class="highlight"><pre><span class="k">[mate]</span> -<span class="na">Server</span> <span class="o">=</span> <span class="s">http://repo.mate-desktop.org/archlinux/$arch</span> -</pre></div> - - -<p>Installons maintenant les paquets :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">mate</span> <span class="n">mate</span><span class="o">-</span><span class="n">extras</span> <span class="n">dbus</span> <span class="n">dbus</span><span class="o">-</span><span class="n">core</span> <span class="n">alsa</span> <span class="n">networkmanager</span> <span class="n">sudo</span> -</pre></div> - - -<p>Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois :</p> -<div class="highlight"><pre><span class="n">useradd</span> <span class="o">-</span><span class="n">g</span> <span class="n">users</span> <span class="o">-</span><span class="n">G</span> <span class="n">wheel</span><span class="p">,</span><span class="n">audio</span><span class="p">,</span><span class="n">optical</span><span class="p">,</span><span class="n">lp</span><span class="p">,</span><span class="n">scanner</span><span class="p">,</span><span class="n">log</span><span class="p">,</span><span class="n">power</span><span class="p">,</span><span class="n">floppy</span><span class="p">,</span><span class="n">storage</span><span class="p">,</span><span class="n">games</span><span class="p">,</span><span class="n">video</span> <span class="o">-</span><span class="n">m</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">bash</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">passwd</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">su</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -</pre></div> - - -<p>Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec ck-launch-session mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> -</pre></div> - - -<p>Profitons en pour ajouter les démons système au lancement :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ajoutez donc <code>dbus, alsa. hwclock</code> et <code>networkmanager</code> dans la section -DAEMONS (entre les parenthèses, après crond normalement)</p> -<div class="highlight"><pre><span class="n">DAEMONS</span><span class="o">=</span><span class="p">(</span><span class="n">syslog</span><span class="o">-</span><span class="n">ng</span> <span class="n">network</span> <span class="n">crond</span> <span class="n">dbus</span> <span class="n">alsa</span> <span class="n">hwclock</span> <span class="n">networkmanager</span><span class="p">)</span> -</pre></div> - - -<p>Pour éviter un reboot, il est ici possible de faire un</p> -<div class="highlight"><pre><span class="n">su</span> -</pre></div> - - -<p>Puis un</p> -<div class="highlight"><pre> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">dbus</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">alsa</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">networkmanager</span> <span class="n">start</span> -</pre></div> - - -<p>Sinon, il est possible de juste redémarrer.<br /> -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et :</p> -<div class="highlight"><pre> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">sudoers</span> -</pre></div> - - -<p>Décommentez la ligne qui commence par # %wheel ALL=(ALL)<br /> -Sauvegardez le fichier, puis, après un <code>su *votrenom*</code>, tentez de faire -un sudo ls /<br /> -Normalement, vous devriez avoir un listing du dossier /<br /> -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?<br /> -C'est simple comme bonjour :</p> -<div class="highlight"><pre> <span class="n">startx</span> -</pre></div> - - -<p>Et PAF! Voila un MATE desktop flambant neuf a configurer!<br /> -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (<code>sudo pacman -Syu slim</code>).<br /> -Configurons le:</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec dbus-launch mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> <span class="o">&amp;&amp;</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">slim</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Éditez la ligne -"<code>sessions xfce4,icewm-session,wmaker,blackbox</code>" de facon a -ce qu'elle ressemble a "<code>sessions mate-session</code>"<br /> -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.<br /> -Normalement, tout devrait fonctionner!<br /> -Ah oui, et pour installer thunderbird, firefox, chromium, etc...</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">chromium</span> <span class="n">thunderbird</span> <span class="n">xchat</span> <span class="n">firefox</span> <span class="n">rhythmbox</span> <span class="n">pidgin</span> <span class="n">transmission</span><span class="o">-</span><span class="n">gtk</span> <span class="n">vlc</span> -</pre></div> - - -<p>Voila! Et comme dirait <a href="https://twitter.com/spartition">@Spartition</a>, c'est sale, mais qu'est-ce que c'est -bon!<br /> -A plus~</p>WxcafeFri, 05 Oct 2012 14:48:00 +0200tag:wxcafe.net,2012-10-05:posts/%D/archlinux-made-simple/ \ No newline at end of file +Linux, FUSE, etc&hellip;</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/ \ No newline at end of file diff --git a/output/feeds/feed.rss.programmation.xml b/output/feeds/feed.rss.programmation.xml deleted file mode 100644 index 2f40e21..0000000 --- a/output/feeds/feed.rss.programmation.xml +++ /dev/null @@ -1,198 +0,0 @@ - -Wxcafé//wxcafe.net/Sat, 08 Sep 2012 18:15:00 +0200Introduction a bash en tant que language de programmation.//wxcafe.net/posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/<p>L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).</p> -<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. </p> -<p>Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.)</p> -<p>Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p> -<p>De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code.<br /> -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le *) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée.</p> -<p>Quelques notions manquent ici:<br /> -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici.<br /> -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number.<br /> -être utilisées dans un programme bash.<br /> -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p> -<p>Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel.<br /> -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête.</p> -<p>J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p>WxcafeSat, 08 Sep 2012 18:15:00 +0200tag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/ \ No newline at end of file diff --git a/output/feeds/feed.rss.ranting.xml b/output/feeds/feed.rss.ranting.xml index 0281159..53da18e 100644 --- a/output/feeds/feed.rss.ranting.xml +++ b/output/feeds/feed.rss.ranting.xml @@ -1,39 +1,39 @@ -Wxcafé//wxcafe.net/Mon, 17 Feb 2014 05:02:00 +0100NAT//wxcafe.net/posts/%D/nat/<p>NAT (Network Address Translation) in a word?<br /> -It's complicated. Very. Don't do it, you'd damage your brain. </p> -<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/%D/nat/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are +Wxcafé//wxcafe.net/Mon, 17 Feb 2014 05:02:00 +0100NAT//wxcafe.net/posts/nat/<p>NAT (Network Address Translation) in a word?<br /> +It&rsquo;s complicated. Very. Don&rsquo;t do it, you&rsquo;d damage your brain. </p> +<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/nat/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p> -<p>Bon, voila. J'ai passé le cap. Je suis sous GNU/Linux depuis un certain +<p>Bon, voila. J&rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain temps, maintenant, et depuis un certain temps je remarque des -changements malvenus. Bien entendu, au début, je n'avais pas les +changements malvenus. Bien entendu, au début, je n&rsquo;avais pas les connaissances nécessaires pour comprendre ne serait-ce que ces modifications existaient. Et puis certaines sont arrivées avant que je -n'ai même idée que quelque chose dans mon système d'exploitation avait +n&rsquo;ai même idée que quelque chose dans mon système d&rsquo;exploitation avait cette fonction la. Par exemple, udev, ou policykit/consolekit/. A -l'époque, je n'avais aucune idée de la façon dont les disques étaient -montés sur mon système. Le premier système non-Windows que j'ai utilisé +l&rsquo;époque, je n&rsquo;avais aucune idée de la façon dont les disques étaient +montés sur mon système. Le premier système non-Windows que j&rsquo;ai utilisé fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je cherche a démonter le système pour comprendre comment il fonctionnait en -profondeur. Cependant, avec le temps, les connaissances s'accumulant et -mon niveau de compréhension du système s'améliorant, j'ai commencé a -remarquer que certain bouts de l'OS ne collaient pas exactement avec les -autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a -cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma -compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne +profondeur. Cependant, avec le temps, les connaissances s&rsquo;accumulant et +mon niveau de compréhension du système s&rsquo;améliorant, j&rsquo;ai commencé a +remarquer que certain bouts de l&rsquo;OS ne collaient pas exactement avec les +autres. Bien sur, je ne saurais dire si cette réalisation s&rsquo;est faite a +cause de la recrudescence de ces bouts d&rsquo;OS, ou bien juste a cause de ma +compréhension plus poussée. Toujours est-il que ces petits bouts d&rsquo;OS ne s’adaptant pas au reste du système se faisaient de plus en plus visible. -Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai -choisi de passer a Archlinux. C'était avant le passage a systemd. Ce -système me convenait bien. Si je n'installais pas Gnome, ce que je ne +Et puis, un jour, j&rsquo;en ai eu marre de voir unity sur ma machine, et j&rsquo;ai +choisi de passer a Archlinux. C&rsquo;était avant le passage a systemd. Ce +système me convenait bien. Si je n&rsquo;installais pas Gnome, ce que je ne comptais pas faire, il ne me forçait pas a installer un *kit -quelconque, ni dbus. Oui, udev était toujours la, mais c'était le moins +quelconque, ni dbus. Oui, udev était toujours la, mais c&rsquo;était le moins envahissant de ceux la.</p> <p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les premiers sont probablement très efficaces dans leur domaine, et le -second n'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la -distribution d'avoir au plus vite les dernières versions de tout. +second n&rsquo;a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la +distribution d&rsquo;avoir au plus vite les dernières versions de tout. Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient -pas les seuls a faire ça...) ont un problème très précis, qui n'importe +pas les seuls a faire ça&hellip;) ont un problème très précis, qui n&rsquo;importe pas a tout le monde, mais qui est très gênant pour ceux a qui il importe, et ce problème est que ces systèmes ne respectent absolument pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en @@ -42,332 +42,174 @@ ces 9 principes :</p> <li>Ce qui est petit est beau</li> <li>Faites en sorte que chaque programme fasse une chose, bien.</li> <li>Faites un prototype aussi vite que possible</li> -<li>Choisissez la portabilité plutôt que l'efficacité</li> +<li>Choisissez la portabilité plutôt que l&rsquo;efficacité</li> <li>Stockez les données dans des fichiers textes.</li> <li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li> <li>Utilisez des scripts shells pour faciliter la portabilité et la réutilisation.</li> -<li>Évitez les UI qui "capturent" l'utilisateur.</li> +<li>Évitez les UI qui &ldquo;capturent&rdquo; l&rsquo;utilisateur.</li> <li>Faites de chaque programme un filtre.</li> </ol> -<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et -on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas -exactement la façon dont l'informatique fonctionne. Effectivement, les -standards, les systèmes d'exploitation, les logiciels, tout doit évoluer -- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est -pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et -celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La -philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans -de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br /> -La philosophie UNIX est aussi et surtout une garantie d'utilisabilité +<p>Alors bien entendu, un système d&rsquo;exploitation est fait pour évoluer, et +on pourrait penser qu&rsquo;UNIX a fait son temps. Cependant, ce n&rsquo;est pas +exactement la façon dont l&rsquo;informatique fonctionne. Effectivement, les +standards, les systèmes d&rsquo;exploitation, les logiciels, tout doit évoluer +- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&rsquo;est +pas d&rsquo;UNIX que nous parlons ici. C&rsquo;est de la <em>philosophie</em> UNIX. Et +celle-ci n&rsquo;a pas fait son temps, <strong>elle a fait ses preuves.</strong> La +philosophie UNIX, en plus d&rsquo;être efficace sur le papier, a aussi 44 ans +de tests derrière elle, et fonctionne aussi bien qu&rsquo;au premier jour.<br /> +La philosophie UNIX est aussi et surtout une garantie d&rsquo;utilisabilité et de simplicité pour les administrateurs systèmes, pour les -développeurs, bref pour tous ceux qui font de l'informatique -<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique +développeurs, bref pour tous ceux qui font de l&rsquo;informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l&rsquo;informatique ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce sont ceux qui sont les plus proches du système).</p> -<p>Tous OS se doit d'avoir un système standardisé pour faire communiquer +<p>Tous OS se doit d&rsquo;avoir un système standardisé pour faire communiquer les programmes entre eux. UNIX a un système de pipes, des sortes de -fichiers spéciaux permettant d'échanger des informations. C'est -efficace, ça respecte le "tout est fichier", c'est standard, c'est +fichiers spéciaux permettant d&rsquo;échanger des informations. C&rsquo;est +efficace, ça respecte le &ldquo;tout est fichier&rdquo;, c&rsquo;est standard, c&rsquo;est simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient -remplacer ça, avec une interface qui n'est explicitement pas faite pour -être utilisée a la ligne de commande mais a l'aide d'APIs, et un -programme monolithique qui effectue sa tache d'une façon complètement -obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon -efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus -"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est -<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est -horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus -lire facilement les échanges entre programmes. C'est peu pratique, en +remplacer ça, avec une interface qui n&rsquo;est explicitement pas faite pour +être utilisée a la ligne de commande mais a l&rsquo;aide d&rsquo;APIs, et un +programme monolithique qui effectue sa tache d&rsquo;une façon complètement +obscure pour l&rsquo;utilisateur. Alors bien sur, il l&rsquo;effectue d&rsquo;une façon +efficace, cette tache. Oui, ça va plus vite qu&rsquo;avant. Oui, c&rsquo;est plus +&ldquo;rangé&rdquo;, ça fait moins &ldquo;fouillis&rdquo;. Mais c&rsquo;est moins efficace. C&rsquo;est<em>beaucoup</em> moins utilisable pour l&rsquo;utilisateur final. C&rsquo;est +horriblement chiant pour les sysadmins, parce qu&rsquo;ils ne peuvent plus +lire facilement les échanges entre programmes. C&rsquo;est peu pratique, en fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br /> Systemd prend le même parti de créer une interface unifiée, accessible via des appels a des APIs uniquement, complètement obscure, extrêmement abstraite, bien entendu monolithique, et très peu ouverte a la -modification par l'utilisateur final. Alors oui, il parait que ça -augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques +modification par l&rsquo;utilisateur final. Alors oui, il parait que ça +augmente la vitesse de boot. Eh bien, au risque d&rsquo;en choquer quelques uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement et que je puisse modifier facilement, et qui soit ouvert, compréhensible -et distribué. C'est presque comme si les projets freedesktop.org avaient +et distribué. C&rsquo;est presque comme si les projets freedesktop.org avaient pour but de remplacer la base UNIX de linux en créant un système -concurrent, bâtard, bâti sur le kernel Linux mais n'employant plus les -systèmes basiques d'UNIX.</p> -<p>Le problème est qu'il est facilement visible que la direction prise par -la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni +concurrent, bâtard, bâti sur le kernel Linux mais n&rsquo;employant plus les +systèmes basiques d&rsquo;UNIX.</p> +<p>Le problème est qu&rsquo;il est facilement visible que la direction prise par +la communauté Linux n&rsquo;est pas celle du retour sur les systèmes UNIX ni celle du développement de solutions respectant la philosophie UNIX, mais -remises au gout du jour (?), mais est bien d'accepter et de pousser les +remises au gout du jour (?), mais est bien d&rsquo;accepter et de pousser les changements apportés par les projets freedesktop.org directement dans le cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font partie de nombreux développeurs de ces projets), a déjà adopté tous ces -changements (archlinux aussi, mais pour d'autres raisons...), et on peut -compter sur le fait que les autres distributions l'adopteront un jour ou -l'autre.</p> -<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces -systèmes, tout du moins exprimé les raisons qui font qu'ils me -déplaisent, on pourrait penser qu'il suffit de passer a une distribution -n'incluant pas systemd, voire a une distribution n'incluant pas du tout +changements (archlinux aussi, mais pour d&rsquo;autres raisons&hellip;), et on peut +compter sur le fait que les autres distributions l&rsquo;adopteront un jour ou +l&rsquo;autre.</p> +<p>Bon, maintenant que nous avons, si ce n&rsquo;est démontré la nocivité de ces +systèmes, tout du moins exprimé les raisons qui font qu&rsquo;ils me +déplaisent, on pourrait penser qu&rsquo;il suffit de passer a une distribution +n&rsquo;incluant pas systemd, voire a une distribution n&rsquo;incluant pas du tout de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur archlinux. Cependant, avec un peu de réflexion, on voit que si des distributions comme archlinux et Fedora ont adopté systemd (et -qu'OpenSUSE est en train de l’intégrer), il est probable que cela +qu&rsquo;OpenSUSE est en train de l’intégrer), il est probable que cela devienne un standard au fil des années, et que seuls survivent systemd -et upstart, le gestionnaire de démarrage d'ubuntu, qui ne changera +et upstart, le gestionnaire de démarrage d&rsquo;ubuntu, qui ne changera probablement pas (je les vois mal revenir en arrière sur ce point.) -Toujours est-il que l'init héritée du System V semble condamnée a mourir +Toujours est-il que l&rsquo;init héritée du System V semble condamnée a mourir sous Linux. Il pourrait être judicieux de passer sous debian squeeze, qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne la recevra probablement que dans 2/3 ans. Cependant, cette période est -toujours trop courte, et met sur mon système d'exploitation une date -d'expiration, chose qui ne me plait que moyennement. Non, la solution -est de passer sous un système autre, qui ait son propre système d'init +toujours trop courte, et met sur mon système d&rsquo;exploitation une date +d&rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution +est de passer sous un système autre, qui ait son propre système d&rsquo;init (ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options -principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas -vraiment un choix, vu le peu de programmes qu'il permet de faire -fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui -n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku -n'est pas un choix non plus, puisque le but est de rester dans une +principales s&rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&rsquo;est pas +vraiment un choix, vu le peu de programmes qu&rsquo;il permet de faire +fonctionner et le fait qu&rsquo;il ne soit disponible que sur i386, ce qui +n&rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku +n&rsquo;est pas un choix non plus, puisque le but est de rester dans une optique UNIX.</p> -<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai +<p>OpenSolaris est un système d&rsquo;exploitation tout a fait valable. Je n&rsquo;ai en théorie aucun problème sur cet OS, sauf que certains choix de design -ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet, +ne correspondent pas du tout a l&rsquo;idée que j&rsquo;ai d&rsquo;un OS. En effet, OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de ses outils, avec des paquets modifiés pour les rendre plus simples a utiliser (fichiers de configuration fournis par défaut, par exemple, et -autres patchs "release-only"), et une tendance a faire des scripts et -des outils installés par défaut pour tout et n'importe quoi. Bref, cela -n'est pas le sujet. Il convient aussi de voir qu'avec la récente +autres patchs &ldquo;release-only&rdquo;), et une tendance a faire des scripts et +des outils installés par défaut pour tout et n&rsquo;importe quoi. Bref, cela +n&rsquo;est pas le sujet. Il convient aussi de voir qu&rsquo;avec la récente acquisition de Sun par Oracle, il est possible que le projet OpenSolaris -n'ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du -projet affiche d'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> -<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD -ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est +n&rsquo;ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du +projet affiche d&rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> +<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&rsquo;OpenBSD, NetBSD +ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&rsquo;est simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour -réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir -DFBSD ressemble aussi au système de l'assistance a l'user a outrance -décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment +réputation d&rsquo;être orientées sécurité, et d&rsquo;après ce que j&rsquo;ai pu en voir +DFBSD ressemble aussi au système de l&rsquo;assistance a l&rsquo;user a outrance +décris plus haut. Mais la vérité est que je n&rsquo;ai pas fait suffisamment de recherches et que FreeBSD ne va me voir arriver que par hasard, parce -qu'entre toutes les BSD ca me semble la plus sympa et la plus agréable a -utiliser, plus le fait que le système de ports me convient bien (j'aime +qu&rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a +utiliser, plus le fait que le système de ports me convient bien (j&rsquo;aime pouvoir configurer mes logiciels de façon assez profonde.)</p> -<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien +<p>Voila, c&rsquo;est mon avis sur ce &ldquo;problème&rdquo; actuel du monde de Linux. Bien entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins -n'apparaissent jamais chez certaines distributions, créant de ce fait un +n&rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un choix pour les utilisateurs.<br /> -[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/%D/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> -J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire +[1]: Je n&rsquo;ai pas trouvé de traduction satisfaisante a &ldquo;software leveraging&rdquo;, mais l&rsquo;idée est la&hellip;*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> +J&rsquo;ai annoncé il y a environ 20 jours que j&rsquo;avais pour projet de faire une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée -PiRatBox. Il se trouve qu'après de nombreux essais, un problème -récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez +PiRatBox. Il se trouve qu&rsquo;après de nombreux essais, un problème +récurrent apparait: le Raspberry Pi n&rsquo;est pas capable de fournir assez de courant par défaut pour faire fonctionner a la fois un disque dur et une antenne WiFi.<br /> -Alors, autant il me semble évident qu'avec une -alimentation provenant d'un port USB a 2A (max), je n'avais pas -énormément de chances d'avoir 2A sur chacun des ports host du Raspi, +Alors, autant il me semble évident qu&rsquo;avec une +alimentation provenant d&rsquo;un port USB a 2A (max), je n&rsquo;avais pas +énormément de chances d&rsquo;avoir 2A sur chacun des ports host du Raspi, autant avoir moins de 250 mA sur chacun de ces ports me semble un tout petit peu exagéré en terme de rentabilité. </p> <p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me -servant a rien) (vous savez, celui qui est monté en USB...), qui +servant a rien) (vous savez, celui qui est monté en USB&hellip;), qui consomme énormément, est assez louche. Il devrait toujours être possible de désactiver une device USB, me semble-t-il, au niveau logiciel. La, -bien qu'il soit surement possible de la désactiver au niveau du kernel, -il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien +bien qu&rsquo;il soit surement possible de la désactiver au niveau du kernel, +il n&rsquo;est pas <strong>simplement</strong> possible de la &ldquo;débrancher&rdquo;. Ce qui est bien chiant, étant donné le besoin évident de puissance électrique dans lequel on se retrouve. </p> -<p>Bon, je dois avouer n'avoir pas testé de lancer les différents services +<p>Bon, je dois avouer n&rsquo;avoir pas testé de lancer les différents services composant le système des piratebox sous arch, pour la simple <del>et -bonne</del> raison qu'arch utilise systemd et qu'il n'existe pas de wrapper -systemd pour les daemons piratebox, et que j'ai la flemme d'en faire, +bonne</del> raison qu&rsquo;arch utilise systemd et qu&rsquo;il n&rsquo;existe pas de wrapper +systemd pour les daemons piratebox, et que j&rsquo;ai la flemme d&rsquo;en faire, parce que systemd est une horreur a utiliser avec les scripts init. Donc -non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas +non, j&rsquo;utiliserai debian. Le problème d&rsquo;utiliser debian dans ce cas précis est que apt/dpkg a une gestion des dépendances dans un sens mais -pas dans l'autre, en ce sens que si on installe un package "haut", c'est +pas dans l&rsquo;autre, en ce sens que si on installe un package &ldquo;haut&rdquo;, c&rsquo;est a dire dépendant de plusieurs autres packages, apt/dpkg se charge -efficacement d'installer toutes les dépendances nécessaires, tandis que -si on désinstalle un package "bas", c'est a dire sur lequel de nombreux +efficacement d&rsquo;installer toutes les dépendances nécessaires, tandis que +si on désinstalle un package &ldquo;bas&rdquo;, c&rsquo;est a dire sur lequel de nombreux autres packages dépendent, apt/dpkg ne désinstalle pas ces packages -"hauts", ce qui pose un vrai problème quand on se retrouve sur un -Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui -sera installé sur le système avant l'installation proprement dite -(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd +&ldquo;hauts&rdquo;, ce qui pose un vrai problème quand on se retrouve sur un +Raspberry Pi, puisqu&rsquo;il n&rsquo;y a pas de moyen &ldquo;facile&rdquo; de choisir ce qui +sera installé sur le système avant l&rsquo;installation proprement dite +(puisque le moyen &ldquo;universel&rdquo; d&rsquo;installation sur Raspberry Pi est le dd vers la SD qui sert de disque système.)</p> -<p>Il y a <strong>énormément</strong> d'autres critiques que l'ont pourrait faire -concernant le Raspberry Pi. Son système de démarrage a s'arracher les +<p>Il y a <strong>énormément</strong> d&rsquo;autres critiques que l&rsquo;ont pourrait faire +concernant le Raspberry Pi. Son système de démarrage a s&rsquo;arracher les cheveux, par exemple. En effet, plutôt que de faire comme tout pc normalement constitué ou la partie calcul démarre, lance le bootloader, -cherche le kernel de l'OS qui lui même se lance, initialise le hardware, -etc..., a un système bâtard du au fait que la puce au centre de la carte +cherche le kernel de l&rsquo;OS qui lui même se lance, initialise le hardware, +etc&hellip;, a un système bâtard du au fait que la puce au centre de la carte est a la base une puce graphique a laquelle on a greffé un cœur de -calcul (probablement au fond d'une cour d'immeuble, dans les quartiers -pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le -plus efficace qu'aient trouvé les personnes ayant implémenté cette +calcul (probablement au fond d&rsquo;une cour d&rsquo;immeuble, dans les quartiers +pauvres de Bratislava, vu la propreté de la greffe&hellip;), et le moyen le +plus efficace qu&rsquo;aient trouvé les personnes ayant implémenté cette atrocité de gérer le boot est donc de faire démarrer le cœur graphique en premier, ce dernier exécute un code propriétaire pour démarrer le cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel -etc... </p> +etc&hellip; </p> <p>Ce qui non seulement complique énormément le boot, non seulement ajoute -du code propriétaire a un projet se disant libre, mais en plus n'est -<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, -oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p> -<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je -le terminerai dès que j'aurai récupéré les outils nécessaires pour +du code propriétaire a un projet se disant libre, mais en plus n&rsquo;est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, +oui, mais uniquement quand c&rsquo;est bien réalisé, sinon je dis non. </p> +<p>Enfin, le projet que j&rsquo;avais est toujours en cours de réalisation. Je +le terminerai dès que j&rsquo;aurai récupéré les outils nécessaires pour monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa -vie. Les problèmes qu'il m'a posé, qu'il n'aurait pas du me poser, m'ont -trop agacé pour que j'aie envie de le sortir et de jouer avec une fois +vie. Les problèmes qu&rsquo;il m&rsquo;a posé, qu&rsquo;il n&rsquo;aurait pas du me poser, m&rsquo;ont +trop agacé pour que j&rsquo;aie envie de le sortir et de jouer avec une fois sa mission remplie. </p> -<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/%D/update-et-pensees-a-propos-du-raspberry-pi/La séparation des églises et de l'état, une idée qu'elle est bonne?//wxcafe.net/posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/<p>Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter?</p> -<p>Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. </p> -<p>L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. </p> -<p>Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine <strong>doit</strong>fournir toutes ses -informations au gouvernement américain <strong>sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.</strong> </p> -<p>Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire <a href="http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/">cet article</a> de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. </p> -<p>Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <code>&lt;troll&gt;</code>Apple -Maps<code>&lt;/troll&gt;</code>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. </p> -<p>De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. </p> -<p>Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. </p> -<p>Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.<br /> -Voila, a bientôt!</p>WxcafeThu, 13 Dec 2012 03:08:00 +0100tag:wxcafe.net,2012-12-13:posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/L'informatique a l'école//wxcafe.net/posts/%D/linformatique-a-lecole/<p>Après avoir lu <a href="http://t.co/5PTfe6zu">cet article</a> paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.</p> -<p>En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu <a href="http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers - Heroes of the Computer Revolution</a> de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.</p> -<p>Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre <a href="http://en.wikipedia.org/wiki/IWoz">iWoz</a>) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. </p> -<p>Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.</p> -<p>C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...</p> -<p>Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.</p> -<p>Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.</p>WxcafeMon, 15 Oct 2012 20:34:00 +0200tag:wxcafe.net,2012-10-15:posts/%D/linformatique-a-lecole/ \ No newline at end of file +<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/ \ No newline at end of file diff --git a/output/feeds/feed.rss.teaching.xml b/output/feeds/feed.rss.teaching.xml deleted file mode 100644 index 97e13c3..0000000 --- a/output/feeds/feed.rss.teaching.xml +++ /dev/null @@ -1,311 +0,0 @@ - -Wxcafé//wxcafe.net/Tue, 25 Sep 2012 10:28:00 +0200Les systèmes de fichiers//wxcafe.net/posts/%D/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>WxcafeTue, 25 Sep 2012 10:28:00 +0200tag:wxcafe.net,2012-09-25:posts/%D/les-systemes-de-fichiers/Les différentes couches d'un système d'exploitation//wxcafe.net/posts/%D/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>WxcafeThu, 06 Sep 2012 23:29:00 +0200tag:wxcafe.net,2012-09-06:posts/%D/les-differentes-couches-dun-systeme-dexploitation/La programmation expliquée simplement//wxcafe.net/posts/%D/la-programmation-expliquee-simplement/<p>Salut!<br /> -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. </p> -<p>Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.<br /> -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation<br /> -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. </p> -<p>Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.<br /> -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. </p> -<p>La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.<br /> -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. </p> -<p>Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. </p> -<p>Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>WxcafeMon, 27 Aug 2012 00:22:00 +0200tag:wxcafe.net,2012-08-27:posts/%D/la-programmation-expliquee-simplement/GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère//wxcafe.net/posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique.</p> -<p>GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.</p> -<p>De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une?</p> -<p>Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes.</p> -<p>Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable.</p> -<p>N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :)</p> -<p>A bientôt!</p>WxcafeWed, 22 Aug 2012 20:33:00 +0200tag:wxcafe.net,2012-08-22:posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/ \ No newline at end of file diff --git a/output/feeds/feed.rss.tutorial.xml b/output/feeds/feed.rss.tutorial.xml deleted file mode 100644 index 13da248..0000000 --- a/output/feeds/feed.rss.tutorial.xml +++ /dev/null @@ -1,368 +0,0 @@ - -Wxcafé//wxcafe.net/Fri, 07 Nov 2014 13:04:00 +0100OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/%D/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de -changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la -gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais -effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un -serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA -(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou -serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du -destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le -mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis -le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et -<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> -pour filtrer les mails entrants et sortants. -Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> -</pre></div> - - -<p>Normalement, ceci devrait être a peu près clair. -Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de -nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, -qui a ce moment-ci trie en fonction de la destination : les mails gérés -par le domaine vont via dovecot dans les boites mail des destinataires -locaux, les mails exterieurs vont directement vers le MTA du serveur -distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon -dont les différents services vont communiquer.</p> -<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de -signer, nous allons profiter de cette configuration et donc lui parler en SMTP -sur ces ports.</p> -<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail -Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, -<code>/var/run/dovecot/lmtp</code>).</p> -<p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> -</pre></div> - - -<p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> -</pre></div> - - -<p>Pour les mails entrants.</p> -<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai -ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. -Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce -post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> -</pre></div> - - -<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> -<p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> - -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> - -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> - -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> - -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> - -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> - -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> -</pre></div> - - -<p>Expliquons un peu ce fichier de configuration :</p> -<ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> -<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : - port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> -<li>Les alias sont définis juste après</li> -<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : - 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> -<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail - traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore - été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 - donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième - ligne matchant tous les mails arrivant et la première seulement ceux filtrés, - inverser leur sens voudrait dire que les mails seraient toujours renvoyés a - amavis</li> -<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que - pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au - dessus.</li> -</ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit -écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne -mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du -POP3[s], différents guides sont trouvables facilement sur internet.</p> -<p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> - -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> - -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> - -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> - -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> - -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> - -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> - -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> - -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> - -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>pour identifier les utilisateurs système</strong></p> -<p>Ici aussi, voyons comment ce fichier est structuré :</p> -<ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. - Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs - mots de passe avec PAM (ou BSDAuth)</li> -<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> -<li>Nous configurons le SSL</li> -<li>Le section suivante contient la configuration des services. Nous avons en - premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. - La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> -<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> -<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et - quel dossier utiliser pour sa configuration.</li> -</ul> -<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir -a deux choses : signer les emails sortants, et filtrer les emails entrants. Il -doit donc écouter sur les port 10026 pour les signatures et 10024 pour le -filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun -risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les -modifications nécessaires a la fin du fichier.</p> -<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) -<code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> - -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> - -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> - -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> - -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> - -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> - -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> -</pre></div> - - -<p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se - trouve la clé privée servant a signer les emails. -- le second définit les options DKIM que nous souhaitons utiliser comme défaut. - Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> -- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les - paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel - ils viennent. -- nous savons que les emails venants du port 10026 sont sortants, nous les - traitons donc comme tel -- le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre - serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a - prévenir en cas de spam/virus venants de notre système, et que nous voulons - être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de - les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature -des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en -fait inclus par défaut dans amavis.</p> -<p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un -tutorial</a>) -mais de nombreuses autre méthodes existent. -Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> - -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -</pre></div> - - -<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser -le required_score pour ma part.</p> -<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et -spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/%D/opensmtpd-debian/ \ No newline at end of file diff --git a/output/feeds/feed.rss.tutoriel.xml b/output/feeds/feed.rss.tutoriel.xml index c5c4ae9..785b556 100644 --- a/output/feeds/feed.rss.tutoriel.xml +++ b/output/feeds/feed.rss.tutoriel.xml @@ -1,42 +1,404 @@ -Wxcafé//wxcafe.net/Thu, 28 Aug 2014 12:16:00 +0200Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/%D/freebsd-online-mfsbsd/<p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad) +Wxcafé//wxcafe.net/Fri, 07 Nov 2014 13:04:00 +0100OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/opensmtpd-debian/<p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant +comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de +changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge +aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la +gestion de mon système de mails.</p> +<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais +effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un +projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un +serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux +qu&rsquo;a le projet OpenBSD, globalement).</p> +<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA +(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou +serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du +destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le +mail au destinataire.</p> +<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération +ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches +sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis +le serveur, des yeux pour la lecture).</p> +<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir +des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour +ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et +<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> +pour filtrer les mails entrants et sortants. +Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮ + │╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │ + mail in ││ │ │ │ amavis │ +───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ +&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ +</pre></div> + + +<p>Normalement, ceci devrait être a peu près clair. +Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais +aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails +venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de +nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, +qui a ce moment-ci trie en fonction de la destination : les mails gérés +par le domaine vont via dovecot dans les boites mail des destinataires +locaux, les mails exterieurs vont directement vers le MTA du serveur +distant.</p> +<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon +dont les différents services vont communiquer.</p> +<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port +10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et +écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de +signer, nous allons profiter de cette configuration et donc lui parler en SMTP +sur ces ports.</p> +<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail +Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, +<code>/var/run/dovecot/lmtp</code>).</p> +<p>Ainsi, pour reprendre le schéma présenté plus haut :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮ + │╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ +25 &lt;────────│&lt;───────────╯ │ + ╰───────────────╯ +</pre></div> + + +<p>Pour les mails sortants; et</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮ + │╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ +</pre></div> + + +<p>Pour les mails entrants.</p> +<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai +ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour +d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p> +<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. +Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce +post</a>)</p> +<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new +</pre></div> + + +<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> +<p><code>/etc/smtpd.conf</code></p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span> +<span style="color: #75715e"># See smtpd.conf(5) for more information.</span> + +<span style="color: #75715e">## Certs</span> +pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span> +pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span> + +<span style="color: #75715e">## Ports to listen on, and how to listen on them</span> +listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional +listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source +listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source + +<span style="color: #75715e">## Aliases</span> +table aliases file:/etc/aliases + +<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span> +listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered +<span style="color: #75715e"># coming from amavisd, signed with DKIM</span> +listen on lo port <span style="color: #ae81ff">10027</span> tag Signed + +<span style="color: #75715e">## Receiving</span> +<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span> +accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span> +<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span> +accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span> +<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span> + +<span style="color: #75715e">## Sending</span> +<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span> +accept tagged Signed <span style="color: #66d9ef">for</span> any relay +<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span> +accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span> +<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span> +</pre></div> + + +<p>Expliquons un peu ce fichier de configuration :</p> +<ul> +<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration + d&rsquo;emplacement des certificats SSL.</li> +<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : + port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> +<li>Les alias sont définis juste après</li> +<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : + 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants + comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on + taggue les mails sortants comme &ldquo;Signed&rdquo;</li> +<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail + traité est taggué comme Filtered, alors il a été vérifié par amavis, et on + peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore + été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 + donc). Il est important de mettre les déclarations dans ce sens, car la + première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième + ligne matchant tous les mails arrivant et la première seulement ceux filtrés, + inverser leur sens voudrait dire que les mails seraient toujours renvoyés a + amavis</li> +<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que + pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed + on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par + DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le + problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au + dessus.</li> +</ul> +<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit +écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les +emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant +qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne +mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du +POP3[s], différents guides sont trouvables facilement sur internet.</p> +<p><code>/etc/dovecot/dovecot.conf</code></p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span> + +<span style="color: #75715e"># basic config</span> +<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log +<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log +<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span> +<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail + +<span style="color: #75715e"># authentication</span> +passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +userdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd +<span style="color: #f92672">}</span> + +<span style="color: #75715e"># the protocols we use</span> +<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve + +<span style="color: #75715e"># ssl config</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes + +<span style="color: #75715e">## configuring services </span> +<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span> +service imap-login <span style="color: #f92672">{</span> + inet_listener imap <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span> + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> + +service lmtp <span style="color: #f92672">{</span> + unix_listener lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666 + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> + +<span style="color: #75715e">## configuring protocols</span> +<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span> +protocol lda <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> + +protocol lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> + +plugin <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve + <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve +<span style="color: #f92672">}</span> +</pre></div> + + +<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +</pre></div> + + +<p><strong>par</strong></p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth +<span style="color: #f92672">}</span> +</pre></div> + + +<p><strong>pour identifier les utilisateurs système</strong></p> +<p>Ici aussi, voyons comment ce fichier est structuré :</p> +<ul> +<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater + leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li> +<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs. + Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs + mots de passe avec PAM (ou BSDAuth)</li> +<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de + l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> +<li>Nous configurons le SSL</li> +<li>Le section suivante contient la configuration des services. Nous avons en + premier lieu le service IMAP, dont la configuration sert uniquement a + désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant + IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons. + La configuration de lmtp sert a attribuer des permissions plus correctes au + fifo qu&rsquo;il utilise</li> +<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> +<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et + quel dossier utiliser pour sa configuration.</li> +</ul> +<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir +a deux choses : signer les emails sortants, et filtrer les emails entrants. Il +doit donc écouter sur les port 10026 pour les signatures et 10024 pour le +filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en +SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun +risque a utiliser des protocoles non chiffrés. +Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les +modifications nécessaires a la fin du fichier.</p> +<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) +<code>/etc/amavis.conf</code> (OpenBSD)</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span> + +<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span> + +<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span> + <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span> + <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span> + <span style="color: #f8f8f2">}</span> +<span style="color: #f8f8f2">);</span> + +<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span> +<span style="color: #f8f8f2">};</span> + +<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span> + +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span> +<span style="color: #f8f8f2">};</span> + +<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span> +<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span> +</pre></div> + + +<p>A nouveau, expliquons ce fichier : +- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails + sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se + trouve la clé privée servant a signer les emails. +- le second définit les options DKIM que nous souhaitons utiliser comme défaut. + Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> +- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les + paramètres que nous utiliserons pour les emails venant de nos utilisateurs : + ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel + ils viennent. +- nous savons que les emails venants du port 10026 sont sortants, nous les + traitons donc comme tel +- le paragraphe suivant décrit le traitement que nous faisons subir aux emails + sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre + serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC + 4871</a>. Nous déclarons l&rsquo;adresse a + prévenir en cas de spam/virus venants de notre système, et que nous voulons + être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, + puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de + les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et + les notifications de succès d&rsquo;envoi. Et voila!</p> +<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature +des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en +fait inclus par défaut dans amavis.</p> +<p>Il nous reste cependant quelques opérations a faire, encore. +Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe +différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un +tutorial</a>) +mais de nombreuses autre méthodes existent. +Il nous reste encore a configurer spamassassin :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span> +<span style="color: #75715e"># report_safe 1</span> +<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span> +<span style="color: #75715e"># use_bayes 1</span> +<span style="color: #75715e"># bayes_auto_learn 1</span> +<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span> +<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span> +<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span> +<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span> +<span style="color: #75715e"># shortcircuit BAYES_99 spam</span> +<span style="color: #75715e"># shortcircuit BAYES_00 ham</span> + +<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span> +</pre></div> + + +<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser +le required_score pour ma part.</p> +<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et +spamassassin, et tout devrait fonctionner parfaitement</p> +<p>Bon courage pour votre hosting de mail ensuite&hellip;</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/freebsd-online-mfsbsd/<p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad) Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>) -et n'ayant pour différentes raisons pas eu l'occasion de le faire sur mon -<a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, -j'ai commencé a chercher comment le faire sur ce serveur.</p> -<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu +et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, +j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p> +<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums -d'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> -<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), -ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur +d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> +<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), +ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur alternatif, minimaliste et simplifié pour FreeBSD.</p> <p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le -panel Online. Une fois cela fait, lancez une console, puis téléchargez l'image +panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis -choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter -sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout +choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter +sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout a fait classique va démarrer. Une fois ceci fait, la partie importante arrive: -mfsbsd contient un script d'installation root-on-zfs, nommé logiquement +mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement zfsinstall, qui va se charger de tout le travail pour nous.</p> <p>Utilisez donc ce script ainsi : </p> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, wipons le MBR :</span> -<span class="n">dd</span> <span class="o">&lt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span> -<span class="cp"># maintenant, installons le système</span> -<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span> +dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1 +<span style="color: #75715e"># maintenant, installons le système</span> +zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c </pre></div> <p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée, -<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D'autres options +<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous convient pas.</p> <p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf :</p> -<div class="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">&quot;YES&quot;</span> -<span class="n">sshd_load</span><span class="o">=</span><span class="s">&quot;YES</span> -<span class="n">hostname</span><span class="o">=</span><span class="s">&quot;whatever&quot;</span> -<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">&quot;DHCP&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span> +<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span> +<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span> +<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span> </pre></div> @@ -44,11 +406,10 @@ système) et éditez /etc/rc.conf :</p> physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez maintenant un système FreeBSD tout propre installé sur zfs a découvrir et utiliser!</p> -<p>Voila, c'est la fin de ce tutoriel. -(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu +<p>Voila, c&rsquo;est la fin de ce tutoriel. +(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu crédible, disons)</p> -<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter -<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, +<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, <a href="https://twitter.com/petitefanfare">petitefanfare</a>, <a href="https://twitter.com/capet_ebooks">capet_ebooks</a>, <a href="https://twitter.com/zengisse">zengisse</a>, @@ -56,7 +417,7 @@ et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont code</a>, qui vient de <a href="https://twitter.com/m1sp">@m1sp</a> (<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p> -<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/%D/freebsd-online-mfsbsd/Mise en place d'un serveur DNS//wxcafe.net/posts/%D/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de +<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/Mise en place d'un serveur DNS//wxcafe.net/posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de domaines en différentes informations : adresses IPv4, adresses IPv6, certificats DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour @@ -64,54 +425,53 @@ simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a <a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a <a href="http://5.39.76.46">http://5.39.76.46</a>).</p> -<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque -en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que +<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque +en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que de nos jours. La configuration des serveurs DNS peut ainsi être assez contre intuitive. Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses enregistrements est important.</p> -<p>Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même +<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d'écrire, par exemple, -<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le -<code>.</code> n'est pas obligatoire et la progression se fait de droite a gauche. Par +du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le +<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine <code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point a la fin de façon courante.</p> -<p>Le reverse DNS est une variante du DNS "classique" permettant de résoudre les +<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre +Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger +quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS +sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre habituel</em></strong>, et du faux domaine .in-addr.arpa Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR 76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p> -<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, +<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord, quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des -"enregistrements", records en anglais. Par exemple, un record A indique une +&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom de domaine que vous donnez en argument, mais en précisant un autre type de -record, vous pouvez obtenir n'importe quelle information : par exemple, <code>dig NS +record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS wxcafe.net</code> devrait vous renvoyer</p> -<div class="highlight"><pre><span class="p">;</span> <span class="o">&lt;&lt;&gt;&gt;</span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o">&lt;&lt;&gt;&gt;</span> NS wxcafe.net -<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd -<span class="p">;;</span> Got answer<span class="o">:</span> -<span class="p">;;</span> <span class="o">-&gt;&gt;</span>HEADER<span class="o">&lt;&lt;-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span> -<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span> -<span class="p">;;</span> QUESTION SECTION<span class="o">:</span> -<span class="p">;</span>wxcafe.net. IN NS +<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> -<span class="p">;;</span> ANSWER SECTION<span class="o">:</span> -wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net. -wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net. +<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span> -<span class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec -<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span> -<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span> -<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span> </pre></div> @@ -121,12 +481,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et &l chacun fait autorité pour lui même, et le problème évident est que le résolveur ne peut résoudre la query si il est renvoyé encore et encore vers le même serveur. Il convient donc de définir dans le même fichier de configuration -l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième -loop, se rendra compte qu'il est en train de faire une boucle infinie et -demandera l'adresse au serveur auquel il est connecté. La première indication de +l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième +loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et +demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de direction se fait grâce au serveur du TLD.</p> <p>La configuration de bind est assez simple dans le principe, le plus complexe -étant en fait d'écrire les fichiers de zone. +étant en fait d&rsquo;écrire les fichiers de zone. La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il existe 4 fichiers de configuration principaux : <code>named.conf</code>, <code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>. @@ -136,48 +496,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher named.conf.options contient les options que vous rajoutez pour changer le comportement de bind.</p> <p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans -lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, +lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité, deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs (notamment mon accès chez moi). </p> -<p>Examinons tout d'abord les fichiers de configuration de named. -<code>named.conf.local</code> contient les définitions des zones forward et reverse. +<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse. Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont -gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce +gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence -principale étant que l'un héberge en slave les masters de l'autre. +principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre. Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p> -<div class="highlight"><pre><span class="n">zone</span> <span class="s">&quot;wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;home.wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> </pre></div> @@ -188,187 +547,184 @@ tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est assez parlant.</p> <p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit <code>/etc/bind/master/wxcafe.net</code> : </p> -<div class="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span> - <span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span> - <span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span> - <span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span> - <span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span> - <span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span> - <span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span> + <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span> + <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span> + <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span> + <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span> + <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span> + <span style="color: #f8f8f2">)</span> -<span class="p">;</span> <span class="n">Name</span> <span class="n">servers</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">SPF</span> <span class="s">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> -<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> -<span class="p">;</span> <span class="n">Aliases</span> -<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="p">;</span> <span class="p">[...]</span> -<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span> +<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span> +<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span> -<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span> +<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> </pre></div> <p>Alors. Expliquons ligne par ligne.<br /> -Tout d'abord, le TTL (time to live) est un paramètre définissant le temps +Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps pendant lequel les serveurs récursif (qui font un cache des données) doivent cacher ce fichier de zone. <br /> Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, wxcafe.net. <br /> Maintenant, nous arrivons a un record important : SOA (Start of Authority). -Ce record prend de nombreux arguments, dans l'ordre :<br /> +Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br /> - Le nameserver autoritaire pour le nom de domaine en question,<br /> - - L'adresse email du responsable de cette zone, avec le premier point + - L&rsquo;adresse email du responsable de cette zone, avec le premier point remplacé par un @, </p> <p>puis entre parenthèses :<br /> - - Le numéro de série ("version" du fichier de zone, ici au format + - Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format YYYYMMDDNN) <br /> - La période de refresh, période entre chaque mise a jour du nameserver authoritaire secondaire, <br /> - La période de retry, le temps entre chaque essai de mise a jour si le nameserveur authoritaire primaire est indisponible, <br /> - - La période d'expire, le temps qu'attendra le serveur autoritaire + - La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire secondaire avant de supprimer les informations de son cache si le primaire reste indisponible, et enfin <br /> - - La période de TTL négatif, le temps qu'attendra le serveur secondaire + - La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire avant de ne plus offrir les informations de cette zone si le serveur primaire est injoignable. </p> -<p>Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus +<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus important a lire (pour les humains en tout cas). Continuons : </p> <p>NS (nameserver) permet de désigner les différents nameservers faisant autorité pour ce domaine. </p> -<p>MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. -SPF est un record d'authentification pour les emails. -Les records A désignent l'association entre un nom de domaine et une adresse +<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine. +SPF est un record d&rsquo;authentification pour les emails. +Les records A désignent l&rsquo;association entre un nom de domaine et une adresse IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site -n'est pas encore en IPv6.</p> +n&rsquo;est pas encore en IPv6.</p> <p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de -mettre en place des domaines exactement semblables a d'autre (ce qui permet par -exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p> +mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par +exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p> <p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet de changer la valeur du @ et des noms de domaine non complets (qui ne se terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et -l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on -l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, +l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on +l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, cela permet de rediriger les requêtes nous parvenant et demandant un domaine se trouvant sous home.wxcafe.net.</p> <p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques -différences n'étant en fin de compte que des différences de valeurs (dues au -fait que, eh bah, c'est pas les mêmes domaines...).</p> -<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est +différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au +fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p> +<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC 1034</a> et le <a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant -aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/%D/mise-en-place-dun-serveur-dns/Sed Basics//wxcafe.net/posts/%D/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler +aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/Sed Basics//wxcafe.net/posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler le texte (ce qui se montre relativement indispensable dans un environnement Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu connu en détail, et la plupart du temps une seule fonction est utilisée : le remplacement de texte.<br /> Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p> -<p>Tout d'abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais -aussi un langage de manipulation de texte dérivé de <code>ed</code>, l'éditeur original. -<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas -personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des -machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs -dits "visuels", tels que vim, emacs, et globalement tous les éditeurs ayant un +<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais +aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas +personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des +machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs +dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du -concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d'une ligne a la fois. +concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois. En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p> -<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d'empêcher -l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui -permet de rediriger l'output dans le fichier d'input. Cela dit, l'intérêt unique +<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher +l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui +permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique du programme est son langage de manipulation de texte.</p> <p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des /). Ainsi, la commande de base dans <code>sed</code> est </p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/ </pre></div> <p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de -n'exécuter les commandes qui suivent que sur ces lignes.) </p> +n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p> <p><br/> -La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s'utilise de +La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de la façon suivante : </p> -<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span> </pre></div> <p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une regex) par [new text] (qui doit être un texte fixe, avec quelques exceptions), en appliquant [options], la plus connue des options étant <code>g</code>, -qui permet d'appliquer la commande affectée a toutes les occurrences du texte +qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte matché sur la/les lignes concernée-s.<br /> -Les exceptions a la "fixité" de [new text] sont particulièrement +Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard, -excepté le fait qu'il permet jusqu'à 9 "holding spaces", qui sont délimités par +excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par \( et \), et qui sont représentées dans le texte de remplacement par \1 à \9.</p> <p>Par exemple, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39; </pre></div> -<p>sur le texte "hello world world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world </pre></div> <p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le texte original. Ainsi, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&amp;</span> <span class="n">world</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39; </pre></div> -<p>sur le texte "hello world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world </pre></div> <p><br/></p> <p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans -l'espace courant :</p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span> +l&rsquo;espace courant :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p </pre></div> <p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire -dédié, que j'appelle l'espace courant (pattern space en anglais). La commande -<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit -le pattern space de façon a ce qu'il ne contienne que les lignes matchant, et le -<strong>p</strong> affiche donc ce dernier.</p> -<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s'utilisent ainsi :</p> -<div class="highlight"><pre><span class="n">c</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit +le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p> +<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \ +[text] </pre></div> <p>De la même façon, pour le i : </p> -<div class="highlight"><pre><span class="n">i</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \ +[text] </pre></div> <p>Et de même pour a. </p> -<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'elles +<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong> sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme @@ -379,26 +735,25 @@ space, et non sur la ligne en question.</p> /[regex]/d <strong>d</strong> (delete) supprime les contenus du pattern space.</p> <p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je -parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/%D/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé -au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier <em>en +parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé +au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a -ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou -bien la confidentialité d'un support de stockage, par exemple. Nous allons ici +ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou +bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici voir comment mettre en place un système de ce type sous GNU/Linux. Cet article -n'a pas pour but de vous apprendre a mettre en place un système basé sur une -procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en -jeu dans l'utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de -présenter un rapide tutoriel concernant la création d'un support chiffré sur +n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une +procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en +jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de +présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p> <p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système -du noyau Linux, et s'appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement -de disques. Comme son nom l'indique, device-mapper est un système qui a pour but +du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement +de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère -comme "block device" tout fichier spécial (en gros, les fichiers disques dans -<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le +comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de -fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. -Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. +fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad. +Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes. Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans /dev, et device-mapper est requis pour pouvoir en voir les partitions (qui apparaîtront donc dans /dev/mapper)</p> @@ -408,59 +763,59 @@ déchiffre a la volée tous les accès disques a ce périphérique non chiffré traduisant sur le système de fichier chiffré, le tout de manière tout a fait transparente pour les applications utilisant le disque en question. Cela induit bien entendu une baisse de performance relativement significative dans le cas -d'un chiffrement du système de fichier root, mais quasiment insignifiante dans +d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans le cas de chiffrement de partitions de données.</p> -<p>D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer +<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer si le système de fichier root est chiffré. Dans ce cas précis, la procédure de -boot <strong><em>doit</em></strong> s'appuyer sur une image initrd (l'initrd est un système de +boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de fichier minimal qui sert uniquement a initialiser le système. Les kernels de base de la plupart des distributions GNU/Linux en utilisent un dans tous les cas, pour des raisons de compatibilité) et sur une partition de boot qui elle -n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge +n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et -charge l'initrd en RAM, celui-ci a son tour lance un script permettant de +charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de charger les modules nécessaires a la suite du boot (que ce soit pour un boot sans disque root local, ou bien comme ici avec un système chiffré), puis le -système de fichier "cible" est remonté sur la racine, et l'initrd est démonté -est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend +système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté +est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend depuis le système de fichier maintenant monté sur la racine.</p> <p>La méthode la plus évidente pour contourner le chiffrement du disque est alors -de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par +de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par un autre modifié, copiant par exemple la phrase de passe permettant de déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir -contre ce genre d'attaques : l'une des plus simple est de faire un checksum du +contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot -que l'initrd présente toujours le même checksum. Cela dit, cette méthode a -l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès +que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a +l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès a un fichier initrd reconnu comme sûr.<br /> Une autre approche consisterait a placer le système de fichier /boot sur un périphérique dédié, protégé en écriture de façon matérielle (par exemple, une carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et -protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un -attaquant de modifier ce système de fichier, et l'initrd est alors toujours de +protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un +attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de confiance. Cependant, cela a pour conséquence de rendre la mise a jour de -l'initrd et du noyau <em>beaucoup</em> plus difficile qu'elle ne le serait sans.</p> +l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p> <p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop, -l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est -maintenant responsable de l'utilisation <em>userspace</em> de dm-crypt, qui pour sa +l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est +maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la -manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier +manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi obligatoirement être capables de le faire en tant que root. </p> <p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br /> -Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, -dans une situation réelle ou l'on cherche a chiffrer un disque, il convient -d'utiliser /dev/urandom comme source, pour éviter la détection du système de +Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela, +dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient +d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de fichier chiffré sur le disque. Ici, par exemple, nous allons faire : </p> -<div class="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img </pre></div> <p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img </pre></div> @@ -470,34 +825,34 @@ passphrase. Il convient ici de choisir une passphrase particulièrement sûre, puisque toute personne ayant accès a la passphrase aura aussi accès au disque et donc a vos secrets.<br /> Une fois cela fait, nous allons mapper cette image : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto </pre></div> <p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes, -puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous -voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En +puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous +voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les -systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque -qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque +systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque +qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque virtuel qui correspond a notre image. Il se comporte comme toute partition, et peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. Il se comporte en effet comme une partition, et non comme un véritable disque.) -Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de -le faire, pour pouvoir l'utiliser. </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> +Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de +le faire, pour pouvoir l&rsquo;utiliser. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto </pre></div> <p>Maintenant que notre disque est formaté, il peut être monté : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt </pre></div> <p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat suivant : </p> -<div class="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) </pre></div> @@ -507,82 +862,82 @@ sont (en fonction de votre passphrase) en sécurité. </p> <ul> <li> <p>Pour monter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o">&lt;</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt; +sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt; </pre></div> </li> <li> <p>Pour démonter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt; +sudo cryptsetup luksClose &lt;nom de disque virtuel&gt; </pre></div> </li> </ul> -<p>Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de +<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de créer et de monter/démonter vos images/disques chiffré-e-s en une seule commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p> <p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable disque (ou clé usb, ou autre), il est préférable de créer une partition de taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code> -pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/%D/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il -s'agit de posséder son propre serveur, et donc, par extension, ses +pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il +s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses données. </p> -<p>Bien entendu, il n'est pas nécessaire pour cela de posséder +<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder physiquement son propre serveur (encore que ce soit possible, mais ce -n'est pas le sujet abordé ici.)<br /> +n&rsquo;est pas le sujet abordé ici.)<br /> Nous expliquerons ici les étapes nécessaires pour arriver a avoir un serveur utilisable, du moment ou vous arrivez sur le système fraichement installé, au moment ou vous possédez un serveur avec tous les paquets -nécessaires a l'utilisation que l'on veut en faire ici d'installés. +nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés. Cette partie va consister a paramétrer le système (ici un debian squeeze. Il est bien sur possible de faire la même chose avec a peu près toutes les distributions Linux disponibles, tout comme avec les BSD et tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x -squeeze, parce que c'est une distribution simple a utiliser comme -serveur, stable, et facile a configurer (puisqu'une bonne partie de la +squeeze, parce que c&rsquo;est une distribution simple a utiliser comme +serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la configuration est déjà faite et incluse dans le paquet), donc adaptée au -but de cet article, a savoir rendre l'installation simple et +but de cet article, a savoir rendre l&rsquo;installation simple et compréhensible).</p> -<p>La première chose a faire est bien entendu d'obtenir le serveur en lui +<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui même. Cette partie de la chose ne sera pas traitée dans cet article. Il -existe en effet un nombre infini d'obtenir un serveur, que ce soit en le -louant chez OVH/1&amp;1/n'importe quel autre hébergeur commercial, en -participant a un système d'hébergement collaboratif (je vous laisse +existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le +louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en +participant a un système d&rsquo;hébergement collaboratif (je vous laisse chercher), en achetant un serveur et en le faisant fonctionner de chez -vous, en utilisant un vieux PC... Bref, les possibilités sont multiples. +vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples. Dès lors que vous avez accès a un système debian serveur, peu importe sur quel matériel il fonctionne, et a priori peu importe aussi la manière -dont vous y accédez, le résultat est le même (et la procédure aussi...). +dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;). Dans cet article, nous parlerons de la configuration de base, du moment ou vous avez le serveur vierge dans les mains au moment ou vous installez le serveur http.</p> -<p>Dans cet article, lorsque est précisée le type d'IP a utiliser, il -convient de mettre ce type précisément. Quand le type n'est pas +<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il +convient de mettre ce type précisément. Quand le type n&rsquo;est pas précisée, libre a vous de choisir ipv4 ou ipv6.</p> <p>Bref. Commençons au point ou vous avez un accès root a votre serveur, -n'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou -rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez +n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou +rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe solide sur le compte root. Continuons en allant vite mettre en place le nom de domaine. Pour cela, votre registrar doit vous fournir une -interface vous permettant d'éditer l'entrée DNS pour votre nom de +interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de domaine. </p> -<p>Cette entrée doit donc pour l'instant ressembler a ca :</p> -<div class="highlight"><pre> <span class="o">&lt;</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">&gt;</span> <span class="n">NS</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">A</span> <span class="o">&lt;</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> - <span class="n">IN</span> <span class="n">AAAA</span> <span class="o">&lt;</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> +<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1 + IN MX 1 + IN A &lt;IPv4 de votre serveur&gt; + IN AAAA &lt;IPv6 de votre serveur&gt; </pre></div> <p>Cela vous permet de rediriger tout le trafic se référant a votre nom de domaine vers votre ip (le fonctionnement exact du DNS est assez -compliqué a expliquer, donc on va dire que c'est de la magie pour -l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer +compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour +l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers votre serveur, ce qui est un bon début. Faisons un petit point sécurité ici : pour accéder a votre serveur, il vous suffit actuellement de taper @@ -591,50 +946,50 @@ le mot de passe root.</p> bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction du nombre de caractères, ça prend plus ou moins de temps, et si vous avez suffisamment de caractères, ça peut prendre un temps assez -conséquent. Cela dit, il vaut mieux être prudent...) Ainsi, nous allons -arrêter d'utiliser root et nous allons commencer a utiliser des couples +conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons +arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples clés publiques/privées pour nous connecter au serveur.<br /> -Cela se fait en deux temps : tout d'abord, créer un nouvel utilisateur, -grâce auquel nous administrerons le serveur a l'avenir; puis configurer -OpenSSH pour que celui ci n'accepte que les connections par clés et plus +Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur, +grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer +OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus celles sur root.</p> <p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se fait avec adduser, qui est interactif (vous ne devriez pas avoir de -problème avec, puisqu'il crée tout les dossiers et fichiers nécessaires, +problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires, et vous pose toutes les questions utiles pour vous aider.) sinon, vous -devrez utiliser useradd, qui est (en plus d'être très chiant a -distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait -un simple script permettant l'utilisation d'useradd plus facilement.)</p> +devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a +distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait +un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p> <p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif en faisant un <code>adduser --group &lt;username&gt;</code></p> <p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m -N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera -son dossier principal dans /home/, et l'ajoutera au groupe du même nom +son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom que lui (ce qui est en général nécessaire pour des questions de vie privée).</p> -<p>Il convient maintenant d'ajouter cet utilisateur aux groupes qu'il sera +<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix users staff sudo wheel</code>, puis de changer son mot de passe <code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br /> -Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un +Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un utilisateur complètement fonctionnel et utilisable pour toutes les -taches d'administration. Si vous devez encore utiliser root, c'est que +taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que quelque chose ne va pas.</p> -<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous +<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous allons maintenant passer a la phase 2 du plan : désactiver le login ssh root et le login ssh par mot de passe.<br /> -Tout d'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un +Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un système assez semblable a celui vous permettant de chiffrer vos mail : vous avec une clé publique et une clé privée sur le client, et la clé publique est aussi sur le serveur. Lorsque vous vous connectez, openssh vérifie que vous possédez la clé privée qui correspond a la clé publique stockée sur le serveur (pour votre utilisateur, bien entendu). Il est -également possible d'utiliser plusieurs clés publique pour chaque<br /> +également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br /> utilisateur.</p> <p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout -d'abord, il nous faut générer un couple de clés publique/privée sur le +d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t rsa précise a ssh que nous voulons un chiffrement rsa, qui est suffisamment solide pour cette utilisation.) Entrez les informations que @@ -642,12 +997,11 @@ ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br /> known_hosts liste les serveurs auxquels vous vous êtes connectés déjà une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous -intéresse ici c'est id_rsa et id_rsa.pub . id_rsa contient votre clé +intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé privée, sauvegardez la sur une clé USB ou notez la sur un bout de papier, si vous la perdez, vous ne pourrez plus vous connecter au -serveur. (planquez la clé usb/le bout de papier...) id_rsa.pub, quand a -lui, contient votre clé publique. Copiez la sur le serveur, avec un -<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou +serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a +lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou en la copiant a la main, si ça vous amuse. </p> <p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra. @@ -659,19 +1013,19 @@ domaine&gt;</code>), et il ne devrait pas vous demander de mot de pass il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré, donc vérifiez que vous avez suivi correctement les instruction ci-dessus.</strong></p> -<p>Continuons. Il ne nous reste plus qu'a installer le serveur web, et a le +<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le configurer: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \ -<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \ -<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \ -<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \ -<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \ +apache2 apache2.2-common apache2-doc apache2-mpm-prefork \ +apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \ +php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \ +apache2-suexec php-pear php-auth php5-mcrypt mcrypt \ +php5-imagick imagemagick libapache2-mod-suphp libruby \ +libapache2-mod-ruby </pre></div> -<p>(faisons large, on aura besoin de l'excédent plus tard...), puis activons les<br /> +<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br /> mods apache en faisant <code>a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest</code>, et faisons en sorte que ces activations soient prises en compte par apache via un <code>sudo service apache2 @@ -681,425 +1035,263 @@ comment fonctionner sur notre nom de domaine et ou trouver les fichiers a envoyer. </p> <p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez sympa pour nous filer un fichier de configuration par défaut. Il nous -faut encore l'éditer, en changeant l'adresse mail au début du document +faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>, -et enfin redémarrer apache pour qu'il prenne en compte les +et enfin redémarrer apache pour qu&rsquo;il prenne en compte les modifications, par un <code>sudo service apache2 restart</code> </p> <p>Et maintenant, il vous reste a apprendre le html, parce que ca y est, votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on -verra l'installation du serveur mail (c'est suffisamment complexe pour -prendre un article seul...)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/%D/monter-son-propre-serveur-partie-1/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous +verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour +prendre un article seul&hellip;)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous <del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une utilisation <strong>a la</strong> UNIX<br /> -Cependant, un d'entre eux se démarque par sa moins-mauvais-itude, c'est +Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br /> Mutt est un client mail en ligne de commande, qui, comme le dit sa page -d’accueil, <a href="http://www.mutt.org">"just sucks less"</a>. Dans les faits, mutt est assez +d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez chiant a configurer mais particulièrement pratique a utiliser après.</p> <p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans -<code>/etc/Muttrc</code>, et il est courant d'utiliser offlineimap en +<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en conjonction avec celui ci, de façon a accéder aux mails même sans accès -internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne +internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne crée pas de cache, ce qui empêche la consultation des emails sans -connexion internet.) La configuration d'offlineimap se fait dans -<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config +connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config par user. Offlineimap est un petit logiciel en python qui synchronise un dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque justement mutt accepte les dossiers au format Maildir. (De plus, cela va tout a fait dans le sens de la libération des données en cela que vous possédez vos mails en local.)<br /> Bref, passons aux choses serieuses : le code. Déjà, installez -offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d'installer +offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer mutt avec le patch sidebar, qui crée un listing des dossiers sur la partie gauche.<br /> Ensuite, voyons pour la partie configuration :<br /> -Ma configuration d'offlineimap :</p> -<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span> -<span class="cp">## Originally located in ~/.offlineimaprc</span> -<span class="cp">## This should not be edited without creating a copy before</span> -<span class="cp">## Created by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +Ma configuration d&rsquo;offlineimap :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span> +<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span> +<span style="color: #75715e">## This should not be edited without creating a copy before</span> +<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="p">[</span><span class="n">general</span><span class="p">]</span> -<span class="cp"># List of accounts to be synced, separated by a comma.</span> -<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</span> +<span style="color: #f8f8f2">[general]</span> +<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span> +<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span> -<span class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span> -<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> -<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span> -<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> -<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span> -<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span> -<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</span> +<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span> +<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> +<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span> +<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> +<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span> +<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span> +<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span> -<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span> -<span class="cp"># Where should the mail be placed?</span> -<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span> - <span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span> +<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span> +<span style="color: #75715e"># Where should the mail be placed?</span> +<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span> + <span style="color: #75715e"># voulez que vos emails apparaissent</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span> -<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span> -<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span> -<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d&#39;utilisateur</span> -<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span> -<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span> +<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span> +<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span> +<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span> +<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span> +<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span> </pre></div> -<p>Ça devrait être assez simple a lire, j'ai tout bien commenté :3<br /> +<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br /> Puis ma config mutt :</p> -<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span> -<span class="cp">## This file should not be edited without creating a copy</span> -<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span> +<span style="color: #75715e">## This file should not be edited without creating a copy</span> +<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="cp"># General config for reading (fetched via offlineimap)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap) -<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span> -<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span> +set mbox_type = Maildir +<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut) -<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span> -<span class="cp"># dossier root mailbox/imap</span> +set folder = ~/Email/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap -<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> -<span class="cp"># dossier d&#39;inbox</span> +set spoolfile = +INBOX +<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox -<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">&#39;</span><span class="n">All</span> <span class="n">Mail</span><span class="err">&#39;</span> -<span class="cp"># dossier ou archiver les emails</span> +set mbox = +&#39;All Mail&#39; +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails -<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span> -<span class="cp"># enfin voila quoi.</span> +set copy = yes +<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour... +<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi. -<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span> -<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span> +set header_cache = /.hcache/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache) -<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span> -<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span> +set record = +Sent +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés -<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span> -<span class="cp"># dossier dans lequel sont stockés les brouillons</span> +set postponed = +Drafts +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons -<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span> -<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span> +mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail +<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche -<span class="cp"># General config for sending (using Mutt&#39;s native support)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support) -<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">password_placeholder</span><span class="err">&#39;</span> -<span class="cp"># votre mot de passe</span> +set smtp_pass = &#39;password_placeholder&#39; +<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe -<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">&quot;smtp://username@whatev.org:465/&quot;</span> -<span class="cp"># l&#39;url ou envoyer les emails</span> +set smtp_url = &quot;smtp://username@whatev.org:465/&quot; +<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails -<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">&quot;utf-8&quot;</span> -<span class="cp"># UTF8, NE PAS CHANGER</span> +set send_charset = &quot;utf-8&quot; +<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER -<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">&quot;.sign&quot;</span> -<span class="cp"># vous pouvez mettre votre signature dans .sign</span> +set signature = &quot;.sign&quot; +<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign -<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible </span> -<span class="cp"># comme ca.</span> +set sig_on_top = yes +<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible +<span style="color: #960050; background-color: #1e0010">#</span> comme ca. -<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span> +set ssl_verify_host = no +<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement -<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">&quot;wxcafe.net&quot;</span> -<span class="cp"># mettez l&#39;adresse de votre serveur ici</span> +set hostname = &quot;wxcafe.net&quot; +<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici -<span class="cp"># Misc settings</span> +<span style="color: #960050; background-color: #1e0010">#</span> Misc settings -<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span> -<span class="cp"># la façon de voir les emails par défaut.</span> +auto_view text/html +<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut. -<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">&quot;%y-%m-%d %T&quot;</span> -<span class="cp"># format de date d&#39;envoi/de reception.</span> +set date_format = &quot;%y-%m-%d %T&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception. -<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">&quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;</span> -<span class="cp"># format de l&#39;index (la présentation de l&#39;interface)</span> -<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span> +set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface) +<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span> -<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span> -<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/aliases&quot;</span> -<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span> -<span class="cp"># format : &quot;alias short_name long_email_adress&quot;</span> -<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span> +set sort_alias = alias +set reverse_alias = yes +set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot; +<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même. +<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot; +source <span style="color: #f8f8f2">$alias_file</span> -<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># ne pas biper. CE SON ME TUE T.T</span> +set beep = no +<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T -<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span> -<span class="cp"># ?</span> +set tilde = yes +set sleep_time = 0 +<span style="color: #960050; background-color: #1e0010">#</span> ? -<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span> -<span class="cp"># parametres de la barre coté gauche</span> +set sidebar_visible = yes +set sidebar_width = 15 +<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche -<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">&quot;Clément Hertling (Wxcafé)&quot;</span> -<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">&quot;wxcafe@wxcafe.net&quot;</span> -<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/cacert&quot;</span> -<span class="cp"># parametres d&#39;envoi. mettez vos propres infos a la place des miennes...</span> +set realname = &quot;Clément Hertling (Wxcafé)&quot; +set from = &quot;wxcafe@wxcafe.net&quot; +set use_from = yes +set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot; +<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes... -<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># vous permet de vois les headers des mails. j&#39;aime, donc je laisse.</span> +set edit_headers = yes +<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse. -<span class="cp"># Macros</span> +<span style="color: #960050; background-color: #1e0010">#</span> Macros -<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span> -<span class="cp"># pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les </span> -<span class="cp"># deux</span> -<span class="cp"># \C represente la touche Control</span> +<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus, +<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les +<span style="color: #960050; background-color: #1e0010">#</span> deux +<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span> -<span class="cp"># Control+p -&gt; remonter d&#39;un dossier dans la sidebar</span> +bind index,pager \Cp sidebar-prev +<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span> -<span class="cp"># Control+n -&gt; descendre d&#39;un dossier dans la sidebar</span> +bind index,pager \Cn sidebar-next +<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span> -<span class="cp"># Control+o -&gt; ouvrir le dossier selectionné dans la sidebar</span> +bind index,pager \Co sidebar-open +<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar -<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">&quot;=Trash&quot;</span> <span class="s">&quot;Trash&quot;</span> -<span class="cp"># d supprime le message en cours</span> +macro index,pager d &quot;=Trash&quot; &quot;Trash&quot; +<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours -<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.</span> +bind pager previous-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message. -<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de </span> -<span class="cp"># message</span> +bind pager next-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de +<span style="color: #960050; background-color: #1e0010">#</span> message -<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># raccourcis vim</span> +bind pager j next-line +bind pager k previous-line +<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim -<span class="cp"># PGP signing commands</span> +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands -<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --import -v %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --export --armor %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_autosign</span><span class="o">=</span><span class="n">yes</span> -<span class="n">set</span> <span class="n">pgp_sign_as</span><span class="o">=</span><span class="mi">0</span><span class="n">x</span><span class="o">********</span> -<span class="cp"># remplacez 0x******** par votre identifiant PGP!!!!!</span> +set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot; +set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot; +set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot; +set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot; +set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot; +set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot; +set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot; +set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot; +set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot; +set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot; +set pgp_autosign=yes +set pgp_sign_as=0x******** +<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!! -<span class="n">set</span> <span class="n">pgp_replyencrypt</span><span class="o">=</span><span class="n">no</span> -<span class="n">set</span> <span class="n">pgp_timeout</span><span class="o">=</span><span class="mi">7200</span> -<span class="n">set</span> <span class="n">pgp_good_sign</span><span class="o">=</span><span class="s">&quot;^gpg: Good signature from&quot;</span> +set pgp_replyencrypt=no +set pgp_timeout=7200 +set pgp_good_sign=&quot;^gpg: Good signature from&quot; -<span class="cp"># si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis</span> -<span class="cp"># PGP signing options</span> +<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options -<span class="cp"># Palette for use with the Linux console. Black background.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background. -<span class="cp"># Schéma de couleur Rouge et Noir. Commentez si vous voulez le </span> -<span class="cp"># défaut noir et blanc.</span> -<span class="cp"># d&#39;autres schémas sont trouvables sur google et autre.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le +<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc. +<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre. -<span class="n">color</span> <span class="n">hdrdefault</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">quoted</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">signature</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">attachment</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">message</span> <span class="n">brightwhite</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">error</span> <span class="n">brightred</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">indicator</span> <span class="n">black</span> <span class="n">red</span> -<span class="n">color</span> <span class="n">status</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tree</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">normal</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">markers</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">search</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tilde</span> <span class="n">brightmagenta</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="o">~</span><span class="n">F</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="s">&quot;~N|~O&quot;</span> +color hdrdefault red black +color quoted brightblack black +color signature brightblack black +color attachment red black +color message brightwhite black +color error brightred black +color indicator black red +color status white black +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index red black ~F +color index red black &quot;~N|~O&quot; </pre></div> -<p>Voila, pour plus d'informations vous pouvez aller voir le manuel de mutt +<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt @ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br /> -J'espère que cette configuration "toute faite" vous aidera a commencer +J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer a utiliser mutt. Il est tout de fois important de se souvenir -qu'utiliser une configuration toute faire n'aide pas a comprendre un +qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un programme ou un système, et que cette façon de faire devrait être -réservée a l'introduction ou a des situations ou il est absolument -nécessaire d'avoir rapidement une configuration fonctionnelle (c'est a -dire, dans le cas d'un client email, euh... jamais?). Je vous invite +réservée a l&rsquo;introduction ou a des situations ou il est absolument +nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a +dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite donc a relire les annotations dont sont parsemés les fichiers de configuration en question, et surtout a lire le manuel, a chercher sur <del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement -a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/La cryptographie avec PGP et principalement GnuPG//wxcafe.net/posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/<p>PGP (pour <a href="http://fr.wikipedia.org/wiki/Pretty_Good_Privacy">pretty good privacy</a>) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir <a href="http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">ici</a>) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de <em>Web of Trust</em>. </p> -<p>Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.<br /> -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.</p> -<p>Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -<a href="http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/">quitter Gmail</a> aussi, par exemple).</p> -<p>Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)</p> -<p>L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (<a href="http://fr.wikipedia.org/wiki/GNU_Privacy_Guard">GNU Privacy Guard</a>) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<code>&lt;troll&gt;</code> de façon surprenante pour un -programme GNU<code>&lt;/troll&gt;</code>) est extrêmement efficace et claire.</p> -<p>Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).</p> -<p>Tout d'abord, générons une clé GPG :</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">gen</span><span class="o">-</span><span class="n">key</span> -</pre></div> - - -<p>GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. </p> -<p>Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande <code>makepasswd</code>, qui génère automatiquement un mot de -passe) </p> -<p>GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) </p> -<p>Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">pubkey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé publique, et</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span><span class="o">-</span><span class="n">secret</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">seckey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. </p> -<p>Cela fait, listons les informations sur votre clé publique :</p> -<div class="highlight"><pre><span class="err">$</span> <span class="n">gpg</span> <span class="o">--</span><span class="n">list</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">fingerprint</span> -<span class="n">pub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">27</span><span class="n">D81AC8</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> - <span class="n">Key</span> <span class="n">fingerprint</span> <span class="o">=</span> <span class="mi">6345</span> <span class="n">A91A</span> <span class="n">FF89</span> <span class="mf">97E0</span> <span class="mi">13</span><span class="n">D0</span> <span class="mi">96</span><span class="n">A9</span> <span class="mf">9E2</span><span class="n">A</span> <span class="mi">1917</span> <span class="mi">27</span><span class="n">D8</span> <span class="mi">1</span><span class="n">AC8</span> -<span class="n">uid</span> <span class="n">Cl</span><span class="err">é</span><span class="n">ment</span> <span class="n">Hertling</span> <span class="p">(</span><span class="n">Wxcafe</span><span class="p">)</span> -<span class="n">uid</span> <span class="p">[</span><span class="n">jpeg</span> <span class="n">image</span> <span class="n">of</span> <span class="n">size</span> <span class="mi">14692</span><span class="p">]</span> -<span class="n">sub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">9</span><span class="n">ED7F77F</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> -</pre></div> - - -<p>La partie <code>pub</code> indique que c'est une clé publique, <code>4096R</code> indique que c'est -une clé RSA sur 4096 bits. La partie <code>27D81AC8</code> est -l'identifiant de la clé publique, <code>Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8</code> est appelé fingerprint de la clé. Les champs -<code>uid</code> sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ <code>sub</code> est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.<br /> -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">uploader</span><span class="o">*</span> -</pre></div> - - -<p>Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!<br /> -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). </p> -<p>Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.<br /> -Concernant les signatures de clés, elles fonctionnent de manière très -simple :<br /> -Vous devez télécharger la clé de votre correspondant, via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">search</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">correspondant</span><span class="o">*</span> -</pre></div> - - -<p>(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.<br /> -Ceci fait, vous pouvez signer la clé via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">sign</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>puis la renvoyer au serveur via</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">key</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>Voila, la clé de votre correspondant est signée!</p> -<p>Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!</p>WxcafeMon, 19 Nov 2012 00:36:00 +0100tag:wxcafe.net,2012-11-19:posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/ \ No newline at end of file +a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/ \ No newline at end of file diff --git a/output/feeds/feed.rss.vidya-games.xml b/output/feeds/feed.rss.vidya-games.xml new file mode 100644 index 0000000..c801507 --- /dev/null +++ b/output/feeds/feed.rss.vidya-games.xml @@ -0,0 +1,82 @@ + +Wxcafé//wxcafe.net/Sun, 19 Apr 2015 21:59:00 +0200Manettes : Hori vs. PDP//wxcafe.net/posts/hori-vs-pdp/<p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d&rsquo;abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &ldquo;choses&rdquo; +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d&rsquo;autres. Vous aurez aussi remarqué que le +Gamepad n&rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube.</p> +<p>Cela étant, si comme moi vous avez, euh, &ldquo;ouvert&rdquo; le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l&rsquo;adaptateur GC pour Wii +U</a> +a votre console. </p> +<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d&rsquo;habitude +avec Nintendo, c&rsquo;est une solution a moitié satisfaisante&hellip;) : les classic +controller, mais en forme de manettes Gamecube.</p> +<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d&rsquo;argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes.</p> +<p>Nous allons ici voir deux modèles, un de chacune des boites en question +: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p> +<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus</em></strong></p> +<p>Commençons par le modèle de chez Hori :</p> +<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur.</p> +<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p> +<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c&rsquo;est logique puisque c&rsquo;est comme ça que les +classic controller sont faits, mais c&rsquo;est décevant tout de même</p> +<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p> +<p>On peut voir ici que la qualité de l&rsquo;assemblage n&rsquo;est pas extraordinaire, et on +remarque une soudure mal faite a l&rsquo;emplacement du stick gauche.</p> +<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p> +<p>Le stick c n&rsquo;est pas fixé au reste de la manette. +J&rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n&rsquo;avaient pas l&rsquo;air de très bonne qualité, et j&rsquo;ai préféré abandonner +l&rsquo;idée plutôt que de casser la manette.</p> +<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p> +<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d&rsquo;une Wiimote entière la dedans&hellip;</p> +<hr> + +<p>Passons maintenant a la manette PDP.</p> +<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p> +<p>Au premier coup d&rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c&rsquo;est un problème de goût).</p> +<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p> +<p>Les gâchettes sont des vraies gâchettes! C&rsquo;est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après.</p> +<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon <strike>péremptoire</strike> perpendiculaire&hellip;</p> +<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p> +<p>Vous l&rsquo;avez deviné, ces deux &ldquo;cartes filles&rdquo; servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de &ldquo;vraies&rdquo; gâchettes en cela +qu&rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques.</p> +<p>Quelques photos des gâchettes en question :</p> +<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p> +<hr /> +<p>Vous l&rsquo;aurez compris, je préfère la version PDP de ces &ldquo;Fight Pad&rdquo;, la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p>WxcafeSun, 19 Apr 2015 21:59:00 +0200tag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/ \ No newline at end of file diff --git a/output/feeds/feed.rss.xml b/output/feeds/feed.rss.xml index 1444d54..a3c1487 100644 --- a/output/feeds/feed.rss.xml +++ b/output/feeds/feed.rss.xml @@ -1,260 +1,531 @@ -Wxcafé//wxcafe.net/Fri, 07 Nov 2014 13:04:00 +0100OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/%D/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de +Wxcafé//wxcafe.net/Sat, 22 Aug 2015 02:43:00 +0200les NUCs et le HDMI-CEC//wxcafe.net/posts/nuc-hdmi-cec/<p>J&rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas &ldquo;profiter&rdquo; du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc&hellip;) simplement.</p> +<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j&rsquo;ai +décidé d&rsquo;installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça +donnait. Le résultat n&rsquo;étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j&rsquo;ai décidé d&rsquo;upgrader le système.</p> +<p>J&rsquo;ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a> +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un +<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je +pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&rsquo;autre +avantage de tourner sur du Intel, c&rsquo;est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86).</p> +<p>J&rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&rsquo;ai avidement +monté, avant de me rendre compte que le manuel de l&rsquo;adaptateur Pulse-Eight était +[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J&rsquo;ai donc +cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce +post</a> +expliquant comment brancher l&rsquo;adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l&rsquo;information, et pour moi si je dois remonter ce système.</p> +<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +&ldquo;Front Panel&rdquo;, et un appelé &ldquo;Custom Solution Header&rdquo;. Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&rsquo;est plus +facile, puisqu&rsquo;il n&rsquo;y a qu&rsquo;une seule fiche a brancher ici : la orange.</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que &ldquo;Deep S4/S5&rdquo; soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC.</p> +<p>Ne reste plus ensuite qu&rsquo;a installer un système digne de ce nom dessus!</p>WxcafeSat, 22 Aug 2015 02:43:00 +0200tag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/SSL - STARTTLS//wxcafe.net/posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose +problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce +problème, deux solutions sont apparues.</p> +<p>Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port.</p> +<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La +communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de +la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines +machines font un <em>handshake</em> SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise +a jour&rdquo; en douceur.</p> +<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> +La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout +d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il +voit qu&rsquo;il est disponible.<br /> +Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité +de tout le monde.</p>WxcafeSat, 16 May 2015 02:00:00 +0200tag:wxcafe.net,2015-05-16:posts/ssl-starttls/Manettes : Hori vs. PDP//wxcafe.net/posts/hori-vs-pdp/<p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d&rsquo;abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &ldquo;choses&rdquo; +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d&rsquo;autres. Vous aurez aussi remarqué que le +Gamepad n&rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube.</p> +<p>Cela étant, si comme moi vous avez, euh, &ldquo;ouvert&rdquo; le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l&rsquo;adaptateur GC pour Wii +U</a> +a votre console. </p> +<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d&rsquo;habitude +avec Nintendo, c&rsquo;est une solution a moitié satisfaisante&hellip;) : les classic +controller, mais en forme de manettes Gamecube.</p> +<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d&rsquo;argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes.</p> +<p>Nous allons ici voir deux modèles, un de chacune des boites en question +: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p> +<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus</em></strong></p> +<p>Commençons par le modèle de chez Hori :</p> +<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur.</p> +<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p> +<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c&rsquo;est logique puisque c&rsquo;est comme ça que les +classic controller sont faits, mais c&rsquo;est décevant tout de même</p> +<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p> +<p>On peut voir ici que la qualité de l&rsquo;assemblage n&rsquo;est pas extraordinaire, et on +remarque une soudure mal faite a l&rsquo;emplacement du stick gauche.</p> +<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p> +<p>Le stick c n&rsquo;est pas fixé au reste de la manette. +J&rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n&rsquo;avaient pas l&rsquo;air de très bonne qualité, et j&rsquo;ai préféré abandonner +l&rsquo;idée plutôt que de casser la manette.</p> +<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p> +<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d&rsquo;une Wiimote entière la dedans&hellip;</p> +<hr> + +<p>Passons maintenant a la manette PDP.</p> +<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p> +<p>Au premier coup d&rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c&rsquo;est un problème de goût).</p> +<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p> +<p>Les gâchettes sont des vraies gâchettes! C&rsquo;est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après.</p> +<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon <strike>péremptoire</strike> perpendiculaire&hellip;</p> +<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p> +<p>Vous l&rsquo;avez deviné, ces deux &ldquo;cartes filles&rdquo; servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de &ldquo;vraies&rdquo; gâchettes en cela +qu&rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques.</p> +<p>Quelques photos des gâchettes en question :</p> +<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p> +<hr /> +<p>Vous l&rsquo;aurez compris, je préfère la version PDP de ces &ldquo;Fight Pad&rdquo;, la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p>WxcafeSun, 19 Apr 2015 21:59:00 +0200tag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/Docker et les ebooks sur Twitter//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si +ce n&rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n&rsquo;est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>, +mais n&rsquo;est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>, +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d&rsquo;avoir une machine hôte sur laquelle s&rsquo;exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l&rsquo;hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu&rsquo;avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu&rsquo;à l&rsquo;hôte, puisqu&rsquo;il n&rsquo;est pas vraiment séparé des +invités. </p> +<p>Quoi qu&rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. &ldquo;Mais pourquoi utiliser Docker, dans ce cas&rdquo;, vous +demandez-vous peut être, &ldquo;puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&rdquo;. Et bien +c&rsquo;est très simple : Docker apporte la simplicité de déploiement d&rsquo;applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer +rapidement et facilement un grand nombre d&rsquo;images déjà configurées. </p> +<p>Maintenant que nous avons expliqué rapidement ce qu&rsquo;était Docker, voyons le +rapport avec les ebooks et Twitter.</p> +<p>Les comptes dits &ldquo;ebooks&rdquo; (le nom vient a l&rsquo;origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>, +voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots +twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>, +avec les tweets d&rsquo;un utilisateur &ldquo;source&rdquo; comme corpus, pour produire des tweets +ressemblant a ceux de l&rsquo;utilisateur source. Nous allons voir maintenant comment +en installer un.</p> +<p>C&rsquo;est, comme disent certaines personnes, &ldquo;fun&rdquo;.</p> +<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée +par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l&rsquo;API +twitter et la génération des messages.</p> +<p>Cependant, cela n&rsquo;explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d&rsquo;isoler les bots, et les +containers dockers permettent de les déployer sur n&rsquo;importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j&rsquo;ai créé <a href="https://github.com/wxcafe/ebooks_example">un +repo github</a> qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc.</p> +<p>Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l&rsquo;utilisateur source avec <code>ebooks archive &lt;username&gt; &lt;filename&gt;</code> (c&rsquo;est du json) +, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks +consume &lt;filename&gt;</code>. Cela fait, démarrer le bot revient a lancer le container : +<code>docker run -d &lt;container name&gt;</code> Pour plus d&rsquo;informations, allez voir <a href="https://docs.docker.com/articles/basics/">la +documentation Docker</a></p> +<p>Bien entendu, dans l&rsquo;idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 05 * * * cd /usr/local/ebooks/main/ &amp;&amp; /usr/local/bin/ebooks consume corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 10 * * * docker rm -f bots &gt;/dev/null 2&gt;&amp;1 +00 15 * * * docker rmi bots &gt; /dev/null 2&gt;&amp;1 +00 20 * * * cd /usr/local/ebooks/main/ &amp;&amp; docker build --rm -t bots . &gt;&gt; /var/log/ebooks/build.log 2&gt;&amp;1 +00 25 * * * docker run -d --name bots bots &gt;&gt; /var/log/ebooks/run.log 2&gt;&amp;1 +</pre></div> + + +<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s&rsquo;executent en même temps.</p> +<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n&rsquo;est qu&rsquo;un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des +applications &ldquo;usuelles&rdquo; +dedans</a>, +puisque l&rsquo;overhead de Docker est minimal, et beaucoup d&rsquo;autres applications +existent.</p>WxcafeSat, 28 Feb 2015 14:11:00 +0100tag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/opensmtpd-debian/<p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant +comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la +aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais +<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un +projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA +qu&rsquo;a le projet OpenBSD, globalement).</p> +<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA (Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis +<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération +ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches +sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et +<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir +des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour +ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et <a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> pour filtrer les mails entrants et sortants. Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮ + │╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │ + mail in ││ │ │ │ amavis │ +───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ +&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ </pre></div> <p>Normalement, ceci devrait être a peu près clair. Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de +aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails +venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, qui a ce moment-ci trie en fonction de la destination : les mails gérés par le domaine vont via dovecot dans les boites mail des destinataires locaux, les mails exterieurs vont directement vers le MTA du serveur distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon +<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon dont les différents services vont communiquer.</p> <p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de +10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et +écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de signer, nous allons profiter de cette configuration et donc lui parler en SMTP sur ces ports.</p> <p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, <code>/var/run/dovecot/lmtp</code>).</p> <p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮ + │╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ +25 &lt;────────│&lt;───────────╯ │ + ╰───────────────╯ </pre></div> <p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮ + │╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ </pre></div> <p>Pour les mails entrants.</p> <p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. +d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p> +<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> +<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new </pre></div> <p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> <p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span> +<span style="color: #75715e"># See smtpd.conf(5) for more information.</span> -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> +<span style="color: #75715e">## Certs</span> +pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span> +pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span> -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> +<span style="color: #75715e">## Ports to listen on, and how to listen on them</span> +listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional +listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source +listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> +<span style="color: #75715e">## Aliases</span> +table aliases file:/etc/aliases -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> +<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span> +listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered +<span style="color: #75715e"># coming from amavisd, signed with DKIM</span> +listen on lo port <span style="color: #ae81ff">10027</span> tag Signed -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> +<span style="color: #75715e">## Receiving</span> +<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span> +accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span> +<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span> +accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span> +<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span> -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> +<span style="color: #75715e">## Sending</span> +<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span> +accept tagged Signed <span style="color: #66d9ef">for</span> any relay +<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span> +accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span> +<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span> </pre></div> <p>Expliquons un peu ce fichier de configuration :</p> <ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> +<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration + d&rsquo;emplacement des certificats SSL.</li> <li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> <li>Les alias sont définis juste après</li> <li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> + comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on + taggue les mails sortants comme &ldquo;Signed&rdquo;</li> <li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore + peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième + première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième ligne matchant tous les mails arrivant et la première seulement ceux filtrés, inverser leur sens voudrait dire que les mails seraient toujours renvoyés a amavis</li> <li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au + on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par + DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le + problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au dessus.</li> </ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit +<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne +emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant +qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du POP3[s], différents guides sont trouvables facilement sur internet.</p> <p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span> -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> +<span style="color: #75715e"># basic config</span> +<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log +<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log +<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span> +<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> +<span style="color: #75715e"># authentication</span> +passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +userdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd +<span style="color: #f92672">}</span> -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> +<span style="color: #75715e"># the protocols we use</span> +<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> +<span style="color: #75715e"># ssl config</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring services </span> +<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span> +service imap-login <span style="color: #f92672">{</span> + inet_listener imap <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span> + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> +service lmtp <span style="color: #f92672">{</span> + unix_listener lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666 + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring protocols</span> +<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span> +protocol lda <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +protocol lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> +plugin <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve + <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve +<span style="color: #f92672">}</span> </pre></div> <p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> </pre></div> <p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth +<span style="color: #f92672">}</span> </pre></div> <p><strong>pour identifier les utilisateurs système</strong></p> <p>Ici aussi, voyons comment ce fichier est structuré :</p> <ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. +<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater + leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li> +<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs. Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs mots de passe avec PAM (ou BSDAuth)</li> <li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> + l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> <li>Nous configurons le SSL</li> <li>Le section suivante contient la configuration des services. Nous avons en premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. + désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant + IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons. La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> + fifo qu&rsquo;il utilise</li> <li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> <li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et quel dossier utiliser pour sa configuration.</li> @@ -263,101 +534,100 @@ POP3[s], différents guides sont trouvables facilement sur internet.</p> a deux choses : signer les emails sortants, et filtrer les emails entrants. Il doit donc écouter sur les port 10026 pour les signatures et 10024 pour le filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun +SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les +Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les modifications nécessaires a la fin du fichier.</p> <p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) <code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span> -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> +<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span> -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> +<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span> + <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span> + <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span> + <span style="color: #f8f8f2">}</span> +<span style="color: #f8f8f2">);</span> -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span> +<span style="color: #f8f8f2">};</span> -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> +<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span> +<span style="color: #f8f8f2">};</span> -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> +<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span> +<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span> </pre></div> <p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se +- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails + sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se trouve la clé privée servant a signer les emails. - le second définit les options DKIM que nous souhaitons utiliser comme défaut. Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> - nous définissons ensuite les ports sur lesquels nous allons écouter, puis les paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel + ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel ils viennent. - nous savons que les emails venants du port 10026 sont sortants, nous les traitons donc comme tel - le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre + sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a + 4871</a>. Nous déclarons l&rsquo;adresse a prévenir en cas de spam/virus venants de notre système, et que nous voulons être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de + puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature + les notifications de succès d&rsquo;envoi. Et voila!</p> +<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en fait inclus par défaut dans amavis.</p> <p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un +Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe +différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un tutorial</a>) mais de nombreuses autre méthodes existent. Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span> +<span style="color: #75715e"># report_safe 1</span> +<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span> +<span style="color: #75715e"># use_bayes 1</span> +<span style="color: #75715e"># bayes_auto_learn 1</span> +<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span> +<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span> +<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span> +<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span> +<span style="color: #75715e"># shortcircuit BAYES_99 spam</span> +<span style="color: #75715e"># shortcircuit BAYES_00 ham</span> -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> +<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span> </pre></div> @@ -365,44 +635,43 @@ Il nous reste encore a configurer spamassassin :</p> le required_score pour ma part.</p> <p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/%D/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/%D/freebsd-online-mfsbsd/<p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad) +<p>Bon courage pour votre hosting de mail ensuite&hellip;</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/freebsd-online-mfsbsd/<p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad) Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>) -et n'ayant pour différentes raisons pas eu l'occasion de le faire sur mon -<a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, -j'ai commencé a chercher comment le faire sur ce serveur.</p> -<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu +et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, +j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p> +<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums -d'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> -<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), -ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur +d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> +<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), +ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur alternatif, minimaliste et simplifié pour FreeBSD.</p> <p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le -panel Online. Une fois cela fait, lancez une console, puis téléchargez l'image +panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis -choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter -sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout +choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter +sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout a fait classique va démarrer. Une fois ceci fait, la partie importante arrive: -mfsbsd contient un script d'installation root-on-zfs, nommé logiquement +mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement zfsinstall, qui va se charger de tout le travail pour nous.</p> <p>Utilisez donc ce script ainsi : </p> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, wipons le MBR :</span> -<span class="n">dd</span> <span class="o">&lt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span> -<span class="cp"># maintenant, installons le système</span> -<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span> +dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1 +<span style="color: #75715e"># maintenant, installons le système</span> +zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c </pre></div> <p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée, -<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D'autres options +<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous convient pas.</p> <p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf :</p> -<div class="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">&quot;YES&quot;</span> -<span class="n">sshd_load</span><span class="o">=</span><span class="s">&quot;YES</span> -<span class="n">hostname</span><span class="o">=</span><span class="s">&quot;whatever&quot;</span> -<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">&quot;DHCP&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span> +<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span> +<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span> +<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span> </pre></div> @@ -410,11 +679,10 @@ système) et éditez /etc/rc.conf :</p> physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez maintenant un système FreeBSD tout propre installé sur zfs a découvrir et utiliser!</p> -<p>Voila, c'est la fin de ce tutoriel. -(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu +<p>Voila, c&rsquo;est la fin de ce tutoriel. +(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu crédible, disons)</p> -<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter -<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, +<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, <a href="https://twitter.com/petitefanfare">petitefanfare</a>, <a href="https://twitter.com/capet_ebooks">capet_ebooks</a>, <a href="https://twitter.com/zengisse">zengisse</a>, @@ -422,146 +690,146 @@ et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont code</a>, qui vient de <a href="https://twitter.com/m1sp">@m1sp</a> (<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p> -<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/%D/freebsd-online-mfsbsd/SSL ou la sécurité sur l'internet//wxcafe.net/posts/%D/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie +<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/SSL ou la sécurité sur l'internet//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: <a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès +ce qui peut avoir l&rsquo;effet de rendre légèrement parano. Si vous considérez que +c&rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> <p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être remarqué quelque chose récemment : il se trouve que le certificat qui permet de desservir ce site a changé.</p> <p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", +doigts sortis d&rsquo;un endroit particulier du corps de l&rsquo;admin/auteur de ce &ldquo;blog&rdquo;, qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système +du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&rsquo;un système fonctionnel utilisant cette compréhension récemment acquise.</p> <p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très +être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&rsquo;est très simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat +<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc&hellip; Bref, un certificat différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs +<p>Il s&rsquo;avère que c&rsquo;est a la fois très peu pratique a utiliser (les utilisateurs doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat +changement de sous-domaine conduit a un message d&rsquo;erreur, etc) et pas plus +sécurisé que d&rsquo;avoir un seul certificat wildcard. J&rsquo;ai donc généré un certificat pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> +pas <code>*.wxcafe.net</code>, et qui sera donc utilisé&hellip; bah pour <code>wxcafe.net</code>.</p> <p>Il serait préférable de faire des redirections automatiques des adresses http vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront +self-signed, il me semble préférable que l&rsquo;arrivée sur le site ne commence pas +par une page firefox disant &ldquo;Something&rsquo;s Wrong!&rdquo;, et ces redirections ne seront donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus +<p>De plus, après la lecture de l&rsquo;article de blog sur Lavabit dont le lien est plus haut, il semble intéressant (et assez important) de faire en sorte que le serveur utilise en priorité (et si possible, uniquement) des ciphers supportant PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les +communications avec ce serveur soient future-proof, c&rsquo;est a dire que, même si +quelqu&rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les communications passées.</p> <p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes +l&rsquo;implémentation : <br /> +Pour générer la clé, tout d&rsquo;abord, il convient d&rsquo;utiliser les commandes suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096 +# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation +sudo openssl req -new -key example.key -out example.csr +# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">&quot;Common Name&quot;</span> devant contenir le FQDN +sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt +# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">&#39;</span>une durée de vie de <span style="color: #ae81ff">3</span> ans </pre></div> <p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser <code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> +Une fois la clé générée, il faut dire aux différents services de l&rsquo;utiliser, et +de n&rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service. +Je vais lister ici les methodes pour quelques services que j&rsquo;utilise :</p> <h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3 +<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">&quot;</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \ + EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \ + EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">&quot;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">&quot;EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">&#39;abord, lancez la commande suivante :</span> +<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span> +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.key&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.crt&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">}</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span> </pre></div> <h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt +<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key +<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes +<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong +<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high +<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS +<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt +<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3 +<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes +<span style="color: #75715e"># [...]</span> </pre></div> <h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.crt +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL </pre></div> -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter +<p>Voila. Pour d&rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future +<p>Cela étant dit, je conseille a tout le monde d&rsquo;aller voir la conférence dans le +disclaimer, et tant qu&rsquo;a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/%D/SSL-ou-la-securite-sur-internet/Mise en place d'un serveur DNS//wxcafe.net/posts/%D/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de +implémentation d&rsquo;une technologie &ldquo;remplaçant&rdquo; le système de CAs qui existe +actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/Mise en place d'un serveur DNS//wxcafe.net/posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de domaines en différentes informations : adresses IPv4, adresses IPv6, certificats DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour @@ -569,54 +837,53 @@ simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a <a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a <a href="http://5.39.76.46">http://5.39.76.46</a>).</p> -<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque -en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que +<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque +en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que de nos jours. La configuration des serveurs DNS peut ainsi être assez contre intuitive. Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses enregistrements est important.</p> -<p>Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même +<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d'écrire, par exemple, -<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le -<code>.</code> n'est pas obligatoire et la progression se fait de droite a gauche. Par +du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le +<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine <code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point a la fin de façon courante.</p> -<p>Le reverse DNS est une variante du DNS "classique" permettant de résoudre les +<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre +Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger +quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS +sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre habituel</em></strong>, et du faux domaine .in-addr.arpa Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR 76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p> -<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, +<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord, quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des -"enregistrements", records en anglais. Par exemple, un record A indique une +&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom de domaine que vous donnez en argument, mais en précisant un autre type de -record, vous pouvez obtenir n'importe quelle information : par exemple, <code>dig NS +record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS wxcafe.net</code> devrait vous renvoyer</p> -<div class="highlight"><pre><span class="p">;</span> <span class="o">&lt;&lt;&gt;&gt;</span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o">&lt;&lt;&gt;&gt;</span> NS wxcafe.net -<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd -<span class="p">;;</span> Got answer<span class="o">:</span> -<span class="p">;;</span> <span class="o">-&gt;&gt;</span>HEADER<span class="o">&lt;&lt;-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span> -<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span> -<span class="p">;;</span> QUESTION SECTION<span class="o">:</span> -<span class="p">;</span>wxcafe.net. IN NS +<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> -<span class="p">;;</span> ANSWER SECTION<span class="o">:</span> -wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net. -wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net. +<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span> -<span class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec -<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span> -<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span> -<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span> </pre></div> @@ -626,12 +893,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et &l chacun fait autorité pour lui même, et le problème évident est que le résolveur ne peut résoudre la query si il est renvoyé encore et encore vers le même serveur. Il convient donc de définir dans le même fichier de configuration -l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième -loop, se rendra compte qu'il est en train de faire une boucle infinie et -demandera l'adresse au serveur auquel il est connecté. La première indication de +l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième +loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et +demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de direction se fait grâce au serveur du TLD.</p> <p>La configuration de bind est assez simple dans le principe, le plus complexe -étant en fait d'écrire les fichiers de zone. +étant en fait d&rsquo;écrire les fichiers de zone. La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il existe 4 fichiers de configuration principaux : <code>named.conf</code>, <code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>. @@ -641,48 +908,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher named.conf.options contient les options que vous rajoutez pour changer le comportement de bind.</p> <p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans -lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, +lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité, deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs (notamment mon accès chez moi). </p> -<p>Examinons tout d'abord les fichiers de configuration de named. -<code>named.conf.local</code> contient les définitions des zones forward et reverse. +<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse. Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont -gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce +gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence -principale étant que l'un héberge en slave les masters de l'autre. +principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre. Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p> -<div class="highlight"><pre><span class="n">zone</span> <span class="s">&quot;wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;home.wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> </pre></div> @@ -693,250 +959,247 @@ tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est assez parlant.</p> <p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit <code>/etc/bind/master/wxcafe.net</code> : </p> -<div class="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span> - <span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span> - <span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span> - <span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span> - <span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span> - <span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span> - <span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span> + <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span> + <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span> + <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span> + <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span> + <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span> + <span style="color: #f8f8f2">)</span> -<span class="p">;</span> <span class="n">Name</span> <span class="n">servers</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">SPF</span> <span class="s">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> -<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> -<span class="p">;</span> <span class="n">Aliases</span> -<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="p">;</span> <span class="p">[...]</span> -<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span> +<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span> +<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span> -<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span> +<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> </pre></div> <p>Alors. Expliquons ligne par ligne.<br /> -Tout d'abord, le TTL (time to live) est un paramètre définissant le temps +Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps pendant lequel les serveurs récursif (qui font un cache des données) doivent cacher ce fichier de zone. <br /> Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, wxcafe.net. <br /> Maintenant, nous arrivons a un record important : SOA (Start of Authority). -Ce record prend de nombreux arguments, dans l'ordre :<br /> +Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br /> - Le nameserver autoritaire pour le nom de domaine en question,<br /> - - L'adresse email du responsable de cette zone, avec le premier point + - L&rsquo;adresse email du responsable de cette zone, avec le premier point remplacé par un @, </p> <p>puis entre parenthèses :<br /> - - Le numéro de série ("version" du fichier de zone, ici au format + - Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format YYYYMMDDNN) <br /> - La période de refresh, période entre chaque mise a jour du nameserver authoritaire secondaire, <br /> - La période de retry, le temps entre chaque essai de mise a jour si le nameserveur authoritaire primaire est indisponible, <br /> - - La période d'expire, le temps qu'attendra le serveur autoritaire + - La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire secondaire avant de supprimer les informations de son cache si le primaire reste indisponible, et enfin <br /> - - La période de TTL négatif, le temps qu'attendra le serveur secondaire + - La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire avant de ne plus offrir les informations de cette zone si le serveur primaire est injoignable. </p> -<p>Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus +<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus important a lire (pour les humains en tout cas). Continuons : </p> <p>NS (nameserver) permet de désigner les différents nameservers faisant autorité pour ce domaine. </p> -<p>MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. -SPF est un record d'authentification pour les emails. -Les records A désignent l'association entre un nom de domaine et une adresse +<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine. +SPF est un record d&rsquo;authentification pour les emails. +Les records A désignent l&rsquo;association entre un nom de domaine et une adresse IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site -n'est pas encore en IPv6.</p> +n&rsquo;est pas encore en IPv6.</p> <p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de -mettre en place des domaines exactement semblables a d'autre (ce qui permet par -exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p> +mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par +exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p> <p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet de changer la valeur du @ et des noms de domaine non complets (qui ne se terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et -l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on -l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, +l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on +l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, cela permet de rediriger les requêtes nous parvenant et demandant un domaine se trouvant sous home.wxcafe.net.</p> <p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques -différences n'étant en fin de compte que des différences de valeurs (dues au -fait que, eh bah, c'est pas les mêmes domaines...).</p> -<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est +différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au +fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p> +<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC 1034</a> et le <a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant -aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/%D/mise-en-place-dun-serveur-dns/NAT//wxcafe.net/posts/%D/nat/<p>NAT (Network Address Translation) in a word?<br /> -It's complicated. Very. Don't do it, you'd damage your brain. </p> -<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/%D/nat/Plan9 from whichever space//wxcafe.net/posts/%D/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. -Wood. Il est assez connu comme étant l'un des pires films jamais sortis. Rempli -d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort -d'un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> -<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l'indique), -et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite -des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a -introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des -ressources appartenant a d'autres ordinateurs a distance, un support de -l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne +aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/NAT//wxcafe.net/posts/nat/<p>NAT (Network Address Translation) in a word?<br /> +It&rsquo;s complicated. Very. Don&rsquo;t do it, you&rsquo;d damage your brain. </p> +<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/nat/Plan9 from whichever space//wxcafe.net/posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. +Wood. Il est assez connu comme étant l&rsquo;un des pires films jamais sortis. Rempli +d&rsquo;erreur de montage, d&rsquo;effets spéciaux au rabais, et ayant même connu la mort +d&rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> +<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l&rsquo;indique), +et qui a été pensé comme le successeur d&rsquo;Unix. Il est conçu comme une poursuite +des concepts unixiens jusqu&rsquo;à leur but naturel. Ainsi, c&rsquo;est Plan9 qui a +introduit le concept d&rsquo;UnionFS, le protocole 9P qui permet d&rsquo;acceder a des +ressources appartenant a d&rsquo;autres ordinateurs a distance, un support de +l&rsquo;unicode par défaut et sur tout le système (a l&rsquo;inverse d&rsquo;Unix, qui fonctionne a la base en ASCII), un support de ProcFS amélioré, une interface graphique par -défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p> -<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit -d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a -quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt +défaut, et d&rsquo;autres améliorations sur les thèmes de base que propose Unix. </p> +<p>Cependant, Plan9 n&rsquo;a jamais été véritablement utilisé pour quoi que ce soit +d&rsquo;autre que la recherche en systèmes, et c&rsquo;est dommage, parce que Plan9 a +quelque chose de très intéressant à proposer. En effet, en ces jours d&rsquo;intérêt grandissant pour le klaoude et la délocalisation a la fois du processing et des -données, et bien que Plan9 ait été créé bien avant que le terme "cloud -computing" n'apparaisse pour la première fois, il semble que ce système ait été +données, et bien que Plan9 ait été créé bien avant que le terme &ldquo;cloud +computing&rdquo; n&rsquo;apparaisse pour la première fois, il semble que ce système ait été conçu pour apporter cette délocalisation tant rêvée.</p> -<p>En effet, même si l'on considère que les nouveautés qu'il apporte par rapport a -Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà -conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système -d'exploitation ultime en terme de partage de ressources et de données. -Ainsi, le fait que 9P permette de considérer toutes les ressources d'un système -distant comme n'étant qu'une poignée de fichiers permet de le monter comme -n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder +<p>En effet, même si l&rsquo;on considère que les nouveautés qu&rsquo;il apporte par rapport a +Unix ne sont pas extraordinaires en soit (alors qu&rsquo;elles sont déjà +conséquentes), lorsqu&rsquo;on les prend ensemble, elles font de Plan9 le système +d&rsquo;exploitation ultime en terme de partage de ressources et de données. +Ainsi, le fait que 9P permette de considérer toutes les ressources d&rsquo;un système +distant comme n&rsquo;étant qu&rsquo;une poignée de fichiers permet de le monter comme +n&rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse -interagir avec les autres, même s'ils sont hétérogènes (c'est a dire provenant -de machines différentes), permet d'utiliser les ressources d'une machine -distante comme si elle était présente localement. Le mécanisme d'UnionFS permet +interagir avec les autres, même s&rsquo;ils sont hétérogènes (c&rsquo;est a dire provenant +de machines différentes), permet d&rsquo;utiliser les ressources d&rsquo;une machine +distante comme si elle était présente localement. Le mécanisme d&rsquo;UnionFS permet de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers de plusieurs machines a la fois (ce qui permet une délocalisation des données bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p> <p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de -parler d'ordinateur lorsque le concept même du système est d'être composé de +parler d&rsquo;ordinateur lorsque le concept même du système est d&rsquo;être composé de clusters eux mêmes composés de machines hétérogènes. Le système de fichier -virtuel /net fourni par le kernel de Plan9 permet d'implémenter très facilement -différents concepts réseaux : en montant le /net d'un ordinateur du réseau local -sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur -du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur +virtuel /net fourni par le kernel de Plan9 permet d&rsquo;implémenter très facilement +différents concepts réseaux : en montant le /net d&rsquo;un ordinateur du réseau local +sur celui servant de gateway vers l&rsquo;internet, on crée un NAT vers cet ordinateur +du réseau local. En montant le /net d&rsquo;un ordinateur distant sur un ordinateur local via le protocole 9P sécurisé, on crée un VPN : les connections locales se -font en utilisant l'accès de l'ordinateur distant, et les connections entre les +font en utilisant l&rsquo;accès de l&rsquo;ordinateur distant, et les connections entre les deux sont chiffrées. </p> <p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour -partager leur "puissance" de calcul en userspace, des superordinateurs pour -lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels -JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait +partager leur &ldquo;puissance&rdquo; de calcul en userspace, des superordinateurs pour +lesquels le noyau Linux s&rsquo;est doté du support de jusqu&rsquo;à 4096 CPUs, des OS tels +JoliOS qui promettent une integration du klaoude alors qu&rsquo;ils ne sont en fait que des navigateurs web a peine améliorés et des services de stockage en ligne -qui promettent un accès universel a toutes nos données alors qu'ils ne proposent +qui promettent un accès universel a toutes nos données alors qu&rsquo;ils ne proposent que de les garder a disposition par le web, Plan9 promettait une technologie de partage des ressources système et de données, une intégration du réseau dans le système particulièrement poussée, un environnement graphique supporté par le -basesystem et non greffé par dessus comme l'a été X11, et de nombreuses autres +basesystem et non greffé par dessus comme l&rsquo;a été X11, et de nombreuses autres améliorations sur Unix.</p> -<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative, -et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de +<p>Malheureusement, il n&rsquo;a jamais été adopté de façon véritablement significative, +et ce pour une raison très Unixiènne : &ldquo;worse is better&rdquo;. En effet, le parc de machines Unix déjà installées était suffisamment performant et fonctionnel pour que des solutions soient développées au dessus du système pour remplir les mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de -Linux, FUSE, etc...</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/%D/plan-9-from-whichever-space/Sed Basics//wxcafe.net/posts/%D/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler +Linux, FUSE, etc&hellip;</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/Sed Basics//wxcafe.net/posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler le texte (ce qui se montre relativement indispensable dans un environnement Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu connu en détail, et la plupart du temps une seule fonction est utilisée : le remplacement de texte.<br /> Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p> -<p>Tout d'abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais -aussi un langage de manipulation de texte dérivé de <code>ed</code>, l'éditeur original. -<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas -personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des -machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs -dits "visuels", tels que vim, emacs, et globalement tous les éditeurs ayant un +<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais +aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas +personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des +machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs +dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du -concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d'une ligne a la fois. +concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois. En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p> -<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d'empêcher -l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui -permet de rediriger l'output dans le fichier d'input. Cela dit, l'intérêt unique +<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher +l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui +permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique du programme est son langage de manipulation de texte.</p> <p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des /). Ainsi, la commande de base dans <code>sed</code> est </p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/ </pre></div> <p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de -n'exécuter les commandes qui suivent que sur ces lignes.) </p> +n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p> <p><br/> -La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s'utilise de +La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de la façon suivante : </p> -<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span> </pre></div> <p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une regex) par [new text] (qui doit être un texte fixe, avec quelques exceptions), en appliquant [options], la plus connue des options étant <code>g</code>, -qui permet d'appliquer la commande affectée a toutes les occurrences du texte +qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte matché sur la/les lignes concernée-s.<br /> -Les exceptions a la "fixité" de [new text] sont particulièrement +Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard, -excepté le fait qu'il permet jusqu'à 9 "holding spaces", qui sont délimités par +excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par \( et \), et qui sont représentées dans le texte de remplacement par \1 à \9.</p> <p>Par exemple, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39; </pre></div> -<p>sur le texte "hello world world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world </pre></div> <p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le texte original. Ainsi, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&amp;</span> <span class="n">world</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39; </pre></div> -<p>sur le texte "hello world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world </pre></div> <p><br/></p> <p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans -l'espace courant :</p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span> +l&rsquo;espace courant :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p </pre></div> <p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire -dédié, que j'appelle l'espace courant (pattern space en anglais). La commande -<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit -le pattern space de façon a ce qu'il ne contienne que les lignes matchant, et le -<strong>p</strong> affiche donc ce dernier.</p> -<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s'utilisent ainsi :</p> -<div class="highlight"><pre><span class="n">c</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit +le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p> +<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \ +[text] </pre></div> <p>De la même façon, pour le i : </p> -<div class="highlight"><pre><span class="n">i</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \ +[text] </pre></div> <p>Et de même pour a. </p> -<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'elles +<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong> sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme @@ -947,26 +1210,25 @@ space, et non sur la ligne en question.</p> /[regex]/d <strong>d</strong> (delete) supprime les contenus du pattern space.</p> <p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je -parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/%D/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé -au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier <em>en +parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé +au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a -ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou -bien la confidentialité d'un support de stockage, par exemple. Nous allons ici +ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou +bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici voir comment mettre en place un système de ce type sous GNU/Linux. Cet article -n'a pas pour but de vous apprendre a mettre en place un système basé sur une -procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en -jeu dans l'utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de -présenter un rapide tutoriel concernant la création d'un support chiffré sur +n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une +procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en +jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de +présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p> <p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système -du noyau Linux, et s'appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement -de disques. Comme son nom l'indique, device-mapper est un système qui a pour but +du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement +de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère -comme "block device" tout fichier spécial (en gros, les fichiers disques dans -<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le +comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de -fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. -Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. +fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad. +Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes. Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans /dev, et device-mapper est requis pour pouvoir en voir les partitions (qui apparaîtront donc dans /dev/mapper)</p> @@ -976,59 +1238,59 @@ déchiffre a la volée tous les accès disques a ce périphérique non chiffré traduisant sur le système de fichier chiffré, le tout de manière tout a fait transparente pour les applications utilisant le disque en question. Cela induit bien entendu une baisse de performance relativement significative dans le cas -d'un chiffrement du système de fichier root, mais quasiment insignifiante dans +d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans le cas de chiffrement de partitions de données.</p> -<p>D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer +<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer si le système de fichier root est chiffré. Dans ce cas précis, la procédure de -boot <strong><em>doit</em></strong> s'appuyer sur une image initrd (l'initrd est un système de +boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de fichier minimal qui sert uniquement a initialiser le système. Les kernels de base de la plupart des distributions GNU/Linux en utilisent un dans tous les cas, pour des raisons de compatibilité) et sur une partition de boot qui elle -n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge +n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et -charge l'initrd en RAM, celui-ci a son tour lance un script permettant de +charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de charger les modules nécessaires a la suite du boot (que ce soit pour un boot sans disque root local, ou bien comme ici avec un système chiffré), puis le -système de fichier "cible" est remonté sur la racine, et l'initrd est démonté -est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend +système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté +est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend depuis le système de fichier maintenant monté sur la racine.</p> <p>La méthode la plus évidente pour contourner le chiffrement du disque est alors -de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par +de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par un autre modifié, copiant par exemple la phrase de passe permettant de déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir -contre ce genre d'attaques : l'une des plus simple est de faire un checksum du +contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot -que l'initrd présente toujours le même checksum. Cela dit, cette méthode a -l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès +que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a +l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès a un fichier initrd reconnu comme sûr.<br /> Une autre approche consisterait a placer le système de fichier /boot sur un périphérique dédié, protégé en écriture de façon matérielle (par exemple, une carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et -protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un -attaquant de modifier ce système de fichier, et l'initrd est alors toujours de +protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un +attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de confiance. Cependant, cela a pour conséquence de rendre la mise a jour de -l'initrd et du noyau <em>beaucoup</em> plus difficile qu'elle ne le serait sans.</p> +l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p> <p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop, -l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est -maintenant responsable de l'utilisation <em>userspace</em> de dm-crypt, qui pour sa +l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est +maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la -manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier +manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi obligatoirement être capables de le faire en tant que root. </p> <p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br /> -Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, -dans une situation réelle ou l'on cherche a chiffrer un disque, il convient -d'utiliser /dev/urandom comme source, pour éviter la détection du système de +Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela, +dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient +d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de fichier chiffré sur le disque. Ici, par exemple, nous allons faire : </p> -<div class="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img </pre></div> <p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img </pre></div> @@ -1038,34 +1300,34 @@ passphrase. Il convient ici de choisir une passphrase particulièrement sûre, puisque toute personne ayant accès a la passphrase aura aussi accès au disque et donc a vos secrets.<br /> Une fois cela fait, nous allons mapper cette image : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto </pre></div> <p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes, -puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous -voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En +puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous +voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les -systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque -qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque +systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque +qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque virtuel qui correspond a notre image. Il se comporte comme toute partition, et peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. Il se comporte en effet comme une partition, et non comme un véritable disque.) -Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de -le faire, pour pouvoir l'utiliser. </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> +Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de +le faire, pour pouvoir l&rsquo;utiliser. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto </pre></div> <p>Maintenant que notre disque est formaté, il peut être monté : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt </pre></div> <p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat suivant : </p> -<div class="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) </pre></div> @@ -1075,51 +1337,51 @@ sont (en fonction de votre passphrase) en sécurité. </p> <ul> <li> <p>Pour monter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o">&lt;</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt; +sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt; </pre></div> </li> <li> <p>Pour démonter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt; +sudo cryptsetup luksClose &lt;nom de disque virtuel&gt; </pre></div> </li> </ul> -<p>Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de +<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de créer et de monter/démonter vos images/disques chiffré-e-s en une seule commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p> <p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable disque (ou clé usb, ou autre), il est préférable de créer une partition de taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code> -pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Redesign du blog, etc//wxcafe.net/posts/%D/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation +pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Redesign du blog, etc//wxcafe.net/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a &ldquo;un peu&rdquo; changé récemment.</p> +<p>Du coup, expliquons. J&rsquo;ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même +occasion découvert <a href="http://getpelican.com">pelican</a>. J&rsquo;ai tout de suite accroché a ce générateur de +site statique en python, du fait de son efficacité, de sa facilité d&rsquo;utilisation et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au +fichiers markdown ou reStructuredText, les passe a la moulinette d&rsquo;un &ldquo;thème&rdquo; +constitué de templates pour les fichiers html et l&rsquo;organisation du projet et +d&rsquo;une partie &ldquo;statique&rdquo; contenant le css, et les autres fichiers nécessaires au projet, et en fait des pages html. </p> <p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span> +<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span> + <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span> </pre></div> @@ -1127,116 +1389,116 @@ projet, et en fait des pages html. </p> django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a +<p>L&rsquo;un des grands avantages de pelican est aussi la facilité qu&rsquo;il offre quand a la mise a jour du blog.<br /> En effet, il offre un système de Makefiles permettant, grâce a de nombreuses cibles de compilation, de régénérer le site entier, de ne générer que les fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... +fichiers n&rsquo;existant pas la dernière fois, etc&hellip; La gestion du projet en devient donc très simple, puisque après avoir écrit un article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> <p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est +pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&rsquo;est moi +qui ait modifié les templates et le css), c&rsquo;est lisible (puisque c&rsquo;est du +python, par opposition au PHP&hellip;), et c&rsquo;est plus &ldquo;efficace&rdquo;. Le markdown est très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus +les articles, je n&rsquo;ai pas besoin d&rsquo;un accès continu au net, bref, c&rsquo;est plus efficace.</p> <p>En ce qui concerne les points négatifs : </p> <ul> <li> <p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a + Je vous propose de vous référer a l&rsquo;article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a mon avis sur ce sujet.</p> </li> <li> <p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a + Il va bientôt être remis, c&rsquo;est juste un manque de temps de ma part, mais vu + que toutes les pages passent par les mêmes templates, c&rsquo;est assez facile a faire.</p> </li> <li> <p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> + Pourquoi c&rsquo;est dans les points négatifs, ca?</p> </li> <li> -<p>Temps d'adaptation et d'appréhension du système: +<p>Temps d&rsquo;adaptation et d&rsquo;appréhension du système: Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca + réguliers sur le blog, c&rsquo;est parce que j&rsquo;apprend a me servir de ce système + et que j&rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous + les cas ca me permet d&rsquo;apprendre plein de choses, donc je mets plutôt ca dans la catëgorie positive.</p> </li> </ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/%D/redesign-du-blog/Comment Saurik a rooté les Google Glass//wxcafe.net/posts/%D/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu -pour avoir développé Cydia, un "app store" alternatif pour les iTrucs), +<p>Voila, c&rsquo;est mon retour d&rsquo;expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/redesign-du-blog/Comment Saurik a rooté les Google Glass//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu +pour avoir développé Cydia, un &ldquo;app store&rdquo; alternatif pour les iTrucs), après avoir reçu une paire de Google glass de la part de Google (de -façon assez évidente...), a trouvé intéressant d'obtenir un accès root -sur celles-ci, ce qu'il a accompli très rapidement. Des démentis de la +façon assez évidente&hellip;), a trouvé intéressant d&rsquo;obtenir un accès root +sur celles-ci, ce qu&rsquo;il a accompli très rapidement. Des démentis de la part de Google et de certains autres sites sont vite arrivés, disant que les lunettes possédaient un bootloader débloqué et que de fait, le root était facile a obtenir : il suffisait de débloquer le bootloader, -d'extraire l'OS, de le rooter hors-fonctionnement, puis de le +d&rsquo;extraire l&rsquo;OS, de le rooter hors-fonctionnement, puis de le réinstaller, rooté, sur les lunettes.</p> <p>Le fait est que de débloquer le bootloader laisse une trace permanente -sur les lunettes, et que Saurik n'a pas utilisé cette technique pour +sur les lunettes, et que Saurik n&rsquo;a pas utilisé cette technique pour rooter sa paire. Voyons comment il a fait :</p> -<p><em>Je tiens tout d'abord a préciser que toutes les informations qui vont +<p><em>Je tiens tout d&rsquo;abord a préciser que toutes les informations qui vont suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la -partie "How does this exploit work".  Je tente d'apporter ma maigre +partie &ldquo;How does this exploit work&rdquo;.  Je tente d&rsquo;apporter ma maigre contribution a cette explication.</em></p> -<p>Donc, d'après les témoignages des quelques utilisateurs de Glass dans le +<p>Donc, d&rsquo;après les témoignages des quelques utilisateurs de Glass dans le monde, il semblerait que ces dernières fonctionnent avec un système -d'exploitation Android, avec une nouvelle interface, mais avec les mêmes +d&rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes outils internes: un kernel Linux, des outils userland GNU et une machine virtuelle Java Dalvik pour les applications.</p> -<p>Saurik a donc cherché un exploit connu pour cette version d'android, et -l'a appliqué a son problème. L'exploit en question est relativement -simple. Depuis la version 4.0 d'android, le système permet la sauvegarde +<p>Saurik a donc cherché un exploit connu pour cette version d&rsquo;android, et +l&rsquo;a appliqué a son problème. L&rsquo;exploit en question est relativement +simple. Depuis la version 4.0 d&rsquo;android, le système permet la sauvegarde des données des différentes applications, une a une, via ADB (Android -Debug Bridge, un protocole USB permettant l'accès a de nombreuses +Debug Bridge, un protocole USB permettant l&rsquo;accès a de nombreuses fonctions avancées des machines fonctionnant sous android, dont, entre -autre, un shell, un accès au logs de debugging, etc... Cette +autre, un shell, un accès au logs de debugging, etc&hellip; Cette fonctionnalité est bien entendu désactivable.) Ce backup est très simple : il crée un fichier .tgz contenant le dossier de configuration de -l'application. Lors de la restauration, le système supprime la -configuration existante, puis la remplace par celle dans l'archive gzip.</p> +l&rsquo;application. Lors de la restauration, le système supprime la +configuration existante, puis la remplace par celle dans l&rsquo;archive gzip.</p> <p>Le problème de sécurité vient du fait que les applications android voient leurs données stockées dans /data/data/identifiant/, et que -/data/ a pour permissions drwxrwx--x  27  system  system, ce qui +/data/ a pour permissions drwxrwx&ndash;x  27  system  system, ce qui signifie que seul system et les membres du groupe system peuvent lire dessus. Or, le fichier /data/local.prop définit de nombreux paramètres -au démarrage, et notamment un qui permet au système de déterminer s'il -fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur +au démarrage, et notamment un qui permet au système de déterminer s&rsquo;il +fonctionne dans une VM ou sur un véritable appareil. S&rsquo;il fonctionne sur une machine virtuelle, il donne les droits root a tout utilisateur se -connectant via ADB, ce qui est ce que l'on cherche pour l'instant. Le +connectant via ADB, ce qui est ce que l&rsquo;on cherche pour l&rsquo;instant. Le fait que /data/ appartienne a system veut dire que le programme de restauration doit être setuid pour accéder aux données a l’intérieur qui -appartiennent a root (soit toutes les applications système d'android, -dont l'application paramètres, et, dans ce cas précis, l'application de +appartiennent a root (soit toutes les applications système d&rsquo;android, +dont l&rsquo;application paramètres, et, dans ce cas précis, l&rsquo;application de log système présente sur les google glass de test. Ainsi, nous avons un processus tournant en tant que root, qui va écrire sur une partition qui nous intéresse des données que nous possédons.</p> -<p>Cependant, un problème reste : le système de restauration d'Android +<p>Cependant, un problème reste : le système de restauration d&rsquo;Android vérifie les données avant de restaurer, et ne restaure pas les symlinks, -ce qui nous empêche d'avoir accès directement a /data/local.prop, le -fichier qu'on cherche a modifier. Cela dit, il nous reste une +ce qui nous empêche d&rsquo;avoir accès directement a /data/local.prop, le +fichier qu&rsquo;on cherche a modifier. Cela dit, il nous reste une possiblité. Plaçons un dossier world-writable dans le fichier de backup, et nous pourrons écrire dedans pendant quelques secondes, le temps que la restauration se termine et que le système remette les permissions en place. Ainsi, nous pouvons créer le fichier /data/local/com.google.glass.logging/whatev/x, lien vers /data/local.prop, et nous avons un toujours un processus tournant en -tant que root qui est en train d'écrire dans ce dossier.</p> +tant que root qui est en train d&rsquo;écrire dans ce dossier.</p> <p>Donc, nous allons lancer deux processus en même temps : </p> <ul> <li> <p>Le premier tentera en boucle de créer le symlink. Il sera consitué de la commande suivante, depuis un shell sur les lunettes :</p> -<div class="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">&gt;/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span> -<span class="k">do</span> <span class="o">:</span> -<span class="n">done</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&gt;/dev/null +do : +done </pre></div> @@ -1245,10 +1507,10 @@ tant que root qui est en train d'écrire dans ce dossier.</p> <p>Le deuxième sera le processus de restauration de notre exploit. Celui ci, pour une plus grande chance de réussite, devra être suffisamment lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x, - pour qu'il crée whatev, prenne du temps a copier bigfile, puis écrive + pour qu&rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive dans x après que le symlink soit effectif. La commande sera, depuis - l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span> + l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab </pre></div> @@ -1257,111 +1519,111 @@ tant que root qui est en train d'écrire dans ce dossier.</p> world-readable. Il va commencer a copier le fichier bigfile.<br /> - Le processus de symlink va créer le lien /data/data/com.google.glass.logging/whatev/x, pointant vers - /data/local.prop, puis rendre l'âme proprement.<br /> + /data/local.prop, puis rendre l&rsquo;âme proprement.<br /> - Le processus de restauration, ayant enfin fini de copier whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui est lié a /data/local.prop. Comme le processus est setuid root, il ne se rendra compte de rien, et écrira tout dans /data/local.prop.</p> </li> </ul> -<p>And voilà! On a écrit ce que l'on veut dans /data/local.prop, ce qui -nous permet de faire croire a android qu'il tourne dans une machine -virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui -indique au noyau qu'il tourne dans qemu, un système de VM).</p> -<p>Il nous reste a rebooter, depuis l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<p>And voilà! On a écrit ce que l&rsquo;on veut dans /data/local.prop, ce qui +nous permet de faire croire a android qu&rsquo;il tourne dans une machine +virtuelle (ce que l&rsquo;on veut, c&rsquo;est en fait &ldquo;ro.kernel.qemu=1&rdquo;, qui +indique au noyau qu&rsquo;il tourne dans qemu, un système de VM).</p> +<p>Il nous reste a rebooter, depuis l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Puis nous remontons la partitions système en lecture/écriture (r/w), depuis le host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;mount -o remount,rw /system&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;mount -o remount,rw /system&quot; </pre></div> -<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span> +<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l&rsquo;appareil :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin </pre></div> <p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir l’exécuter plus tard :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;chmod 6755 /system/xbin/su&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;chmod 6755 /system/xbin/su&quot; </pre></div> <p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir redémarrer normalement :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;rm /data/local.prop&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;rm /data/local.prop&quot; </pre></div> <p>Enfin, nous redemarrons a nouveau :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Et voila, une paire de google glass rootée!</p> -<p>Il est bon de préciser que cette manipulation n'est possible que parce -que les lunettes tournent sous une ancienne version d'android, et que ce +<p>Il est bon de préciser que cette manipulation n&rsquo;est possible que parce +que les lunettes tournent sous une ancienne version d&rsquo;android, et que ce bug a été fixé depuis.</p> <p>Il serait aussi interessant de couvrir les problèmes de vie privée -qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p> -<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/%D/comment-saurik-a-roote-les-google-glass/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/%D/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il -s'agit de posséder son propre serveur, et donc, par extension, ses +qu&rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.</p> +<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il +s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses données. </p> -<p>Bien entendu, il n'est pas nécessaire pour cela de posséder +<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder physiquement son propre serveur (encore que ce soit possible, mais ce -n'est pas le sujet abordé ici.)<br /> +n&rsquo;est pas le sujet abordé ici.)<br /> Nous expliquerons ici les étapes nécessaires pour arriver a avoir un serveur utilisable, du moment ou vous arrivez sur le système fraichement installé, au moment ou vous possédez un serveur avec tous les paquets -nécessaires a l'utilisation que l'on veut en faire ici d'installés. +nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés. Cette partie va consister a paramétrer le système (ici un debian squeeze. Il est bien sur possible de faire la même chose avec a peu près toutes les distributions Linux disponibles, tout comme avec les BSD et tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x -squeeze, parce que c'est une distribution simple a utiliser comme -serveur, stable, et facile a configurer (puisqu'une bonne partie de la +squeeze, parce que c&rsquo;est une distribution simple a utiliser comme +serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la configuration est déjà faite et incluse dans le paquet), donc adaptée au -but de cet article, a savoir rendre l'installation simple et +but de cet article, a savoir rendre l&rsquo;installation simple et compréhensible).</p> -<p>La première chose a faire est bien entendu d'obtenir le serveur en lui +<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui même. Cette partie de la chose ne sera pas traitée dans cet article. Il -existe en effet un nombre infini d'obtenir un serveur, que ce soit en le -louant chez OVH/1&amp;1/n'importe quel autre hébergeur commercial, en -participant a un système d'hébergement collaboratif (je vous laisse +existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le +louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en +participant a un système d&rsquo;hébergement collaboratif (je vous laisse chercher), en achetant un serveur et en le faisant fonctionner de chez -vous, en utilisant un vieux PC... Bref, les possibilités sont multiples. +vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples. Dès lors que vous avez accès a un système debian serveur, peu importe sur quel matériel il fonctionne, et a priori peu importe aussi la manière -dont vous y accédez, le résultat est le même (et la procédure aussi...). +dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;). Dans cet article, nous parlerons de la configuration de base, du moment ou vous avez le serveur vierge dans les mains au moment ou vous installez le serveur http.</p> -<p>Dans cet article, lorsque est précisée le type d'IP a utiliser, il -convient de mettre ce type précisément. Quand le type n'est pas +<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il +convient de mettre ce type précisément. Quand le type n&rsquo;est pas précisée, libre a vous de choisir ipv4 ou ipv6.</p> <p>Bref. Commençons au point ou vous avez un accès root a votre serveur, -n'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou -rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez +n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou +rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe solide sur le compte root. Continuons en allant vite mettre en place le nom de domaine. Pour cela, votre registrar doit vous fournir une -interface vous permettant d'éditer l'entrée DNS pour votre nom de +interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de domaine. </p> -<p>Cette entrée doit donc pour l'instant ressembler a ca :</p> -<div class="highlight"><pre> <span class="o">&lt;</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">&gt;</span> <span class="n">NS</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">A</span> <span class="o">&lt;</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> - <span class="n">IN</span> <span class="n">AAAA</span> <span class="o">&lt;</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> +<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1 + IN MX 1 + IN A &lt;IPv4 de votre serveur&gt; + IN AAAA &lt;IPv6 de votre serveur&gt; </pre></div> <p>Cela vous permet de rediriger tout le trafic se référant a votre nom de domaine vers votre ip (le fonctionnement exact du DNS est assez -compliqué a expliquer, donc on va dire que c'est de la magie pour -l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer +compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour +l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers votre serveur, ce qui est un bon début. Faisons un petit point sécurité ici : pour accéder a votre serveur, il vous suffit actuellement de taper @@ -1370,50 +1632,50 @@ le mot de passe root.</p> bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction du nombre de caractères, ça prend plus ou moins de temps, et si vous avez suffisamment de caractères, ça peut prendre un temps assez -conséquent. Cela dit, il vaut mieux être prudent...) Ainsi, nous allons -arrêter d'utiliser root et nous allons commencer a utiliser des couples +conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons +arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples clés publiques/privées pour nous connecter au serveur.<br /> -Cela se fait en deux temps : tout d'abord, créer un nouvel utilisateur, -grâce auquel nous administrerons le serveur a l'avenir; puis configurer -OpenSSH pour que celui ci n'accepte que les connections par clés et plus +Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur, +grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer +OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus celles sur root.</p> <p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se fait avec adduser, qui est interactif (vous ne devriez pas avoir de -problème avec, puisqu'il crée tout les dossiers et fichiers nécessaires, +problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires, et vous pose toutes les questions utiles pour vous aider.) sinon, vous -devrez utiliser useradd, qui est (en plus d'être très chiant a -distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait -un simple script permettant l'utilisation d'useradd plus facilement.)</p> +devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a +distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait +un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p> <p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif en faisant un <code>adduser --group &lt;username&gt;</code></p> <p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m -N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera -son dossier principal dans /home/, et l'ajoutera au groupe du même nom +son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom que lui (ce qui est en général nécessaire pour des questions de vie privée).</p> -<p>Il convient maintenant d'ajouter cet utilisateur aux groupes qu'il sera +<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix users staff sudo wheel</code>, puis de changer son mot de passe <code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br /> -Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un +Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un utilisateur complètement fonctionnel et utilisable pour toutes les -taches d'administration. Si vous devez encore utiliser root, c'est que +taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que quelque chose ne va pas.</p> -<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous +<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous allons maintenant passer a la phase 2 du plan : désactiver le login ssh root et le login ssh par mot de passe.<br /> -Tout d'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un +Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un système assez semblable a celui vous permettant de chiffrer vos mail : vous avec une clé publique et une clé privée sur le client, et la clé publique est aussi sur le serveur. Lorsque vous vous connectez, openssh vérifie que vous possédez la clé privée qui correspond a la clé publique stockée sur le serveur (pour votre utilisateur, bien entendu). Il est -également possible d'utiliser plusieurs clés publique pour chaque<br /> +également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br /> utilisateur.</p> <p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout -d'abord, il nous faut générer un couple de clés publique/privée sur le +d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t rsa précise a ssh que nous voulons un chiffrement rsa, qui est suffisamment solide pour cette utilisation.) Entrez les informations que @@ -1421,12 +1683,11 @@ ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br /> known_hosts liste les serveurs auxquels vous vous êtes connectés déjà une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous -intéresse ici c'est id_rsa et id_rsa.pub . id_rsa contient votre clé +intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé privée, sauvegardez la sur une clé USB ou notez la sur un bout de papier, si vous la perdez, vous ne pourrez plus vous connecter au -serveur. (planquez la clé usb/le bout de papier...) id_rsa.pub, quand a -lui, contient votre clé publique. Copiez la sur le serveur, avec un -<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou +serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a +lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou en la copiant a la main, si ça vous amuse. </p> <p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra. @@ -1438,19 +1699,19 @@ domaine&gt;</code>), et il ne devrait pas vous demander de mot de pass il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré, donc vérifiez que vous avez suivi correctement les instruction ci-dessus.</strong></p> -<p>Continuons. Il ne nous reste plus qu'a installer le serveur web, et a le +<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le configurer: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \ -<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \ -<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \ -<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \ -<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \ +apache2 apache2.2-common apache2-doc apache2-mpm-prefork \ +apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \ +php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \ +apache2-suexec php-pear php-auth php5-mcrypt mcrypt \ +php5-imagick imagemagick libapache2-mod-suphp libruby \ +libapache2-mod-ruby </pre></div> -<p>(faisons large, on aura besoin de l'excédent plus tard...), puis activons les<br /> +<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br /> mods apache en faisant <code>a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest</code>, et faisons en sorte que ces activations soient prises en compte par apache via un <code>sudo service apache2 @@ -1460,46 +1721,46 @@ comment fonctionner sur notre nom de domaine et ou trouver les fichiers a envoyer. </p> <p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez sympa pour nous filer un fichier de configuration par défaut. Il nous -faut encore l'éditer, en changeant l'adresse mail au début du document +faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>, -et enfin redémarrer apache pour qu'il prenne en compte les +et enfin redémarrer apache pour qu&rsquo;il prenne en compte les modifications, par un <code>sudo service apache2 restart</code> </p> <p>Et maintenant, il vous reste a apprendre le html, parce que ca y est, votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on -verra l'installation du serveur mail (c'est suffisamment complexe pour -prendre un article seul...)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/%D/monter-son-propre-serveur-partie-1/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are +verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour +prendre un article seul&hellip;)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p> -<p>Bon, voila. J'ai passé le cap. Je suis sous GNU/Linux depuis un certain +<p>Bon, voila. J&rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain temps, maintenant, et depuis un certain temps je remarque des -changements malvenus. Bien entendu, au début, je n'avais pas les +changements malvenus. Bien entendu, au début, je n&rsquo;avais pas les connaissances nécessaires pour comprendre ne serait-ce que ces modifications existaient. Et puis certaines sont arrivées avant que je -n'ai même idée que quelque chose dans mon système d'exploitation avait +n&rsquo;ai même idée que quelque chose dans mon système d&rsquo;exploitation avait cette fonction la. Par exemple, udev, ou policykit/consolekit/. A -l'époque, je n'avais aucune idée de la façon dont les disques étaient -montés sur mon système. Le premier système non-Windows que j'ai utilisé +l&rsquo;époque, je n&rsquo;avais aucune idée de la façon dont les disques étaient +montés sur mon système. Le premier système non-Windows que j&rsquo;ai utilisé fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je cherche a démonter le système pour comprendre comment il fonctionnait en -profondeur. Cependant, avec le temps, les connaissances s'accumulant et -mon niveau de compréhension du système s'améliorant, j'ai commencé a -remarquer que certain bouts de l'OS ne collaient pas exactement avec les -autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a -cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma -compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne +profondeur. Cependant, avec le temps, les connaissances s&rsquo;accumulant et +mon niveau de compréhension du système s&rsquo;améliorant, j&rsquo;ai commencé a +remarquer que certain bouts de l&rsquo;OS ne collaient pas exactement avec les +autres. Bien sur, je ne saurais dire si cette réalisation s&rsquo;est faite a +cause de la recrudescence de ces bouts d&rsquo;OS, ou bien juste a cause de ma +compréhension plus poussée. Toujours est-il que ces petits bouts d&rsquo;OS ne s’adaptant pas au reste du système se faisaient de plus en plus visible. -Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai -choisi de passer a Archlinux. C'était avant le passage a systemd. Ce -système me convenait bien. Si je n'installais pas Gnome, ce que je ne +Et puis, un jour, j&rsquo;en ai eu marre de voir unity sur ma machine, et j&rsquo;ai +choisi de passer a Archlinux. C&rsquo;était avant le passage a systemd. Ce +système me convenait bien. Si je n&rsquo;installais pas Gnome, ce que je ne comptais pas faire, il ne me forçait pas a installer un *kit -quelconque, ni dbus. Oui, udev était toujours la, mais c'était le moins +quelconque, ni dbus. Oui, udev était toujours la, mais c&rsquo;était le moins envahissant de ceux la.</p> <p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les premiers sont probablement très efficaces dans leur domaine, et le -second n'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la -distribution d'avoir au plus vite les dernières versions de tout. +second n&rsquo;a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la +distribution d&rsquo;avoir au plus vite les dernières versions de tout. Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient -pas les seuls a faire ça...) ont un problème très précis, qui n'importe +pas les seuls a faire ça&hellip;) ont un problème très précis, qui n&rsquo;importe pas a tout le monde, mais qui est très gênant pour ceux a qui il importe, et ce problème est que ces systèmes ne respectent absolument pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en @@ -1508,1616 +1769,428 @@ ces 9 principes :</p> <li>Ce qui est petit est beau</li> <li>Faites en sorte que chaque programme fasse une chose, bien.</li> <li>Faites un prototype aussi vite que possible</li> -<li>Choisissez la portabilité plutôt que l'efficacité</li> +<li>Choisissez la portabilité plutôt que l&rsquo;efficacité</li> <li>Stockez les données dans des fichiers textes.</li> <li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li> <li>Utilisez des scripts shells pour faciliter la portabilité et la réutilisation.</li> -<li>Évitez les UI qui "capturent" l'utilisateur.</li> +<li>Évitez les UI qui &ldquo;capturent&rdquo; l&rsquo;utilisateur.</li> <li>Faites de chaque programme un filtre.</li> </ol> -<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et -on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas -exactement la façon dont l'informatique fonctionne. Effectivement, les -standards, les systèmes d'exploitation, les logiciels, tout doit évoluer -- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est -pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et -celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La -philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans -de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br /> -La philosophie UNIX est aussi et surtout une garantie d'utilisabilité +<p>Alors bien entendu, un système d&rsquo;exploitation est fait pour évoluer, et +on pourrait penser qu&rsquo;UNIX a fait son temps. Cependant, ce n&rsquo;est pas +exactement la façon dont l&rsquo;informatique fonctionne. Effectivement, les +standards, les systèmes d&rsquo;exploitation, les logiciels, tout doit évoluer +- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&rsquo;est +pas d&rsquo;UNIX que nous parlons ici. C&rsquo;est de la <em>philosophie</em> UNIX. Et +celle-ci n&rsquo;a pas fait son temps, <strong>elle a fait ses preuves.</strong> La +philosophie UNIX, en plus d&rsquo;être efficace sur le papier, a aussi 44 ans +de tests derrière elle, et fonctionne aussi bien qu&rsquo;au premier jour.<br /> +La philosophie UNIX est aussi et surtout une garantie d&rsquo;utilisabilité et de simplicité pour les administrateurs systèmes, pour les -développeurs, bref pour tous ceux qui font de l'informatique -<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique +développeurs, bref pour tous ceux qui font de l&rsquo;informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l&rsquo;informatique ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce sont ceux qui sont les plus proches du système).</p> -<p>Tous OS se doit d'avoir un système standardisé pour faire communiquer +<p>Tous OS se doit d&rsquo;avoir un système standardisé pour faire communiquer les programmes entre eux. UNIX a un système de pipes, des sortes de -fichiers spéciaux permettant d'échanger des informations. C'est -efficace, ça respecte le "tout est fichier", c'est standard, c'est +fichiers spéciaux permettant d&rsquo;échanger des informations. C&rsquo;est +efficace, ça respecte le &ldquo;tout est fichier&rdquo;, c&rsquo;est standard, c&rsquo;est simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient -remplacer ça, avec une interface qui n'est explicitement pas faite pour -être utilisée a la ligne de commande mais a l'aide d'APIs, et un -programme monolithique qui effectue sa tache d'une façon complètement -obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon -efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus -"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est -<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est -horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus -lire facilement les échanges entre programmes. C'est peu pratique, en +remplacer ça, avec une interface qui n&rsquo;est explicitement pas faite pour +être utilisée a la ligne de commande mais a l&rsquo;aide d&rsquo;APIs, et un +programme monolithique qui effectue sa tache d&rsquo;une façon complètement +obscure pour l&rsquo;utilisateur. Alors bien sur, il l&rsquo;effectue d&rsquo;une façon +efficace, cette tache. Oui, ça va plus vite qu&rsquo;avant. Oui, c&rsquo;est plus +&ldquo;rangé&rdquo;, ça fait moins &ldquo;fouillis&rdquo;. Mais c&rsquo;est moins efficace. C&rsquo;est<em>beaucoup</em> moins utilisable pour l&rsquo;utilisateur final. C&rsquo;est +horriblement chiant pour les sysadmins, parce qu&rsquo;ils ne peuvent plus +lire facilement les échanges entre programmes. C&rsquo;est peu pratique, en fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br /> Systemd prend le même parti de créer une interface unifiée, accessible via des appels a des APIs uniquement, complètement obscure, extrêmement abstraite, bien entendu monolithique, et très peu ouverte a la -modification par l'utilisateur final. Alors oui, il parait que ça -augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques +modification par l&rsquo;utilisateur final. Alors oui, il parait que ça +augmente la vitesse de boot. Eh bien, au risque d&rsquo;en choquer quelques uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement et que je puisse modifier facilement, et qui soit ouvert, compréhensible -et distribué. C'est presque comme si les projets freedesktop.org avaient +et distribué. C&rsquo;est presque comme si les projets freedesktop.org avaient pour but de remplacer la base UNIX de linux en créant un système -concurrent, bâtard, bâti sur le kernel Linux mais n'employant plus les -systèmes basiques d'UNIX.</p> -<p>Le problème est qu'il est facilement visible que la direction prise par -la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni +concurrent, bâtard, bâti sur le kernel Linux mais n&rsquo;employant plus les +systèmes basiques d&rsquo;UNIX.</p> +<p>Le problème est qu&rsquo;il est facilement visible que la direction prise par +la communauté Linux n&rsquo;est pas celle du retour sur les systèmes UNIX ni celle du développement de solutions respectant la philosophie UNIX, mais -remises au gout du jour (?), mais est bien d'accepter et de pousser les +remises au gout du jour (?), mais est bien d&rsquo;accepter et de pousser les changements apportés par les projets freedesktop.org directement dans le cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font partie de nombreux développeurs de ces projets), a déjà adopté tous ces -changements (archlinux aussi, mais pour d'autres raisons...), et on peut -compter sur le fait que les autres distributions l'adopteront un jour ou -l'autre.</p> -<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces -systèmes, tout du moins exprimé les raisons qui font qu'ils me -déplaisent, on pourrait penser qu'il suffit de passer a une distribution -n'incluant pas systemd, voire a une distribution n'incluant pas du tout +changements (archlinux aussi, mais pour d&rsquo;autres raisons&hellip;), et on peut +compter sur le fait que les autres distributions l&rsquo;adopteront un jour ou +l&rsquo;autre.</p> +<p>Bon, maintenant que nous avons, si ce n&rsquo;est démontré la nocivité de ces +systèmes, tout du moins exprimé les raisons qui font qu&rsquo;ils me +déplaisent, on pourrait penser qu&rsquo;il suffit de passer a une distribution +n&rsquo;incluant pas systemd, voire a une distribution n&rsquo;incluant pas du tout de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur archlinux. Cependant, avec un peu de réflexion, on voit que si des distributions comme archlinux et Fedora ont adopté systemd (et -qu'OpenSUSE est en train de l’intégrer), il est probable que cela +qu&rsquo;OpenSUSE est en train de l’intégrer), il est probable que cela devienne un standard au fil des années, et que seuls survivent systemd -et upstart, le gestionnaire de démarrage d'ubuntu, qui ne changera +et upstart, le gestionnaire de démarrage d&rsquo;ubuntu, qui ne changera probablement pas (je les vois mal revenir en arrière sur ce point.) -Toujours est-il que l'init héritée du System V semble condamnée a mourir +Toujours est-il que l&rsquo;init héritée du System V semble condamnée a mourir sous Linux. Il pourrait être judicieux de passer sous debian squeeze, qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne la recevra probablement que dans 2/3 ans. Cependant, cette période est -toujours trop courte, et met sur mon système d'exploitation une date -d'expiration, chose qui ne me plait que moyennement. Non, la solution -est de passer sous un système autre, qui ait son propre système d'init +toujours trop courte, et met sur mon système d&rsquo;exploitation une date +d&rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution +est de passer sous un système autre, qui ait son propre système d&rsquo;init (ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options -principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas -vraiment un choix, vu le peu de programmes qu'il permet de faire -fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui -n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku -n'est pas un choix non plus, puisque le but est de rester dans une +principales s&rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&rsquo;est pas +vraiment un choix, vu le peu de programmes qu&rsquo;il permet de faire +fonctionner et le fait qu&rsquo;il ne soit disponible que sur i386, ce qui +n&rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku +n&rsquo;est pas un choix non plus, puisque le but est de rester dans une optique UNIX.</p> -<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai +<p>OpenSolaris est un système d&rsquo;exploitation tout a fait valable. Je n&rsquo;ai en théorie aucun problème sur cet OS, sauf que certains choix de design -ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet, +ne correspondent pas du tout a l&rsquo;idée que j&rsquo;ai d&rsquo;un OS. En effet, OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de ses outils, avec des paquets modifiés pour les rendre plus simples a utiliser (fichiers de configuration fournis par défaut, par exemple, et -autres patchs "release-only"), et une tendance a faire des scripts et -des outils installés par défaut pour tout et n'importe quoi. Bref, cela -n'est pas le sujet. Il convient aussi de voir qu'avec la récente +autres patchs &ldquo;release-only&rdquo;), et une tendance a faire des scripts et +des outils installés par défaut pour tout et n&rsquo;importe quoi. Bref, cela +n&rsquo;est pas le sujet. Il convient aussi de voir qu&rsquo;avec la récente acquisition de Sun par Oracle, il est possible que le projet OpenSolaris -n'ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du -projet affiche d'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> -<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD -ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est +n&rsquo;ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du +projet affiche d&rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> +<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&rsquo;OpenBSD, NetBSD +ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&rsquo;est simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour -réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir -DFBSD ressemble aussi au système de l'assistance a l'user a outrance -décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment +réputation d&rsquo;être orientées sécurité, et d&rsquo;après ce que j&rsquo;ai pu en voir +DFBSD ressemble aussi au système de l&rsquo;assistance a l&rsquo;user a outrance +décris plus haut. Mais la vérité est que je n&rsquo;ai pas fait suffisamment de recherches et que FreeBSD ne va me voir arriver que par hasard, parce -qu'entre toutes les BSD ca me semble la plus sympa et la plus agréable a -utiliser, plus le fait que le système de ports me convient bien (j'aime +qu&rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a +utiliser, plus le fait que le système de ports me convient bien (j&rsquo;aime pouvoir configurer mes logiciels de façon assez profonde.)</p> -<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien +<p>Voila, c&rsquo;est mon avis sur ce &ldquo;problème&rdquo; actuel du monde de Linux. Bien entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins -n'apparaissent jamais chez certaines distributions, créant de ce fait un +n&rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un choix pour les utilisateurs.<br /> -[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/%D/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> -J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire +[1]: Je n&rsquo;ai pas trouvé de traduction satisfaisante a &ldquo;software leveraging&rdquo;, mais l&rsquo;idée est la&hellip;*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> +J&rsquo;ai annoncé il y a environ 20 jours que j&rsquo;avais pour projet de faire une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée -PiRatBox. Il se trouve qu'après de nombreux essais, un problème -récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez +PiRatBox. Il se trouve qu&rsquo;après de nombreux essais, un problème +récurrent apparait: le Raspberry Pi n&rsquo;est pas capable de fournir assez de courant par défaut pour faire fonctionner a la fois un disque dur et une antenne WiFi.<br /> -Alors, autant il me semble évident qu'avec une -alimentation provenant d'un port USB a 2A (max), je n'avais pas -énormément de chances d'avoir 2A sur chacun des ports host du Raspi, +Alors, autant il me semble évident qu&rsquo;avec une +alimentation provenant d&rsquo;un port USB a 2A (max), je n&rsquo;avais pas +énormément de chances d&rsquo;avoir 2A sur chacun des ports host du Raspi, autant avoir moins de 250 mA sur chacun de ces ports me semble un tout petit peu exagéré en terme de rentabilité. </p> <p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me -servant a rien) (vous savez, celui qui est monté en USB...), qui +servant a rien) (vous savez, celui qui est monté en USB&hellip;), qui consomme énormément, est assez louche. Il devrait toujours être possible de désactiver une device USB, me semble-t-il, au niveau logiciel. La, -bien qu'il soit surement possible de la désactiver au niveau du kernel, -il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien +bien qu&rsquo;il soit surement possible de la désactiver au niveau du kernel, +il n&rsquo;est pas <strong>simplement</strong> possible de la &ldquo;débrancher&rdquo;. Ce qui est bien chiant, étant donné le besoin évident de puissance électrique dans lequel on se retrouve. </p> -<p>Bon, je dois avouer n'avoir pas testé de lancer les différents services +<p>Bon, je dois avouer n&rsquo;avoir pas testé de lancer les différents services composant le système des piratebox sous arch, pour la simple <del>et -bonne</del> raison qu'arch utilise systemd et qu'il n'existe pas de wrapper -systemd pour les daemons piratebox, et que j'ai la flemme d'en faire, +bonne</del> raison qu&rsquo;arch utilise systemd et qu&rsquo;il n&rsquo;existe pas de wrapper +systemd pour les daemons piratebox, et que j&rsquo;ai la flemme d&rsquo;en faire, parce que systemd est une horreur a utiliser avec les scripts init. Donc -non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas +non, j&rsquo;utiliserai debian. Le problème d&rsquo;utiliser debian dans ce cas précis est que apt/dpkg a une gestion des dépendances dans un sens mais -pas dans l'autre, en ce sens que si on installe un package "haut", c'est +pas dans l&rsquo;autre, en ce sens que si on installe un package &ldquo;haut&rdquo;, c&rsquo;est a dire dépendant de plusieurs autres packages, apt/dpkg se charge -efficacement d'installer toutes les dépendances nécessaires, tandis que -si on désinstalle un package "bas", c'est a dire sur lequel de nombreux +efficacement d&rsquo;installer toutes les dépendances nécessaires, tandis que +si on désinstalle un package &ldquo;bas&rdquo;, c&rsquo;est a dire sur lequel de nombreux autres packages dépendent, apt/dpkg ne désinstalle pas ces packages -"hauts", ce qui pose un vrai problème quand on se retrouve sur un -Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui -sera installé sur le système avant l'installation proprement dite -(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd +&ldquo;hauts&rdquo;, ce qui pose un vrai problème quand on se retrouve sur un +Raspberry Pi, puisqu&rsquo;il n&rsquo;y a pas de moyen &ldquo;facile&rdquo; de choisir ce qui +sera installé sur le système avant l&rsquo;installation proprement dite +(puisque le moyen &ldquo;universel&rdquo; d&rsquo;installation sur Raspberry Pi est le dd vers la SD qui sert de disque système.)</p> -<p>Il y a <strong>énormément</strong> d'autres critiques que l'ont pourrait faire -concernant le Raspberry Pi. Son système de démarrage a s'arracher les +<p>Il y a <strong>énormément</strong> d&rsquo;autres critiques que l&rsquo;ont pourrait faire +concernant le Raspberry Pi. Son système de démarrage a s&rsquo;arracher les cheveux, par exemple. En effet, plutôt que de faire comme tout pc normalement constitué ou la partie calcul démarre, lance le bootloader, -cherche le kernel de l'OS qui lui même se lance, initialise le hardware, -etc..., a un système bâtard du au fait que la puce au centre de la carte +cherche le kernel de l&rsquo;OS qui lui même se lance, initialise le hardware, +etc&hellip;, a un système bâtard du au fait que la puce au centre de la carte est a la base une puce graphique a laquelle on a greffé un cœur de -calcul (probablement au fond d'une cour d'immeuble, dans les quartiers -pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le -plus efficace qu'aient trouvé les personnes ayant implémenté cette +calcul (probablement au fond d&rsquo;une cour d&rsquo;immeuble, dans les quartiers +pauvres de Bratislava, vu la propreté de la greffe&hellip;), et le moyen le +plus efficace qu&rsquo;aient trouvé les personnes ayant implémenté cette atrocité de gérer le boot est donc de faire démarrer le cœur graphique en premier, ce dernier exécute un code propriétaire pour démarrer le cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel -etc... </p> +etc&hellip; </p> <p>Ce qui non seulement complique énormément le boot, non seulement ajoute -du code propriétaire a un projet se disant libre, mais en plus n'est -<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, -oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p> -<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je -le terminerai dès que j'aurai récupéré les outils nécessaires pour +du code propriétaire a un projet se disant libre, mais en plus n&rsquo;est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, +oui, mais uniquement quand c&rsquo;est bien réalisé, sinon je dis non. </p> +<p>Enfin, le projet que j&rsquo;avais est toujours en cours de réalisation. Je +le terminerai dès que j&rsquo;aurai récupéré les outils nécessaires pour monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa -vie. Les problèmes qu'il m'a posé, qu'il n'aurait pas du me poser, m'ont -trop agacé pour que j'aie envie de le sortir et de jouer avec une fois +vie. Les problèmes qu&rsquo;il m&rsquo;a posé, qu&rsquo;il n&rsquo;aurait pas du me poser, m&rsquo;ont +trop agacé pour que j&rsquo;aie envie de le sortir et de jouer avec une fois sa mission remplie. </p> -<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/%D/update-et-pensees-a-propos-du-raspberry-pi/Update//wxcafe.net/posts/%D/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/%D/update/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous +<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/Update//wxcafe.net/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la +fabrication d&rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt +sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/update/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous <del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une utilisation <strong>a la</strong> UNIX<br /> -Cependant, un d'entre eux se démarque par sa moins-mauvais-itude, c'est +Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br /> Mutt est un client mail en ligne de commande, qui, comme le dit sa page -d’accueil, <a href="http://www.mutt.org">"just sucks less"</a>. Dans les faits, mutt est assez +d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez chiant a configurer mais particulièrement pratique a utiliser après.</p> <p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans -<code>/etc/Muttrc</code>, et il est courant d'utiliser offlineimap en +<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en conjonction avec celui ci, de façon a accéder aux mails même sans accès -internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne +internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne crée pas de cache, ce qui empêche la consultation des emails sans -connexion internet.) La configuration d'offlineimap se fait dans -<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config +connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config par user. Offlineimap est un petit logiciel en python qui synchronise un dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque justement mutt accepte les dossiers au format Maildir. (De plus, cela va tout a fait dans le sens de la libération des données en cela que vous possédez vos mails en local.)<br /> Bref, passons aux choses serieuses : le code. Déjà, installez -offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d'installer +offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer mutt avec le patch sidebar, qui crée un listing des dossiers sur la partie gauche.<br /> Ensuite, voyons pour la partie configuration :<br /> -Ma configuration d'offlineimap :</p> -<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span> -<span class="cp">## Originally located in ~/.offlineimaprc</span> -<span class="cp">## This should not be edited without creating a copy before</span> -<span class="cp">## Created by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +Ma configuration d&rsquo;offlineimap :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span> +<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span> +<span style="color: #75715e">## This should not be edited without creating a copy before</span> +<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="p">[</span><span class="n">general</span><span class="p">]</span> -<span class="cp"># List of accounts to be synced, separated by a comma.</span> -<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</span> +<span style="color: #f8f8f2">[general]</span> +<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span> +<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span> -<span class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span> -<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> -<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span> -<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> -<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span> -<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span> -<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</span> +<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span> +<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> +<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span> +<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> +<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span> +<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span> +<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span> -<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span> -<span class="cp"># Where should the mail be placed?</span> -<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span> - <span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span> +<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span> +<span style="color: #75715e"># Where should the mail be placed?</span> +<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span> + <span style="color: #75715e"># voulez que vos emails apparaissent</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span> -<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span> -<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span> -<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d&#39;utilisateur</span> -<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span> -<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span> +<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span> +<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span> +<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span> +<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span> +<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span> </pre></div> -<p>Ça devrait être assez simple a lire, j'ai tout bien commenté :3<br /> +<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br /> Puis ma config mutt :</p> -<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span> -<span class="cp">## This file should not be edited without creating a copy</span> -<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span> +<span style="color: #75715e">## This file should not be edited without creating a copy</span> +<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="cp"># General config for reading (fetched via offlineimap)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap) -<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span> -<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span> +set mbox_type = Maildir +<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut) -<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span> -<span class="cp"># dossier root mailbox/imap</span> +set folder = ~/Email/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap -<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> -<span class="cp"># dossier d&#39;inbox</span> +set spoolfile = +INBOX +<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox -<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">&#39;</span><span class="n">All</span> <span class="n">Mail</span><span class="err">&#39;</span> -<span class="cp"># dossier ou archiver les emails</span> +set mbox = +&#39;All Mail&#39; +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails -<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span> -<span class="cp"># enfin voila quoi.</span> +set copy = yes +<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour... +<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi. -<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span> -<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span> +set header_cache = /.hcache/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache) -<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span> -<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span> +set record = +Sent +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés -<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span> -<span class="cp"># dossier dans lequel sont stockés les brouillons</span> +set postponed = +Drafts +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons -<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span> -<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span> +mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail +<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche -<span class="cp"># General config for sending (using Mutt&#39;s native support)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support) -<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">password_placeholder</span><span class="err">&#39;</span> -<span class="cp"># votre mot de passe</span> +set smtp_pass = &#39;password_placeholder&#39; +<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe -<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">&quot;smtp://username@whatev.org:465/&quot;</span> -<span class="cp"># l&#39;url ou envoyer les emails</span> +set smtp_url = &quot;smtp://username@whatev.org:465/&quot; +<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails -<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">&quot;utf-8&quot;</span> -<span class="cp"># UTF8, NE PAS CHANGER</span> +set send_charset = &quot;utf-8&quot; +<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER -<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">&quot;.sign&quot;</span> -<span class="cp"># vous pouvez mettre votre signature dans .sign</span> +set signature = &quot;.sign&quot; +<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign -<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible </span> -<span class="cp"># comme ca.</span> +set sig_on_top = yes +<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible +<span style="color: #960050; background-color: #1e0010">#</span> comme ca. -<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span> +set ssl_verify_host = no +<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement -<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">&quot;wxcafe.net&quot;</span> -<span class="cp"># mettez l&#39;adresse de votre serveur ici</span> +set hostname = &quot;wxcafe.net&quot; +<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici -<span class="cp"># Misc settings</span> +<span style="color: #960050; background-color: #1e0010">#</span> Misc settings -<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span> -<span class="cp"># la façon de voir les emails par défaut.</span> +auto_view text/html +<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut. -<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">&quot;%y-%m-%d %T&quot;</span> -<span class="cp"># format de date d&#39;envoi/de reception.</span> +set date_format = &quot;%y-%m-%d %T&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception. -<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">&quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;</span> -<span class="cp"># format de l&#39;index (la présentation de l&#39;interface)</span> -<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span> +set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface) +<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span> -<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span> -<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/aliases&quot;</span> -<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span> -<span class="cp"># format : &quot;alias short_name long_email_adress&quot;</span> -<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span> +set sort_alias = alias +set reverse_alias = yes +set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot; +<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même. +<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot; +source <span style="color: #f8f8f2">$alias_file</span> -<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># ne pas biper. CE SON ME TUE T.T</span> +set beep = no +<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T -<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span> -<span class="cp"># ?</span> +set tilde = yes +set sleep_time = 0 +<span style="color: #960050; background-color: #1e0010">#</span> ? -<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span> -<span class="cp"># parametres de la barre coté gauche</span> +set sidebar_visible = yes +set sidebar_width = 15 +<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche -<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">&quot;Clément Hertling (Wxcafé)&quot;</span> -<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">&quot;wxcafe@wxcafe.net&quot;</span> -<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/cacert&quot;</span> -<span class="cp"># parametres d&#39;envoi. mettez vos propres infos a la place des miennes...</span> +set realname = &quot;Clément Hertling (Wxcafé)&quot; +set from = &quot;wxcafe@wxcafe.net&quot; +set use_from = yes +set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot; +<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes... -<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># vous permet de vois les headers des mails. j&#39;aime, donc je laisse.</span> +set edit_headers = yes +<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse. -<span class="cp"># Macros</span> +<span style="color: #960050; background-color: #1e0010">#</span> Macros -<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span> -<span class="cp"># pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les </span> -<span class="cp"># deux</span> -<span class="cp"># \C represente la touche Control</span> +<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus, +<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les +<span style="color: #960050; background-color: #1e0010">#</span> deux +<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span> -<span class="cp"># Control+p -&gt; remonter d&#39;un dossier dans la sidebar</span> +bind index,pager \Cp sidebar-prev +<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span> -<span class="cp"># Control+n -&gt; descendre d&#39;un dossier dans la sidebar</span> +bind index,pager \Cn sidebar-next +<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span> -<span class="cp"># Control+o -&gt; ouvrir le dossier selectionné dans la sidebar</span> +bind index,pager \Co sidebar-open +<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar -<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">&quot;=Trash&quot;</span> <span class="s">&quot;Trash&quot;</span> -<span class="cp"># d supprime le message en cours</span> +macro index,pager d &quot;=Trash&quot; &quot;Trash&quot; +<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours -<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.</span> +bind pager previous-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message. -<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de </span> -<span class="cp"># message</span> +bind pager next-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de +<span style="color: #960050; background-color: #1e0010">#</span> message -<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># raccourcis vim</span> +bind pager j next-line +bind pager k previous-line +<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim -<span class="cp"># PGP signing commands</span> +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands -<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --import -v %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --export --armor %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_autosign</span><span class="o">=</span><span class="n">yes</span> -<span class="n">set</span> <span class="n">pgp_sign_as</span><span class="o">=</span><span class="mi">0</span><span class="n">x</span><span class="o">********</span> -<span class="cp"># remplacez 0x******** par votre identifiant PGP!!!!!</span> +set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot; +set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot; +set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot; +set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot; +set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot; +set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot; +set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot; +set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot; +set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot; +set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot; +set pgp_autosign=yes +set pgp_sign_as=0x******** +<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!! -<span class="n">set</span> <span class="n">pgp_replyencrypt</span><span class="o">=</span><span class="n">no</span> -<span class="n">set</span> <span class="n">pgp_timeout</span><span class="o">=</span><span class="mi">7200</span> -<span class="n">set</span> <span class="n">pgp_good_sign</span><span class="o">=</span><span class="s">&quot;^gpg: Good signature from&quot;</span> +set pgp_replyencrypt=no +set pgp_timeout=7200 +set pgp_good_sign=&quot;^gpg: Good signature from&quot; -<span class="cp"># si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis</span> -<span class="cp"># PGP signing options</span> +<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options -<span class="cp"># Palette for use with the Linux console. Black background.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background. -<span class="cp"># Schéma de couleur Rouge et Noir. Commentez si vous voulez le </span> -<span class="cp"># défaut noir et blanc.</span> -<span class="cp"># d&#39;autres schémas sont trouvables sur google et autre.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le +<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc. +<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre. -<span class="n">color</span> <span class="n">hdrdefault</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">quoted</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">signature</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">attachment</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">message</span> <span class="n">brightwhite</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">error</span> <span class="n">brightred</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">indicator</span> <span class="n">black</span> <span class="n">red</span> -<span class="n">color</span> <span class="n">status</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tree</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">normal</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">markers</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">search</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tilde</span> <span class="n">brightmagenta</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="o">~</span><span class="n">F</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="s">&quot;~N|~O&quot;</span> +color hdrdefault red black +color quoted brightblack black +color signature brightblack black +color attachment red black +color message brightwhite black +color error brightred black +color indicator black red +color status white black +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index red black ~F +color index red black &quot;~N|~O&quot; </pre></div> -<p>Voila, pour plus d'informations vous pouvez aller voir le manuel de mutt +<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt @ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br /> -J'espère que cette configuration "toute faite" vous aidera a commencer +J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer a utiliser mutt. Il est tout de fois important de se souvenir -qu'utiliser une configuration toute faire n'aide pas a comprendre un +qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un programme ou un système, et que cette façon de faire devrait être -réservée a l'introduction ou a des situations ou il est absolument -nécessaire d'avoir rapidement une configuration fonctionnelle (c'est a -dire, dans le cas d'un client email, euh... jamais?). Je vous invite +réservée a l&rsquo;introduction ou a des situations ou il est absolument +nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a +dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite donc a relire les annotations dont sont parsemés les fichiers de configuration en question, et surtout a lire le manuel, a chercher sur <del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement -a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/La séparation des églises et de l'état, une idée qu'elle est bonne?//wxcafe.net/posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/<p>Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter?</p> -<p>Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. </p> -<p>L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. </p> -<p>Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine <strong>doit</strong>fournir toutes ses -informations au gouvernement américain <strong>sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.</strong> </p> -<p>Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire <a href="http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/">cet article</a> de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. </p> -<p>Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <code>&lt;troll&gt;</code>Apple -Maps<code>&lt;/troll&gt;</code>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. </p> -<p>De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. </p> -<p>Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. </p> -<p>Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.<br /> -Voila, a bientôt!</p>WxcafeThu, 13 Dec 2012 03:08:00 +0100tag:wxcafe.net,2012-12-13:posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/La cryptographie avec PGP et principalement GnuPG//wxcafe.net/posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/<p>PGP (pour <a href="http://fr.wikipedia.org/wiki/Pretty_Good_Privacy">pretty good privacy</a>) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir <a href="http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">ici</a>) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de <em>Web of Trust</em>. </p> -<p>Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.<br /> -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.</p> -<p>Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -<a href="http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/">quitter Gmail</a> aussi, par exemple).</p> -<p>Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)</p> -<p>L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (<a href="http://fr.wikipedia.org/wiki/GNU_Privacy_Guard">GNU Privacy Guard</a>) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<code>&lt;troll&gt;</code> de façon surprenante pour un -programme GNU<code>&lt;/troll&gt;</code>) est extrêmement efficace et claire.</p> -<p>Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).</p> -<p>Tout d'abord, générons une clé GPG :</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">gen</span><span class="o">-</span><span class="n">key</span> -</pre></div> - - -<p>GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. </p> -<p>Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande <code>makepasswd</code>, qui génère automatiquement un mot de -passe) </p> -<p>GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) </p> -<p>Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">pubkey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé publique, et</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span><span class="o">-</span><span class="n">secret</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">seckey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. </p> -<p>Cela fait, listons les informations sur votre clé publique :</p> -<div class="highlight"><pre><span class="err">$</span> <span class="n">gpg</span> <span class="o">--</span><span class="n">list</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">fingerprint</span> -<span class="n">pub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">27</span><span class="n">D81AC8</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> - <span class="n">Key</span> <span class="n">fingerprint</span> <span class="o">=</span> <span class="mi">6345</span> <span class="n">A91A</span> <span class="n">FF89</span> <span class="mf">97E0</span> <span class="mi">13</span><span class="n">D0</span> <span class="mi">96</span><span class="n">A9</span> <span class="mf">9E2</span><span class="n">A</span> <span class="mi">1917</span> <span class="mi">27</span><span class="n">D8</span> <span class="mi">1</span><span class="n">AC8</span> -<span class="n">uid</span> <span class="n">Cl</span><span class="err">é</span><span class="n">ment</span> <span class="n">Hertling</span> <span class="p">(</span><span class="n">Wxcafe</span><span class="p">)</span> -<span class="n">uid</span> <span class="p">[</span><span class="n">jpeg</span> <span class="n">image</span> <span class="n">of</span> <span class="n">size</span> <span class="mi">14692</span><span class="p">]</span> -<span class="n">sub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">9</span><span class="n">ED7F77F</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> -</pre></div> - - -<p>La partie <code>pub</code> indique que c'est une clé publique, <code>4096R</code> indique que c'est -une clé RSA sur 4096 bits. La partie <code>27D81AC8</code> est -l'identifiant de la clé publique, <code>Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8</code> est appelé fingerprint de la clé. Les champs -<code>uid</code> sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ <code>sub</code> est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.<br /> -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">uploader</span><span class="o">*</span> -</pre></div> - - -<p>Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!<br /> -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). </p> -<p>Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.<br /> -Concernant les signatures de clés, elles fonctionnent de manière très -simple :<br /> -Vous devez télécharger la clé de votre correspondant, via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">search</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">correspondant</span><span class="o">*</span> -</pre></div> - - -<p>(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.<br /> -Ceci fait, vous pouvez signer la clé via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">sign</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>puis la renvoyer au serveur via</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">key</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>Voila, la clé de votre correspondant est signée!</p> -<p>Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!</p>WxcafeMon, 19 Nov 2012 00:36:00 +0100tag:wxcafe.net,2012-11-19:posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/L'informatique a l'école//wxcafe.net/posts/%D/linformatique-a-lecole/<p>Après avoir lu <a href="http://t.co/5PTfe6zu">cet article</a> paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.</p> -<p>En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu <a href="http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers - Heroes of the Computer Revolution</a> de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.</p> -<p>Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre <a href="http://en.wikipedia.org/wiki/IWoz">iWoz</a>) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. </p> -<p>Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.</p> -<p>C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...</p> -<p>Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.</p> -<p>Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.</p>WxcafeMon, 15 Oct 2012 20:34:00 +0200tag:wxcafe.net,2012-10-15:posts/%D/linformatique-a-lecole/Archlinux made simple//wxcafe.net/posts/%D/archlinux-made-simple/<p>Archlinux est réputée être une distribution Linux très complexe a -installer et a maintenir.</p> -<p>Je vais tenter ici de vous convaincre que ce n'est pas le cas, et -qu'elle peut se monter très intéressante et très instructive a installer -tout autant qu'a utiliser.</p> -<p>Il convient tout d'abord de rappeler a quels principes obéit Arch:</p> -<ol> -<li> -<p>Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des - programmes simples et utilisables par tous. Avec comme base de - simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu - de bonne volonté, la configuration n'est pas si compliquée!</p> -</li> -<li> -<p>La philosophie UNIX : chaque programme est prévu pour ne remplir - qu'une seule tâche. Bien entendu, cela ne concerne que les programmes - conçus pour s’insérer dans la philosophie UNIX, et les installations de - dépendances avec le gestionnaire de paquet d'Arch fonctionnent - superbement bien.</p> -</li> -</ol> -<p>De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :</p> -<ul> -<li> -<p>recherche d'un paquet :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Ss</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>installation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">S</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>désinstallation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">R</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>mise a jour de tous les paquets installés :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">paquet</span> -</pre></div> - - -</li> -</ul> -<p>Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.</p> -<p>Arch n'offre pas d'interface graphique par défaut : après avoir installé -le système, vous n'aurez qu'une invite de commande. Heureusement, je -vais ici vous guider a travers l'installation d'une interface graphique -(mate, le fork de gnome 2)</p> -<p>L'installation d'Arch se fait par le réseau, veillez a avoir une -connection WiFi ou filaire a proximité avant de suivre ce guide.</p> -<p>Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous -systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce -dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.</p> -<p>Bon, passons a l'explication de l'installation proprement dite :</p> -<p>Tout d'abord, téléchargeons l'iso d'arch la plus récente :</p> -<div class="highlight"><pre><span class="n">wget</span> <span class="n">http</span><span class="o">:</span><span class="c1">//mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso</span> -</pre></div> - - -<p>Ensuite, gravons cette image sur un disque USB :</p> -<div class="highlight"><pre><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">archlinux</span><span class="o">-</span><span class="mf">2012.09.07</span><span class="o">-</span><span class="n">dual</span><span class="p">.</span><span class="n">iso</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> -</pre></div> - - -<p>Après reboot de la machine sur l'iso en question et choix de -l'architecture, nous sommes accueillis par un shell root.</p> -<p>La première chose a faire est de paramétrer le clavier :</p> -<div class="highlight"><pre><span class="n">loadkeys</span> <span class="n">fr</span> -</pre></div> - - -<p>Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :</p> -<div class="highlight"><pre><span class="n">cfdisk</span> <span class="err">#</span> <span class="n">cfdisk</span> <span class="n">est</span> <span class="n">suffisamment</span> <span class="n">clair</span> <span class="n">pour</span> <span class="n">ne</span> <span class="n">pas</span> <span class="n">n</span><span class="err">é</span><span class="n">cessiter</span> <span class="n">d</span><span class="err">&#39;</span><span class="n">explications</span> -</pre></div> - - -<p>formatage des partitions :</p> -<div class="highlight"><pre><span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">root</span> - -<span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="o">&amp;&amp;</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">btrfs</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">home</span> - -<span class="n">mkswap</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="o">&amp;&amp;</span> <span class="n">swapon</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">de</span> <span class="n">swap</span> -</pre></div> - - -<p>Montons les partitions nouvellement créées, puis installons le système :</p> -<div class="highlight"><pre><span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="o">/</span><span class="n">mnt</span> - -<span class="n">mkdir</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> <span class="o">&amp;&amp;</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> - -<span class="n">dhclient</span> <span class="n">eth0</span> <span class="err">#</span> <span class="n">si</span> <span class="n">vous</span> <span class="n">utilisez</span> <span class="n">une</span> <span class="n">connection</span> <span class="n">filaire</span><span class="p">,</span> <span class="n">sinon</span> <span class="n">voire</span> <span class="n">http</span><span class="o">:</span><span class="c1">//wiki.archlinux.fr/Wifi#Configuration</span> - -<span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">base</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> - -<span class="n">genfstab</span> <span class="o">-</span><span class="n">p</span> <span class="o">/</span><span class="n">mnt</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">fstab</span> -</pre></div> - - -<p>Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage:</p> -<div class="highlight"><pre><span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">syslinux</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="n">wireless_tools</span> <span class="n">dhclient</span> -</pre></div> - - -<p>Maintenant, passons sur notre install toute fraîche d'Arch :</p> -<div class="highlight"><pre><span class="n">arch</span><span class="o">-</span><span class="n">chroot</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">bash</span> -</pre></div> - - -<p>configurons les bases :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="n">HOSTNAME</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">hostname</span> - -<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">zoneinfo</span><span class="o">/</span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">localtime</span> - -<span class="n">date</span> <span class="n">MMJJhhmmAAAA</span> - -<span class="n">hwclock</span> <span class="o">--</span><span class="n">systohc</span> - -<span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">gen</span> <span class="err">#</span> <span class="n">D</span><span class="err">é</span><span class="n">commentez</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">correspondant</span> <span class="n">au</span> <span class="n">fran</span><span class="err">ç</span><span class="n">ais</span> <span class="o">:</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="n">et</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">ISO</span><span class="o">-</span><span class="mi">8859</span><span class="o">-</span><span class="mi">1</span> - -<span class="n">echo</span> <span class="err">&#39;</span><span class="n">LANG</span><span class="o">=</span><span class="s">&quot;fr_FR.UTF-8&quot;</span><span class="err">&#39;</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">conf</span> - -<span class="n">locale</span><span class="o">-</span><span class="n">gen</span> - -<span class="n">mkinitcpio</span> <span class="o">-</span><span class="n">p</span> <span class="n">linux</span> -</pre></div> - - -<p>Enfin, vérifions que syslinux est correctement configuré :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">syslinux</span><span class="o">/</span><span class="n">syslinux</span><span class="p">.</span><span class="n">cfg</span> <span class="err">#</span> <span class="n">il</span> <span class="n">devrait</span> <span class="n">y</span> <span class="n">avoir</span> <span class="s">&quot;append root=/dev/sda1&quot;</span> -</pre></div> - - -<p>Si tout est correct, installons syslinux, et paramétrons un mot de passe -root :</p> -<div class="highlight"><pre><span class="n">syslinux</span><span class="o">-</span><span class="n">install_update</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda</span> <span class="o">-</span><span class="n">mia</span> - -<span class="n">passwd</span> <span class="n">root</span> -</pre></div> - - -<p>Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!</p> -<div class="highlight"><pre> <span class="n">exit</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span> -<span class="n">reboot</span> -</pre></div> - - -<p>Fini!</p> -<p>Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen :</p> -<ul> -<li> -<p>Installation de MATE, le gestionnaire de bureau (voir -<a href="http://mate-desktop.org/">http://mate-desktop.org/</a>)</p> -</li> -<li> -<p>Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage</p> -</li> -<li> -<p>Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci</p> -</li> -<li> -<p>Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).</p> -</li> -</ul> -<p>Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici.</p> -<p>Bon, reprenons.</p> -<p>Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet.</p> -<p>Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">pacman</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ici, ajoutez les lignes suivantes :</p> -<div class="highlight"><pre><span class="k">[mate]</span> -<span class="na">Server</span> <span class="o">=</span> <span class="s">http://repo.mate-desktop.org/archlinux/$arch</span> -</pre></div> - - -<p>Installons maintenant les paquets :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">mate</span> <span class="n">mate</span><span class="o">-</span><span class="n">extras</span> <span class="n">dbus</span> <span class="n">dbus</span><span class="o">-</span><span class="n">core</span> <span class="n">alsa</span> <span class="n">networkmanager</span> <span class="n">sudo</span> -</pre></div> - - -<p>Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois :</p> -<div class="highlight"><pre><span class="n">useradd</span> <span class="o">-</span><span class="n">g</span> <span class="n">users</span> <span class="o">-</span><span class="n">G</span> <span class="n">wheel</span><span class="p">,</span><span class="n">audio</span><span class="p">,</span><span class="n">optical</span><span class="p">,</span><span class="n">lp</span><span class="p">,</span><span class="n">scanner</span><span class="p">,</span><span class="n">log</span><span class="p">,</span><span class="n">power</span><span class="p">,</span><span class="n">floppy</span><span class="p">,</span><span class="n">storage</span><span class="p">,</span><span class="n">games</span><span class="p">,</span><span class="n">video</span> <span class="o">-</span><span class="n">m</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">bash</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">passwd</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">su</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -</pre></div> - - -<p>Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec ck-launch-session mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> -</pre></div> - - -<p>Profitons en pour ajouter les démons système au lancement :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ajoutez donc <code>dbus, alsa. hwclock</code> et <code>networkmanager</code> dans la section -DAEMONS (entre les parenthèses, après crond normalement)</p> -<div class="highlight"><pre><span class="n">DAEMONS</span><span class="o">=</span><span class="p">(</span><span class="n">syslog</span><span class="o">-</span><span class="n">ng</span> <span class="n">network</span> <span class="n">crond</span> <span class="n">dbus</span> <span class="n">alsa</span> <span class="n">hwclock</span> <span class="n">networkmanager</span><span class="p">)</span> -</pre></div> - - -<p>Pour éviter un reboot, il est ici possible de faire un</p> -<div class="highlight"><pre><span class="n">su</span> -</pre></div> - - -<p>Puis un</p> -<div class="highlight"><pre> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">dbus</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">alsa</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">networkmanager</span> <span class="n">start</span> -</pre></div> - - -<p>Sinon, il est possible de juste redémarrer.<br /> -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et :</p> -<div class="highlight"><pre> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">sudoers</span> -</pre></div> - - -<p>Décommentez la ligne qui commence par # %wheel ALL=(ALL)<br /> -Sauvegardez le fichier, puis, après un <code>su *votrenom*</code>, tentez de faire -un sudo ls /<br /> -Normalement, vous devriez avoir un listing du dossier /<br /> -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?<br /> -C'est simple comme bonjour :</p> -<div class="highlight"><pre> <span class="n">startx</span> -</pre></div> - - -<p>Et PAF! Voila un MATE desktop flambant neuf a configurer!<br /> -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (<code>sudo pacman -Syu slim</code>).<br /> -Configurons le:</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec dbus-launch mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> <span class="o">&amp;&amp;</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">slim</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Éditez la ligne -"<code>sessions xfce4,icewm-session,wmaker,blackbox</code>" de facon a -ce qu'elle ressemble a "<code>sessions mate-session</code>"<br /> -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.<br /> -Normalement, tout devrait fonctionner!<br /> -Ah oui, et pour installer thunderbird, firefox, chromium, etc...</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">chromium</span> <span class="n">thunderbird</span> <span class="n">xchat</span> <span class="n">firefox</span> <span class="n">rhythmbox</span> <span class="n">pidgin</span> <span class="n">transmission</span><span class="o">-</span><span class="n">gtk</span> <span class="n">vlc</span> -</pre></div> - - -<p>Voila! Et comme dirait <a href="https://twitter.com/spartition">@Spartition</a>, c'est sale, mais qu'est-ce que c'est -bon!<br /> -A plus~</p>WxcafeFri, 05 Oct 2012 14:48:00 +0200tag:wxcafe.net,2012-10-05:posts/%D/archlinux-made-simple/Les systèmes de fichiers//wxcafe.net/posts/%D/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>WxcafeTue, 25 Sep 2012 10:28:00 +0200tag:wxcafe.net,2012-09-25:posts/%D/les-systemes-de-fichiers/Le Quenya - Épisode ø//wxcafe.net/posts/%D/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p>WxcafeTue, 18 Sep 2012 19:07:00 +0200tag:wxcafe.net,2012-09-18:posts/%D/le-quenya-episode-o/Update a propos du blog//wxcafe.net/posts/%D/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>WxcafeTue, 18 Sep 2012 16:57:00 +0200tag:wxcafe.net,2012-09-18:posts/%D/update-a-propos-du-blog/Introduction a bash en tant que language de programmation.//wxcafe.net/posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/<p>L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).</p> -<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. </p> -<p>Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.)</p> -<p>Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p> -<p>De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code.<br /> -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le *) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée.</p> -<p>Quelques notions manquent ici:<br /> -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici.<br /> -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number.<br /> -être utilisées dans un programme bash.<br /> -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p> -<p>Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel.<br /> -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête.</p> -<p>J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p>WxcafeSat, 08 Sep 2012 18:15:00 +0200tag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/Les différentes couches d'un système d'exploitation//wxcafe.net/posts/%D/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>WxcafeThu, 06 Sep 2012 23:29:00 +0200tag:wxcafe.net,2012-09-06:posts/%D/les-differentes-couches-dun-systeme-dexploitation/La programmation expliquée simplement//wxcafe.net/posts/%D/la-programmation-expliquee-simplement/<p>Salut!<br /> -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. </p> -<p>Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.<br /> -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation<br /> -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. </p> -<p>Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.<br /> -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. </p> -<p>La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.<br /> -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. </p> -<p>Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. </p> -<p>Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>WxcafeMon, 27 Aug 2012 00:22:00 +0200tag:wxcafe.net,2012-08-27:posts/%D/la-programmation-expliquee-simplement/GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère//wxcafe.net/posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique.</p> -<p>GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.</p> -<p>De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une?</p> -<p>Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes.</p> -<p>Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable.</p> -<p>N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :)</p> -<p>A bientôt!</p>WxcafeWed, 22 Aug 2012 20:33:00 +0200tag:wxcafe.net,2012-08-22:posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/Débuts, présentation, etc...//wxcafe.net/posts/%D/debuts-presentation-etc/<p>Bonjour!</p> -<p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/##nolife et #debian-fr)</p> -<p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. </p> -<p>Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général.</p> -<p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p>WxcafeSat, 18 Aug 2012 20:27:00 +0200tag:wxcafe.net,2012-08-18:posts/%D/debuts-presentation-etc/ \ No newline at end of file +a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/ \ No newline at end of file diff --git a/output/feeds/feed.teaching.xml b/output/feeds/feed.teaching.xml deleted file mode 100644 index d63c94f..0000000 --- a/output/feeds/feed.teaching.xml +++ /dev/null @@ -1,311 +0,0 @@ - -Wxcafé//wxcafe.net/2012-09-25T10:28:00+02:00Les systèmes de fichiers2012-09-25T10:28:00+02:00Wxcafetag:wxcafe.net,2012-09-25:posts/%D/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>Les différentes couches d'un système d'exploitation2012-09-06T23:29:00+02:00Wxcafetag:wxcafe.net,2012-09-06:posts/%D/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>La programmation expliquée simplement2012-08-27T00:22:00+02:00Wxcafetag:wxcafe.net,2012-08-27:posts/%D/la-programmation-expliquee-simplement/<p>Salut!<br /> -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. </p> -<p>Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.<br /> -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation<br /> -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. </p> -<p>Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.<br /> -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. </p> -<p>La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.<br /> -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. </p> -<p>Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. </p> -<p>Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère2012-08-22T20:33:00+02:00Wxcafetag:wxcafe.net,2012-08-22:posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique.</p> -<p>GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.</p> -<p>De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une?</p> -<p>Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes.</p> -<p>Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable.</p> -<p>N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :)</p> -<p>A bientôt!</p> \ No newline at end of file diff --git a/output/feeds/feed.tutorial.xml b/output/feeds/feed.tutorial.xml deleted file mode 100644 index 26c41db..0000000 --- a/output/feeds/feed.tutorial.xml +++ /dev/null @@ -1,368 +0,0 @@ - -Wxcafé//wxcafe.net/2014-11-07T13:04:00+01:00OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/%D/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de -changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la -gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais -effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un -serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA -(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou -serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du -destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le -mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis -le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et -<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> -pour filtrer les mails entrants et sortants. -Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> -</pre></div> - - -<p>Normalement, ceci devrait être a peu près clair. -Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de -nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, -qui a ce moment-ci trie en fonction de la destination : les mails gérés -par le domaine vont via dovecot dans les boites mail des destinataires -locaux, les mails exterieurs vont directement vers le MTA du serveur -distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon -dont les différents services vont communiquer.</p> -<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de -signer, nous allons profiter de cette configuration et donc lui parler en SMTP -sur ces ports.</p> -<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail -Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, -<code>/var/run/dovecot/lmtp</code>).</p> -<p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> -</pre></div> - - -<p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> -</pre></div> - - -<p>Pour les mails entrants.</p> -<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai -ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. -Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce -post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> -</pre></div> - - -<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> -<p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> - -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> - -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> - -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> - -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> - -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> - -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> -</pre></div> - - -<p>Expliquons un peu ce fichier de configuration :</p> -<ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> -<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : - port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> -<li>Les alias sont définis juste après</li> -<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : - 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> -<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail - traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore - été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 - donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième - ligne matchant tous les mails arrivant et la première seulement ceux filtrés, - inverser leur sens voudrait dire que les mails seraient toujours renvoyés a - amavis</li> -<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que - pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au - dessus.</li> -</ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit -écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne -mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du -POP3[s], différents guides sont trouvables facilement sur internet.</p> -<p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> - -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> - -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> - -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> - -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> - -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> - -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> - -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> - -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> - -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>pour identifier les utilisateurs système</strong></p> -<p>Ici aussi, voyons comment ce fichier est structuré :</p> -<ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. - Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs - mots de passe avec PAM (ou BSDAuth)</li> -<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> -<li>Nous configurons le SSL</li> -<li>Le section suivante contient la configuration des services. Nous avons en - premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. - La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> -<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> -<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et - quel dossier utiliser pour sa configuration.</li> -</ul> -<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir -a deux choses : signer les emails sortants, et filtrer les emails entrants. Il -doit donc écouter sur les port 10026 pour les signatures et 10024 pour le -filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun -risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les -modifications nécessaires a la fin du fichier.</p> -<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) -<code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> - -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> - -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> - -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> - -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> - -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> - -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> -</pre></div> - - -<p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se - trouve la clé privée servant a signer les emails. -- le second définit les options DKIM que nous souhaitons utiliser comme défaut. - Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> -- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les - paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel - ils viennent. -- nous savons que les emails venants du port 10026 sont sortants, nous les - traitons donc comme tel -- le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre - serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a - prévenir en cas de spam/virus venants de notre système, et que nous voulons - être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de - les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature -des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en -fait inclus par défaut dans amavis.</p> -<p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un -tutorial</a>) -mais de nombreuses autre méthodes existent. -Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> - -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -</pre></div> - - -<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser -le required_score pour ma part.</p> -<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et -spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p> \ No newline at end of file diff --git a/output/feeds/feed.tutoriel.xml b/output/feeds/feed.tutoriel.xml index f99a109..2423210 100644 --- a/output/feeds/feed.tutoriel.xml +++ b/output/feeds/feed.tutoriel.xml @@ -1,42 +1,404 @@ -Wxcafé//wxcafe.net/2014-08-28T12:16:00+02:00Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/%D/freebsd-online-mfsbsd/<p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad) +Wxcafé//wxcafe.net/2014-11-07T13:04:00+01:00OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant +comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de +changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge +aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la +gestion de mon système de mails.</p> +<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais +effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un +projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un +serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux +qu&rsquo;a le projet OpenBSD, globalement).</p> +<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA +(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou +serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du +destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le +mail au destinataire.</p> +<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération +ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches +sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis +le serveur, des yeux pour la lecture).</p> +<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir +des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour +ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et +<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> +pour filtrer les mails entrants et sortants. +Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮ + │╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │ + mail in ││ │ │ │ amavis │ +───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ +&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ +</pre></div> + + +<p>Normalement, ceci devrait être a peu près clair. +Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais +aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails +venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de +nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, +qui a ce moment-ci trie en fonction de la destination : les mails gérés +par le domaine vont via dovecot dans les boites mail des destinataires +locaux, les mails exterieurs vont directement vers le MTA du serveur +distant.</p> +<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon +dont les différents services vont communiquer.</p> +<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port +10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et +écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de +signer, nous allons profiter de cette configuration et donc lui parler en SMTP +sur ces ports.</p> +<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail +Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, +<code>/var/run/dovecot/lmtp</code>).</p> +<p>Ainsi, pour reprendre le schéma présenté plus haut :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮ + │╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ +25 &lt;────────│&lt;───────────╯ │ + ╰───────────────╯ +</pre></div> + + +<p>Pour les mails sortants; et</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮ + │╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ +</pre></div> + + +<p>Pour les mails entrants.</p> +<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai +ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour +d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p> +<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. +Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce +post</a>)</p> +<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new +</pre></div> + + +<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> +<p><code>/etc/smtpd.conf</code></p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span> +<span style="color: #75715e"># See smtpd.conf(5) for more information.</span> + +<span style="color: #75715e">## Certs</span> +pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span> +pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span> + +<span style="color: #75715e">## Ports to listen on, and how to listen on them</span> +listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional +listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source +listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source + +<span style="color: #75715e">## Aliases</span> +table aliases file:/etc/aliases + +<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span> +listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered +<span style="color: #75715e"># coming from amavisd, signed with DKIM</span> +listen on lo port <span style="color: #ae81ff">10027</span> tag Signed + +<span style="color: #75715e">## Receiving</span> +<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span> +accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span> +<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span> +accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span> +<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span> + +<span style="color: #75715e">## Sending</span> +<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span> +accept tagged Signed <span style="color: #66d9ef">for</span> any relay +<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span> +accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span> +<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span> +</pre></div> + + +<p>Expliquons un peu ce fichier de configuration :</p> +<ul> +<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration + d&rsquo;emplacement des certificats SSL.</li> +<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : + port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> +<li>Les alias sont définis juste après</li> +<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : + 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants + comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on + taggue les mails sortants comme &ldquo;Signed&rdquo;</li> +<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail + traité est taggué comme Filtered, alors il a été vérifié par amavis, et on + peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore + été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 + donc). Il est important de mettre les déclarations dans ce sens, car la + première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième + ligne matchant tous les mails arrivant et la première seulement ceux filtrés, + inverser leur sens voudrait dire que les mails seraient toujours renvoyés a + amavis</li> +<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que + pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed + on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par + DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le + problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au + dessus.</li> +</ul> +<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit +écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les +emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant +qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne +mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du +POP3[s], différents guides sont trouvables facilement sur internet.</p> +<p><code>/etc/dovecot/dovecot.conf</code></p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span> + +<span style="color: #75715e"># basic config</span> +<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log +<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log +<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span> +<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail + +<span style="color: #75715e"># authentication</span> +passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +userdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd +<span style="color: #f92672">}</span> + +<span style="color: #75715e"># the protocols we use</span> +<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve + +<span style="color: #75715e"># ssl config</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes + +<span style="color: #75715e">## configuring services </span> +<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span> +service imap-login <span style="color: #f92672">{</span> + inet_listener imap <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span> + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> + +service lmtp <span style="color: #f92672">{</span> + unix_listener lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666 + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> + +<span style="color: #75715e">## configuring protocols</span> +<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span> +protocol lda <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> + +protocol lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> + +plugin <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve + <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve +<span style="color: #f92672">}</span> +</pre></div> + + +<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +</pre></div> + + +<p><strong>par</strong></p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth +<span style="color: #f92672">}</span> +</pre></div> + + +<p><strong>pour identifier les utilisateurs système</strong></p> +<p>Ici aussi, voyons comment ce fichier est structuré :</p> +<ul> +<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater + leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li> +<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs. + Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs + mots de passe avec PAM (ou BSDAuth)</li> +<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de + l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> +<li>Nous configurons le SSL</li> +<li>Le section suivante contient la configuration des services. Nous avons en + premier lieu le service IMAP, dont la configuration sert uniquement a + désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant + IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons. + La configuration de lmtp sert a attribuer des permissions plus correctes au + fifo qu&rsquo;il utilise</li> +<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> +<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et + quel dossier utiliser pour sa configuration.</li> +</ul> +<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir +a deux choses : signer les emails sortants, et filtrer les emails entrants. Il +doit donc écouter sur les port 10026 pour les signatures et 10024 pour le +filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en +SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun +risque a utiliser des protocoles non chiffrés. +Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les +modifications nécessaires a la fin du fichier.</p> +<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) +<code>/etc/amavis.conf</code> (OpenBSD)</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span> + +<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span> + +<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span> + <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span> + <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span> + <span style="color: #f8f8f2">}</span> +<span style="color: #f8f8f2">);</span> + +<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span> +<span style="color: #f8f8f2">};</span> + +<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span> + +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span> +<span style="color: #f8f8f2">};</span> + +<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span> +<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span> +</pre></div> + + +<p>A nouveau, expliquons ce fichier : +- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails + sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se + trouve la clé privée servant a signer les emails. +- le second définit les options DKIM que nous souhaitons utiliser comme défaut. + Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> +- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les + paramètres que nous utiliserons pour les emails venant de nos utilisateurs : + ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel + ils viennent. +- nous savons que les emails venants du port 10026 sont sortants, nous les + traitons donc comme tel +- le paragraphe suivant décrit le traitement que nous faisons subir aux emails + sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre + serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC + 4871</a>. Nous déclarons l&rsquo;adresse a + prévenir en cas de spam/virus venants de notre système, et que nous voulons + être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, + puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de + les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et + les notifications de succès d&rsquo;envoi. Et voila!</p> +<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature +des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en +fait inclus par défaut dans amavis.</p> +<p>Il nous reste cependant quelques opérations a faire, encore. +Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe +différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un +tutorial</a>) +mais de nombreuses autre méthodes existent. +Il nous reste encore a configurer spamassassin :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span> +<span style="color: #75715e"># report_safe 1</span> +<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span> +<span style="color: #75715e"># use_bayes 1</span> +<span style="color: #75715e"># bayes_auto_learn 1</span> +<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span> +<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span> +<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span> +<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span> +<span style="color: #75715e"># shortcircuit BAYES_99 spam</span> +<span style="color: #75715e"># shortcircuit BAYES_00 ham</span> + +<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span> +</pre></div> + + +<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser +le required_score pour ma part.</p> +<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et +spamassassin, et tout devrait fonctionner parfaitement</p> +<p>Bon courage pour votre hosting de mail ensuite&hellip;</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad) Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>) -et n'ayant pour différentes raisons pas eu l'occasion de le faire sur mon -<a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, -j'ai commencé a chercher comment le faire sur ce serveur.</p> -<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu +et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, +j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p> +<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums -d'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> -<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), -ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur +d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> +<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), +ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur alternatif, minimaliste et simplifié pour FreeBSD.</p> <p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le -panel Online. Une fois cela fait, lancez une console, puis téléchargez l'image +panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis -choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter -sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout +choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter +sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout a fait classique va démarrer. Une fois ceci fait, la partie importante arrive: -mfsbsd contient un script d'installation root-on-zfs, nommé logiquement +mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement zfsinstall, qui va se charger de tout le travail pour nous.</p> <p>Utilisez donc ce script ainsi : </p> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, wipons le MBR :</span> -<span class="n">dd</span> <span class="o">&lt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span> -<span class="cp"># maintenant, installons le système</span> -<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span> +dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1 +<span style="color: #75715e"># maintenant, installons le système</span> +zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c </pre></div> <p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée, -<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D'autres options +<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous convient pas.</p> <p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf :</p> -<div class="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">&quot;YES&quot;</span> -<span class="n">sshd_load</span><span class="o">=</span><span class="s">&quot;YES</span> -<span class="n">hostname</span><span class="o">=</span><span class="s">&quot;whatever&quot;</span> -<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">&quot;DHCP&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span> +<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span> +<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span> +<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span> </pre></div> @@ -44,11 +406,10 @@ système) et éditez /etc/rc.conf :</p> physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez maintenant un système FreeBSD tout propre installé sur zfs a découvrir et utiliser!</p> -<p>Voila, c'est la fin de ce tutoriel. -(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu +<p>Voila, c&rsquo;est la fin de ce tutoriel. +(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu crédible, disons)</p> -<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter -<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, +<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, <a href="https://twitter.com/petitefanfare">petitefanfare</a>, <a href="https://twitter.com/capet_ebooks">capet_ebooks</a>, <a href="https://twitter.com/zengisse">zengisse</a>, @@ -56,7 +417,7 @@ et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont code</a>, qui vient de <a href="https://twitter.com/m1sp">@m1sp</a> (<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p> -<p>A plus</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/%D/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de +<p>A plus</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de domaines en différentes informations : adresses IPv4, adresses IPv6, certificats DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour @@ -64,54 +425,53 @@ simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a <a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a <a href="http://5.39.76.46">http://5.39.76.46</a>).</p> -<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque -en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que +<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque +en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que de nos jours. La configuration des serveurs DNS peut ainsi être assez contre intuitive. Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses enregistrements est important.</p> -<p>Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même +<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d'écrire, par exemple, -<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le -<code>.</code> n'est pas obligatoire et la progression se fait de droite a gauche. Par +du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le +<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine <code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point a la fin de façon courante.</p> -<p>Le reverse DNS est une variante du DNS "classique" permettant de résoudre les +<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre +Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger +quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS +sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre habituel</em></strong>, et du faux domaine .in-addr.arpa Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR 76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p> -<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, +<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord, quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des -"enregistrements", records en anglais. Par exemple, un record A indique une +&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom de domaine que vous donnez en argument, mais en précisant un autre type de -record, vous pouvez obtenir n'importe quelle information : par exemple, <code>dig NS +record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS wxcafe.net</code> devrait vous renvoyer</p> -<div class="highlight"><pre><span class="p">;</span> <span class="o">&lt;&lt;&gt;&gt;</span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o">&lt;&lt;&gt;&gt;</span> NS wxcafe.net -<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd -<span class="p">;;</span> Got answer<span class="o">:</span> -<span class="p">;;</span> <span class="o">-&gt;&gt;</span>HEADER<span class="o">&lt;&lt;-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span> -<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span> -<span class="p">;;</span> QUESTION SECTION<span class="o">:</span> -<span class="p">;</span>wxcafe.net. IN NS +<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> -<span class="p">;;</span> ANSWER SECTION<span class="o">:</span> -wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net. -wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net. +<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span> -<span class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec -<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span> -<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span> -<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span> </pre></div> @@ -121,12 +481,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et &l chacun fait autorité pour lui même, et le problème évident est que le résolveur ne peut résoudre la query si il est renvoyé encore et encore vers le même serveur. Il convient donc de définir dans le même fichier de configuration -l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième -loop, se rendra compte qu'il est en train de faire une boucle infinie et -demandera l'adresse au serveur auquel il est connecté. La première indication de +l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième +loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et +demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de direction se fait grâce au serveur du TLD.</p> <p>La configuration de bind est assez simple dans le principe, le plus complexe -étant en fait d'écrire les fichiers de zone. +étant en fait d&rsquo;écrire les fichiers de zone. La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il existe 4 fichiers de configuration principaux : <code>named.conf</code>, <code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>. @@ -136,48 +496,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher named.conf.options contient les options que vous rajoutez pour changer le comportement de bind.</p> <p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans -lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, +lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité, deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs (notamment mon accès chez moi). </p> -<p>Examinons tout d'abord les fichiers de configuration de named. -<code>named.conf.local</code> contient les définitions des zones forward et reverse. +<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse. Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont -gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce +gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence -principale étant que l'un héberge en slave les masters de l'autre. +principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre. Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p> -<div class="highlight"><pre><span class="n">zone</span> <span class="s">&quot;wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;home.wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> </pre></div> @@ -188,187 +547,184 @@ tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est assez parlant.</p> <p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit <code>/etc/bind/master/wxcafe.net</code> : </p> -<div class="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span> - <span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span> - <span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span> - <span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span> - <span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span> - <span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span> - <span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span> + <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span> + <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span> + <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span> + <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span> + <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span> + <span style="color: #f8f8f2">)</span> -<span class="p">;</span> <span class="n">Name</span> <span class="n">servers</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">SPF</span> <span class="s">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> -<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> -<span class="p">;</span> <span class="n">Aliases</span> -<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="p">;</span> <span class="p">[...]</span> -<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span> +<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span> +<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span> -<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span> +<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> </pre></div> <p>Alors. Expliquons ligne par ligne.<br /> -Tout d'abord, le TTL (time to live) est un paramètre définissant le temps +Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps pendant lequel les serveurs récursif (qui font un cache des données) doivent cacher ce fichier de zone. <br /> Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, wxcafe.net. <br /> Maintenant, nous arrivons a un record important : SOA (Start of Authority). -Ce record prend de nombreux arguments, dans l'ordre :<br /> +Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br /> - Le nameserver autoritaire pour le nom de domaine en question,<br /> - - L'adresse email du responsable de cette zone, avec le premier point + - L&rsquo;adresse email du responsable de cette zone, avec le premier point remplacé par un @, </p> <p>puis entre parenthèses :<br /> - - Le numéro de série ("version" du fichier de zone, ici au format + - Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format YYYYMMDDNN) <br /> - La période de refresh, période entre chaque mise a jour du nameserver authoritaire secondaire, <br /> - La période de retry, le temps entre chaque essai de mise a jour si le nameserveur authoritaire primaire est indisponible, <br /> - - La période d'expire, le temps qu'attendra le serveur autoritaire + - La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire secondaire avant de supprimer les informations de son cache si le primaire reste indisponible, et enfin <br /> - - La période de TTL négatif, le temps qu'attendra le serveur secondaire + - La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire avant de ne plus offrir les informations de cette zone si le serveur primaire est injoignable. </p> -<p>Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus +<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus important a lire (pour les humains en tout cas). Continuons : </p> <p>NS (nameserver) permet de désigner les différents nameservers faisant autorité pour ce domaine. </p> -<p>MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. -SPF est un record d'authentification pour les emails. -Les records A désignent l'association entre un nom de domaine et une adresse +<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine. +SPF est un record d&rsquo;authentification pour les emails. +Les records A désignent l&rsquo;association entre un nom de domaine et une adresse IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site -n'est pas encore en IPv6.</p> +n&rsquo;est pas encore en IPv6.</p> <p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de -mettre en place des domaines exactement semblables a d'autre (ce qui permet par -exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p> +mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par +exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p> <p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet de changer la valeur du @ et des noms de domaine non complets (qui ne se terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et -l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on -l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, +l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on +l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, cela permet de rediriger les requêtes nous parvenant et demandant un domaine se trouvant sous home.wxcafe.net.</p> <p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques -différences n'étant en fin de compte que des différences de valeurs (dues au -fait que, eh bah, c'est pas les mêmes domaines...).</p> -<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est +différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au +fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p> +<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC 1034</a> et le <a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant -aussi.</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/%D/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler +aussi.</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler le texte (ce qui se montre relativement indispensable dans un environnement Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu connu en détail, et la plupart du temps une seule fonction est utilisée : le remplacement de texte.<br /> Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p> -<p>Tout d'abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais -aussi un langage de manipulation de texte dérivé de <code>ed</code>, l'éditeur original. -<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas -personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des -machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs -dits "visuels", tels que vim, emacs, et globalement tous les éditeurs ayant un +<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais +aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas +personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des +machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs +dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du -concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d'une ligne a la fois. +concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois. En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p> -<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d'empêcher -l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui -permet de rediriger l'output dans le fichier d'input. Cela dit, l'intérêt unique +<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher +l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui +permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique du programme est son langage de manipulation de texte.</p> <p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des /). Ainsi, la commande de base dans <code>sed</code> est </p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/ </pre></div> <p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de -n'exécuter les commandes qui suivent que sur ces lignes.) </p> +n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p> <p><br/> -La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s'utilise de +La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de la façon suivante : </p> -<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span> </pre></div> <p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une regex) par [new text] (qui doit être un texte fixe, avec quelques exceptions), en appliquant [options], la plus connue des options étant <code>g</code>, -qui permet d'appliquer la commande affectée a toutes les occurrences du texte +qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte matché sur la/les lignes concernée-s.<br /> -Les exceptions a la "fixité" de [new text] sont particulièrement +Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard, -excepté le fait qu'il permet jusqu'à 9 "holding spaces", qui sont délimités par +excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par \( et \), et qui sont représentées dans le texte de remplacement par \1 à \9.</p> <p>Par exemple, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39; </pre></div> -<p>sur le texte "hello world world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world </pre></div> <p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le texte original. Ainsi, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&amp;</span> <span class="n">world</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39; </pre></div> -<p>sur le texte "hello world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world </pre></div> <p><br/></p> <p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans -l'espace courant :</p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span> +l&rsquo;espace courant :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p </pre></div> <p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire -dédié, que j'appelle l'espace courant (pattern space en anglais). La commande -<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit -le pattern space de façon a ce qu'il ne contienne que les lignes matchant, et le -<strong>p</strong> affiche donc ce dernier.</p> -<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s'utilisent ainsi :</p> -<div class="highlight"><pre><span class="n">c</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit +le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p> +<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \ +[text] </pre></div> <p>De la même façon, pour le i : </p> -<div class="highlight"><pre><span class="n">i</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \ +[text] </pre></div> <p>Et de même pour a. </p> -<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'elles +<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong> sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme @@ -379,26 +735,25 @@ space, et non sur la ligne en question.</p> /[regex]/d <strong>d</strong> (delete) supprime les contenus du pattern space.</p> <p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je -parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé -au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier <em>en +parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé +au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a -ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou -bien la confidentialité d'un support de stockage, par exemple. Nous allons ici +ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou +bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici voir comment mettre en place un système de ce type sous GNU/Linux. Cet article -n'a pas pour but de vous apprendre a mettre en place un système basé sur une -procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en -jeu dans l'utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de -présenter un rapide tutoriel concernant la création d'un support chiffré sur +n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une +procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en +jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de +présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p> <p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système -du noyau Linux, et s'appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement -de disques. Comme son nom l'indique, device-mapper est un système qui a pour but +du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement +de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère -comme "block device" tout fichier spécial (en gros, les fichiers disques dans -<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le +comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de -fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. -Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. +fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad. +Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes. Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans /dev, et device-mapper est requis pour pouvoir en voir les partitions (qui apparaîtront donc dans /dev/mapper)</p> @@ -408,59 +763,59 @@ déchiffre a la volée tous les accès disques a ce périphérique non chiffré traduisant sur le système de fichier chiffré, le tout de manière tout a fait transparente pour les applications utilisant le disque en question. Cela induit bien entendu une baisse de performance relativement significative dans le cas -d'un chiffrement du système de fichier root, mais quasiment insignifiante dans +d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans le cas de chiffrement de partitions de données.</p> -<p>D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer +<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer si le système de fichier root est chiffré. Dans ce cas précis, la procédure de -boot <strong><em>doit</em></strong> s'appuyer sur une image initrd (l'initrd est un système de +boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de fichier minimal qui sert uniquement a initialiser le système. Les kernels de base de la plupart des distributions GNU/Linux en utilisent un dans tous les cas, pour des raisons de compatibilité) et sur une partition de boot qui elle -n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge +n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et -charge l'initrd en RAM, celui-ci a son tour lance un script permettant de +charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de charger les modules nécessaires a la suite du boot (que ce soit pour un boot sans disque root local, ou bien comme ici avec un système chiffré), puis le -système de fichier "cible" est remonté sur la racine, et l'initrd est démonté -est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend +système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté +est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend depuis le système de fichier maintenant monté sur la racine.</p> <p>La méthode la plus évidente pour contourner le chiffrement du disque est alors -de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par +de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par un autre modifié, copiant par exemple la phrase de passe permettant de déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir -contre ce genre d'attaques : l'une des plus simple est de faire un checksum du +contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot -que l'initrd présente toujours le même checksum. Cela dit, cette méthode a -l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès +que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a +l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès a un fichier initrd reconnu comme sûr.<br /> Une autre approche consisterait a placer le système de fichier /boot sur un périphérique dédié, protégé en écriture de façon matérielle (par exemple, une carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et -protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un -attaquant de modifier ce système de fichier, et l'initrd est alors toujours de +protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un +attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de confiance. Cependant, cela a pour conséquence de rendre la mise a jour de -l'initrd et du noyau <em>beaucoup</em> plus difficile qu'elle ne le serait sans.</p> +l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p> <p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop, -l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est -maintenant responsable de l'utilisation <em>userspace</em> de dm-crypt, qui pour sa +l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est +maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la -manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier +manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi obligatoirement être capables de le faire en tant que root. </p> <p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br /> -Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, -dans une situation réelle ou l'on cherche a chiffrer un disque, il convient -d'utiliser /dev/urandom comme source, pour éviter la détection du système de +Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela, +dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient +d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de fichier chiffré sur le disque. Ici, par exemple, nous allons faire : </p> -<div class="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img </pre></div> <p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img </pre></div> @@ -470,34 +825,34 @@ passphrase. Il convient ici de choisir une passphrase particulièrement sûre, puisque toute personne ayant accès a la passphrase aura aussi accès au disque et donc a vos secrets.<br /> Une fois cela fait, nous allons mapper cette image : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto </pre></div> <p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes, -puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous -voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En +puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous +voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les -systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque -qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque +systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque +qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque virtuel qui correspond a notre image. Il se comporte comme toute partition, et peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. Il se comporte en effet comme une partition, et non comme un véritable disque.) -Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de -le faire, pour pouvoir l'utiliser. </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> +Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de +le faire, pour pouvoir l&rsquo;utiliser. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto </pre></div> <p>Maintenant que notre disque est formaté, il peut être monté : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt </pre></div> <p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat suivant : </p> -<div class="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) </pre></div> @@ -507,82 +862,82 @@ sont (en fonction de votre passphrase) en sécurité. </p> <ul> <li> <p>Pour monter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o">&lt;</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt; +sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt; </pre></div> </li> <li> <p>Pour démonter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt; +sudo cryptsetup luksClose &lt;nom de disque virtuel&gt; </pre></div> </li> </ul> -<p>Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de +<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de créer et de monter/démonter vos images/disques chiffré-e-s en une seule commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p> <p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable disque (ou clé usb, ou autre), il est préférable de créer une partition de taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code> -pour ce faire.</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/%D/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il -s'agit de posséder son propre serveur, et donc, par extension, ses +pour ce faire.</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il +s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses données. </p> -<p>Bien entendu, il n'est pas nécessaire pour cela de posséder +<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder physiquement son propre serveur (encore que ce soit possible, mais ce -n'est pas le sujet abordé ici.)<br /> +n&rsquo;est pas le sujet abordé ici.)<br /> Nous expliquerons ici les étapes nécessaires pour arriver a avoir un serveur utilisable, du moment ou vous arrivez sur le système fraichement installé, au moment ou vous possédez un serveur avec tous les paquets -nécessaires a l'utilisation que l'on veut en faire ici d'installés. +nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés. Cette partie va consister a paramétrer le système (ici un debian squeeze. Il est bien sur possible de faire la même chose avec a peu près toutes les distributions Linux disponibles, tout comme avec les BSD et tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x -squeeze, parce que c'est une distribution simple a utiliser comme -serveur, stable, et facile a configurer (puisqu'une bonne partie de la +squeeze, parce que c&rsquo;est une distribution simple a utiliser comme +serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la configuration est déjà faite et incluse dans le paquet), donc adaptée au -but de cet article, a savoir rendre l'installation simple et +but de cet article, a savoir rendre l&rsquo;installation simple et compréhensible).</p> -<p>La première chose a faire est bien entendu d'obtenir le serveur en lui +<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui même. Cette partie de la chose ne sera pas traitée dans cet article. Il -existe en effet un nombre infini d'obtenir un serveur, que ce soit en le -louant chez OVH/1&amp;1/n'importe quel autre hébergeur commercial, en -participant a un système d'hébergement collaboratif (je vous laisse +existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le +louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en +participant a un système d&rsquo;hébergement collaboratif (je vous laisse chercher), en achetant un serveur et en le faisant fonctionner de chez -vous, en utilisant un vieux PC... Bref, les possibilités sont multiples. +vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples. Dès lors que vous avez accès a un système debian serveur, peu importe sur quel matériel il fonctionne, et a priori peu importe aussi la manière -dont vous y accédez, le résultat est le même (et la procédure aussi...). +dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;). Dans cet article, nous parlerons de la configuration de base, du moment ou vous avez le serveur vierge dans les mains au moment ou vous installez le serveur http.</p> -<p>Dans cet article, lorsque est précisée le type d'IP a utiliser, il -convient de mettre ce type précisément. Quand le type n'est pas +<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il +convient de mettre ce type précisément. Quand le type n&rsquo;est pas précisée, libre a vous de choisir ipv4 ou ipv6.</p> <p>Bref. Commençons au point ou vous avez un accès root a votre serveur, -n'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou -rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez +n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou +rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe solide sur le compte root. Continuons en allant vite mettre en place le nom de domaine. Pour cela, votre registrar doit vous fournir une -interface vous permettant d'éditer l'entrée DNS pour votre nom de +interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de domaine. </p> -<p>Cette entrée doit donc pour l'instant ressembler a ca :</p> -<div class="highlight"><pre> <span class="o">&lt;</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">&gt;</span> <span class="n">NS</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">A</span> <span class="o">&lt;</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> - <span class="n">IN</span> <span class="n">AAAA</span> <span class="o">&lt;</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> +<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1 + IN MX 1 + IN A &lt;IPv4 de votre serveur&gt; + IN AAAA &lt;IPv6 de votre serveur&gt; </pre></div> <p>Cela vous permet de rediriger tout le trafic se référant a votre nom de domaine vers votre ip (le fonctionnement exact du DNS est assez -compliqué a expliquer, donc on va dire que c'est de la magie pour -l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer +compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour +l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers votre serveur, ce qui est un bon début. Faisons un petit point sécurité ici : pour accéder a votre serveur, il vous suffit actuellement de taper @@ -591,50 +946,50 @@ le mot de passe root.</p> bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction du nombre de caractères, ça prend plus ou moins de temps, et si vous avez suffisamment de caractères, ça peut prendre un temps assez -conséquent. Cela dit, il vaut mieux être prudent...) Ainsi, nous allons -arrêter d'utiliser root et nous allons commencer a utiliser des couples +conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons +arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples clés publiques/privées pour nous connecter au serveur.<br /> -Cela se fait en deux temps : tout d'abord, créer un nouvel utilisateur, -grâce auquel nous administrerons le serveur a l'avenir; puis configurer -OpenSSH pour que celui ci n'accepte que les connections par clés et plus +Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur, +grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer +OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus celles sur root.</p> <p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se fait avec adduser, qui est interactif (vous ne devriez pas avoir de -problème avec, puisqu'il crée tout les dossiers et fichiers nécessaires, +problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires, et vous pose toutes les questions utiles pour vous aider.) sinon, vous -devrez utiliser useradd, qui est (en plus d'être très chiant a -distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait -un simple script permettant l'utilisation d'useradd plus facilement.)</p> +devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a +distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait +un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p> <p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif en faisant un <code>adduser --group &lt;username&gt;</code></p> <p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m -N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera -son dossier principal dans /home/, et l'ajoutera au groupe du même nom +son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom que lui (ce qui est en général nécessaire pour des questions de vie privée).</p> -<p>Il convient maintenant d'ajouter cet utilisateur aux groupes qu'il sera +<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix users staff sudo wheel</code>, puis de changer son mot de passe <code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br /> -Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un +Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un utilisateur complètement fonctionnel et utilisable pour toutes les -taches d'administration. Si vous devez encore utiliser root, c'est que +taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que quelque chose ne va pas.</p> -<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous +<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous allons maintenant passer a la phase 2 du plan : désactiver le login ssh root et le login ssh par mot de passe.<br /> -Tout d'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un +Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un système assez semblable a celui vous permettant de chiffrer vos mail : vous avec une clé publique et une clé privée sur le client, et la clé publique est aussi sur le serveur. Lorsque vous vous connectez, openssh vérifie que vous possédez la clé privée qui correspond a la clé publique stockée sur le serveur (pour votre utilisateur, bien entendu). Il est -également possible d'utiliser plusieurs clés publique pour chaque<br /> +également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br /> utilisateur.</p> <p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout -d'abord, il nous faut générer un couple de clés publique/privée sur le +d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t rsa précise a ssh que nous voulons un chiffrement rsa, qui est suffisamment solide pour cette utilisation.) Entrez les informations que @@ -642,12 +997,11 @@ ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br /> known_hosts liste les serveurs auxquels vous vous êtes connectés déjà une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous -intéresse ici c'est id_rsa et id_rsa.pub . id_rsa contient votre clé +intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé privée, sauvegardez la sur une clé USB ou notez la sur un bout de papier, si vous la perdez, vous ne pourrez plus vous connecter au -serveur. (planquez la clé usb/le bout de papier...) id_rsa.pub, quand a -lui, contient votre clé publique. Copiez la sur le serveur, avec un -<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou +serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a +lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou en la copiant a la main, si ça vous amuse. </p> <p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra. @@ -659,19 +1013,19 @@ domaine&gt;</code>), et il ne devrait pas vous demander de mot de pass il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré, donc vérifiez que vous avez suivi correctement les instruction ci-dessus.</strong></p> -<p>Continuons. Il ne nous reste plus qu'a installer le serveur web, et a le +<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le configurer: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \ -<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \ -<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \ -<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \ -<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \ +apache2 apache2.2-common apache2-doc apache2-mpm-prefork \ +apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \ +php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \ +apache2-suexec php-pear php-auth php5-mcrypt mcrypt \ +php5-imagick imagemagick libapache2-mod-suphp libruby \ +libapache2-mod-ruby </pre></div> -<p>(faisons large, on aura besoin de l'excédent plus tard...), puis activons les<br /> +<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br /> mods apache en faisant <code>a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest</code>, et faisons en sorte que ces activations soient prises en compte par apache via un <code>sudo service apache2 @@ -681,425 +1035,263 @@ comment fonctionner sur notre nom de domaine et ou trouver les fichiers a envoyer. </p> <p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez sympa pour nous filer un fichier de configuration par défaut. Il nous -faut encore l'éditer, en changeant l'adresse mail au début du document +faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>, -et enfin redémarrer apache pour qu'il prenne en compte les +et enfin redémarrer apache pour qu&rsquo;il prenne en compte les modifications, par un <code>sudo service apache2 restart</code> </p> <p>Et maintenant, il vous reste a apprendre le html, parce que ca y est, votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on -verra l'installation du serveur mail (c'est suffisamment complexe pour -prendre un article seul...)</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous +verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour +prendre un article seul&hellip;)</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous <del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une utilisation <strong>a la</strong> UNIX<br /> -Cependant, un d'entre eux se démarque par sa moins-mauvais-itude, c'est +Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br /> Mutt est un client mail en ligne de commande, qui, comme le dit sa page -d’accueil, <a href="http://www.mutt.org">"just sucks less"</a>. Dans les faits, mutt est assez +d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez chiant a configurer mais particulièrement pratique a utiliser après.</p> <p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans -<code>/etc/Muttrc</code>, et il est courant d'utiliser offlineimap en +<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en conjonction avec celui ci, de façon a accéder aux mails même sans accès -internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne +internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne crée pas de cache, ce qui empêche la consultation des emails sans -connexion internet.) La configuration d'offlineimap se fait dans -<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config +connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config par user. Offlineimap est un petit logiciel en python qui synchronise un dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque justement mutt accepte les dossiers au format Maildir. (De plus, cela va tout a fait dans le sens de la libération des données en cela que vous possédez vos mails en local.)<br /> Bref, passons aux choses serieuses : le code. Déjà, installez -offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d'installer +offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer mutt avec le patch sidebar, qui crée un listing des dossiers sur la partie gauche.<br /> Ensuite, voyons pour la partie configuration :<br /> -Ma configuration d'offlineimap :</p> -<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span> -<span class="cp">## Originally located in ~/.offlineimaprc</span> -<span class="cp">## This should not be edited without creating a copy before</span> -<span class="cp">## Created by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +Ma configuration d&rsquo;offlineimap :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span> +<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span> +<span style="color: #75715e">## This should not be edited without creating a copy before</span> +<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="p">[</span><span class="n">general</span><span class="p">]</span> -<span class="cp"># List of accounts to be synced, separated by a comma.</span> -<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</span> +<span style="color: #f8f8f2">[general]</span> +<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span> +<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span> -<span class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span> -<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> -<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span> -<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> -<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span> -<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span> -<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</span> +<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span> +<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> +<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span> +<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> +<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span> +<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span> +<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span> -<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span> -<span class="cp"># Where should the mail be placed?</span> -<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span> - <span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span> +<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span> +<span style="color: #75715e"># Where should the mail be placed?</span> +<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span> + <span style="color: #75715e"># voulez que vos emails apparaissent</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span> -<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span> -<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span> -<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d&#39;utilisateur</span> -<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span> -<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span> +<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span> +<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span> +<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span> +<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span> +<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span> </pre></div> -<p>Ça devrait être assez simple a lire, j'ai tout bien commenté :3<br /> +<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br /> Puis ma config mutt :</p> -<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span> -<span class="cp">## This file should not be edited without creating a copy</span> -<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span> +<span style="color: #75715e">## This file should not be edited without creating a copy</span> +<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="cp"># General config for reading (fetched via offlineimap)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap) -<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span> -<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span> +set mbox_type = Maildir +<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut) -<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span> -<span class="cp"># dossier root mailbox/imap</span> +set folder = ~/Email/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap -<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> -<span class="cp"># dossier d&#39;inbox</span> +set spoolfile = +INBOX +<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox -<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">&#39;</span><span class="n">All</span> <span class="n">Mail</span><span class="err">&#39;</span> -<span class="cp"># dossier ou archiver les emails</span> +set mbox = +&#39;All Mail&#39; +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails -<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span> -<span class="cp"># enfin voila quoi.</span> +set copy = yes +<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour... +<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi. -<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span> -<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span> +set header_cache = /.hcache/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache) -<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span> -<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span> +set record = +Sent +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés -<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span> -<span class="cp"># dossier dans lequel sont stockés les brouillons</span> +set postponed = +Drafts +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons -<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span> -<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span> +mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail +<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche -<span class="cp"># General config for sending (using Mutt&#39;s native support)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support) -<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">password_placeholder</span><span class="err">&#39;</span> -<span class="cp"># votre mot de passe</span> +set smtp_pass = &#39;password_placeholder&#39; +<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe -<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">&quot;smtp://username@whatev.org:465/&quot;</span> -<span class="cp"># l&#39;url ou envoyer les emails</span> +set smtp_url = &quot;smtp://username@whatev.org:465/&quot; +<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails -<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">&quot;utf-8&quot;</span> -<span class="cp"># UTF8, NE PAS CHANGER</span> +set send_charset = &quot;utf-8&quot; +<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER -<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">&quot;.sign&quot;</span> -<span class="cp"># vous pouvez mettre votre signature dans .sign</span> +set signature = &quot;.sign&quot; +<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign -<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible </span> -<span class="cp"># comme ca.</span> +set sig_on_top = yes +<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible +<span style="color: #960050; background-color: #1e0010">#</span> comme ca. -<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span> +set ssl_verify_host = no +<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement -<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">&quot;wxcafe.net&quot;</span> -<span class="cp"># mettez l&#39;adresse de votre serveur ici</span> +set hostname = &quot;wxcafe.net&quot; +<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici -<span class="cp"># Misc settings</span> +<span style="color: #960050; background-color: #1e0010">#</span> Misc settings -<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span> -<span class="cp"># la façon de voir les emails par défaut.</span> +auto_view text/html +<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut. -<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">&quot;%y-%m-%d %T&quot;</span> -<span class="cp"># format de date d&#39;envoi/de reception.</span> +set date_format = &quot;%y-%m-%d %T&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception. -<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">&quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;</span> -<span class="cp"># format de l&#39;index (la présentation de l&#39;interface)</span> -<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span> +set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface) +<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span> -<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span> -<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/aliases&quot;</span> -<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span> -<span class="cp"># format : &quot;alias short_name long_email_adress&quot;</span> -<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span> +set sort_alias = alias +set reverse_alias = yes +set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot; +<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même. +<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot; +source <span style="color: #f8f8f2">$alias_file</span> -<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># ne pas biper. CE SON ME TUE T.T</span> +set beep = no +<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T -<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span> -<span class="cp"># ?</span> +set tilde = yes +set sleep_time = 0 +<span style="color: #960050; background-color: #1e0010">#</span> ? -<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span> -<span class="cp"># parametres de la barre coté gauche</span> +set sidebar_visible = yes +set sidebar_width = 15 +<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche -<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">&quot;Clément Hertling (Wxcafé)&quot;</span> -<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">&quot;wxcafe@wxcafe.net&quot;</span> -<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/cacert&quot;</span> -<span class="cp"># parametres d&#39;envoi. mettez vos propres infos a la place des miennes...</span> +set realname = &quot;Clément Hertling (Wxcafé)&quot; +set from = &quot;wxcafe@wxcafe.net&quot; +set use_from = yes +set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot; +<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes... -<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># vous permet de vois les headers des mails. j&#39;aime, donc je laisse.</span> +set edit_headers = yes +<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse. -<span class="cp"># Macros</span> +<span style="color: #960050; background-color: #1e0010">#</span> Macros -<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span> -<span class="cp"># pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les </span> -<span class="cp"># deux</span> -<span class="cp"># \C represente la touche Control</span> +<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus, +<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les +<span style="color: #960050; background-color: #1e0010">#</span> deux +<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span> -<span class="cp"># Control+p -&gt; remonter d&#39;un dossier dans la sidebar</span> +bind index,pager \Cp sidebar-prev +<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span> -<span class="cp"># Control+n -&gt; descendre d&#39;un dossier dans la sidebar</span> +bind index,pager \Cn sidebar-next +<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span> -<span class="cp"># Control+o -&gt; ouvrir le dossier selectionné dans la sidebar</span> +bind index,pager \Co sidebar-open +<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar -<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">&quot;=Trash&quot;</span> <span class="s">&quot;Trash&quot;</span> -<span class="cp"># d supprime le message en cours</span> +macro index,pager d &quot;=Trash&quot; &quot;Trash&quot; +<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours -<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.</span> +bind pager previous-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message. -<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de </span> -<span class="cp"># message</span> +bind pager next-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de +<span style="color: #960050; background-color: #1e0010">#</span> message -<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># raccourcis vim</span> +bind pager j next-line +bind pager k previous-line +<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim -<span class="cp"># PGP signing commands</span> +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands -<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --import -v %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --export --armor %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_autosign</span><span class="o">=</span><span class="n">yes</span> -<span class="n">set</span> <span class="n">pgp_sign_as</span><span class="o">=</span><span class="mi">0</span><span class="n">x</span><span class="o">********</span> -<span class="cp"># remplacez 0x******** par votre identifiant PGP!!!!!</span> +set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot; +set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot; +set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot; +set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot; +set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot; +set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot; +set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot; +set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot; +set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot; +set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot; +set pgp_autosign=yes +set pgp_sign_as=0x******** +<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!! -<span class="n">set</span> <span class="n">pgp_replyencrypt</span><span class="o">=</span><span class="n">no</span> -<span class="n">set</span> <span class="n">pgp_timeout</span><span class="o">=</span><span class="mi">7200</span> -<span class="n">set</span> <span class="n">pgp_good_sign</span><span class="o">=</span><span class="s">&quot;^gpg: Good signature from&quot;</span> +set pgp_replyencrypt=no +set pgp_timeout=7200 +set pgp_good_sign=&quot;^gpg: Good signature from&quot; -<span class="cp"># si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis</span> -<span class="cp"># PGP signing options</span> +<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options -<span class="cp"># Palette for use with the Linux console. Black background.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background. -<span class="cp"># Schéma de couleur Rouge et Noir. Commentez si vous voulez le </span> -<span class="cp"># défaut noir et blanc.</span> -<span class="cp"># d&#39;autres schémas sont trouvables sur google et autre.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le +<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc. +<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre. -<span class="n">color</span> <span class="n">hdrdefault</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">quoted</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">signature</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">attachment</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">message</span> <span class="n">brightwhite</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">error</span> <span class="n">brightred</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">indicator</span> <span class="n">black</span> <span class="n">red</span> -<span class="n">color</span> <span class="n">status</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tree</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">normal</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">markers</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">search</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tilde</span> <span class="n">brightmagenta</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="o">~</span><span class="n">F</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="s">&quot;~N|~O&quot;</span> +color hdrdefault red black +color quoted brightblack black +color signature brightblack black +color attachment red black +color message brightwhite black +color error brightred black +color indicator black red +color status white black +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index red black ~F +color index red black &quot;~N|~O&quot; </pre></div> -<p>Voila, pour plus d'informations vous pouvez aller voir le manuel de mutt +<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt @ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br /> -J'espère que cette configuration "toute faite" vous aidera a commencer +J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer a utiliser mutt. Il est tout de fois important de se souvenir -qu'utiliser une configuration toute faire n'aide pas a comprendre un +qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un programme ou un système, et que cette façon de faire devrait être -réservée a l'introduction ou a des situations ou il est absolument -nécessaire d'avoir rapidement une configuration fonctionnelle (c'est a -dire, dans le cas d'un client email, euh... jamais?). Je vous invite +réservée a l&rsquo;introduction ou a des situations ou il est absolument +nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a +dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite donc a relire les annotations dont sont parsemés les fichiers de configuration en question, et surtout a lire le manuel, a chercher sur <del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement -a tenter de comprendre les configurations en question et a les améliorer!</p>La cryptographie avec PGP et principalement GnuPG2012-11-19T00:36:00+01:00Wxcafetag:wxcafe.net,2012-11-19:posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/<p>PGP (pour <a href="http://fr.wikipedia.org/wiki/Pretty_Good_Privacy">pretty good privacy</a>) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir <a href="http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">ici</a>) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de <em>Web of Trust</em>. </p> -<p>Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.<br /> -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.</p> -<p>Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -<a href="http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/">quitter Gmail</a> aussi, par exemple).</p> -<p>Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)</p> -<p>L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (<a href="http://fr.wikipedia.org/wiki/GNU_Privacy_Guard">GNU Privacy Guard</a>) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<code>&lt;troll&gt;</code> de façon surprenante pour un -programme GNU<code>&lt;/troll&gt;</code>) est extrêmement efficace et claire.</p> -<p>Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).</p> -<p>Tout d'abord, générons une clé GPG :</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">gen</span><span class="o">-</span><span class="n">key</span> -</pre></div> - - -<p>GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. </p> -<p>Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande <code>makepasswd</code>, qui génère automatiquement un mot de -passe) </p> -<p>GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) </p> -<p>Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">pubkey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé publique, et</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span><span class="o">-</span><span class="n">secret</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">seckey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. </p> -<p>Cela fait, listons les informations sur votre clé publique :</p> -<div class="highlight"><pre><span class="err">$</span> <span class="n">gpg</span> <span class="o">--</span><span class="n">list</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">fingerprint</span> -<span class="n">pub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">27</span><span class="n">D81AC8</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> - <span class="n">Key</span> <span class="n">fingerprint</span> <span class="o">=</span> <span class="mi">6345</span> <span class="n">A91A</span> <span class="n">FF89</span> <span class="mf">97E0</span> <span class="mi">13</span><span class="n">D0</span> <span class="mi">96</span><span class="n">A9</span> <span class="mf">9E2</span><span class="n">A</span> <span class="mi">1917</span> <span class="mi">27</span><span class="n">D8</span> <span class="mi">1</span><span class="n">AC8</span> -<span class="n">uid</span> <span class="n">Cl</span><span class="err">é</span><span class="n">ment</span> <span class="n">Hertling</span> <span class="p">(</span><span class="n">Wxcafe</span><span class="p">)</span> -<span class="n">uid</span> <span class="p">[</span><span class="n">jpeg</span> <span class="n">image</span> <span class="n">of</span> <span class="n">size</span> <span class="mi">14692</span><span class="p">]</span> -<span class="n">sub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">9</span><span class="n">ED7F77F</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> -</pre></div> - - -<p>La partie <code>pub</code> indique que c'est une clé publique, <code>4096R</code> indique que c'est -une clé RSA sur 4096 bits. La partie <code>27D81AC8</code> est -l'identifiant de la clé publique, <code>Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8</code> est appelé fingerprint de la clé. Les champs -<code>uid</code> sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ <code>sub</code> est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.<br /> -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">uploader</span><span class="o">*</span> -</pre></div> - - -<p>Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!<br /> -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). </p> -<p>Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.<br /> -Concernant les signatures de clés, elles fonctionnent de manière très -simple :<br /> -Vous devez télécharger la clé de votre correspondant, via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">search</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">correspondant</span><span class="o">*</span> -</pre></div> - - -<p>(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.<br /> -Ceci fait, vous pouvez signer la clé via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">sign</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>puis la renvoyer au serveur via</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">key</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>Voila, la clé de votre correspondant est signée!</p> -<p>Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!</p> \ No newline at end of file +a tenter de comprendre les configurations en question et a les améliorer!</p> \ No newline at end of file diff --git a/output/feeds/feed.vidya-games.xml b/output/feeds/feed.vidya-games.xml new file mode 100644 index 0000000..743a9ad --- /dev/null +++ b/output/feeds/feed.vidya-games.xml @@ -0,0 +1,82 @@ + +Wxcafé//wxcafe.net/2015-04-19T21:59:00+02:00Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d&rsquo;abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &ldquo;choses&rdquo; +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d&rsquo;autres. Vous aurez aussi remarqué que le +Gamepad n&rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube.</p> +<p>Cela étant, si comme moi vous avez, euh, &ldquo;ouvert&rdquo; le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l&rsquo;adaptateur GC pour Wii +U</a> +a votre console. </p> +<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d&rsquo;habitude +avec Nintendo, c&rsquo;est une solution a moitié satisfaisante&hellip;) : les classic +controller, mais en forme de manettes Gamecube.</p> +<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d&rsquo;argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes.</p> +<p>Nous allons ici voir deux modèles, un de chacune des boites en question +: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p> +<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus</em></strong></p> +<p>Commençons par le modèle de chez Hori :</p> +<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur.</p> +<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p> +<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c&rsquo;est logique puisque c&rsquo;est comme ça que les +classic controller sont faits, mais c&rsquo;est décevant tout de même</p> +<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p> +<p>On peut voir ici que la qualité de l&rsquo;assemblage n&rsquo;est pas extraordinaire, et on +remarque une soudure mal faite a l&rsquo;emplacement du stick gauche.</p> +<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p> +<p>Le stick c n&rsquo;est pas fixé au reste de la manette. +J&rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n&rsquo;avaient pas l&rsquo;air de très bonne qualité, et j&rsquo;ai préféré abandonner +l&rsquo;idée plutôt que de casser la manette.</p> +<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p> +<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d&rsquo;une Wiimote entière la dedans&hellip;</p> +<hr> + +<p>Passons maintenant a la manette PDP.</p> +<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p> +<p>Au premier coup d&rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c&rsquo;est un problème de goût).</p> +<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p> +<p>Les gâchettes sont des vraies gâchettes! C&rsquo;est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après.</p> +<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon <strike>péremptoire</strike> perpendiculaire&hellip;</p> +<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p> +<p>Vous l&rsquo;avez deviné, ces deux &ldquo;cartes filles&rdquo; servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de &ldquo;vraies&rdquo; gâchettes en cela +qu&rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques.</p> +<p>Quelques photos des gâchettes en question :</p> +<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p> +<hr /> +<p>Vous l&rsquo;aurez compris, je préfère la version PDP de ces &ldquo;Fight Pad&rdquo;, la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p> \ No newline at end of file diff --git a/output/feeds/wxcafe.atom.xml b/output/feeds/wxcafe.atom.xml index 94cdecd..f212a7f 100644 --- a/output/feeds/wxcafe.atom.xml +++ b/output/feeds/wxcafe.atom.xml @@ -1,260 +1,531 @@ -Wxcafé//wxcafe.net/2014-11-07T13:04:00+01:00OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/%D/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de +Wxcafé//wxcafe.net/2015-08-22T02:43:00+02:00les NUCs et le HDMI-CEC2015-08-22T02:43:00+02:00Wxcafetag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/<p>J&rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas &ldquo;profiter&rdquo; du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc&hellip;) simplement.</p> +<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j&rsquo;ai +décidé d&rsquo;installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça +donnait. Le résultat n&rsquo;étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j&rsquo;ai décidé d&rsquo;upgrader le système.</p> +<p>J&rsquo;ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a> +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un +<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je +pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&rsquo;autre +avantage de tourner sur du Intel, c&rsquo;est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86).</p> +<p>J&rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&rsquo;ai avidement +monté, avant de me rendre compte que le manuel de l&rsquo;adaptateur Pulse-Eight était +[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J&rsquo;ai donc +cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce +post</a> +expliquant comment brancher l&rsquo;adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l&rsquo;information, et pour moi si je dois remonter ce système.</p> +<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +&ldquo;Front Panel&rdquo;, et un appelé &ldquo;Custom Solution Header&rdquo;. Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&rsquo;est plus +facile, puisqu&rsquo;il n&rsquo;y a qu&rsquo;une seule fiche a brancher ici : la orange.</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que &ldquo;Deep S4/S5&rdquo; soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC.</p> +<p>Ne reste plus ensuite qu&rsquo;a installer un système digne de ce nom dessus!</p>SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:wxcafe.net,2015-05-16:posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose +problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce +problème, deux solutions sont apparues.</p> +<p>Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port.</p> +<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La +communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de +la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines +machines font un <em>handshake</em> SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise +a jour&rdquo; en douceur.</p> +<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> +La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout +d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il +voit qu&rsquo;il est disponible.<br /> +Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité +de tout le monde.</p>Manettes : Hori vs. PDP2015-04-19T21:59:00+02:00Wxcafetag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/<p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d&rsquo;abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &ldquo;choses&rdquo; +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d&rsquo;autres. Vous aurez aussi remarqué que le +Gamepad n&rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube.</p> +<p>Cela étant, si comme moi vous avez, euh, &ldquo;ouvert&rdquo; le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l&rsquo;adaptateur GC pour Wii +U</a> +a votre console. </p> +<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d&rsquo;habitude +avec Nintendo, c&rsquo;est une solution a moitié satisfaisante&hellip;) : les classic +controller, mais en forme de manettes Gamecube.</p> +<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d&rsquo;argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes.</p> +<p>Nous allons ici voir deux modèles, un de chacune des boites en question +: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p> +<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus</em></strong></p> +<p>Commençons par le modèle de chez Hori :</p> +<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur.</p> +<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p> +<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c&rsquo;est logique puisque c&rsquo;est comme ça que les +classic controller sont faits, mais c&rsquo;est décevant tout de même</p> +<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p> +<p>On peut voir ici que la qualité de l&rsquo;assemblage n&rsquo;est pas extraordinaire, et on +remarque une soudure mal faite a l&rsquo;emplacement du stick gauche.</p> +<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p> +<p>Le stick c n&rsquo;est pas fixé au reste de la manette. +J&rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n&rsquo;avaient pas l&rsquo;air de très bonne qualité, et j&rsquo;ai préféré abandonner +l&rsquo;idée plutôt que de casser la manette.</p> +<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p> +<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d&rsquo;une Wiimote entière la dedans&hellip;</p> +<hr> + +<p>Passons maintenant a la manette PDP.</p> +<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p> +<p>Au premier coup d&rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c&rsquo;est un problème de goût).</p> +<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p> +<p>Les gâchettes sont des vraies gâchettes! C&rsquo;est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après.</p> +<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon <strike>péremptoire</strike> perpendiculaire&hellip;</p> +<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p> +<p>Vous l&rsquo;avez deviné, ces deux &ldquo;cartes filles&rdquo; servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de &ldquo;vraies&rdquo; gâchettes en cela +qu&rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques.</p> +<p>Quelques photos des gâchettes en question :</p> +<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p> +<hr /> +<p>Vous l&rsquo;aurez compris, je préfère la version PDP de ces &ldquo;Fight Pad&rdquo;, la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p>Docker et les ebooks sur Twitter2015-02-28T14:11:00+01:00Wxcafetag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si +ce n&rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n&rsquo;est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>, +mais n&rsquo;est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>, +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d&rsquo;avoir une machine hôte sur laquelle s&rsquo;exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l&rsquo;hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu&rsquo;avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu&rsquo;à l&rsquo;hôte, puisqu&rsquo;il n&rsquo;est pas vraiment séparé des +invités. </p> +<p>Quoi qu&rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. &ldquo;Mais pourquoi utiliser Docker, dans ce cas&rdquo;, vous +demandez-vous peut être, &ldquo;puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&rdquo;. Et bien +c&rsquo;est très simple : Docker apporte la simplicité de déploiement d&rsquo;applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer +rapidement et facilement un grand nombre d&rsquo;images déjà configurées. </p> +<p>Maintenant que nous avons expliqué rapidement ce qu&rsquo;était Docker, voyons le +rapport avec les ebooks et Twitter.</p> +<p>Les comptes dits &ldquo;ebooks&rdquo; (le nom vient a l&rsquo;origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>, +voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots +twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>, +avec les tweets d&rsquo;un utilisateur &ldquo;source&rdquo; comme corpus, pour produire des tweets +ressemblant a ceux de l&rsquo;utilisateur source. Nous allons voir maintenant comment +en installer un.</p> +<p>C&rsquo;est, comme disent certaines personnes, &ldquo;fun&rdquo;.</p> +<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée +par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l&rsquo;API +twitter et la génération des messages.</p> +<p>Cependant, cela n&rsquo;explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d&rsquo;isoler les bots, et les +containers dockers permettent de les déployer sur n&rsquo;importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j&rsquo;ai créé <a href="https://github.com/wxcafe/ebooks_example">un +repo github</a> qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc.</p> +<p>Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l&rsquo;utilisateur source avec <code>ebooks archive &lt;username&gt; &lt;filename&gt;</code> (c&rsquo;est du json) +, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks +consume &lt;filename&gt;</code>. Cela fait, démarrer le bot revient a lancer le container : +<code>docker run -d &lt;container name&gt;</code> Pour plus d&rsquo;informations, allez voir <a href="https://docs.docker.com/articles/basics/">la +documentation Docker</a></p> +<p>Bien entendu, dans l&rsquo;idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 05 * * * cd /usr/local/ebooks/main/ &amp;&amp; /usr/local/bin/ebooks consume corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 10 * * * docker rm -f bots &gt;/dev/null 2&gt;&amp;1 +00 15 * * * docker rmi bots &gt; /dev/null 2&gt;&amp;1 +00 20 * * * cd /usr/local/ebooks/main/ &amp;&amp; docker build --rm -t bots . &gt;&gt; /var/log/ebooks/build.log 2&gt;&amp;1 +00 25 * * * docker run -d --name bots bots &gt;&gt; /var/log/ebooks/run.log 2&gt;&amp;1 +</pre></div> + + +<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s&rsquo;executent en même temps.</p> +<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n&rsquo;est qu&rsquo;un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des +applications &ldquo;usuelles&rdquo; +dedans</a>, +puisque l&rsquo;overhead de Docker est minimal, et beaucoup d&rsquo;autres applications +existent.</p>OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/<p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant +comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la +aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais +<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un +projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA +qu&rsquo;a le projet OpenBSD, globalement).</p> +<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA (Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis +<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération +ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches +sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et +<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir +des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour +ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et <a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> pour filtrer les mails entrants et sortants. Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮ + │╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │ + mail in ││ │ │ │ amavis │ +───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ +&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ </pre></div> <p>Normalement, ceci devrait être a peu près clair. Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de +aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails +venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, qui a ce moment-ci trie en fonction de la destination : les mails gérés par le domaine vont via dovecot dans les boites mail des destinataires locaux, les mails exterieurs vont directement vers le MTA du serveur distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon +<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon dont les différents services vont communiquer.</p> <p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de +10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et +écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de signer, nous allons profiter de cette configuration et donc lui parler en SMTP sur ces ports.</p> <p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, <code>/var/run/dovecot/lmtp</code>).</p> <p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮ + │╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ +25 &lt;────────│&lt;───────────╯ │ + ╰───────────────╯ </pre></div> <p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮ + │╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ </pre></div> <p>Pour les mails entrants.</p> <p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. +d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p> +<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> +<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new </pre></div> <p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> <p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span> +<span style="color: #75715e"># See smtpd.conf(5) for more information.</span> -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> +<span style="color: #75715e">## Certs</span> +pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span> +pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span> -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> +<span style="color: #75715e">## Ports to listen on, and how to listen on them</span> +listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional +listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source +listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> +<span style="color: #75715e">## Aliases</span> +table aliases file:/etc/aliases -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> +<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span> +listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered +<span style="color: #75715e"># coming from amavisd, signed with DKIM</span> +listen on lo port <span style="color: #ae81ff">10027</span> tag Signed -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> +<span style="color: #75715e">## Receiving</span> +<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span> +accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span> +<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span> +accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span> +<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span> -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> +<span style="color: #75715e">## Sending</span> +<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span> +accept tagged Signed <span style="color: #66d9ef">for</span> any relay +<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span> +accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span> +<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span> </pre></div> <p>Expliquons un peu ce fichier de configuration :</p> <ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> +<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration + d&rsquo;emplacement des certificats SSL.</li> <li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> <li>Les alias sont définis juste après</li> <li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> + comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on + taggue les mails sortants comme &ldquo;Signed&rdquo;</li> <li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore + peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième + première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième ligne matchant tous les mails arrivant et la première seulement ceux filtrés, inverser leur sens voudrait dire que les mails seraient toujours renvoyés a amavis</li> <li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au + on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par + DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le + problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au dessus.</li> </ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit +<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne +emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant +qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du POP3[s], différents guides sont trouvables facilement sur internet.</p> <p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span> -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> +<span style="color: #75715e"># basic config</span> +<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log +<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log +<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span> +<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> +<span style="color: #75715e"># authentication</span> +passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +userdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd +<span style="color: #f92672">}</span> -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> +<span style="color: #75715e"># the protocols we use</span> +<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> +<span style="color: #75715e"># ssl config</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring services </span> +<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span> +service imap-login <span style="color: #f92672">{</span> + inet_listener imap <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span> + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> +service lmtp <span style="color: #f92672">{</span> + unix_listener lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666 + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring protocols</span> +<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span> +protocol lda <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +protocol lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> +plugin <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve + <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve +<span style="color: #f92672">}</span> </pre></div> <p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> </pre></div> <p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth +<span style="color: #f92672">}</span> </pre></div> <p><strong>pour identifier les utilisateurs système</strong></p> <p>Ici aussi, voyons comment ce fichier est structuré :</p> <ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. +<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater + leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li> +<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs. Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs mots de passe avec PAM (ou BSDAuth)</li> <li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> + l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> <li>Nous configurons le SSL</li> <li>Le section suivante contient la configuration des services. Nous avons en premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. + désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant + IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons. La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> + fifo qu&rsquo;il utilise</li> <li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> <li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et quel dossier utiliser pour sa configuration.</li> @@ -263,101 +534,100 @@ POP3[s], différents guides sont trouvables facilement sur internet.</p> a deux choses : signer les emails sortants, et filtrer les emails entrants. Il doit donc écouter sur les port 10026 pour les signatures et 10024 pour le filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun +SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les +Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les modifications nécessaires a la fin du fichier.</p> <p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) <code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span> -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> +<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span> -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> +<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span> + <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span> + <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span> + <span style="color: #f8f8f2">}</span> +<span style="color: #f8f8f2">);</span> -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span> +<span style="color: #f8f8f2">};</span> -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> +<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span> +<span style="color: #f8f8f2">};</span> -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> +<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span> +<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span> </pre></div> <p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se +- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails + sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se trouve la clé privée servant a signer les emails. - le second définit les options DKIM que nous souhaitons utiliser comme défaut. Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> - nous définissons ensuite les ports sur lesquels nous allons écouter, puis les paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel + ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel ils viennent. - nous savons que les emails venants du port 10026 sont sortants, nous les traitons donc comme tel - le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre + sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a + 4871</a>. Nous déclarons l&rsquo;adresse a prévenir en cas de spam/virus venants de notre système, et que nous voulons être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de + puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature + les notifications de succès d&rsquo;envoi. Et voila!</p> +<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en fait inclus par défaut dans amavis.</p> <p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un +Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe +différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un tutorial</a>) mais de nombreuses autre méthodes existent. Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span> +<span style="color: #75715e"># report_safe 1</span> +<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span> +<span style="color: #75715e"># use_bayes 1</span> +<span style="color: #75715e"># bayes_auto_learn 1</span> +<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span> +<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span> +<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span> +<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span> +<span style="color: #75715e"># shortcircuit BAYES_99 spam</span> +<span style="color: #75715e"># shortcircuit BAYES_00 ham</span> -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> +<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span> </pre></div> @@ -365,44 +635,43 @@ Il nous reste encore a configurer spamassassin :</p> le required_score pour ma part.</p> <p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/%D/freebsd-online-mfsbsd/<p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad) +<p>Bon courage pour votre hosting de mail ensuite&hellip;</p>Installer FreeBSD sur un serveur Online avec MfsBSD2014-08-28T12:16:00+02:00Wxcafetag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/<p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad) Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>) -et n'ayant pour différentes raisons pas eu l'occasion de le faire sur mon -<a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, -j'ai commencé a chercher comment le faire sur ce serveur.</p> -<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu +et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, +j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p> +<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums -d'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> -<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), -ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur +d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> +<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), +ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur alternatif, minimaliste et simplifié pour FreeBSD.</p> <p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le -panel Online. Une fois cela fait, lancez une console, puis téléchargez l'image +panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis -choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter -sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout +choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter +sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout a fait classique va démarrer. Une fois ceci fait, la partie importante arrive: -mfsbsd contient un script d'installation root-on-zfs, nommé logiquement +mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement zfsinstall, qui va se charger de tout le travail pour nous.</p> <p>Utilisez donc ce script ainsi : </p> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, wipons le MBR :</span> -<span class="n">dd</span> <span class="o">&lt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span> -<span class="cp"># maintenant, installons le système</span> -<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span> +dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1 +<span style="color: #75715e"># maintenant, installons le système</span> +zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c </pre></div> <p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée, -<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D'autres options +<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous convient pas.</p> <p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf :</p> -<div class="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">&quot;YES&quot;</span> -<span class="n">sshd_load</span><span class="o">=</span><span class="s">&quot;YES</span> -<span class="n">hostname</span><span class="o">=</span><span class="s">&quot;whatever&quot;</span> -<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">&quot;DHCP&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span> +<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span> +<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span> +<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span> </pre></div> @@ -410,11 +679,10 @@ système) et éditez /etc/rc.conf :</p> physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez maintenant un système FreeBSD tout propre installé sur zfs a découvrir et utiliser!</p> -<p>Voila, c'est la fin de ce tutoriel. -(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu +<p>Voila, c&rsquo;est la fin de ce tutoriel. +(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu crédible, disons)</p> -<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter -<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, +<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, <a href="https://twitter.com/petitefanfare">petitefanfare</a>, <a href="https://twitter.com/capet_ebooks">capet_ebooks</a>, <a href="https://twitter.com/zengisse">zengisse</a>, @@ -422,146 +690,146 @@ et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont code</a>, qui vient de <a href="https://twitter.com/m1sp">@m1sp</a> (<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p> -<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/%D/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie +<p>A plus</p>SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: <a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès +ce qui peut avoir l&rsquo;effet de rendre légèrement parano. Si vous considérez que +c&rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> <p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être remarqué quelque chose récemment : il se trouve que le certificat qui permet de desservir ce site a changé.</p> <p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", +doigts sortis d&rsquo;un endroit particulier du corps de l&rsquo;admin/auteur de ce &ldquo;blog&rdquo;, qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système +du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&rsquo;un système fonctionnel utilisant cette compréhension récemment acquise.</p> <p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très +être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&rsquo;est très simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat +<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc&hellip; Bref, un certificat différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs +<p>Il s&rsquo;avère que c&rsquo;est a la fois très peu pratique a utiliser (les utilisateurs doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat +changement de sous-domaine conduit a un message d&rsquo;erreur, etc) et pas plus +sécurisé que d&rsquo;avoir un seul certificat wildcard. J&rsquo;ai donc généré un certificat pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> +pas <code>*.wxcafe.net</code>, et qui sera donc utilisé&hellip; bah pour <code>wxcafe.net</code>.</p> <p>Il serait préférable de faire des redirections automatiques des adresses http vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront +self-signed, il me semble préférable que l&rsquo;arrivée sur le site ne commence pas +par une page firefox disant &ldquo;Something&rsquo;s Wrong!&rdquo;, et ces redirections ne seront donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus +<p>De plus, après la lecture de l&rsquo;article de blog sur Lavabit dont le lien est plus haut, il semble intéressant (et assez important) de faire en sorte que le serveur utilise en priorité (et si possible, uniquement) des ciphers supportant PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les +communications avec ce serveur soient future-proof, c&rsquo;est a dire que, même si +quelqu&rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les communications passées.</p> <p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes +l&rsquo;implémentation : <br /> +Pour générer la clé, tout d&rsquo;abord, il convient d&rsquo;utiliser les commandes suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096 +# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation +sudo openssl req -new -key example.key -out example.csr +# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">&quot;Common Name&quot;</span> devant contenir le FQDN +sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt +# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">&#39;</span>une durée de vie de <span style="color: #ae81ff">3</span> ans </pre></div> <p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser <code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> +Une fois la clé générée, il faut dire aux différents services de l&rsquo;utiliser, et +de n&rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service. +Je vais lister ici les methodes pour quelques services que j&rsquo;utilise :</p> <h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3 +<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">&quot;</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \ + EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \ + EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">&quot;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">&quot;EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">&#39;abord, lancez la commande suivante :</span> +<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span> +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.key&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.crt&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">}</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span> </pre></div> <h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt +<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key +<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes +<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong +<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high +<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS +<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt +<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3 +<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes +<span style="color: #75715e"># [...]</span> </pre></div> <h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.crt +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL </pre></div> -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter +<p>Voila. Pour d&rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future +<p>Cela étant dit, je conseille a tout le monde d&rsquo;aller voir la conférence dans le +disclaimer, et tant qu&rsquo;a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/%D/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de +implémentation d&rsquo;une technologie &ldquo;remplaçant&rdquo; le système de CAs qui existe +actuellement.</p>Mise en place d'un serveur DNS2014-02-24T02:49:00+01:00Wxcafetag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de domaines en différentes informations : adresses IPv4, adresses IPv6, certificats DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour @@ -569,54 +837,53 @@ simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a <a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a <a href="http://5.39.76.46">http://5.39.76.46</a>).</p> -<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque -en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que +<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque +en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que de nos jours. La configuration des serveurs DNS peut ainsi être assez contre intuitive. Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses enregistrements est important.</p> -<p>Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même +<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d'écrire, par exemple, -<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le -<code>.</code> n'est pas obligatoire et la progression se fait de droite a gauche. Par +du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le +<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine <code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point a la fin de façon courante.</p> -<p>Le reverse DNS est une variante du DNS "classique" permettant de résoudre les +<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre +Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger +quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS +sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre habituel</em></strong>, et du faux domaine .in-addr.arpa Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR 76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p> -<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, +<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord, quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des -"enregistrements", records en anglais. Par exemple, un record A indique une +&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom de domaine que vous donnez en argument, mais en précisant un autre type de -record, vous pouvez obtenir n'importe quelle information : par exemple, <code>dig NS +record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS wxcafe.net</code> devrait vous renvoyer</p> -<div class="highlight"><pre><span class="p">;</span> <span class="o">&lt;&lt;&gt;&gt;</span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o">&lt;&lt;&gt;&gt;</span> NS wxcafe.net -<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd -<span class="p">;;</span> Got answer<span class="o">:</span> -<span class="p">;;</span> <span class="o">-&gt;&gt;</span>HEADER<span class="o">&lt;&lt;-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span> -<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span> -<span class="p">;;</span> QUESTION SECTION<span class="o">:</span> -<span class="p">;</span>wxcafe.net. IN NS +<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> -<span class="p">;;</span> ANSWER SECTION<span class="o">:</span> -wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net. -wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net. +<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span> -<span class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec -<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span> -<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span> -<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span> </pre></div> @@ -626,12 +893,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et &l chacun fait autorité pour lui même, et le problème évident est que le résolveur ne peut résoudre la query si il est renvoyé encore et encore vers le même serveur. Il convient donc de définir dans le même fichier de configuration -l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième -loop, se rendra compte qu'il est en train de faire une boucle infinie et -demandera l'adresse au serveur auquel il est connecté. La première indication de +l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième +loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et +demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de direction se fait grâce au serveur du TLD.</p> <p>La configuration de bind est assez simple dans le principe, le plus complexe -étant en fait d'écrire les fichiers de zone. +étant en fait d&rsquo;écrire les fichiers de zone. La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il existe 4 fichiers de configuration principaux : <code>named.conf</code>, <code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>. @@ -641,48 +908,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher named.conf.options contient les options que vous rajoutez pour changer le comportement de bind.</p> <p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans -lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, +lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité, deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs (notamment mon accès chez moi). </p> -<p>Examinons tout d'abord les fichiers de configuration de named. -<code>named.conf.local</code> contient les définitions des zones forward et reverse. +<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse. Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont -gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce +gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence -principale étant que l'un héberge en slave les masters de l'autre. +principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre. Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p> -<div class="highlight"><pre><span class="n">zone</span> <span class="s">&quot;wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;home.wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> </pre></div> @@ -693,250 +959,247 @@ tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est assez parlant.</p> <p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit <code>/etc/bind/master/wxcafe.net</code> : </p> -<div class="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span> - <span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span> - <span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span> - <span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span> - <span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span> - <span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span> - <span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span> + <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span> + <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span> + <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span> + <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span> + <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span> + <span style="color: #f8f8f2">)</span> -<span class="p">;</span> <span class="n">Name</span> <span class="n">servers</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">SPF</span> <span class="s">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> -<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> -<span class="p">;</span> <span class="n">Aliases</span> -<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="p">;</span> <span class="p">[...]</span> -<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span> +<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span> +<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span> -<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span> +<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> </pre></div> <p>Alors. Expliquons ligne par ligne.<br /> -Tout d'abord, le TTL (time to live) est un paramètre définissant le temps +Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps pendant lequel les serveurs récursif (qui font un cache des données) doivent cacher ce fichier de zone. <br /> Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, wxcafe.net. <br /> Maintenant, nous arrivons a un record important : SOA (Start of Authority). -Ce record prend de nombreux arguments, dans l'ordre :<br /> +Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br /> - Le nameserver autoritaire pour le nom de domaine en question,<br /> - - L'adresse email du responsable de cette zone, avec le premier point + - L&rsquo;adresse email du responsable de cette zone, avec le premier point remplacé par un @, </p> <p>puis entre parenthèses :<br /> - - Le numéro de série ("version" du fichier de zone, ici au format + - Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format YYYYMMDDNN) <br /> - La période de refresh, période entre chaque mise a jour du nameserver authoritaire secondaire, <br /> - La période de retry, le temps entre chaque essai de mise a jour si le nameserveur authoritaire primaire est indisponible, <br /> - - La période d'expire, le temps qu'attendra le serveur autoritaire + - La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire secondaire avant de supprimer les informations de son cache si le primaire reste indisponible, et enfin <br /> - - La période de TTL négatif, le temps qu'attendra le serveur secondaire + - La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire avant de ne plus offrir les informations de cette zone si le serveur primaire est injoignable. </p> -<p>Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus +<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus important a lire (pour les humains en tout cas). Continuons : </p> <p>NS (nameserver) permet de désigner les différents nameservers faisant autorité pour ce domaine. </p> -<p>MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. -SPF est un record d'authentification pour les emails. -Les records A désignent l'association entre un nom de domaine et une adresse +<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine. +SPF est un record d&rsquo;authentification pour les emails. +Les records A désignent l&rsquo;association entre un nom de domaine et une adresse IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site -n'est pas encore en IPv6.</p> +n&rsquo;est pas encore en IPv6.</p> <p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de -mettre en place des domaines exactement semblables a d'autre (ce qui permet par -exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p> +mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par +exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p> <p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet de changer la valeur du @ et des noms de domaine non complets (qui ne se terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et -l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on -l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, +l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on +l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, cela permet de rediriger les requêtes nous parvenant et demandant un domaine se trouvant sous home.wxcafe.net.</p> <p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques -différences n'étant en fin de compte que des différences de valeurs (dues au -fait que, eh bah, c'est pas les mêmes domaines...).</p> -<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est +différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au +fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p> +<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC 1034</a> et le <a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant -aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/%D/nat/<p>NAT (Network Address Translation) in a word?<br /> -It's complicated. Very. Don't do it, you'd damage your brain. </p> -<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/%D/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. -Wood. Il est assez connu comme étant l'un des pires films jamais sortis. Rempli -d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort -d'un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> -<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l'indique), -et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite -des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a -introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des -ressources appartenant a d'autres ordinateurs a distance, un support de -l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne +aussi.</p>NAT2014-02-17T05:02:00+01:00wxcafétag:wxcafe.net,2014-02-17:posts/nat/<p>NAT (Network Address Translation) in a word?<br /> +It&rsquo;s complicated. Very. Don&rsquo;t do it, you&rsquo;d damage your brain. </p> +<p>Bon, sinon, prochain article serieux vite, bisous.</p>Plan9 from whichever space2013-09-09T11:17:00+02:00Wxcafetag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. +Wood. Il est assez connu comme étant l&rsquo;un des pires films jamais sortis. Rempli +d&rsquo;erreur de montage, d&rsquo;effets spéciaux au rabais, et ayant même connu la mort +d&rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> +<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l&rsquo;indique), +et qui a été pensé comme le successeur d&rsquo;Unix. Il est conçu comme une poursuite +des concepts unixiens jusqu&rsquo;à leur but naturel. Ainsi, c&rsquo;est Plan9 qui a +introduit le concept d&rsquo;UnionFS, le protocole 9P qui permet d&rsquo;acceder a des +ressources appartenant a d&rsquo;autres ordinateurs a distance, un support de +l&rsquo;unicode par défaut et sur tout le système (a l&rsquo;inverse d&rsquo;Unix, qui fonctionne a la base en ASCII), un support de ProcFS amélioré, une interface graphique par -défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p> -<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit -d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a -quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt +défaut, et d&rsquo;autres améliorations sur les thèmes de base que propose Unix. </p> +<p>Cependant, Plan9 n&rsquo;a jamais été véritablement utilisé pour quoi que ce soit +d&rsquo;autre que la recherche en systèmes, et c&rsquo;est dommage, parce que Plan9 a +quelque chose de très intéressant à proposer. En effet, en ces jours d&rsquo;intérêt grandissant pour le klaoude et la délocalisation a la fois du processing et des -données, et bien que Plan9 ait été créé bien avant que le terme "cloud -computing" n'apparaisse pour la première fois, il semble que ce système ait été +données, et bien que Plan9 ait été créé bien avant que le terme &ldquo;cloud +computing&rdquo; n&rsquo;apparaisse pour la première fois, il semble que ce système ait été conçu pour apporter cette délocalisation tant rêvée.</p> -<p>En effet, même si l'on considère que les nouveautés qu'il apporte par rapport a -Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà -conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système -d'exploitation ultime en terme de partage de ressources et de données. -Ainsi, le fait que 9P permette de considérer toutes les ressources d'un système -distant comme n'étant qu'une poignée de fichiers permet de le monter comme -n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder +<p>En effet, même si l&rsquo;on considère que les nouveautés qu&rsquo;il apporte par rapport a +Unix ne sont pas extraordinaires en soit (alors qu&rsquo;elles sont déjà +conséquentes), lorsqu&rsquo;on les prend ensemble, elles font de Plan9 le système +d&rsquo;exploitation ultime en terme de partage de ressources et de données. +Ainsi, le fait que 9P permette de considérer toutes les ressources d&rsquo;un système +distant comme n&rsquo;étant qu&rsquo;une poignée de fichiers permet de le monter comme +n&rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse -interagir avec les autres, même s'ils sont hétérogènes (c'est a dire provenant -de machines différentes), permet d'utiliser les ressources d'une machine -distante comme si elle était présente localement. Le mécanisme d'UnionFS permet +interagir avec les autres, même s&rsquo;ils sont hétérogènes (c&rsquo;est a dire provenant +de machines différentes), permet d&rsquo;utiliser les ressources d&rsquo;une machine +distante comme si elle était présente localement. Le mécanisme d&rsquo;UnionFS permet de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers de plusieurs machines a la fois (ce qui permet une délocalisation des données bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p> <p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de -parler d'ordinateur lorsque le concept même du système est d'être composé de +parler d&rsquo;ordinateur lorsque le concept même du système est d&rsquo;être composé de clusters eux mêmes composés de machines hétérogènes. Le système de fichier -virtuel /net fourni par le kernel de Plan9 permet d'implémenter très facilement -différents concepts réseaux : en montant le /net d'un ordinateur du réseau local -sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur -du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur +virtuel /net fourni par le kernel de Plan9 permet d&rsquo;implémenter très facilement +différents concepts réseaux : en montant le /net d&rsquo;un ordinateur du réseau local +sur celui servant de gateway vers l&rsquo;internet, on crée un NAT vers cet ordinateur +du réseau local. En montant le /net d&rsquo;un ordinateur distant sur un ordinateur local via le protocole 9P sécurisé, on crée un VPN : les connections locales se -font en utilisant l'accès de l'ordinateur distant, et les connections entre les +font en utilisant l&rsquo;accès de l&rsquo;ordinateur distant, et les connections entre les deux sont chiffrées. </p> <p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour -partager leur "puissance" de calcul en userspace, des superordinateurs pour -lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels -JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait +partager leur &ldquo;puissance&rdquo; de calcul en userspace, des superordinateurs pour +lesquels le noyau Linux s&rsquo;est doté du support de jusqu&rsquo;à 4096 CPUs, des OS tels +JoliOS qui promettent une integration du klaoude alors qu&rsquo;ils ne sont en fait que des navigateurs web a peine améliorés et des services de stockage en ligne -qui promettent un accès universel a toutes nos données alors qu'ils ne proposent +qui promettent un accès universel a toutes nos données alors qu&rsquo;ils ne proposent que de les garder a disposition par le web, Plan9 promettait une technologie de partage des ressources système et de données, une intégration du réseau dans le système particulièrement poussée, un environnement graphique supporté par le -basesystem et non greffé par dessus comme l'a été X11, et de nombreuses autres +basesystem et non greffé par dessus comme l&rsquo;a été X11, et de nombreuses autres améliorations sur Unix.</p> -<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative, -et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de +<p>Malheureusement, il n&rsquo;a jamais été adopté de façon véritablement significative, +et ce pour une raison très Unixiènne : &ldquo;worse is better&rdquo;. En effet, le parc de machines Unix déjà installées était suffisamment performant et fonctionnel pour que des solutions soient développées au dessus du système pour remplir les mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de -Linux, FUSE, etc...</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/%D/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler +Linux, FUSE, etc&hellip;</p>Sed Basics2013-08-18T22:57:00+02:00Wxcafetag:wxcafe.net,2013-08-18:posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler le texte (ce qui se montre relativement indispensable dans un environnement Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu connu en détail, et la plupart du temps une seule fonction est utilisée : le remplacement de texte.<br /> Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p> -<p>Tout d'abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais -aussi un langage de manipulation de texte dérivé de <code>ed</code>, l'éditeur original. -<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas -personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des -machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs -dits "visuels", tels que vim, emacs, et globalement tous les éditeurs ayant un +<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais +aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas +personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des +machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs +dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du -concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d'une ligne a la fois. +concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois. En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p> -<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d'empêcher -l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui -permet de rediriger l'output dans le fichier d'input. Cela dit, l'intérêt unique +<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher +l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui +permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique du programme est son langage de manipulation de texte.</p> <p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des /). Ainsi, la commande de base dans <code>sed</code> est </p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/ </pre></div> <p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de -n'exécuter les commandes qui suivent que sur ces lignes.) </p> +n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p> <p><br/> -La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s'utilise de +La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de la façon suivante : </p> -<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span> </pre></div> <p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une regex) par [new text] (qui doit être un texte fixe, avec quelques exceptions), en appliquant [options], la plus connue des options étant <code>g</code>, -qui permet d'appliquer la commande affectée a toutes les occurrences du texte +qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte matché sur la/les lignes concernée-s.<br /> -Les exceptions a la "fixité" de [new text] sont particulièrement +Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard, -excepté le fait qu'il permet jusqu'à 9 "holding spaces", qui sont délimités par +excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par \( et \), et qui sont représentées dans le texte de remplacement par \1 à \9.</p> <p>Par exemple, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39; </pre></div> -<p>sur le texte "hello world world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world </pre></div> <p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le texte original. Ainsi, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&amp;</span> <span class="n">world</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39; </pre></div> -<p>sur le texte "hello world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world </pre></div> <p><br/></p> <p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans -l'espace courant :</p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span> +l&rsquo;espace courant :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p </pre></div> <p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire -dédié, que j'appelle l'espace courant (pattern space en anglais). La commande -<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit -le pattern space de façon a ce qu'il ne contienne que les lignes matchant, et le -<strong>p</strong> affiche donc ce dernier.</p> -<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s'utilisent ainsi :</p> -<div class="highlight"><pre><span class="n">c</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit +le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p> +<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \ +[text] </pre></div> <p>De la même façon, pour le i : </p> -<div class="highlight"><pre><span class="n">i</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \ +[text] </pre></div> <p>Et de même pour a. </p> -<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'elles +<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong> sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme @@ -947,26 +1210,25 @@ space, et non sur la ligne en question.</p> /[regex]/d <strong>d</strong> (delete) supprime les contenus du pattern space.</p> <p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je -parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé -au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier <em>en +parlerai des commandes multilignes et des labels.</p>Le chiffrement de partitions avec dm-crypt et device-mapper2013-07-10T03:18:00+02:00Wxcafetag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé +au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a -ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou -bien la confidentialité d'un support de stockage, par exemple. Nous allons ici +ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou +bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici voir comment mettre en place un système de ce type sous GNU/Linux. Cet article -n'a pas pour but de vous apprendre a mettre en place un système basé sur une -procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en -jeu dans l'utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de -présenter un rapide tutoriel concernant la création d'un support chiffré sur +n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une +procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en +jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de +présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p> <p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système -du noyau Linux, et s'appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement -de disques. Comme son nom l'indique, device-mapper est un système qui a pour but +du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement +de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère -comme "block device" tout fichier spécial (en gros, les fichiers disques dans -<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le +comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de -fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. -Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. +fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad. +Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes. Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans /dev, et device-mapper est requis pour pouvoir en voir les partitions (qui apparaîtront donc dans /dev/mapper)</p> @@ -976,59 +1238,59 @@ déchiffre a la volée tous les accès disques a ce périphérique non chiffré traduisant sur le système de fichier chiffré, le tout de manière tout a fait transparente pour les applications utilisant le disque en question. Cela induit bien entendu une baisse de performance relativement significative dans le cas -d'un chiffrement du système de fichier root, mais quasiment insignifiante dans +d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans le cas de chiffrement de partitions de données.</p> -<p>D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer +<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer si le système de fichier root est chiffré. Dans ce cas précis, la procédure de -boot <strong><em>doit</em></strong> s'appuyer sur une image initrd (l'initrd est un système de +boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de fichier minimal qui sert uniquement a initialiser le système. Les kernels de base de la plupart des distributions GNU/Linux en utilisent un dans tous les cas, pour des raisons de compatibilité) et sur une partition de boot qui elle -n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge +n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et -charge l'initrd en RAM, celui-ci a son tour lance un script permettant de +charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de charger les modules nécessaires a la suite du boot (que ce soit pour un boot sans disque root local, ou bien comme ici avec un système chiffré), puis le -système de fichier "cible" est remonté sur la racine, et l'initrd est démonté -est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend +système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté +est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend depuis le système de fichier maintenant monté sur la racine.</p> <p>La méthode la plus évidente pour contourner le chiffrement du disque est alors -de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par +de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par un autre modifié, copiant par exemple la phrase de passe permettant de déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir -contre ce genre d'attaques : l'une des plus simple est de faire un checksum du +contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot -que l'initrd présente toujours le même checksum. Cela dit, cette méthode a -l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès +que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a +l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès a un fichier initrd reconnu comme sûr.<br /> Une autre approche consisterait a placer le système de fichier /boot sur un périphérique dédié, protégé en écriture de façon matérielle (par exemple, une carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et -protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un -attaquant de modifier ce système de fichier, et l'initrd est alors toujours de +protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un +attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de confiance. Cependant, cela a pour conséquence de rendre la mise a jour de -l'initrd et du noyau <em>beaucoup</em> plus difficile qu'elle ne le serait sans.</p> +l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p> <p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop, -l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est -maintenant responsable de l'utilisation <em>userspace</em> de dm-crypt, qui pour sa +l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est +maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la -manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier +manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi obligatoirement être capables de le faire en tant que root. </p> <p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br /> -Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, -dans une situation réelle ou l'on cherche a chiffrer un disque, il convient -d'utiliser /dev/urandom comme source, pour éviter la détection du système de +Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela, +dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient +d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de fichier chiffré sur le disque. Ici, par exemple, nous allons faire : </p> -<div class="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img </pre></div> <p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img </pre></div> @@ -1038,34 +1300,34 @@ passphrase. Il convient ici de choisir une passphrase particulièrement sûre, puisque toute personne ayant accès a la passphrase aura aussi accès au disque et donc a vos secrets.<br /> Une fois cela fait, nous allons mapper cette image : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto </pre></div> <p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes, -puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous -voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En +puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous +voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les -systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque -qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque +systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque +qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque virtuel qui correspond a notre image. Il se comporte comme toute partition, et peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. Il se comporte en effet comme une partition, et non comme un véritable disque.) -Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de -le faire, pour pouvoir l'utiliser. </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> +Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de +le faire, pour pouvoir l&rsquo;utiliser. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto </pre></div> <p>Maintenant que notre disque est formaté, il peut être monté : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt </pre></div> <p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat suivant : </p> -<div class="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) </pre></div> @@ -1075,51 +1337,51 @@ sont (en fonction de votre passphrase) en sécurité. </p> <ul> <li> <p>Pour monter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o">&lt;</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt; +sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt; </pre></div> </li> <li> <p>Pour démonter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt; +sudo cryptsetup luksClose &lt;nom de disque virtuel&gt; </pre></div> </li> </ul> -<p>Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de +<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de créer et de monter/démonter vos images/disques chiffré-e-s en une seule commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p> <p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable disque (ou clé usb, ou autre), il est préférable de créer une partition de taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code> -pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/%D/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation +pour ce faire.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:wxcafe.net,2013-06-12:posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a &ldquo;un peu&rdquo; changé récemment.</p> +<p>Du coup, expliquons. J&rsquo;ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même +occasion découvert <a href="http://getpelican.com">pelican</a>. J&rsquo;ai tout de suite accroché a ce générateur de +site statique en python, du fait de son efficacité, de sa facilité d&rsquo;utilisation et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au +fichiers markdown ou reStructuredText, les passe a la moulinette d&rsquo;un &ldquo;thème&rdquo; +constitué de templates pour les fichiers html et l&rsquo;organisation du projet et +d&rsquo;une partie &ldquo;statique&rdquo; contenant le css, et les autres fichiers nécessaires au projet, et en fait des pages html. </p> <p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span> +<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span> + <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span> </pre></div> @@ -1127,116 +1389,116 @@ projet, et en fait des pages html. </p> django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a +<p>L&rsquo;un des grands avantages de pelican est aussi la facilité qu&rsquo;il offre quand a la mise a jour du blog.<br /> En effet, il offre un système de Makefiles permettant, grâce a de nombreuses cibles de compilation, de régénérer le site entier, de ne générer que les fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... +fichiers n&rsquo;existant pas la dernière fois, etc&hellip; La gestion du projet en devient donc très simple, puisque après avoir écrit un article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> <p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est +pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&rsquo;est moi +qui ait modifié les templates et le css), c&rsquo;est lisible (puisque c&rsquo;est du +python, par opposition au PHP&hellip;), et c&rsquo;est plus &ldquo;efficace&rdquo;. Le markdown est très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus +les articles, je n&rsquo;ai pas besoin d&rsquo;un accès continu au net, bref, c&rsquo;est plus efficace.</p> <p>En ce qui concerne les points négatifs : </p> <ul> <li> <p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a + Je vous propose de vous référer a l&rsquo;article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a mon avis sur ce sujet.</p> </li> <li> <p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a + Il va bientôt être remis, c&rsquo;est juste un manque de temps de ma part, mais vu + que toutes les pages passent par les mêmes templates, c&rsquo;est assez facile a faire.</p> </li> <li> <p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> + Pourquoi c&rsquo;est dans les points négatifs, ca?</p> </li> <li> -<p>Temps d'adaptation et d'appréhension du système: +<p>Temps d&rsquo;adaptation et d&rsquo;appréhension du système: Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca + réguliers sur le blog, c&rsquo;est parce que j&rsquo;apprend a me servir de ce système + et que j&rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous + les cas ca me permet d&rsquo;apprendre plein de choses, donc je mets plutôt ca dans la catëgorie positive.</p> </li> </ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/%D/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu -pour avoir développé Cydia, un "app store" alternatif pour les iTrucs), +<p>Voila, c&rsquo;est mon retour d&rsquo;expérience sur pelican. A plus. </p>Comment Saurik a rooté les Google Glass2013-05-06T06:24:00+02:00Wxcafetag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu +pour avoir développé Cydia, un &ldquo;app store&rdquo; alternatif pour les iTrucs), après avoir reçu une paire de Google glass de la part de Google (de -façon assez évidente...), a trouvé intéressant d'obtenir un accès root -sur celles-ci, ce qu'il a accompli très rapidement. Des démentis de la +façon assez évidente&hellip;), a trouvé intéressant d&rsquo;obtenir un accès root +sur celles-ci, ce qu&rsquo;il a accompli très rapidement. Des démentis de la part de Google et de certains autres sites sont vite arrivés, disant que les lunettes possédaient un bootloader débloqué et que de fait, le root était facile a obtenir : il suffisait de débloquer le bootloader, -d'extraire l'OS, de le rooter hors-fonctionnement, puis de le +d&rsquo;extraire l&rsquo;OS, de le rooter hors-fonctionnement, puis de le réinstaller, rooté, sur les lunettes.</p> <p>Le fait est que de débloquer le bootloader laisse une trace permanente -sur les lunettes, et que Saurik n'a pas utilisé cette technique pour +sur les lunettes, et que Saurik n&rsquo;a pas utilisé cette technique pour rooter sa paire. Voyons comment il a fait :</p> -<p><em>Je tiens tout d'abord a préciser que toutes les informations qui vont +<p><em>Je tiens tout d&rsquo;abord a préciser que toutes les informations qui vont suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la -partie "How does this exploit work".  Je tente d'apporter ma maigre +partie &ldquo;How does this exploit work&rdquo;.  Je tente d&rsquo;apporter ma maigre contribution a cette explication.</em></p> -<p>Donc, d'après les témoignages des quelques utilisateurs de Glass dans le +<p>Donc, d&rsquo;après les témoignages des quelques utilisateurs de Glass dans le monde, il semblerait que ces dernières fonctionnent avec un système -d'exploitation Android, avec une nouvelle interface, mais avec les mêmes +d&rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes outils internes: un kernel Linux, des outils userland GNU et une machine virtuelle Java Dalvik pour les applications.</p> -<p>Saurik a donc cherché un exploit connu pour cette version d'android, et -l'a appliqué a son problème. L'exploit en question est relativement -simple. Depuis la version 4.0 d'android, le système permet la sauvegarde +<p>Saurik a donc cherché un exploit connu pour cette version d&rsquo;android, et +l&rsquo;a appliqué a son problème. L&rsquo;exploit en question est relativement +simple. Depuis la version 4.0 d&rsquo;android, le système permet la sauvegarde des données des différentes applications, une a une, via ADB (Android -Debug Bridge, un protocole USB permettant l'accès a de nombreuses +Debug Bridge, un protocole USB permettant l&rsquo;accès a de nombreuses fonctions avancées des machines fonctionnant sous android, dont, entre -autre, un shell, un accès au logs de debugging, etc... Cette +autre, un shell, un accès au logs de debugging, etc&hellip; Cette fonctionnalité est bien entendu désactivable.) Ce backup est très simple : il crée un fichier .tgz contenant le dossier de configuration de -l'application. Lors de la restauration, le système supprime la -configuration existante, puis la remplace par celle dans l'archive gzip.</p> +l&rsquo;application. Lors de la restauration, le système supprime la +configuration existante, puis la remplace par celle dans l&rsquo;archive gzip.</p> <p>Le problème de sécurité vient du fait que les applications android voient leurs données stockées dans /data/data/identifiant/, et que -/data/ a pour permissions drwxrwx--x  27  system  system, ce qui +/data/ a pour permissions drwxrwx&ndash;x  27  system  system, ce qui signifie que seul system et les membres du groupe system peuvent lire dessus. Or, le fichier /data/local.prop définit de nombreux paramètres -au démarrage, et notamment un qui permet au système de déterminer s'il -fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur +au démarrage, et notamment un qui permet au système de déterminer s&rsquo;il +fonctionne dans une VM ou sur un véritable appareil. S&rsquo;il fonctionne sur une machine virtuelle, il donne les droits root a tout utilisateur se -connectant via ADB, ce qui est ce que l'on cherche pour l'instant. Le +connectant via ADB, ce qui est ce que l&rsquo;on cherche pour l&rsquo;instant. Le fait que /data/ appartienne a system veut dire que le programme de restauration doit être setuid pour accéder aux données a l’intérieur qui -appartiennent a root (soit toutes les applications système d'android, -dont l'application paramètres, et, dans ce cas précis, l'application de +appartiennent a root (soit toutes les applications système d&rsquo;android, +dont l&rsquo;application paramètres, et, dans ce cas précis, l&rsquo;application de log système présente sur les google glass de test. Ainsi, nous avons un processus tournant en tant que root, qui va écrire sur une partition qui nous intéresse des données que nous possédons.</p> -<p>Cependant, un problème reste : le système de restauration d'Android +<p>Cependant, un problème reste : le système de restauration d&rsquo;Android vérifie les données avant de restaurer, et ne restaure pas les symlinks, -ce qui nous empêche d'avoir accès directement a /data/local.prop, le -fichier qu'on cherche a modifier. Cela dit, il nous reste une +ce qui nous empêche d&rsquo;avoir accès directement a /data/local.prop, le +fichier qu&rsquo;on cherche a modifier. Cela dit, il nous reste une possiblité. Plaçons un dossier world-writable dans le fichier de backup, et nous pourrons écrire dedans pendant quelques secondes, le temps que la restauration se termine et que le système remette les permissions en place. Ainsi, nous pouvons créer le fichier /data/local/com.google.glass.logging/whatev/x, lien vers /data/local.prop, et nous avons un toujours un processus tournant en -tant que root qui est en train d'écrire dans ce dossier.</p> +tant que root qui est en train d&rsquo;écrire dans ce dossier.</p> <p>Donc, nous allons lancer deux processus en même temps : </p> <ul> <li> <p>Le premier tentera en boucle de créer le symlink. Il sera consitué de la commande suivante, depuis un shell sur les lunettes :</p> -<div class="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">&gt;/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span> -<span class="k">do</span> <span class="o">:</span> -<span class="n">done</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&gt;/dev/null +do : +done </pre></div> @@ -1245,10 +1507,10 @@ tant que root qui est en train d'écrire dans ce dossier.</p> <p>Le deuxième sera le processus de restauration de notre exploit. Celui ci, pour une plus grande chance de réussite, devra être suffisamment lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x, - pour qu'il crée whatev, prenne du temps a copier bigfile, puis écrive + pour qu&rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive dans x après que le symlink soit effectif. La commande sera, depuis - l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span> + l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab </pre></div> @@ -1257,111 +1519,111 @@ tant que root qui est en train d'écrire dans ce dossier.</p> world-readable. Il va commencer a copier le fichier bigfile.<br /> - Le processus de symlink va créer le lien /data/data/com.google.glass.logging/whatev/x, pointant vers - /data/local.prop, puis rendre l'âme proprement.<br /> + /data/local.prop, puis rendre l&rsquo;âme proprement.<br /> - Le processus de restauration, ayant enfin fini de copier whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui est lié a /data/local.prop. Comme le processus est setuid root, il ne se rendra compte de rien, et écrira tout dans /data/local.prop.</p> </li> </ul> -<p>And voilà! On a écrit ce que l'on veut dans /data/local.prop, ce qui -nous permet de faire croire a android qu'il tourne dans une machine -virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui -indique au noyau qu'il tourne dans qemu, un système de VM).</p> -<p>Il nous reste a rebooter, depuis l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<p>And voilà! On a écrit ce que l&rsquo;on veut dans /data/local.prop, ce qui +nous permet de faire croire a android qu&rsquo;il tourne dans une machine +virtuelle (ce que l&rsquo;on veut, c&rsquo;est en fait &ldquo;ro.kernel.qemu=1&rdquo;, qui +indique au noyau qu&rsquo;il tourne dans qemu, un système de VM).</p> +<p>Il nous reste a rebooter, depuis l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Puis nous remontons la partitions système en lecture/écriture (r/w), depuis le host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;mount -o remount,rw /system&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;mount -o remount,rw /system&quot; </pre></div> -<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span> +<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l&rsquo;appareil :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin </pre></div> <p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir l’exécuter plus tard :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;chmod 6755 /system/xbin/su&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;chmod 6755 /system/xbin/su&quot; </pre></div> <p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir redémarrer normalement :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;rm /data/local.prop&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;rm /data/local.prop&quot; </pre></div> <p>Enfin, nous redemarrons a nouveau :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Et voila, une paire de google glass rootée!</p> -<p>Il est bon de préciser que cette manipulation n'est possible que parce -que les lunettes tournent sous une ancienne version d'android, et que ce +<p>Il est bon de préciser que cette manipulation n&rsquo;est possible que parce +que les lunettes tournent sous une ancienne version d&rsquo;android, et que ce bug a été fixé depuis.</p> <p>Il serait aussi interessant de couvrir les problèmes de vie privée -qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p> -<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/%D/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il -s'agit de posséder son propre serveur, et donc, par extension, ses +qu&rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.</p> +<p>A bientôt!</p>Monter son propre serveur, partie 1: le serveur et l'apache.2013-03-18T09:51:00+01:00Wxcafetag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il +s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses données. </p> -<p>Bien entendu, il n'est pas nécessaire pour cela de posséder +<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder physiquement son propre serveur (encore que ce soit possible, mais ce -n'est pas le sujet abordé ici.)<br /> +n&rsquo;est pas le sujet abordé ici.)<br /> Nous expliquerons ici les étapes nécessaires pour arriver a avoir un serveur utilisable, du moment ou vous arrivez sur le système fraichement installé, au moment ou vous possédez un serveur avec tous les paquets -nécessaires a l'utilisation que l'on veut en faire ici d'installés. +nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés. Cette partie va consister a paramétrer le système (ici un debian squeeze. Il est bien sur possible de faire la même chose avec a peu près toutes les distributions Linux disponibles, tout comme avec les BSD et tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x -squeeze, parce que c'est une distribution simple a utiliser comme -serveur, stable, et facile a configurer (puisqu'une bonne partie de la +squeeze, parce que c&rsquo;est une distribution simple a utiliser comme +serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la configuration est déjà faite et incluse dans le paquet), donc adaptée au -but de cet article, a savoir rendre l'installation simple et +but de cet article, a savoir rendre l&rsquo;installation simple et compréhensible).</p> -<p>La première chose a faire est bien entendu d'obtenir le serveur en lui +<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui même. Cette partie de la chose ne sera pas traitée dans cet article. Il -existe en effet un nombre infini d'obtenir un serveur, que ce soit en le -louant chez OVH/1&amp;1/n'importe quel autre hébergeur commercial, en -participant a un système d'hébergement collaboratif (je vous laisse +existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le +louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en +participant a un système d&rsquo;hébergement collaboratif (je vous laisse chercher), en achetant un serveur et en le faisant fonctionner de chez -vous, en utilisant un vieux PC... Bref, les possibilités sont multiples. +vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples. Dès lors que vous avez accès a un système debian serveur, peu importe sur quel matériel il fonctionne, et a priori peu importe aussi la manière -dont vous y accédez, le résultat est le même (et la procédure aussi...). +dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;). Dans cet article, nous parlerons de la configuration de base, du moment ou vous avez le serveur vierge dans les mains au moment ou vous installez le serveur http.</p> -<p>Dans cet article, lorsque est précisée le type d'IP a utiliser, il -convient de mettre ce type précisément. Quand le type n'est pas +<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il +convient de mettre ce type précisément. Quand le type n&rsquo;est pas précisée, libre a vous de choisir ipv4 ou ipv6.</p> <p>Bref. Commençons au point ou vous avez un accès root a votre serveur, -n'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou -rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez +n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou +rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe solide sur le compte root. Continuons en allant vite mettre en place le nom de domaine. Pour cela, votre registrar doit vous fournir une -interface vous permettant d'éditer l'entrée DNS pour votre nom de +interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de domaine. </p> -<p>Cette entrée doit donc pour l'instant ressembler a ca :</p> -<div class="highlight"><pre> <span class="o">&lt;</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">&gt;</span> <span class="n">NS</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">A</span> <span class="o">&lt;</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> - <span class="n">IN</span> <span class="n">AAAA</span> <span class="o">&lt;</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> +<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1 + IN MX 1 + IN A &lt;IPv4 de votre serveur&gt; + IN AAAA &lt;IPv6 de votre serveur&gt; </pre></div> <p>Cela vous permet de rediriger tout le trafic se référant a votre nom de domaine vers votre ip (le fonctionnement exact du DNS est assez -compliqué a expliquer, donc on va dire que c'est de la magie pour -l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer +compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour +l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers votre serveur, ce qui est un bon début. Faisons un petit point sécurité ici : pour accéder a votre serveur, il vous suffit actuellement de taper @@ -1370,50 +1632,50 @@ le mot de passe root.</p> bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction du nombre de caractères, ça prend plus ou moins de temps, et si vous avez suffisamment de caractères, ça peut prendre un temps assez -conséquent. Cela dit, il vaut mieux être prudent...) Ainsi, nous allons -arrêter d'utiliser root et nous allons commencer a utiliser des couples +conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons +arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples clés publiques/privées pour nous connecter au serveur.<br /> -Cela se fait en deux temps : tout d'abord, créer un nouvel utilisateur, -grâce auquel nous administrerons le serveur a l'avenir; puis configurer -OpenSSH pour que celui ci n'accepte que les connections par clés et plus +Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur, +grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer +OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus celles sur root.</p> <p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se fait avec adduser, qui est interactif (vous ne devriez pas avoir de -problème avec, puisqu'il crée tout les dossiers et fichiers nécessaires, +problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires, et vous pose toutes les questions utiles pour vous aider.) sinon, vous -devrez utiliser useradd, qui est (en plus d'être très chiant a -distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait -un simple script permettant l'utilisation d'useradd plus facilement.)</p> +devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a +distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait +un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p> <p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif en faisant un <code>adduser --group &lt;username&gt;</code></p> <p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m -N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera -son dossier principal dans /home/, et l'ajoutera au groupe du même nom +son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom que lui (ce qui est en général nécessaire pour des questions de vie privée).</p> -<p>Il convient maintenant d'ajouter cet utilisateur aux groupes qu'il sera +<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix users staff sudo wheel</code>, puis de changer son mot de passe <code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br /> -Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un +Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un utilisateur complètement fonctionnel et utilisable pour toutes les -taches d'administration. Si vous devez encore utiliser root, c'est que +taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que quelque chose ne va pas.</p> -<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous +<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous allons maintenant passer a la phase 2 du plan : désactiver le login ssh root et le login ssh par mot de passe.<br /> -Tout d'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un +Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un système assez semblable a celui vous permettant de chiffrer vos mail : vous avec une clé publique et une clé privée sur le client, et la clé publique est aussi sur le serveur. Lorsque vous vous connectez, openssh vérifie que vous possédez la clé privée qui correspond a la clé publique stockée sur le serveur (pour votre utilisateur, bien entendu). Il est -également possible d'utiliser plusieurs clés publique pour chaque<br /> +également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br /> utilisateur.</p> <p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout -d'abord, il nous faut générer un couple de clés publique/privée sur le +d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t rsa précise a ssh que nous voulons un chiffrement rsa, qui est suffisamment solide pour cette utilisation.) Entrez les informations que @@ -1421,12 +1683,11 @@ ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br /> known_hosts liste les serveurs auxquels vous vous êtes connectés déjà une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous -intéresse ici c'est id_rsa et id_rsa.pub . id_rsa contient votre clé +intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé privée, sauvegardez la sur une clé USB ou notez la sur un bout de papier, si vous la perdez, vous ne pourrez plus vous connecter au -serveur. (planquez la clé usb/le bout de papier...) id_rsa.pub, quand a -lui, contient votre clé publique. Copiez la sur le serveur, avec un -<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou +serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a +lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou en la copiant a la main, si ça vous amuse. </p> <p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra. @@ -1438,19 +1699,19 @@ domaine&gt;</code>), et il ne devrait pas vous demander de mot de pass il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré, donc vérifiez que vous avez suivi correctement les instruction ci-dessus.</strong></p> -<p>Continuons. Il ne nous reste plus qu'a installer le serveur web, et a le +<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le configurer: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \ -<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \ -<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \ -<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \ -<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \ +apache2 apache2.2-common apache2-doc apache2-mpm-prefork \ +apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \ +php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \ +apache2-suexec php-pear php-auth php5-mcrypt mcrypt \ +php5-imagick imagemagick libapache2-mod-suphp libruby \ +libapache2-mod-ruby </pre></div> -<p>(faisons large, on aura besoin de l'excédent plus tard...), puis activons les<br /> +<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br /> mods apache en faisant <code>a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest</code>, et faisons en sorte que ces activations soient prises en compte par apache via un <code>sudo service apache2 @@ -1460,46 +1721,46 @@ comment fonctionner sur notre nom de domaine et ou trouver les fichiers a envoyer. </p> <p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez sympa pour nous filer un fichier de configuration par défaut. Il nous -faut encore l'éditer, en changeant l'adresse mail au début du document +faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>, -et enfin redémarrer apache pour qu'il prenne en compte les +et enfin redémarrer apache pour qu&rsquo;il prenne en compte les modifications, par un <code>sudo service apache2 restart</code> </p> <p>Et maintenant, il vous reste a apprendre le html, parce que ca y est, votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on -verra l'installation du serveur mail (c'est suffisamment complexe pour -prendre un article seul...)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are +verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour +prendre un article seul&hellip;)</p>Pourquoi je vais quitter linux pour passer a FreeBSD.2013-02-04T17:41:00+01:00Wxcafetag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p> -<p>Bon, voila. J'ai passé le cap. Je suis sous GNU/Linux depuis un certain +<p>Bon, voila. J&rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain temps, maintenant, et depuis un certain temps je remarque des -changements malvenus. Bien entendu, au début, je n'avais pas les +changements malvenus. Bien entendu, au début, je n&rsquo;avais pas les connaissances nécessaires pour comprendre ne serait-ce que ces modifications existaient. Et puis certaines sont arrivées avant que je -n'ai même idée que quelque chose dans mon système d'exploitation avait +n&rsquo;ai même idée que quelque chose dans mon système d&rsquo;exploitation avait cette fonction la. Par exemple, udev, ou policykit/consolekit/. A -l'époque, je n'avais aucune idée de la façon dont les disques étaient -montés sur mon système. Le premier système non-Windows que j'ai utilisé +l&rsquo;époque, je n&rsquo;avais aucune idée de la façon dont les disques étaient +montés sur mon système. Le premier système non-Windows que j&rsquo;ai utilisé fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je cherche a démonter le système pour comprendre comment il fonctionnait en -profondeur. Cependant, avec le temps, les connaissances s'accumulant et -mon niveau de compréhension du système s'améliorant, j'ai commencé a -remarquer que certain bouts de l'OS ne collaient pas exactement avec les -autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a -cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma -compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne +profondeur. Cependant, avec le temps, les connaissances s&rsquo;accumulant et +mon niveau de compréhension du système s&rsquo;améliorant, j&rsquo;ai commencé a +remarquer que certain bouts de l&rsquo;OS ne collaient pas exactement avec les +autres. Bien sur, je ne saurais dire si cette réalisation s&rsquo;est faite a +cause de la recrudescence de ces bouts d&rsquo;OS, ou bien juste a cause de ma +compréhension plus poussée. Toujours est-il que ces petits bouts d&rsquo;OS ne s’adaptant pas au reste du système se faisaient de plus en plus visible. -Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai -choisi de passer a Archlinux. C'était avant le passage a systemd. Ce -système me convenait bien. Si je n'installais pas Gnome, ce que je ne +Et puis, un jour, j&rsquo;en ai eu marre de voir unity sur ma machine, et j&rsquo;ai +choisi de passer a Archlinux. C&rsquo;était avant le passage a systemd. Ce +système me convenait bien. Si je n&rsquo;installais pas Gnome, ce que je ne comptais pas faire, il ne me forçait pas a installer un *kit -quelconque, ni dbus. Oui, udev était toujours la, mais c'était le moins +quelconque, ni dbus. Oui, udev était toujours la, mais c&rsquo;était le moins envahissant de ceux la.</p> <p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les premiers sont probablement très efficaces dans leur domaine, et le -second n'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la -distribution d'avoir au plus vite les dernières versions de tout. +second n&rsquo;a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la +distribution d&rsquo;avoir au plus vite les dernières versions de tout. Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient -pas les seuls a faire ça...) ont un problème très précis, qui n'importe +pas les seuls a faire ça&hellip;) ont un problème très précis, qui n&rsquo;importe pas a tout le monde, mais qui est très gênant pour ceux a qui il importe, et ce problème est que ces systèmes ne respectent absolument pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en @@ -1508,1616 +1769,428 @@ ces 9 principes :</p> <li>Ce qui est petit est beau</li> <li>Faites en sorte que chaque programme fasse une chose, bien.</li> <li>Faites un prototype aussi vite que possible</li> -<li>Choisissez la portabilité plutôt que l'efficacité</li> +<li>Choisissez la portabilité plutôt que l&rsquo;efficacité</li> <li>Stockez les données dans des fichiers textes.</li> <li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li> <li>Utilisez des scripts shells pour faciliter la portabilité et la réutilisation.</li> -<li>Évitez les UI qui "capturent" l'utilisateur.</li> +<li>Évitez les UI qui &ldquo;capturent&rdquo; l&rsquo;utilisateur.</li> <li>Faites de chaque programme un filtre.</li> </ol> -<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et -on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas -exactement la façon dont l'informatique fonctionne. Effectivement, les -standards, les systèmes d'exploitation, les logiciels, tout doit évoluer -- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est -pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et -celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La -philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans -de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br /> -La philosophie UNIX est aussi et surtout une garantie d'utilisabilité +<p>Alors bien entendu, un système d&rsquo;exploitation est fait pour évoluer, et +on pourrait penser qu&rsquo;UNIX a fait son temps. Cependant, ce n&rsquo;est pas +exactement la façon dont l&rsquo;informatique fonctionne. Effectivement, les +standards, les systèmes d&rsquo;exploitation, les logiciels, tout doit évoluer +- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&rsquo;est +pas d&rsquo;UNIX que nous parlons ici. C&rsquo;est de la <em>philosophie</em> UNIX. Et +celle-ci n&rsquo;a pas fait son temps, <strong>elle a fait ses preuves.</strong> La +philosophie UNIX, en plus d&rsquo;être efficace sur le papier, a aussi 44 ans +de tests derrière elle, et fonctionne aussi bien qu&rsquo;au premier jour.<br /> +La philosophie UNIX est aussi et surtout une garantie d&rsquo;utilisabilité et de simplicité pour les administrateurs systèmes, pour les -développeurs, bref pour tous ceux qui font de l'informatique -<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique +développeurs, bref pour tous ceux qui font de l&rsquo;informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l&rsquo;informatique ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce sont ceux qui sont les plus proches du système).</p> -<p>Tous OS se doit d'avoir un système standardisé pour faire communiquer +<p>Tous OS se doit d&rsquo;avoir un système standardisé pour faire communiquer les programmes entre eux. UNIX a un système de pipes, des sortes de -fichiers spéciaux permettant d'échanger des informations. C'est -efficace, ça respecte le "tout est fichier", c'est standard, c'est +fichiers spéciaux permettant d&rsquo;échanger des informations. C&rsquo;est +efficace, ça respecte le &ldquo;tout est fichier&rdquo;, c&rsquo;est standard, c&rsquo;est simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient -remplacer ça, avec une interface qui n'est explicitement pas faite pour -être utilisée a la ligne de commande mais a l'aide d'APIs, et un -programme monolithique qui effectue sa tache d'une façon complètement -obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon -efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus -"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est -<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est -horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus -lire facilement les échanges entre programmes. C'est peu pratique, en +remplacer ça, avec une interface qui n&rsquo;est explicitement pas faite pour +être utilisée a la ligne de commande mais a l&rsquo;aide d&rsquo;APIs, et un +programme monolithique qui effectue sa tache d&rsquo;une façon complètement +obscure pour l&rsquo;utilisateur. Alors bien sur, il l&rsquo;effectue d&rsquo;une façon +efficace, cette tache. Oui, ça va plus vite qu&rsquo;avant. Oui, c&rsquo;est plus +&ldquo;rangé&rdquo;, ça fait moins &ldquo;fouillis&rdquo;. Mais c&rsquo;est moins efficace. C&rsquo;est<em>beaucoup</em> moins utilisable pour l&rsquo;utilisateur final. C&rsquo;est +horriblement chiant pour les sysadmins, parce qu&rsquo;ils ne peuvent plus +lire facilement les échanges entre programmes. C&rsquo;est peu pratique, en fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br /> Systemd prend le même parti de créer une interface unifiée, accessible via des appels a des APIs uniquement, complètement obscure, extrêmement abstraite, bien entendu monolithique, et très peu ouverte a la -modification par l'utilisateur final. Alors oui, il parait que ça -augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques +modification par l&rsquo;utilisateur final. Alors oui, il parait que ça +augmente la vitesse de boot. Eh bien, au risque d&rsquo;en choquer quelques uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement et que je puisse modifier facilement, et qui soit ouvert, compréhensible -et distribué. C'est presque comme si les projets freedesktop.org avaient +et distribué. C&rsquo;est presque comme si les projets freedesktop.org avaient pour but de remplacer la base UNIX de linux en créant un système -concurrent, bâtard, bâti sur le kernel Linux mais n'employant plus les -systèmes basiques d'UNIX.</p> -<p>Le problème est qu'il est facilement visible que la direction prise par -la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni +concurrent, bâtard, bâti sur le kernel Linux mais n&rsquo;employant plus les +systèmes basiques d&rsquo;UNIX.</p> +<p>Le problème est qu&rsquo;il est facilement visible que la direction prise par +la communauté Linux n&rsquo;est pas celle du retour sur les systèmes UNIX ni celle du développement de solutions respectant la philosophie UNIX, mais -remises au gout du jour (?), mais est bien d'accepter et de pousser les +remises au gout du jour (?), mais est bien d&rsquo;accepter et de pousser les changements apportés par les projets freedesktop.org directement dans le cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font partie de nombreux développeurs de ces projets), a déjà adopté tous ces -changements (archlinux aussi, mais pour d'autres raisons...), et on peut -compter sur le fait que les autres distributions l'adopteront un jour ou -l'autre.</p> -<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces -systèmes, tout du moins exprimé les raisons qui font qu'ils me -déplaisent, on pourrait penser qu'il suffit de passer a une distribution -n'incluant pas systemd, voire a une distribution n'incluant pas du tout +changements (archlinux aussi, mais pour d&rsquo;autres raisons&hellip;), et on peut +compter sur le fait que les autres distributions l&rsquo;adopteront un jour ou +l&rsquo;autre.</p> +<p>Bon, maintenant que nous avons, si ce n&rsquo;est démontré la nocivité de ces +systèmes, tout du moins exprimé les raisons qui font qu&rsquo;ils me +déplaisent, on pourrait penser qu&rsquo;il suffit de passer a une distribution +n&rsquo;incluant pas systemd, voire a une distribution n&rsquo;incluant pas du tout de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur archlinux. Cependant, avec un peu de réflexion, on voit que si des distributions comme archlinux et Fedora ont adopté systemd (et -qu'OpenSUSE est en train de l’intégrer), il est probable que cela +qu&rsquo;OpenSUSE est en train de l’intégrer), il est probable que cela devienne un standard au fil des années, et que seuls survivent systemd -et upstart, le gestionnaire de démarrage d'ubuntu, qui ne changera +et upstart, le gestionnaire de démarrage d&rsquo;ubuntu, qui ne changera probablement pas (je les vois mal revenir en arrière sur ce point.) -Toujours est-il que l'init héritée du System V semble condamnée a mourir +Toujours est-il que l&rsquo;init héritée du System V semble condamnée a mourir sous Linux. Il pourrait être judicieux de passer sous debian squeeze, qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne la recevra probablement que dans 2/3 ans. Cependant, cette période est -toujours trop courte, et met sur mon système d'exploitation une date -d'expiration, chose qui ne me plait que moyennement. Non, la solution -est de passer sous un système autre, qui ait son propre système d'init +toujours trop courte, et met sur mon système d&rsquo;exploitation une date +d&rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution +est de passer sous un système autre, qui ait son propre système d&rsquo;init (ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options -principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas -vraiment un choix, vu le peu de programmes qu'il permet de faire -fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui -n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku -n'est pas un choix non plus, puisque le but est de rester dans une +principales s&rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&rsquo;est pas +vraiment un choix, vu le peu de programmes qu&rsquo;il permet de faire +fonctionner et le fait qu&rsquo;il ne soit disponible que sur i386, ce qui +n&rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku +n&rsquo;est pas un choix non plus, puisque le but est de rester dans une optique UNIX.</p> -<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai +<p>OpenSolaris est un système d&rsquo;exploitation tout a fait valable. Je n&rsquo;ai en théorie aucun problème sur cet OS, sauf que certains choix de design -ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet, +ne correspondent pas du tout a l&rsquo;idée que j&rsquo;ai d&rsquo;un OS. En effet, OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de ses outils, avec des paquets modifiés pour les rendre plus simples a utiliser (fichiers de configuration fournis par défaut, par exemple, et -autres patchs "release-only"), et une tendance a faire des scripts et -des outils installés par défaut pour tout et n'importe quoi. Bref, cela -n'est pas le sujet. Il convient aussi de voir qu'avec la récente +autres patchs &ldquo;release-only&rdquo;), et une tendance a faire des scripts et +des outils installés par défaut pour tout et n&rsquo;importe quoi. Bref, cela +n&rsquo;est pas le sujet. Il convient aussi de voir qu&rsquo;avec la récente acquisition de Sun par Oracle, il est possible que le projet OpenSolaris -n'ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du -projet affiche d'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> -<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD -ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est +n&rsquo;ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du +projet affiche d&rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> +<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&rsquo;OpenBSD, NetBSD +ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&rsquo;est simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour -réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir -DFBSD ressemble aussi au système de l'assistance a l'user a outrance -décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment +réputation d&rsquo;être orientées sécurité, et d&rsquo;après ce que j&rsquo;ai pu en voir +DFBSD ressemble aussi au système de l&rsquo;assistance a l&rsquo;user a outrance +décris plus haut. Mais la vérité est que je n&rsquo;ai pas fait suffisamment de recherches et que FreeBSD ne va me voir arriver que par hasard, parce -qu'entre toutes les BSD ca me semble la plus sympa et la plus agréable a -utiliser, plus le fait que le système de ports me convient bien (j'aime +qu&rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a +utiliser, plus le fait que le système de ports me convient bien (j&rsquo;aime pouvoir configurer mes logiciels de façon assez profonde.)</p> -<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien +<p>Voila, c&rsquo;est mon avis sur ce &ldquo;problème&rdquo; actuel du monde de Linux. Bien entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins -n'apparaissent jamais chez certaines distributions, créant de ce fait un +n&rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un choix pour les utilisateurs.<br /> -[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/%D/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> -J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire +[1]: Je n&rsquo;ai pas trouvé de traduction satisfaisante a &ldquo;software leveraging&rdquo;, mais l&rsquo;idée est la&hellip;*</p>Update et pensées a propos du Raspberry Pi2013-01-27T01:55:00+01:00Wxcafetag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> +J&rsquo;ai annoncé il y a environ 20 jours que j&rsquo;avais pour projet de faire une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée -PiRatBox. Il se trouve qu'après de nombreux essais, un problème -récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez +PiRatBox. Il se trouve qu&rsquo;après de nombreux essais, un problème +récurrent apparait: le Raspberry Pi n&rsquo;est pas capable de fournir assez de courant par défaut pour faire fonctionner a la fois un disque dur et une antenne WiFi.<br /> -Alors, autant il me semble évident qu'avec une -alimentation provenant d'un port USB a 2A (max), je n'avais pas -énormément de chances d'avoir 2A sur chacun des ports host du Raspi, +Alors, autant il me semble évident qu&rsquo;avec une +alimentation provenant d&rsquo;un port USB a 2A (max), je n&rsquo;avais pas +énormément de chances d&rsquo;avoir 2A sur chacun des ports host du Raspi, autant avoir moins de 250 mA sur chacun de ces ports me semble un tout petit peu exagéré en terme de rentabilité. </p> <p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me -servant a rien) (vous savez, celui qui est monté en USB...), qui +servant a rien) (vous savez, celui qui est monté en USB&hellip;), qui consomme énormément, est assez louche. Il devrait toujours être possible de désactiver une device USB, me semble-t-il, au niveau logiciel. La, -bien qu'il soit surement possible de la désactiver au niveau du kernel, -il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien +bien qu&rsquo;il soit surement possible de la désactiver au niveau du kernel, +il n&rsquo;est pas <strong>simplement</strong> possible de la &ldquo;débrancher&rdquo;. Ce qui est bien chiant, étant donné le besoin évident de puissance électrique dans lequel on se retrouve. </p> -<p>Bon, je dois avouer n'avoir pas testé de lancer les différents services +<p>Bon, je dois avouer n&rsquo;avoir pas testé de lancer les différents services composant le système des piratebox sous arch, pour la simple <del>et -bonne</del> raison qu'arch utilise systemd et qu'il n'existe pas de wrapper -systemd pour les daemons piratebox, et que j'ai la flemme d'en faire, +bonne</del> raison qu&rsquo;arch utilise systemd et qu&rsquo;il n&rsquo;existe pas de wrapper +systemd pour les daemons piratebox, et que j&rsquo;ai la flemme d&rsquo;en faire, parce que systemd est une horreur a utiliser avec les scripts init. Donc -non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas +non, j&rsquo;utiliserai debian. Le problème d&rsquo;utiliser debian dans ce cas précis est que apt/dpkg a une gestion des dépendances dans un sens mais -pas dans l'autre, en ce sens que si on installe un package "haut", c'est +pas dans l&rsquo;autre, en ce sens que si on installe un package &ldquo;haut&rdquo;, c&rsquo;est a dire dépendant de plusieurs autres packages, apt/dpkg se charge -efficacement d'installer toutes les dépendances nécessaires, tandis que -si on désinstalle un package "bas", c'est a dire sur lequel de nombreux +efficacement d&rsquo;installer toutes les dépendances nécessaires, tandis que +si on désinstalle un package &ldquo;bas&rdquo;, c&rsquo;est a dire sur lequel de nombreux autres packages dépendent, apt/dpkg ne désinstalle pas ces packages -"hauts", ce qui pose un vrai problème quand on se retrouve sur un -Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui -sera installé sur le système avant l'installation proprement dite -(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd +&ldquo;hauts&rdquo;, ce qui pose un vrai problème quand on se retrouve sur un +Raspberry Pi, puisqu&rsquo;il n&rsquo;y a pas de moyen &ldquo;facile&rdquo; de choisir ce qui +sera installé sur le système avant l&rsquo;installation proprement dite +(puisque le moyen &ldquo;universel&rdquo; d&rsquo;installation sur Raspberry Pi est le dd vers la SD qui sert de disque système.)</p> -<p>Il y a <strong>énormément</strong> d'autres critiques que l'ont pourrait faire -concernant le Raspberry Pi. Son système de démarrage a s'arracher les +<p>Il y a <strong>énormément</strong> d&rsquo;autres critiques que l&rsquo;ont pourrait faire +concernant le Raspberry Pi. Son système de démarrage a s&rsquo;arracher les cheveux, par exemple. En effet, plutôt que de faire comme tout pc normalement constitué ou la partie calcul démarre, lance le bootloader, -cherche le kernel de l'OS qui lui même se lance, initialise le hardware, -etc..., a un système bâtard du au fait que la puce au centre de la carte +cherche le kernel de l&rsquo;OS qui lui même se lance, initialise le hardware, +etc&hellip;, a un système bâtard du au fait que la puce au centre de la carte est a la base une puce graphique a laquelle on a greffé un cœur de -calcul (probablement au fond d'une cour d'immeuble, dans les quartiers -pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le -plus efficace qu'aient trouvé les personnes ayant implémenté cette +calcul (probablement au fond d&rsquo;une cour d&rsquo;immeuble, dans les quartiers +pauvres de Bratislava, vu la propreté de la greffe&hellip;), et le moyen le +plus efficace qu&rsquo;aient trouvé les personnes ayant implémenté cette atrocité de gérer le boot est donc de faire démarrer le cœur graphique en premier, ce dernier exécute un code propriétaire pour démarrer le cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel -etc... </p> +etc&hellip; </p> <p>Ce qui non seulement complique énormément le boot, non seulement ajoute -du code propriétaire a un projet se disant libre, mais en plus n'est -<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, -oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p> -<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je -le terminerai dès que j'aurai récupéré les outils nécessaires pour +du code propriétaire a un projet se disant libre, mais en plus n&rsquo;est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, +oui, mais uniquement quand c&rsquo;est bien réalisé, sinon je dis non. </p> +<p>Enfin, le projet que j&rsquo;avais est toujours en cours de réalisation. Je +le terminerai dès que j&rsquo;aurai récupéré les outils nécessaires pour monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa -vie. Les problèmes qu'il m'a posé, qu'il n'aurait pas du me poser, m'ont -trop agacé pour que j'aie envie de le sortir et de jouer avec une fois +vie. Les problèmes qu&rsquo;il m&rsquo;a posé, qu&rsquo;il n&rsquo;aurait pas du me poser, m&rsquo;ont +trop agacé pour que j&rsquo;aie envie de le sortir et de jouer avec une fois sa mission remplie. </p> -<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/%D/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous +<p>Dommage.</p>Update2013-01-05T18:32:00+01:00Wxcafetag:wxcafe.net,2013-01-05:posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la +fabrication d&rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt +sur le blog!</p>Mutt ou le client email le meilleur moins mauvais2013-01-02T02:12:00+01:00Wxcafetag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous <del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une utilisation <strong>a la</strong> UNIX<br /> -Cependant, un d'entre eux se démarque par sa moins-mauvais-itude, c'est +Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br /> Mutt est un client mail en ligne de commande, qui, comme le dit sa page -d’accueil, <a href="http://www.mutt.org">"just sucks less"</a>. Dans les faits, mutt est assez +d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez chiant a configurer mais particulièrement pratique a utiliser après.</p> <p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans -<code>/etc/Muttrc</code>, et il est courant d'utiliser offlineimap en +<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en conjonction avec celui ci, de façon a accéder aux mails même sans accès -internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne +internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne crée pas de cache, ce qui empêche la consultation des emails sans -connexion internet.) La configuration d'offlineimap se fait dans -<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config +connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config par user. Offlineimap est un petit logiciel en python qui synchronise un dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque justement mutt accepte les dossiers au format Maildir. (De plus, cela va tout a fait dans le sens de la libération des données en cela que vous possédez vos mails en local.)<br /> Bref, passons aux choses serieuses : le code. Déjà, installez -offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d'installer +offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer mutt avec le patch sidebar, qui crée un listing des dossiers sur la partie gauche.<br /> Ensuite, voyons pour la partie configuration :<br /> -Ma configuration d'offlineimap :</p> -<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span> -<span class="cp">## Originally located in ~/.offlineimaprc</span> -<span class="cp">## This should not be edited without creating a copy before</span> -<span class="cp">## Created by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +Ma configuration d&rsquo;offlineimap :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span> +<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span> +<span style="color: #75715e">## This should not be edited without creating a copy before</span> +<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="p">[</span><span class="n">general</span><span class="p">]</span> -<span class="cp"># List of accounts to be synced, separated by a comma.</span> -<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</span> +<span style="color: #f8f8f2">[general]</span> +<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span> +<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span> -<span class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span> -<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> -<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span> -<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> -<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span> -<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span> -<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</span> +<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span> +<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> +<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span> +<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> +<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span> +<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span> +<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span> -<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span> -<span class="cp"># Where should the mail be placed?</span> -<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span> - <span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span> +<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span> +<span style="color: #75715e"># Where should the mail be placed?</span> +<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span> + <span style="color: #75715e"># voulez que vos emails apparaissent</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span> -<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span> -<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span> -<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d&#39;utilisateur</span> -<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span> -<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span> +<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span> +<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span> +<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span> +<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span> +<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span> </pre></div> -<p>Ça devrait être assez simple a lire, j'ai tout bien commenté :3<br /> +<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br /> Puis ma config mutt :</p> -<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span> -<span class="cp">## This file should not be edited without creating a copy</span> -<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span> +<span style="color: #75715e">## This file should not be edited without creating a copy</span> +<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="cp"># General config for reading (fetched via offlineimap)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap) -<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span> -<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span> +set mbox_type = Maildir +<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut) -<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span> -<span class="cp"># dossier root mailbox/imap</span> +set folder = ~/Email/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap -<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> -<span class="cp"># dossier d&#39;inbox</span> +set spoolfile = +INBOX +<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox -<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">&#39;</span><span class="n">All</span> <span class="n">Mail</span><span class="err">&#39;</span> -<span class="cp"># dossier ou archiver les emails</span> +set mbox = +&#39;All Mail&#39; +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails -<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span> -<span class="cp"># enfin voila quoi.</span> +set copy = yes +<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour... +<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi. -<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span> -<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span> +set header_cache = /.hcache/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache) -<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span> -<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span> +set record = +Sent +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés -<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span> -<span class="cp"># dossier dans lequel sont stockés les brouillons</span> +set postponed = +Drafts +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons -<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span> -<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span> +mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail +<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche -<span class="cp"># General config for sending (using Mutt&#39;s native support)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support) -<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">password_placeholder</span><span class="err">&#39;</span> -<span class="cp"># votre mot de passe</span> +set smtp_pass = &#39;password_placeholder&#39; +<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe -<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">&quot;smtp://username@whatev.org:465/&quot;</span> -<span class="cp"># l&#39;url ou envoyer les emails</span> +set smtp_url = &quot;smtp://username@whatev.org:465/&quot; +<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails -<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">&quot;utf-8&quot;</span> -<span class="cp"># UTF8, NE PAS CHANGER</span> +set send_charset = &quot;utf-8&quot; +<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER -<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">&quot;.sign&quot;</span> -<span class="cp"># vous pouvez mettre votre signature dans .sign</span> +set signature = &quot;.sign&quot; +<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign -<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible </span> -<span class="cp"># comme ca.</span> +set sig_on_top = yes +<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible +<span style="color: #960050; background-color: #1e0010">#</span> comme ca. -<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span> +set ssl_verify_host = no +<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement -<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">&quot;wxcafe.net&quot;</span> -<span class="cp"># mettez l&#39;adresse de votre serveur ici</span> +set hostname = &quot;wxcafe.net&quot; +<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici -<span class="cp"># Misc settings</span> +<span style="color: #960050; background-color: #1e0010">#</span> Misc settings -<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span> -<span class="cp"># la façon de voir les emails par défaut.</span> +auto_view text/html +<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut. -<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">&quot;%y-%m-%d %T&quot;</span> -<span class="cp"># format de date d&#39;envoi/de reception.</span> +set date_format = &quot;%y-%m-%d %T&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception. -<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">&quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;</span> -<span class="cp"># format de l&#39;index (la présentation de l&#39;interface)</span> -<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span> +set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface) +<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span> -<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span> -<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/aliases&quot;</span> -<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span> -<span class="cp"># format : &quot;alias short_name long_email_adress&quot;</span> -<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span> +set sort_alias = alias +set reverse_alias = yes +set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot; +<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même. +<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot; +source <span style="color: #f8f8f2">$alias_file</span> -<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># ne pas biper. CE SON ME TUE T.T</span> +set beep = no +<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T -<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span> -<span class="cp"># ?</span> +set tilde = yes +set sleep_time = 0 +<span style="color: #960050; background-color: #1e0010">#</span> ? -<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span> -<span class="cp"># parametres de la barre coté gauche</span> +set sidebar_visible = yes +set sidebar_width = 15 +<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche -<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">&quot;Clément Hertling (Wxcafé)&quot;</span> -<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">&quot;wxcafe@wxcafe.net&quot;</span> -<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/cacert&quot;</span> -<span class="cp"># parametres d&#39;envoi. mettez vos propres infos a la place des miennes...</span> +set realname = &quot;Clément Hertling (Wxcafé)&quot; +set from = &quot;wxcafe@wxcafe.net&quot; +set use_from = yes +set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot; +<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes... -<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># vous permet de vois les headers des mails. j&#39;aime, donc je laisse.</span> +set edit_headers = yes +<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse. -<span class="cp"># Macros</span> +<span style="color: #960050; background-color: #1e0010">#</span> Macros -<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span> -<span class="cp"># pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les </span> -<span class="cp"># deux</span> -<span class="cp"># \C represente la touche Control</span> +<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus, +<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les +<span style="color: #960050; background-color: #1e0010">#</span> deux +<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span> -<span class="cp"># Control+p -&gt; remonter d&#39;un dossier dans la sidebar</span> +bind index,pager \Cp sidebar-prev +<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span> -<span class="cp"># Control+n -&gt; descendre d&#39;un dossier dans la sidebar</span> +bind index,pager \Cn sidebar-next +<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span> -<span class="cp"># Control+o -&gt; ouvrir le dossier selectionné dans la sidebar</span> +bind index,pager \Co sidebar-open +<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar -<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">&quot;=Trash&quot;</span> <span class="s">&quot;Trash&quot;</span> -<span class="cp"># d supprime le message en cours</span> +macro index,pager d &quot;=Trash&quot; &quot;Trash&quot; +<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours -<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.</span> +bind pager previous-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message. -<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de </span> -<span class="cp"># message</span> +bind pager next-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de +<span style="color: #960050; background-color: #1e0010">#</span> message -<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># raccourcis vim</span> +bind pager j next-line +bind pager k previous-line +<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim -<span class="cp"># PGP signing commands</span> +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands -<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --import -v %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --export --armor %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_autosign</span><span class="o">=</span><span class="n">yes</span> -<span class="n">set</span> <span class="n">pgp_sign_as</span><span class="o">=</span><span class="mi">0</span><span class="n">x</span><span class="o">********</span> -<span class="cp"># remplacez 0x******** par votre identifiant PGP!!!!!</span> +set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot; +set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot; +set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot; +set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot; +set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot; +set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot; +set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot; +set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot; +set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot; +set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot; +set pgp_autosign=yes +set pgp_sign_as=0x******** +<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!! -<span class="n">set</span> <span class="n">pgp_replyencrypt</span><span class="o">=</span><span class="n">no</span> -<span class="n">set</span> <span class="n">pgp_timeout</span><span class="o">=</span><span class="mi">7200</span> -<span class="n">set</span> <span class="n">pgp_good_sign</span><span class="o">=</span><span class="s">&quot;^gpg: Good signature from&quot;</span> +set pgp_replyencrypt=no +set pgp_timeout=7200 +set pgp_good_sign=&quot;^gpg: Good signature from&quot; -<span class="cp"># si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis</span> -<span class="cp"># PGP signing options</span> +<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options -<span class="cp"># Palette for use with the Linux console. Black background.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background. -<span class="cp"># Schéma de couleur Rouge et Noir. Commentez si vous voulez le </span> -<span class="cp"># défaut noir et blanc.</span> -<span class="cp"># d&#39;autres schémas sont trouvables sur google et autre.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le +<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc. +<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre. -<span class="n">color</span> <span class="n">hdrdefault</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">quoted</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">signature</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">attachment</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">message</span> <span class="n">brightwhite</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">error</span> <span class="n">brightred</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">indicator</span> <span class="n">black</span> <span class="n">red</span> -<span class="n">color</span> <span class="n">status</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tree</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">normal</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">markers</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">search</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tilde</span> <span class="n">brightmagenta</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="o">~</span><span class="n">F</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="s">&quot;~N|~O&quot;</span> +color hdrdefault red black +color quoted brightblack black +color signature brightblack black +color attachment red black +color message brightwhite black +color error brightred black +color indicator black red +color status white black +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index red black ~F +color index red black &quot;~N|~O&quot; </pre></div> -<p>Voila, pour plus d'informations vous pouvez aller voir le manuel de mutt +<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt @ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br /> -J'espère que cette configuration "toute faite" vous aidera a commencer +J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer a utiliser mutt. Il est tout de fois important de se souvenir -qu'utiliser une configuration toute faire n'aide pas a comprendre un +qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un programme ou un système, et que cette façon de faire devrait être -réservée a l'introduction ou a des situations ou il est absolument -nécessaire d'avoir rapidement une configuration fonctionnelle (c'est a -dire, dans le cas d'un client email, euh... jamais?). Je vous invite +réservée a l&rsquo;introduction ou a des situations ou il est absolument +nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a +dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite donc a relire les annotations dont sont parsemés les fichiers de configuration en question, et surtout a lire le manuel, a chercher sur <del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement -a tenter de comprendre les configurations en question et a les améliorer!</p>La séparation des églises et de l'état, une idée qu'elle est bonne?2012-12-13T03:08:00+01:00Wxcafetag:wxcafe.net,2012-12-13:posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/<p>Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter?</p> -<p>Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. </p> -<p>L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. </p> -<p>Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine <strong>doit</strong>fournir toutes ses -informations au gouvernement américain <strong>sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.</strong> </p> -<p>Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire <a href="http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/">cet article</a> de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. </p> -<p>Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <code>&lt;troll&gt;</code>Apple -Maps<code>&lt;/troll&gt;</code>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. </p> -<p>De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. </p> -<p>Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. </p> -<p>Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.<br /> -Voila, a bientôt!</p>La cryptographie avec PGP et principalement GnuPG2012-11-19T00:36:00+01:00Wxcafetag:wxcafe.net,2012-11-19:posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/<p>PGP (pour <a href="http://fr.wikipedia.org/wiki/Pretty_Good_Privacy">pretty good privacy</a>) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir <a href="http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">ici</a>) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de <em>Web of Trust</em>. </p> -<p>Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.<br /> -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.</p> -<p>Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -<a href="http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/">quitter Gmail</a> aussi, par exemple).</p> -<p>Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)</p> -<p>L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (<a href="http://fr.wikipedia.org/wiki/GNU_Privacy_Guard">GNU Privacy Guard</a>) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<code>&lt;troll&gt;</code> de façon surprenante pour un -programme GNU<code>&lt;/troll&gt;</code>) est extrêmement efficace et claire.</p> -<p>Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).</p> -<p>Tout d'abord, générons une clé GPG :</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">gen</span><span class="o">-</span><span class="n">key</span> -</pre></div> - - -<p>GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. </p> -<p>Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande <code>makepasswd</code>, qui génère automatiquement un mot de -passe) </p> -<p>GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) </p> -<p>Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">pubkey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé publique, et</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span><span class="o">-</span><span class="n">secret</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">seckey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. </p> -<p>Cela fait, listons les informations sur votre clé publique :</p> -<div class="highlight"><pre><span class="err">$</span> <span class="n">gpg</span> <span class="o">--</span><span class="n">list</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">fingerprint</span> -<span class="n">pub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">27</span><span class="n">D81AC8</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> - <span class="n">Key</span> <span class="n">fingerprint</span> <span class="o">=</span> <span class="mi">6345</span> <span class="n">A91A</span> <span class="n">FF89</span> <span class="mf">97E0</span> <span class="mi">13</span><span class="n">D0</span> <span class="mi">96</span><span class="n">A9</span> <span class="mf">9E2</span><span class="n">A</span> <span class="mi">1917</span> <span class="mi">27</span><span class="n">D8</span> <span class="mi">1</span><span class="n">AC8</span> -<span class="n">uid</span> <span class="n">Cl</span><span class="err">é</span><span class="n">ment</span> <span class="n">Hertling</span> <span class="p">(</span><span class="n">Wxcafe</span><span class="p">)</span> -<span class="n">uid</span> <span class="p">[</span><span class="n">jpeg</span> <span class="n">image</span> <span class="n">of</span> <span class="n">size</span> <span class="mi">14692</span><span class="p">]</span> -<span class="n">sub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">9</span><span class="n">ED7F77F</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> -</pre></div> - - -<p>La partie <code>pub</code> indique que c'est une clé publique, <code>4096R</code> indique que c'est -une clé RSA sur 4096 bits. La partie <code>27D81AC8</code> est -l'identifiant de la clé publique, <code>Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8</code> est appelé fingerprint de la clé. Les champs -<code>uid</code> sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ <code>sub</code> est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.<br /> -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">uploader</span><span class="o">*</span> -</pre></div> - - -<p>Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!<br /> -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). </p> -<p>Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.<br /> -Concernant les signatures de clés, elles fonctionnent de manière très -simple :<br /> -Vous devez télécharger la clé de votre correspondant, via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">search</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">correspondant</span><span class="o">*</span> -</pre></div> - - -<p>(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.<br /> -Ceci fait, vous pouvez signer la clé via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">sign</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>puis la renvoyer au serveur via</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">key</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>Voila, la clé de votre correspondant est signée!</p> -<p>Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!</p>L'informatique a l'école2012-10-15T20:34:00+02:00Wxcafetag:wxcafe.net,2012-10-15:posts/%D/linformatique-a-lecole/<p>Après avoir lu <a href="http://t.co/5PTfe6zu">cet article</a> paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.</p> -<p>En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu <a href="http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers - Heroes of the Computer Revolution</a> de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.</p> -<p>Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre <a href="http://en.wikipedia.org/wiki/IWoz">iWoz</a>) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. </p> -<p>Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.</p> -<p>C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...</p> -<p>Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.</p> -<p>Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.</p>Archlinux made simple2012-10-05T14:48:00+02:00Wxcafetag:wxcafe.net,2012-10-05:posts/%D/archlinux-made-simple/<p>Archlinux est réputée être une distribution Linux très complexe a -installer et a maintenir.</p> -<p>Je vais tenter ici de vous convaincre que ce n'est pas le cas, et -qu'elle peut se monter très intéressante et très instructive a installer -tout autant qu'a utiliser.</p> -<p>Il convient tout d'abord de rappeler a quels principes obéit Arch:</p> -<ol> -<li> -<p>Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des - programmes simples et utilisables par tous. Avec comme base de - simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu - de bonne volonté, la configuration n'est pas si compliquée!</p> -</li> -<li> -<p>La philosophie UNIX : chaque programme est prévu pour ne remplir - qu'une seule tâche. Bien entendu, cela ne concerne que les programmes - conçus pour s’insérer dans la philosophie UNIX, et les installations de - dépendances avec le gestionnaire de paquet d'Arch fonctionnent - superbement bien.</p> -</li> -</ol> -<p>De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :</p> -<ul> -<li> -<p>recherche d'un paquet :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Ss</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>installation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">S</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>désinstallation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">R</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>mise a jour de tous les paquets installés :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">paquet</span> -</pre></div> - - -</li> -</ul> -<p>Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.</p> -<p>Arch n'offre pas d'interface graphique par défaut : après avoir installé -le système, vous n'aurez qu'une invite de commande. Heureusement, je -vais ici vous guider a travers l'installation d'une interface graphique -(mate, le fork de gnome 2)</p> -<p>L'installation d'Arch se fait par le réseau, veillez a avoir une -connection WiFi ou filaire a proximité avant de suivre ce guide.</p> -<p>Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous -systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce -dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.</p> -<p>Bon, passons a l'explication de l'installation proprement dite :</p> -<p>Tout d'abord, téléchargeons l'iso d'arch la plus récente :</p> -<div class="highlight"><pre><span class="n">wget</span> <span class="n">http</span><span class="o">:</span><span class="c1">//mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso</span> -</pre></div> - - -<p>Ensuite, gravons cette image sur un disque USB :</p> -<div class="highlight"><pre><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">archlinux</span><span class="o">-</span><span class="mf">2012.09.07</span><span class="o">-</span><span class="n">dual</span><span class="p">.</span><span class="n">iso</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> -</pre></div> - - -<p>Après reboot de la machine sur l'iso en question et choix de -l'architecture, nous sommes accueillis par un shell root.</p> -<p>La première chose a faire est de paramétrer le clavier :</p> -<div class="highlight"><pre><span class="n">loadkeys</span> <span class="n">fr</span> -</pre></div> - - -<p>Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :</p> -<div class="highlight"><pre><span class="n">cfdisk</span> <span class="err">#</span> <span class="n">cfdisk</span> <span class="n">est</span> <span class="n">suffisamment</span> <span class="n">clair</span> <span class="n">pour</span> <span class="n">ne</span> <span class="n">pas</span> <span class="n">n</span><span class="err">é</span><span class="n">cessiter</span> <span class="n">d</span><span class="err">&#39;</span><span class="n">explications</span> -</pre></div> - - -<p>formatage des partitions :</p> -<div class="highlight"><pre><span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">root</span> - -<span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="o">&amp;&amp;</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">btrfs</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">home</span> - -<span class="n">mkswap</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="o">&amp;&amp;</span> <span class="n">swapon</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">de</span> <span class="n">swap</span> -</pre></div> - - -<p>Montons les partitions nouvellement créées, puis installons le système :</p> -<div class="highlight"><pre><span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="o">/</span><span class="n">mnt</span> - -<span class="n">mkdir</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> <span class="o">&amp;&amp;</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> - -<span class="n">dhclient</span> <span class="n">eth0</span> <span class="err">#</span> <span class="n">si</span> <span class="n">vous</span> <span class="n">utilisez</span> <span class="n">une</span> <span class="n">connection</span> <span class="n">filaire</span><span class="p">,</span> <span class="n">sinon</span> <span class="n">voire</span> <span class="n">http</span><span class="o">:</span><span class="c1">//wiki.archlinux.fr/Wifi#Configuration</span> - -<span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">base</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> - -<span class="n">genfstab</span> <span class="o">-</span><span class="n">p</span> <span class="o">/</span><span class="n">mnt</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">fstab</span> -</pre></div> - - -<p>Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage:</p> -<div class="highlight"><pre><span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">syslinux</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="n">wireless_tools</span> <span class="n">dhclient</span> -</pre></div> - - -<p>Maintenant, passons sur notre install toute fraîche d'Arch :</p> -<div class="highlight"><pre><span class="n">arch</span><span class="o">-</span><span class="n">chroot</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">bash</span> -</pre></div> - - -<p>configurons les bases :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="n">HOSTNAME</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">hostname</span> - -<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">zoneinfo</span><span class="o">/</span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">localtime</span> - -<span class="n">date</span> <span class="n">MMJJhhmmAAAA</span> - -<span class="n">hwclock</span> <span class="o">--</span><span class="n">systohc</span> - -<span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">gen</span> <span class="err">#</span> <span class="n">D</span><span class="err">é</span><span class="n">commentez</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">correspondant</span> <span class="n">au</span> <span class="n">fran</span><span class="err">ç</span><span class="n">ais</span> <span class="o">:</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="n">et</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">ISO</span><span class="o">-</span><span class="mi">8859</span><span class="o">-</span><span class="mi">1</span> - -<span class="n">echo</span> <span class="err">&#39;</span><span class="n">LANG</span><span class="o">=</span><span class="s">&quot;fr_FR.UTF-8&quot;</span><span class="err">&#39;</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">conf</span> - -<span class="n">locale</span><span class="o">-</span><span class="n">gen</span> - -<span class="n">mkinitcpio</span> <span class="o">-</span><span class="n">p</span> <span class="n">linux</span> -</pre></div> - - -<p>Enfin, vérifions que syslinux est correctement configuré :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">syslinux</span><span class="o">/</span><span class="n">syslinux</span><span class="p">.</span><span class="n">cfg</span> <span class="err">#</span> <span class="n">il</span> <span class="n">devrait</span> <span class="n">y</span> <span class="n">avoir</span> <span class="s">&quot;append root=/dev/sda1&quot;</span> -</pre></div> - - -<p>Si tout est correct, installons syslinux, et paramétrons un mot de passe -root :</p> -<div class="highlight"><pre><span class="n">syslinux</span><span class="o">-</span><span class="n">install_update</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda</span> <span class="o">-</span><span class="n">mia</span> - -<span class="n">passwd</span> <span class="n">root</span> -</pre></div> - - -<p>Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!</p> -<div class="highlight"><pre> <span class="n">exit</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span> -<span class="n">reboot</span> -</pre></div> - - -<p>Fini!</p> -<p>Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen :</p> -<ul> -<li> -<p>Installation de MATE, le gestionnaire de bureau (voir -<a href="http://mate-desktop.org/">http://mate-desktop.org/</a>)</p> -</li> -<li> -<p>Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage</p> -</li> -<li> -<p>Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci</p> -</li> -<li> -<p>Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).</p> -</li> -</ul> -<p>Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici.</p> -<p>Bon, reprenons.</p> -<p>Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet.</p> -<p>Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">pacman</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ici, ajoutez les lignes suivantes :</p> -<div class="highlight"><pre><span class="k">[mate]</span> -<span class="na">Server</span> <span class="o">=</span> <span class="s">http://repo.mate-desktop.org/archlinux/$arch</span> -</pre></div> - - -<p>Installons maintenant les paquets :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">mate</span> <span class="n">mate</span><span class="o">-</span><span class="n">extras</span> <span class="n">dbus</span> <span class="n">dbus</span><span class="o">-</span><span class="n">core</span> <span class="n">alsa</span> <span class="n">networkmanager</span> <span class="n">sudo</span> -</pre></div> - - -<p>Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois :</p> -<div class="highlight"><pre><span class="n">useradd</span> <span class="o">-</span><span class="n">g</span> <span class="n">users</span> <span class="o">-</span><span class="n">G</span> <span class="n">wheel</span><span class="p">,</span><span class="n">audio</span><span class="p">,</span><span class="n">optical</span><span class="p">,</span><span class="n">lp</span><span class="p">,</span><span class="n">scanner</span><span class="p">,</span><span class="n">log</span><span class="p">,</span><span class="n">power</span><span class="p">,</span><span class="n">floppy</span><span class="p">,</span><span class="n">storage</span><span class="p">,</span><span class="n">games</span><span class="p">,</span><span class="n">video</span> <span class="o">-</span><span class="n">m</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">bash</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">passwd</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">su</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -</pre></div> - - -<p>Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec ck-launch-session mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> -</pre></div> - - -<p>Profitons en pour ajouter les démons système au lancement :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ajoutez donc <code>dbus, alsa. hwclock</code> et <code>networkmanager</code> dans la section -DAEMONS (entre les parenthèses, après crond normalement)</p> -<div class="highlight"><pre><span class="n">DAEMONS</span><span class="o">=</span><span class="p">(</span><span class="n">syslog</span><span class="o">-</span><span class="n">ng</span> <span class="n">network</span> <span class="n">crond</span> <span class="n">dbus</span> <span class="n">alsa</span> <span class="n">hwclock</span> <span class="n">networkmanager</span><span class="p">)</span> -</pre></div> - - -<p>Pour éviter un reboot, il est ici possible de faire un</p> -<div class="highlight"><pre><span class="n">su</span> -</pre></div> - - -<p>Puis un</p> -<div class="highlight"><pre> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">dbus</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">alsa</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">networkmanager</span> <span class="n">start</span> -</pre></div> - - -<p>Sinon, il est possible de juste redémarrer.<br /> -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et :</p> -<div class="highlight"><pre> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">sudoers</span> -</pre></div> - - -<p>Décommentez la ligne qui commence par # %wheel ALL=(ALL)<br /> -Sauvegardez le fichier, puis, après un <code>su *votrenom*</code>, tentez de faire -un sudo ls /<br /> -Normalement, vous devriez avoir un listing du dossier /<br /> -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?<br /> -C'est simple comme bonjour :</p> -<div class="highlight"><pre> <span class="n">startx</span> -</pre></div> - - -<p>Et PAF! Voila un MATE desktop flambant neuf a configurer!<br /> -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (<code>sudo pacman -Syu slim</code>).<br /> -Configurons le:</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec dbus-launch mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> <span class="o">&amp;&amp;</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">slim</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Éditez la ligne -"<code>sessions xfce4,icewm-session,wmaker,blackbox</code>" de facon a -ce qu'elle ressemble a "<code>sessions mate-session</code>"<br /> -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.<br /> -Normalement, tout devrait fonctionner!<br /> -Ah oui, et pour installer thunderbird, firefox, chromium, etc...</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">chromium</span> <span class="n">thunderbird</span> <span class="n">xchat</span> <span class="n">firefox</span> <span class="n">rhythmbox</span> <span class="n">pidgin</span> <span class="n">transmission</span><span class="o">-</span><span class="n">gtk</span> <span class="n">vlc</span> -</pre></div> - - -<p>Voila! Et comme dirait <a href="https://twitter.com/spartition">@Spartition</a>, c'est sale, mais qu'est-ce que c'est -bon!<br /> -A plus~</p>Les systèmes de fichiers2012-09-25T10:28:00+02:00Wxcafetag:wxcafe.net,2012-09-25:posts/%D/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>Le Quenya - Épisode ø2012-09-18T19:07:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p>Update a propos du blog2012-09-18T16:57:00+02:00Wxcafetag:wxcafe.net,2012-09-18:posts/%D/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>Introduction a bash en tant que language de programmation.2012-09-08T18:15:00+02:00Wxcafetag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/<p>L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).</p> -<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. </p> -<p>Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.)</p> -<p>Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p> -<p>De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code.<br /> -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le *) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée.</p> -<p>Quelques notions manquent ici:<br /> -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici.<br /> -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number.<br /> -être utilisées dans un programme bash.<br /> -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p> -<p>Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel.<br /> -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête.</p> -<p>J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p>Les différentes couches d'un système d'exploitation2012-09-06T23:29:00+02:00Wxcafetag:wxcafe.net,2012-09-06:posts/%D/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>La programmation expliquée simplement2012-08-27T00:22:00+02:00Wxcafetag:wxcafe.net,2012-08-27:posts/%D/la-programmation-expliquee-simplement/<p>Salut!<br /> -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. </p> -<p>Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.<br /> -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation<br /> -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. </p> -<p>Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.<br /> -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. </p> -<p>La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.<br /> -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. </p> -<p>Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. </p> -<p>Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère2012-08-22T20:33:00+02:00Wxcafetag:wxcafe.net,2012-08-22:posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique.</p> -<p>GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.</p> -<p>De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une?</p> -<p>Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes.</p> -<p>Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable.</p> -<p>N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :)</p> -<p>A bientôt!</p>Débuts, présentation, etc...2012-08-18T20:27:00+02:00Wxcafetag:wxcafe.net,2012-08-18:posts/%D/debuts-presentation-etc/<p>Bonjour!</p> -<p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/##nolife et #debian-fr)</p> -<p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. </p> -<p>Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général.</p> -<p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p> \ No newline at end of file +a tenter de comprendre les configurations en question et a les améliorer!</p> \ No newline at end of file diff --git a/output/feeds/wxcafe.rss.xml b/output/feeds/wxcafe.rss.xml index 334306b..42bbb33 100644 --- a/output/feeds/wxcafe.rss.xml +++ b/output/feeds/wxcafe.rss.xml @@ -1,260 +1,531 @@ -Wxcafé//wxcafe.net/Fri, 07 Nov 2014 13:04:00 +0100OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/%D/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de +Wxcafé//wxcafe.net/Sat, 22 Aug 2015 02:43:00 +0200les NUCs et le HDMI-CEC//wxcafe.net/posts/nuc-hdmi-cec/<p>J&rsquo;ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé, +passons rapidement sur ce qui y est lié : ne souhaitant pas &ldquo;profiter&rdquo; du +paysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis +tout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais +brancher sur ma télévision un système me permettant de regarder ces films et +séries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix, +etc&hellip;) simplement.</p> +<p>Ayant un <a href="https://www.raspberrypi.org/">Raspberry Pi 1</a> qui trainait, j&rsquo;ai +décidé d&rsquo;installer <a href="http://openelec.tv/">OpenELEC</a> dessus et de voir ce que ça +donnait. Le résultat n&rsquo;étant pas satisfaisant (a cause des difficultés du RPi +a faire fonctionner tout ça), j&rsquo;ai décidé d&rsquo;upgrader le système.</p> +<p>J&rsquo;ai donc acquis un <a href="http://www.amazon.fr/gp/product/B00GPJ83EU">NUC D34010WYK</a> +(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un +<a href="http://www.amazon.fr/dp/B00WU5F8MS/">adaptateur HDMI-CEC</a> pour celui-ci, et un +<a href="http://www.amazon.fr/gp/product/B00INTR4ZE">SSD mSATA</a>, en me disant que je +pourrais sans trop de problème faire tourner <a href="http://kodi.tv/">Kodi</a> sur un +debian, avec en plus Steam pour faire du streaming depuis mon desktop. L&rsquo;autre +avantage de tourner sur du Intel, c&rsquo;est de pouvoir mater Netflix (puisque le +plugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que +sur x86).</p> +<p>J&rsquo;ai donc reçu après un certain temps le matériel sus cité, que j&rsquo;ai avidement +monté, avant de me rendre compte que le manuel de l&rsquo;adaptateur Pulse-Eight était +[PDF]<a href="https://www.pulse-eight.com/Download/Get/30">assez médiocre</a>. J&rsquo;ai donc +cherché plusieurs heures, avant de trouver [DE]<a href="http://www.technikaffe.de/anleitung-293-pulse_eight_intel_nuc_hdmi_cec_adapter_im_test">ce +post</a> +expliquant comment brancher l&rsquo;adaptateur. Je vais donc résumer ici le processus, +ce qui devrait rendre la tache a la fois plus simple pour les autres personnes +cherchant l&rsquo;information, et pour moi si je dois remonter ce système.</p> +<p>Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit +&ldquo;Front Panel&rdquo;, et un appelé &ldquo;Custom Solution Header&rdquo;. Les trois sont utilisés +ici. La première chose a faire est de brancher les fiches grises et rouges sur +le Custom Solution Header: le branchement doit être fait ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">Custom Solution + ┌─┬─┬─┬─┬─┐ + │g│ │·│r│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│·│ + └─┴─┴─┴─┴─┘ + + g ➔ fiche grise + r ➔ fiche rouge + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Une fois cela fait, il faut brancher le Front Panel. Heureusement, c&rsquo;est plus +facile, puisqu&rsquo;il n&rsquo;y a qu&rsquo;une seule fiche a brancher ici : la orange.</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Front Panel + ┌─┬─┬─┬─┬─┐ + │·│·│·│·│·│ + ├─┼─┼─┼─┼─┤ + │ │·│o│·│·│ + └─┴─┴─┴─┴─┘ + + o ➔ fiche orange + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Enfin, il faut encore brancher les fiches restantes sur le header dual-USB. +Étant donné que ce header contient deux fois les pins nécessaires a un +branchement USB, il est possible de brancher les cables de plusieurs façons. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> Dual-USB + ┌─┬─┬─┬─┬─┐ + │b│B│v│n│·│ + ├─┼─┼─┼─┼─┤ + │·│·│·│·│ │ + └─┴─┴─┴─┴─┘ + + b ➔ fiche bleue + B ➔ fiche Blanche + v ➔ fiche verte + n ➔ fiche noire + · ➔ pin inutilisé + ➔ espace vide (sans pin) +</pre></div> + + +<p>Tous les branchements étant effectués, il faut maintenant remonter la bête +(attention a ne pas déranger les branchements avec les antennes Wifi, par +exemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer +un paramètre dans le BIOS intel : dans Power➔Secondary Power Settings, il faut +que &ldquo;Deep S4/S5&rdquo; soit <em>dés</em>activé. Ceci permettant a la connection HDMI-CEC de +démarrer et le NUC.</p> +<p>Ne reste plus ensuite qu&rsquo;a installer un système digne de ce nom dessus!</p>WxcafeSat, 22 Aug 2015 02:43:00 +0200tag:wxcafe.net,2015-08-22:posts/nuc-hdmi-cec/SSL - STARTTLS//wxcafe.net/posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement +récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose +problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir +soudainement un flot de données chiffrées, mais développer de nouveaux +protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce +problème, deux solutions sont apparues.</p> +<p>Le première consiste à faire écouter les services sur un +autre port, dans un tunnel SSL. De cette façon, le service existant écoute +normalement, mais il ne répond pas directement aux requêtes. A la place, un +tunnel SSL est mis en place, et les requêtes et les réponses passent dans le +tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de +proposer un service chiffré en modifiant de façon minimale le programme, au prix +de devoir aussi changer tous les clients, et de devoir les orienter sur un autre +port.</p> +<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La +communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de +la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines +machines font un <em>handshake</em> SSL et la communication continue a travers le +tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls +les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise +a jour&rdquo; en douceur.</p> +<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un +service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien +un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> +La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout +d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la +configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux +qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se +connecter, même si cela signifie que leurs informations seront transmises en +clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs +clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il +voit qu&rsquo;il est disponible.<br /> +Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité +de tout le monde.</p>WxcafeSat, 16 May 2015 02:00:00 +0200tag:wxcafe.net,2015-05-16:posts/ssl-starttls/Manettes : Hori vs. PDP//wxcafe.net/posts/hori-vs-pdp/<p>Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus +compte de quelques petits trucs : tout d&rsquo;abord, Smash est bien plus drôle +a plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de &ldquo;choses&rdquo; +: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro +Controllers pour Wii et Wii U, et d&rsquo;autres. Vous aurez aussi remarqué que le +Gamepad n&rsquo;est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes. +Les pro controllers fonctionnent, mais ne valent pas les bonnes vieilles +manettes Gamecube.</p> +<p>Cela étant, si comme moi vous avez, euh, &ldquo;ouvert&rdquo; le mode vWii de votre Wii U, +vous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et +donc pas assez de ports libres pour connecter <a href="http://www.amazon.com/Super-Smash-GameCube-Adapter-Wii-U/dp/B00L3LQ1FI">l&rsquo;adaptateur GC pour Wii +U</a> +a votre console. </p> +<p>Heureusement pour vous, Nintendo a pensé a une solution (et comme d&rsquo;habitude +avec Nintendo, c&rsquo;est une solution a moitié satisfaisante&hellip;) : les classic +controller, mais en forme de manettes Gamecube.</p> +<p>Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont +empressées de faire des manettes et de ramasser des brouettes d&rsquo;argent, en +faisant des manettes Gamecube qui se connectent a des Wiimotes.</p> +<p>Nous allons ici voir deux modèles, un de chacune des boites en question +: <a href="http://www.pdp.com/">PDP</a> et <a href="http://stores.horiusa.com/">Hori</a>. </p> +<p><strong><em>Toutes les photos présentes dans cet article sont disponibles en plus grande +taille en cliquant dessus</em></strong></p> +<p>Commençons par le modèle de chez Hori :</p> +<p><a href="//pub.wxcafe.net/img/Hori_face_fd.jpg"><img alt="Hori_face" src="//pub.wxcafe.net/img/Hori_face_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette +de Gamecube : a part le bouton Turbo et le bouton Home, le reste est +parfaitement identique a une véritable manette Gamecube. A noter que les boutons +centraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en +plastique dur.</p> +<p><a href="//pub.wxcafe.net/img/Hori_dos_fd.jpg"><img alt="Hori_dos" src="//pub.wxcafe.net/img/Hori_dos_ld.jpg" /></a></p> +<p>Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne +sont en réalité que des boutons : c&rsquo;est logique puisque c&rsquo;est comme ça que les +classic controller sont faits, mais c&rsquo;est décevant tout de même</p> +<p><a href="//pub.wxcafe.net/img/Hori_CM_fd.jpg"><img alt="Hori_CM" src="//pub.wxcafe.net/img/Hori_CM_ld.jpg" /></a></p> +<p>On peut voir ici que la qualité de l&rsquo;assemblage n&rsquo;est pas extraordinaire, et on +remarque une soudure mal faite a l&rsquo;emplacement du stick gauche.</p> +<p><a href="//pub.wxcafe.net/img/Hori_Cstick_fd.jpg"><img alt="Hori_Cstick" src="//pub.wxcafe.net/img/Hori_Cstick_ld.jpg" /></a></p> +<p>Le stick c n&rsquo;est pas fixé au reste de la manette. +J&rsquo;ai essayé de démonter plus avant les différentes parties de la manette, mais +les câbles n&rsquo;avaient pas l&rsquo;air de très bonne qualité, et j&rsquo;ai préféré abandonner +l&rsquo;idée plutôt que de casser la manette.</p> +<p><a href="//pub.wxcafe.net/img/Hori_coque_fd.jpg"><img alt="Hori_coque" src="//pub.wxcafe.net/img/Hori_coque_ld.jpg" /></a></p> +<p>On peut voir que la coque est complètement vide, et que les gâchettes sont bien +en réalité de simple boutons. Il y aurait presque la place de mettre la carte +mère d&rsquo;une Wiimote entière la dedans&hellip;</p> +<hr> + +<p>Passons maintenant a la manette PDP.</p> +<p><a href="//pub.wxcafe.net/img/PDP_face_fd.jpg"><img alt="PDP_face" src="//pub.wxcafe.net/img/PDP_face_ld.jpg" /></a></p> +<p>Au premier coup d&rsquo;œil, on remarque que la manette PDP ressemble beaucoup moins +a une manette gamecube. Cependant, la prise en main est exactement la même. On +regrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube, +et les boutons transparents (mais c&rsquo;est un problème de goût).</p> +<p><a href="//pub.wxcafe.net/img/PDP_dos_fd.jpg"><img alt="PDP_dos" src="//pub.wxcafe.net/img/PDP_dos_ld.jpg" /></a></p> +<p>Les gâchettes sont des vraies gâchettes! C&rsquo;est impossible normalement, mais PDP +a été très intelligent sur le coup, comme on va le voir juste après.</p> +<p><a href="//pub.wxcafe.net/img/PDP_CM_fd.jpg"><img alt="PDP_CM" src="//pub.wxcafe.net/img/PDP_CM_ld.jpg" /></a></p> +<p>Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien +moins de colle, et pas de soudage raté. Toutes les cartes filles sont bien +attachées a la carte mère, et la structure en plastique est renforcée. Mais +surtout, on peut voir deux cartes filles qui sortent de façon étrange de la +carte mère, de façon <strike>péremptoire</strike> perpendiculaire&hellip;</p> +<p><a href="//pub.wxcafe.net/img/PDP_CF_fd.jpg"><img alt="PDP_CF" src="//pub.wxcafe.net/img/PDP_CF_ld.jpg" /></a></p> +<p>Vous l&rsquo;avez deviné, ces deux &ldquo;cartes filles&rdquo; servent en réalité de connecteurs +aux boutons situés sur les gâchettes, qui sont de &ldquo;vraies&rdquo; gâchettes en cela +qu&rsquo;elles sont faites de la même manière que les vraies (avec un ressort, etc) +mais qui sont en réalité des boutons (évidemment, puisque cette manette est en +fait un classic controller), par opposition aux véritables gâchettes +analogiques.</p> +<p>Quelques photos des gâchettes en question :</p> +<p><a href="//pub.wxcafe.net/img/PDP_G1_fd.jpg"><img alt="PDP_G_1" src="//pub.wxcafe.net/img/PDP_G1_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G2_fd.jpg"><img alt="PDP_G_2" src="//pub.wxcafe.net/img/PDP_G2_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G3_fd.jpg"><img alt="PDP_G_3" src="//pub.wxcafe.net/img/PDP_G3_ld.jpg" /></a></p> +<p><a href="//pub.wxcafe.net/img/PDP_G4_fd.jpg"><img alt="PDP_G_4" src="//pub.wxcafe.net/img/PDP_G4_ld.jpg" /></a></p> +<hr /> +<p>Vous l&rsquo;aurez compris, je préfère la version PDP de ces &ldquo;Fight Pad&rdquo;, la finition +semble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont +pas en caoutchouc cheap, et bien que les sticks soient moins confortables, le +reste est parfait. Si vous préférez avoir une manette dont la prise en mains est<strong>totalement</strong> identique a celle des manettes Gamecube, cependant, la version +Hori vous conviendra probablement mieux, a part les gâchettes, malheureusement.</p>WxcafeSun, 19 Apr 2015 21:59:00 +0200tag:wxcafe.net,2015-04-19:posts/hori-vs-pdp/Docker et les ebooks sur Twitter//wxcafe.net/posts/docker-et-les-ebooks-sur-twitter/<p>Vous avez peut être déjà entendu parler de <a href="https://www.docker.com/">Docker</a>. Si +ce n&rsquo;est pas le cas, voila les bases : Docker est un système de containers. Les +containers sont une forme particulière de virtualisation, ou le kernel n&rsquo;est pas +virtualisé, mais ou les processus du système hôte sont séparés de ceux des +systèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les <a href="https://www.freebsd.org/doc/en/books/handbook/jails.html">Jails</a>, +mais n&rsquo;est devenu possible sous linux que récemment grâce aux <a href="https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt">cgroups</a>, +qui permettent justement de séparer des groupes de processus. Le principe de +Docker est donc d&rsquo;avoir une machine hôte sur laquelle s&rsquo;exécutent plusieurs +conteneurs Dockers, chacun séparé des autres et de l&rsquo;hôte, mais utilisant tous +le même kernel. Cela pose quelques questions en terme de sécurités, puisque la +séparation est bien plus fine qu&rsquo;avec de la virtualisation classique. En effet, +ici, en trouvant un exploit kernel, un attaquant aurait potentiellement la +capacité de remonter jusqu&rsquo;à l&rsquo;hôte, puisqu&rsquo;il n&rsquo;est pas vraiment séparé des +invités. </p> +<p>Quoi qu&rsquo;il en soit, Docker permet donc de virtualiser a moindre coût des +systèmes GNU/Linux. &ldquo;Mais pourquoi utiliser Docker, dans ce cas&rdquo;, vous +demandez-vous peut être, &ldquo;puisque Xen peut faire la même chose, et plus +(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?&rdquo;. Et bien +c&rsquo;est très simple : Docker apporte la simplicité de déploiement d&rsquo;applications. +Les conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui +permet de répliquer un conteneur en quelques minutes sur un autre hôte, en une +commande. Le <a href="https://hub.docker.com">Docker Hub</a> permet aussi de récupérer +rapidement et facilement un grand nombre d&rsquo;images déjà configurées. </p> +<p>Maintenant que nous avons expliqué rapidement ce qu&rsquo;était Docker, voyons le +rapport avec les ebooks et Twitter.</p> +<p>Les comptes dits &ldquo;ebooks&rdquo; (le nom vient a l&rsquo;origine de <a href="https://twitter.com/horse_ebooks">horse_ebooks</a>, +voir <a href="https://en.wikipedia.org/wiki/Horse_ebooks">ici</a> pourquoi) sont des bots +twitter utilisant des <a href="https://en.wikipedia.org/wiki/Markov_chain">Chaines de Markov</a>, +avec les tweets d&rsquo;un utilisateur &ldquo;source&rdquo; comme corpus, pour produire des tweets +ressemblant a ceux de l&rsquo;utilisateur source. Nous allons voir maintenant comment +en installer un.</p> +<p>C&rsquo;est, comme disent certaines personnes, &ldquo;fun&rdquo;.</p> +<p>Il existe de nombreuses librairies écrites pour créer ce genre de bots, +cependant dans ce cas nous nous concentrerons sur +<a href="https://github.com/mispy/twitter_ebooks">celle-ci</a>, qui est une lib ruby créée +par <a href="https://twitter.com/m1sp">@m1sp</a>, qui gère pour nous a la fois l&rsquo;API +twitter et la génération des messages.</p> +<p>Cependant, cela n&rsquo;explique toujours pas le lien avec Docker. Ce lien est très +simple : nous utilisons un container pour faire tourner les bots. Depuis la +version 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une +seule instance. Cependant, il est toujours plus sûr d&rsquo;isoler les bots, et les +containers dockers permettent de les déployer sur n&rsquo;importe quelle machine +(celleux qui ont déjà tenté de mettre en place une application basée sur ruby +sauront le problème que cela pose habituellement). Pour ce faire, j&rsquo;ai créé <a href="https://github.com/wxcafe/ebooks_example">un +repo github</a> qui contient toutes les +pièces nécessaires pour mettre cela en place : le bot en lui même, les deux +Dockerfiles, etc.</p> +<p>Le fonctionnement du bot est +simple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de +l&rsquo;utilisateur source avec <code>ebooks archive &lt;username&gt; &lt;filename&gt;</code> (c&rsquo;est du json) +, puis vous convertissez le json en fichier utilisable par le bot : <code>ebooks +consume &lt;filename&gt;</code>. Cela fait, démarrer le bot revient a lancer le container : +<code>docker run -d &lt;container name&gt;</code> Pour plus d&rsquo;informations, allez voir <a href="https://docs.docker.com/articles/basics/">la +documentation Docker</a></p> +<p>Bien entendu, dans l&rsquo;idéal il faudrait mettre a jour les corpus de chaque +utilisateur régulièrement. Cela est très simple a mettre en place avec un simple +script cron : </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">00 00 * * * /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 05 * * * cd /usr/local/ebooks/main/ &amp;&amp; /usr/local/bin/ebooks consume corpus/username.json &gt;&gt; /var/log/ebooks/update.log 2&gt;&amp;1 +00 10 * * * docker rm -f bots &gt;/dev/null 2&gt;&amp;1 +00 15 * * * docker rmi bots &gt; /dev/null 2&gt;&amp;1 +00 20 * * * cd /usr/local/ebooks/main/ &amp;&amp; docker build --rm -t bots . &gt;&gt; /var/log/ebooks/build.log 2&gt;&amp;1 +00 25 * * * docker run -d --name bots bots &gt;&gt; /var/log/ebooks/run.log 2&gt;&amp;1 +</pre></div> + + +<p>Les 5 minutes entre chaque commande sont laissées pour empécher que deux +commandes ne s&rsquo;executent en même temps.</p> +<p>Et voila, vous avez un container Docker qui fait tourner une application en ruby +toute sale, et votre système hôte reste propre. Bien sûr, ce n&rsquo;est qu&rsquo;un exemple +des possibilités de Docker : par exemple, on peut aussi faire tourner <a href="https://blog.jessfraz.com/posts/docker-containers-on-the-desktop.html">des +applications &ldquo;usuelles&rdquo; +dedans</a>, +puisque l&rsquo;overhead de Docker est minimal, et beaucoup d&rsquo;autres applications +existent.</p>WxcafeSat, 28 Feb 2015 14:11:00 +0100tag:wxcafe.net,2015-02-28:posts/docker-et-les-ebooks-sur-twitter/OpenSMTPd comme serveur mail sous debian//wxcafe.net/posts/opensmtpd-debian/<p>J&rsquo;avais dit il y a un certain temps que j&rsquo;allais écrire un tutoriel expliquant +comment gérer ses mails soi-même. Il se trouve que j&rsquo;ai récemment décidé de changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la +aussi mes emails. J&rsquo;ai donc totalement changé d&rsquo;infrastructure quand a la gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais +<p>Ainsi, j&rsquo;ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un +projet originaire d&rsquo;<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA +qu&rsquo;a le projet OpenBSD, globalement).</p> +<p>Pour rappel, le système d&rsquo;emails fonctionne d&rsquo;une façon très simple : votre MUA (Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis +<p>Si vous avez bien suivi, vous pouvez voir que je n&rsquo;ai pas parlé de récupération +ni de lecture des mails. C&rsquo;est pour une raison simple, qui est que ces taches +sont remplies par d&rsquo;autres services encore (IMAP/POP pour la récupération depuis le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et +<p>Or ce qui nous intéresse ici, ce n&rsquo;est pas simplement d&rsquo;envoyer et de recevoir +des emails mais bien aussi de pouvoir les récupérer et les lire, et c&rsquo;est pour +ça que ce tutoriel ne parlera pas que d&rsquo;OpenSMTPd mais aussi de <a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et <a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> pour filtrer les mails entrants et sortants. Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭────────────────╮ ╭──────────╮ + │╭──────────────&gt;│────&gt; to filter ───&gt;│─╮ │ + mail in ││ │ │ │ amavis │ +───────────&gt;│╯ OpenSMTPd ╭──│&lt;─── from filter&lt;───│&lt;╯ │ + │ │ │ ╰──────────╯ + mail out │ │ │ ╭──────────╮ +&lt;───────────│&lt;────────────┴─&gt;│─────&gt; to MDA ─────&gt;│─────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰────────────────╯ ╰──────────╯ </pre></div> <p>Normalement, ceci devrait être a peu près clair. Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de +aussi d&rsquo;autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails +venants de l&rsquo;exterieur, et qui signe avec DKIM pour les mails venants de nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, qui a ce moment-ci trie en fonction de la destination : les mails gérés par le domaine vont via dovecot dans les boites mail des destinataires locaux, les mails exterieurs vont directement vers le MTA du serveur distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon +<p>Voyons comment mettre cela en place. Tout d&rsquo;abord, il faut décider de la façon dont les différents services vont communiquer.</p> <p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de +10024 et répondre sur le port 10025 quand il s&rsquo;agit de filtrer et +écouter sur le port 10026 et répondre sur le port 10027 quand il s&rsquo;agit de signer, nous allons profiter de cette configuration et donc lui parler en SMTP sur ces ports.</p> <p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, <code>/var/run/dovecot/lmtp</code>).</p> <p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭───────────╮ + │╭─────────────&gt;│──&gt; SMTP (10026) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10027) &lt;──│&lt;╯ (sign) │ + │ │ │ ╰───────────╯ + SMTP out │ │ │ +25 &lt;────────│&lt;───────────╯ │ + ╰───────────────╯ </pre></div> <p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> ╭───────────────╮ ╭────────────╮ + │╭─────────────&gt;│──&gt; SMTP (10024) ──&gt;│─╮ │ + SMTP in ││ │ │ │ amavis │ +────────&gt; 25│╯ OpenSMTPd ╭──│&lt;── SMTP (10025) &lt;──│&lt;╯(filter) │ + │ │ │ ╰────────────╯ + │ │ │ ╭────────────╮ + │ ╰─&gt;│──&gt; LMTP (socket) ─&gt;│───────────&gt;│──&gt; to user&#39;s + │ │ │ dovecot │ mailbox + ╰───────────────╯ ╰────────────╯ </pre></div> <p>Pour les mails entrants.</p> <p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. +d&rsquo;autres plateformes, la configuration devrait être sensiblement la même</p> +<p>(Vous aurez besoin de certificats SSL pour ce guide, même auto-signés. Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> +<p>Tout d&rsquo;abord, commençons par installer les programmes nécessaires :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new </pre></div> <p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> <p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># This is the smtpd server system-wide configuration file.</span> +<span style="color: #75715e"># See smtpd.conf(5) for more information.</span> -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> +<span style="color: #75715e">## Certs</span> +pki exem.pl certificate <span style="color: #e6db74">&quot;/etc/certs/exem.pl.crt&quot;</span> +pki exem.pl key <span style="color: #e6db74">&quot;/etc/certs/exem.pl.key&quot;</span> -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> +<span style="color: #75715e">## Ports to listen on, and how to listen on them</span> +listen on eth0 port <span style="color: #ae81ff">25</span> tls pki exem.pl hostname exem.pl auth-optional +listen on eth0 port <span style="color: #ae81ff">465</span> tls-require pki exem.pl hostname exem.pl auth mask-source +listen on eth0 port <span style="color: #ae81ff">587</span> tls-require pki exem.pl hostname exem.pl auth mask-source -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> +<span style="color: #75715e">## Aliases</span> +table aliases file:/etc/aliases -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> +<span style="color: #75715e"># coming from amavisd, checked for spam/malware</span> +listen on lo port <span style="color: #ae81ff">10025</span> tag Filtered +<span style="color: #75715e"># coming from amavisd, signed with DKIM</span> +listen on lo port <span style="color: #ae81ff">10027</span> tag Signed -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> +<span style="color: #75715e">## Receiving</span> +<span style="color: #75715e"># if the (incoming) mail has been through amavisd, then we can deliver it</span> +accept tagged Filtered <span style="color: #66d9ef">for</span> any <span style="color: #f8f8f2">alias</span> &lt;aliases&gt; deliver to lmtp <span style="color: #e6db74">&quot;/var/run/dovecot/lmtp&quot;</span> +<span style="color: #75715e"># we directly tranfer incoming mail to amavisd to be checked </span> +accept from any <span style="color: #66d9ef">for</span> domain <span style="color: #e6db74">&quot;exem.pl&quot;</span> relay via <span style="color: #e6db74">&quot;smtp://localhost:10024&quot;</span> +<span style="color: #75715e"># we have to put these lines in this order to avoid infinite loops</span> -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> +<span style="color: #75715e">## Sending</span> +<span style="color: #75715e"># if the (outgoint) mail has been through amavisd, then we can deliver it</span> +accept tagged Signed <span style="color: #66d9ef">for</span> any relay +<span style="color: #75715e"># we tranfer the outgoing mail to amavisd to be signed</span> +accept <span style="color: #66d9ef">for</span> any relay via <span style="color: #e6db74">&quot;smtp://localhost:10026&quot;</span> +<span style="color: #75715e"># same, we have to put these lines in this order or infinite loops...</span> </pre></div> <p>Expliquons un peu ce fichier de configuration :</p> <ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> +<li>Tout d&rsquo;abord, le paragraphe nommé &ldquo;Certs&rdquo; contient les déclaration + d&rsquo;emplacement des certificats SSL.</li> <li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> <li>Les alias sont définis juste après</li> <li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> + comme &ldquo;Filtered&rdquo; et 10027 (port de sortie des mails signés par amavis) dont on + taggue les mails sortants comme &ldquo;Signed&rdquo;</li> <li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore + peut donc le transmettre au destinataire. Sinon, c&rsquo;est qu&rsquo;il n&rsquo;a pas encore été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième + première règle qui matche l&rsquo;état du paquet est appliquée. Ici, la deuxième ligne matchant tous les mails arrivant et la première seulement ceux filtrés, inverser leur sens voudrait dire que les mails seraient toujours renvoyés a amavis</li> <li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au + on le transmet au MTA du destinataire, sinon il n&rsquo;a pas encore été signé par + DKIM par amavis et on le transmet donc a amavis pour qu&rsquo;il le signe. Le + problème de l&rsquo;ordre des lignes se pose encore, pour la même raison qu&rsquo;au dessus.</li> </ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit +<p>Nous allons maintenant configurer dovecot. Comme nous l&rsquo;avons vu, dovecot doit écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne +emails a la boite email de l&rsquo;utilisateur. Il serait aussi interessant +qu&rsquo;il nous permette de récuperer les mails. Pour cette configuration, on ne mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du POP3[s], différents guides sont trouvables facilement sur internet.</p> <p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Dovecot configuration file</span> -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> +<span style="color: #75715e"># basic config</span> +<span style="color: #f8f8f2">info_log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot-info.log +<span style="color: #f8f8f2">log_path</span> <span style="color: #f92672">=</span> /var/log/dovecot.log +<span style="color: #f8f8f2">log_timestamp</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;%Y-%m-%d %H:%M:%S &quot;</span> +<span style="color: #f8f8f2">mail_location</span> <span style="color: #f92672">=</span> maildir:%h/mail -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> +<span style="color: #75715e"># authentication</span> +passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> +userdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> passwd +<span style="color: #f92672">}</span> -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> +<span style="color: #75715e"># the protocols we use</span> +<span style="color: #f8f8f2">protocols</span> <span style="color: #f92672">=</span> imap lmtp sieve -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> +<span style="color: #75715e"># ssl config</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.cert +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/exem.pl.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> yes -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring services </span> +<span style="color: #75715e"># disables imap login without SSL (yes dovecot is dumb that way)</span> +service imap-login <span style="color: #f92672">{</span> + inet_listener imap <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">port</span><span style="color: #f92672">=</span><span style="color: #ae81ff">0</span> + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> +service lmtp <span style="color: #f92672">{</span> + unix_listener lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mode</span> <span style="color: #f92672">=</span> 0666 + <span style="color: #f92672">}</span> +<span style="color: #f92672">}</span> -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +<span style="color: #75715e">## configuring protocols</span> +<span style="color: #75715e"># the dovecot lda, we set it to use sieve</span> +protocol lda <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> +protocol lmtp <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">postmaster_address</span> <span style="color: #f92672">=</span> whoever@exem.pl + <span style="color: #f8f8f2">mail_plugins</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">$mail_plugins</span> sieve +<span style="color: #f92672">}</span> -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> +plugin <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">sieve</span> <span style="color: #f92672">=</span> ~/.dovecot.sieve + <span style="color: #f8f8f2">sieve_dir</span> <span style="color: #f92672">=</span> ~/sieve +<span style="color: #f92672">}</span> </pre></div> <p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> pam +<span style="color: #f92672">}</span> </pre></div> <p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">passdb <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">driver</span> <span style="color: #f92672">=</span> bsdauth +<span style="color: #f92672">}</span> </pre></div> <p><strong>pour identifier les utilisateurs système</strong></p> <p>Ici aussi, voyons comment ce fichier est structuré :</p> <ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. +<li>Tout d&rsquo;abord, les configurations de base : ou iront les logs, comment formater + leur datation, et l&rsquo;endroit ou seront stockés les mails des utilisateurs.</li> +<li>Nous configurons ensuite la gestion de l&rsquo;authentification des utilisateurs. Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs mots de passe avec PAM (ou BSDAuth)</li> <li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> + l&rsquo;IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> <li>Nous configurons le SSL</li> <li>Le section suivante contient la configuration des services. Nous avons en premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. + désactiver IMAP. En effet, dovecot ne permet d&rsquo;activer IMAPS qu&rsquo;en activant + IMAP avec. Comme nous ne voulons pas d&rsquo;IMAP sans SSL, nous le désactivons. La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> + fifo qu&rsquo;il utilise</li> <li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> <li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et quel dossier utiliser pour sa configuration.</li> @@ -263,101 +534,100 @@ POP3[s], différents guides sont trouvables facilement sur internet.</p> a deux choses : signer les emails sortants, et filtrer les emails entrants. Il doit donc écouter sur les port 10026 pour les signatures et 10024 pour le filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun +SMTP. Comme toutes les transactions se font sur le loopback, il n&rsquo;y a aucun risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les +Pour OpenBSD, pensez a copier la configuration par défaut depuis<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les modifications nécessaires a la fin du fichier.</p> <p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) <code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #66d9ef">use</span> <span style="color: #f8f8f2">strict;</span> -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> +<span style="color: #f8f8f2">$enable_dkim_verification</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">$enable_dkim_signing</span> <span style="color: #f92672">=</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">dkim_key(</span><span style="color: #e6db74">&quot;exem.pl&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;main&quot;</span><span style="color: #f8f8f2">,</span> <span style="color: #e6db74">&quot;/etc/certs/dkim.key&quot;</span> <span style="color: #f8f8f2">);</span> -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> +<span style="color: #f8f8f2">@dkim_signature_options_bysender_maps</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">(</span> + <span style="color: #f8f8f2">{</span> <span style="color: #e6db74">&#39;.&#39;</span> <span style="color: #f92672">=&gt;</span> + <span style="color: #f8f8f2">{</span> <span style="color: #f8f8f2">ttl</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">21</span><span style="color: #f92672">*</span><span style="color: #ae81ff">24</span><span style="color: #f92672">*</span><span style="color: #ae81ff">3600</span><span style="color: #f8f8f2">,</span> <span style="color: #f8f8f2">c</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;relaxed/simple&#39;</span> <span style="color: #f8f8f2">}</span> + <span style="color: #f8f8f2">}</span> +<span style="color: #f8f8f2">);</span> -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$inet_socket_port</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">10024</span><span style="color: #f8f8f2">,</span> <span style="color: #ae81ff">10026</span><span style="color: #f8f8f2">];</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;MYNETS&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">os_fingerprint_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">undef,</span> +<span style="color: #f8f8f2">};</span> -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> +<span style="color: #f8f8f2">$interface_policy{</span><span style="color: #e6db74">&#39;10026&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">;</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> +<span style="color: #f8f8f2">$policy_bank{</span><span style="color: #e6db74">&#39;ORIGINATING&#39;</span><span style="color: #f8f8f2">}</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">originating</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">allow_disclaimers</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">virus_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">spam_admin_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&quot;root\@$mydomain&quot;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">warnbadhsender</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">forward_method</span> <span style="color: #f92672">=&gt;</span> <span style="color: #e6db74">&#39;smtp:localhost:10027&#39;</span><span style="color: #f8f8f2">,</span> + <span style="color: #f8f8f2">smtpd_discard_ehlo_keywords</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #e6db74">&#39;8BITMIME&#39;</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">bypass_banned_checks_maps</span> <span style="color: #f92672">=&gt;</span> <span style="color: #f8f8f2">[</span><span style="color: #ae81ff">1</span><span style="color: #f8f8f2">],</span> + <span style="color: #f8f8f2">terminate_dsn_on_notify_success</span> <span style="color: #f92672">=&gt;</span> <span style="color: #ae81ff">0</span><span style="color: #f8f8f2">,</span> +<span style="color: #f8f8f2">};</span> -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> +<span style="color: #75715e">#------------ Do not modify anything below this line -------------</span> +<span style="color: #ae81ff">1</span><span style="color: #f8f8f2">;</span> <span style="color: #75715e"># ensure a defined return</span> </pre></div> <p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se +- le premier paragraphe définit que nous voulons qu&rsquo;amavis signe les emails + sortants, vérifie la signature DKIM des emails rentrants, et l&rsquo;endroit ou se trouve la clé privée servant a signer les emails. - le second définit les options DKIM que nous souhaitons utiliser comme défaut. Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> - nous définissons ensuite les ports sur lesquels nous allons écouter, puis les paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel + ils seront traités comme &ldquo;originating&rdquo; et nous ne vérifierons pas l&rsquo;OS duquel ils viennent. - nous savons que les emails venants du port 10026 sont sortants, nous les traitons donc comme tel - le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre + sortants : tout d&rsquo;abord, nous réaffirmons qu&rsquo;ils viennent bien de notre serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a + 4871</a>. Nous déclarons l&rsquo;adresse a prévenir en cas de spam/virus venants de notre système, et que nous voulons être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de + puis qu&rsquo;il est nécessaire de convertir les emails au format 7 bits avant de les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature + les notifications de succès d&rsquo;envoi. Et voila!</p> +<p>Vous avez pu remarquer qu&rsquo;a aucun moment nous ne configurions ni la signature des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en fait inclus par défaut dans amavis.</p> <p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un +Tout d&rsquo;abord, il nous faut générer notre clé DKIM. Pour cela, il existe +différentes méthodes, j&rsquo;ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un tutorial</a>) mais de nombreuses autre méthodes existent. Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">#rewrite_header Subject *****SPAM*****</span> +<span style="color: #75715e"># report_safe 1</span> +<span style="color: #f8f8f2">required_score</span> <span style="color: #ae81ff">2.0</span> +<span style="color: #75715e"># use_bayes 1</span> +<span style="color: #75715e"># bayes_auto_learn 1</span> +<span style="color: #75715e"># bayes_ignore_header X-Bogosity</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Flag</span> +<span style="color: #75715e"># bayes_ignore_header X-Spam-Status</span> +<span style="color: #f8f8f2">ifplugin</span> <span style="color: #f8f8f2">Mail::SpamAssassin::Plugin::Shortcircuit</span> +<span style="color: #75715e"># shortcircuit USER_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_DEF_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_ALL_SPAM_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_WHITELIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST on</span> +<span style="color: #75715e"># shortcircuit USER_IN_BLACKLIST_TO on</span> +<span style="color: #75715e"># shortcircuit SUBJECT_IN_BLACKLIST on</span> +<span style="color: #f8f8f2">shortcircuit</span> <span style="color: #f8f8f2">ALL_TRUSTED</span> <span style="color: #f8f8f2">off</span> +<span style="color: #75715e"># shortcircuit BAYES_99 spam</span> +<span style="color: #75715e"># shortcircuit BAYES_00 ham</span> -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> +<span style="color: #f8f8f2">endif</span> <span style="color: #75715e"># Mail::SpamAssassin::Plugin::Shortcircuit</span> </pre></div> @@ -365,44 +635,43 @@ Il nous reste encore a configurer spamassassin :</p> le required_score pour ma part.</p> <p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/%D/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/%D/freebsd-online-mfsbsd/<p>J'ai récemment eu l'occasion de louer un serveur chez Online.net (filiale de Illiad) +<p>Bon courage pour votre hosting de mail ensuite&hellip;</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:wxcafe.net,2014-11-07:posts/opensmtpd-debian/Installer FreeBSD sur un serveur Online avec MfsBSD//wxcafe.net/posts/freebsd-online-mfsbsd/<p>J&rsquo;ai récemment eu l&rsquo;occasion de louer un serveur chez Online.net (filiale de Illiad) Voulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester <a href="http://bhyve.org/">bhyve</a>) -et n'ayant pour différentes raisons pas eu l'occasion de le faire sur mon -<a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, -j'ai commencé a chercher comment le faire sur ce serveur.</p> -<p>Étant donné que Online ne propose pas directement d'image FreeBSD sur ses serveurs, il m'a fallu +et n&rsquo;ayant pour différentes raisons pas eu l&rsquo;occasion de le faire sur mon <a href="http://home.wxcafe.net">serveur auto-hebergé</a> ni sur <a href="http://wxcafe.net">ce serveur ci</a>, +j&rsquo;ai commencé a chercher comment le faire sur ce serveur.</p> +<p>Étant donné que Online ne propose pas directement d&rsquo;image FreeBSD sur ses serveurs, il m&rsquo;a fallu chercher un peu plus loin. Il se trouve que <a href="http://forum.online.net/index.php?/topic/3557-installation-de-freebsd-91-amd64-sur-une-dedibox-lt15k-2013/">ce post</a> sur les forums -d'online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> -<p>J'ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), -ou l'on m'a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d'installeur +d&rsquo;online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier. </p> +<p>J&rsquo;ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode), +ou l&rsquo;on m&rsquo;a dirigé vers <a href="http://mfsbsd.vx.sk/">mfsbsd</a>, un projet d&rsquo;installeur alternatif, minimaliste et simplifié pour FreeBSD.</p> <p>Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une console KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le -panel Online. Une fois cela fait, lancez une console, puis téléchargez l'image +panel Online. Une fois cela fait, lancez une console, puis téléchargez l&rsquo;image mfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis -choisissez l'image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter -sur l'image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l'air tout +choisissez l&rsquo;image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter +sur l&rsquo;image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l&rsquo;air tout a fait classique va démarrer. Une fois ceci fait, la partie importante arrive: -mfsbsd contient un script d'installation root-on-zfs, nommé logiquement +mfsbsd contient un script d&rsquo;installation root-on-zfs, nommé logiquement zfsinstall, qui va se charger de tout le travail pour nous.</p> <p>Utilisez donc ce script ainsi : </p> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, wipons le MBR :</span> -<span class="n">dd</span> <span class="o">&lt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">zero</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">da0</span> <span class="n">count</span><span class="o">=</span><span class="mi">1</span> -<span class="cp"># maintenant, installons le système</span> -<span class="n">zfsinstall</span> <span class="o">-</span><span class="n">g</span> <span class="n">da0</span> <span class="o">-</span><span class="n">u</span> <span class="n">ftp</span><span class="o">:</span><span class="c1">//ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># tout d&#39;abord, wipons le MBR :</span> +dd &lt; /dev/zero &gt; /dev/da0 <span style="color: #f8f8f2">count</span><span style="color: #f92672">=</span>1 +<span style="color: #75715e"># maintenant, installons le système</span> +zfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c </pre></div> <p>Avec <code>-g da0</code> votre disque dur principal, <code>-s 2G</code> la quantité de swap désirée, -<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D'autres options +<code>-p root</code> le nom du zpool, et <code>-c</code> pour activer la compression. D&rsquo;autres options sont disponibles, je vous invite a faire un <code>zfsinstall -h</code> si mon setup ne vous convient pas.</p> <p>Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau système) et éditez /etc/rc.conf :</p> -<div class="highlight"><pre><span class="n">zfs_load</span><span class="o">=</span><span class="s">&quot;YES&quot;</span> -<span class="n">sshd_load</span><span class="o">=</span><span class="s">&quot;YES</span> -<span class="n">hostname</span><span class="o">=</span><span class="s">&quot;whatever&quot;</span> -<span class="n">ifconfig_igb0</span><span class="o">=</span><span class="s">&quot;DHCP&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">zfs_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES&quot;</span> +<span style="color: #f8f8f2">sshd_load</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;YES</span> +<span style="color: #f8f8f2">hostname</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;whatever&quot;</span> +<span style="color: #f8f8f2">ifconfig_igb0</span><span style="color: #f92672">=</span><span style="color: #e6db74">&quot;DHCP&quot;</span> </pre></div> @@ -410,11 +679,10 @@ système) et éditez /etc/rc.conf :</p> physique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez maintenant un système FreeBSD tout propre installé sur zfs a découvrir et utiliser!</p> -<p>Voila, c'est la fin de ce tutoriel. -(Cela dit, bon courage pour tester bhyve, vu que l'IPv6 chez online est... peu +<p>Voila, c&rsquo;est la fin de ce tutoriel. +(Cela dit, bon courage pour tester bhyve, vu que l&rsquo;IPv6 chez online est&hellip; peu crédible, disons)</p> -<p>Bon sinon sur d'autres sujets, j'ai mis en place des bots twitter -<a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, +<p>Bon sinon sur d&rsquo;autres sujets, j&rsquo;ai mis en place des bots twitter : <a href="https://twitter.com/wxcafe_ebooks">wxcafe_ebooks</a>, <a href="https://twitter.com/petitefanfare">petitefanfare</a>, <a href="https://twitter.com/capet_ebooks">capet_ebooks</a>, <a href="https://twitter.com/zengisse">zengisse</a>, @@ -422,146 +690,146 @@ et <a href="https://wxcafe.net/kim_ebooks">kim_ebooks</a>. Ils sont code</a>, qui vient de <a href="https://twitter.com/m1sp">@m1sp</a> (<a href="https://github.com/twitter_ebooks">github.com/twitter_ebooks</a>). Donc voila.</p> -<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/%D/freebsd-online-mfsbsd/SSL ou la sécurité sur l'internet//wxcafe.net/posts/%D/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie +<p>A plus</p>WxcafeThu, 28 Aug 2014 12:16:00 +0200tag:wxcafe.net,2014-08-28:posts/freebsd-online-mfsbsd/SSL ou la sécurité sur l'internet//wxcafe.net/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: <a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès +ce qui peut avoir l&rsquo;effet de rendre légèrement parano. Si vous considérez que +c&rsquo;est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> <p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être remarqué quelque chose récemment : il se trouve que le certificat qui permet de desservir ce site a changé.</p> <p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", +doigts sortis d&rsquo;un endroit particulier du corps de l&rsquo;admin/auteur de ce &ldquo;blog&rdquo;, qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système +du fonctionnement de SSL, et les 10 nécessaires a la mise en place d&rsquo;un système fonctionnel utilisant cette compréhension récemment acquise.</p> <p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très +être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c&rsquo;est très simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat +<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc&hellip; Bref, un certificat différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs +<p>Il s&rsquo;avère que c&rsquo;est a la fois très peu pratique a utiliser (les utilisateurs doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat +changement de sous-domaine conduit a un message d&rsquo;erreur, etc) et pas plus +sécurisé que d&rsquo;avoir un seul certificat wildcard. J&rsquo;ai donc généré un certificat pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> +pas <code>*.wxcafe.net</code>, et qui sera donc utilisé&hellip; bah pour <code>wxcafe.net</code>.</p> <p>Il serait préférable de faire des redirections automatiques des adresses http vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront +self-signed, il me semble préférable que l&rsquo;arrivée sur le site ne commence pas +par une page firefox disant &ldquo;Something&rsquo;s Wrong!&rdquo;, et ces redirections ne seront donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus +<p>De plus, après la lecture de l&rsquo;article de blog sur Lavabit dont le lien est plus haut, il semble intéressant (et assez important) de faire en sorte que le serveur utilise en priorité (et si possible, uniquement) des ciphers supportant PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les +communications avec ce serveur soient future-proof, c&rsquo;est a dire que, même si +quelqu&rsquo;un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les communications passées.</p> <p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes +l&rsquo;implémentation : <br /> +Pour générer la clé, tout d&rsquo;abord, il convient d&rsquo;utiliser les commandes suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo openssl genrsa -out example.key 4096 +# nous utilisons ici une clé de <span style="color: #ae81ff">4096</span> bits, la taille est laissée a votre appréciation +sudo openssl req -new -key example.key -out example.csr +# OpenSSL va ici vous demander de nombreuses informations, <span style="color: #e6db74">&quot;Common Name&quot;</span> devant contenir le FQDN +sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt +# enfin, nous générons la clé, d<span style="color: #960050; background-color: #1e0010">&#39;</span>une durée de vie de <span style="color: #ae81ff">3</span> ans </pre></div> <p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser <code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> +Une fois la clé générée, il faut dire aux différents services de l&rsquo;utiliser, et +de n&rsquo;utiliser que des ciphers PFS. La méthode dépend donc du service. +Je vais lister ici les methodes pour quelques services que j&rsquo;utilise :</p> <h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/apache2/mods_enabled/ssl.conf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLProtocol</span> <span style="color: #66d9ef">all</span> -SSLv2 -SSLv3 +<span style="color: #f8f8f2">SSLHonorCipherOrder</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCipherSuite</span> <span style="color: #960050; background-color: #1e0010">&quot;</span>EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \ + EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \ + EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS<span style="color: #960050; background-color: #1e0010">&quot;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/apache2/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">SSLEngine</span> <span style="color: #66d9ef">on</span> +<span style="color: #f8f8f2">SSLCertificateFile</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #f8f8f2">SSLCertificateKeyFile</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/nginx/nginx.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl_protocols</span> <span style="color: #e6db74">TLSv1</span> <span style="color: #e6db74">TLSv1.1</span> <span style="color: #e6db74">TLSv1.2</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_prefer_server_ciphers</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_ciphers</span> <span style="color: #e6db74">&quot;EECDH+ECDSA+AESGCM</span> <span style="color: #e6db74">EECDH+aRSA+AESGCM</span> <span style="color: #e6db74">EECDH+ECDSA+SHA384</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH+ECDSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+SHA384</span> <span style="color: #e6db74">EECDH+aRSA+SHA256</span> <span style="color: #e6db74">EECDH+aRSA+RC4</span> <span style="color: #e6db74">\</span> + <span style="color: #e6db74">EECDH</span> <span style="color: #e6db74">EDH+aRSA</span> <span style="color: #e6db74">RC4</span> <span style="color: #e6db74">!aNULL</span> <span style="color: #e6db74">!eNULL</span> <span style="color: #e6db74">!LOW</span> <span style="color: #e6db74">!3DES</span> <span style="color: #e6db74">!MD5</span> <span style="color: #e6db74">!EXP</span> <span style="color: #e6db74">!PSK</span> <span style="color: #e6db74">!SRP</span> <span style="color: #e6db74">!DSS&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #75715e"># /etc/nginx/sites-enabled/default-ssl</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #66d9ef">ssl</span> <span style="color: #66d9ef">on</span><span style="color: #f8f8f2">;</span> +<span style="color: #66d9ef">ssl_certificate</span> <span style="color: #e6db74">/etc/certs/example.com.crt</span> +<span style="color: #e6db74">ssl_certificate_key</span> <span style="color: #e6db74">/etc/certs/example.com.key</span> +<span style="color: #75715e"># [...]</span> </pre></div> <h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">#</span> <span style="color: #f8f8f2">tout</span> <span style="color: #f8f8f2">d</span><span style="color: #e6db74">&#39;abord, lancez la commande suivante :</span> +<span style="color: #f8f8f2">sudo</span> <span style="color: #f8f8f2">openssl</span> <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">-</span><span style="color: #f8f8f2">out</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">certs</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">dh</span><span style="color: #f92672">-</span><span style="color: #ae81ff">2048.</span><span style="color: #f8f8f2">pem</span> <span style="color: #ae81ff">2048</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">ensuite,</span> <span style="color: #f8f8f2">pour</span> <span style="color: #f8f8f2">chaque</span> <span style="color: #f8f8f2">VirtualHost</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f92672">/</span><span style="color: #f8f8f2">etc</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">prosody.conf</span> <span style="color: #f8f8f2">:</span> +<span style="color: #f8f8f2">ssl</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">{</span> + <span style="color: #f8f8f2">dhparam</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">key</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.key&quot;</span><span style="color: #f8f8f2">;</span> + <span style="color: #f8f8f2">certificate</span> <span style="color: #f92672">=</span> <span style="color: #e6db74">&quot;/etc/certs/example.com.crt&quot;</span><span style="color: #f8f8f2">;</span> +<span style="color: #f8f8f2">}</span> +<span style="color: #f92672">#</span> <span style="color: #f8f8f2">la</span> <span style="color: #f8f8f2">cipher</span> <span style="color: #f8f8f2">suite</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">prosody</span> <span style="color: #f8f8f2">utilise</span> <span style="color: #f8f8f2">par</span> <span style="color: #f8f8f2">d</span><span style="color: #960050; background-color: #1e0010">é</span><span style="color: #f8f8f2">faut</span> <span style="color: #f8f8f2">EDH</span> <span style="color: #f8f8f2">et</span> <span style="color: #f8f8f2">EECDH</span> </pre></div> <h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/postfix/main.cf</span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">smtpd_tls_cert_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.crt +<span style="color: #f8f8f2">smtpd_tls_key_file</span> <span style="color: #f92672">=</span> /etc/certs/example.com.key +<span style="color: #f8f8f2">tls_preempt_cipherlist</span> <span style="color: #f92672">=</span> yes +<span style="color: #f8f8f2">smtpd_tls_eecdh_grade</span> <span style="color: #f92672">=</span> strong +<span style="color: #f8f8f2">smtdp_tls_mandatory_ciphers</span> <span style="color: #f92672">=</span> high +<span style="color: #f8f8f2">smtpd_tls_mandatory_exclude_ciphers</span> <span style="color: #f92672">=</span> aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS +<span style="color: #f8f8f2">smtpd_tls_security_level</span> <span style="color: #f92672">=</span> encrypt +<span style="color: #f8f8f2">smtpd_tls_mandatory_protocols</span> <span style="color: #f92672">=</span> !SSLv2, !SSLv3 +<span style="color: #f8f8f2">smtpd_use_tls</span> <span style="color: #f92672">=</span> yes +<span style="color: #75715e"># [...]</span> </pre></div> <h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e"># /etc/dovecot/dovecot.conf </span> +<span style="color: #75715e"># [...]</span> +<span style="color: #f8f8f2">ssl_cert</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.crt +<span style="color: #f8f8f2">ssl_key</span> <span style="color: #f92672">=</span> &lt;/etc/certs/example.com.key +<span style="color: #f8f8f2">ssl_cipher_list</span> <span style="color: #f92672">=</span> HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL </pre></div> -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter +<p>Voila. Pour d&rsquo;autres protocoles/services, je vous invite a RTFM^W vous reporter au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future +<p>Cela étant dit, je conseille a tout le monde d&rsquo;aller voir la conférence dans le +disclaimer, et tant qu&rsquo;a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/%D/SSL-ou-la-securite-sur-internet/Mise en place d'un serveur DNS//wxcafe.net/posts/%D/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de +implémentation d&rsquo;une technologie &ldquo;remplaçant&rdquo; le système de CAs qui existe +actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:wxcafe.net,2014-05-30:posts/SSL-ou-la-securite-sur-internet/Mise en place d'un serveur DNS//wxcafe.net/posts/mise-en-place-dun-serveur-dns/<p>Le DNS (Domain Name System) est le service permettant la résolution des noms de domaines en différentes informations : adresses IPv4, adresses IPv6, certificats DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour @@ -569,54 +837,53 @@ simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne de se connecter a <a href="http://173.194.45.66">http://173.194.45.66</a>, ou a <a href="http://199.16.156.70">http://199.16.156.70</a>. Voire même a <a href="http://5.39.76.46">http://5.39.76.46</a>).</p> -<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque -en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que +<p>Cependant, le DNS est un système qui date de 1984, et les exigences de l&rsquo;époque +en termes d&rsquo;expérience utilisateur n&rsquo;étaient pas forcément aussi importantes que de nos jours. La configuration des serveurs DNS peut ainsi être assez contre intuitive. Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses enregistrements est important.</p> -<p>Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même +<p>Tout d&rsquo;abord, une petite explication théorique. Le DNS fonctionne de la même façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d'écrire, par exemple, -<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le -<code>.</code> n'est pas obligatoire et la progression se fait de droite a gauche. Par +du FS est <code>/</code>, celle de DNS est <code>.</code>, et là ou il convient d&rsquo;écrire, par exemple,<code>/usr/</code> et ou la progression se fait de gauche a droite pour le FS, pour DNS le +<code>.</code> n&rsquo;est pas obligatoire et la progression se fait de droite a gauche. Par exemple, le tld(top level domain, domaine de haut niveau) <code>com</code>, et le domaine <code>google.com</code> appartient a <code>com</code>, on écrit donc <code>google.com</code> sans écrire le point a la fin de façon courante.</p> -<p>Le reverse DNS est une variante du DNS "classique" permettant de résoudre les +<p>Le reverse DNS est une variante du DNS &ldquo;classique&rdquo; permettant de résoudre les adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, <strong><em>dans le sens contraire a l'ordre +Cependant, le reverse DNS n&rsquo;a, par définition, pas de TLD sur lequel se diriger +quand on lui adresse une query. Les &ldquo;adresses&rdquo; que l&rsquo;on query en reverse DNS +sont donc constituées de l&rsquo;adresse IP, <strong><em>dans le sens contraire a l&rsquo;ordre habituel</em></strong>, et du faux domaine .in-addr.arpa Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire <code>dig PTR 76.46.39.5.in-addr.arpa</code>. La réponse sera, évidemment, <code>wxcafe.net</code></p> -<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, +<p>Voyons maintenant comment mettre en place son propre serveur DNS. Tout d&rsquo;abord, quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande utilisée pour faire des tests DNS est <code>dig</code>. Le DNS fonctionne avec des -"enregistrements", records en anglais. Par exemple, un record A indique une +&ldquo;enregistrements&rdquo;, records en anglais. Par exemple, un record A indique une adresse IP, un record NS indique un Serveur de nom, etc. <code>dig</code> se base sur ces records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom de domaine que vous donnez en argument, mais en précisant un autre type de -record, vous pouvez obtenir n'importe quelle information : par exemple, <code>dig NS +record, vous pouvez obtenir n&rsquo;importe quelle information : par exemple, <code>dig NS wxcafe.net</code> devrait vous renvoyer</p> -<div class="highlight"><pre><span class="p">;</span> <span class="o">&lt;&lt;&gt;&gt;</span> DiG <span class="m">9.8.4</span><span class="o">-</span>rpz2<span class="o">+</span>rl005.12<span class="o">-</span>P1 <span class="o">&lt;&lt;&gt;&gt;</span> NS wxcafe.net -<span class="p">;;</span> global options<span class="o">:</span> <span class="o">+</span>cmd -<span class="p">;;</span> Got answer<span class="o">:</span> -<span class="p">;;</span> <span class="o">-&gt;&gt;</span>HEADER<span class="o">&lt;&lt;-</span> opcode<span class="o">:</span> QUERY<span class="p">,</span> status<span class="o">:</span> NOERROR<span class="p">,</span> id<span class="o">:</span> <span class="m">13846</span> -<span class="p">;;</span> flags<span class="o">:</span> qr rd ra<span class="p">;</span> QUERY<span class="o">:</span> <span class="m">1</span><span class="p">,</span> ANSWER<span class="o">:</span> <span class="m">2</span><span class="p">,</span> AUTHORITY<span class="o">:</span> <span class="m">0</span><span class="p">,</span> ADDITIONAL<span class="o">:</span> <span class="m">0</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f92672">;</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">DiG</span> <span style="color: #f92672">9</span><span style="color: #a6e22e">.8.4-rpz2</span><span style="color: #f92672">+rl005</span><span style="color: #a6e22e">.12-P1</span> <span style="color: #f92672">&lt;&lt;&gt;&gt;</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">global</span> <span style="color: #f92672">options:</span> <span style="color: #f92672">+cmd</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Got</span> <span style="color: #f92672">answer:</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">-&gt;&gt;HEADER&lt;&lt;-</span> <span style="color: #f92672">opcode:</span> <span style="color: #f92672">QUERY,</span> <span style="color: #f92672">status:</span> <span style="color: #f92672">NOERROR,</span> <span style="color: #f92672">id:</span> <span style="color: #f92672">13846</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">flags:</span> <span style="color: #f92672">qr</span> <span style="color: #f92672">rd</span> <span style="color: #f92672">ra;</span> <span style="color: #f92672">QUERY:</span> <span style="color: #f92672">1,</span> <span style="color: #f92672">ANSWER:</span> <span style="color: #f92672">2,</span> <span style="color: #f92672">AUTHORITY:</span> <span style="color: #f92672">0,</span> <span style="color: #f92672">ADDITIONAL:</span> <span style="color: #f92672">0</span> -<span class="p">;;</span> QUESTION SECTION<span class="o">:</span> -<span class="p">;</span>wxcafe.net. IN NS +<span style="color: #f92672">;;</span> <span style="color: #f92672">QUESTION</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">;wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> -<span class="p">;;</span> ANSWER SECTION<span class="o">:</span> -wxcafe.net. <span class="m">3600</span> IN NS ns.wxcafe.net. -wxcafe.net. <span class="m">3600</span> IN NS ns.home.wxcafe.net. +<span style="color: #f92672">;;</span> <span style="color: #f92672">ANSWER</span> <span style="color: #f92672">SECTION:</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.wxcafe.net</span><span style="color: #f92672">.</span> +<span style="color: #f92672">wxcafe</span><span style="color: #a6e22e">.net</span><span style="color: #f92672">.</span> <span style="color: #f92672">3600</span> <span style="color: #f92672">IN</span> <span style="color: #f92672">NS</span> <span style="color: #f92672">ns</span><span style="color: #a6e22e">.home.wxcafe.net</span><span style="color: #f92672">.</span> -<span class="p">;;</span> Query time<span class="o">:</span> <span class="m">60</span> msec -<span class="p">;;</span> SERVER<span class="o">:</span> <span class="m">10.0.42.1</span><span class="c1">#53(10.0.42.1)</span> -<span class="p">;;</span> WHEN<span class="o">:</span> Tue Dec <span class="m">10</span> <span class="m">13</span><span class="o">:</span><span class="m">31</span><span class="o">:</span><span class="m">18</span> <span class="m">2013</span> -<span class="p">;;</span> MSG SIZE rcvd<span class="o">:</span> <span class="m">67</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">Query</span> <span style="color: #f92672">time:</span> <span style="color: #f92672">60</span> <span style="color: #f92672">msec</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">SERVER:</span> <span style="color: #f92672">10</span><span style="color: #a6e22e">.0.42.1#53</span><span style="color: #f92672">(10</span><span style="color: #a6e22e">.0.42.1</span><span style="color: #f92672">)</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">WHEN:</span> <span style="color: #f92672">Tue</span> <span style="color: #f92672">Dec</span> <span style="color: #f92672">10</span> <span style="color: #f92672">13</span><span style="color: #a6e22e">:31:18</span> <span style="color: #f92672">2013</span> +<span style="color: #f92672">;;</span> <span style="color: #f92672">MSG</span> <span style="color: #f92672">SIZE</span> <span style="color: #f92672">rcvd:</span> <span style="color: #f92672">67</span> </pre></div> @@ -626,12 +893,12 @@ qui sont respectivement des alias pour <code>wxcafe.net</code> et &l chacun fait autorité pour lui même, et le problème évident est que le résolveur ne peut résoudre la query si il est renvoyé encore et encore vers le même serveur. Il convient donc de définir dans le même fichier de configuration -l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième -loop, se rendra compte qu'il est en train de faire une boucle infinie et -demandera l'adresse au serveur auquel il est connecté. La première indication de +l&rsquo;adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième +loop, se rendra compte qu&rsquo;il est en train de faire une boucle infinie et +demandera l&rsquo;adresse au serveur auquel il est connecté. La première indication de direction se fait grâce au serveur du TLD.</p> <p>La configuration de bind est assez simple dans le principe, le plus complexe -étant en fait d'écrire les fichiers de zone. +étant en fait d&rsquo;écrire les fichiers de zone. La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il existe 4 fichiers de configuration principaux : <code>named.conf</code>, <code>named.conf.default-zones</code>, <code>named.conf.local</code> et <code>named.conf.options</code>. @@ -641,48 +908,47 @@ les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher named.conf.options contient les options que vous rajoutez pour changer le comportement de bind.</p> <p>Pour commencer, il convient de préciser que nous allons parler ici du cas dans -lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, +lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l&rsquo;autorité, deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs (notamment mon accès chez moi). </p> -<p>Examinons tout d'abord les fichiers de configuration de named. -<code>named.conf.local</code> contient les définitions des zones forward et reverse. +<p>Examinons tout d&rsquo;abord les fichiers de configuration de named.<code>named.conf.local</code> contient les définitions des zones forward et reverse. Sur wxcafe.net, les zones <code>wxcafe.net</code> et <code>76.46.39.5.in-addr.arpa</code> sont gérées en master, et les zones <code>home.wxcafe.net</code> et <code>103.177.67.80.in-addr.arpa</code> sont -gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce +gérées en slave. Nous n&rsquo;examinerons ici que les déclarations de zones sur ce serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence -principale étant que l'un héberge en slave les masters de l'autre. +principale étant que l&rsquo;un héberge en slave les masters de l&rsquo;autre. Le fichier <code>named.conf.local</code> sur wxcafe.net contient donc </p> -<div class="highlight"><pre><span class="n">zone</span> <span class="s">&quot;wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">zone <span style="color: #e6db74">&quot;wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;home.wxcafe.net&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;home.wxcafe.net&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/home.wxcafe.net&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">master</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">allow</span><span class="o">-</span><span class="n">transfer</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;46.76.39.5.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>master<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/master/46.76.39.5.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + allow-transfer <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> -<span class="n">zone</span> <span class="s">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span class="p">{</span> - <span class="n">type</span> <span class="n">slave</span><span class="p">;</span> - <span class="n">file</span> <span class="s">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span class="p">;</span> - <span class="n">masters</span> <span class="p">{</span> - <span class="mf">80.67.177.103</span><span class="p">;</span> - <span class="p">};</span> -<span class="p">};</span> +zone <span style="color: #e6db74">&quot;103.177.67.80.in-addr.arpa&quot;</span> <span style="color: #f92672">{</span> + <span style="color: #f8f8f2">type </span>slave<span style="color: #f8f8f2">;</span> + file <span style="color: #e6db74">&quot;/etc/bind/slave/103.177.67.80.in-addr.arpa&quot;</span><span style="color: #f8f8f2">;</span> + masters <span style="color: #f92672">{</span> + 80.67.177.103<span style="color: #f8f8f2">;</span> + <span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> +<span style="color: #f92672">}</span><span style="color: #f8f8f2">;</span> </pre></div> @@ -693,250 +959,247 @@ tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est assez parlant.</p> <p>Voyons maintenant le fichier de zone concernant wxcafe.net, soit <code>/etc/bind/master/wxcafe.net</code> : </p> -<div class="highlight"><pre><span class="err">$</span><span class="n">TTL</span> <span class="mi">3600</span> <span class="p">;</span> <span class="mi">1</span> <span class="n">hour</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">SOA</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="p">(</span> - <span class="mi">2014011001</span> <span class="p">;</span> <span class="n">serial</span> - <span class="mi">3</span><span class="n">h</span> <span class="p">;</span> <span class="n">refresh</span> - <span class="mi">1</span><span class="n">h</span> <span class="p">;</span> <span class="n">retry</span> - <span class="mi">168</span><span class="n">h</span> <span class="p">;</span> <span class="n">expire</span> - <span class="mi">300</span> <span class="p">;</span> <span class="n">negative</span> <span class="n">response</span> <span class="n">ttl</span> - <span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">$TTL</span> <span style="color: #ae81ff">3600</span> <span style="color: #f8f8f2">;</span> <span style="color: #ae81ff">1</span> <span style="color: #f8f8f2">hour</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SOA</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">(</span> + <span style="color: #ae81ff">2014011001</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">serial</span> + <span style="color: #ae81ff">3</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">refresh</span> + <span style="color: #ae81ff">1</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">retry</span> + <span style="color: #ae81ff">168</span><span style="color: #f8f8f2">h</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">expire</span> + <span style="color: #ae81ff">300</span> <span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">negative</span> <span style="color: #f8f8f2">response</span> <span style="color: #f8f8f2">ttl</span> + <span style="color: #f8f8f2">)</span> -<span class="p">;</span> <span class="n">Name</span> <span class="n">servers</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Name</span> <span style="color: #f8f8f2">servers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">Mail</span> <span class="n">exchangers</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">10</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">SPF</span> <span class="s">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Mail</span> <span style="color: #f8f8f2">exchangers</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">MX</span> <span style="color: #ae81ff">10</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">SPF</span> <span style="color: #e6db74">&quot;v=spf1 ip4:5.39.76.46 a -all&quot;</span> -<span class="p">;</span> <span class="n">Main</span> <span class="n">A</span><span class="o">/</span><span class="n">AAAA</span> <span class="n">records</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">5.39.76.46</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Main</span> <span style="color: #f8f8f2">A</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">AAAA</span> <span style="color: #f8f8f2">records</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">5.39.76.46</span> -<span class="p">;</span> <span class="n">Aliases</span> -<span class="n">data</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="p">;</span> <span class="p">[...]</span> -<span class="n">www</span> <span class="n">IN</span> <span class="n">CNAME</span> <span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">Aliases</span> +<span style="color: #f8f8f2">data</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">[</span><span style="color: #f92672">...</span><span style="color: #f8f8f2">]</span> +<span style="color: #f8f8f2">www</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">CNAME</span> <span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> -<span class="p">;</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> <span class="n">definition</span> -<span class="err">$</span><span class="n">ORIGIN</span> <span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="err">@</span> <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">home</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> - <span class="n">IN</span> <span class="n">NS</span> <span class="n">ns</span><span class="p">.</span><span class="n">wxcafe</span><span class="p">.</span><span class="n">net</span><span class="p">.</span> -<span class="n">ns</span> <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> - <span class="n">IN</span> <span class="n">A</span> <span class="mf">80.67.177.103</span> +<span style="color: #f8f8f2">;</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> <span style="color: #f8f8f2">definition</span> +<span style="color: #f8f8f2">$ORIGIN</span> <span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">@</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">home</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">NS</span> <span style="color: #f8f8f2">ns</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">wxcafe</span><span style="color: #f92672">.</span><span style="color: #f8f8f2">net</span><span style="color: #f92672">.</span> +<span style="color: #f8f8f2">ns</span> <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> + <span style="color: #f8f8f2">IN</span> <span style="color: #f8f8f2">A</span> <span style="color: #ae81ff">80.67.177.103</span> </pre></div> <p>Alors. Expliquons ligne par ligne.<br /> -Tout d'abord, le TTL (time to live) est un paramètre définissant le temps +Tout d&rsquo;abord, le TTL (time to live) est un paramètre définissant le temps pendant lequel les serveurs récursif (qui font un cache des données) doivent cacher ce fichier de zone. <br /> Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, wxcafe.net. <br /> Maintenant, nous arrivons a un record important : SOA (Start of Authority). -Ce record prend de nombreux arguments, dans l'ordre :<br /> +Ce record prend de nombreux arguments, dans l&rsquo;ordre :<br /> - Le nameserver autoritaire pour le nom de domaine en question,<br /> - - L'adresse email du responsable de cette zone, avec le premier point + - L&rsquo;adresse email du responsable de cette zone, avec le premier point remplacé par un @, </p> <p>puis entre parenthèses :<br /> - - Le numéro de série ("version" du fichier de zone, ici au format + - Le numéro de série (&ldquo;version&rdquo; du fichier de zone, ici au format YYYYMMDDNN) <br /> - La période de refresh, période entre chaque mise a jour du nameserver authoritaire secondaire, <br /> - La période de retry, le temps entre chaque essai de mise a jour si le nameserveur authoritaire primaire est indisponible, <br /> - - La période d'expire, le temps qu'attendra le serveur autoritaire + - La période d&rsquo;expire, le temps qu&rsquo;attendra le serveur autoritaire secondaire avant de supprimer les informations de son cache si le primaire reste indisponible, et enfin <br /> - - La période de TTL négatif, le temps qu'attendra le serveur secondaire + - La période de TTL négatif, le temps qu&rsquo;attendra le serveur secondaire avant de ne plus offrir les informations de cette zone si le serveur primaire est injoignable. </p> -<p>Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus +<p>Bon, tout ceci est peut-être un peu confus, mais ce n&rsquo;est pas le record le plus important a lire (pour les humains en tout cas). Continuons : </p> <p>NS (nameserver) permet de désigner les différents nameservers faisant autorité pour ce domaine. </p> -<p>MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. -SPF est un record d'authentification pour les emails. -Les records A désignent l'association entre un nom de domaine et une adresse +<p>MX permet d&rsquo;indiquer ou il convient d&rsquo;envoyer les emails pour ce domaine. +SPF est un record d&rsquo;authentification pour les emails. +Les records A désignent l&rsquo;association entre un nom de domaine et une adresse IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site -n'est pas encore en IPv6.</p> +n&rsquo;est pas encore en IPv6.</p> <p>Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de -mettre en place des domaines exactement semblables a d'autre (ce qui permet par -exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web)</p> +mettre en place des domaines exactement semblables a d&rsquo;autre (ce qui permet par +exemple de filtrer ensuite avec les Virtual Hosts d&rsquo;Apache, pour le web)</p> <p>Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet de changer la valeur du @ et des noms de domaine non complets (qui ne se terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et -l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on -l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, +l&rsquo;adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on +l&rsquo;a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, cela permet de rediriger les requêtes nous parvenant et demandant un domaine se trouvant sous home.wxcafe.net.</p> <p>Les autres fichiers de zone sont sensiblement similaires, avec les quelques -différences n'étant en fin de compte que des différences de valeurs (dues au -fait que, eh bah, c'est pas les mêmes domaines...).</p> -<p>Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est +différences n&rsquo;étant en fin de compte que des différences de valeurs (dues au +fait que, eh bah, c&rsquo;est pas les mêmes domaines&hellip;).</p> +<p>Voila donc une courte explication de ce qu&rsquo;est le DNS. Bien entendu, tout n&rsquo;est pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez aller vous renseigner directement a la source : le <a href="https://www.ietf.org/rfc/rfc1034.txt">RFC 1034</a> et le <a href="https://www.ietf.org/rfc/rfc1035.txt">RFC 1035</a>. Dans un autre style (bien plus avancé) le blog de <a href="http://bortzmeyer.org">Stéphane Bortzmeyer</a> est interessant -aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/%D/mise-en-place-dun-serveur-dns/NAT//wxcafe.net/posts/%D/nat/<p>NAT (Network Address Translation) in a word?<br /> -It's complicated. Very. Don't do it, you'd damage your brain. </p> -<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/%D/nat/Plan9 from whichever space//wxcafe.net/posts/%D/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. -Wood. Il est assez connu comme étant l'un des pires films jamais sortis. Rempli -d'erreur de montage, d'effets spéciaux au rabais, et ayant même connu la mort -d'un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> -<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l'indique), -et qui a été pensé comme le successeur d'Unix. Il est conçu comme une poursuite -des concepts unixiens jusqu'à leur but naturel. Ainsi, c'est Plan9 qui a -introduit le concept d'UnionFS, le protocole 9P qui permet d'acceder a des -ressources appartenant a d'autres ordinateurs a distance, un support de -l'unicode par défaut et sur tout le système (a l'inverse d'Unix, qui fonctionne +aussi.</p>WxcafeMon, 24 Feb 2014 02:49:00 +0100tag:wxcafe.net,2014-02-24:posts/mise-en-place-dun-serveur-dns/NAT//wxcafe.net/posts/nat/<p>NAT (Network Address Translation) in a word?<br /> +It&rsquo;s complicated. Very. Don&rsquo;t do it, you&rsquo;d damage your brain. </p> +<p>Bon, sinon, prochain article serieux vite, bisous.</p>wxcaféMon, 17 Feb 2014 05:02:00 +0100tag:wxcafe.net,2014-02-17:posts/nat/Plan9 from whichever space//wxcafe.net/posts/plan-9-from-whichever-space/<p><a href="http://en.wikipedia.org/wiki/Plan_9_from_Outer_Space"><strong>Plan 9 from Outer Space</strong></a> est un film de série Z, produit en 1959 par Edward D. +Wood. Il est assez connu comme étant l&rsquo;un des pires films jamais sortis. Rempli +d&rsquo;erreur de montage, d&rsquo;effets spéciaux au rabais, et ayant même connu la mort +d&rsquo;un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.</p> +<p><a href="http://plan9.bell-labs.com/plan9/"><strong>Plan 9 from Bell Labs</strong></a> est un OS venant de Bell Labs (comme son nom l&rsquo;indique), +et qui a été pensé comme le successeur d&rsquo;Unix. Il est conçu comme une poursuite +des concepts unixiens jusqu&rsquo;à leur but naturel. Ainsi, c&rsquo;est Plan9 qui a +introduit le concept d&rsquo;UnionFS, le protocole 9P qui permet d&rsquo;acceder a des +ressources appartenant a d&rsquo;autres ordinateurs a distance, un support de +l&rsquo;unicode par défaut et sur tout le système (a l&rsquo;inverse d&rsquo;Unix, qui fonctionne a la base en ASCII), un support de ProcFS amélioré, une interface graphique par -défaut, et d'autres améliorations sur les thèmes de base que propose Unix. </p> -<p>Cependant, Plan9 n'a jamais été véritablement utilisé pour quoi que ce soit -d'autre que la recherche en systèmes, et c'est dommage, parce que Plan9 a -quelque chose de très intéressant à proposer. En effet, en ces jours d'intérêt +défaut, et d&rsquo;autres améliorations sur les thèmes de base que propose Unix. </p> +<p>Cependant, Plan9 n&rsquo;a jamais été véritablement utilisé pour quoi que ce soit +d&rsquo;autre que la recherche en systèmes, et c&rsquo;est dommage, parce que Plan9 a +quelque chose de très intéressant à proposer. En effet, en ces jours d&rsquo;intérêt grandissant pour le klaoude et la délocalisation a la fois du processing et des -données, et bien que Plan9 ait été créé bien avant que le terme "cloud -computing" n'apparaisse pour la première fois, il semble que ce système ait été +données, et bien que Plan9 ait été créé bien avant que le terme &ldquo;cloud +computing&rdquo; n&rsquo;apparaisse pour la première fois, il semble que ce système ait été conçu pour apporter cette délocalisation tant rêvée.</p> -<p>En effet, même si l'on considère que les nouveautés qu'il apporte par rapport a -Unix ne sont pas extraordinaires en soit (alors qu'elles sont déjà -conséquentes), lorsqu'on les prend ensemble, elles font de Plan9 le système -d'exploitation ultime en terme de partage de ressources et de données. -Ainsi, le fait que 9P permette de considérer toutes les ressources d'un système -distant comme n'étant qu'une poignée de fichiers permet de le monter comme -n'importe quel système de fichier. Le fait que chaque utilisateur puisse accéder +<p>En effet, même si l&rsquo;on considère que les nouveautés qu&rsquo;il apporte par rapport a +Unix ne sont pas extraordinaires en soit (alors qu&rsquo;elles sont déjà +conséquentes), lorsqu&rsquo;on les prend ensemble, elles font de Plan9 le système +d&rsquo;exploitation ultime en terme de partage de ressources et de données. +Ainsi, le fait que 9P permette de considérer toutes les ressources d&rsquo;un système +distant comme n&rsquo;étant qu&rsquo;une poignée de fichiers permet de le monter comme +n&rsquo;importe quel système de fichier. Le fait que chaque utilisateur puisse accéder a plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et gérer des processus sur chacun de ces namespaces) et que chaque namespace puisse -interagir avec les autres, même s'ils sont hétérogènes (c'est a dire provenant -de machines différentes), permet d'utiliser les ressources d'une machine -distante comme si elle était présente localement. Le mécanisme d'UnionFS permet +interagir avec les autres, même s&rsquo;ils sont hétérogènes (c&rsquo;est a dire provenant +de machines différentes), permet d&rsquo;utiliser les ressources d&rsquo;une machine +distante comme si elle était présente localement. Le mécanisme d&rsquo;UnionFS permet de rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le même point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers de plusieurs machines a la fois (ce qui permet une délocalisation des données bien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).</p> <p>Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de -parler d'ordinateur lorsque le concept même du système est d'être composé de +parler d&rsquo;ordinateur lorsque le concept même du système est d&rsquo;être composé de clusters eux mêmes composés de machines hétérogènes. Le système de fichier -virtuel /net fourni par le kernel de Plan9 permet d'implémenter très facilement -différents concepts réseaux : en montant le /net d'un ordinateur du réseau local -sur celui servant de gateway vers l'internet, on crée un NAT vers cet ordinateur -du réseau local. En montant le /net d'un ordinateur distant sur un ordinateur +virtuel /net fourni par le kernel de Plan9 permet d&rsquo;implémenter très facilement +différents concepts réseaux : en montant le /net d&rsquo;un ordinateur du réseau local +sur celui servant de gateway vers l&rsquo;internet, on crée un NAT vers cet ordinateur +du réseau local. En montant le /net d&rsquo;un ordinateur distant sur un ordinateur local via le protocole 9P sécurisé, on crée un VPN : les connections locales se -font en utilisant l'accès de l'ordinateur distant, et les connections entre les +font en utilisant l&rsquo;accès de l&rsquo;ordinateur distant, et les connections entre les deux sont chiffrées. </p> <p>Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour -partager leur "puissance" de calcul en userspace, des superordinateurs pour -lesquels le noyau Linux s'est doté du support de jusqu'à 4096 CPUs, des OS tels -JoliOS qui promettent une integration du klaoude alors qu'ils ne sont en fait +partager leur &ldquo;puissance&rdquo; de calcul en userspace, des superordinateurs pour +lesquels le noyau Linux s&rsquo;est doté du support de jusqu&rsquo;à 4096 CPUs, des OS tels +JoliOS qui promettent une integration du klaoude alors qu&rsquo;ils ne sont en fait que des navigateurs web a peine améliorés et des services de stockage en ligne -qui promettent un accès universel a toutes nos données alors qu'ils ne proposent +qui promettent un accès universel a toutes nos données alors qu&rsquo;ils ne proposent que de les garder a disposition par le web, Plan9 promettait une technologie de partage des ressources système et de données, une intégration du réseau dans le système particulièrement poussée, un environnement graphique supporté par le -basesystem et non greffé par dessus comme l'a été X11, et de nombreuses autres +basesystem et non greffé par dessus comme l&rsquo;a été X11, et de nombreuses autres améliorations sur Unix.</p> -<p>Malheureusement, il n'a jamais été adopté de façon véritablement significative, -et ce pour une raison très Unixiènne : "worse is better". En effet, le parc de +<p>Malheureusement, il n&rsquo;a jamais été adopté de façon véritablement significative, +et ce pour une raison très Unixiènne : &ldquo;worse is better&rdquo;. En effet, le parc de machines Unix déjà installées était suffisamment performant et fonctionnel pour que des solutions soient développées au dessus du système pour remplir les mêmes fonctions que remplit Plan9 <em>via</em> son kernel, tels le nouveau ProcFS de -Linux, FUSE, etc...</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/%D/plan-9-from-whichever-space/Sed Basics//wxcafe.net/posts/%D/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler +Linux, FUSE, etc&hellip;</p>WxcafeMon, 09 Sep 2013 11:17:00 +0200tag:wxcafe.net,2013-09-09:posts/plan-9-from-whichever-space/Sed Basics//wxcafe.net/posts/sed-basics/<p><code>sed</code> est un outil Unix très largement utilisé et très pratique pour manipuler le texte (ce qui se montre relativement indispensable dans un environnement Unix, puisque ce système est assez porté sur le texte). Cependant, il assez peu connu en détail, et la plupart du temps une seule fonction est utilisée : le remplacement de texte.<br /> Or <code>sed</code> a bien plus de possibilités que ça, comme nous allons le voir.</p> -<p>Tout d'abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais -aussi un langage de manipulation de texte dérivé de <code>ed</code>, l'éditeur original. -<code>ed</code> est un éditeur de ligne, conçu a l'époque ou les ordinateurs n'étaient pas -personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c'est a dire des -machines dépourvues d'écrans et ne permettant donc pas l'utilisation d'éditeurs -dits "visuels", tels que vim, emacs, et globalement tous les éditeurs ayant un +<p>Tout d&rsquo;abord, rappelons les bases : <code>sed</code> est un programme Unix de base, mais +aussi un langage de manipulation de texte dérivé de <code>ed</code>, l&rsquo;éditeur original.<code>ed</code> est un éditeur de ligne, conçu a l&rsquo;époque ou les ordinateurs n&rsquo;étaient pas +personnels et étaient utilisés avec des <a href="http://fr.wikipedia.org/wiki/telescripteur">téléscripteurs</a>, c&rsquo;est a dire des +machines dépourvues d&rsquo;écrans et ne permettant donc pas l&rsquo;utilisation d&rsquo;éditeurs +dits &ldquo;visuels&rdquo;, tels que vim, emacs, et globalement tous les éditeurs ayant un curseur et affichant plusieurs lignes. <code>sed</code> est donc une évolution de <code>ed</code>, le s signifiant stream, <code>sed</code> est un éditeur de flux, prenant donc avantage du -concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d'une ligne a la fois. +concept Unixien de flux de données (voir <a href="http://fr.wikipedia.org/wiki/Flux_standard">Flux standards</a>) pour éditer plus d&rsquo;une ligne a la fois. En pratique, <code>sed</code> est principalement utilisé sur des fichiers.</p> -<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d'empêcher -l'affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui -permet de rediriger l'output dans le fichier d'input. Cela dit, l'intérêt unique +<p><code>sed</code> a quelques options pratique, notamment <code>-s</code> qui permet d&rsquo;empêcher +l&rsquo;affichage systématique des lignes traitées, ou bien <code>-i</code> (pour GNU sed) qui +permet de rediriger l&rsquo;output dans le fichier d&rsquo;input. Cela dit, l&rsquo;intérêt unique du programme est son langage de manipulation de texte.</p> <p><code>ed</code>, et donc <code>sed</code>, utilise un langage basé sur les séparations (en général des /). Ainsi, la commande de base dans <code>sed</code> est </p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/ </pre></div> <p>qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de -n'exécuter les commandes qui suivent que sur ces lignes.) </p> +n&rsquo;exécuter les commandes qui suivent que sur ces lignes.) </p> <p><br/> -La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s'utilise de +La commande <code>sed</code> la plus utilisée est bien entendu le <strong>s</strong>, qui s&rsquo;utilise de la façon suivante : </p> -<div class="highlight"><pre><span class="n">s</span><span class="o">/</span><span class="p">[</span><span class="n">old</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">new</span> <span class="n">text</span><span class="p">]</span><span class="o">/</span><span class="p">[</span><span class="n">options</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">s</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[old</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[new</span> <span style="color: #f8f8f2">text]</span><span style="color: #f92672">/</span><span style="color: #f8f8f2">[options]</span> </pre></div> <p>qui se propose donc de remplacer (substitute) [old text] (qui peut être une regex) par [new text] (qui doit être un texte fixe, avec quelques exceptions), en appliquant [options], la plus connue des options étant <code>g</code>, -qui permet d'appliquer la commande affectée a toutes les occurrences du texte +qui permet d&rsquo;appliquer la commande affectée a toutes les occurrences du texte matché sur la/les lignes concernée-s.<br /> -Les exceptions a la "fixité" de [new text] sont particulièrement +Les exceptions a la &ldquo;fixité&rdquo; de [new text] sont particulièrement intéressantes. En effet, <code>sed</code> utilise un langage de regex plutôt standard, -excepté le fait qu'il permet jusqu'à 9 "holding spaces", qui sont délimités par +excepté le fait qu&rsquo;il permet jusqu&rsquo;à 9 &ldquo;holding spaces&rdquo;, qui sont délimités par \( et \), et qui sont représentées dans le texte de remplacement par \1 à \9.</p> <p>Par exemple, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="err">\</span><span class="p">(</span><span class="n">hello</span> <span class="n">world</span><span class="err">\</span><span class="p">)</span> <span class="n">world</span><span class="o">/</span><span class="err">\</span><span class="mi">1</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/\(hello world\) world/\1/&#39; </pre></div> -<p>sur le texte "hello world world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world </pre></div> <p>De la même façon, le symbole <code>&amp;</code> dans le texte de remplacement représente le texte original. Ainsi, la commande </p> -<div class="highlight"><pre><span class="n">sed</span> <span class="err">&#39;</span><span class="n">s</span><span class="o">/</span><span class="n">hello</span> <span class="n">world</span><span class="o">/&amp;</span> <span class="n">world</span><span class="o">/</span><span class="err">&#39;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sed &#39;s/hello world/&amp; world/&#39; </pre></div> -<p>sur le texte "hello world" renverrait comme résultat</p> -<div class="highlight"><pre><span class="n">hello</span> <span class="n">world</span> <span class="n">world</span> +<p>sur le texte &ldquo;hello world&rdquo; renverrait comme résultat</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">hello world world </pre></div> <p><br/></p> <p>Une autre commande utile est <strong>p</strong>, qui sert a afficher le texte présent dans -l'espace courant :</p> -<div class="highlight"><pre><span class="o">/</span><span class="p">[</span><span class="n">regex</span><span class="p">]</span><span class="o">/</span><span class="n">p</span> +l&rsquo;espace courant :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/[regex]/p </pre></div> <p><code>sed</code> stocke en effet la ligne sur laquelle il travaille dans un espace mémoire -dédié, que j'appelle l'espace courant (pattern space en anglais). La commande -<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit -le pattern space de façon a ce qu'il ne contienne que les lignes matchant, et le -<strong>p</strong> affiche donc ce dernier.</p> -<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s'utilisent ainsi :</p> -<div class="highlight"><pre><span class="n">c</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +dédié, que j&rsquo;appelle l&rsquo;espace courant (pattern space en anglais). La commande<code>p</code> affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit +le pattern space de façon a ce qu&rsquo;il ne contienne que les lignes matchant, et le <strong>p</strong> affiche donc ce dernier.</p> +<p>Un autre exemple de commande sont <strong>c</strong>, <strong>i</strong> et <strong>a</strong>, qui s&rsquo;utilisent ainsi :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">c \ +[text] </pre></div> <p>De la même façon, pour le i : </p> -<div class="highlight"><pre><span class="n">i</span> \ -<span class="p">[</span><span class="n">text</span><span class="p">]</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">i \ +[text] </pre></div> <p>Et de même pour a. </p> -<p>Ces trois commandes s'utilisent de la même façon pour la bonne raison qu'elles +<p>Ces trois commandes s&rsquo;utilisent de la même façon pour la bonne raison qu&rsquo;elles sont très proches. <strong>i</strong> sert a insérer du texte <em>avant</em> le pattern space. <strong>a</strong> sert a insérer du texte <em>après</em> le pattern space, et enfin <strong>c</strong> sert a remplacer <em>tout</em> le pattern space. Les trois utilisent [text] comme @@ -947,26 +1210,25 @@ space, et non sur la ligne en question.</p> /[regex]/d <strong>d</strong> (delete) supprime les contenus du pattern space.</p> <p><code>sed</code> est un outil puissant, mais complexe. Dans un prochain article, je -parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/%D/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé -au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier <em>en +parlerai des commandes multilignes et des labels.</p>WxcafeSun, 18 Aug 2013 22:57:00 +0200tag:wxcafe.net,2013-08-18:posts/sed-basics/Le chiffrement de partitions avec dm-crypt et device-mapper//wxcafe.net/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/<p>Le chiffrement en tant que concept informatique est traditionnellement associé +au chiffrement de fichiers, c&rsquo;est a dire au fait de passer d&rsquo;un fichier <em>en clair</em> a un fichier chiffré dit <em>cyphertext</em>. Cependant, il ne se limite pas a -ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou -bien la confidentialité d'un support de stockage, par exemple. Nous allons ici +ça, et peut aussi servir a garantir l&rsquo;intégrité d&rsquo;un système d&rsquo;exploitation, ou +bien la confidentialité d&rsquo;un support de stockage, par exemple. Nous allons ici voir comment mettre en place un système de ce type sous GNU/Linux. Cet article -n'a pas pour but de vous apprendre a mettre en place un système basé sur une -procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en -jeu dans l'utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de -présenter un rapide tutoriel concernant la création d'un support chiffré sur +n&rsquo;a pas pour but de vous apprendre a mettre en place un système basé sur une +procédure de boot sécurisée, mais plutôt d&rsquo;expliquer les concepts qui entrent en +jeu dans l&rsquo;utilisation du sous-système du noyau Linux <a href="http://en.wikipedia.org/wiki/dm-crypt"><strong>dm_crypt</strong></a> et de +présenter un rapide tutoriel concernant la création d&rsquo;un support chiffré sur lequel garder vos informations confidentielles (par exemple, votre <a href="http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg">clé GPG</a>)</p> <p>dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système -du noyau Linux, et s'appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement -de disques. Comme son nom l'indique, device-mapper est un système qui a pour but +du noyau Linux, et s&rsquo;appuie sur <a href="http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup">LUKS</a>, un standard de chiffrement +de disques. Comme son nom l&rsquo;indique, device-mapper est un système qui a pour but de <strong>mapper</strong> des <strong>block devices</strong>. Pour être plus clair, le kernel considère -comme "block device" tout fichier spécial (en gros, les fichiers disques dans -<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le +comme &ldquo;block device&rdquo; tout fichier spécial (en gros, les fichiers disques dans<code>/dev/</code>, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de -fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. -Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. +fonctionnement est simple : a partir d&rsquo;un &ldquo;fichier de périphérique&rdquo; (trad. +Wikipédia), il en &ldquo;crée&rdquo; un nouveau, virtuel, ayant des propriétés différentes. Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans /dev, et device-mapper est requis pour pouvoir en voir les partitions (qui apparaîtront donc dans /dev/mapper)</p> @@ -976,59 +1238,59 @@ déchiffre a la volée tous les accès disques a ce périphérique non chiffré traduisant sur le système de fichier chiffré, le tout de manière tout a fait transparente pour les applications utilisant le disque en question. Cela induit bien entendu une baisse de performance relativement significative dans le cas -d'un chiffrement du système de fichier root, mais quasiment insignifiante dans +d&rsquo;un chiffrement du système de fichier root, mais quasiment insignifiante dans le cas de chiffrement de partitions de données.</p> -<p>D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer +<p>D&rsquo;ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer si le système de fichier root est chiffré. Dans ce cas précis, la procédure de -boot <strong><em>doit</em></strong> s'appuyer sur une image initrd (l'initrd est un système de +boot <strong><em>doit</em></strong> s&rsquo;appuyer sur une image initrd (l&rsquo;initrd est un système de fichier minimal qui sert uniquement a initialiser le système. Les kernels de base de la plupart des distributions GNU/Linux en utilisent un dans tous les cas, pour des raisons de compatibilité) et sur une partition de boot qui elle -n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge +n&rsquo;est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,&hellip;) charge en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et -charge l'initrd en RAM, celui-ci a son tour lance un script permettant de +charge l&rsquo;initrd en RAM, celui-ci a son tour lance un script permettant de charger les modules nécessaires a la suite du boot (que ce soit pour un boot sans disque root local, ou bien comme ici avec un système chiffré), puis le -système de fichier "cible" est remonté sur la racine, et l'initrd est démonté -est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend +système de fichier &ldquo;cible&rdquo; est remonté sur la racine, et l&rsquo;initrd est démonté +est la RAM qu&rsquo;il occupait est libérée, puis la procédure de boot normale reprend depuis le système de fichier maintenant monté sur la racine.</p> <p>La méthode la plus évidente pour contourner le chiffrement du disque est alors -de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par +de remplacer le fichier compressé initrd dans /boot, qui n&rsquo;est pas chiffrée, par un autre modifié, copiant par exemple la phrase de passe permettant de déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir -contre ce genre d'attaques : l'une des plus simple est de faire un checksum du +contre ce genre d&rsquo;attaques : l&rsquo;une des plus simple est de faire un checksum du fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du <em>vrai</em> boot -que l'initrd présente toujours le même checksum. Cela dit, cette méthode a -l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès +que l&rsquo;initrd présente toujours le même checksum. Cela dit, cette méthode a +l&rsquo;inconvénient d&rsquo;intervenir après les faits, et de nécessiter au moins un accès a un fichier initrd reconnu comme sûr.<br /> Une autre approche consisterait a placer le système de fichier /boot sur un périphérique dédié, protégé en écriture de façon matérielle (par exemple, une carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et -protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un -attaquant de modifier ce système de fichier, et l'initrd est alors toujours de +protégé en écriture de façon matérielle. Ainsi, il n&rsquo;est pas possible pour un +attaquant de modifier ce système de fichier, et l&rsquo;initrd est alors toujours de confiance. Cependant, cela a pour conséquence de rendre la mise a jour de -l'initrd et du noyau <em>beaucoup</em> plus difficile qu'elle ne le serait sans.</p> +l&rsquo;initrd et du noyau <em>beaucoup</em> plus difficile qu&rsquo;elle ne le serait sans.</p> <p>Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un programme dédié, <code>cryptsetup</code>. Ce dernier était en charge de cryptoloop, -l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est -maintenant responsable de l'utilisation <em>userspace</em> de dm-crypt, qui pour sa +l&rsquo;ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est +maintenant responsable de l&rsquo;utilisation <em>userspace</em> de dm-crypt, qui pour sa part est entièrement <em>kernel-space</em>. Cryptsetup permet ainsi le chiffrement, la -manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier +manipulation (montage/démontage/&hellip;) et la gestion de clé des systèmes de fichier LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi obligatoirement être capables de le faire en tant que root. </p> <p>Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :<br /> -Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, -dans une situation réelle ou l'on cherche a chiffrer un disque, il convient -d'utiliser /dev/urandom comme source, pour éviter la détection du système de +Tout d&rsquo;abord, il nous faut créer le fichier qui contiendra l&rsquo;image. Pour cela, +dans une situation réelle ou l&rsquo;on cherche a chiffrer un disque, il convient +d&rsquo;utiliser /dev/urandom comme source, pour éviter la détection du système de fichier chiffré sur le disque. Ici, par exemple, nous allons faire : </p> -<div class="highlight"><pre><span class="n">dd</span> <span class="n">bs</span><span class="o">=</span><span class="mi">1000</span> <span class="n">count</span><span class="o">=</span><span class="mi">1000000</span> <span class="k">if</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">urandom</span> <span class="n">of</span><span class="o">=</span><span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">dd bs=1000 count=1000000 if=/dev/urandom of=image.img </pre></div> <p>Maintenant que notre image est créée, nous pouvons la chiffrer : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksFormat</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksFormat image.img </pre></div> @@ -1038,34 +1300,34 @@ passphrase. Il convient ici de choisir une passphrase particulièrement sûre, puisque toute personne ayant accès a la passphrase aura aussi accès au disque et donc a vos secrets.<br /> Une fois cela fait, nous allons mapper cette image : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">cryptsetup</span> <span class="n">luksOpen</span> <span class="n">image</span><span class="p">.</span><span class="n">img</span> <span class="n">crypto</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen image.img crypto </pre></div> <p><code>cryptsetup</code> nous redemande la passphrase, charge pendant quelques secondes, -puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous -voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En +puis nous redonne le prompt. Que s&rsquo;est-il passé? En cherchant un peu, nous +voyons qu&rsquo;il n&rsquo;y a pas de nouveau disque dans /dev. C&rsquo;est tout a fait normal. En effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les -systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque -qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque +systèmes de fichiers chiffrés, il les mappe, et ça n&rsquo;a rien a voir. On remarque +qu&rsquo;est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque virtuel qui correspond a notre image. Il se comporte comme toute partition, et peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. Il se comporte en effet comme une partition, et non comme un véritable disque.) -Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de -le faire, pour pouvoir l'utiliser. </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> +Bon, ceci fait, notre disque virtuel n&rsquo;est pas formaté. Il nous reviens donc de +le faire, pour pouvoir l&rsquo;utiliser. </p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mkfs.ext4 /dev/mapper/crypto </pre></div> <p>Maintenant que notre disque est formaté, il peut être monté : </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="o">/</span><span class="n">mnt</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo mount /dev/mapper/crypto /mnt </pre></div> <p>Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous voulez vérifier, un <code>mount | grep crypto</code> devrait vous donner le résultat suivant : </p> -<div class="highlight"><pre><span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">mapper</span><span class="o">/</span><span class="n">crypto</span> <span class="n">on</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">type</span> <span class="n">ext4</span> <span class="p">(</span><span class="n">rw</span><span class="p">,</span><span class="n">relatime</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">ordered</span><span class="p">)</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) </pre></div> @@ -1075,51 +1337,51 @@ sont (en fonction de votre passphrase) en sécurité. </p> <ul> <li> <p>Pour monter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksOpen</span> <span class="o">&lt;</span><span class="nx">fichier</span> <span class="nx">chiffré</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">mount</span> <span class="p">/</span><span class="nx">dev</span><span class="p">/</span><span class="nx">mapper</span><span class="o">/&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo cryptsetup luksOpen &lt;fichier chiffré&gt; &lt;nom de disque virtuel&gt; +sudo mount /dev/mapper/&lt;nom de disque virtuel&gt; &lt;emplacement&gt; </pre></div> </li> <li> <p>Pour démonter vos partitions : </p> -<div class="highlight"><pre><span class="nx">sudo</span> <span class="nx">umount</span> <span class="o">&lt;</span><span class="nx">emplacement</span><span class="o">&gt;</span> -<span class="nx">sudo</span> <span class="nx">cryptsetup</span> <span class="nx">luksClose</span> <span class="o">&lt;</span><span class="nx">nom</span> <span class="nx">de</span> <span class="nx">disque</span> <span class="nx">virtuel</span><span class="o">&gt;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo umount &lt;emplacement&gt; +sudo cryptsetup luksClose &lt;nom de disque virtuel&gt; </pre></div> </li> </ul> -<p>Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de +<p>Pour simplifier la vie de tous, j&rsquo;ai créé deux petits scripts vous permettant de créer et de monter/démonter vos images/disques chiffré-e-s en une seule commande. Ils se trouvent sur <a href="https://github.com/wxcafe/cryptoscripts">github</a>. </p> <p>Par ailleurs, si vous comptez transferer votre image disque sur un véritable disque (ou clé usb, ou autre), il est préférable de créer une partition de taille appropriée et de faire un <code>dd if=votre_image of=/dev/votre_partition</code> -pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Redesign du blog, etc//wxcafe.net/posts/%D/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation +pour ce faire.</p>WxcafeWed, 10 Jul 2013 03:18:00 +0200tag:wxcafe.net,2013-07-10:posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/Redesign du blog, etc//wxcafe.net/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a &ldquo;un peu&rdquo; changé récemment.</p> +<p>Du coup, expliquons. J&rsquo;ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même +occasion découvert <a href="http://getpelican.com">pelican</a>. J&rsquo;ai tout de suite accroché a ce générateur de +site statique en python, du fait de son efficacité, de sa facilité d&rsquo;utilisation et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au +fichiers markdown ou reStructuredText, les passe a la moulinette d&rsquo;un &ldquo;thème&rdquo; +constitué de templates pour les fichiers html et l&rsquo;organisation du projet et +d&rsquo;une partie &ldquo;statique&rdquo; contenant le css, et les autres fichiers nécessaires au projet, et en fait des pages html. </p> <p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #f8f8f2">th</span><span style="color: #960050; background-color: #1e0010">è</span><span style="color: #f8f8f2">me</span> +<span style="color: #960050; background-color: #1e0010">├──</span> <span style="color: #66d9ef">static</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">css</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[css</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">img</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[image</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">js</span> +<span style="color: #960050; background-color: #1e0010">│</span> <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">[javascript</span> <span style="color: #f8f8f2">files]</span> +<span style="color: #960050; background-color: #1e0010">└──</span> <span style="color: #f8f8f2">template</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">base.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">index.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">page.html</span> + <span style="color: #960050; background-color: #1e0010">├─</span> <span style="color: #f8f8f2">[...]</span> + <span style="color: #960050; background-color: #1e0010">└─</span> <span style="color: #f8f8f2">article.html</span> </pre></div> @@ -1127,116 +1389,116 @@ projet, et en fait des pages html. </p> django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a +<p>L&rsquo;un des grands avantages de pelican est aussi la facilité qu&rsquo;il offre quand a la mise a jour du blog.<br /> En effet, il offre un système de Makefiles permettant, grâce a de nombreuses cibles de compilation, de régénérer le site entier, de ne générer que les fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... +fichiers n&rsquo;existant pas la dernière fois, etc&hellip; La gestion du projet en devient donc très simple, puisque après avoir écrit un article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> <p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est +pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c&rsquo;est moi +qui ait modifié les templates et le css), c&rsquo;est lisible (puisque c&rsquo;est du +python, par opposition au PHP&hellip;), et c&rsquo;est plus &ldquo;efficace&rdquo;. Le markdown est très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus +les articles, je n&rsquo;ai pas besoin d&rsquo;un accès continu au net, bref, c&rsquo;est plus efficace.</p> <p>En ce qui concerne les points négatifs : </p> <ul> <li> <p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a + Je vous propose de vous référer a l&rsquo;article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a mon avis sur ce sujet.</p> </li> <li> <p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a + Il va bientôt être remis, c&rsquo;est juste un manque de temps de ma part, mais vu + que toutes les pages passent par les mêmes templates, c&rsquo;est assez facile a faire.</p> </li> <li> <p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> + Pourquoi c&rsquo;est dans les points négatifs, ca?</p> </li> <li> -<p>Temps d'adaptation et d'appréhension du système: +<p>Temps d&rsquo;adaptation et d&rsquo;appréhension du système: Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca + réguliers sur le blog, c&rsquo;est parce que j&rsquo;apprend a me servir de ce système + et que j&rsquo;apprend du css et du html. Ca arrive, ca passera, mais dans tous + les cas ca me permet d&rsquo;apprendre plein de choses, donc je mets plutôt ca dans la catëgorie positive.</p> </li> </ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/%D/redesign-du-blog/Comment Saurik a rooté les Google Glass//wxcafe.net/posts/%D/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu -pour avoir développé Cydia, un "app store" alternatif pour les iTrucs), +<p>Voila, c&rsquo;est mon retour d&rsquo;expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:wxcafe.net,2013-06-12:posts/redesign-du-blog/Comment Saurik a rooté les Google Glass//wxcafe.net/posts/comment-saurik-a-roote-les-google-glass/<p>Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu +pour avoir développé Cydia, un &ldquo;app store&rdquo; alternatif pour les iTrucs), après avoir reçu une paire de Google glass de la part de Google (de -façon assez évidente...), a trouvé intéressant d'obtenir un accès root -sur celles-ci, ce qu'il a accompli très rapidement. Des démentis de la +façon assez évidente&hellip;), a trouvé intéressant d&rsquo;obtenir un accès root +sur celles-ci, ce qu&rsquo;il a accompli très rapidement. Des démentis de la part de Google et de certains autres sites sont vite arrivés, disant que les lunettes possédaient un bootloader débloqué et que de fait, le root était facile a obtenir : il suffisait de débloquer le bootloader, -d'extraire l'OS, de le rooter hors-fonctionnement, puis de le +d&rsquo;extraire l&rsquo;OS, de le rooter hors-fonctionnement, puis de le réinstaller, rooté, sur les lunettes.</p> <p>Le fait est que de débloquer le bootloader laisse une trace permanente -sur les lunettes, et que Saurik n'a pas utilisé cette technique pour +sur les lunettes, et que Saurik n&rsquo;a pas utilisé cette technique pour rooter sa paire. Voyons comment il a fait :</p> -<p><em>Je tiens tout d'abord a préciser que toutes les informations qui vont +<p><em>Je tiens tout d&rsquo;abord a préciser que toutes les informations qui vont suivre sont extraites de <a href="http://www.saurik.com/id/16">cet article</a>, et plus précisément de la -partie "How does this exploit work".  Je tente d'apporter ma maigre +partie &ldquo;How does this exploit work&rdquo;.  Je tente d&rsquo;apporter ma maigre contribution a cette explication.</em></p> -<p>Donc, d'après les témoignages des quelques utilisateurs de Glass dans le +<p>Donc, d&rsquo;après les témoignages des quelques utilisateurs de Glass dans le monde, il semblerait que ces dernières fonctionnent avec un système -d'exploitation Android, avec une nouvelle interface, mais avec les mêmes +d&rsquo;exploitation Android, avec une nouvelle interface, mais avec les mêmes outils internes: un kernel Linux, des outils userland GNU et une machine virtuelle Java Dalvik pour les applications.</p> -<p>Saurik a donc cherché un exploit connu pour cette version d'android, et -l'a appliqué a son problème. L'exploit en question est relativement -simple. Depuis la version 4.0 d'android, le système permet la sauvegarde +<p>Saurik a donc cherché un exploit connu pour cette version d&rsquo;android, et +l&rsquo;a appliqué a son problème. L&rsquo;exploit en question est relativement +simple. Depuis la version 4.0 d&rsquo;android, le système permet la sauvegarde des données des différentes applications, une a une, via ADB (Android -Debug Bridge, un protocole USB permettant l'accès a de nombreuses +Debug Bridge, un protocole USB permettant l&rsquo;accès a de nombreuses fonctions avancées des machines fonctionnant sous android, dont, entre -autre, un shell, un accès au logs de debugging, etc... Cette +autre, un shell, un accès au logs de debugging, etc&hellip; Cette fonctionnalité est bien entendu désactivable.) Ce backup est très simple : il crée un fichier .tgz contenant le dossier de configuration de -l'application. Lors de la restauration, le système supprime la -configuration existante, puis la remplace par celle dans l'archive gzip.</p> +l&rsquo;application. Lors de la restauration, le système supprime la +configuration existante, puis la remplace par celle dans l&rsquo;archive gzip.</p> <p>Le problème de sécurité vient du fait que les applications android voient leurs données stockées dans /data/data/identifiant/, et que -/data/ a pour permissions drwxrwx--x  27  system  system, ce qui +/data/ a pour permissions drwxrwx&ndash;x  27  system  system, ce qui signifie que seul system et les membres du groupe system peuvent lire dessus. Or, le fichier /data/local.prop définit de nombreux paramètres -au démarrage, et notamment un qui permet au système de déterminer s'il -fonctionne dans une VM ou sur un véritable appareil. S'il fonctionne sur +au démarrage, et notamment un qui permet au système de déterminer s&rsquo;il +fonctionne dans une VM ou sur un véritable appareil. S&rsquo;il fonctionne sur une machine virtuelle, il donne les droits root a tout utilisateur se -connectant via ADB, ce qui est ce que l'on cherche pour l'instant. Le +connectant via ADB, ce qui est ce que l&rsquo;on cherche pour l&rsquo;instant. Le fait que /data/ appartienne a system veut dire que le programme de restauration doit être setuid pour accéder aux données a l’intérieur qui -appartiennent a root (soit toutes les applications système d'android, -dont l'application paramètres, et, dans ce cas précis, l'application de +appartiennent a root (soit toutes les applications système d&rsquo;android, +dont l&rsquo;application paramètres, et, dans ce cas précis, l&rsquo;application de log système présente sur les google glass de test. Ainsi, nous avons un processus tournant en tant que root, qui va écrire sur une partition qui nous intéresse des données que nous possédons.</p> -<p>Cependant, un problème reste : le système de restauration d'Android +<p>Cependant, un problème reste : le système de restauration d&rsquo;Android vérifie les données avant de restaurer, et ne restaure pas les symlinks, -ce qui nous empêche d'avoir accès directement a /data/local.prop, le -fichier qu'on cherche a modifier. Cela dit, il nous reste une +ce qui nous empêche d&rsquo;avoir accès directement a /data/local.prop, le +fichier qu&rsquo;on cherche a modifier. Cela dit, il nous reste une possiblité. Plaçons un dossier world-writable dans le fichier de backup, et nous pourrons écrire dedans pendant quelques secondes, le temps que la restauration se termine et que le système remette les permissions en place. Ainsi, nous pouvons créer le fichier /data/local/com.google.glass.logging/whatev/x, lien vers /data/local.prop, et nous avons un toujours un processus tournant en -tant que root qui est en train d'écrire dans ce dossier.</p> +tant que root qui est en train d&rsquo;écrire dans ce dossier.</p> <p>Donc, nous allons lancer deux processus en même temps : </p> <ul> <li> <p>Le premier tentera en boucle de créer le symlink. Il sera consitué de la commande suivante, depuis un shell sur les lunettes :</p> -<div class="highlight"><pre><span class="k">while</span> <span class="o">!</span> <span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">local</span><span class="p">.</span><span class="n">prop</span> <span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">data</span><span class="o">/</span><span class="n">com</span><span class="p">.</span><span class="n">google</span><span class="p">.</span><span class="n">glass</span><span class="p">.</span><span class="n">logging</span><span class="o">/</span><span class="n">whatev</span><span class="o">/</span><span class="n">x</span> <span class="mi">2</span><span class="o">&gt;/</span><span class="n">dev</span><span class="o">/</span><span class="n">null</span> -<span class="k">do</span> <span class="o">:</span> -<span class="n">done</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2&gt;/dev/null +do : +done </pre></div> @@ -1245,10 +1507,10 @@ tant que root qui est en train d'écrire dans ce dossier.</p> <p>Le deuxième sera le processus de restauration de notre exploit. Celui ci, pour une plus grande chance de réussite, devra être suffisamment lourd : au moins \~50Mo. Il devra contenir whatev/bigfile et whatev/x, - pour qu'il crée whatev, prenne du temps a copier bigfile, puis écrive + pour qu&rsquo;il crée whatev, prenne du temps a copier bigfile, puis écrive dans x après que le symlink soit effectif. La commande sera, depuis - l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">restore</span> <span class="n">exploit</span><span class="p">.</span><span class="n">ab</span> + l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb restore exploit.ab </pre></div> @@ -1257,111 +1519,111 @@ tant que root qui est en train d'écrire dans ce dossier.</p> world-readable. Il va commencer a copier le fichier bigfile.<br /> - Le processus de symlink va créer le lien /data/data/com.google.glass.logging/whatev/x, pointant vers - /data/local.prop, puis rendre l'âme proprement.<br /> + /data/local.prop, puis rendre l&rsquo;âme proprement.<br /> - Le processus de restauration, ayant enfin fini de copier whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui est lié a /data/local.prop. Comme le processus est setuid root, il ne se rendra compte de rien, et écrira tout dans /data/local.prop.</p> </li> </ul> -<p>And voilà! On a écrit ce que l'on veut dans /data/local.prop, ce qui -nous permet de faire croire a android qu'il tourne dans une machine -virtuelle (ce que l'on veut, c'est en fait "ro.kernel.qemu=1", qui -indique au noyau qu'il tourne dans qemu, un système de VM).</p> -<p>Il nous reste a rebooter, depuis l'ordinateur host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<p>And voilà! On a écrit ce que l&rsquo;on veut dans /data/local.prop, ce qui +nous permet de faire croire a android qu&rsquo;il tourne dans une machine +virtuelle (ce que l&rsquo;on veut, c&rsquo;est en fait &ldquo;ro.kernel.qemu=1&rdquo;, qui +indique au noyau qu&rsquo;il tourne dans qemu, un système de VM).</p> +<p>Il nous reste a rebooter, depuis l&rsquo;ordinateur host :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Puis nous remontons la partitions système en lecture/écriture (r/w), depuis le host :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;mount -o remount,rw /system&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;mount -o remount,rw /system&quot; </pre></div> -<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l'appareil :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">push</span> <span class="n">su</span> <span class="o">/</span><span class="n">system</span><span class="o">/</span><span class="n">xbin</span> +<p>Nous copions le binaire <a href="https://data.wxcafe.net/uploads/android/glass/su">su</a> vers l&rsquo;appareil :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb push su /system/xbin </pre></div> <p>Nous donnons les bonnes permissions a ce binaire, afin de pouvoir l’exécuter plus tard :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;chmod 6755 /system/xbin/su&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;chmod 6755 /system/xbin/su&quot; </pre></div> <p>Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir redémarrer normalement :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">shell</span> <span class="s">&quot;rm /data/local.prop&quot;</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb shell &quot;rm /data/local.prop&quot; </pre></div> <p>Enfin, nous redemarrons a nouveau :</p> -<div class="highlight"><pre><span class="n">adb</span> <span class="n">reboot</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">adb reboot </pre></div> <p>Et voila, une paire de google glass rootée!</p> -<p>Il est bon de préciser que cette manipulation n'est possible que parce -que les lunettes tournent sous une ancienne version d'android, et que ce +<p>Il est bon de préciser que cette manipulation n&rsquo;est possible que parce +que les lunettes tournent sous une ancienne version d&rsquo;android, et que ce bug a été fixé depuis.</p> <p>Il serait aussi interessant de couvrir les problèmes de vie privée -qu'engendrent les Google Glass, et ce sera fait dans un autre billet.</p> -<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/%D/comment-saurik-a-roote-les-google-glass/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/%D/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j'avais parlé du concept du self-hosting. Il -s'agit de posséder son propre serveur, et donc, par extension, ses +qu&rsquo;engendrent les Google Glass, et ce sera fait dans un autre billet.</p> +<p>A bientôt!</p>WxcafeMon, 06 May 2013 06:24:00 +0200tag:wxcafe.net,2013-05-06:posts/comment-saurik-a-roote-les-google-glass/Monter son propre serveur, partie 1: le serveur et l'apache.//wxcafe.net/posts/monter-son-propre-serveur-partie-1/<p>Il y a un certain temps, j&rsquo;avais parlé du concept du self-hosting. Il +s&rsquo;agit de posséder son propre serveur, et donc, par extension, ses données. </p> -<p>Bien entendu, il n'est pas nécessaire pour cela de posséder +<p>Bien entendu, il n&rsquo;est pas nécessaire pour cela de posséder physiquement son propre serveur (encore que ce soit possible, mais ce -n'est pas le sujet abordé ici.)<br /> +n&rsquo;est pas le sujet abordé ici.)<br /> Nous expliquerons ici les étapes nécessaires pour arriver a avoir un serveur utilisable, du moment ou vous arrivez sur le système fraichement installé, au moment ou vous possédez un serveur avec tous les paquets -nécessaires a l'utilisation que l'on veut en faire ici d'installés. +nécessaires a l&rsquo;utilisation que l&rsquo;on veut en faire ici d&rsquo;installés. Cette partie va consister a paramétrer le système (ici un debian squeeze. Il est bien sur possible de faire la même chose avec a peu près toutes les distributions Linux disponibles, tout comme avec les BSD et tous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x -squeeze, parce que c'est une distribution simple a utiliser comme -serveur, stable, et facile a configurer (puisqu'une bonne partie de la +squeeze, parce que c&rsquo;est une distribution simple a utiliser comme +serveur, stable, et facile a configurer (puisqu&rsquo;une bonne partie de la configuration est déjà faite et incluse dans le paquet), donc adaptée au -but de cet article, a savoir rendre l'installation simple et +but de cet article, a savoir rendre l&rsquo;installation simple et compréhensible).</p> -<p>La première chose a faire est bien entendu d'obtenir le serveur en lui +<p>La première chose a faire est bien entendu d&rsquo;obtenir le serveur en lui même. Cette partie de la chose ne sera pas traitée dans cet article. Il -existe en effet un nombre infini d'obtenir un serveur, que ce soit en le -louant chez OVH/1&amp;1/n'importe quel autre hébergeur commercial, en -participant a un système d'hébergement collaboratif (je vous laisse +existe en effet un nombre infini d&rsquo;obtenir un serveur, que ce soit en le +louant chez OVH/1&amp;1/n&rsquo;importe quel autre hébergeur commercial, en +participant a un système d&rsquo;hébergement collaboratif (je vous laisse chercher), en achetant un serveur et en le faisant fonctionner de chez -vous, en utilisant un vieux PC... Bref, les possibilités sont multiples. +vous, en utilisant un vieux PC&hellip; Bref, les possibilités sont multiples. Dès lors que vous avez accès a un système debian serveur, peu importe sur quel matériel il fonctionne, et a priori peu importe aussi la manière -dont vous y accédez, le résultat est le même (et la procédure aussi...). +dont vous y accédez, le résultat est le même (et la procédure aussi&hellip;). Dans cet article, nous parlerons de la configuration de base, du moment ou vous avez le serveur vierge dans les mains au moment ou vous installez le serveur http.</p> -<p>Dans cet article, lorsque est précisée le type d'IP a utiliser, il -convient de mettre ce type précisément. Quand le type n'est pas +<p>Dans cet article, lorsque est précisée le type d&rsquo;IP a utiliser, il +convient de mettre ce type précisément. Quand le type n&rsquo;est pas précisée, libre a vous de choisir ipv4 ou ipv6.</p> <p>Bref. Commençons au point ou vous avez un accès root a votre serveur, -n'ayant soit aucun mot de passe, soit un choisi par l'hébergeur, et ou -rien n'est configuré. Connectez vous a celui-ci (ssh root@). Commencez +n&rsquo;ayant soit aucun mot de passe, soit un choisi par l&rsquo;hébergeur, et ou +rien n&rsquo;est configuré. Connectez vous a celui-ci (ssh root@). Commencez donc par faire un <code>passwd</code>, pour mettre au plus vite un mot de passe solide sur le compte root. Continuons en allant vite mettre en place le nom de domaine. Pour cela, votre registrar doit vous fournir une -interface vous permettant d'éditer l'entrée DNS pour votre nom de +interface vous permettant d&rsquo;éditer l&rsquo;entrée DNS pour votre nom de domaine. </p> -<p>Cette entrée doit donc pour l'instant ressembler a ca :</p> -<div class="highlight"><pre> <span class="o">&lt;</span><span class="n">votre</span> <span class="n">nom</span> <span class="n">de</span> <span class="n">domaine</span><span class="o">&gt;</span> <span class="n">NS</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">MX</span> <span class="mi">1</span> - <span class="n">IN</span> <span class="n">A</span> <span class="o">&lt;</span><span class="n">IPv4</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> - <span class="n">IN</span> <span class="n">AAAA</span> <span class="o">&lt;</span><span class="n">IPv6</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">serveur</span><span class="o">&gt;</span> +<p>Cette entrée doit donc pour l&rsquo;instant ressembler a ca :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"> &lt;votre nom de domaine&gt; NS 1 + IN MX 1 + IN A &lt;IPv4 de votre serveur&gt; + IN AAAA &lt;IPv6 de votre serveur&gt; </pre></div> <p>Cela vous permet de rediriger tout le trafic se référant a votre nom de domaine vers votre ip (le fonctionnement exact du DNS est assez -compliqué a expliquer, donc on va dire que c'est de la magie pour -l'instant, ca sera peut être le sujet d'un autre article), et d'indiquer +compliqué a expliquer, donc on va dire que c&rsquo;est de la magie pour +l&rsquo;instant, ca sera peut être le sujet d&rsquo;un autre article), et d&rsquo;indiquer que les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers votre serveur, ce qui est un bon début. Faisons un petit point sécurité ici : pour accéder a votre serveur, il vous suffit actuellement de taper @@ -1370,50 +1632,50 @@ le mot de passe root.</p> bruteforcer le mot de passe. (<em>Relativement</em> assez simple, en fonction du nombre de caractères, ça prend plus ou moins de temps, et si vous avez suffisamment de caractères, ça peut prendre un temps assez -conséquent. Cela dit, il vaut mieux être prudent...) Ainsi, nous allons -arrêter d'utiliser root et nous allons commencer a utiliser des couples +conséquent. Cela dit, il vaut mieux être prudent&hellip;) Ainsi, nous allons +arrêter d&rsquo;utiliser root et nous allons commencer a utiliser des couples clés publiques/privées pour nous connecter au serveur.<br /> -Cela se fait en deux temps : tout d'abord, créer un nouvel utilisateur, -grâce auquel nous administrerons le serveur a l'avenir; puis configurer -OpenSSH pour que celui ci n'accepte que les connections par clés et plus +Cela se fait en deux temps : tout d&rsquo;abord, créer un nouvel utilisateur, +grâce auquel nous administrerons le serveur a l&rsquo;avenir; puis configurer +OpenSSH pour que celui ci n&rsquo;accepte que les connections par clés et plus celles sur root.</p> <p>Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se fait avec adduser, qui est interactif (vous ne devriez pas avoir de -problème avec, puisqu'il crée tout les dossiers et fichiers nécessaires, +problème avec, puisqu&rsquo;il crée tout les dossiers et fichiers nécessaires, et vous pose toutes les questions utiles pour vous aider.) sinon, vous -devrez utiliser useradd, qui est (en plus d'être très chiant a -distinguer de l'autre, bien plus chiant a utiliser. (adduser est en fait -un simple script permettant l'utilisation d'useradd plus facilement.)</p> +devrez utiliser useradd, qui est (en plus d&rsquo;être très chiant a +distinguer de l&rsquo;autre, bien plus chiant a utiliser. (adduser est en fait +un simple script permettant l&rsquo;utilisation d&rsquo;useradd plus facilement.)</p> <p>Avec adduser, vous pouvez soit utiliser le mode interactif en tapant juste <code>adduser &lt;username&gt;</code>, soit utiliser le mode non-interactif en faisant un <code>adduser --group &lt;username&gt;</code></p> <p>Avec useradd, vous devrez utiliser la commande suivante : <code>useradd -m -N -g &lt;username&gt;</code>. Cette commande ajoutera un utilisateur, créera -son dossier principal dans /home/, et l'ajoutera au groupe du même nom +son dossier principal dans /home/, et l&rsquo;ajoutera au groupe du même nom que lui (ce qui est en général nécessaire pour des questions de vie privée).</p> -<p>Il convient maintenant d'ajouter cet utilisateur aux groupes qu'il sera +<p>Il convient maintenant d&rsquo;ajouter cet utilisateur aux groupes qu&rsquo;il sera amené a administrer: <code>usermod &lt;username&gt; -a -G www-data postfix users staff sudo wheel</code>, puis de changer son mot de passe <code>passwd</code>. Enfin, ajoutons le aux utilisateurs autorisés a utiliser sudo: <code>echo "%sudo ALL=(ALL) ALL" &gt;&gt; /etc/sudoers</code><br /> -Enfin, changeons d'utilisateur : <code>su</code>. A ce point, vous avec un +Enfin, changeons d&rsquo;utilisateur : <code>su</code>. A ce point, vous avec un utilisateur complètement fonctionnel et utilisable pour toutes les -taches d'administration. Si vous devez encore utiliser root, c'est que +taches d&rsquo;administration. Si vous devez encore utiliser root, c&rsquo;est que quelque chose ne va pas.</p> -<p>Vous êtes donc loggés sur le système en tant qu'utilisateur normal. Nous +<p>Vous êtes donc loggés sur le système en tant qu&rsquo;utilisateur normal. Nous allons maintenant passer a la phase 2 du plan : désactiver le login ssh root et le login ssh par mot de passe.<br /> -Tout d'abord, qu'est-ce qu'un login par clé ssh? Il s'agit en fait d'un +Tout d&rsquo;abord, qu&rsquo;est-ce qu&rsquo;un login par clé ssh? Il s&rsquo;agit en fait d&rsquo;un système assez semblable a celui vous permettant de chiffrer vos mail : vous avec une clé publique et une clé privée sur le client, et la clé publique est aussi sur le serveur. Lorsque vous vous connectez, openssh vérifie que vous possédez la clé privée qui correspond a la clé publique stockée sur le serveur (pour votre utilisateur, bien entendu). Il est -également possible d'utiliser plusieurs clés publique pour chaque<br /> +également possible d&rsquo;utiliser plusieurs clés publique pour chaque<br /> utilisateur.</p> <p>Bref, maintenant que nous avons la théorie, passons a la pratique : tout -d'abord, il nous faut générer un couple de clés publique/privée sur le +d&rsquo;abord, il nous faut générer un couple de clés publique/privée sur le client. Openssh fait ça via la commande <code>ssh-keygen -t rsa</code> (le -t rsa précise a ssh que nous voulons un chiffrement rsa, qui est suffisamment solide pour cette utilisation.) Entrez les informations que @@ -1421,12 +1683,11 @@ ssh-keygen vous demande. Trois fichiers devraient maintenant se trouver dans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.<br /> known_hosts liste les serveurs auxquels vous vous êtes connectés déjà une fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous -intéresse ici c'est id_rsa et id_rsa.pub . id_rsa contient votre clé +intéresse ici c&rsquo;est id_rsa et id_rsa.pub . id_rsa contient votre clé privée, sauvegardez la sur une clé USB ou notez la sur un bout de papier, si vous la perdez, vous ne pourrez plus vous connecter au -serveur. (planquez la clé usb/le bout de papier...) id_rsa.pub, quand a -lui, contient votre clé publique. Copiez la sur le serveur, avec un -<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou +serveur. (planquez la clé usb/le bout de papier&hellip;) id_rsa.pub, quand a +lui, contient votre clé publique. Copiez la sur le serveur, avec un<code>scp ~/.ssh/id_rsa.pub &lt;username&gt;@&lt;votre nom de domaine&gt;:~/</code> , ou en la copiant a la main, si ça vous amuse. </p> <p>Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel sur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra. @@ -1438,19 +1699,19 @@ domaine&gt;</code>), et il ne devrait pas vous demander de mot de pass il vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré, donc vérifiez que vous avez suivi correctement les instruction ci-dessus.</strong></p> -<p>Continuons. Il ne nous reste plus qu'a installer le serveur web, et a le +<p>Continuons. Il ne nous reste plus qu&rsquo;a installer le serveur web, et a le configurer: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> \ -<span class="n">apache2</span> <span class="n">apache2</span><span class="mf">.2</span><span class="o">-</span><span class="n">common</span> <span class="n">apache2</span><span class="o">-</span><span class="n">doc</span> <span class="n">apache2</span><span class="o">-</span><span class="n">mpm</span><span class="o">-</span><span class="n">prefork</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">utils</span> <span class="n">libexpat1</span> <span class="n">ssl</span><span class="o">-</span><span class="n">cert</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">php5</span> \ -<span class="n">php5</span> <span class="n">php5</span><span class="o">-</span><span class="n">common</span> <span class="n">php5</span><span class="o">-</span><span class="n">gd</span> <span class="n">php5</span><span class="o">-</span><span class="n">cgi</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">fcgid</span> \ -<span class="n">apache2</span><span class="o">-</span><span class="n">suexec</span> <span class="n">php</span><span class="o">-</span><span class="n">pear</span> <span class="n">php</span><span class="o">-</span><span class="n">auth</span> <span class="n">php5</span><span class="o">-</span><span class="n">mcrypt</span> <span class="n">mcrypt</span> \ -<span class="n">php5</span><span class="o">-</span><span class="n">imagick</span> <span class="n">imagemagick</span> <span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">suphp</span> <span class="n">libruby</span> \ -<span class="n">libapache2</span><span class="o">-</span><span class="n">mod</span><span class="o">-</span><span class="n">ruby</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%">sudo apt-get install \ +apache2 apache2.2-common apache2-doc apache2-mpm-prefork \ +apache2-utils libexpat1 ssl-cert libapache2-mod-php5 \ +php5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \ +apache2-suexec php-pear php-auth php5-mcrypt mcrypt \ +php5-imagick imagemagick libapache2-mod-suphp libruby \ +libapache2-mod-ruby </pre></div> -<p>(faisons large, on aura besoin de l'excédent plus tard...), puis activons les<br /> +<p>(faisons large, on aura besoin de l&rsquo;excédent plus tard&hellip;), puis activons les<br /> mods apache en faisant <code>a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest</code>, et faisons en sorte que ces activations soient prises en compte par apache via un <code>sudo service apache2 @@ -1460,46 +1721,46 @@ comment fonctionner sur notre nom de domaine et ou trouver les fichiers a envoyer. </p> <p>Pour cela, nous allons faire un simple <code>ln -s /etc/apache2/sites-{available,enabled}/default</code>, car apache est assez sympa pour nous filer un fichier de configuration par défaut. Il nous -faut encore l'éditer, en changeant l'adresse mail au début du document +faut encore l&rsquo;éditer, en changeant l&rsquo;adresse mail au début du document par la votre, et en changeant <code>AllowOverride none</code> en <code>AllowOverride All</code>, -et enfin redémarrer apache pour qu'il prenne en compte les +et enfin redémarrer apache pour qu&rsquo;il prenne en compte les modifications, par un <code>sudo service apache2 restart</code> </p> <p>Et maintenant, il vous reste a apprendre le html, parce que ca y est, votre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on -verra l'installation du serveur mail (c'est suffisamment complexe pour -prendre un article seul...)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/%D/monter-son-propre-serveur-partie-1/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are +verra l&rsquo;installation du serveur mail (c&rsquo;est suffisamment complexe pour +prendre un article seul&hellip;)</p>WxcafeMon, 18 Mar 2013 09:51:00 +0100tag:wxcafe.net,2013-03-18:posts/monter-son-propre-serveur-partie-1/Pourquoi je vais quitter linux pour passer a FreeBSD.//wxcafe.net/posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/<p><em>This is subject to debate, and as most of the actors in this field are not French-speaker, there is an English version of this text <a href="http://data.wxcafe.net/archives/126">here</a></em></p> -<p>Bon, voila. J'ai passé le cap. Je suis sous GNU/Linux depuis un certain +<p>Bon, voila. J&rsquo;ai passé le cap. Je suis sous GNU/Linux depuis un certain temps, maintenant, et depuis un certain temps je remarque des -changements malvenus. Bien entendu, au début, je n'avais pas les +changements malvenus. Bien entendu, au début, je n&rsquo;avais pas les connaissances nécessaires pour comprendre ne serait-ce que ces modifications existaient. Et puis certaines sont arrivées avant que je -n'ai même idée que quelque chose dans mon système d'exploitation avait +n&rsquo;ai même idée que quelque chose dans mon système d&rsquo;exploitation avait cette fonction la. Par exemple, udev, ou policykit/consolekit/. A -l'époque, je n'avais aucune idée de la façon dont les disques étaient -montés sur mon système. Le premier système non-Windows que j'ai utilisé +l&rsquo;époque, je n&rsquo;avais aucune idée de la façon dont les disques étaient +montés sur mon système. Le premier système non-Windows que j&rsquo;ai utilisé fut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je cherche a démonter le système pour comprendre comment il fonctionnait en -profondeur. Cependant, avec le temps, les connaissances s'accumulant et -mon niveau de compréhension du système s'améliorant, j'ai commencé a -remarquer que certain bouts de l'OS ne collaient pas exactement avec les -autres. Bien sur, je ne saurais dire si cette réalisation s'est faite a -cause de la recrudescence de ces bouts d'OS, ou bien juste a cause de ma -compréhension plus poussée. Toujours est-il que ces petits bouts d'OS ne +profondeur. Cependant, avec le temps, les connaissances s&rsquo;accumulant et +mon niveau de compréhension du système s&rsquo;améliorant, j&rsquo;ai commencé a +remarquer que certain bouts de l&rsquo;OS ne collaient pas exactement avec les +autres. Bien sur, je ne saurais dire si cette réalisation s&rsquo;est faite a +cause de la recrudescence de ces bouts d&rsquo;OS, ou bien juste a cause de ma +compréhension plus poussée. Toujours est-il que ces petits bouts d&rsquo;OS ne s’adaptant pas au reste du système se faisaient de plus en plus visible. -Et puis, un jour, j'en ai eu marre de voir unity sur ma machine, et j'ai -choisi de passer a Archlinux. C'était avant le passage a systemd. Ce -système me convenait bien. Si je n'installais pas Gnome, ce que je ne +Et puis, un jour, j&rsquo;en ai eu marre de voir unity sur ma machine, et j&rsquo;ai +choisi de passer a Archlinux. C&rsquo;était avant le passage a systemd. Ce +système me convenait bien. Si je n&rsquo;installais pas Gnome, ce que je ne comptais pas faire, il ne me forçait pas a installer un *kit -quelconque, ni dbus. Oui, udev était toujours la, mais c'était le moins +quelconque, ni dbus. Oui, udev était toujours la, mais c&rsquo;était le moins envahissant de ceux la.</p> <p>Mais Archlinux est passé a systemd. Attention hein, je ne critique ici ni systemd, ni udev, ni même les <em>kit, et surtout pas Archlinux. Les premiers sont probablement très efficaces dans leur domaine, et le -second n'a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la -distribution d'avoir au plus vite les dernières versions de tout. +second n&rsquo;a pas <strong>vraiment</strong> eu le choix, rapport a la philosophie de la +distribution d&rsquo;avoir au plus vite les dernières versions de tout. Cependant, systemd, tout comme udev et les </em>kits (bien que ce ne soient -pas les seuls a faire ça...) ont un problème très précis, qui n'importe +pas les seuls a faire ça&hellip;) ont un problème très précis, qui n&rsquo;importe pas a tout le monde, mais qui est très gênant pour ceux a qui il importe, et ce problème est que ces systèmes ne respectent absolument pas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en @@ -1508,1616 +1769,428 @@ ces 9 principes :</p> <li>Ce qui est petit est beau</li> <li>Faites en sorte que chaque programme fasse une chose, bien.</li> <li>Faites un prototype aussi vite que possible</li> -<li>Choisissez la portabilité plutôt que l'efficacité</li> +<li>Choisissez la portabilité plutôt que l&rsquo;efficacité</li> <li>Stockez les données dans des fichiers textes.</li> <li>Utilisez ce qui existe déjà a votre avantage. [<strong>1</strong>]</li> <li>Utilisez des scripts shells pour faciliter la portabilité et la réutilisation.</li> -<li>Évitez les UI qui "capturent" l'utilisateur.</li> +<li>Évitez les UI qui &ldquo;capturent&rdquo; l&rsquo;utilisateur.</li> <li>Faites de chaque programme un filtre.</li> </ol> -<p>Alors bien entendu, un système d'exploitation est fait pour évoluer, et -on pourrait penser qu'UNIX a fait son temps. Cependant, ce n'est pas -exactement la façon dont l'informatique fonctionne. Effectivement, les -standards, les systèmes d'exploitation, les logiciels, tout doit évoluer -- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n'est -pas d'UNIX que nous parlons ici. C'est de la <em>philosophie</em> UNIX. Et -celle-ci n'a pas fait son temps, <strong>elle a fait ses preuves.</strong> La -philosophie UNIX, en plus d'être efficace sur le papier, a aussi 44 ans -de tests derrière elle, et fonctionne aussi bien qu'au premier jour.<br /> -La philosophie UNIX est aussi et surtout une garantie d'utilisabilité +<p>Alors bien entendu, un système d&rsquo;exploitation est fait pour évoluer, et +on pourrait penser qu&rsquo;UNIX a fait son temps. Cependant, ce n&rsquo;est pas +exactement la façon dont l&rsquo;informatique fonctionne. Effectivement, les +standards, les systèmes d&rsquo;exploitation, les logiciels, tout doit évoluer +- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n&rsquo;est +pas d&rsquo;UNIX que nous parlons ici. C&rsquo;est de la <em>philosophie</em> UNIX. Et +celle-ci n&rsquo;a pas fait son temps, <strong>elle a fait ses preuves.</strong> La +philosophie UNIX, en plus d&rsquo;être efficace sur le papier, a aussi 44 ans +de tests derrière elle, et fonctionne aussi bien qu&rsquo;au premier jour.<br /> +La philosophie UNIX est aussi et surtout une garantie d&rsquo;utilisabilité et de simplicité pour les administrateurs systèmes, pour les -développeurs, bref pour tous ceux qui font de l'informatique -<em>sérieusement</em> (je ne dis pas que les autres métiers de l'informatique +développeurs, bref pour tous ceux qui font de l&rsquo;informatique<em>sérieusement</em> (je ne dis pas que les autres métiers de l&rsquo;informatique ne sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce sont ceux qui sont les plus proches du système).</p> -<p>Tous OS se doit d'avoir un système standardisé pour faire communiquer +<p>Tous OS se doit d&rsquo;avoir un système standardisé pour faire communiquer les programmes entre eux. UNIX a un système de pipes, des sortes de -fichiers spéciaux permettant d'échanger des informations. C'est -efficace, ça respecte le "tout est fichier", c'est standard, c'est +fichiers spéciaux permettant d&rsquo;échanger des informations. C&rsquo;est +efficace, ça respecte le &ldquo;tout est fichier&rdquo;, c&rsquo;est standard, c&rsquo;est simple a comprendre, bref, ça fonctionne parfaitement. Dbus vient -remplacer ça, avec une interface qui n'est explicitement pas faite pour -être utilisée a la ligne de commande mais a l'aide d'APIs, et un -programme monolithique qui effectue sa tache d'une façon complètement -obscure pour l'utilisateur. Alors bien sur, il l'effectue d'une façon -efficace, cette tache. Oui, ça va plus vite qu'avant. Oui, c'est plus -"rangé", ça fait moins "fouillis". Mais c'est moins efficace. C'est -<em>beaucoup</em> moins utilisable pour l'utilisateur final. C'est -horriblement chiant pour les sysadmins, parce qu'ils ne peuvent plus -lire facilement les échanges entre programmes. C'est peu pratique, en +remplacer ça, avec une interface qui n&rsquo;est explicitement pas faite pour +être utilisée a la ligne de commande mais a l&rsquo;aide d&rsquo;APIs, et un +programme monolithique qui effectue sa tache d&rsquo;une façon complètement +obscure pour l&rsquo;utilisateur. Alors bien sur, il l&rsquo;effectue d&rsquo;une façon +efficace, cette tache. Oui, ça va plus vite qu&rsquo;avant. Oui, c&rsquo;est plus +&ldquo;rangé&rdquo;, ça fait moins &ldquo;fouillis&rdquo;. Mais c&rsquo;est moins efficace. C&rsquo;est<em>beaucoup</em> moins utilisable pour l&rsquo;utilisateur final. C&rsquo;est +horriblement chiant pour les sysadmins, parce qu&rsquo;ils ne peuvent plus +lire facilement les échanges entre programmes. C&rsquo;est peu pratique, en fin de compte. Et ça ne respecte pas du tout la philosophie UNIX.<br /> Systemd prend le même parti de créer une interface unifiée, accessible via des appels a des APIs uniquement, complètement obscure, extrêmement abstraite, bien entendu monolithique, et très peu ouverte a la -modification par l'utilisateur final. Alors oui, il parait que ça -augmente la vitesse de boot. Eh bien, au risque d'en choquer quelques +modification par l&rsquo;utilisateur final. Alors oui, il parait que ça +augmente la vitesse de boot. Eh bien, au risque d&rsquo;en choquer quelques uns, je préfère avoir un système qui boote <em>légèrement</em> plus lentement et que je puisse modifier facilement, et qui soit ouvert, compréhensible -et distribué. C'est presque comme si les projets freedesktop.org avaient +et distribué. C&rsquo;est presque comme si les projets freedesktop.org avaient pour but de remplacer la base UNIX de linux en créant un système -concurrent, bâtard, bâti sur le kernel Linux mais n'employant plus les -systèmes basiques d'UNIX.</p> -<p>Le problème est qu'il est facilement visible que la direction prise par -la communauté Linux n'est pas celle du retour sur les systèmes UNIX ni +concurrent, bâtard, bâti sur le kernel Linux mais n&rsquo;employant plus les +systèmes basiques d&rsquo;UNIX.</p> +<p>Le problème est qu&rsquo;il est facilement visible que la direction prise par +la communauté Linux n&rsquo;est pas celle du retour sur les systèmes UNIX ni celle du développement de solutions respectant la philosophie UNIX, mais -remises au gout du jour (?), mais est bien d'accepter et de pousser les +remises au gout du jour (?), mais est bien d&rsquo;accepter et de pousser les changements apportés par les projets freedesktop.org directement dans le cœur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font partie de nombreux développeurs de ces projets), a déjà adopté tous ces -changements (archlinux aussi, mais pour d'autres raisons...), et on peut -compter sur le fait que les autres distributions l'adopteront un jour ou -l'autre.</p> -<p>Bon, maintenant que nous avons, si ce n'est démontré la nocivité de ces -systèmes, tout du moins exprimé les raisons qui font qu'ils me -déplaisent, on pourrait penser qu'il suffit de passer a une distribution -n'incluant pas systemd, voire a une distribution n'incluant pas du tout +changements (archlinux aussi, mais pour d&rsquo;autres raisons&hellip;), et on peut +compter sur le fait que les autres distributions l&rsquo;adopteront un jour ou +l&rsquo;autre.</p> +<p>Bon, maintenant que nous avons, si ce n&rsquo;est démontré la nocivité de ces +systèmes, tout du moins exprimé les raisons qui font qu&rsquo;ils me +déplaisent, on pourrait penser qu&rsquo;il suffit de passer a une distribution +n&rsquo;incluant pas systemd, voire a une distribution n&rsquo;incluant pas du tout de contenus freedesktop.org, et de vivre avec le fait de ne pas être sur archlinux. Cependant, avec un peu de réflexion, on voit que si des distributions comme archlinux et Fedora ont adopté systemd (et -qu'OpenSUSE est en train de l’intégrer), il est probable que cela +qu&rsquo;OpenSUSE est en train de l’intégrer), il est probable que cela devienne un standard au fil des années, et que seuls survivent systemd -et upstart, le gestionnaire de démarrage d'ubuntu, qui ne changera +et upstart, le gestionnaire de démarrage d&rsquo;ubuntu, qui ne changera probablement pas (je les vois mal revenir en arrière sur ce point.) -Toujours est-il que l'init héritée du System V semble condamnée a mourir +Toujours est-il que l&rsquo;init héritée du System V semble condamnée a mourir sous Linux. Il pourrait être judicieux de passer sous debian squeeze, qui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne la recevra probablement que dans 2/3 ans. Cependant, cette période est -toujours trop courte, et met sur mon système d'exploitation une date -d'expiration, chose qui ne me plait que moyennement. Non, la solution -est de passer sous un système autre, qui ait son propre système d'init +toujours trop courte, et met sur mon système d&rsquo;exploitation une date +d&rsquo;expiration, chose qui ne me plait que moyennement. Non, la solution +est de passer sous un système autre, qui ait son propre système d&rsquo;init (ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options -principales s'ouvrent a moi: OpenSolaris et *BSD. Minix n'est pas -vraiment un choix, vu le peu de programmes qu'il permet de faire -fonctionner et le fait qu'il ne soit disponible que sur i386, ce qui -n'est pas vraiment avantageux au vu de mon système en x86_64. Haiku -n'est pas un choix non plus, puisque le but est de rester dans une +principales s&rsquo;ouvrent a moi: OpenSolaris et *BSD. Minix n&rsquo;est pas +vraiment un choix, vu le peu de programmes qu&rsquo;il permet de faire +fonctionner et le fait qu&rsquo;il ne soit disponible que sur i386, ce qui +n&rsquo;est pas vraiment avantageux au vu de mon système en x86_64. Haiku +n&rsquo;est pas un choix non plus, puisque le but est de rester dans une optique UNIX.</p> -<p>OpenSolaris est un système d'exploitation tout a fait valable. Je n'ai +<p>OpenSolaris est un système d&rsquo;exploitation tout a fait valable. Je n&rsquo;ai en théorie aucun problème sur cet OS, sauf que certains choix de design -ne correspondent pas du tout a l'idée que j'ai d'un OS. En effet, +ne correspondent pas du tout a l&rsquo;idée que j&rsquo;ai d&rsquo;un OS. En effet, OpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de ses outils, avec des paquets modifiés pour les rendre plus simples a utiliser (fichiers de configuration fournis par défaut, par exemple, et -autres patchs "release-only"), et une tendance a faire des scripts et -des outils installés par défaut pour tout et n'importe quoi. Bref, cela -n'est pas le sujet. Il convient aussi de voir qu'avec la récente +autres patchs &ldquo;release-only&rdquo;), et une tendance a faire des scripts et +des outils installés par défaut pour tout et n&rsquo;importe quoi. Bref, cela +n&rsquo;est pas le sujet. Il convient aussi de voir qu&rsquo;avec la récente acquisition de Sun par Oracle, il est possible que le projet OpenSolaris -n'ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du -projet affiche d'ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> -<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu'OpenBSD, NetBSD -ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c'est +n&rsquo;ait pas de très beaux jours devant lui (la <a href="http://hub.opensolaris.org/bin/view/Main/">page d’accueil</a> du +projet affiche d&rsquo;ailleurs un ÉNORME logo Oracle, du meilleur gout.)</p> +<p>Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu&rsquo;OpenBSD, NetBSD +ou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c&rsquo;est simple : pour aucune raison particulière. OpenBSD et NetBSD ont pour -réputation d'être orientées sécurité, et d'après ce que j'ai pu en voir -DFBSD ressemble aussi au système de l'assistance a l'user a outrance -décris plus haut. Mais la vérité est que je n'ai pas fait suffisamment +réputation d&rsquo;être orientées sécurité, et d&rsquo;après ce que j&rsquo;ai pu en voir +DFBSD ressemble aussi au système de l&rsquo;assistance a l&rsquo;user a outrance +décris plus haut. Mais la vérité est que je n&rsquo;ai pas fait suffisamment de recherches et que FreeBSD ne va me voir arriver que par hasard, parce -qu'entre toutes les BSD ca me semble la plus sympa et la plus agréable a -utiliser, plus le fait que le système de ports me convient bien (j'aime +qu&rsquo;entre toutes les BSD ca me semble la plus sympa et la plus agréable a +utiliser, plus le fait que le système de ports me convient bien (j&rsquo;aime pouvoir configurer mes logiciels de façon assez profonde.)</p> -<p>Voila, c'est mon avis sur ce "problème" actuel du monde de Linux. Bien +<p>Voila, c&rsquo;est mon avis sur ce &ldquo;problème&rdquo; actuel du monde de Linux. Bien entendu, je continuerai a utiliser Linux, et je ne peux qu’espérer que les systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins -n'apparaissent jamais chez certaines distributions, créant de ce fait un +n&rsquo;apparaissent jamais chez certaines distributions, créant de ce fait un choix pour les utilisateurs.<br /> -[1]: Je n'ai pas trouvé de traduction satisfaisante a "software leveraging", mais l'idée est la...*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/%D/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/%D/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> -J'ai annoncé il y a environ 20 jours que j'avais pour projet de faire +[1]: Je n&rsquo;ai pas trouvé de traduction satisfaisante a &ldquo;software leveraging&rdquo;, mais l&rsquo;idée est la&hellip;*</p>WxcafeMon, 04 Feb 2013 17:41:00 +0100tag:wxcafe.net,2013-02-04:posts/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd/Update et pensées a propos du Raspberry Pi//wxcafe.net/posts/update-et-pensees-a-propos-du-raspberry-pi/<p>Bon.<br /> +J&rsquo;ai annoncé il y a environ 20 jours que j&rsquo;avais pour projet de faire une Piratebox basée sur un Raspberry Pi, <del>astucieusement</del> nommée -PiRatBox. Il se trouve qu'après de nombreux essais, un problème -récurrent apparait: le Raspberry Pi n'est pas capable de fournir assez +PiRatBox. Il se trouve qu&rsquo;après de nombreux essais, un problème +récurrent apparait: le Raspberry Pi n&rsquo;est pas capable de fournir assez de courant par défaut pour faire fonctionner a la fois un disque dur et une antenne WiFi.<br /> -Alors, autant il me semble évident qu'avec une -alimentation provenant d'un port USB a 2A (max), je n'avais pas -énormément de chances d'avoir 2A sur chacun des ports host du Raspi, +Alors, autant il me semble évident qu&rsquo;avec une +alimentation provenant d&rsquo;un port USB a 2A (max), je n&rsquo;avais pas +énormément de chances d&rsquo;avoir 2A sur chacun des ports host du Raspi, autant avoir moins de 250 mA sur chacun de ces ports me semble un tout petit peu exagéré en terme de rentabilité. </p> <p>De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me -servant a rien) (vous savez, celui qui est monté en USB...), qui +servant a rien) (vous savez, celui qui est monté en USB&hellip;), qui consomme énormément, est assez louche. Il devrait toujours être possible de désactiver une device USB, me semble-t-il, au niveau logiciel. La, -bien qu'il soit surement possible de la désactiver au niveau du kernel, -il n'est pas <strong>simplement</strong> possible de la "débrancher". Ce qui est bien +bien qu&rsquo;il soit surement possible de la désactiver au niveau du kernel, +il n&rsquo;est pas <strong>simplement</strong> possible de la &ldquo;débrancher&rdquo;. Ce qui est bien chiant, étant donné le besoin évident de puissance électrique dans lequel on se retrouve. </p> -<p>Bon, je dois avouer n'avoir pas testé de lancer les différents services +<p>Bon, je dois avouer n&rsquo;avoir pas testé de lancer les différents services composant le système des piratebox sous arch, pour la simple <del>et -bonne</del> raison qu'arch utilise systemd et qu'il n'existe pas de wrapper -systemd pour les daemons piratebox, et que j'ai la flemme d'en faire, +bonne</del> raison qu&rsquo;arch utilise systemd et qu&rsquo;il n&rsquo;existe pas de wrapper +systemd pour les daemons piratebox, et que j&rsquo;ai la flemme d&rsquo;en faire, parce que systemd est une horreur a utiliser avec les scripts init. Donc -non, j'utiliserai debian. Le problème d'utiliser debian dans ce cas +non, j&rsquo;utiliserai debian. Le problème d&rsquo;utiliser debian dans ce cas précis est que apt/dpkg a une gestion des dépendances dans un sens mais -pas dans l'autre, en ce sens que si on installe un package "haut", c'est +pas dans l&rsquo;autre, en ce sens que si on installe un package &ldquo;haut&rdquo;, c&rsquo;est a dire dépendant de plusieurs autres packages, apt/dpkg se charge -efficacement d'installer toutes les dépendances nécessaires, tandis que -si on désinstalle un package "bas", c'est a dire sur lequel de nombreux +efficacement d&rsquo;installer toutes les dépendances nécessaires, tandis que +si on désinstalle un package &ldquo;bas&rdquo;, c&rsquo;est a dire sur lequel de nombreux autres packages dépendent, apt/dpkg ne désinstalle pas ces packages -"hauts", ce qui pose un vrai problème quand on se retrouve sur un -Raspberry Pi, puisqu'il n'y a pas de moyen "facile" de choisir ce qui -sera installé sur le système avant l'installation proprement dite -(puisque le moyen "universel" d'installation sur Raspberry Pi est le dd +&ldquo;hauts&rdquo;, ce qui pose un vrai problème quand on se retrouve sur un +Raspberry Pi, puisqu&rsquo;il n&rsquo;y a pas de moyen &ldquo;facile&rdquo; de choisir ce qui +sera installé sur le système avant l&rsquo;installation proprement dite +(puisque le moyen &ldquo;universel&rdquo; d&rsquo;installation sur Raspberry Pi est le dd vers la SD qui sert de disque système.)</p> -<p>Il y a <strong>énormément</strong> d'autres critiques que l'ont pourrait faire -concernant le Raspberry Pi. Son système de démarrage a s'arracher les +<p>Il y a <strong>énormément</strong> d&rsquo;autres critiques que l&rsquo;ont pourrait faire +concernant le Raspberry Pi. Son système de démarrage a s&rsquo;arracher les cheveux, par exemple. En effet, plutôt que de faire comme tout pc normalement constitué ou la partie calcul démarre, lance le bootloader, -cherche le kernel de l'OS qui lui même se lance, initialise le hardware, -etc..., a un système bâtard du au fait que la puce au centre de la carte +cherche le kernel de l&rsquo;OS qui lui même se lance, initialise le hardware, +etc&hellip;, a un système bâtard du au fait que la puce au centre de la carte est a la base une puce graphique a laquelle on a greffé un cœur de -calcul (probablement au fond d'une cour d'immeuble, dans les quartiers -pauvres de Bratislava, vu la propreté de la greffe...), et le moyen le -plus efficace qu'aient trouvé les personnes ayant implémenté cette +calcul (probablement au fond d&rsquo;une cour d&rsquo;immeuble, dans les quartiers +pauvres de Bratislava, vu la propreté de la greffe&hellip;), et le moyen le +plus efficace qu&rsquo;aient trouvé les personnes ayant implémenté cette atrocité de gérer le boot est donc de faire démarrer le cœur graphique en premier, ce dernier exécute un code propriétaire pour démarrer le cœur de calcul, qui a son tour lance le bootloader qui cherche le kernel -etc... </p> +etc&hellip; </p> <p>Ce qui non seulement complique énormément le boot, non seulement ajoute -du code propriétaire a un projet se disant libre, mais en plus n'est -<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, -oui, mais uniquement quand c'est bien réalisé, sinon je dis non. </p> -<p>Enfin, le projet que j'avais est toujours en cours de réalisation. Je -le terminerai dès que j'aurai récupéré les outils nécessaires pour +du code propriétaire a un projet se disant libre, mais en plus n&rsquo;est<strong>visiblement</strong> pas fait pour être utilisé de cette manière. Le hack, +oui, mais uniquement quand c&rsquo;est bien réalisé, sinon je dis non. </p> +<p>Enfin, le projet que j&rsquo;avais est toujours en cours de réalisation. Je +le terminerai dès que j&rsquo;aurai récupéré les outils nécessaires pour monter mon alimentation personnalisée pour le Raspberry Pi. Et une fois que cela sera fait, ce Raspi restera une Piratebox pour le reste de sa -vie. Les problèmes qu'il m'a posé, qu'il n'aurait pas du me poser, m'ont -trop agacé pour que j'aie envie de le sortir et de jouer avec une fois +vie. Les problèmes qu&rsquo;il m&rsquo;a posé, qu&rsquo;il n&rsquo;aurait pas du me poser, m&rsquo;ont +trop agacé pour que j&rsquo;aie envie de le sortir et de jouer avec une fois sa mission remplie. </p> -<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/%D/update-et-pensees-a-propos-du-raspberry-pi/Update//wxcafe.net/posts/%D/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/%D/update/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous +<p>Dommage.</p>WxcafeSun, 27 Jan 2013 01:55:00 +0100tag:wxcafe.net,2013-01-27:posts/update-et-pensees-a-propos-du-raspberry-pi/Update//wxcafe.net/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la +fabrication d&rsquo;une PirateBox basée sur un Raspberry Pi. Voila, a bientôt +sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:wxcafe.net,2013-01-05:posts/update/Mutt ou le client email le meilleur moins mauvais//wxcafe.net/posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/<p>Les clients mails ont une particularité en commun : ils sont tous <del>très</del> mauvais. Cela pour nombre de raisons, mais la principale reste que leurs interfaces/raccourcis claviers ne sont pas efficaces pour une utilisation <strong>a la</strong> UNIX<br /> -Cependant, un d'entre eux se démarque par sa moins-mauvais-itude, c'est +Cependant, un d&rsquo;entre eux se démarque par sa moins-mauvais-itude, c&rsquo;est le relativement bien connu <del>Outlook Express 2003</del> Mutt!<br /> Mutt est un client mail en ligne de commande, qui, comme le dit sa page -d’accueil, <a href="http://www.mutt.org">"just sucks less"</a>. Dans les faits, mutt est assez +d’accueil, <a href="http://www.mutt.org">&ldquo;just sucks less&rdquo;</a>. Dans les faits, mutt est assez chiant a configurer mais particulièrement pratique a utiliser après.</p> <p>La configuration de mutt se fait dans le fichier <code>.muttrc</code> ou dans -<code>/etc/Muttrc</code>, et il est courant d'utiliser offlineimap en +<code>/etc/Muttrc</code>, et il est courant d&rsquo;utiliser offlineimap en conjonction avec celui ci, de façon a accéder aux mails même sans accès -internet (mutt dispose d'un système d'accès IMAP/POP et SMTP, mais ne +internet (mutt dispose d&rsquo;un système d&rsquo;accès IMAP/POP et SMTP, mais ne crée pas de cache, ce qui empêche la consultation des emails sans -connexion internet.) La configuration d'offlineimap se fait dans -<code>~/.offlineimaprc</code> ou dans rien d'autre en fait, c'est une config +connexion internet.) La configuration d&rsquo;offlineimap se fait dans<code>~/.offlineimaprc</code> ou dans rien d&rsquo;autre en fait, c&rsquo;est une config par user. Offlineimap est un petit logiciel en python qui synchronise un dossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque justement mutt accepte les dossiers au format Maildir. (De plus, cela va tout a fait dans le sens de la libération des données en cela que vous possédez vos mails en local.)<br /> Bref, passons aux choses serieuses : le code. Déjà, installez -offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d'installer +offlineimap et <a href="http://data.wxcafe.net/scripts/mutt-sidebar.sh">ce script</a> fait par moi, qui vous permet d&rsquo;installer mutt avec le patch sidebar, qui crée un listing des dossiers sur la partie gauche.<br /> Ensuite, voyons pour la partie configuration :<br /> -Ma configuration d'offlineimap :</p> -<div class="highlight"><pre><span class="cp">## Config file for offlineimap</span> -<span class="cp">## Originally located in ~/.offlineimaprc</span> -<span class="cp">## This should not be edited without creating a copy before</span> -<span class="cp">## Created by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +Ma configuration d&rsquo;offlineimap :</p> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Config file for offlineimap</span> +<span style="color: #75715e">## Originally located in ~/.offlineimaprc</span> +<span style="color: #75715e">## This should not be edited without creating a copy before</span> +<span style="color: #75715e">## Created by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="p">[</span><span class="n">general</span><span class="p">]</span> -<span class="cp"># List of accounts to be synced, separated by a comma.</span> -<span class="n">accounts</span> <span class="o">=</span> <span class="n">main</span> +<span style="color: #f8f8f2">[general]</span> +<span style="color: #75715e"># List of accounts to be synced, separated by a comma.</span> +<span style="color: #f8f8f2">accounts</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span> -<span class="p">[</span><span class="n">Account</span> <span class="n">main</span><span class="p">]</span> -<span class="cp"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> -<span class="n">localrepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span> -<span class="cp"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> -<span class="n">remoterepository</span> <span class="o">=</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span> -<span class="cp"># Status cache. Default is plain, which eventually becomes huge and slow.</span> -<span class="n">status_backend</span> <span class="o">=</span> <span class="n">sqlite</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">cache</span><span class="p">.</span> <span class="p">(</span><span class="n">plain</span> <span class="n">ou</span> <span class="n">sqlite</span><span class="p">)</span> +<span style="color: #f8f8f2">[Account</span> <span style="color: #f8f8f2">main]</span> +<span style="color: #75715e"># Identifier for the local repository; e.g. the maildir to be synced via IMAP.</span> +<span style="color: #f8f8f2">localrepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local</span> +<span style="color: #75715e"># Identifier for the remote repository; i.e. the actual IMAP, usually non-local.</span> +<span style="color: #f8f8f2">remoterepository</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote</span> +<span style="color: #75715e"># Status cache. Default is plain, which eventually becomes huge and slow.</span> +<span style="color: #f8f8f2">status_backend</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">sqlite</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">cache.</span> <span style="color: #f8f8f2">(plain</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">sqlite)</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">local</span><span class="p">]</span> -<span class="cp"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">Maildir</span> <span class="err">#</span> <span class="n">le</span> <span class="n">type</span> <span class="n">de</span> <span class="n">stockage</span> <span class="p">(</span><span class="n">Maildir</span> <span class="n">ou</span> <span class="n">IMAP</span><span class="p">)</span> -<span class="cp"># Where should the mail be placed?</span> -<span class="n">localfolders</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Emails</span><span class="o">/</span> <span class="err">#</span> <span class="n">le</span> <span class="n">dossier</span> <span class="n">dans</span> <span class="n">lequel</span> <span class="n">vous</span> - <span class="err">#</span> <span class="n">voulez</span> <span class="n">que</span> <span class="n">vos</span> <span class="n">emails</span> <span class="n">apparaissent</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">local]</span> +<span style="color: #75715e"># Currently, offlineimap only supports maildir and IMAP for local repositories.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">Maildir</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">type</span> <span style="color: #f8f8f2">de</span> <span style="color: #f8f8f2">stockage</span> <span style="color: #f8f8f2">(Maildir</span> <span style="color: #f8f8f2">ou</span> <span style="color: #f8f8f2">IMAP)</span> +<span style="color: #75715e"># Where should the mail be placed?</span> +<span style="color: #f8f8f2">localfolders</span> <span style="color: #f92672">=</span> <span style="color: #f92672">~/</span><span style="color: #f8f8f2">Emails</span><span style="color: #f92672">/</span> <span style="color: #960050; background-color: #1e0010">#</span> <span style="color: #f8f8f2">le</span> <span style="color: #f8f8f2">dossier</span> <span style="color: #f8f8f2">dans</span> <span style="color: #f8f8f2">lequel</span> <span style="color: #f8f8f2">vous</span> + <span style="color: #75715e"># voulez que vos emails apparaissent</span> -<span class="p">[</span><span class="n">Repository</span> <span class="n">main</span><span class="o">-</span><span class="n">remote</span><span class="p">]</span> -<span class="cp"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> -<span class="n">type</span> <span class="o">=</span> <span class="n">IMAP</span> -<span class="n">remotehost</span> <span class="o">=</span> <span class="c1">//placeholderhost// # le serveur de votre messagerie</span> -<span class="n">remoteuser</span> <span class="o">=</span> <span class="c1">//placeholderusername// # votre nom d&#39;utilisateur</span> -<span class="n">remotepass</span> <span class="o">=</span> <span class="c1">//placeholderpassword// # votre mot de passe</span> -<span class="n">cert_fingerprint</span> <span class="o">=</span> <span class="c1">//placeholdercert// # le certificat du serveur (IMAPS only)</span> +<span style="color: #f8f8f2">[Repository</span> <span style="color: #f8f8f2">main</span><span style="color: #f92672">-</span><span style="color: #f8f8f2">remote]</span> +<span style="color: #75715e"># Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.</span> +<span style="color: #f8f8f2">type</span> <span style="color: #f92672">=</span> <span style="color: #f8f8f2">IMAP</span> +<span style="color: #f8f8f2">remotehost</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderhost// # le serveur de votre messagerie</span> +<span style="color: #f8f8f2">remoteuser</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderusername// # votre nom d&#39;utilisateur</span> +<span style="color: #f8f8f2">remotepass</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholderpassword// # votre mot de passe</span> +<span style="color: #f8f8f2">cert_fingerprint</span> <span style="color: #f92672">=</span> <span style="color: #75715e">//placeholdercert// # le certificat du serveur (IMAPS only)</span> </pre></div> -<p>Ça devrait être assez simple a lire, j'ai tout bien commenté :3<br /> +<p>Ça devrait être assez simple a lire, j&rsquo;ai tout bien commenté :3<br /> Puis ma config mutt :</p> -<div class="highlight"><pre><span class="cp">## Mutt MUA configuration file</span> -<span class="cp">## This file should not be edited without creating a copy</span> -<span class="cp">## File Created and edited by Wxcafe (Clément Hertling)</span> -<span class="cp">## Published under CC-BY-SA</span> +<div class="codehilite" style="background: #272822"><pre style="line-height: 125%"><span style="color: #75715e">## Mutt MUA configuration file</span> +<span style="color: #75715e">## This file should not be edited without creating a copy</span> +<span style="color: #75715e">## File Created and edited by Wxcafe (Clément Hertling)</span> +<span style="color: #75715e">## Published under CC-BY-SA</span> -<span class="cp"># General config for reading (fetched via offlineimap)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for reading (fetched via offlineimap) -<span class="n">set</span> <span class="n">mbox_type</span> <span class="o">=</span> <span class="n">Maildir</span> -<span class="cp"># type de boite mail (voir dans offlineimap, mailbox par defaut)</span> +set mbox_type = Maildir +<span style="color: #960050; background-color: #1e0010">#</span> type de boite mail (voir dans offlineimap, mailbox par defaut) -<span class="n">set</span> <span class="n">folder</span> <span class="o">=</span> <span class="o">~/</span><span class="n">Email</span><span class="o">/</span> -<span class="cp"># dossier root mailbox/imap</span> +set folder = ~/Email/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier root mailbox/imap -<span class="n">set</span> <span class="n">spoolfile</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> -<span class="cp"># dossier d&#39;inbox</span> +set spoolfile = +INBOX +<span style="color: #960050; background-color: #1e0010">#</span> dossier d&#39;inbox -<span class="n">set</span> <span class="n">mbox</span> <span class="o">=</span> <span class="o">+</span><span class="err">&#39;</span><span class="n">All</span> <span class="n">Mail</span><span class="err">&#39;</span> -<span class="cp"># dossier ou archiver les emails</span> +set mbox = +&#39;All Mail&#39; +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou archiver les emails -<span class="n">set</span> <span class="n">copy</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># yes pour copier les messages dans les differents dossier, no pour...</span> -<span class="cp"># enfin voila quoi.</span> +set copy = yes +<span style="color: #960050; background-color: #1e0010">#</span> yes pour copier les messages dans les differents dossier, no pour... +<span style="color: #960050; background-color: #1e0010">#</span> enfin voila quoi. -<span class="n">set</span> <span class="n">header_cache</span> <span class="o">=</span> <span class="o">/</span><span class="p">.</span><span class="n">hcache</span><span class="o">/</span> -<span class="cp"># dossier ou sont stockés les headers (pour le cache)</span> +set header_cache = /.hcache/ +<span style="color: #960050; background-color: #1e0010">#</span> dossier ou sont stockés les headers (pour le cache) -<span class="n">set</span> <span class="n">record</span> <span class="o">=</span> <span class="o">+</span><span class="n">Sent</span> -<span class="cp"># dossier dans lequel sont stockés les messages envoyés</span> +set record = +Sent +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les messages envoyés -<span class="n">set</span> <span class="n">postponed</span> <span class="o">=</span> <span class="o">+</span><span class="n">Drafts</span> -<span class="cp"># dossier dans lequel sont stockés les brouillons</span> +set postponed = +Drafts +<span style="color: #960050; background-color: #1e0010">#</span> dossier dans lequel sont stockés les brouillons -<span class="n">mailboxes</span> <span class="o">=</span> <span class="o">+</span><span class="n">INBOX</span> <span class="o">+</span><span class="n">Drafts</span> <span class="o">+</span><span class="n">Sent</span> <span class="o">+</span><span class="n">Trash</span> <span class="o">+</span><span class="n">All</span><span class="err">\</span> <span class="n">Mail</span> -<span class="cp"># liste des dossiers qui vont apparaitre dans la colonne de gauche</span> +mailboxes = +INBOX +Drafts +Sent +Trash +All\ Mail +<span style="color: #960050; background-color: #1e0010">#</span> liste des dossiers qui vont apparaitre dans la colonne de gauche -<span class="cp"># General config for sending (using Mutt&#39;s native support)</span> +<span style="color: #960050; background-color: #1e0010">#</span> General config for sending (using Mutt&#39;s native support) -<span class="n">set</span> <span class="n">smtp_pass</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">password_placeholder</span><span class="err">&#39;</span> -<span class="cp"># votre mot de passe</span> +set smtp_pass = &#39;password_placeholder&#39; +<span style="color: #960050; background-color: #1e0010">#</span> votre mot de passe -<span class="n">set</span> <span class="n">smtp_url</span> <span class="o">=</span> <span class="s">&quot;smtp://username@whatev.org:465/&quot;</span> -<span class="cp"># l&#39;url ou envoyer les emails</span> +set smtp_url = &quot;smtp://username@whatev.org:465/&quot; +<span style="color: #960050; background-color: #1e0010">#</span> l&#39;url ou envoyer les emails -<span class="n">set</span> <span class="n">send_charset</span> <span class="o">=</span> <span class="s">&quot;utf-8&quot;</span> -<span class="cp"># UTF8, NE PAS CHANGER</span> +set send_charset = &quot;utf-8&quot; +<span style="color: #960050; background-color: #1e0010">#</span> UTF8, NE PAS CHANGER -<span class="n">set</span> <span class="n">signature</span> <span class="o">=</span> <span class="s">&quot;.sign&quot;</span> -<span class="cp"># vous pouvez mettre votre signature dans .sign</span> +set signature = &quot;.sign&quot; +<span style="color: #960050; background-color: #1e0010">#</span> vous pouvez mettre votre signature dans .sign -<span class="n">set</span> <span class="n">sig_on_top</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible </span> -<span class="cp"># comme ca.</span> +set sig_on_top = yes +<span style="color: #960050; background-color: #1e0010">#</span> il est d&#39;usge de mettre no ici. Cependant, je trouve ca plus lisible +<span style="color: #960050; background-color: #1e0010">#</span> comme ca. -<span class="n">set</span> <span class="n">ssl_verify_host</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># mettez yes ici si votre serveur a un certificat configuré correctement</span> +set ssl_verify_host = no +<span style="color: #960050; background-color: #1e0010">#</span> mettez yes ici si votre serveur a un certificat configuré correctement -<span class="n">set</span> <span class="n">hostname</span> <span class="o">=</span> <span class="s">&quot;wxcafe.net&quot;</span> -<span class="cp"># mettez l&#39;adresse de votre serveur ici</span> +set hostname = &quot;wxcafe.net&quot; +<span style="color: #960050; background-color: #1e0010">#</span> mettez l&#39;adresse de votre serveur ici -<span class="cp"># Misc settings</span> +<span style="color: #960050; background-color: #1e0010">#</span> Misc settings -<span class="n">auto_view</span> <span class="n">text</span><span class="o">/</span><span class="n">html</span> -<span class="cp"># la façon de voir les emails par défaut.</span> +auto_view text/html +<span style="color: #960050; background-color: #1e0010">#</span> la façon de voir les emails par défaut. -<span class="n">set</span> <span class="n">date_format</span> <span class="o">=</span> <span class="s">&quot;%y-%m-%d %T&quot;</span> -<span class="cp"># format de date d&#39;envoi/de reception.</span> +set date_format = &quot;%y-%m-%d %T&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de date d&#39;envoi/de reception. -<span class="n">set</span> <span class="n">index_format</span> <span class="o">=</span> <span class="s">&quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot;</span> -<span class="cp"># format de l&#39;index (la présentation de l&#39;interface)</span> -<span class="cp"># voir http:</span><span class="c1">//www.mutt.org/doc/manual/manual-6.html#index_format</span> +set index_format = &quot;%2C | %Z [%D] %-30.30F (%-4.4c) %s&quot; +<span style="color: #960050; background-color: #1e0010">#</span> format de l&#39;index (la présentation de l&#39;interface) +<span style="color: #960050; background-color: #1e0010">#</span> voir http://www.mutt.org/doc/manual/manual-6.html<span style="color: #75715e">#</span><span style="color: #a6e22e">index_format</span> -<span class="n">set</span> <span class="n">sort_alias</span> <span class="o">=</span> <span class="n">alias</span> -<span class="n">set</span> <span class="n">reverse_alias</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">alias_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/aliases&quot;</span> -<span class="cp"># liste des alias noms/email. a créer et remplir vous même.</span> -<span class="cp"># format : &quot;alias short_name long_email_adress&quot;</span> -<span class="n">source</span> <span class="err">$</span><span class="n">alias_file</span> +set sort_alias = alias +set reverse_alias = yes +set alias_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/aliases&quot; +<span style="color: #960050; background-color: #1e0010">#</span> liste des alias noms/email. a créer et remplir vous même. +<span style="color: #960050; background-color: #1e0010">#</span> format : &quot;alias short_name long_email_adress&quot; +source <span style="color: #f8f8f2">$alias_file</span> -<span class="n">set</span> <span class="n">beep</span> <span class="o">=</span> <span class="n">no</span> -<span class="cp"># ne pas biper. CE SON ME TUE T.T</span> +set beep = no +<span style="color: #960050; background-color: #1e0010">#</span> ne pas biper. CE SON ME TUE T.T -<span class="n">set</span> <span class="n">tilde</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sleep_time</span> <span class="o">=</span> <span class="mi">0</span> -<span class="cp"># ?</span> +set tilde = yes +set sleep_time = 0 +<span style="color: #960050; background-color: #1e0010">#</span> ? -<span class="n">set</span> <span class="n">sidebar_visible</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">sidebar_width</span> <span class="o">=</span> <span class="mi">15</span> -<span class="cp"># parametres de la barre coté gauche</span> +set sidebar_visible = yes +set sidebar_width = 15 +<span style="color: #960050; background-color: #1e0010">#</span> parametres de la barre coté gauche -<span class="n">set</span> <span class="n">realname</span> <span class="o">=</span> <span class="s">&quot;Clément Hertling (Wxcafé)&quot;</span> -<span class="n">set</span> <span class="n">from</span> <span class="o">=</span> <span class="s">&quot;wxcafe@wxcafe.net&quot;</span> -<span class="n">set</span> <span class="n">use_from</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">set</span> <span class="n">certificate_file</span> <span class="o">=</span> <span class="s">&quot;$HOME/.mutt/cacert&quot;</span> -<span class="cp"># parametres d&#39;envoi. mettez vos propres infos a la place des miennes...</span> +set realname = &quot;Clément Hertling (Wxcafé)&quot; +set from = &quot;wxcafe@wxcafe.net&quot; +set use_from = yes +set certificate_file = &quot;<span style="color: #f8f8f2">$HOME</span>/.mutt/cacert&quot; +<span style="color: #960050; background-color: #1e0010">#</span> parametres d&#39;envoi. mettez vos propres infos a la place des miennes... -<span class="n">set</span> <span class="n">edit_headers</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># vous permet de vois les headers des mails. j&#39;aime, donc je laisse.</span> +set edit_headers = yes +<span style="color: #960050; background-color: #1e0010">#</span> vous permet de vois les headers des mails. j&#39;aime, donc je laisse. -<span class="cp"># Macros</span> +<span style="color: #960050; background-color: #1e0010">#</span> Macros -<span class="cp"># le titre dit tout. index veut dire que la macro est active dans les menus,</span> -<span class="cp"># pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les </span> -<span class="cp"># deux</span> -<span class="cp"># \C represente la touche Control</span> +<span style="color: #960050; background-color: #1e0010">#</span> le titre dit tout. index veut dire que la macro est active dans les menus, +<span style="color: #960050; background-color: #1e0010">#</span> pager qu&#39;elle l&#39;est dans la visionneuse, les deux qu&#39;elle l&#39;est dans les +<span style="color: #960050; background-color: #1e0010">#</span> deux +<span style="color: #960050; background-color: #1e0010">#</span> \C represente la touche Control -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cp</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">prev</span> -<span class="cp"># Control+p -&gt; remonter d&#39;un dossier dans la sidebar</span> +bind index,pager \Cp sidebar-prev +<span style="color: #960050; background-color: #1e0010">#</span> Control+p -&gt; remonter d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Cn</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">next</span> -<span class="cp"># Control+n -&gt; descendre d&#39;un dossier dans la sidebar</span> +bind index,pager \Cn sidebar-next +<span style="color: #960050; background-color: #1e0010">#</span> Control+n -&gt; descendre d&#39;un dossier dans la sidebar -<span class="n">bind</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="err">\</span><span class="n">Co</span> <span class="n">sidebar</span><span class="o">-</span><span class="n">open</span> -<span class="cp"># Control+o -&gt; ouvrir le dossier selectionné dans la sidebar</span> +bind index,pager \Co sidebar-open +<span style="color: #960050; background-color: #1e0010">#</span> Control+o -&gt; ouvrir le dossier selectionné dans la sidebar -<span class="n">macro</span> <span class="n">index</span><span class="p">,</span><span class="n">pager</span> <span class="n">d</span> <span class="s">&quot;=Trash&quot;</span> <span class="s">&quot;Trash&quot;</span> -<span class="cp"># d supprime le message en cours</span> +macro index,pager d &quot;=Trash&quot; &quot;Trash&quot; +<span style="color: #960050; background-color: #1e0010">#</span> d supprime le message en cours -<span class="n">bind</span> <span class="n">pager</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message.</span> +bind pager previous-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de monter d&#39;une ligne avec la touche up, au lieu de changer de message. -<span class="n">bind</span> <span class="n">pager</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de </span> -<span class="cp"># message</span> +bind pager next-line +<span style="color: #960050; background-color: #1e0010">#</span> permet de descendre d&#39;une ligne avec la touche down, au lieu de changer de +<span style="color: #960050; background-color: #1e0010">#</span> message -<span class="n">bind</span> <span class="n">pager</span> <span class="n">j</span> <span class="n">next</span><span class="o">-</span><span class="n">line</span> -<span class="n">bind</span> <span class="n">pager</span> <span class="n">k</span> <span class="n">previous</span><span class="o">-</span><span class="n">line</span> -<span class="cp"># raccourcis vim</span> +bind pager j next-line +bind pager k previous-line +<span style="color: #960050; background-color: #1e0010">#</span> raccourcis vim -<span class="cp"># PGP signing commands</span> +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing commands -<span class="n">set</span> <span class="n">pgp_decode_command</span><span class="o">=</span><span class="s">&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --verify %s %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_decrypt_command</span><span class="o">=</span><span class="s">&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_sign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_clearsign_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_only_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_encrypt_sign_command</span><span class="o">=</span><span class="s">&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_import_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --import -v %f&quot;</span> -<span class="n">set</span> <span class="n">pgp_export_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --export --armor %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_verify_key_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_pubring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_list_secring_command</span><span class="o">=</span><span class="s">&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot;</span> -<span class="n">set</span> <span class="n">pgp_autosign</span><span class="o">=</span><span class="n">yes</span> -<span class="n">set</span> <span class="n">pgp_sign_as</span><span class="o">=</span><span class="mi">0</span><span class="n">x</span><span class="o">********</span> -<span class="cp"># remplacez 0x******** par votre identifiant PGP!!!!!</span> +set pgp_decode_command=&quot;gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f&quot; +set pgp_verify_command=&quot;gpg --no-verbose --batch --output - --verify %s %f&quot; +set pgp_decrypt_command=&quot;gpg --passphrase-fd 0 --no-verbose --batch --output - %f&quot; +set pgp_sign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f&quot; +set pgp_clearsign_command=&quot;gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f&quot; +set pgp_encrypt_only_command=&quot;pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_encrypt_sign_command=&quot;pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f&quot; +set pgp_import_command=&quot;gpg --no-verbose --import -v %f&quot; +set pgp_export_command=&quot;gpg --no-verbose --export --armor %r&quot; +set pgp_verify_key_command=&quot;gpg --no-verbose --batch --fingerprint --check-sigs %r&quot; +set pgp_list_pubring_command=&quot;gpg --no-verbose --batch --with-colons --list-keys %r&quot; +set pgp_list_secring_command=&quot;gpg --no-verbose --batch --with-colons --list-secret-keys %r&quot; +set pgp_autosign=yes +set pgp_sign_as=0x******** +<span style="color: #960050; background-color: #1e0010">#</span> remplacez 0x******** par votre identifiant PGP!!!!! -<span class="n">set</span> <span class="n">pgp_replyencrypt</span><span class="o">=</span><span class="n">no</span> -<span class="n">set</span> <span class="n">pgp_timeout</span><span class="o">=</span><span class="mi">7200</span> -<span class="n">set</span> <span class="n">pgp_good_sign</span><span class="o">=</span><span class="s">&quot;^gpg: Good signature from&quot;</span> +set pgp_replyencrypt=no +set pgp_timeout=7200 +set pgp_good_sign=&quot;^gpg: Good signature from&quot; -<span class="cp"># si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis</span> -<span class="cp"># PGP signing options</span> +<span style="color: #960050; background-color: #1e0010">#</span> si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis +<span style="color: #960050; background-color: #1e0010">#</span> PGP signing options -<span class="cp"># Palette for use with the Linux console. Black background.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Palette for use with the Linux console. Black background. -<span class="cp"># Schéma de couleur Rouge et Noir. Commentez si vous voulez le </span> -<span class="cp"># défaut noir et blanc.</span> -<span class="cp"># d&#39;autres schémas sont trouvables sur google et autre.</span> +<span style="color: #960050; background-color: #1e0010">#</span> Schéma de couleur Rouge et Noir. Commentez si vous voulez le +<span style="color: #960050; background-color: #1e0010">#</span> défaut noir et blanc. +<span style="color: #960050; background-color: #1e0010">#</span> d&#39;autres schémas sont trouvables sur google et autre. -<span class="n">color</span> <span class="n">hdrdefault</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">quoted</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">signature</span> <span class="n">brightblack</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">attachment</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">message</span> <span class="n">brightwhite</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">error</span> <span class="n">brightred</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">indicator</span> <span class="n">black</span> <span class="n">red</span> -<span class="n">color</span> <span class="n">status</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tree</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">normal</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">markers</span> <span class="n">red</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">search</span> <span class="n">white</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">tilde</span> <span class="n">brightmagenta</span> <span class="n">black</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="o">~</span><span class="n">F</span> -<span class="n">color</span> <span class="n">index</span> <span class="n">red</span> <span class="n">black</span> <span class="s">&quot;~N|~O&quot;</span> +color hdrdefault red black +color quoted brightblack black +color signature brightblack black +color attachment red black +color message brightwhite black +color error brightred black +color indicator black red +color status white black +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index red black ~F +color index red black &quot;~N|~O&quot; </pre></div> -<p>Voila, pour plus d'informations vous pouvez aller voir le manuel de mutt +<p>Voila, pour plus d&rsquo;informations vous pouvez aller voir le manuel de mutt @ <a href="http://www.mutt.org/doc/manual/">http://www.mutt.org/doc/manual/</a><br /> -J'espère que cette configuration "toute faite" vous aidera a commencer +J&rsquo;espère que cette configuration &ldquo;toute faite&rdquo; vous aidera a commencer a utiliser mutt. Il est tout de fois important de se souvenir -qu'utiliser une configuration toute faire n'aide pas a comprendre un +qu&rsquo;utiliser une configuration toute faire n&rsquo;aide pas a comprendre un programme ou un système, et que cette façon de faire devrait être -réservée a l'introduction ou a des situations ou il est absolument -nécessaire d'avoir rapidement une configuration fonctionnelle (c'est a -dire, dans le cas d'un client email, euh... jamais?). Je vous invite +réservée a l&rsquo;introduction ou a des situations ou il est absolument +nécessaire d&rsquo;avoir rapidement une configuration fonctionnelle (c&rsquo;est a +dire, dans le cas d&rsquo;un client email, euh&hellip; jamais?). Je vous invite donc a relire les annotations dont sont parsemés les fichiers de configuration en question, et surtout a lire le manuel, a chercher sur <del>Bing</del> <del>Google</del> <del>Yahoo</del> Seeks, et globalement -a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/La séparation des églises et de l'état, une idée qu'elle est bonne?//wxcafe.net/posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/<p>Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il -existe une loi dite de séparation des églises et de l'état, qui consiste -a faire en sorte que l'état n'ait rien a voir avec les differentes -églises, pour de sombres histoires d'indépendance et de laïcité. -(principes qui sont aujourd'hui en voie de disparition, mais ce n'est -pas le propos qui nous occupe ici). Cela dit, cette bonne idée -politique, si elle a évité a ses auteurs de nombreux tracas, et leur a -surement permis de conserver une tête en état de fonctionnement bien -reliée a leur colonne vertébrale, ne vous interesse que moyennement, et -vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer -(quel mot horrible...) sur twitter?</p> -<p>Ça tombe bien, vous abordez justement le sujet véritable de cet article -(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir -la centralisation qui se met progressivement en place sur internet depuis -quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces -acteurs du web (et pas que, pour certains...) ont commencé a prendre -pour manie de centraliser vos données : pour prendre un exemple simple, -si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails -pour accorder la publicité, dites adieu a votre vie privée), vous avez -un compte Google Talk, probablement aussi un Google+. </p> -<p>L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est -Google Reader, et vous l'utilisez aussi probablement. Votre téléphone -est un android? Ah, un Nexus? Vous avez donc toutes les applications -google installées, et Chrome mobile comme navigateur par défaut, qui est -synchronisé avec la version qui tourne sur votre PC (via les serveurs de -Google, bien sur). -Depuis peu, les recherches sur le moteur de recherche -sont elles aussi ajoutées a votre profil, enregistrées a jamais par -Google (qui n'est pas touchée, en tant que société américaine, par la -"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne -jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. </p> -<p>Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine <strong>doit</strong>fournir toutes ses -informations au gouvernement américain <strong>sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.</strong> </p> -<p>Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire <a href="http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/">cet article</a> de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. </p> -<p>Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <code>&lt;troll&gt;</code>Apple -Maps<code>&lt;/troll&gt;</code>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. </p> -<p>De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. </p> -<p>Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. </p> -<p>Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.<br /> -Voila, a bientôt!</p>WxcafeThu, 13 Dec 2012 03:08:00 +0100tag:wxcafe.net,2012-12-13:posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/La cryptographie avec PGP et principalement GnuPG//wxcafe.net/posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/<p>PGP (pour <a href="http://fr.wikipedia.org/wiki/Pretty_Good_Privacy">pretty good privacy</a>) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir <a href="http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">ici</a>) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de <em>Web of Trust</em>. </p> -<p>Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.<br /> -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.</p> -<p>Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -<a href="http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/">quitter Gmail</a> aussi, par exemple).</p> -<p>Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)</p> -<p>L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (<a href="http://fr.wikipedia.org/wiki/GNU_Privacy_Guard">GNU Privacy Guard</a>) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<code>&lt;troll&gt;</code> de façon surprenante pour un -programme GNU<code>&lt;/troll&gt;</code>) est extrêmement efficace et claire.</p> -<p>Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).</p> -<p>Tout d'abord, générons une clé GPG :</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">gen</span><span class="o">-</span><span class="n">key</span> -</pre></div> - - -<p>GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. </p> -<p>Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande <code>makepasswd</code>, qui génère automatiquement un mot de -passe) </p> -<p>GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) </p> -<p>Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">pubkey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé publique, et</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">armor</span> <span class="o">--</span><span class="n">export</span><span class="o">-</span><span class="n">secret</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">output</span><span class="o">=</span><span class="n">seckey</span><span class="p">.</span><span class="n">gpg</span> -</pre></div> - - -<p>pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. </p> -<p>Cela fait, listons les informations sur votre clé publique :</p> -<div class="highlight"><pre><span class="err">$</span> <span class="n">gpg</span> <span class="o">--</span><span class="n">list</span><span class="o">-</span><span class="n">keys</span> <span class="o">--</span><span class="n">fingerprint</span> -<span class="n">pub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">27</span><span class="n">D81AC8</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> - <span class="n">Key</span> <span class="n">fingerprint</span> <span class="o">=</span> <span class="mi">6345</span> <span class="n">A91A</span> <span class="n">FF89</span> <span class="mf">97E0</span> <span class="mi">13</span><span class="n">D0</span> <span class="mi">96</span><span class="n">A9</span> <span class="mf">9E2</span><span class="n">A</span> <span class="mi">1917</span> <span class="mi">27</span><span class="n">D8</span> <span class="mi">1</span><span class="n">AC8</span> -<span class="n">uid</span> <span class="n">Cl</span><span class="err">é</span><span class="n">ment</span> <span class="n">Hertling</span> <span class="p">(</span><span class="n">Wxcafe</span><span class="p">)</span> -<span class="n">uid</span> <span class="p">[</span><span class="n">jpeg</span> <span class="n">image</span> <span class="n">of</span> <span class="n">size</span> <span class="mi">14692</span><span class="p">]</span> -<span class="n">sub</span> <span class="mi">4096</span><span class="n">R</span><span class="o">/</span><span class="mi">9</span><span class="n">ED7F77F</span> <span class="mi">2012</span><span class="o">-</span><span class="mi">11</span><span class="o">-</span><span class="mi">17</span> -</pre></div> - - -<p>La partie <code>pub</code> indique que c'est une clé publique, <code>4096R</code> indique que c'est -une clé RSA sur 4096 bits. La partie <code>27D81AC8</code> est -l'identifiant de la clé publique, <code>Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8</code> est appelé fingerprint de la clé. Les champs -<code>uid</code> sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ <code>sub</code> est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.<br /> -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.</p> -<div class="highlight"><pre><span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">uploader</span><span class="o">*</span> -</pre></div> - - -<p>Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!<br /> -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). </p> -<p>Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.<br /> -Concernant les signatures de clés, elles fonctionnent de manière très -simple :<br /> -Vous devez télécharger la clé de votre correspondant, via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">search</span><span class="o">-</span><span class="n">keys</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">de</span> <span class="n">votre</span> <span class="n">correspondant</span><span class="o">*</span> -</pre></div> - - -<p>(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.<br /> -Ceci fait, vous pouvez signer la clé via un</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">sign</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>puis la renvoyer au serveur via</p> -<div class="highlight"><pre> <span class="n">gpg</span> <span class="o">--</span><span class="n">keyserver</span> <span class="n">pgp</span><span class="p">.</span><span class="n">mit</span><span class="p">.</span><span class="n">edu</span> <span class="o">--</span><span class="n">send</span><span class="o">-</span><span class="n">key</span> <span class="o">*</span><span class="n">ID</span> <span class="n">de</span> <span class="n">la</span> <span class="n">cl</span><span class="err">é</span> <span class="n">a</span> <span class="n">signer</span><span class="o">*</span> -</pre></div> - - -<p>Voila, la clé de votre correspondant est signée!</p> -<p>Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!</p>WxcafeMon, 19 Nov 2012 00:36:00 +0100tag:wxcafe.net,2012-11-19:posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/L'informatique a l'école//wxcafe.net/posts/%D/linformatique-a-lecole/<p>Après avoir lu <a href="http://t.co/5PTfe6zu">cet article</a> paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.</p> -<p>En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu <a href="http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution">Hackers - Heroes of the Computer Revolution</a> de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.</p> -<p>Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre <a href="http://en.wikipedia.org/wiki/IWoz">iWoz</a>) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. </p> -<p>Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.</p> -<p>C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...</p> -<p>Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.</p> -<p>Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.</p>WxcafeMon, 15 Oct 2012 20:34:00 +0200tag:wxcafe.net,2012-10-15:posts/%D/linformatique-a-lecole/Archlinux made simple//wxcafe.net/posts/%D/archlinux-made-simple/<p>Archlinux est réputée être une distribution Linux très complexe a -installer et a maintenir.</p> -<p>Je vais tenter ici de vous convaincre que ce n'est pas le cas, et -qu'elle peut se monter très intéressante et très instructive a installer -tout autant qu'a utiliser.</p> -<p>Il convient tout d'abord de rappeler a quels principes obéit Arch:</p> -<ol> -<li> -<p>Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des - programmes simples et utilisables par tous. Avec comme base de - simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu - de bonne volonté, la configuration n'est pas si compliquée!</p> -</li> -<li> -<p>La philosophie UNIX : chaque programme est prévu pour ne remplir - qu'une seule tâche. Bien entendu, cela ne concerne que les programmes - conçus pour s’insérer dans la philosophie UNIX, et les installations de - dépendances avec le gestionnaire de paquet d'Arch fonctionnent - superbement bien.</p> -</li> -</ol> -<p>De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :</p> -<ul> -<li> -<p>recherche d'un paquet :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Ss</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>installation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">S</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>désinstallation d'un paquet :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">R</span> <span class="n">paquet</span> -</pre></div> - - -</li> -<li> -<p>mise a jour de tous les paquets installés :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">paquet</span> -</pre></div> - - -</li> -</ul> -<p>Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.</p> -<p>Arch n'offre pas d'interface graphique par défaut : après avoir installé -le système, vous n'aurez qu'une invite de commande. Heureusement, je -vais ici vous guider a travers l'installation d'une interface graphique -(mate, le fork de gnome 2)</p> -<p>L'installation d'Arch se fait par le réseau, veillez a avoir une -connection WiFi ou filaire a proximité avant de suivre ce guide.</p> -<p>Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous -systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce -dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.</p> -<p>Bon, passons a l'explication de l'installation proprement dite :</p> -<p>Tout d'abord, téléchargeons l'iso d'arch la plus récente :</p> -<div class="highlight"><pre><span class="n">wget</span> <span class="n">http</span><span class="o">:</span><span class="c1">//mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso</span> -</pre></div> - - -<p>Ensuite, gravons cette image sur un disque USB :</p> -<div class="highlight"><pre><span class="n">dd</span> <span class="k">if</span><span class="o">=</span><span class="n">archlinux</span><span class="o">-</span><span class="mf">2012.09.07</span><span class="o">-</span><span class="n">dual</span><span class="p">.</span><span class="n">iso</span> <span class="n">of</span><span class="o">=/</span><span class="n">dev</span><span class="o">/</span><span class="n">sdX</span> -</pre></div> - - -<p>Après reboot de la machine sur l'iso en question et choix de -l'architecture, nous sommes accueillis par un shell root.</p> -<p>La première chose a faire est de paramétrer le clavier :</p> -<div class="highlight"><pre><span class="n">loadkeys</span> <span class="n">fr</span> -</pre></div> - - -<p>Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :</p> -<div class="highlight"><pre><span class="n">cfdisk</span> <span class="err">#</span> <span class="n">cfdisk</span> <span class="n">est</span> <span class="n">suffisamment</span> <span class="n">clair</span> <span class="n">pour</span> <span class="n">ne</span> <span class="n">pas</span> <span class="n">n</span><span class="err">é</span><span class="n">cessiter</span> <span class="n">d</span><span class="err">&#39;</span><span class="n">explications</span> -</pre></div> - - -<p>formatage des partitions :</p> -<div class="highlight"><pre><span class="n">mkfs</span><span class="p">.</span><span class="n">ext4</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">root</span> - -<span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="o">&amp;&amp;</span> <span class="n">mkfs</span><span class="p">.</span><span class="n">btrfs</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">home</span> - -<span class="n">mkswap</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="o">&amp;&amp;</span> <span class="n">swapon</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda3</span> <span class="err">#</span> <span class="n">partition</span> <span class="n">de</span> <span class="n">swap</span> -</pre></div> - - -<p>Montons les partitions nouvellement créées, puis installons le système :</p> -<div class="highlight"><pre><span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda1</span> <span class="o">/</span><span class="n">mnt</span> - -<span class="n">mkdir</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> <span class="o">&amp;&amp;</span> <span class="n">mount</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda2</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> - -<span class="n">dhclient</span> <span class="n">eth0</span> <span class="err">#</span> <span class="n">si</span> <span class="n">vous</span> <span class="n">utilisez</span> <span class="n">une</span> <span class="n">connection</span> <span class="n">filaire</span><span class="p">,</span> <span class="n">sinon</span> <span class="n">voire</span> <span class="n">http</span><span class="o">:</span><span class="c1">//wiki.archlinux.fr/Wifi#Configuration</span> - -<span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">base</span> <span class="n">base</span><span class="o">-</span><span class="n">devel</span> - -<span class="n">genfstab</span> <span class="o">-</span><span class="n">p</span> <span class="o">/</span><span class="n">mnt</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">fstab</span> -</pre></div> - - -<p>Allons prendre un café le temps que ça charge, puis installons les -quelques paquets nécessaires a notre installation et au premier -démarrage:</p> -<div class="highlight"><pre><span class="n">pacstrap</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">syslinux</span> <span class="n">btrfs</span><span class="o">-</span><span class="n">progs</span> <span class="n">wireless_tools</span> <span class="n">dhclient</span> -</pre></div> - - -<p>Maintenant, passons sur notre install toute fraîche d'Arch :</p> -<div class="highlight"><pre><span class="n">arch</span><span class="o">-</span><span class="n">chroot</span> <span class="o">/</span><span class="n">mnt</span> <span class="n">bash</span> -</pre></div> - - -<p>configurons les bases :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="n">HOSTNAME</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">hostname</span> - -<span class="n">ln</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">share</span><span class="o">/</span><span class="n">zoneinfo</span><span class="o">/</span><span class="n">Europe</span><span class="o">/</span><span class="n">Paris</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">localtime</span> - -<span class="n">date</span> <span class="n">MMJJhhmmAAAA</span> - -<span class="n">hwclock</span> <span class="o">--</span><span class="n">systohc</span> - -<span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">gen</span> <span class="err">#</span> <span class="n">D</span><span class="err">é</span><span class="n">commentez</span> <span class="n">les</span> <span class="n">lignes</span> <span class="n">correspondant</span> <span class="n">au</span> <span class="n">fran</span><span class="err">ç</span><span class="n">ais</span> <span class="o">:</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">UTF</span><span class="o">-</span><span class="mi">8</span> <span class="n">et</span> <span class="n">fr_FR</span><span class="p">.</span><span class="n">ISO</span><span class="o">-</span><span class="mi">8859</span><span class="o">-</span><span class="mi">1</span> - -<span class="n">echo</span> <span class="err">&#39;</span><span class="n">LANG</span><span class="o">=</span><span class="s">&quot;fr_FR.UTF-8&quot;</span><span class="err">&#39;</span> <span class="o">&gt;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">locale</span><span class="p">.</span><span class="n">conf</span> - -<span class="n">locale</span><span class="o">-</span><span class="n">gen</span> - -<span class="n">mkinitcpio</span> <span class="o">-</span><span class="n">p</span> <span class="n">linux</span> -</pre></div> - - -<p>Enfin, vérifions que syslinux est correctement configuré :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">boot</span><span class="o">/</span><span class="n">syslinux</span><span class="o">/</span><span class="n">syslinux</span><span class="p">.</span><span class="n">cfg</span> <span class="err">#</span> <span class="n">il</span> <span class="n">devrait</span> <span class="n">y</span> <span class="n">avoir</span> <span class="s">&quot;append root=/dev/sda1&quot;</span> -</pre></div> - - -<p>Si tout est correct, installons syslinux, et paramétrons un mot de passe -root :</p> -<div class="highlight"><pre><span class="n">syslinux</span><span class="o">-</span><span class="n">install_update</span> <span class="o">/</span><span class="n">dev</span><span class="o">/</span><span class="n">sda</span> <span class="o">-</span><span class="n">mia</span> - -<span class="n">passwd</span> <span class="n">root</span> -</pre></div> - - -<p>Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!</p> -<div class="highlight"><pre> <span class="n">exit</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span><span class="o">/</span><span class="n">home</span> -<span class="n">umount</span> <span class="o">/</span><span class="n">mnt</span> -<span class="n">reboot</span> -</pre></div> - - -<p>Fini!</p> -<p>Prenons une petite pause. La partie suivante de ce tutoriel consister en -un paramétrage des principaux services nécessaires a l'utilisation d'un -OS, disons, moyen :</p> -<ul> -<li> -<p>Installation de MATE, le gestionnaire de bureau (voir -<a href="http://mate-desktop.org/">http://mate-desktop.org/</a>)</p> -</li> -<li> -<p>Installation de sudo et de networkmanager pour faire fonctionner les -composants essentiels du système sans avoir a tout activer a la main a -chaque démarrage</p> -</li> -<li> -<p>Installation de SLiM comme gestionnaire de login graphique, pour -présenter une interface plus accueillante que la console, et -configuration de celui-ci</p> -</li> -<li> -<p>Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).</p> -</li> -</ul> -<p>Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un -gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter -ici.</p> -<p>Bon, reprenons.</p> -<p>Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de -passe paramétré plus haut pour le root, puis retapez la commande -utilisée plus tôt pour vous connecter a internet.</p> -<p>Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis -d'effectuer l'action en question :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">pacman</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ici, ajoutez les lignes suivantes :</p> -<div class="highlight"><pre><span class="k">[mate]</span> -<span class="na">Server</span> <span class="o">=</span> <span class="s">http://repo.mate-desktop.org/archlinux/$arch</span> -</pre></div> - - -<p>Installons maintenant les paquets :</p> -<div class="highlight"><pre><span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">mate</span> <span class="n">mate</span><span class="o">-</span><span class="n">extras</span> <span class="n">dbus</span> <span class="n">dbus</span><span class="o">-</span><span class="n">core</span> <span class="n">alsa</span> <span class="n">networkmanager</span> <span class="n">sudo</span> -</pre></div> - - -<p>Ajoutons un compte utilisateur pour utiliser les composants du système -sans tout crasher a chaque fois :</p> -<div class="highlight"><pre><span class="n">useradd</span> <span class="o">-</span><span class="n">g</span> <span class="n">users</span> <span class="o">-</span><span class="n">G</span> <span class="n">wheel</span><span class="p">,</span><span class="n">audio</span><span class="p">,</span><span class="n">optical</span><span class="p">,</span><span class="n">lp</span><span class="p">,</span><span class="n">scanner</span><span class="p">,</span><span class="n">log</span><span class="p">,</span><span class="n">power</span><span class="p">,</span><span class="n">floppy</span><span class="p">,</span><span class="n">storage</span><span class="p">,</span><span class="n">games</span><span class="p">,</span><span class="n">video</span> <span class="o">-</span><span class="n">m</span> <span class="o">-</span><span class="n">s</span> <span class="o">/</span><span class="n">bin</span><span class="o">/</span><span class="n">bash</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">passwd</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -<span class="n">su</span> <span class="o">*</span><span class="n">votrenom</span><span class="o">*</span> -</pre></div> - - -<p>Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org -ce que l'on veut utiliser :</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec ck-launch-session mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> -</pre></div> - - -<p>Profitons en pour ajouter les démons système au lancement :</p> -<div class="highlight"><pre><span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Ajoutez donc <code>dbus, alsa. hwclock</code> et <code>networkmanager</code> dans la section -DAEMONS (entre les parenthèses, après crond normalement)</p> -<div class="highlight"><pre><span class="n">DAEMONS</span><span class="o">=</span><span class="p">(</span><span class="n">syslog</span><span class="o">-</span><span class="n">ng</span> <span class="n">network</span> <span class="n">crond</span> <span class="n">dbus</span> <span class="n">alsa</span> <span class="n">hwclock</span> <span class="n">networkmanager</span><span class="p">)</span> -</pre></div> - - -<p>Pour éviter un reboot, il est ici possible de faire un</p> -<div class="highlight"><pre><span class="n">su</span> -</pre></div> - - -<p>Puis un</p> -<div class="highlight"><pre> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">dbus</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">alsa</span> <span class="n">start</span> <span class="o">&amp;&amp;</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">rc</span><span class="p">.</span><span class="n">d</span><span class="o">/</span><span class="n">networkmanager</span> <span class="n">start</span> -</pre></div> - - -<p>Sinon, il est possible de juste redémarrer.<br /> -Une fois cela fait, profitez de ce moment pour vous autoriser vous même -a utiliser sudo. Loggez vous en root, et :</p> -<div class="highlight"><pre> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">sudoers</span> -</pre></div> - - -<p>Décommentez la ligne qui commence par # %wheel ALL=(ALL)<br /> -Sauvegardez le fichier, puis, après un <code>su *votrenom*</code>, tentez de faire -un sudo ls /<br /> -Normalement, vous devriez avoir un listing du dossier /<br /> -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?<br /> -C'est simple comme bonjour :</p> -<div class="highlight"><pre> <span class="n">startx</span> -</pre></div> - - -<p>Et PAF! Voila un MATE desktop flambant neuf a configurer!<br /> -Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, -puis installez SLiM (<code>sudo pacman -Syu slim</code>).<br /> -Configurons le:</p> -<div class="highlight"><pre><span class="n">echo</span> <span class="s">&quot;exec dbus-launch mate-session&quot;</span> <span class="o">&gt;</span> <span class="o">~/</span><span class="p">.</span><span class="n">xinitrc</span> <span class="o">&amp;&amp;</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">slim</span><span class="p">.</span><span class="n">conf</span> -</pre></div> - - -<p>Éditez la ligne -"<code>sessions xfce4,icewm-session,wmaker,blackbox</code>" de facon a -ce qu'elle ressemble a "<code>sessions mate-session</code>"<br /> -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.<br /> -Normalement, tout devrait fonctionner!<br /> -Ah oui, et pour installer thunderbird, firefox, chromium, etc...</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">pacman</span> <span class="o">-</span><span class="n">Syu</span> <span class="n">chromium</span> <span class="n">thunderbird</span> <span class="n">xchat</span> <span class="n">firefox</span> <span class="n">rhythmbox</span> <span class="n">pidgin</span> <span class="n">transmission</span><span class="o">-</span><span class="n">gtk</span> <span class="n">vlc</span> -</pre></div> - - -<p>Voila! Et comme dirait <a href="https://twitter.com/spartition">@Spartition</a>, c'est sale, mais qu'est-ce que c'est -bon!<br /> -A plus~</p>WxcafeFri, 05 Oct 2012 14:48:00 +0200tag:wxcafe.net,2012-10-05:posts/%D/archlinux-made-simple/Les systèmes de fichiers//wxcafe.net/posts/%D/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>WxcafeTue, 25 Sep 2012 10:28:00 +0200tag:wxcafe.net,2012-09-25:posts/%D/les-systemes-de-fichiers/Le Quenya - Épisode ø//wxcafe.net/posts/%D/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p>WxcafeTue, 18 Sep 2012 19:07:00 +0200tag:wxcafe.net,2012-09-18:posts/%D/le-quenya-episode-o/Update a propos du blog//wxcafe.net/posts/%D/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>WxcafeTue, 18 Sep 2012 16:57:00 +0200tag:wxcafe.net,2012-09-18:posts/%D/update-a-propos-du-blog/Introduction a bash en tant que language de programmation.//wxcafe.net/posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/<p>L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).</p> -<p>Cependant, il n'est souvent connu qu'en tant qu’interpréteur de -commande. Alors qu'en réalité, le bash est un langage de programmation -(presque) complet! Ainsi, il intègre les structures de contrôle -habituelles ( pour mémoire, les structures de contrôle comprennent les -conditions (les ifs), les boucles (les while), et les choix (les case), -entre autres.), et est donc ce que l'on pourrait appeler un langage de -script, interprété, de la même façon que python, a la difference près -qu'il contient un prompt (un système d'entrée de commande interactif) -bien plus complet et développé que python. </p> -<p>Cependant, les programmes en bash ne sont executables que dans un -environnement de type UNIX, et donc pas sous Windows (cygwin -(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous -windows. Il faut malgré tout convenir que cet environnement est bien -plus compliqué a manipuler, et globalement ne permet pas d'acceder a des -portages de qualité satisfaisante.)</p> -<p>Ainsi, il est possible de créer des fichiers .sh, contenant des -instructions bash mises a la suite (de la même façon qu'un script BATCH -Windows .bat), et faisant appel autant aux commandes internes de bash, -aussi bien que les commandes externes mises en place par les programmes -installés sur le système, exactement comme dans une invite de commande. -Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit -panda roux directement dans la boite magique, tandis qu'un if -[condition] suivi d'un then (quelque chose) lancera le fameux quelque -chose suscité si la condition est vérifiée. Un peu comme en C, quoi. </p> -<p>De cette façon, et avec quelques informations et connaissances, il est -facile de comprendre le fonctionnement de la programmation en bash. -Quelques exemples commentés:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite -d'être clair quand aux capacités et a la simplicité du bash en tant que -language de programmation. Alors en effet, nous n'avons ici absolument -pas utilisé les capacités de bash en lui même, et n'avons fait que le -renvoyer a des programmes externes (sauf read, il est vrai). Voyons -maintenant la syntaxe de bash quand il s'agit d'utiliser les structures -de contrôle:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Voila un petit programme permettant d'apprendre la syntaxe du if en -bash. comme vous pouvez le voir, le language est plutôt lite, et la -structure if n'est pas très difficile a prendre en main.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>case est un opérateur plus complexe a utiliser a bon escient, et sert a -faire des ifs multiples sans avoir a taper des dizaines de lignes de -code.<br /> -(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre -que le code vérifie chacune des conditions : le 1) est validé si la -valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. -le *) désigne toutes les valeurs, et est donc validé si aucune autre -valeur n'a précédemment acceptée.</p> -<p>Quelques notions manquent ici:<br /> -- les nombres aléatoires sont générés par un appel a la variable -\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a -16 bits donc). il est possible de faire des invocations a des nombres -aléatoires plus grands, mais les méthodes permettant de faire cela sont -plus complexes, et je ne les aborderai donc pas ici.<br /> -- comme vous avez pu le constater, les variables sont désignées en tant -que telles par l'utilisation d'un symbole \$ au début de leur nom. -Ainsi, echo number renverra "number", tandis que echo \$number renverra -le résultat de la variable \$number.<br /> -être utilisées dans un programme bash.<br /> -- comme vous avez pu le constater, les commandes doivent tenir en -théorie en une ligne. Cependant, le caractère \ permet de retourner a -la ligne en faisant considérer a bash qu'il s'agit de la même ligne.</p> -<p>Globalement, il faut admettre que bash n'a pas vocation a être un -langage de programmation extrêmement développé. Sans framework -graphique, avec peu de manières d'utiliser de grandes variables, ou -encore une gestion de la mémoire risible, bash n'a rien d'un langage de -développement professionnel.<br /> -Cependant, le simple fait qu'il soit considéré comme un langage de -programmation a part entière font de lui un langage de script d'une -puissance incontestable, et sa simplicité et sa grande popularité font -de lui un langage de choix pour apprendre la programmation simplement et -sans trop se prendre la tête.</p> -<p>J'espère que cet article aura été utile a certain-e-s, et je vous -souhaite bonne chance dans votre découverte de la programmation (n'allez -pas voir ceux qui font de l'orienté objet, c'est des méchants :3)</p>WxcafeSat, 08 Sep 2012 18:15:00 +0200tag:wxcafe.net,2012-09-08:posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/Les différentes couches d'un système d'exploitation//wxcafe.net/posts/%D/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>WxcafeThu, 06 Sep 2012 23:29:00 +0200tag:wxcafe.net,2012-09-06:posts/%D/les-differentes-couches-dun-systeme-dexploitation/La programmation expliquée simplement//wxcafe.net/posts/%D/la-programmation-expliquee-simplement/<p>Salut!<br /> -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé. </p> -<p>Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.<br /> -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation<br /> -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail. </p> -<p>Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.<br /> -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain. </p> -<p>La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.<br /> -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau. </p> -<p>Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur. </p> -<p>Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>WxcafeMon, 27 Aug 2012 00:22:00 +0200tag:wxcafe.net,2012-08-27:posts/%D/la-programmation-expliquee-simplement/GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère//wxcafe.net/posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>GNU/Linux est un vaste et extraordinaire territoire technologique, mais -je ne vais pas m'attarder ici sur les aspects profondément techniques de -ce territoire pour faire plutôt une sorte d'introduction a ce qu'est -vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de -connaissances en informatique.</p> -<p>GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.</p> -<p>De ce fait, on pourrait penser que Linux remplace complètement Windows -une fois installé, et comprend une interface graphique, et toutes sortes -d'utilitaires permettant a l'utilisateur d'utiliser le système (sous -Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. -Pour l'interface graphique, pensez a... Pensez que votre système affiche -autre chose que des lignes de commande.) Or non, une fois installé, -Linux en lui même ne vous afficherait aucune interface graphique, et -s'il est effectivement livré avec des utilitaires, ils ne sont que des -programmes en ligne de commande. Autant les utilisateurs avancés sauront -s'en servir, et pourront argumenter que c'est plus efficace ou plus -rapide, autant les utilisateurs basiques préfèrent une interface -graphique. Alors comment en obtenir une?</p> -<p>Ici, il convient de faire une précision importante. Si il n'existe -qu'une seule version de Windows, ou de Mac OS, il existe en fait -plusieurs centaines de "versions" différentes de Linux. Appelées -distributions, ces dernière sont développées par des groupes -complètement séparés, et se basent sur le fait que Linux soit -entièrement placé sous licence libre (ce qui leur permet de l'utiliser a -leur guise, a condition que leur travail soit lui aussi placé sous -licence libre). De ce fait, de nombreuses distributions existent et se -développent en parallèle. On peut ainsi citer <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>Ainsi, le choix astronomique de distributions Linux a bien un sens : -chacune d'entre elle intègre des outils différents. Par exemple, Debian -intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend -particulièrement stable. Ubuntu intègre Unity, ce qui en fait une -distribution particulièrement intuitive. Linux Mint intègre Cinnamon, -qui est une version dérivée de GNOME 3, ce qui permet encore une autre -expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, -ce qui permet a l'utilisateur de choisir entre les multiples interfaces -existantes.</p> -<p>Ce qu'il est important de retenir de cela, c'est que Linux est un OS -complètement libre, ce qui signifie que n'importe qui peut modifier et -utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, -Linux est un OS qui est véritablement créé par des passionnés, pour tous -et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué -a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. -Cependant, Linux donne la possibilité a l'utilisateur de le rendre -affreusement complexe, mais aussi de le rendre adapté a ses besoins, -quels que soient ceux ci. Et c'est la que réside l'incroyable puissance -de ce Système d'Exploitation. Il est extraordinairement adaptable.</p> -<p>N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas -technophiles. Ils pourraient adorer, et peut être même le devenir :)</p> -<p>A bientôt!</p>WxcafeWed, 22 Aug 2012 20:33:00 +0200tag:wxcafe.net,2012-08-22:posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/Débuts, présentation, etc...//wxcafe.net/posts/%D/debuts-presentation-etc/<p>Bonjour!</p> -<p>Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur -Twitter, mais aussi sur IRC (Je traîne pas mal sur -irc.freenode.net/##nolife et #debian-fr)</p> -<p>J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je -fais partie de ce genre de personne qui sont capables d'investir tout -leur temps et leur énergie a s’intéresser a un sujet en particulier, et -qui ne peuvent pas vivre sans leurs passions, avec une petite différence -cependant, qui est que je m’intéresse a plusieurs choses : -l'informatique, qui est un champ tellement large qu'on peut passer une -vie a apprendre des choses dessus, et plus particulièrement à -l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres -{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les -trolls seront a partir de maintenant indiqués avec le tag [tr]] du -libre, je préfère utiliser de l'open-source si c'est possible}, -programmation en C, python et java, etc...) , mais aussi a -l’électronique. </p> -<p>Dans un tout autre registre, je m’intéresse aussi -beaucoup aux différents aspects du féminisme et des égalités sexuelles -(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , -et a la culture dite "geek" en général.</p> -<p>Je tenterai de poster ici le plus souvent possible, mais j'ai de gros -problèmes en terme de régularité de post, donc ne vous inquiétez pas si -vous ne voyez rien pendant deux semaines.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p>WxcafeSat, 18 Aug 2012 20:27:00 +0200tag:wxcafe.net,2012-08-18:posts/%D/debuts-presentation-etc/ \ No newline at end of file +a tenter de comprendre les configurations en question et a les améliorer!</p>WxcafeWed, 02 Jan 2013 02:12:00 +0100tag:wxcafe.net,2013-01-02:posts/mutt-ou-le-client-email-le-meilleur-moins-mauvais/ \ No newline at end of file diff --git a/output/index.html b/output/index.html index 340d186..54c09c5 100644 --- a/output/index.html +++ b/output/index.html @@ -7,7 +7,9 @@ + + - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Le Quenya - Épisode ø

    -
    - Date - - Tue 18 September 2012 - -
    - By - Wxcafe -
    - Category - Language -
    - - - - -
    -

    Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc.

    -

    En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite.

    -

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

    -

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

    -

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

    -

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

    -
    -
    -
    -

    Update a propos du blog

    -
    - Date - - Tue 18 September 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

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

    -
      -
    • -

      Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (@Wxcafe)

      -
    • -
    • -

      Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.

      -
    • -
    -

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

    -

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

    -

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

    -

    A plus tard!

    -
    -
    -
    -

    Introduction a bash en tant que language de programmation.

    -
    -

    L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).

    -

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

    -

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

    -

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

    -

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

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

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

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    #!/bin/bash 
    -echo "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?" 
    -read host_name 
    -if [ $host_name == $HOSTNAME ] ## voici la syntaxe du if. Attention a bien penser a mettre les espaces avant la première variable, et après la seconde. La variable $HOSTNAME ici utilisée est une variable présente par défaut sur le système. 
    -then echo "you told the truth!" 
    -fi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash. 
    -if [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. 
    -then echo "you lied!" 
    -fi 
    -exit
    -
    -
    - -

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

    -

    Passons maintenant au while:

    -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    #!/bin/bash
    -echo "what is your name?"
    -read name
    -while [ 1 < 10 ]    ## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.
    -do echo "i love" $name
    -done
    -exit
    -
    -
    - -

    Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).

    -

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

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    #!/bin/bash
    -echo "please enter a number between one and five"
    -read number
    -case $number in 
    -1)
    -echo "the choosen number was one"
    -;;
    -2)
    -echo "the choosen number was two"
    -;;
    -3)
    -echo "the choosen number was three"
    -;;
    -4)
    -echo "the choosen number was four"
    -;;
    -5)
    -echo "the choosen number was five"
    -;;
    -*)
    -echo "this number is not correct"
    -;; 
    -esac
    -exit
    -
    -
    - -

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

    -

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

    -

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

    -

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

    -
    -
    -
    -

    Les différentes couches d'un système d'exploitation

    -
    - Date - - Thu 06 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

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

    -

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

    -

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

    -

    Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")

    -

    Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"

    -

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

    -

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

    -

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

    -

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

    -

    Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...

    -

    Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.

    -

    Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.

    -

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

    -

    Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)

    -

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

    -

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

    -

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

    -
    -
    -
    -

    La programmation expliquée simplement

    -
    - Date - - Mon 27 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Salut!
    -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé.

    -

    Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.
    -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation
    -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail.

    -

    Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.
    -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain.

    -

    La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.
    -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau.

    -

    Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau

    -

    Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :

    -
    #include 
    -void main() {
    -printf("hello world");
    -return 0;
    -}
    -
    - - -

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

    -
    print "hello world"
    -
    - - -

    et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement.

    -

    Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur.

    -

    Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)

    -

    Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.
    -A bientôt!

    -
    -
    -
    -

    GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère

    -
    - Date - - Wed 22 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

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

    -

    GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.

    -

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

    -

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

    -

    Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : Unity, la -nouvelle interface d'Ubuntu; GNOME , une interface qui vise a la -simplicité; ou encore KDE, une interface utilisateur ressemblant a -Windows 7.

    -

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

    -

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

    -

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

    -

    A bientôt!

    -
    -
    -
    -

    Débuts, présentation, etc...

    -
    - Date - - Sat 18 August 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    Bonjour!

    -

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

    -

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

    -

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

    -

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

    -

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

    -
    -
    - -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/pages/about/index.html b/output/pages/about/index.html index 205a300..36ef273 100644 --- a/output/pages/about/index.html +++ b/output/pages/about/index.html @@ -7,7 +7,9 @@ + + - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - SSL ou la sécurité sur l'internet -

    -
    -
    -
    -
    - Date - - Fri 30 May 2014 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

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

    -

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

    -

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

    -

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

    -

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

    -

    Il serait préférable de faire des redirections automatiques des adresses http -vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront -donc pas mises en place.

    -

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

    -

    Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation :
    -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes -suivantes:

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

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

    -

    apache :

    -
    # /etc/apache2/mods_enabled/ssl.conf
    -# [...]
    -SSLProtocol all -SSLv2 -SSLv3
    -SSLHonorCipherOrder on
    -SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    -  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    -  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
    -# [...]
    -# /etc/apache2/sites-enabled/default-ssl
    -# [...]
    -SSLEngine on
    -SSLCertificateFile /etc/certs/example.com.crt
    -SSLCertificateKeyFile /etc/certs/example.com.key
    -# [...]
    -
    - - -

    nginx :

    -
    # /etc/nginx/nginx.conf 
    -# [...]
    -ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    -ssl_prefer_server_ciphers on;
    -ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    -  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    -  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
    -# [...]
    -# /etc/nginx/sites-enabled/default-ssl
    -# [...]
    -ssl on;
    -ssl_certificate /etc/certs/example.com.crt
    -ssl_certificate_key /etc/certs/example.com.key
    -# [...]
    -
    - - -

    prosody (jabber) :

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

    postfix (email) :

    -
    # /etc/postfix/main.cf
    -# [...]
    -smtpd_tls_cert_file = /etc/certs/example.com.crt
    -smtpd_tls_key_file = /etc/certs/example.com.key
    -tls_preempt_cipherlist = yes
    -smtpd_tls_eecdh_grade = strong
    -smtdp_tls_mandatory_ciphers = high
    -smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
    -smtpd_tls_security_level = encrypt
    -smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
    -smtpd_use_tls = yes
    -# [...]
    -
    - - -

    dovecot (imap) :

    -
    # /etc/dovecot/dovecot.conf 
    -# [...]
    -ssl_cert = </etc/certs/example.com.crt
    -ssl_key = </etc/certs/example.com.key
    -ssl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
    -
    - - -

    Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter -au manuel approprié.

    -

    Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker SSL and the future -of Authenticity qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/archlinux-made-simple/index.html b/output/posts/%D/archlinux-made-simple/index.html deleted file mode 100644 index 4dca1b7..0000000 --- a/output/posts/%D/archlinux-made-simple/index.html +++ /dev/null @@ -1,502 +0,0 @@ - - - - - Archlinux made simple - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Archlinux made simple -

    -
    -
    -
    -
    - Date - - Fri 05 October 2012 - -
    - By - Wxcafe -
    - Category - OSes -
    - - - - -
    -

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

    -

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

    -

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

    -
      -
    1. -

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

      -
    2. -
    3. -

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

      -
    4. -
    -

    De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle -pacman, et les commandes de base sont :

    -
      -
    • -

      recherche d'un paquet :

      -
      pacman -Ss paquet
      -
      - - -
    • -
    • -

      installation d'un paquet :

      -
      sudo pacman -S paquet
      -
      - - -
    • -
    • -

      désinstallation d'un paquet :

      -
      sudo pacman -R paquet
      -
      - - -
    • -
    • -

      mise a jour de tous les paquets installés :

      -
      sudo pacman -Syu paquet
      -
      - - -
    • -
    -

    Archlinux est une distribution dite "rolling release", ce qui signifie -qu'il n'y a pas de version a proprement dites, et que les paquets se -mettent a jour en permanence, sans jamais changer la "version" d'Arch. -Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, -puisqu'une version plus ancienne n'aurait aucun sens.

    -

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

    -

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

    -

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

    -

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

    -

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

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

    Ensuite, gravons cette image sur un disque USB :

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

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

    -

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

    -
    loadkeys fr
    -
    - - -

    Puis nous pouvons passer a l'installation proprement dite. -Partitionnement :

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

    formatage des partitions :

    -
    mkfs.ext4 /dev/sda1 # partition root
    -
    -pacman -Syu btrfs-progs && mkfs.btrfs /dev/sda2 # partition home
    -
    -mkswap /dev/sda3 && swapon /dev/sda3 # partition de swap
    -
    - - -

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

    -
    mount /dev/sda1 /mnt
    -
    -mkdir /mnt/home && mount /dev/sda2 /mnt/home
    -
    -dhclient eth0 # si vous utilisez une connection filaire, sinon voire http://wiki.archlinux.fr/Wifi#Configuration
    -
    -pacstrap /mnt base base-devel
    -
    -genfstab -p /mnt > /mnt/etc/fstab
    -
    - - -

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

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

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

    -
    arch-chroot /mnt bash
    -
    - - -

    configurons les bases :

    -
    echo HOSTNAME > /etc/hostname
    -
    -ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime
    -
    -date MMJJhhmmAAAA
    -
    -hwclock --systohc
    -
    -vim /etc/locale.gen # Décommentez les lignes correspondant au français : fr_FR.UTF-8 et fr_FR.ISO-8859-1
    -
    -echo  'LANG="fr_FR.UTF-8"' > /etc/locale.conf
    -
    -locale-gen
    -
    -mkinitcpio -p linux
    -
    - - -

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

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

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

    -
    syslinux-install_update /dev/sda -mia
    -
    -passwd root
    -
    - - -

    Et voila, l'installation est terminée! Plus qu'a quitter la session et a -redémarrer l'ordinateur!

    -
     exit
    -umount /mnt/home 
    -umount /mnt
    -reboot
    -
    - - -

    Fini!

    -

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

    -
      -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

      Installation des principaux logiciels utiles non inclus dans mate ni -base (yaourt, chromium, thunderbird, etc...).

      -
    • -
    -

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

    -

    Bon, reprenons.

    -

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

    -

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

    -
    vim /etc/pacman.conf
    -
    - - -

    Ici, ajoutez les lignes suivantes :

    -
    [mate]
    -Server = http://repo.mate-desktop.org/archlinux/$arch
    -
    - - -

    Installons maintenant les paquets :

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

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

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

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

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

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

    -
    vim /etc/rc.conf
    -
    - - -

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

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

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

    -
    su
    -
    - - -

    Puis un

    -
     /etc/rc.d/dbus start && /etc/rc.d/alsa start && /etc/rc.d/networkmanager start
    -
    - - -

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

    -
     vim /etc/sudoers
    -
    - - -

    Décommentez la ligne qui commence par # %wheel ALL=(ALL)
    -Sauvegardez le fichier, puis, après un su *votrenom*, tentez de faire -un sudo ls /
    -Normalement, vous devriez avoir un listing du dossier /
    -Bon, maintenant, pourquoi ne pas tenter de lancer MATE?
    -C'est simple comme bonjour :

    -
     startx
    -
    - - -

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

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

    Éditez la ligne -"sessions xfce4,icewm-session,wmaker,blackbox" de facon a -ce qu'elle ressemble a "sessions mate-session"
    -Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.
    -Normalement, tout devrait fonctionner!
    -Ah oui, et pour installer thunderbird, firefox, chromium, etc...

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

    Voila! Et comme dirait @Spartition, c'est sale, mais qu'est-ce que c'est -bon!
    -A plus~

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/debuts-presentation-etc/index.html b/output/posts/%D/debuts-presentation-etc/index.html deleted file mode 100644 index 707db1a..0000000 --- a/output/posts/%D/debuts-presentation-etc/index.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - Débuts, présentation, etc... - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Débuts, présentation, etc... -

    -
    -
    -
    -
    - Date - - Sat 18 August 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    Bonjour!

    -

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

    -

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

    -

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

    -

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

    -

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

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/index.html b/output/posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/index.html deleted file mode 100644 index 8ccef42..0000000 --- a/output/posts/%D/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/index.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - - GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère -

    -
    -
    -
    -
    - Date - - Wed 22 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

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

    -

    GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un -Système d'Exploitation. Un système d'exploitation est, pour simplifier, -un ensemble d'outils informatiques qui vous permettent d'utiliser votre -ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation -de système d'exploitation (Operating System en anglais) est OS. Les 4 -principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et -Solaris. Les trois derniers sont issus d'un autre système, plus ancien, -nommé UNIX.

    -

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

    -

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

    -

    Ainsi, ces distributions intègrent une interface graphique. Cependant, -grâce a la liberté dont bénéficient les développeurs sous Linux, il -existe de nombreuses interfaces graphiques différentes : Unity, la -nouvelle interface d'Ubuntu; GNOME , une interface qui vise a la -simplicité; ou encore KDE, une interface utilisateur ressemblant a -Windows 7.

    -

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

    -

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

    -

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

    -

    A bientôt!

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/index.html b/output/posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/index.html deleted file mode 100644 index f5552f9..0000000 --- a/output/posts/%D/introduction-a-bash-en-tant-que-language-de-programmation/index.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - - Introduction a bash en tant que language de programmation. - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Introduction a bash en tant que language de programmation. -

    -
    -
    -
    -
    -

    L’interpréteur de commandes bash (Bourne Again SHell) -est possiblement le shell le plus connu, notamment grâce a son -intégration en tant que shell par défaut dans les distributions Linux -les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - -Mageia, etc...).

    -

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

    -

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

    -

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

    -

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

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

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

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    #!/bin/bash 
    -echo "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?" 
    -read host_name 
    -if [ $host_name == $HOSTNAME ] ## voici la syntaxe du if. Attention a bien penser a mettre les espaces avant la première variable, et après la seconde. La variable $HOSTNAME ici utilisée est une variable présente par défaut sur le système. 
    -then echo "you told the truth!" 
    -fi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash. 
    -if [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. 
    -then echo "you lied!" 
    -fi 
    -exit
    -
    -
    - -

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

    -

    Passons maintenant au while:

    -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    #!/bin/bash
    -echo "what is your name?"
    -read name
    -while [ 1 < 10 ]    ## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.
    -do echo "i love" $name
    -done
    -exit
    -
    -
    - -

    Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).

    -

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

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    #!/bin/bash
    -echo "please enter a number between one and five"
    -read number
    -case $number in 
    -1)
    -echo "the choosen number was one"
    -;;
    -2)
    -echo "the choosen number was two"
    -;;
    -3)
    -echo "the choosen number was three"
    -;;
    -4)
    -echo "the choosen number was four"
    -;;
    -5)
    -echo "the choosen number was five"
    -;;
    -*)
    -echo "this number is not correct"
    -;; 
    -esac
    -exit
    -
    -
    - -

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

    -

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

    -

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

    -

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

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/index.html b/output/posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/index.html deleted file mode 100644 index 4868e59..0000000 --- a/output/posts/%D/la-cryptographie-avec-pgp-et-principalement-gnupg/index.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - La cryptographie avec PGP et principalement GnuPG - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - La cryptographie avec PGP et principalement GnuPG -

    -
    -
    -
    -
    - Date - - Mon 19 November 2012 - -
    - By - Wxcafe -
    - Category - Tutoriel -
    - - - - -
    -

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

    -

    Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.
    -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.

    -

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

    -

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

    -

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

    -

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

    -

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

    -
     gpg --gen-key
    -
    - - -

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

    -

    Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande makepasswd, qui génère automatiquement un mot de -passe)

    -

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

    -

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

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

    pour la clé publique, et

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

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

    -

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

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

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

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

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

    -

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

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

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

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

    puis la renvoyer au serveur via

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

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

    -

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

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/la-programmation-expliquee-simplement/index.html b/output/posts/%D/la-programmation-expliquee-simplement/index.html deleted file mode 100644 index b527223..0000000 --- a/output/posts/%D/la-programmation-expliquee-simplement/index.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - La programmation expliquée simplement - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - La programmation expliquée simplement -

    -
    -
    -
    -
    - Date - - Mon 27 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Salut!
    -Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire -récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé -pas mal de temps assez occupé.

    -

    Enfin, après un certain temps a farfouiller au millieu des connecteurs -SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques -durs, je suis de retour pour un court article.
    -Du coup, je m'étais dit que j'allais reprendre sur le thème de -l'informatique expliquée au grand public, en tentant d'aller un peu plus -loin que la dernière fois sur le thème de la programmation
    -Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. -Si a peu près tout le monde sait que "les ordinateurs, ils ne -comprennent que les 1 et les 0!", peu de gens savent comment cela -fonctionne en détail.

    -

    Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà -des notions de base en informatique. Ainsi, vous savez surement que les -ordinateurs fonctionnent avec des programmes, qui sont composés de -code.
    -Ainsi, il faut comprendre que le code (source) est "compilé" en un -fichier "binaire". Un fichier binaire est un fichier comprenant les -instructions telles qu’exécutées par le processeur, et donc absolument -illisible pour un humain.

    -

    La compilation est le processus qui transforme le code source en -binaire executable. Les binaires ont, sous Windows, l'extension .exe, -tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension -particulière.
    -Ceci étant dit, il faut comprendre que certains langages sont plus -proches que d'autres du langage processeur, les langages les plus -proches sont dits de "bas niveau". Les langages les plus éloignés sont -donc dits de haut niveau.

    -

    Par exemple, l'assembleur est l'un des languages de plus bas niveau, -tandis que python par exemple est un langage de plus haut niveau. Les -langages de haut niveau sont souvent bien plus simples a comprendre et a -apprendre que les langages de bas niveau

    -

    Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :

    -
    #include 
    -void main() {
    -printf("hello world");
    -return 0;
    -}
    -
    - - -

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

    -
    print "hello world"
    -
    - - -

    et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement.

    -

    Python utilise en effet un système similaire a Java en ayant un -interpréteur dit "runtime" ou "temps réel", qui interprète le programme -sans le compiler. Java utilise un système légèrement différent, puisque -le code a besoin d'être compilé, mais est interpreté par un interpréteur -et non par le processeur.

    -

    Cette méthode permet le fameux "code once, run everywhere", ce qui -signifie que le même code est exécutable sur quasiment tous les systèmes -d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est -disponible.)

    -

    Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.
    -A bientôt!

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/index.html b/output/posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/index.html deleted file mode 100644 index 227e7ac..0000000 --- a/output/posts/%D/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/index.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - La séparation des églises et de l'état, une idée qu'elle est bonne? - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - La séparation des églises et de l'état, une idée qu'elle est bonne? -

    -
    -
    -
    -
    - Date - - Thu 13 December 2012 - -
    - By - Wxcafe -
    - Category - Ranting -
    - - - - -
    -

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

    -

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

    -

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

    -

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

    -

    Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire cet article de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps.

    -

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

    -

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

    -

    Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur.

    -

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

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/le-quenya-episode-o/index.html b/output/posts/%D/le-quenya-episode-o/index.html deleted file mode 100644 index db94c17..0000000 --- a/output/posts/%D/le-quenya-episode-o/index.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - Le Quenya - Épisode ø - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Le Quenya - Épisode ø -

    -
    -
    -
    -
    - Date - - Tue 18 September 2012 - -
    - By - Wxcafe -
    - Category - Language -
    - - - - -
    -

    Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc.

    -

    En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite.

    -

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

    -

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

    -

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

    -

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

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/les-differentes-couches-dun-systeme-dexploitation/index.html b/output/posts/%D/les-differentes-couches-dun-systeme-dexploitation/index.html deleted file mode 100644 index 8bee42c..0000000 --- a/output/posts/%D/les-differentes-couches-dun-systeme-dexploitation/index.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - Les différentes couches d'un système d'exploitation - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Les différentes couches d'un système d'exploitation -

    -
    -
    -
    -
    - Date - - Thu 06 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

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

    -

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

    -

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

    -

    Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")

    -

    Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"

    -

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

    -

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

    -

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

    -

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

    -

    Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...

    -

    Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.

    -

    Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.

    -

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

    -

    Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)

    -

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

    -

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

    -

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

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/les-systemes-de-fichiers/index.html b/output/posts/%D/les-systemes-de-fichiers/index.html deleted file mode 100644 index 19c5c31..0000000 --- a/output/posts/%D/les-systemes-de-fichiers/index.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - Les systèmes de fichiers - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Les systèmes de fichiers -

    -
    -
    -
    -
    - Date - - Tue 25 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

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

    -

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

    -

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

    -

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

    -

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

    -

    Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.

    -

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

    -
      -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    • -

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

      -
    • -
    -

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

    -

    Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)

    -

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

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/linformatique-a-lecole/index.html b/output/posts/%D/linformatique-a-lecole/index.html deleted file mode 100644 index 88eebb0..0000000 --- a/output/posts/%D/linformatique-a-lecole/index.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - L'informatique a l'école - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - L'informatique a l'école -

    -
    -
    -
    -
    - Date - - Mon 15 October 2012 - -
    - By - Wxcafe -
    - Category - Ranting -
    - - - - -
    -

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/mise-en-place-dun-serveur-dns/index.html b/output/posts/%D/mise-en-place-dun-serveur-dns/index.html deleted file mode 100644 index b6167c0..0000000 --- a/output/posts/%D/mise-en-place-dun-serveur-dns/index.html +++ /dev/null @@ -1,437 +0,0 @@ - - - - - Mise en place d'un serveur DNS - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Mise en place d'un serveur DNS -

    -
    -
    -
    -
    - Date - - Mon 24 February 2014 - -
    - By - Wxcafe -
    - Category - Tutoriel -
    - - - - -
    -

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

    -

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

    -

    Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même -façon que le système de fichiers : en arborescence. Cependant, là ou la racine -du FS est /, 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 -. n'est pas obligatoire et la progression se fait de droite a gauche. Par -exemple, le tld(top level domain, domaine de haut niveau) com, et le domaine -google.com appartient a com, on écrit donc google.com sans écrire le point -a la fin de façon courante.

    -

    Le reverse DNS est une variante du DNS "classique" permettant de résoudre les -adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. -Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger -quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS -sont donc constituées de l'adresse IP, dans le sens contraire a l'ordre -habituel, et du faux domaine .in-addr.arpa -Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire dig PTR -76.46.39.5.in-addr.arpa. La réponse sera, évidemment, wxcafe.net

    -

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

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

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

    -

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

    -

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

    -

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

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

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

    -

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

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

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -

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

    -

    Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est -pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de -wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez -aller vous renseigner directement a la source : le RFC -1034 et le -RFC 1035. Dans un autre style (bien plus -avancé) le blog de Stéphane Bortzmeyer est interessant -aussi.

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/index.html b/output/posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/index.html deleted file mode 100644 index faa4062..0000000 --- a/output/posts/%D/mutt-ou-le-client-email-le-meilleur-moins-mauvais/index.html +++ /dev/null @@ -1,469 +0,0 @@ - - - - - Mutt ou le client email le <del>meilleur</del> moins mauvais - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Mutt ou le client email le meilleur moins mauvais -

    -
    -
    -
    -
    - Date - - Wed 02 January 2013 - -
    - By - Wxcafe -
    - Category - Tutoriel -
    - - - - -
    -

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

    -

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

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

    Ça devrait être assez simple a lire, j'ai tout bien commenté :3
    -Puis ma config mutt :

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

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

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/%D/opensmtpd-debian/index.html b/output/posts/%D/opensmtpd-debian/index.html deleted file mode 100644 index 2a42df8..0000000 --- a/output/posts/%D/opensmtpd-debian/index.html +++ /dev/null @@ -1,582 +0,0 @@ - - - - - OpenSMTPd comme serveur mail sous debian - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - OpenSMTPd comme serveur mail sous debian -

    -
    -
    -
    -
    - Date - - Fri 07 November 2014 - -
    - By - Wxcafé -
    - Category - Tutorial -
    - - - - -
    -

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

    -

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

    -

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

    -

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

    -

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

    -
                ╭────────────────╮                    ╭──────────╮
    -            │╭──────────────>│────> to filter ───>│─╮        
    -  mail in   ││                                     amavis 
    -───────────>│╯ OpenSMTPd  ╭──│<─── from filter<───│<        
    -                                               ╰──────────╯
    -  mail out                                     ╭──────────╮
    -<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
    -                                                 dovecot       mailbox
    -            ╰────────────────╯                    ╰──────────╯
    -
    - - -

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

    -

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

    -

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

    -

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

    -

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

    -
                ╭───────────────╮                    ╭───────────╮
    -            │╭─────────────>│──> SMTP (10026) ──>│─╮         
    -  SMTP in   ││                                    amavis  
    -────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│< (sign)  
    -                                              ╰───────────╯
    -  SMTP out                
    -25 <────────│<───────────╯  
    -            ╰───────────────╯
    -
    - - -

    Pour les mails sortants; et

    -
                ╭───────────────╮                    ╭────────────╮
    -            │╭─────────────>│──> SMTP (10024) ──>│─╮          
    -  SMTP in   ││                                    amavis   
    -────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<(filter)  
    -                                              ╰────────────╯
    -                                              ╭────────────╮
    -                        ╰─>│──> LMTP (socket) >│───────────>│──> to user's
    -                                                 dovecot        mailbox
    -            ╰───────────────╯                    ╰────────────╯
    -
    - - -

    Pour les mails entrants.

    -

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

    -

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

    -

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

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

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

    -

    /etc/smtpd.conf

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

    Expliquons un peu ce fichier de configuration :

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

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

    -

    /etc/dovecot/dovecot.conf

    -
    ## Dovecot configuration file
    -
    -# basic config
    -info_log_path = /var/log/dovecot-info.log
    -log_path = /var/log/dovecot.log
    -log_timestamp = "%Y-%m-%d %H:%M:%S "
    -mail_location = maildir:%h/mail
    -
    -# authentication
    -passdb {
    -    driver = pam
    -}
    -userdb {
    -    driver = passwd
    -}
    -
    -# the protocols we use
    -protocols = imap lmtp sieve
    -
    -# ssl config
    -ssl_cert = </etc/certs/exem.pl.cert
    -ssl_key = </etc/certs/exem.pl.key
    -ssl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
    -ssl = yes
    -
    -## configuring services 
    -# disables imap login without SSL (yes dovecot is dumb that way)
    -service imap-login {
    -    inet_listener imap {
    -        port=0 
    -    }
    -}
    -
    -service lmtp {
    -    unix_listener lmtp {
    -        mode = 0666
    -    }
    -}
    -
    -## configuring protocols
    -# the dovecot lda, we set it to use sieve
    -protocol lda {
    -    mail_plugins = $mail_plugins sieve
    -}
    -
    -protocol lmtp {
    -    postmaster_address =  whoever@exem.pl
    -    mail_plugins = $mail_plugins sieve
    -}
    -
    -plugin {
    -    sieve = ~/.dovecot.sieve
    -    sieve_dir = ~/sieve
    -}
    -
    - - -

    ATTENTION: Sous OpenBSD, remplacez

    -
    passdb {
    -    driver = pam
    -}
    -
    - - -

    par

    -
    passdb {
    -    driver = bsdauth
    -}
    -
    - - -

    pour identifier les utilisateurs système

    -

    Ici aussi, voyons comment ce fichier est structuré :

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

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

    -

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

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

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

    -

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

    -

    Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (un -tutorial) -mais de nombreuses autre méthodes existent. -Il nous reste encore a configurer spamassassin :

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

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

    -

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

    -

    Bon courage pour votre hosting de mail ensuite...

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/SSL-ou-la-securite-sur-internet/index.html b/output/posts/SSL-ou-la-securite-sur-internet/index.html new file mode 100644 index 0000000..cf02f69 --- /dev/null +++ b/output/posts/SSL-ou-la-securite-sur-internet/index.html @@ -0,0 +1,340 @@ + + + + + SSL ou la sécurité sur l'internet + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +

    + SSL ou la sécurité sur l'internet +

    +
    +
    +
    +
    + Date + + Fri 30 May 2014 + +
    + By + Wxcafe +
    + Category + Note +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

    Bon, maintenant que les explications basiques sont faites, voyons +l’implémentation :
    +Pour générer la clé, tout d’abord, il convient d’utiliser les commandes +suivantes:

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

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

    +

    apache :

    +
    # /etc/apache2/mods_enabled/ssl.conf
    +# [...]
    +SSLProtocol all -SSLv2 -SSLv3
    +SSLHonorCipherOrder on
    +SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    +  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    +  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
    +# [...]
    +# /etc/apache2/sites-enabled/default-ssl
    +# [...]
    +SSLEngine on
    +SSLCertificateFile /etc/certs/example.com.crt
    +SSLCertificateKeyFile /etc/certs/example.com.key
    +# [...]
    +
    + + +

    nginx :

    +
    # /etc/nginx/nginx.conf 
    +# [...]
    +ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    +ssl_prefer_server_ciphers on;
    +ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    +  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    +  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
    +# [...]
    +# /etc/nginx/sites-enabled/default-ssl
    +# [...]
    +ssl on;
    +ssl_certificate /etc/certs/example.com.crt
    +ssl_certificate_key /etc/certs/example.com.key
    +# [...]
    +
    + + +

    prosody (jabber) :

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

    postfix (email) :

    +
    # /etc/postfix/main.cf
    +# [...]
    +smtpd_tls_cert_file = /etc/certs/example.com.crt
    +smtpd_tls_key_file = /etc/certs/example.com.key
    +tls_preempt_cipherlist = yes
    +smtpd_tls_eecdh_grade = strong
    +smtdp_tls_mandatory_ciphers = high
    +smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
    +smtpd_tls_security_level = encrypt
    +smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
    +smtpd_use_tls = yes
    +# [...]
    +
    + + +

    dovecot (imap) :

    +
    # /etc/dovecot/dovecot.conf 
    +# [...]
    +ssl_cert = </etc/certs/example.com.crt
    +ssl_key = </etc/certs/example.com.key
    +ssl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
    +
    + + +

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

    +

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

    +
    +
    +
    +
    + +
    +
    +
    +
    + Proudly powered by Pelican, + which takes great advantage of Python.
    + Powered by bootstrap2 theme, thanks! +
    +
    +
    + + \ No newline at end of file diff --git a/output/posts/%D/comment-saurik-a-roote-les-google-glass/index.html b/output/posts/comment-saurik-a-roote-les-google-glass/index.html similarity index 65% rename from output/posts/%D/comment-saurik-a-roote-les-google-glass/index.html rename to output/posts/comment-saurik-a-roote-les-google-glass/index.html index dfd3162..b42eac6 100644 --- a/output/posts/%D/comment-saurik-a-roote-les-google-glass/index.html +++ b/output/posts/comment-saurik-a-roote-les-google-glass/index.html @@ -7,7 +7,9 @@ + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +

    + Docker et les ebooks sur Twitter +

    +
    +
    +
    +
    + Date + + Sat 28 February 2015 + +
    + By + Wxcafe +
    + Category + Note +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

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

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

    +

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

    +
    +
    +
    +
    + +
    +
    +
    +
    + Proudly powered by Pelican, + which takes great advantage of Python.
    + Powered by bootstrap2 theme, thanks! +
    +
    +
    + + \ No newline at end of file diff --git a/output/posts/%D/freebsd-online-mfsbsd/index.html b/output/posts/freebsd-online-mfsbsd/index.html similarity index 69% rename from output/posts/%D/freebsd-online-mfsbsd/index.html rename to output/posts/freebsd-online-mfsbsd/index.html index dba89f1..4a8fc48 100644 --- a/output/posts/%D/freebsd-online-mfsbsd/index.html +++ b/output/posts/freebsd-online-mfsbsd/index.html @@ -7,7 +7,9 @@ + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +

    + Manettes : Hori vs. PDP +

    +
    +
    +
    +
    + Date + + Sun 19 April 2015 + +
    + By + Wxcafe +
    + Category + Vidya Games +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

    Hori_face

    +

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

    +

    Hori_dos

    +

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

    +

    Hori_CM

    +

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

    +

    Hori_Cstick

    +

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

    +

    Hori_coque

    +

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

    +
    + +

    Passons maintenant a la manette PDP.

    +

    PDP_face

    +

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

    +

    PDP_dos

    +

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

    +

    PDP_CM

    +

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

    +

    PDP_CF

    +

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

    +

    Quelques photos des gâchettes en question :

    +

    PDP_G_1

    +

    PDP_G_2

    +

    PDP_G_3

    +

    PDP_G_4

    +
    +

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

    +
    +
    +
    +
    + +
    +
    +
    +
    + Proudly powered by Pelican, + which takes great advantage of Python.
    + Powered by bootstrap2 theme, thanks! +
    +
    +
    + + \ No newline at end of file diff --git a/output/posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/index.html b/output/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/index.html similarity index 59% rename from output/posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/index.html rename to output/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/index.html index 9958eee..9cff5d0 100644 --- a/output/posts/%D/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/index.html +++ b/output/posts/le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper/index.html @@ -7,7 +7,9 @@ + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +

    + Mise en place d'un serveur DNS +

    +
    +
    +
    +
    + Date + + Mon 24 February 2014 + +
    + By + Wxcafe +
    + Category + Tutoriel +
    + + + + +
    +

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

    +

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

    +

    Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même +façon que le système de fichiers : en arborescence. Cependant, là ou la racine +du FS est /, 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 +. n’est pas obligatoire et la progression se fait de droite a gauche. Par +exemple, le tld(top level domain, domaine de haut niveau) com, et le domaine +google.com appartient a com, on écrit donc google.com sans écrire le point +a la fin de façon courante.

    +

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

    +

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

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

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

    +

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

    +

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

    +

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

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

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

    +

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

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

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +

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

    +
    +
    +
    +
    + +
    +
    +
    +
    + Proudly powered by Pelican, + which takes great advantage of Python.
    + Powered by bootstrap2 theme, thanks! +
    +
    +
    + + \ No newline at end of file diff --git a/output/posts/%D/monter-son-propre-serveur-partie-1/index.html b/output/posts/monter-son-propre-serveur-partie-1/index.html similarity index 63% rename from output/posts/%D/monter-son-propre-serveur-partie-1/index.html rename to output/posts/monter-son-propre-serveur-partie-1/index.html index 146a550..4bf1f61 100644 --- a/output/posts/%D/monter-son-propre-serveur-partie-1/index.html +++ b/output/posts/monter-son-propre-serveur-partie-1/index.html @@ -7,7 +7,9 @@ + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +

    + Mutt ou le client email le meilleur moins mauvais +

    +
    +
    +
    +
    + Date + + Wed 02 January 2013 + +
    + By + Wxcafe +
    + Category + Tutoriel +
    + + + + +
    +

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

    +

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

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

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

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

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

    +
    +
    +
    +
    + +
    +
    +
    +
    + Proudly powered by Pelican, + which takes great advantage of Python.
    + Powered by bootstrap2 theme, thanks! +
    +
    +
    + + \ No newline at end of file diff --git a/output/posts/%D/nat/index.html b/output/posts/nat/index.html similarity index 84% rename from output/posts/%D/nat/index.html rename to output/posts/nat/index.html index ff321da..aad9b10 100644 --- a/output/posts/%D/nat/index.html +++ b/output/posts/nat/index.html @@ -7,7 +7,9 @@ + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +

    + les NUCs et le HDMI-CEC +

    +
    +
    +
    +
    + Date + + Sat 22 August 2015 + +
    + By + Wxcafe +
    + Category + Note +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +

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

    +
    Custom Solution
    +  ┌─┬─┬─┬─┬─┐
    +  │g│ │·│r│·│
    +  ├─┼─┼─┼─┼─┤
    +  │·│·│·│·│·│
    +  └─┴─┴─┴─┴─┘
    +
    +  g ➔ fiche grise
    +  r ➔ fiche rouge
    +  · ➔ pin inutilisé
    +    ➔ espace vide (sans pin)
    +
    + + +

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

    +
      Front Panel
    +  ┌─┬─┬─┬─┬─┐
    +  │·│·│·│·│·│
    +  ├─┼─┼─┼─┼─┤
    +  │ │·│o│·│·│
    +  └─┴─┴─┴─┴─┘
    +
    +  o ➔ fiche orange
    +  · ➔ pin inutilisé
    +    ➔ espace vide (sans pin)
    +
    + + +

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

    +
       Dual-USB
    +  ┌─┬─┬─┬─┬─┐
    +  │b│B│v│n│·│
    +  ├─┼─┼─┼─┼─┤
    +  │·│·│·│·│ │
    +  └─┴─┴─┴─┴─┘
    +
    +  b ➔ fiche bleue
    +  B ➔ fiche Blanche
    +  v ➔ fiche verte
    +  n ➔ fiche noire
    +  · ➔ pin inutilisé
    +    ➔ espace vide (sans pin)
    +
    + + +

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

    +

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

    +
    +
    +
    +
    + +
    +
    +
    +
    + Proudly powered by Pelican, + which takes great advantage of Python.
    + Powered by bootstrap2 theme, thanks! +
    +
    +
    + + \ No newline at end of file diff --git a/output/posts/opensmtpd-debian/index.html b/output/posts/opensmtpd-debian/index.html new file mode 100644 index 0000000..927344b --- /dev/null +++ b/output/posts/opensmtpd-debian/index.html @@ -0,0 +1,564 @@ + + + + + OpenSMTPd comme serveur mail sous debian + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +

    + OpenSMTPd comme serveur mail sous debian +

    +
    +
    +
    +
    + Date + + Fri 07 November 2014 + +
    + By + Wxcafé +
    + Category + Tutoriel +
    + + + + +
    +

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

    +

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

    +

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

    +

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

    +

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

    +
                ╭────────────────╮                    ╭──────────╮
    +            │╭──────────────>│────> to filter ───>│─╮        │
    +  mail in   ││               │                    │ │ amavis │
    +───────────>│╯ OpenSMTPd  ╭──│<─── from filter<───│<╯        │
    +            │             │  │                    ╰──────────╯
    +  mail out  │             │  │                    ╭──────────╮
    +<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
    +            │                │                    │ dovecot  │     mailbox
    +            ╰────────────────╯                    ╰──────────╯
    +
    + + +

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

    +

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

    +

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

    +

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

    +

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

    +
                ╭───────────────╮                    ╭───────────╮
    +            │╭─────────────>│──> SMTP (10026) ──>│─╮         │
    +  SMTP in   ││              │                    │ │ amavis  │
    +────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│<╯ (sign)  │
    +            │            │  │                    ╰───────────╯
    +  SMTP out  │            │  │
    +25 <────────│<───────────╯  │
    +            ╰───────────────╯
    +
    + + +

    Pour les mails sortants; et

    +
                ╭───────────────╮                    ╭────────────╮
    +            │╭─────────────>│──> SMTP (10024) ──>│─╮          │
    +  SMTP in   ││              │                    │ │ amavis   │
    +────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<╯(filter)  │
    +            │            │  │                    ╰────────────╯
    +            │            │  │                    ╭────────────╮
    +            │            ╰─>│──> LMTP (socket) ─>│───────────>│──> to user's
    +            │               │                    │  dovecot   │     mailbox
    +            ╰───────────────╯                    ╰────────────╯
    +
    + + +

    Pour les mails entrants.

    +

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

    +

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

    +

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

    +
    sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
    +sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
    +
    + + +

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

    +

    /etc/smtpd.conf

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

    Expliquons un peu ce fichier de configuration :

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

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

    +

    /etc/dovecot/dovecot.conf

    +
    ## Dovecot configuration file
    +
    +# basic config
    +info_log_path = /var/log/dovecot-info.log
    +log_path = /var/log/dovecot.log
    +log_timestamp = "%Y-%m-%d %H:%M:%S "
    +mail_location = maildir:%h/mail
    +
    +# authentication
    +passdb {
    +    driver = pam
    +}
    +userdb {
    +    driver = passwd
    +}
    +
    +# the protocols we use
    +protocols = imap lmtp sieve
    +
    +# ssl config
    +ssl_cert = </etc/certs/exem.pl.cert
    +ssl_key = </etc/certs/exem.pl.key
    +ssl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
    +ssl = yes
    +
    +## configuring services 
    +# disables imap login without SSL (yes dovecot is dumb that way)
    +service imap-login {
    +    inet_listener imap {
    +        port=0 
    +    }
    +}
    +
    +service lmtp {
    +    unix_listener lmtp {
    +        mode = 0666
    +    }
    +}
    +
    +## configuring protocols
    +# the dovecot lda, we set it to use sieve
    +protocol lda {
    +    mail_plugins = $mail_plugins sieve
    +}
    +
    +protocol lmtp {
    +    postmaster_address =  whoever@exem.pl
    +    mail_plugins = $mail_plugins sieve
    +}
    +
    +plugin {
    +    sieve = ~/.dovecot.sieve
    +    sieve_dir = ~/sieve
    +}
    +
    + + +

    ATTENTION: Sous OpenBSD, remplacez

    +
    passdb {
    +    driver = pam
    +}
    +
    + + +

    par

    +
    passdb {
    +    driver = bsdauth
    +}
    +
    + + +

    pour identifier les utilisateurs système

    +

    Ici aussi, voyons comment ce fichier est structuré :

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

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

    +

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

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

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

    +

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

    +

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

    +
    #rewrite_header Subject *****SPAM*****
    +# report_safe 1
    +required_score 2.0
    +# use_bayes 1
    +# bayes_auto_learn 1
    +# bayes_ignore_header X-Bogosity
    +# bayes_ignore_header X-Spam-Flag
    +# bayes_ignore_header X-Spam-Status
    +ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
    +# shortcircuit USER_IN_WHITELIST       on
    +# shortcircuit USER_IN_DEF_WHITELIST   on
    +# shortcircuit USER_IN_ALL_SPAM_TO     on
    +# shortcircuit SUBJECT_IN_WHITELIST    on
    +# shortcircuit USER_IN_BLACKLIST       on
    +# shortcircuit USER_IN_BLACKLIST_TO    on
    +# shortcircuit SUBJECT_IN_BLACKLIST    on
    +shortcircuit ALL_TRUSTED             off
    +# shortcircuit BAYES_99                spam
    +# shortcircuit BAYES_00                ham
    +
    +endif # Mail::SpamAssassin::Plugin::Shortcircuit
    +
    + + +

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

    +

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

    +

    Bon courage pour votre hosting de mail ensuite…

    +
    +
    +
    +
    + +
    +
    +
    +
    + Proudly powered by Pelican, + which takes great advantage of Python.
    + Powered by bootstrap2 theme, thanks! +
    +
    +
    + + \ No newline at end of file diff --git a/output/posts/%D/plan-9-from-whichever-space/index.html b/output/posts/plan-9-from-whichever-space/index.html similarity index 68% rename from output/posts/%D/plan-9-from-whichever-space/index.html rename to output/posts/plan-9-from-whichever-space/index.html index 4beddfa..fd948e8 100644 --- a/output/posts/%D/plan-9-from-whichever-space/index.html +++ b/output/posts/plan-9-from-whichever-space/index.html @@ -7,7 +7,9 @@ + +