Le système d'exploitation GNU-Linux/Le serveur Web Apache

Un livre de Wikilivres.
Aller à : navigation, rechercher


  1. Qu'est-ce qu'un système d'exploitation ?
  2. Unix et Linux
  3. Partitionnement du disque
  4. Installation
    1. Installer Debian via le réseau
  5. Utilisateur Unix, l'interface console
    1. Le login
    2. Commandes de base
    3. L'aide en ligne man
    4. L'éditeur de texte vi
    5. Les shells
    6. La complétion
    7. Les jokers
    8. Les répertoires importants
    9. Redirection des entrées/sorties
    10. Invoquer un programme en tâche de fond
    11. Propriétaires et droits d'accès
    12. Processus
    13. Locale
  6. Administration du système
    1. Configuration du réseau
    2. Les utilisateurs et groupes
    3. Le processus d'initialisation
    4. Les systèmes de fichiers
    5. Le système virtuel /proc
    6. Les périphériques /dev
    7. L'ordonnanceur de travaux cron
    8. Le backup : tar et gzip
    9. ghost avec partimage
    10. sauvegarde de fichiers avec rsync
    11. Les fichiers journaux syslog
    12. Installation de nouveaux logiciels
    13. Le noyau Linux et les modules
    14. Autres commandes utiles
    15. Installation RAID1 logiciel + LVM + XFS
    16. Scripts de surveillance
    17. Réseaux sans fil
  7. Administration des services réseaux
    1. Le serveur de noms BIND
    2. Le serveur de configuration réseau DHCP
    3. Le serveur de shell distant SSH
    4. Le partage de fichiers Samba
    5. Le partage de fichiers NFS
    6. Le serveur d'impression CUPS
    7. Le serveur de fichiers FTP
    8. Le serveur Web Apache
    9. La base de données MySQL
    10. Le serveur de mails Postfix
    11. Les annuaires LDAP
    12. L'outil d'administration Webmin
    13. La supervision
  8. Sécurisation d'un serveur Linux
    1. Installation d'un service en mode chroot
    2. Protection avec iptables
  9. Médiagraphie
  10. Auteurs


Installation de Apache2[modifier | modifier le wikicode]

LAMP[modifier | modifier le wikicode]

Logiciel tout-en-un pour Linux (Apache + MySQL + PHP), comme WAMP pour Windows.

commande nécessitant les privilèges root

# apt-get install tasksel
# tasksel install lamp-server

Installation manuelle[modifier | modifier le wikicode]

Apache sur Debian / Ubuntu[modifier | modifier le wikicode]

commande nécessitant les privilèges root

# apt-get install apache2

Le service peut ne pas être lancé par défaut, mais même s'il l'est on peut quand-même essayer de l'activer avec :

commande nécessitant les privilèges root

# /etc/init.d/apache2 start

On peut ensuite tester le serveur, pour voir si une page s'affiche ou s'il refuse la connexion :

commande

$ lynx http://localhost/

Cette adresse est le rebouclage, elle peut aussi être rentrée directement dans tout navigateur web.

Si Apache était déjà installé vérifier le fichier pour indiquer le démarrage automatique d'Apache 2 /etc/default/apache2 :

 # vi /etc/default/apache2
 ...
 NO_START=0
PHP[modifier | modifier le wikicode]

PHP peut-être installé avec toutes les déclinaisons de la distribution Debian (stable, testing, unstable). Il suffit pour cela d'insérer vos lignes préférées dans le fichier /etc/apt/sources.list :

deb http://ftp.fr.debian.org/debian/ stable main non-free contrib
deb-src http://ftp.fr.debian.org/debian/ stable main non-free contrib

Ce qui suit suppose que le serveur Web a bien été installé : exécuter les commandes suivantes :

sudo apt-get update && apt-get install php7.0 && apt-get install libapache2-mod-php7.0

Une fois ces commandes exécutées, redémarrer le serveur Web. Dans le cas d'Apache cela s'effectue avec la commande suivante :

/etc/init.d/apache2 restart

Si tout s'est bien passé, vous disposez maintenant d'un serveur Web qui a la capacité d'exécuter des scripts PHP dans votre navigateur.

Testons :

commande

$ lynx http://localhost/test.php

Pour débugger :

commande

$ tail /var/log/apache2/error.log

Mise à jour[modifier | modifier le wikicode]

Pour la v7.2 :

sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.2 php7.2-common php7.2-cli php7.2-fpm
sudo a2enmod php7.2
sudo a2dismod php7.0


link={{{link}}}Attention !

Une fois les serveurs Web installés, ils se lancent automatiquement à chaque démarrage de la machine, ce qui est souhaitable pour un serveur, mais pas toujours pour un PC. Pour éviter cela, il suffit d'y désactiver les daemons :

sudo update-rc.d apache2 disable
sudo update-rc.d mysql disable

Apache sur Gentoo[modifier | modifier le wikicode]

Premièrement il faut installer Apache si ce n'est pas déjà fait :

emerge apache

Ensuite, il faut installer PHP :

emerge dev-lang/php

Puis il faut qu'apache utilise PHP dans sa configuration.

Code: Configuration de apache
# nano -w /etc/conf.d/apache2
APACHE2_OPTS="-D PHP5"

MySQL seul[modifier | modifier le wikicode]

MySQL est disponible sur http://dev.mysql.com/downloads/gui-tools/5.0.html au format :

  1. .msi (Windows)
  2. .dmg (Mac)
  3. .rpm (Linux)
  4. .tar

En l'absence de gestionnaire de paquets, utiliser le .tar ainsi :

shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> cd /usr/local
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell> ln -s full-path-to-mysql-VERSION-OS mysql
shell> cd mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &

APT[modifier | modifier le wikicode]

# apt-get install mysql-server mysql_secure_installation

Puis, modifier PHP pour qu'il supporte MySQL :

# apt-get install php4-mysql
Variante[modifier | modifier le wikicode]

La dénomination des paquets mentionnés peut varier légèrement selon la version. Dans un terminal, entrez :

$ sudo apt-get install mysql-server

et confirmez.

(Remarque : il semblerait qu'en installant le paquet "mysql-server-5.0", au lieu du paquet mentionné plus haut, certaines personnes rencontrent des problèmes. Il est donc préférable d'installer ce paquet, ou d'installer la dernière version 4 stable avec : $ sudo apt-get install mysql-server-4.1. Consultez le forum pour plus d'informations : [1])

Lancez ensuite la commande :

cd && sudo mysql_secure_installation

Appuyez sur Entrée lorsqu'il vous demande le mot de passe root MySQL : pour le moment il n'y en a pas.


**NB :** MySQL a ses propres utilisateurs, avec leurs propres privilèges. Le root MySQL n'est donc pas le root système. Il est conseillé de ne pas mettre les mêmes mots de passes pour les utilisateurs MySQL et les utilisateur du système.

Le script vous demande alors si vous voulez mettre un mot de passe pour l'utilisateur root. Répondez Y, et entrez (2 fois le nouveau mot de passe du root MySQL). Il vous pose ensuite une série de questions. Si vous ne savez pas quoi répondre, acceptez les choix par défaut en appuyant simplement sur Enter.

Votre serveur MySQL est prêt. Par défaut il se lance à chaque démarrage du système, si vous ne le souhaitez pas, il vous suffit de lancer :

$ sudo dpkg-reconfigure mysql-server

et de répondre "Non" à la question du démarrage systématique de MySQL.

Sur Gentoo[modifier | modifier le wikicode]

 emerge mysql

Installer PhpMyAdmin[modifier | modifier le wikicode]

Depuis un tout-en-un, il suffit de créer un chemin accessible depuis le serveur Web :

sudo ln -s /usr/share/phpmyadmin /var/www/phpmyadmin

Sinon :

sudo apt-get install phpmyadmin php5

Installer Apache et PHP avec PhpMyAdmin[modifier | modifier le wikicode]

Grâce aux dépendances des paquets, cette opération peut se faire en une seule fois : Remarque : Vérifiez que la case "Traiter les paquets recommandés comme des dépendances" soit cochée dans Synaptic, configuration, préférences.

$ sudo apt-get install phpmyadmin

Cela installera automatiquement apache2 + php + modules d'apache pour PHP et MySQL + PhpMyAdmin. Pour accéder à PhpMyAdmin, il faut se rendre à la page http://localhost/PhpMyAdmin.

Note : En cas de problème d'authentification (erreur 2002 notamment) installer le paquet mysql-server peut résoudre ce dernier.

Après l'installation, il vaut mieux modifier les droits d'accès de root, et ajouter un mot de passe pour un peu plus de sécurité. Pour cela, il faut se rendre à la page privilèges de PhpMyAdmin.

Remarque pour Ubuntu 5.04 (Hoary Hedgehog) : Afin que cette commande fonctionne il est nécessaire d'avoir effectué les modifications suivantes : dans /etc/apt/ éditer le fichier sources.list supprimer les # des lignes suivantes :

# deb http://fr.archive.ubuntu.com/ubuntu hoary universe

(cette ligne est dans certain cas '# deb http://archive.ubuntu.com/ubuntu/ hoary universe main restricted multiverse')

# deb-src http://fr.archive.ubuntu.com/ubuntu hoary universe

Pour la version d'Ubuntu 5.10 (Breezy), vous pouvez effectuer ces changements avec le gestionnaire de paquets synaptic (apt) : Système ---> Administration ---> Gestionnaire de paquets Synaptic

            Catégories ---> Dépôts ----> Ajouter et ensuite, sélectionner : maintenu par la communauté universe...

Lancer le chargement des nouvelles sources :

$ sudo apt-get update

Puis lancer l'installation de PhpMyAdmin comme décrit ci-dessus.

Extensions[modifier | modifier le wikicode]

Pour activer des modules complémentaires :

a2enmod Nom_du_module # passe dans /etc/apache2/mods-enabled/

Ex :

a2enmod rewrite


Pour les désactiver :

a2dismod Nom_du_module # passe dans /etc/apache2/mods-available/

Pour activer des sites :

a2ensite Nom_du_site # passe dans /etc/apache2/sites-enabled/

Pour les désactiver :

a2dissite Nom_du_site # passe dans /etc/apache2/sites-available/

Les extensions PHP nécessitent une autre commande. Ex :

phpenmod mbstring

Problème d'encodage d'Apache2[modifier | modifier le wikicode]

Si vous rencontrez un problème d'encodage des caractères de vos pages, par exemple les caractères accentués apparaissant sous la forme "�" (<?>), c'est probablement parce qu'Apache2 déclare dans les en-têtes HTTP qui accompagnent les pages visionnées un encodage par défaut en Unicode (UTF-8) :

 Content-Type: text/html; charset=UTF-8

Tandis que les pages visionnées utilisent un autre encodage des caractères, comme par exemple Latin1 (ISO-8859-1). Même si vos documents indiquent le jeu de caractères utilisé, le paramètre donné par le serveur dans les en-têtes HTTP est prioritaire !

Pour corriger ce problème, il faudra éditer /etc/apache2/apache2.conf :

 $ sudo gedit /etc/apache2/apache2.conf

Encodage par défaut en Latin1 (ISO-8859-1)[modifier | modifier le wikicode]

Cherchez la ligne suivante :

 #AddDefaultCharset        ISO-8859-1

Décommentez-la en enlevant le # :

 AddDefaultCharset ISO-8859-1

Pour ceux qui ont la locale iso-8859-15 (sinon vous pouvez faire "sudo dpkg-reconfigure locales" pour l'ajouter) et qui désirent l'utiliser par défaut, ajoutez un 5 en fin de ligne :

 AddDefaultCharset ISO-8859-15

ainsi que la ligne suivante dans le paragraphe en-dessous :

 AddCharset ISO-8859-15 .iso8859-15  .latin15 .fr

Il ne vous reste plus qu'à mettre "fr" en première position dans la ligne LanguagePriority (juste au-dessus), et à demander à apache de relire sa configuration :

 $ sudo /etc/init.d/apache2 reload

Aucun encodage par défaut[modifier | modifier le wikicode]

Il est également possible de s'affranchir de tout encodage par défaut, de la manière suivante :

Cherchez la directive AddDefaultCharset :

 AddDefaultCharset ISO-8859-1

Remplacez l'attribut par la valeur Off :

 AddDefaultCharset Off

Là encore, on demandera à Apache de relire sa configuration :

 $ sudo /etc/init.d/apache2 reload

Maintenant, les en-têtes HTTP ne contiendront plus d'indication d'encodage des caractères. Attention : il faudra alors que chaque page indique l'encodage utilisé, car s'en remettre à la détection automatique par les navigateurs peut s'avérer assez aléatoire !




Configuration de Apache2[modifier | modifier le wikicode]

Le fichier de configuration principal de Apache2 est /etc/apache2/apache2.conf. Dans le cas de Apache version 1.3, ce fichier s'appelle /etc/apache/httpd.conf.

Par défaut, Apache utilise deux fichiers de logs :

  • /var/log/apache2/access.log : contient les logs de connexion au serveur Web
  • /var/log/apache2/error.log : contient les erreurs survenues


Dans les fichiers de configuration /etc/apache2/apache2.conf ou /etc/apache2/conf.d/security, on peut être amené à modifier :

 # Pour que Apache ne donne pas son numéro de version et les modules chargés (via une page d'erreur)
 ServerSignature    off
 
 # Pour que Apache ne donne pas son numéro de version et les modules chargés (via le protocole HTTP)
 ServerTokens       Prod
 
 # Permet d'enregistrer les noms canoniques au lieu des adresses IP
 # dans le fichier access.log
 HostnameLookups On

Le fichier /etc/apache2/ports.conf contient la liste des ports sur lequel Apache écoute. On peut changer le port le par défaut (80), ou lui indiquer d'écouter sur d'autres ports (ex: 443 pour https) en rajoutant des lignes Listen <port>.

 # cat /etc/apache2/ports.conf
 Listen 80

Héberger plusieurs sites Internet[modifier | modifier le wikicode]

Apache permet de gérer plusieurs sites internet sur le même serveur, pour cela on va utiliser des sections VirtualHost. Pour chaque site Internet, on crée un nouveau fichier dans /etc/apache2/sites-enabled et on lui indique la section VirtualHost (voir ci-dessous). Par convention, on appelle ce fichier avec le nom du site Internet :

 # cd /etc/apache2/sites-enabled
 # vi www.mondomaine.fr
 
 # Ne mettre cette ligne que dans UN seul fichier
 NameVirtualHost 192.168.30.220
 
 <VirtualHost 192.168.30.220>
       ServerName www.mondomaine.fr
       ServerAlias mondomaine.fr
       ServerAdmin webmaster@mondomaine.fr
       DocumentRoot /var/www/www.mondomaine.fr
       CustomLog /var/log/apache2/www.mondomaine.fr_access.log combined
       ErrorLog /var/log/apache2/www.mondomaine.fr_error.log
 </VirtualHost>


Les différents sites vont être stockés dans le répertoire /var/www.On va créer un sous-répertoire par site :

 # cd /var/www
 # mkdir www.mondomaine.fr

Afin de tester, on crée une page HTML minimale :

 # echo "<html><body>www.mondomaine.fr</body></html>" > /var/www/www.mondomaine.fr/index.html

Après toutes modifications des fichiers de configuration, on relance Apache2 avec la commande suivante :

 # /etc/init.d/apache2 restart

On peut tester avec son navigateur en se connectant à l'URL suivante :

 http://www.mondomaine.fr

Dans cet exemple, il faut bien entendu que www.mondomaine.fr pingue vers notre serveur. On peut simuler ceci en rajoutant une entrée dans le fichier /etc/hosts ou en modifiant le DNS.


Installer des modules supplémentaires[modifier | modifier le wikicode]

Apache 2 permet l'installation de nombreux modules pour offrir plus de services ou pour renforcer la sécurité.

Les modules sont dans le répertoire /etc/apache2/mods-available . C'est ici qu'il faut copier les modules additionnels que vous pourrez télécharger pour Apache.

Pour activer un module on peut créer manuellement un lien symbolique dans le répertoire mods-enable

Par exemple pour activer le mod URL Rewriting

 # ln -s /etc/apache2/mods-available/rewrite.load   /etc/apache2/mods-enabled/rewrite.load

Une alternative consite à utiliser la commande a2enable / a2disable

 # a2enable mod_rewrite
 // Active le mod_rewrite dans apache2
 # a2disable mod_rewrite
 // Désactive le mod_rewrite dans apache2

NB : sur les dernières versions de apache2, ces deux commandes s'appellent respectivement a2enmod et a2dismod.

Protéger un répertoire avec un login / mot de passe[modifier | modifier le wikicode]

Pour protéger un répertoire avec un login et un mot de passe, on crée dans le répertoire à protéger un fichier .htaccess qui contient le code suivant :

 # cd /var/www/www.mondomaine.fr
 # vi .htaccess
 
 # Type d'authentification
 AuthType Basic
 
 # Nom affiché dans la boite d'authentification
 AuthName "Site personnel"
 
 # Emplacement du fichier contenant les utilisateurs
 AuthUserFile /etc/apache2/utilisateurs
 
 # Emplacement du fichier contenant les groupes
 AuthGroupFile /etc/apache2/groupes
 
 # On autorise seulement les membres du groupe admin
 Require group admin

On crée ensuite le fichier /etc/apache2/utilisateurs à l'aide de la commande htpasswd :

 # cd /etc/apache2
 # htpasswd -c utilisateurs alex
 ...
 # htpasswd utilisateurs pierre

La première fois, on utilise l'option -c de la commande htpasswd pour créer le fichier.

On crée ensuite le fichier /etc/apache2/groupes :

 # echo "admin: alex pierre" > /etc/apache2/groupes

Il faut également éditer le fichier /etc/apache2/sites-enabled/000-default afin d'activer la prise en charge du fichier htaccess. Ajouter, si cela n'existe pas encore :

 <Directory /var/www/mondossierprotege/>
 AllowOverride All
 </Directory>

On relance le serveur web :

 # /etc/init.d/apache2 restart

Outils pour générer des statistiques de connexion[modifier | modifier le wikicode]

Chaque fois qu'un visiteur vient sur le site Internet, Apache enregistre sa connexion dans les fichiers /var/log/apache2/*_access.log.

Voici deux logiciels libres qui analysent ces fichiers et qui permettent de générer des statistiques sur les connexions :