Installation avancée de Lodel et sécurisation

Note importante

Ce type d’installation avancée concerne principalement les utilisateurs disposant d’un serveur dédié, désirant installer un seul Lodel pour gérer plusieurs sites, tout en imposant un niveau de sécurité assez élevé. Les indications suivantes sont données à titre indicatif, et peuvent bien sûr être améliorées.

Pré-requis

Pour procéder à l’installation avancée de Lodel, il est nécessaire d’avoir :

  • des bonnes connaissances du shell, du serveur httpd d’Apache et de MySQL.
  • un serveur dédié
  • un compte MySQL permettant de créer des bases de données
  • choisi un nom de base de données principale. Dans l’exemple ce sera « moncms ».
  • un compte unix générique (« admlodel »), que l’on peut considérer comme le compte administrant l’installation de Lodel.
  • Ajouter le compte « admlodel » dans le groupe « www » (groupe unix de l’utilisateur apache).

Installation avancée

Partie MySQL

Se connecter à la base de données avec le compte MySQL spécifié en pré requis.

mysql> create database moncms;
Query OK, 1 row affected (0.09 sec)

mysql> GRANT ALL PRIVILEGES ON moncms.* TO moncmsu@localhost IDENTIFIED BY 'xxxxxx';
Query OK, 0 rows affected (0.06 sec)

Partie Système de fichiers

Dans cet exemple, le DocumentRoot de http://www.mondomaine.org est /var/www

admlodel@r1:~$ cd /var/www/
admlodel@r1:~$ mkdir moncms
admlodel@r1:~$ cd moncms

Récupérer l’archive de Lodel (ici on utilise la version 0.7)

admlodel@r1:/var/www/moncms$ tar xzf lodel-0.7.tar.gz
admlodel@r1:/var/www/moncms$ mv lodel/* .
admlodel@r1:/var/www/moncms$ rmdir lodel
admlodel@r1:/var/www/moncms$ chmod 770 CACHE/ lodeladmin/CACHE/

Voici l’arborescence telle qu’elle devrait apparaître :

drwxr-xr-x    7 admlodel   www          4096 Nov 26 03:53 .
drwxr-xr-x   15 admlodel   www          4096 Nov 26 03:50 ..
drwxrwxr-x    2 admlodel   www          4096 Nov 26 03:53 CACHE
-rw-r--r--    1 admlodel   www         17636 Jul 27  2003 COPYING
-rw-r--r--    1 admlodel   www          1516 Jun 23 00:00 index.php
drwxr-xr-x    6 admlodel   www          4096 Nov 26 03:53 lodel-0.7
drwxr-xr-x    6 admlodel   www          4096 Nov 26 03:53 lodeladmin
-rw-r--r--    1 admlodel   www          3703 Jun 23 00:00 lodelconfig-dist.php
drwxr-xr-x    4 admlodel   www          4096 Nov 26 03:53 share-0.7
-rw-r--r--    1 admlodel   www         14154 Aug 29 22:54 styles_lodel.css
drwxr-xr-x    2 admlodel   www          4096 Nov 26 03:53 tpl

Partie Web

Avec un navigateur aller sur http://www.mondomaine.org/moncms. Le système d’installation redirige automatiquement vers http://www.mondomaine.org/moncms/lodeladmin/install.php, car il n’y a pas de lodelconfig.php à la racine du site.

Puis faire les opérations suivantes :

  • Choix de l’installation avancée.
  • Choix de la configuration serveur « defaut »
  • Saisir les paramètres de la base de données MySQL
    • hôte : localhost (ou un autre hôte si la base n’est pas hébergée sur la même machine que Lodel)
    • identifiant : moncmsu
    • mot de passe : xxxxxx
  • Choix de la base de données : moncms
  • Décocher « Base de données unique pour tous les sites »
  • Effacer le champ « prefixe des tables » (facultatif)
  • Création d’un administrateur Lodel initial :
    • identifiant : admin (ou autre)
    • mot de passe : admin (evidement celui ci est trop simple)
  • Chemin de l’url vers la racine : /moncms (mais normalement c’est détecté automatiquement)
  • Droits sur les fichiers :
    • group : +rw
    • all : -rw
  • Archivage zip : avec pclzip
  • Extension des scripts : .php (conseillé). Pour utiliser .html, il faut avoir ajouté « AddType application/x-httpd-php .html » dans httpd.conf
  • Liens symboliques : oui (conseillé si votre configuration apache vous le permet)
  • Répertoire d’import : /var/import (répertoire non visible depuis le web)
  • Configurer le servoo…
  • Pour installer le fichier de configuration, on peut faire :
admlodel@r1:/var/www/moncms$ cp lodeladmin/CACHE/lodelconfig-cfg.php lodelconfig.php

Mais les autres solutions proposées fonctionnent également.

Création de sites

Partie MySQL

mysql> create database moncms_monsite;
Query OK, 1 row affected (0.02 sec)

mysql> GRANT ALL PRIVILEGES ON moncms_monsite.* TO moncmsu@localhost;
Query OK, 0 rows affected (0.00 sec)

Partie système de fichiers

admlodel@r1:/var/www/moncms$ mkdir -m775 monsite

Partie web

  • Titre : Mon Site
  • Nom du site : monsite
  • Décocher « installer le site à la racine de lodel » (c’est pour les installations monosite)
  • URL complète du site : http://www.mondomaine.org/moncms/monsite
  • Créer, continuer. Installer les fichiers.
  • Installation du ME :
    • Modèle éditorial de Revues.org (par exemple)
    • Installer ce modèle
  • Renouveler les opérations de la section « Création de site » pour ajouter un nouveau site.

Il est possible de voir les sites installés en allant sur http://www.mondomaine.org/moncms

Sécurisation de l’installation avancée

Pré-requis

Être root sur l’hôte accueillant l’installation de Lodel.

Configuration de départ

  • l’installation de lodel appartient à l’utilisateur admlodel.www
  • on considère qu’il existe des « webmasters principaux », regroupant les webmasters responsables de tous les sites sous Lodel.
  • ces webmasters font partie du groupe www
  • l’utilisateur apache est www.www

Contraintes

Certaines contraintes doivent être respectées pour avoir une installation multi-sites sécurisée, tout en permettant au groupe des « webmasters principaux » de travailler sur tous les sites :

  • le root doit s’occuper de l’installation de Lodel et de la création des sites
  • un groupe est associé à chaque site
  • tous les webmasters d’un site doivent aussi faire partie du groupe créé pour chaque site
  • les webmasters de tous les sites Lodel, ainsi que l’utilisateur apache, doivent également être dans chacun des groupes créés pour les sites (Unix sans les ACL posix ne sait pas faire des groupes de groupes)
  • certains webmasters doivent pouvoir s’occuper des maquettes de plusieurs sites.
  • toute l’arborescence est en o-rwx

Création d’un site

  • addgrp monsite
  • ajout des webmasters principaux, et d’apache dans ce groupe
  • l’utilisateur « admlodel » crée le repertoire de la revue : mkdir -m770 monsite
  • création du site par l’interface web.
  • chgrp monsite monsite monsite/tpl/* monsite/css/* monsite/images/*
  • chmod -R o-rwx monsite
  • chmod -R g-rwx CACHE docannexe lodel siteconfig.php

Et les contraintes sont normalement respectées.

  • Seuls les webmasters d’un site, les webmasters principaux et apache peuvent accéder au site créé.
  • Seuls les webmasters d’un site n’ont un accès en écriture qu’au répertoire . tpl/ css/ images/ de leur site.
  • Les webmasters d’un site ont un accès en lecture très limité dans les autres répertoires.

Tout ceci peut être mis dans un script.

Exemple de script de création de site

#!/bin/bash
# creation d'un nouveau site Lodel
# params :
# - site
# ATTENTION : ce script ne peut fonctionner que sur un noyau 2.6 a cause de la limitation a 32 groupes par utilisateurs
# ATTENTION : les noms de groupes sont basés sur les noms des sites et sont coupés a 16 caracteres
# liste des webmasters principaux
WEBMASTERS="webm1 webm2"
# racine des sites Lodel
LODELSITESROOT="/var/www"
# proprietaire de l'installation de Lodel
LODELOWNER="admlodel.www"
# utilisateur apache
APACHE="www"
####
if [ $# -ne 1 ]
then
   echo "  Usage $0 <site>"
   exit 1
fi
SITE=$1
# le nom de groupe est limite a 16 caracteres
GROUP=${SITE:0:16}
SITESROOT=$LODELSITESROOT;
echo "** creation groupe $GROUP."
addgroup $GROUP
echo "** ajout de $APACHE dans le groupe $GROUP."
adduser $APACHE $GROUP
echo "** ajout de $WEBMASTERS dans le groupe $GROUP."
for webm in $WEBMASTERS
do
  adduser $webm $GROUP
  done
fi
echo "** creation du repertoire du site."
mkdir -m770 $SITESROOT/${SITE}
chown $LODELOWNER $SITESROOT/${SITE}
echo "** Creez maintenant le site en passant par l'interface web, puis appuyez sur une touche pour continuer."
read a
echo "** changement des permissions dans le repertoire $SITESROOT/${SITE}"
cd $SITESROOT/
chgrp $GROUP ${SITE}
chgrp -R $GROUP ${SITE}/tpl ${SITE}/css ${SITE}/images
chmod -R o-rwx ${SITE}
chmod -R g-rwx ${SITE}/CACHE ${SITE}/docannexe ${SITE}/lodel ${SITE}/siteconfig.php
chmod g+s ${SITE} ${SITE}/tpl ${SITE}/css ${SITE}/images

Les htaccess

La façon la plus sécurisée de gérer les htaccess est d’utiliser httpd.conf.

Voici les htaccess définis pour les fichiers propres à Lodel :

  • lodel-0.7/.htaccess
  • lodeladmin/CACHE/.htaccess
  • lodeladmin/tpl/.htaccess
  • tpl/.htaccess

Et ensuite, pour chaque site :

  • ./CACHE/.htaccess
  • ./tpl/.htaccess
  • ./docannexe/fichier/.htaccess
  • ./lodel/edition/tpl/.htaccess
  • ./lodel/edition/CACHE/.htaccess
  • ./lodel/admin/tpl/.htaccess
  • ./lodel/admin/CACHE/.htaccess
  • ./lodel/sources/.htaccess

Chacun des htaccess indique un Deny from All.

Pour protéger ces répertoires on modifie donc le httpd.conf, comme suit :

# protection de l'installation de Lodel
    <Directory /var/www/lodel-*>
      Deny from all
    </Directory>

    <Directory /var/www/lodeladmin/CACHE>
      Deny from all
    </Directory>

    <Directory /var/www/lodeladmin/tpl>
      Deny from all
    </Directory>

    <Directory /var/www/lodelluc/tpl>
      Deny from all
    </Directory>

# protection d'un site
# il y a des directorymatch pour simplifier l'installation sur chaque site. Un copier/coller suffit pour préparer un nouveau site.
# ces directives doivent être ajoutées dans le vhost de chaque site
    <DirectoryMatch ".*/CACHE">
      Deny from all
    </DirectoryMatch>

    <DirectoryMatch ".*/tpl">
      Deny from all
    </DirectoryMatch>

    <DirectoryMatch ".*/docannexe/fichier">
      Deny from all
    </DirectoryMatch>

    <DirectoryMatch ".*/lodel/sources">
      Deny from all
    </DirectoryMatch>

La sécurité est ainsi accrue car les htaccess ne sont plus modifiables par les utilisateurs.

Améliorations possibles

La sécurité peut-être également augmentée en ajoutant le module SuPHP, et en utilisant https lors de la connexion à la partie « admin » et « edition ».