Beruflich Dokumente
Kultur Dokumente
de yacs sur
Linux Debian 4.0
(Etch)
1 Introduction......................................................................................................................................5
1.1 Les caractéristiques techniques de l'architecture cible.............................................................5
1.2 De quoi avez-vous besoin ?......................................................................................................6
1.3 Commande de serveur virtuel privé (RPS) chez OVH.............................................................6
1.4 Installation de base de Linux Debian (Etch).............................................................................7
1.5 Installation d'appliance VMware Linux Debian (Etch)............................................................8
2 Fiches de configuration....................................................................................................................9
2.1 Paramètres du système..............................................................................................................9
2.2 Paramètres de site virtuel........................................................................................................10
3 Préparation du système...................................................................................................................11
3.1 Connexion et mise à jour du logiciel......................................................................................11
3.2 Sécuriser l'accès SSH..............................................................................................................11
3.3 Régler l'heure..........................................................................................................................13
3.4 Installer Apache et PHP..........................................................................................................13
3.5 Optimiser la configuration d'Apache......................................................................................14
3.6 Préparer un premier serveur virtuel........................................................................................15
3.7 Ajouter l'accès HTTPS...........................................................................................................17
3.8 Ajouter les extensions PHP.....................................................................................................19
3.9 Optimiser la configuration de PHP.........................................................................................19
3.10 Installer suPHP.....................................................................................................................20
3.11 Installer MySQL...................................................................................................................22
3.12 Installer phpmyadmin...........................................................................................................23
3.13 Installer proftpd.....................................................................................................................24
3.14 Sécuriser les échanges FTP...................................................................................................25
3.15 Installer Postfix.....................................................................................................................26
3.16 Préparer les sauvegardes automatiques.................................................................................26
3.17 Quelques vérifications finales...............................................................................................27
Comme vous le découvrirez dans ce guide, il n'est pas besoin d'être un expert Linux pour installer
une machine performante. Suivez les instructions fournies pour construire, par vous-même, le
serveur dont vous avez besoin.
Section Description
Conventions
Il faut se rappeler que le texte mis en gras dans les listings est générique, et doit généralement être
remplacé par une valeur spécifique à votre installation. Par exemple :
mkdir www.domaine.fr
Remerciements
Ce document n'aurait pas vu le jour sans la communauté yacsienne. Merci aux muses, aux
relecteurs, et à tous ceux qui ont pris un peu de leur temps pour améliorer ce guide.
Ce guide est distribué selon les termes de la licence Creative Commons by-nc-sa 3.0. En
conséquence, vous êtes autorisé à copier, modifier, et distribuer publiquement ce document, aux
conditions suivantes :
● L'architecture s'appuie sur des briques de logiciel libre stables et récentes : Apache, PHP,
MySQL, Proftpd, Postfix. Ce guide fournit des explications pour installer et configurer
chacun de ces éléments.
● Plusieurs serveurs web virtuels peuvent être installés sur la même machine. Chaque serveur
web est propulsé par une instance yacs distincte, et dispose d'une base de données
indépendante.
● La configuration du système est optimisée pour tirer parti des fonctions avancées de yacs,
comme par exemple l'URL rewriting, le cache par expiration, ou encore le module Ming.
● Chaque serveur web virtuel dispose d'un accès normal par http: et d'un accès sécurisé,
indépendant, par https:. La sécurisation ne demande pas de rajouter d'adresse IP virtuelle,
nous avons simplement remplacé le module SSL par le module GNUTLS, plus puissant.
● Un compte FTP/TLS est créé pour chaque serveur virtuel, et permet l'accès distant par un
administrateur du serveur. Cet accès est sécurisé par chiffrement TLS, et seuls les fichiers du
serveur virtuel sont accessibles (chroot sur l'espace virtuel).
● Apache met en oeuvre suPHP pour éviter les problèmes de permission sur les fichiers
manipulés séparément par Apache et FTP, et pour améliorer le cloisonnement entre serveurs
virtuels.
● Les traitements d'arrière-plan sont délégués à cron, ce qui allège d'autant le travail de yacs,
et améliore les performances vues des internautes.
● Les fichiers de log de yacs sont gérés automatiquement, pour éviter l'encombrement
progressif des espaces disques.
● Une image est réalisée chaque jour avec l'ensemble du contenu de chaque serveur virtuel
(scripts, paramètres, images, fichiers et base de données) pour faciliter les sauvegardes à
travers le réseau.
● L'installation est sécurisée par conception, pour réduire les risques d'attaque par des tiers.
● commande de serveur virtuel privé (RPS) chez OVH – après paiement de votre réservation,
l'hébergeur vous mettra à disposition du matériel (carte processeur, mémoire, interface
réseau) dédié à votre seul usage, l'espace disque étant distribué sur des baies de disques
partagées.
● mise en oeuvre d'une appliance VMWare de Linux Debian Etch – pour les professionnels
des centres de données qui souhaitent tirer le maximum des techniques de virtualisation.
A chaque fois, nous sommes parti d'un système d'exploitation « brut de décoffrage », mais comme
vous allez le voir en parcourant cette documentation, Linux Debian est finalement assez simple à
mettre en oeuvre. Surtout, le système de gestion des paquets, et la solidité du noyau, en font un
candidat idéal pour des serveurs professionnels.
Pour ce guide d'installation dédié aux services web propulsé par yacs nous n'avons pas tenu compte
des services de nommage (DNS) ni des services de messagerie électronique. Dans le cas d'un
serveur virtuel, ces services seront probablement fournis par l'hébergeur sur sa propre infrastructure.
Pour les autres cas, vous ferez appel à des ingénieurs système pour vous aider. Il est parfaitement
possible de compléter l'installation décrite ici pour obtenir un serveur « tout-en-un », avec DNS,
SMTP, POP3, etc. En fait, Debian fournit beaucoup de liberté, mais tout dépend de vos
compétences et de votre expérience.
Avant de passer au processus d'installation général, prenons quelques instants pour présenter les
différents cas d'obtention d'une machine Linux Debian 4.0.
Ce guide s'appuie sur l'installation concrète d'un serveur virtuel privé de type RPS (pour « Real
Private Server »), mais il ne devrait pas y avoir beaucoup de différences pour d'autres types de
serveurs privés. Et si vous êtes hébergé chez un autre fournisseur, ce guide devrait rester pertinent
pour l'essentiel.
Pendant l'installation de serveur RPS chez OVH, choisir l'option Distribution de base, puis
Dans le courrier électronique envoyé par l'hébergeur vous trouverez le nom de la machine, son
adresse réseau, ainsi que le mot de passe du compte root.
La documentation qui suit a été préparée à partir de cette installation minimale, qui effectue une
bonne partie des opérations à travers le réseau Internet, avec les options de tasksel décochées.
Par défaut la machine utilise le protocole DHCP pour obtenir une adresse IP de connexion au
réseau.
Si vous avez besoin de positionner une adresse statique, vous pouvez le faire comme suit :
nano /etc/network/interfaces
Vous indiquerez dans le fichier l'adresse statique, le masque de sous-réseau, ainsi que les adresses
du routeur, et des serveurs DNS, en vous inspirant du modèle suivant :
auto eth0
iface eth0 inet static
address 192.168.3.90
gateway 192.168.3.1
netmask 255.255.255.0
Pour indiquer les serveurs DNS à utiliser, c'est dans le fichier /etc/resolv.conf que ça se passe :
nano /etc/resolv.conf
nameserver 206.12.23.13
nameserver 206.12.24.13
reboot
En fin de parcours, vous pourrez avoir à compléter l'installation comme suit, pour permettre l'accès
distant à la machine:
Par défaut, le mot de passe de root est 'root' (sans les apostrophes). La première chose à faire est
donc, bien entendu, de changer ce mot de passe.
passwd
Ensuite, vous pourrez avoir à configurer le réseau, et ajouter l'accès SSH, comme expliqué au
chapitre précédent.
Exemple : 123.123.123.123
Serveur d'envoi de
messages
Exemple : contact@domaine.fr
Exemple : www_domaine_fr
ssh root@nom_du_serveur
Commençons, par précaution, par mettre à jour le référentiel des paquets Debian, ainsi que les
paquets déjà installés :
apt-get update
apt-get upgrade
Suivant le cas, ces opérations peuvent être quasiment instantanées, ou bien requérir quelques
minutes d'échanges intensifs sur le réseau et d'écriture sur le disque dur.
Profitons-en également pour installer openssl, qui servira plusieurs fois pendant l'installation :
La procédure mise en oeuvre ici pourra sembler simpliste aux experts de SSH et du chroot. En tout
cas, elle a le mérite d'être efficace et facile à mettre en oeuvre. Le but est :
– d'interdire le login sur le compte root pour éviter les attaques directes sur ce compte,
adduser remote
nano /etc/ssh/sshd_config
Ajouter une ligne pour être sûr des comptes autorisés à utiliser SSH :
PermitRootLogin no
X11Forwarding no
/etc/init.d/ssh restart
Après la modification, il faudra se connecter en deux temps pour être root en SSH. S'authentifier
tout d'abord comme remote, puis taper la commande su et indiquer le mot de passe de root pour
avoir tous les pouvoirs.
C'est fastidieux, certes, mais la sécurité est à ce prix. En réalité, en dehors des phases d'installation
et de configuration, les besoins d'accès en tant que root sont relativement rares. Par contre, les
risques d'attaque par des tiers sont permanents.
Penser aussi à la commande sudo pour des besoins ponctuels de pouvoirs supplémentaires. Vous
pouvez faire beaucoup de choses en restant connecté comme remote, et préfixer par sudo les
commandes qui relèvent de root.
Synchroniser le serveur en choisissant une référence proche de lui, par exemple en France :
ntpdate fr.pool.ntp.org
Pour les machines qui risquent de dériver dans le temps, vous pouvez planifier de lancer la
commande de temps en temps :
nano /etc/cron.daily/ntpdate
#!/bin/sh
ntpdate fr.pool.ntp.org
Note : PHP est installé à la fois comme module Apache (la configuration de base), en mode CGI
(pour le support de suPHP), et avec l'interface CLI (pour les lignes de commande de cron).
Plusieurs modules d'extension Apache sont intéressants pour une exécution optimisée de yacs. Ils
seront mis en oeuvre automatiquement par l'assistant de construction du fichier .htaccess lors de
la configuration d'une instance de yacs.
Taper la commande suivante pour permettre la ré-écriture des liens, la compression et le cache par
expiration:
nano /etc/apache2/apache2.conf
Par défaut, Apache attend 15 secondes avant de casser les connexions TCP. En pratique, on peut
diviser cette valeur par 5, ce qui accroît d'un même facteur la quantité de connexions disponibles à
un instant donné.
KeepAliveTimeout 3
Purger les processus créés par Apache après qu'ils aient traité un certain nombre de requêtes :
MaxRequestsPerChild 500
Minimiser l'exposition du service web aux pirates éventuels en rajoutant les directives qui suivent
dans le fichier ouvert ou, alternativement, dans le fichier /etc/apache2/conf.d/security :
ServerTokens Prod
ServerSignature Off
Pour bloquer les attaques potentielles de type « déni de service », nous allons ensuite modifier le
fichier de configuration protocolaire :
nano /etc/apache2/httpd.conf
TraceEnable Off
nano /etc/apache2/ports.conf
NameVirtualHost *:80
Listen 80
<IfModule mod_gnutls.c>
NameVirtualHost *:443
Listen 443
</IfModule>
La deuxième partie du fichier anticipe sur la sécurisation des échanges de données, que nous
aborderons un peu plus tard.
cd /var/www
ls
mv apache2-default default
Si, en revanche, aucun répertoire n'existe à cet endroit, en créer un pour le serveur virtuel par
défaut, et ajouter une petite page d'index de bienvenue :
mkdir default
echo "It works!" >default/index.html
nano /etc/apache2/sites-available/default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/default/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/default>
Options None
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
Ce fichier de configuration est particulièrement dépouillé, pour des raisons de sécurité, et vous
devez supprimer les lignes qu'il pourrait y avoir en plus. Pas de déclenchement de programmes
CGI, ni de liens vers la documentation Apache. On s'en tient au strict nécessaire, c'est plus sûr.
Activer le site virtuel par défaut, puis redémarrer Apache pour prendre en compte toutes les
modifications :
a2ensite default
/etc/init.d/apache2 restart
Dans un navigateur, faire pointer sur l'adresse IP du serveur et vérifier que Apache retourne bien un
petit message en HTML : « It works! ».
tail /var/log/apache2/error.log
– et il faut gérer des serveurs virtuels distingués par leur nom, mais partageant la même adresse de
réseau (IP).
Pour les besoins de l'installation, nous allons créer un certificat auto-signé pour le serveur, en
utilisant l'adresse réseau de la machine à la place de nom_de_serveur ci-dessous :
Attention : la commande de génération des clés ci-dessus doit être tapée en une seule ligne, sans les
signes \ qui, ici, représentent une continuité avec la ligne suivante.
Indiquer au moins les deux lettres du pays où se trouve le serveur (FR pour la France) et l'adresse
réseau de la machine comme Common Name (par exemple : 124.12.34.57) pendant la création du
certificat.
Pour le support des serveurs virtuels, nous devons utiliser une option avancée du protocole TLS, et
pour ceci nous remplacerons le module SSL habituel dans Apache par le module GNUTLS, comme
suit :
nano /etc/apache2/sites-available/default-ssl
<IfModule mod_gnutls.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/default/
GnuTLSEnable on
GnuTLSCertificateFile /etc/ssl/certs/nom_de_serveur.pem
GnuTLSKeyFile /etc/ssl/private/nom_de_serveur.pem
GnuTLSPriorities NORMAL
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/default>
Options None
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access-ssl.log combined
</VirtualHost>
</IfModule>
a2ensite default-ssl
/etc/init.d/apache2 restart
Dans la barre d'adresse du navigateur web, taper « https:// » suivi de l'adresse réseau du serveur. Le
navigateur doit se plaindre du fait que le certificat est auto-signé. Accepter l'exception de sécurité
pour valider l'accès. Normalement, cette opération ne doit être faite qu'une seule fois. Ensuite le
navigateur affiche le message : « It works! ».
En environnement public, il sera bon d'acheter un certificat signé par une autorité de certification
bien connue, et d'installer le certificat correspondant dans le répertoire /etc/ssl/certs avec les
autres certificats connus sur cette machine. Le fichier de configuration default-ssl sera modifié
pour pointer sur ce certificat en lieu et place de celui que nous avons créé nous-mêmes, et il faudra
redémarrer Apache pour faire prendre en compte le changement. Les internautes pourront alors
dkpg -l 'php5-*'
La gestion des paquets de Debian va faire tout le travail de téléchargement et d'installation, une fois
de plus.
Ajouter le module curl pour se connecter à des machines distantes (intégration RSS) :
Ajouter le module ming pour laiser yacs construire, quelques objets Flash dynamiques :
Enfin, si vous avez besoin de faire authentifier les usagers par un annuaire d'entreprise, vous pouvez
ajouter le module LDAP comme suit :
nano /etc/php5/apache2/php.ini
Il est important de changer les paramètres décrits dans ce paragraphe, sous peine de limitations
importantes dans le fonctionnement du serveur.
Limiter l'exposition de PHP, c'est plus conforme aux standards à long terme du web :
expose_php = Off
memory_limit = 128M
Autoriser les gros téléchargements. Par défaut, PHP limite les envois à 2M. Pour déplacer cette
limite à 32M, changer deux paramètres comme suit :
post_max_size = 64M
upload_max_filesize = 32M
Pour un serveur de production, vous pouvez souhaiter mémoriser les erreurs en les envoyant vers un
fichier :
log_errors = On
error_log = /var/log/php5/errors.log
Comme nous utilisons PHP aussi en mode CGI et en ligne de commande (CLI), nous allons
recopier la configuration faite pour Apache, comme suit :
cp /etc/php5/apache2/php.ini /etc/php5/cgi
cp /etc/php5/apache2/php.ini /etc/php5/cli
On pourra alors créer un petit script PHP dans le répertoire du serveur virtuel comme suit :
Dans un navigateur, faire pointer sur l'adresse IP du serveur avec le chemin /test.php et vérifier
qu'on obtient effectivement des informations complètes sur le moteur d'exécution PHP, y compris la
présence des modules GD, ming, etc.
nano /etc/suphp/suphp.conf
loglevel=warn
docroot=/
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=true
allow_directory_others_writeable=false
check_vhost_docroot=false
umask=0022
Activer le module pour être sûr qu'il soit pris en compte par Apache :
a2enmod suphp
Désactiver le module PHP5 pour laisser la main à suPHP sur le traitement des scripts PHP :
a2dismod php5
Modifier la configuration du module suPHP pour être sûr qu'il est pris en compte pour tous les
scripts PHP exécutés lors de requêtes web :
nano /etc/apache2/mods-available/suphp.conf
# <Directory /usr/share>
# suPHP_Engine off
# </Directory>
Arrivés à ce stade, nous devons veiller aux contrôles de sécurité effectués par suPHP. Pour éviter les
erreurs internes, il faut affecter des propriétaires (utilisateur et groupe) qui aient des identifiants
supérieurs ou égaux à 100, donc différents de root.
cd /var/www
chown -R nobody:nogroup default
Dans un navigateur, faire pointer sur l'adresse IP du serveur avec le chemin /test.php et vérifier
qu'on obtient effectivement des informations complètes sur le moteur d'exécution PHP, y compris la
présence des modules GD, etc.
En cas d'erreur, regarder les logs d'erreur d'Apache dans /var/log/apache2 et la log d'erreur de
suPHP dans /var/log/suphp.
On pourra essayer la méthode d'accès https: pour vérifier que PHP fonctionne aussi pour les accès
sécurisés.
Changer le mot de passe root pour MySQL, en choisissant une chaîne compliquée, et différente de
celle utilisée pour le compte système root. Si cela n'est pas demandé pendant l'installation de
MySQL, compléter manuellement comme dans l'exemple ci-dessous, en remplaçant new-password
par sa vraie valeur :
mysql
mysql> use mysql;
mysql> update user set password=PASSWORD('new-password') where user='root';
mysql> flush privileges;
mysql> exit;
Le fichier de configuration de MySQL est dans /etc/mysql et, pour l'éditer, vous pouvez utiliser la
commande suivante :
nano /etc/mysql/my.cnf
Par défaut, l'indexation du texte réalisée par MySQL se limite aux mots de quatre lettres ou plus.
Pour les usagers, il est plus confortable de changer ce réglage pour prendre en compte aussi les mots
de trois lettres, en ajoutant la ligne suivante :
ft_min_word_len = 3
/etc/init.d/mysql restart
Note : si vous perdez le mot de passe MySQL du compte root, il existe une procédure pour s'en
sortir, comme indiqué à l'adresse suivante :
http://dev.mysql.com/doc/refman/5.1/en/resetting-permissions.html
Si l'outil d'installation demande avec quelle version d'Apache il doit s'intégrer, sélectionner
apache2. Sinon, réaliser l'opération manuellement comme suit :
cd /etc/apache2/conf.d
ln -s /etc/phpmyadmin/apache.conf phpmyadmin.conf
/etc/init.d/apache2 reload
Nous devons encore changer les propriétaires des fichiers mis en oeuvre par phpmyadmin, pour le
rendre compatible avec suPHP :
Pour tester la configuration, faire pointer un navigateur sur l'adresse IP du serveur vers le chemin
/phpmyadmin et visualiser l'écran d'authentification de phpmyadmin.
Si vous obtenez un message d'erreur se rapportant à une clé blowfish, tentez de modifier les
permissions du fichier concerné comme suit :
Pour les autres cas d'erreur éventuels, regarder dans /var/log/apache2 les différents fichiers de
logs.
On pourra aussi vérifier la méthode d'accès https: pour être sûr de disposer d'une méthode
sécurisée de manipulation des données à distance. Quel bonheur de gérer la base de données par
Internet, sans craindre que les échanges soient espionnés par un tiers !
nano /etc/proftpd/proftpd.conf
La première étape est de créer un certificat et une clé privée pour le serveur, en utilisant le nom réel
de la machine à la place de nom_de_serveur ci-dessous :
Attention : la commande de génération des clés ci-dessus doit être tapée en une seule ligne, sans les
signes \ qui, ici, représentent une continuité avec la ligne suivante.
Indiquer au moins les deux lettres du pays où se trouve le serveur (FR pour la France) et le nom réel
de la machine comme Common Name (par exemple : ftp.domaine.fr) pendant la création du
certificat.
Note : pour favoriser la ré-utilisation des certificats requis pour TLS d'un serveur virtuel à l'autre,
les certificats sont regroupés dans /etc/ssl/certs et les clés privées dans /etc/ssl/private.
Les fichiers sont nommés d'après les serveur certifiés. Par exemple, le certificat SSL de
ftp.domaine.fr sera placé dans /etc/ssl/certs/ftp.domaine.fr.pem.
nano /etc/proftpd/proftpd.conf
Positionner le module TLS comme suit, en remplacant nom_de_serveur par sa valeur réelle :
<IfModule mod_tls.c>
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
TLSRSACertificateFile /etc/ssl/certs/nom_de_serveur.pem
TLSRSACertificateKeyFile /etc/ssl/private/nom_de_serveur.pem
TLSOptions NoCertRequest
TLSVerifyClient off
TLSRequired on
TLSRenegotiate required off
</IfModule>
Avec ces paramètres la machine n'acceptera pas les échanges depuis un client FTP ordinaire.
/etc/init.d/proftpd restart
Utiliser un client FTP/TLS tel que Filezilla pour valider la configuration. Attention de choisir
l'option d'accès FTP normale, plutôt que l'option « TLS Implicite ». Présenter le nom remote et le
mot de passe associé, puis vérifier que vous pouvez accéder au répertoire distant, et téléverser un
fichier.
En cas de problème de connexion, vérifier que la ligne suivante n'est pas commentée par un #
intempestif dans /etc/proftpd/proftpd.conf, ce qui empêcherait la sécurisation des accès :
Include /etc/proftpd/tls.conf
Pendant l'installation, choisir le mode 'Internet Server'. Après l'installation, vérifier l'envoi de
message en ligne de commande, en remplaçant nom@domaine par une adresse valide dans l'exemple
suivant :
● Un compte snapshot est créé pour héberger, dans son répertoire, l'ensemble des copies des
serveurs.
● Les fichiers d'un serveur virtuel, et le contenu de la base de données associée, sont archivés
à intervalle réguliers dans un sous-répertoire de /home/snapshot.
L'une ou l'autre des deux options sera mise en place pendant l'installation d'un serveur virtuel,
comme nous le verrons ultérieurement. Pour l'instant, créons simplement un compte pour la
centralisation des données de sauvegarde, en choisissant un mot de passe bien sécurisé :
adduser snapshot
rm /var/www/default/test.php
Pour vérifier que la liste des ports ouverts aux communications extérieures est conforme à notre
attente, et limitée au strict minimum, taper :
Si votre machine est ouverte aux requêtes DNS (ports :domain) alors que les adresses de réseau
sont gérées par votre hébergeur, ou par un serveur tiers, vous pouvez sans vergogne désinstaller le
paquet bind9, comme suit :
A un niveau encore plus bas, taper la commande suivante pour repérer d'éventuelles erreurs de
transmission réseau qui auraient pu se produire pendant l'installation:
ifconfig
Si la commande n'indique aucune erreur, c'est que la machine est saine et que nous pouvons passer à
l'étape suivante, c'est-à-dire l'installation d'un premier serveur virtuel yacs.
– un compte utilisateur sera créé pour l'accès FTP à distance (et aussi pour exécuter les scripts qui
constituent yacs), nous le désignerons par le raccourci domaine dans cette section
– un serveur virtuel sera créé, et géré indépendamment des autres (fichiers de configuration,
répertoire, base de données), nous le désignerons par www.domaine.fr dans les exemples
Le principe est simple : vous devez associer chaque site virtuel à l'adresse réseau de la machine que
nous sommes en train d'installer.
Le mot de passe est celui qui doit être utilisé pour se connecter par FTP/TLS.
cd /var/www
mkdir www.domaine.fr
chown domaine:domaine www.domaine.fr
cd www.domaine.fr
nano /etc/apache2/sites-available/www.domaine.fr
S'inspirer du texte suivant pour configurer le site virtuel, en remplaçant www.domaine.fr et les
autres paramètres par leurs vraies valeurs :
<VirtualHost *:80>
ServerName www.domaine.fr
ServerAlias domaine.fr
ServerAdmin contact@domaine.fr
DocumentRoot /var/www/www.domaine.fr
<Directory />
Options None
AllowOverride None
</Directory>
<Directory /var/www/www.domaine.fr>
Options FollowSymlinks
AllowOverride FileInfo Indexes Options
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error-www.domaine.fr.log
LogLevel warn
CustomLog /var/log/apache2/access-www.domaine.fr.log combined
</VirtualHost>
a2ensite www.domaine.fr
/etc/init.d/apache2 reload
Dans un navigateur, faire pointer sur l'adresse ip du serveur vers le script /test.php et vérifier que
PHP est déclenché, en indiquant domaine (ou plutôt, le compte créé pour ce serveur virtuel) comme
compte utilisateur et comme nom de groupe pour le script.
cd /etc/apache2/sites-available
cp www.domaine.fr www.domaine.fr-ssl
nano www.domaine.fr-ssl
<IfModule mod_gnutls.c>
<VirtualHost *:443>
ServerName www.domaine.fr
ServerAlias domaine.fr
ServerAdmin contact@domaine.fr
GnuTLSEnable on
GnuTLSCertificateFile /etc/ssl/certs/www.domaine.fr.pem
GnuTLSKeyFile /etc/ssl/private/www.domaine.fr.pem
GnuTLSPriorities NORMAL
DocumentRoot /var/www/www.domaine.fr
<Directory />
Options None
AllowOverride None
</Directory>
<Directory /var/www/www.domaine.fr>
Options FollowSymlinks
AllowOverride FileInfo Indexes Options
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error-www.domaine.fr.log
LogLevel warn
CustomLog /var/log/apache2/access-www.domaine.fr-ssl.log combined
</VirtualHost>
</IfModule>
a2ensite www.domaine.fr-ssl
/etc/init.d/apache2 reload
tail /var/log/apache2/error-www.domaine.fr.log
En environnement public, il sera bon d'acheter un certificat signé par une autorité de certification
bien connue, et d'installer le certificat correspondant dans le répertoire /etc/ssl/certs avec les
autres. Le fichier de configuration du serveur virtuel sera modifié pour pointer sur ce certificat en
lieu et place de celui que nous avons créé nous-mêmes, et il faudra redémarrer Apache pour faire
prendre en compte le changement. Les internautes pourront alors naviguer sur le service sécurisé
sans recevoir de message d'avertissement du navigateur.
Dans l'exemple suivant, remplacez www.domaine.fr, yacs et password par les véritables valeurs. Il
est préférable de choisir une paire unique identifiant - mot de passe pour chaque base de données,
pour des raisons de sécurité.
mysql -u root -p
mysql> create database www_domaine_fr;
mysql> grant all on www_domaine_fr.* to 'domaine'@'localhost' identified by \
'password';
mysql> exit;
cd /var/www/www.domaine.fr
wget http://www.yetanothercommunitysystem.com/file-fetch/148-20090106-yacs-
9.1beta6.tgz
rm 20090106-yacs-9.1beta6.tgz
chown -R domaine:domaine *
Lancer l'assistant de création du fichier .htaccess qui va d'abord évaluer les possibilités réelles du
serveur Apache, puis préparer un fichier adapté à la situation. Le fichier est écrit à la racine du
serveur virtuel, c'est-à-dire :
/var/www/www.domaine.fr/.htaccess
Dans le panneau de configuration système, mettre en oeuvre la ré-écriture d'URL pour tirer parti des
possibilités fournies par Apache, comme indiqué dans le fichier .htaccess.
cd /etc/cron.d
cp /var/www/www.domaine.fr/tools/yacs_crontab yacs
nano /etc/cron.d/yacs
Editer le fichier pour indiquer l'emplacement exact du script cron.php et le compte utilisateur
correspondant :
Vérifier, par acquis de conscience, que la commande placée dans le fichier cron est correcte, en
l'exécutant à la main, sans oublier de remplacer www.domaine.fr pas sa vraie valeur : :
php /var/www/www.domaine.fr/cron.php
Dans le navigateur, ouvrir le panneau de configuration système pour signaler à yacs que les
traitements en tâche de fond sont gérés par cron. Attendre dix minutes, et faire afficher les
informations système d'arrière-plan pour vérifier que l'heure des derniers traitements est
incrémentée régulièrement.
Par la suite, il faudra ajouter une ligne dans le fichier /etc/cron.d/yacs pour chaque nouveau
serveur virtuel, sans oublier de changer le compte utilisateur correspondant.
Pour cela, on pourra ajouter un fichier de configuration à logrotate, l'outil Debian qui gère ce
genre de fonction, en remplaçant www.domaine.fr par sa valeur :
nano /etc/logrotate.d/www.domaine.fr
Les directives suivantes sont explicites, se rapporter à la documentation de logrotate pour plus
d'informations.
/var/www/www.domaine.fr/temporary/*.txt {
rotate 3
monthly
compress
delaycompress
missingok
notifempty
}
Enregistrer les directives et quitter l'éditeur. Le fichier sera pris en compte automatiquement tous les
mois.
nano /var/www/www.domaine.fr/tools/snapshot.sh
#!/bin/sh
Si l'on envisage de récupérer une archive unique par FTP, alors on activera la commande tar en
retirant le caractère # en début de ligne.
Si l'on préfère propager la duplication à un serveur tiers, on activera la commande rsync, en faisant
attention aux paramètres fournis. La configuration des échanges sécurisés par rsync dépasse le
cadre de ce guide, on pourra chercher sur Internet avec les mots-clés 'rsync ssh ssh-keygen'.
/var/www/www.domaine/tools/snapshot.sh
L'étape suivante est de lancer le script chaque jour, à 4 heures du matin. Pour cela, nous allons
reprendre le fichier crontab de yacs :
nano /etc/cron.d/yacs
Le mot-clé nice est inséré pour réduire la priorité d'exécution de la commande, et donc pour éviter
d'affecter les traitements ordinaires de la machine. Après tout, les sauvegardes doivent rester aussi
invisibles que possible des internautes.
Si c'est rsync qui a été mis en oeuvre, on vérifiera sur la machine cible que le transfert s'est effectué
comme prévu.
A partir de cet instant, yacs redirigera poliment toutes les demandes reçues par HTTP vers leurs
homologues HTTPS. Cette opération sera indolore pour la plupart des internautes, et vous n'avez
pas besoin de mentionner https: lorsque vous partagez l'adresse du serveur ou même d'une page
particulière.