Serveur web Apache

29
Serveur web Apache

Transcript of Serveur web Apache

Serveur web Apache

2

Documentation

En ligne :– http://httpd.apache.org

– http://modules.apache.org

– http://apachetoday.com/

En local :– RPM : apache-manual-1.3.19-5.i386.rpm

consulter : http://localhost/manual/

– Distribution source : htdocs/manual/

3

Installation d’apache sur système Unix

Sur système Linux – Redhat, Mandrake, Fedora, ...installer les RPM – httpd-manual-2.0.52-3.1 <---- Documentation

– system-config-httpd-1.3.1-1 <---- Outil de configuration graphique

– httpd-suexec-2.0.52-3.1 <---- Pour l'exécution des CGI

– httpd-2.0.52-3.1 <---- Le binaire

Sur d'autres systèmes – Télécharger les sources depuis : http://httpd.apache.org

– Décompresser et extraire l’archive : tar xvzf httpd-manual-2.0.52.tar.gz

– ./configure [options]les options peuvent être consultées dans le fichier INSTALL

– make

– make install

4

Contexte RPM : les fichiers installés

les binaires et scripts Shell /usr/sbin/httpd le demon apache

/usr/sbin/apachectl, /etc/init.d/httpd scripts de contrôle

ab outils de contrôle de performances

apxs outil pour construire et installer des modules d'extension

htdigest utilisé pour créer et mettre à jour les les noms d'utilisateurs et mots de passe pour l'authentification digest.

htpasswd utilisé pour créer et mettre à jour les les noms d'utilisateurs et mots de passe pour une authentification de base.

instdso.sh script installant les modules DSO d'Apache.

logresolve programme résolvant les adresses IP contenues dans les fichiers de journalisation.

rotatelogs gestion des logs

5

Contexte RPM : les fichiers installés

la hiérarchie /etc/httpd/ contient :– les fichiers de configuration : /etc/httpd/conf/

– les logs : /etc/httpd/logs/ un simple lien vers /var/log/httpd

– les modules : /etc/httpd/modules/ un simple lien vers /usr/lib/httpd/modules

la hiérarchie /var/www/ contient :– les pages HTML : /var/www/html/

– les icones : /var/www/icons/

– les cgi : /var/www/cgi-bin/

– Le répertoire des erreurs /var/www/errors

6

Démarrage et arrêt du service

Démarrage: service httpd start Arrêt service httpd stop Le démon est lancé sous l’identité root et s ’exécute sous

l’identité apache:apache Les documents servis sont uniquement en lecture pour le

démon (user apache), les CGI en lecture et exécution 2 fichiers de log par défaut :

– /var/log/httpd/access_log

– /var/log/httpd/error_log

Possibilité de personnaliser les logs, par exemple afficher la version du client et le referer (page de référence)

7

Configuration d ’Apache

Configurer apache = maintenir le fichier /etc/httpd/conf/httpd.conf– Directives globales au daemon apache et à ses fils : ServerRoot,

LoadModule, AddModule

– Directives du serveur «principal» qui répond aux requêtes qui ne sont pas gérées par des virtualhost ; ces directives définissent les valeurs par défaut des sites virtuels : Port, User, Group, ServerAdmin, ServerName, DocumentRoot,ErrorLog ...

– Directives relatives aux sites virtuels : Virtualhost, DocumentRoot, ServerName, Errorlog,

manuel de référence à consulter en permanence : http://httpd.apache.org/docs

8

Quelques directives globales

Valeurs par défaut dans le contexte Fedora :

– ServerRoot "/etc/httpd"StartServers 8Timeout 300KeepAlive OffListen 80Loadmodule vhost_alias_module modules/mod_vhost_alias.soAddModule mod_vhost_alias.c...

9

Quelques directives du serveur principal

Le serveur principal répond aux directives qui ne sont pas gérées par des VirtualHost

Port 80User apacheGroup ApacheServerAdmin [email protected] ocean.souk.maDocumentRoot "/var/www/html"DirectoryIndex index.html index.htm index.php index.cgiAccessFileName .htaccessTypesConfig /etc/mime.typesHostnameLookups OffErrorLog /var/log/httpd/error_log...

10

3 modes de contrôle d ’accès :

Contrôle des répertoires :– <Directory> … </Directory>

– fichier .htaccess

Contrôle des fichiers :– <Files> … </Files>

Contrôle des URL :– <Location> … </Location>

Le serveur analyse les contrôles sur les répertoires, puis sur les fichiers et enfin sur les URL (dans l ’ordre ou elles sont déclarées dans httpd.conf)

Dans la pratique on utilise presque exclusivement les directives <Directory>

11

AllowOverride : définit la politique d ’utilisation des fichiers .htaccess

Le fichier .htaccess sert à définir les contrôles d'accès au répertoire qui le contient – AllowOverride None : le serveur ignore les fichiers .htaccess

– AllowOverride All : le serveur tient compte des fichiers .htaccess

Sauf dans des contextes particuliers (extensions FrontPage, RearSite …) il ne faut pas autoriser les fichiers .htaccess

<Directory /var/www/html>

AllowOverride None

</Directory>

12

Les options pour Directory

– All : toutes les options

– ExecCGI : autorisation d ’exécuter des CGI.

– FollowSymLinks : autorisation de suivre les liens unix

– Indexes : affiche le contenu du répertoire quand il n ’y a pas de page index.html ou autre

– SymLinksIfOwnerMatch : seuls les liens pour lesquels le propriétaire du fichier ou répertoire cible est le même que le propriétaire du lien(exemple lien impossible vers fichier /etc/passwd)

Les options s ’appliquent au répertoire et à toute sa hiérarchie, exemple :

<Directory /var/www/html>

Options Indexes FollowSymLinks

</Directory>

13

Modes de contrôle

allow from : autorisation de domaines et réseaux deny from : interdiction de domaines et réseaux require : accès pour groupes et utilisateurs AuthUserFile,... : nom du fichier des utilisateurs (différents

encodages) AuthGroupFile,... : nom du fichier des groupes (différents

encodages) AuthName : chaîne pour la fenêtre de prompt utilisateur AuthType : type d'authentification (basic = login/mot de

passe) <Limit> : bloc de droits pour GET, POST, PUT, DELETE, …

14

Ordre de contrôle

La directive Order désigne l ’ordre dans lequel les directives Allow et Deny sont évaluées.– Order Deny,Allow

les directives Deny sont évaluées avant les directives Allow. Le statut initial est OK.

<Directory />Options NoneOrder Deny,AllowDeny from all

<Directory>

15

Ordre de contrôle (suite)

– Order Allow,Denyles directives Allow sont évaluées avant les directives Deny. Le statut initial est INTERDIT.

<Directory /var/www/html>AllowOverride None

Options None

<Limit GET POST>

Order allow,deny

Allow from all

</Limit>

<Limit PUT DELETE>

order deny,allow

deny from all

</Limit>

</Directory>

– Order Mutual-failure : accès autorisé aux postes cités dans Allow et pas cités dans Deny. Le statut initial n’est pas connu.

16

Contrôles d’accès - exemple 1

L ’Intranet du magasin de chimie<Directory /var/www/html/magchimie/intranet>

AllowOverride none

Options None

order mutual-failure

deny from montagne.univ-rennes1.fr

allow from .univ-rennes1.fr

deny from .etu.univ-rennes1.fr

</Directory>

17

Contrôles d’accès - exemple 2

L ’Intranet du CRI - serveur dédié<Directory /var/www/html>

AllowOverride none

Options FollowSymLinks Indexes

AuthName "L'INTRANET du CRI"

AuthType Basic

AuthUserFile /web/conf/securite/usagers

AuthGroupFile /web/conf/securite/groupes

# Satisfy sert au controle d'acces sur nom du poste, sinon nom/mot-de-passe

Satisfy any

<Limit GET POST PUT>

order deny,allow

deny from all

allow from .cri.univ-rennes1.fr

allow from .cru.fr

require group cri cru

</Limit>

</Directory>

18

Contrôles d’accès - exemple 2 (suite)

Le fichier /web/conf/securite/usagers contient :bavay:IEQoQ97s/iq45

boulard:Bpr4UABD56yGo

boulouar:B0G8i77KJ75Us

bourasse:KbIll2t/9hXVE …

Le fichier /web/conf/securite/groupes contient :cri: bavay boulard boulouar bourasse ...

cru: aumont salaun leguigne …

Les mots de passe sont encryptés par :/usr/bin/htpasswd

19

Contrôles d’accès - exemple 3

L'intranet du CRI par une authentification LDAP <Directory /var/www/html>

AllowOverride none

Options FollowSymLinks Indexes

AuthName "L'INTRANET du CRI"

AuthType Basic

AuthLDAPURL ldap://ldap.univ-rennes1.fr:389/ou=people,dc=univ-rennes1,dc=fr?uid?sub?(departmentnumber=57CRI)

require valid-user

</Directory>

20

Gestion de sites virtuels

déclarer dans le DNS le nom du site virtuel (CNAME) 2 types de sites virtuels :

– les sites basés sur les numéros IP : un numéro IP par site virtuel (ne pas utiliser)

– les sites basés sur les noms

Directives NameVirtualHost 111.22.33.44

--> adresse IP sur laquelle le serveur doit recevoir les requêtes HTTP associées aux sites virtuels ci-après

<VirtualHost 111.22.33.44>

ServerName perso.univ-rennes1.fr

DocumentRoot /var/www/html/perso

</VirtualHost>

<VirtualHost 111.22.33.44>

ServerName www.dr17.cnrs.fr

DocumentRoot /var/www/html/dr17

</VirtualHost>

21

Exemple de site virtuel : perso.univ-rennes1.fr

<VirtualHost 129.20.131.8>

DocumentRoot /web/htdocs/RearSite_depot/persoServerName perso.univ-rennes1.frServerAlias persoErrorLog /var/log/httpd/univ-rennes1/perso/error_logCustomLog /var/log/httpd/univ-rennes1/perso/access_log combinedScriptAlias /cgi-bin/ "/web/cgi-bin/perso/"

</VirtualHost>

22

Ajouter des modules à Apache - 2 méthodes

la mauvaise : ajout statique ; nécessite de recompiler Apache à chaque ajout ou suppression de module

la bonne : allocation dynamique ; nécessite le module mod_dso

Le RPM d ’apache pour Redhat7.1 est prévue pour une allocation dynamique des modules (DSO support)

23

Les modules proposés avec apache

http://httpd.apache.org/docs/mod/index-bytype.html utiliser les modules par défaut ajouter des modules au fur et à mesure des besoins Décommenter les lignes LoadModule et AddModule dans le

fichier httpd.conf Exemple, ajout du module speling

– ce module tente la correction d ’URL mal tapées et confond majuscules/ minuscules dans les URL

– dans httpd.conf, décommenter :LoadModule speling_module modules/mod_speling.so

AddModule mod_speling

– Consulter : http://perso.univ-rennes1.fr/laurent

24

Ajout de modules non livrés avec Apache

Un catalogue des modules est disponible sur le serveur : http://modules.apache.org

Quelque modules : FastCGI, PHP, extensions Frontpage, DAV ...

25

Ajout du module PHP

Disponible sous forme de RPMs Installer impérativement :

– le module PHP pour apache : mod_php-4.0.1pl2-9.i386.rpm

– les librairies PHP : php-4.0.1pl2-9.i386.rpm

Installer en fonction des besoins :– php-pgsql-4.0.1pl2-9.i386.rpm

– php-mysql-4.0.1pl2-9.i386.rpm

– php-ldap-4.0.1pl2-9.i386.rpm

– ...

Arrêter et redémarrer Apache Installation très aisée, aucune modification à apporter au

fichier httpd.conf

26

Ajout du module DAV

DAVLockDB /etc/httpd/conf/var/DAVLock

DAVMinTimeout 600

<Directory "/var/www/html/dav"> DAV On <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Order allow,deny Allow from 148.60.11.5 # le poste de production des pages du site </Limit></Directory>

Les droits d'accès au répertoire dav doivent être :drwxr-s---

et appartenir à l'usager apache:apache

27

Ajout du module LDAP

LoadModule auth_ldap_module modules/mod_auth_ldap.soAddModule auth_ldap.c

Exemple, donner les accès en consultation aux personnels du CRI :

<Directory "/var/www/html/ldap_test"> AuthType Basic AuthName “ Test d’authentification sur LDAP ” AuthLDAPURL ldap://ldap.univ-rennes1.fr :389/ou=people, dc=univ-rennes1, dc=fr?uid?sub?(departmentnumber=57CRI) Require valid-user</Directory>

28

Pour une meilleure sécurité, suEXEC

suEXEC permet à Apache d ’exécuter CGI et SSI sous l’identité de l ’utilisateur à qui appartient le fichier

Sans suEXEC, les CGI et SSI sont exécutés sous la même identité que Apache soit apache:apache

Mise en œuvre :– /usr/sbin/suexec est installé avec le RPM apache

– chmod 4711 /usr/sbin/suexec

– redémarrer Apache ; consulter error_log qui doit contenir : suEXEC mechanism enabled

29

Performances du serveur

Pour afficher des statistiques d ’accès à un serveur Web, lancer la commande :/usr/sbin/ab [arguments] [URL]

Exemple :/usr/sbin/ab -n 10 http://www.univ-rennes1.fr/

Server Software: Apache/1.2.4

Server Hostname: www.univ-rennes1.fr

Server Port: 80

Document Path: /

Document Length: 4034 bytes

Concurrency Level: 1

Time taken for tests: 0.306 seconds

Complete requests: 10

Failed requests: 0

Total transferred: 42890 bytes

HTML transferred: 40340 bytes

Requests per second: 32.68

Transfer rate: 140.16 kb/s received