« Installation et configuration d'un serveur http apache 2.2 » : différence entre les versions

Aller à la navigation Aller à la recherche
aucun résumé des modifications
Aucun résumé des modifications
Ligne 2 : Ligne 2 :
[[Category:debian]]
[[Category:debian]]
Ce howto va vous montrer comment mettre en place un serveur web apache2 gérant les domaines virtuels et l'ipv6 sous debian squeeze.
Ce howto va vous montrer comment mettre en place un serveur web apache2 gérant les domaines virtuels et l'ipv6 sous debian squeeze.
Nous allons mettre en place trois sites : <code>core.csnu.org</code>, <code>www.csnu.org</code> et <code>webmail.csnu.org</code>.
Nous allons mettre en place trois sites : <code>srv.domain.tld</code>, <code>www.domain.tld</code> et <code>webmail.domain.tld</code>.
<code>core.csnu.org</code> sera le site par défaut sur lequel tombera toute personne effectuant une requête http ne désignant aucun autre domaine virtuel.
<code>srv.domain.tld</code> sera le site par défaut sur lequel tombera toute personne effectuant une requête http ne désignant aucun autre domaine virtuel.
<code>www.csnu.org</code> et <code>webmail.csnu.org</code> sont ce qu'on peut appeler des domaines virtuels : ils sont sur la même ip que <code>core.csnu.org</code> mais servent des domaines différents. Ces deux domaines disposeront d'un chiffrement ssl/tls actif.
<code>www.domain.tld</code> et <code>webmail.domain.tld</code> sont ce qu'on peut appeler des domaines virtuels : ils sont sur la même ip que <code>srv.domain.tld</code> mais servent des domaines différents. Ces deux domaines disposeront d'un chiffrement ssl/tls actif.


Au niveau dns, <code>core.csnu.org</code> est le domaine identifiant la machine. Il possède l'adresse ipv4 <code>213.186.47.110</code> et l'adresse ipv6 <code>2001:41d0:1:d6e::110</code>.
Au niveau dns, <code>srv.domain.tld</code> est le domaine identifiant la machine. Il possède l'adresse ipv4 <code>213.186.47.110</code> et l'adresse ipv6 <code>2001:41d0:1:d6e::110</code>.
<code>www.csnu.org</code> et <code>webmail.csnu.org</code> sont des alias pour <code>core.csnu.org</code>.
<code>www.domain.tld</code> et <code>webmail.domain.tld</code> sont des alias pour <code>srv.domain.tld</code>.


Les changements de permissions effectués dans ce howto supposent que vous êtes en <code>umask 0027</code>
Les changements de permissions effectués dans ce howto supposent que vous êtes en <code>umask 0027</code>
Ligne 13 : Ligne 13 :
=Champs dns=
=Champs dns=


La première étape est de mettre en place les champs dns pour les différents domaines qu'on va gérer. Éditez la zone dns de votre domaine (<code>/srv/http/csnu.org.host</code> dans mon cas) et ajoutez ou modifiez les lignes suivantes :
La première étape est de mettre en place les champs dns pour les différents domaines qu'on va gérer. Éditez la zone dns de votre domaine (<code>/srv/http/domain.tld.host</code> dans mon cas) et ajoutez ou modifiez les lignes suivantes :
<pre>
<pre>
csnu.org.      IN      A      213.186.47.110
domain.tld.      IN      A      213.186.47.110
csnu.org.      IN      AAAA    2001:41d0:1:d6e::110
domain.tld.      IN      AAAA    2001:41d0:1:d6e::110
core.csnu.org.  IN      A      213.186.47.110
srv.domain.tld.  IN      A      213.186.47.110
core.csnu.org.  IN      AAAA    2001:41d0:1:d6e::110
srv.domain.tld.  IN      AAAA    2001:41d0:1:d6e::110
www            IN      CNAME  core.csnu.org.
www            IN      CNAME  srv.domain.tld.
webmail IN CNAME core.csnu.org.
webmail IN CNAME srv.domain.tld
</pre>
</pre>


Ligne 61 : Ligne 61 :
PidFile /var/run/apache2.pid
PidFile /var/run/apache2.pid


ServerAdmin root@csnu.org
ServerAdmin root@domain.tld
ServerName www.csnu.org
ServerName www.domain.tld


HostnameLookups Off
HostnameLookups Off
Ligne 166 : Ligne 166 :
  #############################
  #############################


Include vhosts/core.csnu.org.conf.default
Include vhosts/srv.domain.tld.conf.default
Include vhosts/csnu.org.conf.default
Include vhosts/domain.tld.conf.default
Include vhosts/*.conf
Include vhosts/*.conf
</nowiki></pre>
</nowiki></pre>
Ligne 252 : Ligne 252 :


Ajoutez la ligne suivante avant la directive <code>Include vhosts/*.conf</code> dans le fichier <code>/etc/apache2/apache2.conf</code>. Il est nécessaire de la placer avant afin d'avoir une sorte de "catch all" récupérant toutes les requêtes ne correspondant à aucune vhost.
Ajoutez la ligne suivante avant la directive <code>Include vhosts/*.conf</code> dans le fichier <code>/etc/apache2/apache2.conf</code>. Il est nécessaire de la placer avant afin d'avoir une sorte de "catch all" récupérant toutes les requêtes ne correspondant à aucune vhost.
<pre>Include vhosts/core.csnu.org.conf.default</pre>
<pre>Include vhosts/srv.domain.tld.conf.default</pre>


Créez le fichier <code>/etc/apache2/vhosts/core.csnu.org.conf.default</code> et ajoutez y les lignes suivantes :
Créez le fichier <code>/etc/apache2/vhosts/srv.domain.tld.conf.default</code> et ajoutez y les lignes suivantes :
<pre><nowiki>
<pre><nowiki>
<VirtualHost 213.186.47.110:80>
<VirtualHost 213.186.47.110:80>
         ServerName core.csnu.org
         ServerName srv.domain.tld
         Include sites/core.csnu.org.conf
         Include sites/srv.domain.tld.conf
</VirtualHost>
</VirtualHost>
<VirtualHost [2001:41d0:1:d6e::110]:80>
<VirtualHost [2001:41d0:1:d6e::110]:80>
         ServerName core.csnu.org
         ServerName srv.domain.tld
         Include sites/core.csnu.org.conf
         Include sites/srv.domain.tld.conf
</VirtualHost>
</VirtualHost>
</nowiki></pre>
</nowiki></pre>
Ligne 268 : Ligne 268 :
Étant donné que nous n'avons pas précisé le port à la directive <code>servername</code> du fichier <code>/etc/apache/apache2.conf</code>, il est nécessaire de préciser le port pour chaque déclaration <code>virtualhost</code>.
Étant donné que nous n'avons pas précisé le port à la directive <code>servername</code> du fichier <code>/etc/apache/apache2.conf</code>, il est nécessaire de préciser le port pour chaque déclaration <code>virtualhost</code>.


La configuration de cette vhost est défini pour être dans <code>/etc/apache2/sites/core.csnu.org.conf</code>. Créez ce fichier et ajoutez-y les lignes suivantes :
La configuration de cette vhost est défini pour être dans <code>/etc/apache2/sites/srv.domain.tld.conf</code>. Créez ce fichier et ajoutez-y les lignes suivantes :
<pre>DocumentRoot /srv/http/default/</pre>
<pre>DocumentRoot /srv/http/default/</pre>


Ligne 287 : Ligne 287 :
le module ssl de Apache supporte désormais SNI (http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI) ce qui permet d'utiliser plusieurs certificats ssl sur une seule et même ip.
le module ssl de Apache supporte désormais SNI (http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI) ce qui permet d'utiliser plusieurs certificats ssl sur une seule et même ip.


Nous allons maintenant mettre en place les deux sites sécurisés en ssl : <code>www.csnu.org</code> et <code>webmail.csnu.org</code>.
Nous allons maintenant mettre en place les deux sites sécurisés en ssl : <code>www.domain.tld</code> et <code>webmail.domain.tld</code>.
Étant donné qu'on ne dispose que d'une seule adresse ipv4 on ne va pouvoir utiliser qu'un seul certificat ssl. C'est une limitation obligatoire du protocole https car la connexion sécurisée est établie avant l'envoi du header spécifiant quel site apache2 doit afficher (et donc quel certificat ssl utiliser).
Étant donné qu'on ne dispose que d'une seule adresse ipv4 on ne va pouvoir utiliser qu'un seul certificat ssl. C'est une limitation obligatoire du protocole https car la connexion sécurisée est établie avant l'envoi du header spécifiant quel site apache2 doit afficher (et donc quel certificat ssl utiliser).
Il est cependant possible de sécuriser plusieurs sites différents avec le même certificat ssl en utilisant la directive <code>subjectAltName</code> lors de la génération du certificat. Cela règlera les problèmes d'alertes sur tous les navigateur conforme à la RFC 2818 ("HTTP Over TLS").
Il est cependant possible de sécuriser plusieurs sites différents avec le même certificat ssl en utilisant la directive <code>subjectAltName</code> lors de la génération du certificat. Cela règlera les problèmes d'alertes sur tous les navigateur conforme à la RFC 2818 ("HTTP Over TLS").
Ligne 298 : Ligne 298 :
<pre>
<pre>
[APACHE]
[APACHE]
nsComment                      = "CORE Apache Server"
nsComment                      = "SRV Apache Server"
subjectKeyIdentifier            = hash
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always
authorityKeyIdentifier          = keyid,issuer:always
Ligne 313 : Ligne 313 :
<pre>
<pre>
cd /etc/ssl/core_ca
cd /etc/ssl/core_ca
openssl req -config /etc/ssl/openssl.cnf -newkey rsa:2048 -keyout www.csnu.org.key -out www.csnu.org.req
openssl req -config /etc/ssl/openssl.cnf -newkey rsa:2048 -keyout www.domain.tld.key -out www.domain.tld.req
openssl ca -config /etc/ssl/openssl.cnf -name core_ca -extensions APACHE -in www.csnu.org.req -out www.csnu.org.pem
openssl ca -config /etc/ssl/openssl.cnf -name core_ca -extensions APACHE -in www.domain.tld.req -out www.domain.tld.pem
chmod -R 600 /etc/ssl/core_ca/
chmod -R 600 /etc/ssl/core_ca/
</pre>
</pre>


Si vous ne souhaitez pas chiffrer le certificat avec une passphrase ajoutez l'argument <code>-nodes</code> à la première ligne.
Si vous ne souhaitez pas chiffrer le certificat avec une passphrase ajoutez l'argument <code>-nodes</code> à la première ligne.
Répondez aux différentes questions posées par openssl. La plupart sont assez triviales. Attention toutefois : <code>Common Name</code> doit être l'adresse principale de votre site (<code>www.csnu.org</code> dans mon cas).
Répondez aux différentes questions posées par openssl. La plupart sont assez triviales. Attention toutefois : <code>Common Name</code> doit être l'adresse principale de votre site (<code>www.domain.tld</code> dans mon cas).


Il est préférable de déplacer le certificat dans le dossier root de apache2:
Il est préférable de déplacer le certificat dans le dossier root de apache2:
<pre>
<pre>
mkdir /etc/apache2/ssl/
mkdir /etc/apache2/ssl/
mv www.csnu.org.* /etc/apache2/ssl/
mv www.domain.tld.* /etc/apache2/ssl/
chown -R root:root /etc/apache2/ssl/
chown -R root:root /etc/apache2/ssl/
chmod -R 600 /etc/apache2/ssl/
chmod -R 600 /etc/apache2/ssl/
Ligne 334 : Ligne 334 :
</pre>
</pre>


Apache enverra ce fichier aux clients souhaitant se connecter en https. Ainsi, même si le navigateur du client n'a que le certificat root_ca.pem dans sa liste de confiance, le certificat établit pour apache sera validé car le client recevra tous les certificats de la chaine (root_ca.pem > core_ca.pem > www.csnu.org.pem) : le client sera certain que la chaine est complètement valide.
Apache enverra ce fichier aux clients souhaitant se connecter en https. Ainsi, même si le navigateur du client n'a que le certificat root_ca.pem dans sa liste de confiance, le certificat établit pour apache sera validé car le client recevra tous les certificats de la chaine (root_ca.pem > core_ca.pem > www.domain.tld.pem) : le client sera certain que la chaine est complètement valide.


==Mise en place des sites==
==Mise en place des sites==
Ligne 341 : Ligne 341 :
<pre>a2enmod ssl</pre>
<pre>a2enmod ssl</pre>


Ajoutez la ligne suivante dans <code>/etc/apache2/apache2.conf<code> après <code>Include vhosts/core.csnu.org.conf.default</code> mais avant <code>Include vhosts/*.conf</code> :
Ajoutez la ligne suivante dans <code>/etc/apache2/apache2.conf<code> après <code>Include vhosts/srv.domain.tld.conf.default</code> mais avant <code>Include vhosts/*.conf</code> :
<pre>Include vhosts/csnu.org.conf.default</pre>
<pre>Include vhosts/domain.tld.conf.default</pre>


Cette ligne doit a tout prix être placé à cet endroit. C'est la vhost ssl par défaut dans laquelle on charge le certificat ssl. Si elle est placée après le <code>Include</code> chargeant les autres vhosts, si l'une de ces vhosts est configuré en ssl, apache2 ne démarrera pas.
Cette ligne doit a tout prix être placé à cet endroit. C'est la vhost ssl par défaut dans laquelle on charge le certificat ssl. Si elle est placée après le <code>Include</code> chargeant les autres vhosts, si l'une de ces vhosts est configuré en ssl, apache2 ne démarrera pas.


Créez le fichier <code>/etc/apache2/vhosts/csnu.org.conf.default</code> et ajoutez y ceci :
Créez le fichier <code>/etc/apache2/vhosts/domain.tld.conf.default</code> et ajoutez y ceci :
<pre><nowiki>
<pre><nowiki>
#Certificat SSL
#Certificat SSL
#SSLCACertificateFile
#SSLCACertificateFile
SSLCertificateChainFile /etc/apache2/ssl/ca_chain.pem
SSLCertificateChainFile /etc/apache2/ssl/ca_chain.pem
SSLCertificateFile /etc/apache2/ssl/www.csnu.org.pem
SSLCertificateFile /etc/apache2/ssl/www.domain.tld.pem
SSLCertificateKeyFile "/etc/apache2/ssl/www.csnu.org.key"
SSLCertificateKeyFile "/etc/apache2/ssl/www.domain.tld.key"


<VirtualHost 213.186.47.110:80>
<VirtualHost 213.186.47.110:80>
         ServerName www.csnu.org
         ServerName www.domain.tld
         ServerAlias csnu.org
         ServerAlias domain.tld
         Include sites/csnu.org.conf
         Include sites/domain.tld.conf
</VirtualHost>
</VirtualHost>


<VirtualHost [2001:41d0:1:d6e::110]:80>
<VirtualHost [2001:41d0:1:d6e::110]:80>
         ServerName www.csnu.org
         ServerName www.domain.tld
         ServerAlias csnu.org
         ServerAlias domain.tld
         Include sites/csnu.org.conf
         Include sites/domain.tld.conf
</VirtualHost>
</VirtualHost>


Ligne 370 : Ligne 370 :
         SSLProtocol All
         SSLProtocol All
         SSLCipherSuite MEDIUM:HIGH
         SSLCipherSuite MEDIUM:HIGH
         ServerName www.csnu.org
         ServerName www.domain.tld
         ServerAlias csnu.org
         ServerAlias domain.tld
         Include sites/csnu.org.conf
         Include sites/domain.tld.conf
</VirtualHost>
</VirtualHost>


Ligne 379 : Ligne 379 :
         SSLProtocol All
         SSLProtocol All
         SSLCipherSuite MEDIUM:HIGH
         SSLCipherSuite MEDIUM:HIGH
         ServerName www.csnu.org
         ServerName www.domain.tld
         ServerAlias csnu.org
         ServerAlias domain.tld
         Include sites/csnu.org.conf
         Include sites/domain.tld.conf
</VirtualHost>
</VirtualHost>
</nowiki></pre>
</nowiki></pre>
Ligne 388 : Ligne 388 :
Si vous disposez de plusieurs adresses IPs, vous devrez indiquer le certificat ssl correspondant dans chaque bloque <code>VirtualHost</code> correspondant (donc deux fois pour chaque site si vous utilisez IPv4 et IPv6).
Si vous disposez de plusieurs adresses IPs, vous devrez indiquer le certificat ssl correspondant dans chaque bloque <code>VirtualHost</code> correspondant (donc deux fois pour chaque site si vous utilisez IPv4 et IPv6).


La directive <code>ServerAlias</code> défini csnu.org comme un alias pour <code>www.csnu.org</code>
La directive <code>ServerAlias</code> défini domain.tld comme un alias pour <code>www.domain.tld</code>
Créez ensuite <code>/etc/apache2/sites/csnu.org.conf</code> et ajoutez y les lignes suivantes:
Créez ensuite <code>/etc/apache2/sites/domain.tld.conf</code> et ajoutez y les lignes suivantes:
<pre>
<pre>
DocumentRoot /srv/http/csnu.org/csnu.org/
DocumentRoot /srv/http/domain.tld/domain.tld/
ServerAdmin admin@csnu.org
ServerAdmin admin@domain.tld
</pre>
</pre>


Bien sur il faut que <code>/srv/http/csnu.org/csnu.org/</code> existe et soit accessible par apache2:
Bien sur il faut que <code>/srv/http/domain.tld/domain.tld/</code> existe et soit accessible par apache2:
<pre>
<pre>
mkdir -p /srv/http/csnu.org/csnu.org/
mkdir -p /srv/http/domain.tld/domain.tld/
chown -R root:www-data /srv/http/csnu.org/
chown -R root:www-data /srv/http/domain.tld/
</pre>
</pre>
Pour que l'ajout soit pris en compte il faut reloader apache2:
Pour que l'ajout soit pris en compte il faut reloader apache2:
Ligne 407 : Ligne 407 :
Si vous avez chiffré votre clé avec une passphrase il est important de modifier votre script logrotate car par défaut, il lance un restart de apache qui ne pourra pas se relancer tout seul du fait de la passphrase. Éditez le fichier <code>/etc/logrotate.d/apache2</code> et modifiez la ligne <code>/etc/init.d/apache restart</code> en <code>/etc/init.d/apache reload</code>
Si vous avez chiffré votre clé avec une passphrase il est important de modifier votre script logrotate car par défaut, il lance un restart de apache qui ne pourra pas se relancer tout seul du fait de la passphrase. Éditez le fichier <code>/etc/logrotate.d/apache2</code> et modifiez la ligne <code>/etc/init.d/apache restart</code> en <code>/etc/init.d/apache reload</code>


Pour le site <code>webmail.csnu.org</code> créez le fichier <code>/etc/apache2/vhosts/webmail.csnu.org.conf</code> et ajoutez y les lignes suivantes :
Pour le site <code>webmail.domain.tld</code> créez le fichier <code>/etc/apache2/vhosts/webmail.domain.tld.conf</code> et ajoutez y les lignes suivantes :
<pre><nowiki>
<pre><nowiki>
<VirtualHost 213.186.47.110:443>
<VirtualHost 213.186.47.110:443>
Ligne 413 : Ligne 413 :
         SSLProtocol All
         SSLProtocol All
         SSLCipherSuite MEDIUM:HIGH
         SSLCipherSuite MEDIUM:HIGH
         ServerName webmail.csnu.org
         ServerName webmail.domain.tld
         Include sites/webmail.csnu.org.conf
         Include sites/webmail.domain.tld.conf
</VirtualHost>
</VirtualHost>
<VirtualHost 213.186.47.110:80>
<VirtualHost 213.186.47.110:80>
         ServerName webmail.csnu.org
         ServerName webmail.domain.tld
         Include sites/webmail.csnu.org.conf
         Include sites/webmail.domain.tld.conf
</VirtualHost>
</VirtualHost>
<VirtualHost [2001:41d0:1:d6e::110]:80>
<VirtualHost [2001:41d0:1:d6e::110]:80>
         ServerName webmail.csnu.org
         ServerName webmail.domain.tld
         Include sites/webmail.csnu.org.conf
         Include sites/webmail.domain.tld.conf
</VirtualHost>
</VirtualHost>
<VirtualHost [2001:41d0:1:d6e::110]:443>
<VirtualHost [2001:41d0:1:d6e::110]:443>
Ligne 428 : Ligne 428 :
         SSLProtocol All
         SSLProtocol All
         SSLCipherSuite MEDIUM:HIGH
         SSLCipherSuite MEDIUM:HIGH
         ServerName webmail.csnu.org
         ServerName webmail.domain.tld
         Include sites/webmail.csnu.org.conf
         Include sites/webmail.domain.tld.conf
</VirtualHost>
</VirtualHost>
</nowiki></pre>
</nowiki></pre>


Créez ensuite le fichier <code>/etc/apache2/sites/webmail.csnu.org.conf</code> et ajoutez y les lignes suivantes :
Créez ensuite le fichier <code>/etc/apache2/sites/webmail.domain.tld.conf</code> et ajoutez y les lignes suivantes :
<pre>
<pre>
DocumentRoot /srv/http/csnu.org/webmail.csnu.org/
DocumentRoot /srv/http/domain.tld/webmail.domain.tld/
ServerAdmin admin@csnu.org
ServerAdmin admin@domain.tld
</pre>
</pre>
Comme précédemment, <code>/srv/http/csnu.org/webmail.csnu.org/</code> doit exister et être accessible par apache2.
Comme précédemment, <code>/srv/http/domain.tld/webmail.domain.tld/</code> doit exister et être accessible par apache2.


=Installer le module php=
=Installer le module php=
Ligne 468 : Ligne 468 :
Comme vous le voyez, on peut spécifier plusieurs chemins pour les zones autorisées en les séparant par des "deux points" (:).
Comme vous le voyez, on peut spécifier plusieurs chemins pour les zones autorisées en les séparant par des "deux points" (:).
Il faut entrer des chemins absolus et toujours terminer les chemins par le / final, sinon apache va interpréter le chemin comme étant path*. Par exemple /srv/http/pof correspondra a /srv/http/pof, mais aussi à /srv/http/pofpof alors que /srv/http/pof/ ne correspondra que au dossier /srv/http/pof/
Il faut entrer des chemins absolus et toujours terminer les chemins par le / final, sinon apache va interpréter le chemin comme étant path*. Par exemple /srv/http/pof correspondra a /srv/http/pof, mais aussi à /srv/http/pofpof alors que /srv/http/pof/ ne correspondra que au dossier /srv/http/pof/
Généralement, entrer le <code>DocumentRoot</code> comme path est largement suffisant. Voici l'exemple pour la vhost www.csnu.org (/etc/apache2/sites/csnu.org.conf:
Généralement, entrer le <code>DocumentRoot</code> comme path est largement suffisant. Voici l'exemple pour la vhost www.domain.tld (/etc/apache2/sites/domain.tld.conf:
<pre>php_admin_value open_basedir /srv/http/csnu.org/csnu.org/</pre>
<pre>php_admin_value open_basedir /srv/http/domain.tld/domain.tld/</pre>


Et voila, maintenant, lorsque notre méchant pirate viendra s'attaquer à notre petit script php bugué, il ne pourra qu'accéder aux fichiers du vhost correspondant. Les autres sites hébergés sur d'autres vhosts resteront en sécurité.
Et voila, maintenant, lorsque notre méchant pirate viendra s'attaquer à notre petit script php bugué, il ne pourra qu'accéder aux fichiers du vhost correspondant. Les autres sites hébergés sur d'autres vhosts resteront en sécurité.
Ligne 606 : Ligne 606 :
SuPHP ne permet pas l'utilisation de <code>php_admin_value</code> et il est donc impossible de définir open_basedir de cette manière pour les vhosts de /home. Pourtant, il peut-être pratique de limiter les fichiers accessibles en php (même si théoriquement, le principe de suPHP est largement suffisant).
SuPHP ne permet pas l'utilisation de <code>php_admin_value</code> et il est donc impossible de définir open_basedir de cette manière pour les vhosts de /home. Pourtant, il peut-être pratique de limiter les fichiers accessibles en php (même si théoriquement, le principe de suPHP est largement suffisant).
Pour contourner ce problème, il faut définir un fichier de configuration php propre pour chaque vhost utilisant SuPHP. Il suffit d'ajouter dans le fichier de configuration de la vhost la directive <code>suPHP_ConfigPath</code> suivie du répertoire dans lequel le fichier <code>php.ini</code> personnalisé est présent.
Pour contourner ce problème, il faut définir un fichier de configuration php propre pour chaque vhost utilisant SuPHP. Il suffit d'ajouter dans le fichier de configuration de la vhost la directive <code>suPHP_ConfigPath</code> suivie du répertoire dans lequel le fichier <code>php.ini</code> personnalisé est présent.
Par exemple, si le fichier de configuration de la vhost <code>blah.csnu.org</code> ayant comme <code>documentroot /home/blah/www/</code> est <code>/home/blah/php.ini</code> il faut ajouter la directive <code>suPHP_ConfigPath /home/blah</code> (sans le / final !) dans le fichier de configuration de la vhost.
Par exemple, si le fichier de configuration de la vhost <code>blah.domain.tld</code> ayant comme <code>documentroot /home/blah/www/</code> est <code>/home/blah/php.ini</code> il faut ajouter la directive <code>suPHP_ConfigPath /home/blah</code> (sans le / final !) dans le fichier de configuration de la vhost.


Ce php.ini personnalisé peut être une copie conforme de <code>/etc/php5/cgi/php.ini</code> mais dans lequel vous pouvez définir <code>open_basedir = /home/blah/www/</code> par exemple. Si vous ne voulez pas que les utilisateurs puissent modifier leurs directives php, placez le fichier php.ini personnalisé dans un dossier auquel ils n'ont pas accès (n'oubliez pas que l'utilisateur www-data doit toujours pouvoir lire ce fichier).
Ce php.ini personnalisé peut être une copie conforme de <code>/etc/php5/cgi/php.ini</code> mais dans lequel vous pouvez définir <code>open_basedir = /home/blah/www/</code> par exemple. Si vous ne voulez pas que les utilisateurs puissent modifier leurs directives php, placez le fichier php.ini personnalisé dans un dossier auquel ils n'ont pas accès (n'oubliez pas que l'utilisateur www-data doit toujours pouvoir lire ce fichier).
Ligne 671 : Ligne 671 :
C'est le monde d'authentification le plus fréquemment utilisé. Dans ce mode, le login et le mot-de-passe transitent en clair sur le réseau.
C'est le monde d'authentification le plus fréquemment utilisé. Dans ce mode, le login et le mot-de-passe transitent en clair sur le réseau.


Nous allons voir comment sécuriser le dossier <code>/srv/http/admin.csnu.org/</code> qui correspond à la vhost <code>http://admin.csnu.org/</code>.
Nous allons voir comment sécuriser le dossier <code>/srv/http/admin.domain.tld/</code> qui correspond à la vhost <code>http://admin.domain.tld/</code>.


L'outil <code>htpasswd</code> permet de créer le fichier contenant les mot-de-passes.
L'outil <code>htpasswd</code> permet de créer le fichier contenant les mot-de-passes.
Nous allons commencer par créer le fichier avec un utilisateur par défaut nommé pfoo :
Nous allons commencer par créer le fichier avec un utilisateur par défaut nommé pfoo :
<pre>
<pre>
$ htpasswd -cs /srv/http/admin.csnu.org/.htpasswd pfoo
$ htpasswd -cs /srv/http/admin.domain.tld/.htpasswd pfoo
Adding password for pfoo
Adding password for pfoo
New password:
New password:
Ligne 684 : Ligne 684 :
Une fois le fichier créé, vous pouvez ajouter des utilisateurs ou modifier des utilisateurs existant avec la même commande mais sans l'option -c :
Une fois le fichier créé, vous pouvez ajouter des utilisateurs ou modifier des utilisateurs existant avec la même commande mais sans l'option -c :
<pre>
<pre>
$ htpasswd -s /srv/http/admin.csnu.org/.htpasswd plop
$ htpasswd -s /srv/http/admin.domain.tld/.htpasswd plop
Adding user plop
Adding user plop
New password:
New password:
Ligne 696 : Ligne 696 :
</pre>
</pre>


Il faut ensuite créer le fichier <code>/srv/http/admin.csnu.org/.htaccess</code>.
Il faut ensuite créer le fichier <code>/srv/http/admin.domain.tld/.htaccess</code>.
* Pour que tous les utilisateurs valides (qui sont présent dans le <code>.htpasswd</code>) aient accès au dossier :
* Pour que tous les utilisateurs valides (qui sont présent dans le <code>.htpasswd</code>) aient accès au dossier :
<pre><nowiki>
<pre><nowiki>
AuthUserFile /srv/http/admin.csnu.org/.htpasswd
AuthUserFile /srv/http/admin.domain.tld/.htpasswd
AuthGroupFile /dev/null
AuthGroupFile /dev/null
AuthName "Accès Restreint"
AuthName "Accès Restreint"
Ligne 708 : Ligne 708 :
* Accès pour l'utilisateur pfoo uniquement :
* Accès pour l'utilisateur pfoo uniquement :
<pre><nowiki>
<pre><nowiki>
AuthUserFile /srv/http/admin.csnu.org/.htpasswd
AuthUserFile /srv/http/admin.domain.tld/.htpasswd
AuthGroupFile /dev/null
AuthGroupFile /dev/null
AuthName "Accès Restreint"
AuthName "Accès Restreint"
Ligne 717 : Ligne 717 :
* Accès au groupe admin et uniquement pour les GET et POST :
* Accès au groupe admin et uniquement pour les GET et POST :
<pre><nowiki>
<pre><nowiki>
AuthUserFile /srv/http/admin.csnu.org/.htpasswd
AuthUserFile /srv/http/admin.domain.tld/.htpasswd
AuthGroupFile /srv/http/admin.csnu.org/.htgroup
AuthGroupFile /srv/http/admin.domain.tld/.htgroup
AuthName "Accès Restreint"
AuthName "Accès Restreint"
AuthType Basic
AuthType Basic
Ligne 736 : Ligne 736 :


Pour créer un tel fichier :
Pour créer un tel fichier :
<pre>htdigest -c /srv/http/admin.csnu.org/.htpasswd realm username</pre>
<pre>htdigest -c /srv/http/admin.domain.tld/.htpasswd realm username</pre>


Comme avant, si le fichier existe déjà, supprimez l'argument -c
Comme avant, si le fichier existe déjà, supprimez l'argument -c
Ligne 746 : Ligne 746 :
AuthDigestDomain /
AuthDigestDomain /
AuthDigestProvider file
AuthDigestProvider file
AuthUserFile /srv/http/admin.csnu.org/.htpasswd
AuthUserFile /srv/http/admin.domain.tld/.htpasswd
AuthGroupFile /srv/http/admin.csnu.org/.htgroup
AuthGroupFile /srv/http/admin.domain.tld/.htgroup
Require valid-user
Require valid-user
</pre>
</pre>
4 203

modifications

Menu de navigation