====== Sécurité ======
DokuWiki est une application Web et est souvent utilisée sur des serveurs publics, accessible sur Internet. Cela signifie qu'il y a beaucoup plus de risques qu'il subissent des attaques que, par exemple, une application locale à votre ordinateur.
DokuWiki est développé en pensant à la sécurité à chaque instant. Nous essayons de trouver un juste équilibre entre l'ergonomie et la sécurité, mais lorsque le cas se présente et qu'aucun compromis n'a été trouvé, l'ergonomie est mise de côté pour privilégier la sécurité.
Cette page devrait vous donner un aperçu des aspects que vous devez surveiller pour être sûr que votre DokuWiki est sécurisé.
===== Alertes de sécurité =====
Lorsque vous découvrez un problème de sécurité dans DokuWiki, n'hésitez pas à nous le faire savoir. Trois moyens sont mis à votre disposition pour nous contacter :
* Soumettre un [[:bugs|bug report]] ;
* Envoyer un mail à la [[mailinglist]] ;
* Envoyer un mail en privé à [[andi@splitbrain.org]].
Utilisez les deux premiers points de préférence, le troisième étant pour des bugs très sérieux, dont la publication avant qu'un patch soit accessible pourrait causer du tort à tous les DokuWiki de par le monde.
Tous les problèmes de sécurité passés peuvent être vu via le [[http://bugs.splitbrain.org/index.php?tasks=all&project=1&type=1&cat=5&status=all&perpage=20|suivi de bug]].
Suivant la gravité du problème de sécurité trouvé, le bug sera incorporé à une release future (pour les problèmes mineurs) ou feront l'objet d'une "bugfix release". Dans ce dernier cas, les administateurs de DokuWiki seront informés via le système de vérification des mises à jour?.
Vous devriez **toujours** utiliser la dernière release de DokuWiki car il n'y a pas de report de résolution.
===== Sécurité de l'accès web =====
DokuWiki sauvegarde sa configuration et ses pages dans des fichiers. Ces fichiers ne devraient jamais être accessibles directement sur le web. L'archive DokuWiki contient tout plein de fichiers ''.htaccess'' qui disent, normalement, au serveur web Apache de ne pas autoriser l'accès à certains répertoires.
**Si vous n'utilisez pas Apache en serveur web, ou que votre Apache n'utilise pas les fichiers ''.htaccess'', vous devez sécuriser manuellement votre installation.**
Les répertoires suivant **ne** doivent **pas** être accessible edpuis internet :
* ''data''
* ''conf''
* ''bin''
* ''inc'' (bien qu'il ne soit pas dangereux lorsqu'il est accessible)
Pour savoir si votre configuration et les droits d'accès sont bons, essayez d'accéder à ''%%http://yourserver.com/dokuwiki/data/pages/wiki/dokuwiki.txt%%''. Vous ne devriez pas avoir accès à ce ficheir de cette manière.
Si vos répertoires ne sont pas sécurisés correctement, lisez les sections ci-dessous pour savoir comment le faire.
==== Empêcher l'accès à des répertoires avec Apache ====
La manière la plus simple est d'activer le support des fichiers ''.htaccess'' dans la configuration de votre Apache. Le [[http://httpd.apache.org/docs/2.2/howto/htaccess.html|tutoriel Apache]] sur les ''.htaccess'' peut vous y aider.
DokuWiki a déjà ses fichiers ''.htaccess'' de configurés. Le contenu d'un fichier ''.htaccess'' qui permet d'empêcher l'accès au répertoire où est placé ce fichier devrait être le suivant :
order allow,deny
deny from all
**Remarque** : Il semblerait qu'utiliser Apache2 sur Ubuntu ne permet pas d'utiliser les fichiers ''.htaccess''... (cette remarque n'est peut-être pas à jour)
Apache2 en général, ou peut-être spécifiquement Ubuntu, semble avoir une configuration légèrement différente de Apache1.x.
Dans ///etc/apache2/sites-available//, vous devez modifier le fichier //default// (ou le fichier //default-ssl// si vous utilisez https plutôt que http)
Vous y trouverez :
NameVirtualHost *
ServerAdmin admin@site.com
DocumentRoot /var/www/
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride none
Order allow,deny
allow from all
Par défault, AllowOverride dans
Order allow,deny
Deny from all
Satisfy All
//Toutefois, regardez la section [[http://httpd.apache.org/docs/2.0/sections.html#file-and-web|"What to use When" ici]], pour voir que les directives "Location" ne devraient pas être utilisées pour protéger des ressources du système de fichiers, seulement des ressources virtuelles. Selon moi, si ''.htaccess'' n'est pas suffisant, mettre des restrictions spécifiques pour chaque répertoire dans la configuration de l'hôte est l'approche la plus sécurisée. Ceci [[http://ada.adrianlang.de/dokuwiki-php-execution#solutions_in_the_configuration]] a l'air d'être une approche solide - mais ce document devrait être "canonique". //
==== Empêcher l'accès à des répertoires avec IIS ====
L'accès aux répertoires sus-mentionnés peut être désactivé dans les paramètres de configuration d'IIS.
- Ouvrir l'outil de configuration : Démarrer -> Paramètres -> Panneau de controle -> Outils d'administration -> Internet Information Services (Start -> Settings -> Control Panel -> Administrative Tools -> Internet Information Services) ;
- Naviguez jusqu'au répertoire que vous souhaitez protéger : Ordinateur Local -> Sites Web -> Site Web par défaut -> //chemin vers le répertoire// (Local Computer -> Web Sites -> Default Web Site → //path to directory//) ;
- Clic-droit sur le répertoire en question et choisissez Propriétés -> Sécurité du répertoire -> Restriction par adresse IP et nom de domain -> Édition... (Properties -> Directory Security -> IP address and domain name restrictions -> Edit...) ;
- Choisissez "Par défaut, tous les ordinateurs seront: accès défendu" ("By default, all computers will be: Denied access").
Dans IIS7 :
- Sélectionnez "Filtre des requêtes IIS" ("IIS Request Filtering") ;
- Allez sur l'onglet "URL" ;
- Cliquez sur "Séquence défendue" ;
- Entrez "/data" dans la popup.
Répétez cette action pour "/data/media" et choisissez "Toujours autoriser" ("Always Allow"), sinon vos images et autres ne seront pas accessibles.
Note : Par défaut, la console de gestion intégrée à Internet Information Services 7 n'a pas la section "Filtre des requêtes IIS" ("IIS Request Filtering"). Cependant, elle peut être activée en installant "IIS Administration pack 1.0" en utilisant le [[http://www.microsoft.com/web/downloads/platform.aspx|Web Platform Installer]].
==== Empêcher l'accès à des répertoires avec Lighttpd ====
En utilisant [[http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModRewrite|URL re-write]], vous pouvez refuser l'accès aux répertoires listés au-dessus. Dans votre fichier de configuration lighttpd.conf, il suffit d'ajouter la règle de réécriture d'URL suivante afin d'empêcher l'accès à quiconque. La règle suppose que vous ayez installé DokuWiki sous %%http://yourwebsite.tld/dokuwiki/%%. N'oubliez pas de décommenter ''//"mod_rewrite"//'' dans la section ''//server.modules//''.
url.rewrite-once = ( "^/dokuwiki/(data|conf|bin|inc)/+.*" => "/nonexistentfolder" )
Or use ''//"mod_access"//''. More examples available [[http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModAccess|here]].
$HTTP["url"] =~ "^/dokuwiki/(data|conf|bin|inc)/+.*" {
url.access-deny = ("")
}
==== Empêcher l'accès à des répertoires avec Nginx ====
L'accès aux sus-mentionnés dossiers peut être désactivé dans la section serveur de DokuWiki dans le fichier de configuration de Nginx.
Dans votre fichier nginx.conf, ajoutez les directives ''location'' suivantes afin de prévenir l'accès aux répertoires à sécuriser :
location ~ /(data|conf|bin|inc)/ {
deny all;
}
Il est de plus recommandé de refuser l'accès aux ichiers ''.htaccess'' :
location ~ /\.ht {
deny all;
}
==== Renommer le répertoire data ====
Sécuriser le répertoire ''data'' est le plus important. Si vous ne pouvez déplacer les répertoires en-dehors du serveur web (voir ci-dessous) ou ne pouvez configurer votre serveur web pour en refuser l'accès (voir ci-dessus), alors vous devriez au moins rendre l'accès au répertoire ''data'' plus difficile.
Pour ce faire, vous avez la possibilité de renommer votre répertoire ''data'' en quelque chose de cryptique (par exemple une longue suite de lettres et de chiffres) et de configurer l'option [[config:savedir]] dans votre fichier ''conf/local.php''.
==== Déplacement des répertoire hors de DocRoot ====
La façon la plus sécurisé d'empêcher l'accès aux répertoires mentionnés est de les déplacer hors du-dit "Document Root" (Racine des documents désservis) du serveur web.
**__ATTENTION :__** Si vous prévoyez d'utiliser [[fr:installer|l'installeur]], vous devez installer DokuWiki en utilisant le script install.php **avant** de faire cette étape. Si les répertoires sont déplacés avant l'installation, cette dernière va échouer.
=== Répertoire data ===
- Déplacez le répertoire ''data'' (et tout son contenu) hors de la racine du serveur ;
- Éditez l'option [[config:savedir]] pour qu'elle pointe vers la nouvelle location du répertoire ''data''.
Par exemple, si le répertoire ''data'' est déplacé dans ''/home/votrenom/data'', ajoutez la ligne suivante à votre fichier ''conf/local.php'' :
$conf['savedir'] = '/home/yourname/data/';
=== Répertoire conf ===
- Déplacez le répertoire ''conf'' (et tout son contenu) hors de la racine du serveur ;
- Créez le fichier nommé preload.php dans le répertoire ''inc'' et affectez à la constante ''DOKU_CONF'' la nouvelle location du répertoire ''conf''.
Par exemple, si le répertoire ''conf'' est déplacé dans ''/home/votrenom/conf'', créez le fichier ''inc/preload.php'' suivant :
=== Répertoire bin ===
Le répertoire ''bin'' contient les outils [[CLI| en ligne de commande]]. Si vous n'avez pas d'accès ''shell'' sur votre serveur, vous pouvez directement supprimer le dossier et son contenu. Sinon, il suffit de déplacer le dossier en dehors de la racine du serveur (document root). Pas plus de configuration est nécessaire pour ce répertoire.
=== Répertoire inc ===
Il n'y a pour le moment aucun moyen facile à mettre en place pour déplacer ce répertoire en dehors de la racine. Mais puisqu'il ne contient aucune donnée sensible, il ne vaut même pas le coup d'essayer et d'y passer du temps.
===== Paramètres de configuration de DokuWiki =====
DokuWiki contient un certin nombre de paramètres de configuration qui peuvent avoir un impact sur plusieurs aspect de la sécurité de votre installation. Référez-vous à la documentation de chacun de ces paramètres pour apprendre leur impact exact et quelle est la valeur suggérée.
* [[config:allowdebug]] -- désactiver l'affichage du debug pour éviter les fuites d'informations internes au système :!:
* [[config:fmode]], [[config:dmode]] -- permissions à affecter aux fichiers et dossiers créés par DokuWiki. Lisez aussi les informations données sur les [[permissions]]
* [[config:fetchsize]] -- configuration du cache des données externes
* [[config:fullpath]] -- affichage de tout le chemin pour les pages
* tous les [[auth|paramètres d'authentication]]
* [[config:usewordblock]] -- prévention du spam à travers une liste noire (blacklist)
* [[config:mailguard]] -- transforme les adresses mails pour éviter que les robots les récupèrent
* [[config:iexssprotect]] -- protège contre une vieille vulnérabilité de Cross-Site Scripting (XSS) d'Internet Explorer
* [[config:htmlok]] -- active le HTML
* [[config:phpok]] -- active le PHP
* [[config:hidepages]] -- cache certaines pages de l'indexation et de la recherch
* [[config:safemodehack]] -- work around safe mode restrictions
===== Sécurité des plugins =====
DokuWiki a [[plugins|une tonne de plugins créés par la communauté]]. Les plugins ajoutent de nouvelles fonctionnalités à DokuWiki en ajoutant du nouveau code. Ça signifie que le code a pratiquement accès à toutes les ressources de votre serveur. De plus, les plugins sont distribués à part de la base de DokuWiki. Ils ne sont pas sujets au même degré de validation et d'attention que le coeur de DokuWiki. Donc des précautions de sécurité sont nécessaires avant d'installer un plugin.
Voici quelques conseils qui vont aideront à choisir quel est le plugin à installer.
* Si vous le pouvez, vérifiez le code source du plugin //avant// de l'installer ;
* Si vous avez un doute, demandez sur la [[mailinglist|mailing list]] ;
* Les plugins sont installés sous le répertoire ''lib'', qui est directement accessible de l'extérieur. Vérifiez ce que le plugin contient et qu'il bloque bien les accès aux bonnes ressources par l'intermédiaire d'un fichier ''.htaccess'' ;
* Les plugins sont développés par des personnes qui n'ont pas de lien avec le projet DokuWiki, ils peuvent être inexpérimentés, avoir des intentions malveillantes ou peuvent fournir le plugin sur un serveur qui a été compromis. Ne faites pas confiance à n'importe qui !
* Vérifiez la page du plugin s'il n'y ait pas fait mention de problèmes de sécurité et mettez à jour le plugin lorsque de nouvelles versions sont disponibles.
Voir aussi : [[devel:security#reporting_security_issues|Comment reporter des problèmes de sécurité dans les plugins]]
===== Pour aller plus loin... =====
Voici quelques liens internes ou externes que vous pouvez avoir envie de lire concernant la sécurité.
* [[acl|Configurer les ACL]]
* [[tips:httpslogin|Forcer le login via HTTPS]]
* [[install:php|Configuration de PHP pour DokuWiki]]
* [[tips:clean_acl|Suppression des règles d'ACL pour les pages supprimées]]
* [[http://www.bouthors.fr/wiki/doku.php?id=en:linux:dokuwiki:secu|Comment cacher complètement les pages non-autorisées]]
...
//[[:security|Page originale]]//