<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mediawiki on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/mediawiki/</link><description>Recent content in Mediawiki on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Fri, 16 Dec 2016 08:30:00 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/mediawiki/index.xml" rel="self" type="application/rss+xml"/><item><title>Migration facile de Mediawiki vers XWiki</title><link>https://blog.zwindler.fr/2016/12/16/migration-mediawiki-vers-xwiki/</link><pubDate>Fri, 16 Dec 2016 08:30:00 +0000</pubDate><guid>https://blog.zwindler.fr/2016/12/16/migration-mediawiki-vers-xwiki/</guid><description>&lt;img src="https://blog.zwindler.fr/2020/02/mediawiki_to_xwiki_logo.webp" alt="Featured image of post Migration facile de Mediawiki vers XWiki" /&gt;&lt;h2 id="convertir-simplement-des-pages-dun-mediawiki-vers-une-instance-xwiki"&gt;Convertir simplement des pages d’un Mediawiki vers une instance XWiki
&lt;/h2&gt;&lt;p&gt;Une fois de plus, encore un article sur XWiki ! J’ai déjà pas mal profité de cet outil de gestion de la connaissance &lt;a class="link" href="https://blog.zwindler.fr/2016/09/15/installer-xwiki-8-2-1-avec-docker-compose-en-2-lignes-de-commandes/" &gt;pour m’initier à Docker&lt;/a&gt; et même &lt;a class="link" href="https://blog.zwindler.fr/2016/11/30/mise-a-jour-xwiki-8-4-1-docker-tomcat-postgresql/" &gt;gérer le cycle de vie de l’application avec des containers&lt;/a&gt;. Mais il reste au moins un sujet pourtant récurrent que je n’avais pas encore traité. Comment réaliser simplement la migration des pages qui me restaient (150 !) de mon Mediawiki vers le XWiki pour que je puisse définitivement le désactiver ?&lt;/p&gt;
&lt;h2 id="les-méthodes-trouvées-sur-internet"&gt;Les méthodes trouvées sur Internet
&lt;/h2&gt;&lt;p&gt;Et le moins que l’on puisse dire, c’est que cet épineux problème comporte de nombreuses solutions. Rien que sur le &lt;a class="link" href="https://extensions.xwiki.org/xwiki/bin/view/Extension/MediaWiki/MediaWiki&amp;#43;XML" target="_blank" rel="noopener"
&gt;site des extensions&lt;/a&gt; XWiki :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un &lt;a class="link" href="https://extensions.xwiki.org/xwiki/bin/view/Extension/Import&amp;#43;MediaWiki&amp;#43;To&amp;#43;XWiki" target="_blank" rel="noopener"
&gt;script groovy pour convertir la syntaxe Mediawiki en syntaxe XWiki&lt;/a&gt;, mais peu documenté et datant de 2007 et dont la version date de 2013&lt;/li&gt;
&lt;li&gt;le &lt;a class="link" href="https://extensions.xwiki.org/xwiki/bin/view/Extension/Mediawiki&amp;#43;To&amp;#43;XWiki&amp;#43;Migration&amp;#43;Toolkit" target="_blank" rel="noopener"
&gt;Migration Toolkit&lt;/a&gt; qui détaille comment réaliser la migration. A priori bien documenté mais la migration a vraiment l’air complexe&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://extensions.xwiki.org/xwiki/bin/download/Extension/Mediawiki&amp;#43;To&amp;#43;XWiki&amp;#43;Migration&amp;#43;Toolkit/howitworksparser.png"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;En écumant la dev-list je suis également tombé sur des sites externes ou des méthodes alternatives mais rien qui ne m’ait donné envie de sauter le pas. Je vais néanmoins citer cet article qui détaille &lt;a class="link" href="https://web.archive.org/web/20100606003605/http://encodo.com/en/blogs.php?entry_id=73" target="_blank" rel="noopener"
&gt;une méthode qui marche a priori (lien mort, j&amp;rsquo;utilise Internet Archive)&lt;/a&gt;, mais ce n’est pas encore simplissime.&lt;/p&gt;
&lt;p&gt;Une autre méthode également mise en avant par Vincent Massol de XWiki est aussi de faire appel à &lt;a class="link" href="http://www.xwiki.com/fr/services/" target="_blank" rel="noopener"
&gt;leurs services pour assurer la migration&lt;/a&gt;. Dans le cas d’un wiki d’entreprise très complexe et avec un fort enjeux business, cela mérite probablement considération.&lt;/p&gt;
&lt;h2 id="et-la-solution-"&gt;Et la solution ?
&lt;/h2&gt;&lt;p&gt;Courant de l’été, j’avais un peu mis le problème de côté. Puis j’ai lu dans la dev-list qu’une nouvelle méthode avait été mise au point, à tester. J’ai mis un peu de temps à me décider, mais j’ai fais le test.&lt;/p&gt;
&lt;p&gt;Cette nouvelle extension dispose d’une page sur le magasin des extensions XWiki, disponible à l’adresse suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://extensions.xwiki.org/xwiki/bin/view/Extension/MediaWiki/MediaWiki&amp;#43;XML" target="_blank" rel="noopener"
&gt;extensions.xwiki.org/xwiki/bin/view/Extension/MediaWiki/MediaWiki+XML&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il y a deux composants en jeux en réalité. Le convertisseur en lui même &lt;a class="link" href="https://extensions.xwiki.org/xwiki/bin/view/Extension/Filter&amp;#43;Application" target="_blank" rel="noopener"
&gt;Filter Streams Converter Application&lt;/a&gt; qui est le composant générique qui fait le travail et &lt;a class="link" href="https://extensions.xwiki.org/xwiki/bin/view/Extension/MediaWiki/MediaWiki&amp;#43;XML/" target="_blank" rel="noopener"
&gt;MediaWiki XML&lt;/a&gt; le composant spécifique à la syntaxe Mediawiki pour ce module.&lt;/p&gt;
&lt;p&gt;Tout ceci peut s’installer en téléchargeant les packages sur le site ou directement (et c’est même plutôt conseillé) depuis le magasin d’extension &lt;strong&gt;dans&lt;/strong&gt; l’administration de votre XWiki :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki15.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki14.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki11.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;A noter, l’extension &lt;strong&gt;Filter Streams Converter Application&lt;/strong&gt; semble être intégrée par défaut au cœur de XWiki. Et comme c’est un dépendance de l’extension &lt;strong&gt;MediaWiki XML&lt;/strong&gt;, je n’ai initialement pas pu l’installer car l’application &lt;strong&gt;Filter Streams Converter Application&lt;/strong&gt; était en version 8.4.1 alors que la 8.4.2 était nécessaire !&lt;/p&gt;
&lt;p&gt;J’ai donc du mettre à jour le XWiki de 8.4.1 vers 8.4.2 avant de pouvoir installer &lt;strong&gt;MediaWiki XML&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Note : Dans le cas où vous ne pourriez pas mettre à jour votre XWiki, vous pouvez toujours installer temporairement un XWiki à jour à la dernière version (&lt;a class="link" href="https://blog.zwindler.fr/2016/09/15/installer-xwiki-8-2-1-avec-docker-compose-en-2-lignes-de-commandes/" &gt;avec Docker par exemple?&lt;/a&gt;), réaliser la conversion, faire un export XAR que vous pourrez réimporter dans votre XWiki de production.&lt;/p&gt;
&lt;h2 id="export"&gt;Export
&lt;/h2&gt;&lt;p&gt;Maintenant que nous avons récupéré les extensions, nous allons pouvoir procéder à l’export du Mediawiki. &lt;a class="link" href="https://www.mediawiki.org/wiki/Help:Export#Export_format" target="_blank" rel="noopener"
&gt;Cette partie est très bien outillée et documentée côté Mediawiki&lt;/a&gt;. Il existe de nombreuses extensions permettant d’extraire la totalité du mediawiki mais vous pouvez également vous contenter des fonctionnalités par défaut avec un peu d’astuce. L’important est d’avoir à la fin un export XML contenant toutes vos pages au format Mediawiki.&lt;/p&gt;
&lt;p&gt;Pour ma part j’ai utilisé la méthode « manuelle ». Dans Mediawiki il existe des pages spéciales, que vous connaissez certainement. J’en ai utilisé 2 :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La première est la page « Toutes_les_pages » que l’on peut accéder avec une URL du type &lt;code&gt;http://@IP_mon_wiki/mediawiki/index.php?title=Sp%C3%A9cial:Toutes_les_pages&lt;/code&gt; et qui comme son nom l’indique nous liste toutes les pages du wiki. Un simple copier coller avec un peu de remise en forme nous donner une liste de toutes les pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki3.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La seconde est tout simplement là aussi la page spéciale d’export de pages, que l’on accède via un lien du type &lt;code&gt;https://@IP_mon_wiki/mediawiki/index.php?title=Sp%C3%A9cial:Exporter&lt;/code&gt;. Après un petit copier/coller de la liste de pages qu’on vient de récupérer, un obtient un fichier XML avec toutes nos pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki4.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Si vous êtes curieux, voilà à quoi ressemble en vrai une de vos pages mediawiki (en ouvrant le XML) :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki5.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h2 id="import"&gt;Import
&lt;/h2&gt;&lt;h3 id="paramétrage"&gt;Paramétrage
&lt;/h3&gt;&lt;p&gt;Si l’installation des modules s’est bien passée, vous devriez avoir une nouvelle application installée dans la liste des applications en haut à gauche de votre xwiki :&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki6.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attention :&lt;/strong&gt; Un avertissement nous rappelle que l’application &lt;strong&gt;Filter Streams&lt;/strong&gt; est encore jeune et qu’il y a des risques à l’utiliser.&lt;/p&gt;
&lt;p&gt;Comme vous pouvez le voir, cette application à de nombreuses options. La première option à renseigner est le type de de l’entrée. Ici nous avons un fichier XML Mediawiki, il faut donc renseigner &lt;em&gt;MediaWiki XML input stream (mediawiki+xml)&lt;/em&gt;. Si vous ne voyez pas cette ligne, c’est que vous n’avez pas correctement installé l’extension &lt;strong&gt;MediaWiki XML&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki7.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;On doit ensuite descendre un peu et renseigner la source (ici notre export XML). Vous pouvez soit le déposer sur le serveur et utilise « file:&lt;chemin&gt;.xml » pour accéder au fichier, mais j’ai trouvé plus simple d’y accéder à l’aide d’un serveur HTTP et d’une URL.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki8.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Pour la partie Output, si vous n’avez peur de rien, vous pouvez copier les pages XWiki converties directement dans votre XWiki avec &lt;em&gt;XWiki instance output stream (xwiki+instance)&lt;/em&gt;. C’est l’option que j’ai utilisé mais rien ne vous empêche d’être prudent et de générer un XAR en sélectionnant l’option &lt;em&gt;XAR ouput stream&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki9.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Par défaut, toutes les pages de mon Mediawiki étaient au même niveau hiérarchique (contrairement à mon XWiki où les pages sont organisées selon une arborescence). Ces pages sont copiées directement à la racine du XWiki. J’ai donc préféré les placer en dessous d’une page que j’ai appelé &lt;em&gt;Import&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Attention : cette option est située plus haut car l’ajout d’un parent est réalisé lors de l’import. On retrouve l’option juste au dessus de là où on configure la source.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki10.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Vous pouvez aussi les copier dans un sous-wiki si vous le souhaitez.&lt;/p&gt;
&lt;h3 id="avant-de-cliquer"&gt;Avant de cliquer
&lt;/h3&gt;&lt;p&gt;2 options par défaut sur lesquelles je vous invite à réfléchir :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Par défaut &lt;em&gt;Delete existing document&lt;/em&gt; est à &lt;em&gt;true&lt;/em&gt; =&amp;gt; les documents existants sont écrasés !&lt;br&gt;
Personnellement je l’ai passé à &lt;em&gt;false&lt;/em&gt; !&lt;/li&gt;
&lt;li&gt;Par défaut &lt;em&gt;Stop when document save fail&lt;/em&gt; est à &lt;em&gt;true&lt;/em&gt; =&amp;gt; s’il y a une erreur dans le XML, l’import s’arrêtera.&lt;br&gt;
Je l’ai laissé tel quel par sécurité, mais j’ai du recommencer le processus d’export en excluant les pages concernées et en recommençant le processus. C’est assez fastidieux surtout si vous avez beaucoup d’erreurs. Dans ce cas, on pourra tenter de passer le Booléen à false, pour voir.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="conversion-"&gt;Conversion !!!
&lt;/h3&gt;&lt;p&gt;Maintenant que tout est prêt, on peut valider en cliquant sur &lt;em&gt;Convert&lt;/em&gt; ! Vous pouvez voir en temps réel la conversion et l’import en haut de la page.&lt;/p&gt;
&lt;p&gt;Personnellement, sur 150 pages importées, je n’ai eu que 4 pages qui n’ont pas pu être importées et qui ont causés une exception Java :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-console" data-lang="console"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Exception thrown during job execution
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;class org.xwiki.filter.FilterException: Failed to parse XML
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;at org.xwiki.filter.mediawiki.xml.internal.input.MediaWikiInputFilterStream.read(MediaWikiInputFilterStream.java:255)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;at org.xwiki.filter.mediawiki.xml.internal.input.MediaWikiInputFilterStream.read(MediaWikiInputFilterStream.java:81)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;[...]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;at java.lang.Thread.run(Thread.java:745)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Caused by: class java.lang.NullPointerException: null
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;at org.xwiki.filter.mediawiki.xml.internal.input.MediaWikiInputFilterStream.getFile(MediaWikiInputFilterStream.java:612)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;at org.xwiki.filter.mediawiki.xml.internal.input.MediaWikiInputFilterStream.sendAttachment(MediaWikiInputFilterStream.java:581)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;[...]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;at java.lang.Thread.run(Thread.java:745)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="go"&gt;Finished job of type [filter.converter] with identifier [filter/converter/mediawiki+xml/xwiki+instance]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais la très grande majorité de mon mediawiki a été converti. L’ensemble des pages ont bien été déplacée dans un page Import, et la syntaxe est correctement convertie.&lt;/p&gt;
&lt;h2 id="en-conclusion"&gt;En conclusion
&lt;/h2&gt;&lt;p&gt;On a vu à de multiples reprises que l’outil est jeune et qu’il y a quelques risques pour votre xwiki du fait du manque de retours sur l’outil.&lt;/p&gt;
&lt;p&gt;Mais si vous prenez vos précautions (import dans un xwiki temporaire, un sous-wiki ou en XAR), vous avez maintenant à votre disposition un outil simple pour migrer vos volumineux mediawiki de manière automatisées vers xwiki : A vos conversions !&lt;/p&gt;
&lt;h2 id="notes-complémentaire-un-nouveau-parser"&gt;Notes complémentaire, un nouveau parser
&lt;/h2&gt;&lt;p&gt;A priori depuis l’été, il existe également une extension &lt;a class="link" href="https://extensions.xwiki.org/xwiki/bin/view/Extension/MediaWiki/MediaWiki&amp;#43;Syntax/" target="_blank" rel="noopener"
&gt;MediaWiki Syntax&lt;/a&gt; qui ajoute un parser compatible avec la syntaxe Mediawiki. Je ne l’utilise pas puisque j’ai réussi à migrer toutes mes pages, mais pour la copie de pages longues et complexes, cela peut éventuellement être une solution alternative.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki12.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2016/12/xwiki_to_mediawiki13.avif"
loading="lazy"
&gt;&lt;/p&gt;</description></item><item><title>Quand Vulture 2.0 planne au dessus de la carcasse d’un Lenny et de son fidèle Mediawiki</title><link>https://blog.zwindler.fr/2011/11/01/quand-vulture-2-0-planne-au-dessus-de-la-carcasse-dun-lenny-et-de-son-fidele-mediawiki/</link><pubDate>Tue, 01 Nov 2011 17:03:35 +0000</pubDate><guid>https://blog.zwindler.fr/2011/11/01/quand-vulture-2-0-planne-au-dessus-de-la-carcasse-dun-lenny-et-de-son-fidele-mediawiki/</guid><description>&lt;img src="https://blog.zwindler.fr/2014/12/logo2-white1.webp" alt="Featured image of post Quand Vulture 2.0 planne au dessus de la carcasse d’un Lenny et de son fidèle Mediawiki" /&gt;&lt;p&gt;Peut être que vous connaissez Vulture, mais peut être pas. Pour ceux d’entre vous qui ne se sont jamais vraiment posé la question de la sécurité pour les contenus web que vous diffusez sur Internet, protéger un minimum ses applications web devient très rapidement vital si elles sont autohébergées, et encore plus (*shock*) si vous les avez développées vous même. On aimerait bien éviter de devenir la porte ouverte à toute les fenêtres&amp;hellip;&lt;/p&gt;
&lt;p&gt;De plus, une fois la peur des pirates informatique américo-chinois (ou autre gouvernement soutenant ouvertement les pirates informatiques : il n’y a bien que la France pour n’avoir que des équipes de « défense ») étant partiellement écartée, on peut aussi disposer de beaucoup de contenus publiés, disposant chacun de leur propre méthode d’authentification, et souhaiter pouvoir faire du Single Sign On pour éviter d’avoir 50 comptes différents et de taper ses logins/passwords toute la journée! Aaaaah le Single Sign On. Les SSII nous en auront vendu, des solutions clés en mains permettant de s’interfacer avec tout en un clic, ou presque! Toute la nuance étant dans le « ou presque ».&lt;/p&gt;
&lt;p&gt;Aujourd’hui, je ne vais donc pas vous vendre la solution ultime à tous vos problématiques de sécurisation de vos applications web ni vous donner un portail SSO universel, mais tout de même&amp;hellip;&lt;/p&gt;
&lt;h2 id="présentation"&gt;Présentation
&lt;/h2&gt;&lt;p&gt;Vulture est un projet open source, permettant de faire la plupart des tâches qu’on attend d’un portail Web SSO. Depuis plusieurs mois, il n’y avait pas eu beaucoup d’activité sur le projet, qui est resté pendant un bon moment aux versions 1.98 et 1.99. Cependant il manquait à la version 1.XX certaines fonctionnalités utiles, notamment la propagation de l’authentification via cookies (utilisé par exemple pour mediawiki). Un peu dommage pour un SSO si on doit se ré-authentifier pour aller sur son Wiki pour aller chercher des infos techniques rapidement.&lt;/p&gt;
&lt;p&gt;Cependant, cet été, une version 2.0 a vu le jour, même si le fait que cela soit une beta ou non n’est pas très clair je trouve ([EDIT] A priori on est toujours en béta, donc pas de prod je vous prie).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Vulture est un reverse-proxy offrant des fonctions Web-SSO et firewall applicatif.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Un des gros points noir du projet Vulture est le manque de clarté dans leur documentation, notamment pour les débutants dans les reverse-proxy. A mon avis, un petit tutoriel pas à pas s’impose pour pouvoir configurer « au minimum » l’accès à quelques applications.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation
&lt;/h2&gt;&lt;p&gt;La première chose que je dois vous dire, c’est que j’ai effectué l’installation sur une machine virtuelle vieillissante en Debian Lenny. Je vais donc tout de suite commencer par vous &lt;strong&gt;déconseiller de tester sur une Lenny&lt;/strong&gt;, mais plutôt de le faire sur une Squeeze, pour des raisons de paquets non disponibles dans les dépôts&amp;hellip;&lt;/p&gt;
&lt;p&gt;La documentation relative à l’installation en elle même est disponible sur le site du projet&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="http://www.vultureproject.org/documentation/installation/" target="_blank" rel="noopener"
&gt;www.vultureproject.org/documentation/installation/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Une fois toutes les dépendances installées comme indiqué sur le site puis le paquet .deb installé, vérifiez que vous n’avez aucune erreur lors du lancement de l’application (automatique).&lt;/p&gt;
&lt;p&gt;A priori vous devriez pouvoir vous connecter sur l’interface web de vulture en local sur le port 9090 (et local seulement). Pour ceux qui voudraient ne pas être obligés de faire ça en local justement (VM sans environnement graphique ou réseau local bien protégé), vous pouvez faire un tunnel SSH ou modifier les paramètres apache de Vulture, comme indiqué dans la doc d’installation.&lt;/p&gt;
&lt;p&gt;Personnellement je suis sur un réseau NATé, donc le seul moyen d’accéder au port 9090 est d’être sur mon réseau local, et j’ai pu laisser des paramètres de sécurité apache très lights. Le plus propre serait évidemment d’interdire toutes les IP autres que votre poste d’administration.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Listen *:9090
[...]
&amp;lt;Virtualhost *:9090&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pour ceux qui n’ont rien écouté et qui ont quand même voulu installer leur vulture sur un Lenny, si vous vous retrouvez avec l’erreur suivante, c’est parce que le paquet libdb4.8 n’est tout simplement pas installé pour une raison simple : elle n’est pas disponibles dans les dépôts standards.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Starting vulture: apache2: Syntax error on line 40 of /var/www/vulture/conf/1.conf: Cannot load /usr/lib/apache2/modules/mod_security2.so into server: libdb-4.8.so: cannot open shared object file: No such file or directory
apache2: Syntax error on line 40 of /var/www/vulture/conf/2.conf: Cannot load /usr/lib/apache2/modules/mod_security2.so into server: libdb-4.8.so: cannot open shared object file: No such file or directory
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Une façon de s’en sortir est heureusement d’installer le fameux paquet depuis un site tiers&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget http://backports.debian.org/debian-backports/pool/main/d/db/libdb4.8_4.8.24-1~bpo50+1_i386.deb
dpkg -i libdb4.8_4.8.24-1~bpo50+1_i386.deb
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="configuration"&gt;Configuration
&lt;/h2&gt;&lt;p&gt;Maintenant on entre dans le vif du sujet. Nous sommes parvenus à installer Vulture, et il est maintenant accessible en local ou pas (c’est selon).&lt;/p&gt;
&lt;p&gt;Pour se connecter, c’est facile, le mot de passe administrateur est parfaitement secure puisqu’il s’agit de admin/admin, donc vous pouvez le laisser tel quel :-p.&lt;/p&gt;
&lt;p&gt;Ceux qui connaissent déjà la version précédente de Vulture ne seront pas trop surpris : elle est strictement identique. Bien que la documentation soit assez claire sur la fonction de chacun des champs dans chacun des menus (&lt;a class="link" href="http://www.vultureproject.org/documentation/configuration/" target="_blank" rel="noopener"
&gt;documentation de Vulture&lt;/a&gt;), il n’y a pour l’heure aucun tutoriel pour permettre à tout le monde d’installer Vulture.&lt;/p&gt;
&lt;p&gt;Voici donc, une liste d’étapes commentées pour vous permettre de mettre en place le &lt;strong&gt;strict minimum&lt;/strong&gt; : un &lt;strong&gt;portail&lt;/strong&gt; commun pour vos application web faisant office de &lt;strong&gt;firewall applicatif&lt;/strong&gt;, avec une &lt;strong&gt;authentification&lt;/strong&gt; simple, ainsi que l’ajout d’&lt;strong&gt;une application&lt;/strong&gt; (mediawiki ici) sans SSO.&lt;/p&gt;
&lt;p&gt;Les problématiques plus poussées seront développées dans un prochain article (SSO, ajout d’une authentification LDAP, &amp;hellip;).&lt;/p&gt;
&lt;h3 id="gestion-des-utilisateurs"&gt;Gestion des utilisateurs
&lt;/h3&gt;&lt;p&gt;Comme dit plus haut, la première priorité est donc de changer le mot de passe de l’administrateur. Pour se faire, il suffit de cliquer sur le menu &lt;em&gt;Users&lt;/em&gt; puis de cliquer sur la petite icône représentant une feuille et un crayon pour éditer l’utilisateur.&lt;/p&gt;
&lt;p&gt;Pour une raison que j’ignore, même si je doute que ce soit une nouvelle fonctionnalité révolutionnaire, le mot de passe est affiché via son hash MD5. Et pour le modifier il faut entrer également un hash MD5 du nouveau mot de passe.&lt;/p&gt;
&lt;p&gt;Une fois qu’on a modifié le mot de passe de l’administrateur, on peut ensuite créer tous les utilisateurs qu’on veut autoriser à se connecter au portail et au applications.&lt;/p&gt;
&lt;h3 id="creation-dun-module-de-log"&gt;Creation d’un module de log
&lt;/h3&gt;&lt;p&gt;Pour générer les fichiers de journalisation sur les erreurs et les accès apache de chacun des composants interfacés au portail, Vulture se base sur le module apache mod_log.&lt;/p&gt;
&lt;p&gt;Contrairement à la version précédente de Vulture, il est nécessaire de créer/paramétrer son propre module de logging avant de pouvoir commencer à déclarer les interfaces. A mon avis, là aussi, c’est juste un oubli, qui sera rajouté par la suite.&lt;/p&gt;
&lt;p&gt;En attendant, voici les champs à remplir pour pouvoir disposer d’une journalisation correcte sur chaque interfaces et chaque application :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Name :&lt;/strong&gt; Combined&lt;br&gt;
&lt;strong&gt;Error Log Verbosity :&lt;/strong&gt; error&lt;br&gt;
&lt;strong&gt;Access Log Format :&lt;/strong&gt; « %h %l %u %t « %r » %&amp;gt;s %b « %{Referer}i » « %{User-agent}i » »&lt;br&gt;
&lt;strong&gt;Directory where to place Logfiles :&lt;/strong&gt; /var/log/&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2011/11/mod_log.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2011/11/interface1.avif"
loading="lazy"
&gt;
&lt;img src="https://blog.zwindler.fr/2011/11/mod_log1.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="création-dune-interface"&gt;Création d’une interface
&lt;/h3&gt;&lt;p&gt;Vulture permet de créer un certain nombre d’interfaces, qui correspondent en fait aux virtualhosts en écoute pour le portail qui regroupe toutes les applications.&lt;/p&gt;
&lt;p&gt;Il est donc nécessaire d’en créer au moins une, que l’on liera par la suite à toute nos applications.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2011/11/interface1.avif"
loading="lazy"
&gt;
Dans mon cas, j’ai souhaité que toutes les applications web que je publie sur Internet soient centralisées par un portail HTTPS. Pour ce faire, j’ai créé plusieurs alias DNS qui pointent tous vers l’IP du portail vulture (192.168.0.XX), ainsi qu’un alias pour le portail lui même (portail.example.org).&lt;/p&gt;
&lt;p&gt;J’ai ensuite généré les certificats SSL (autosignés ici). Pour générer plus rapidement les certificats, il est possible d’utiliser le modèle fournit sur le site &lt;a class="link" href="https://web.archive.org/web/20121027093700/http://vulture.open-source.fr/download/samples/openssl.cnf" target="_blank" rel="noopener"
&gt;vulture.open-source.fr (lien mort, j&amp;rsquo;utilise Internet Archive)&lt;/a&gt;, puis exécuter la commande :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;openssl req -x509 -days 1825 -newkey rsa:1024 -batch -out server.crt -keyout server.key -nodes -config openssl.cnf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pour créer l’interface il suffit donc de remplir les champs correspondants&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2011/11/interface2.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;h3 id="creation-de-lapplication"&gt;Creation de l’application
&lt;/h3&gt;&lt;p&gt;Une fois l’interface créée sans encombre, reste maintenant à définir les paramètres de vulture pour l’application que l’on souhaite protéger derrière le Vulture. Ici, il s’agit d’un Mediawiki, sur lequel on peut s’authentifier via une base de données interne, ou via LDAP. Dans les deux cas, il n’était pas possible d’interfacer Mediawiki avec Vulture 1.99. Ici, je ne détaillerai pas la méthode pour effectuer ce SSO normalement disponible depuis la 2.00, pour la simple raison que je ne l’ai pas encore testé, mais cela fera l’objet d’un prochain article.&lt;/p&gt;
&lt;p&gt;Ici, les champs à remplir sont :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Internet Name : l’alias que l’on a décidé pour l’application, mediawiki.example.org par exemple&lt;/li&gt;
&lt;li&gt;Interface : L’interface qu’on vient de créer&lt;/li&gt;
&lt;li&gt;Private URL : L’url complète vers laquelle on doit pointer pour trouver l’application web. Ici il s’agit de l’IP et du numéro de port du mediawiki&lt;/li&gt;
&lt;li&gt;Authentication : les méthodes qui sont autorisées pour décider si l’utilisateur à l’accès ou non. Ici la seule méthode dont on dispose pour l’instant est vulture (il faut donc la sélectionner)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2011/11/application_mediawiki.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Après une petit redémarrage de l’interface (logo avec les deux flèches vers en cercle), le portail et l’application devraient être disponible&lt;/p&gt;
&lt;p&gt;Enjoy&lt;/p&gt;</description></item></channel></rss>