Linux Apache SSL PHP/FI frontpage mini-HOWTO

Marcus Faure, [email protected]

v1.1, July 1998
Ce document traite de la mise en place d'un serveur WEB multifonctions Il autorisera la cr�ation dynamique des pages avec la langage PHP, s�curisera l'�change des donn�es gr�ce � SSL et fiabilisera l'ex�cution des scripts CGI et des extensions Frontpage de M$.

1. Introduction

Avant tout : [NdT : l'auteur explique qu'il n'est pas un Mozart de la langue anglaise. Ca tombe bien, moi non plus !]

1.1 Description des diff�rentes composantes

Le serveur web dont vous disposerez gr�ce � ce Howto comprend plusieurs parties : les sources Apache d'origine avec quelques ( ah, ah ) patches et divers ex�cutables. Je vous conseille d'utiliser les m�mes versions de logiciels que moi. Elles ne devraient pas poser de probl�mes et le d�mon r�sultant sera relativement stable. Les plus t�m�raires essayeront les derni�res versions avec de toutes nouvelles fonctionnalit�s mais ce n'est pas ma faute si ca ne marche pas. Les configurations utilisables gagneront � �tre signal�es afin que je les inclut dans les nouvelles versions de ce document. Ma plate forme d'exp�rimentation repose sur un noyau Linux 2.0.35, d'o� une certaine sp�cificit� de ce Howto qui devrait rester applicable � d'autres Unix.

Il n'est pas n�cessaire de tout compiler. J'ai essay� de structurer ce HOWTO de telle sorte que vous puissiez ignorer les parties qui ne vous concernent pas.

Ce document n'est pas un manuel utilisateur pour Apache, SSL, PHP/FI ou FrontPage. Son objectif premier est de diminuer la consommation d'aspirine des fournisseurs de service WEB lors de la mise en place de leur premier serveur et d'apporter une contribution � la communaut� Linux.

PHP est un langage de script qui autorise les pages HTML dynamiques. Il ressemble au SSI d'Apache mais en bien moins compliqu�. Des modules existent pour les bases de donn�es courantes. PHP requiert les librairies GD.

SSL est une mise en oeuvre du Secure Socket Layer de Netscape qui s�curise les connections sur des r�seaux douteux ( typiquement pour la transmission des num�ros de cartes de cr�dit � partir de formulaires web ).

Frontpage est un outil ouiziouigue de cr�ation web qui propose des extensions, propres � un type de serveurs, appell�es webbots. Certains trouvent Frontpage agr�able en ce qu'il permet la mise en place de sites de discussion et de questionnaires en ignorant tout du HTML et du CGI. Il �pargne m�me au concepteur le t�l�chargement du site via ftp gr�ce � son propre agent. Si vous souhaitez la compatibilit� Frontpage sans le serveur � fen�tres, les extensions du serveur Apache sont faites pour vous.

1.2 Configurations op�rationelles

Bien que ce document ait �t� t�l�charg� une centaine de fois depuis sa publication, je n'ai gu�re eu de retour. En particulier, personne ne m'a rapport� la viabilit� de nouvelles combinaisons. Voici les miennes :

(*) la version 3.0.3 est d�conseill�

1.3 Historique

v0.0/Apr 98: Version all�g�e

v1.0/Jun 98: Apache 1.2.6, section FrontPage mise � jour, corrections mineures

v1.1/Jul 98: Restructuration et passage au SGML

La derni�re mouture de ce document est disponible via : http://www.faure.de

2. Installation des diff�rents �l�ments

2.1 Pr�paratifs

Il vous faudra :

R�cup�rez les sources souhait�es. D�tarez Apache, PHP, GD et SSL en /usr/src. D�tarez le patch SSL vers /usr/src/apache_1.2.6.

2.2 Ajout de PHP

Faites un cd vers /usr/src/gd1.2 suivi de make pour construire la librarie GD libgd.a qui devra �tre copi�e en /usr/lib. Allez ensuite en php-2.0.1 et lancez ./install.

Voici les questions-cl� :

Would you like to compile PHP/FI as an Apache module? [yN] y
Are you compiling for an Apache 1.1 or later server? [Yn] y
Are you using Apache-Stronghold? [yN] y
Does your Apache server support ELF dynamic loading? [yN] y
Apache include directory (which has httpd.h)? [/usr/local/include/apache] /usr/src/apache_1.2.6/src
Would you like to build an ELF shared library? [yN] y
Additional directories to search for .h files []: /usr/src/gd1.2
Would you like the bundled regex library? [yN] n

De m�me que les extensions FrontPage, phtml pose un probl�me au niveau de la s�curit� vu qu'il tourne avec l'UID du serveur Web. Enclenchez le mode s�r dans src/php.h et limitez prudemment le chemin de recherche. Vous souhaiterez peut- �tre changer d'autres valeurs dans le php.h. Si l'aspect s�curit� est crucial pour vous, compilez php en tant que cgi. L'ensemble sera cependant moins performant que la version module.

Tapez make pour compiler les sources. Une fois la compilation achev�e, copiez mod_php.* et libphp.a en /usr/src/apache_1.2.6/src. Ajoutez une ligne

Module php_module mod_php.o 
� la fin de /usr/src/apache_1.2.6/src/Configuration et
-lphp -lm -lgdbm -lgd    
EXTRA_LIBS ( m�me fichier ), ainsi que
application/x-httpd-php phtml 
au mime.types d'Apache et
AddType  application/x-httpd-php .phtml
au srm.conf d'Apache.

Peut-�tre ajouterez vous aussi index.phtmlDirectoryIndex dans ce m�me fichier de fa�on � ce qu'un fichier index.phtml soit automatiquement charg� lors d'une requ�te sur son r�pertoire.

2.3 Ajout de SSL

cd /usr/src/SSL-0.8.0; ./Configure linux-elf; make; make rehash Ceci compilera les librairies requises par Apache. make test vous permettra de v�rifier le bon d�roulement de la compilation. Il faut � pr�sent patcher Apache. Il est primordial d'appliquer ce patch avant le patch Frontpage sinon ce dernier sera inefficace. Faites un cd vers /usr/src/apache_1.2.6/src et lancez patch < /usr/src/apache_1.2.6/SSLpatch. Positionnez SSL_BASE=/usr/src/SSLeay-0.8.0 in Configuration. Assurez vous de ce que Module proxy_module est d�sactiv� sinon Apache ne compilera pas. Si vous avez besoin d'un proxy, Squid vous tend les bras : squid.nlanr.net

make certificate g�nerera SSLconf/conf/httpsd.pem.

2.4 Ajout de FrontPage

Renommez le fichier fp30.linux.tar.Z en fp30.linux.tar.gz ou bien le script d'install ne le verra pas. Lancez ./fp_install ainf de copier les fichiers d'extension en /usr/local/frontpage. zcat devrait s'ex�cuter par /usr/bin/zcat.

On applique � pr�sent le patch FrontPage : allez en /usr/src/apache_1.2.6/src et tapez patch < /usr/src/frontpage/version3.0/apache-fp/fp-patch-apache_1.2.5 Ceci cr�era les fichiers mod_frontpage.* et en modifiera d'autres ( Configuration, ... ). Le patch 1.2.5 fonctionne aussi bien avec Apache 1.2.5 qu'avec 1.2.6. Passez pour l'instant sur ce qui se rapporte � l'installation des serveurs ouaibe.

3. Assemblons les morceaux du puzzle !

3.1 Modules Apache � essayer

J'utilise les modules suivants en plus de SSL, PHP et Frontpage :

Module env_module          mod_env.o
Module config_log_module   mod_log_config.o
Module mime_module         mod_mime.o
Module negotiation_module  mod_negotiation.o
Module dir_module          mod_dir.o
Module cgi_module          mod_cgi.o
Module asis_module         mod_asis.o
Module imap_module         mod_imap.o
Module action_module       mod_actions.o
Module alias_module        mod_alias.o
Module rewrite_module      mod_rewrite.o
Module access_module       mod_access.o
Module auth_module         mod_auth.o
Module anon_auth_module    mod_auth_anon.o
Module digest_module       mod_digest.o
Module expires_module      mod_expires.o
Module headers_module      mod_headers.o
Module browser_module      mod_browser.o

3.2 S�curiser CGI

Si vous �tes un FAI (c'est surement le cas si vous lisez ces lignes), vous voudrez am�liorer la s�curit�. L'utilitaire suexec vous le permettra dans la mesure o� il ex�cutera les CGI avec l'UID du propri�taire du Web plut�t qu'avec celle du serveur. Allez en /usr/src/apache_1.2.6/support et lancez make suexec. Faites un chmod 4711 suxec et copiez le � l'emplacement pr�cis� dans ../src/httpd.h, soit /usr/local/etc/httpd/sbin/suexec par d�faut. Si le chemin vous semble un peu obscur - ce f�t le cas pour moi - �ditez httpd.h et positionnez le � quelque chose de plus raisonnable.

3.3 Compilation et installation du d�mon

Allez en /usr/src/apache_1.2.6/src et �ditez Configuration afin de choisir les modules que vous voulez inclure dans votre d�mon Apache. Ceci effectu�, lancez ./Configure et make. Il s'agit l� de la derni�re �tape de compilation, la plus compliqu�e. Croisez les doigts. Si tout se d�roule normalement, copiez httpsd en /usr/sbin. Ne n�gligez pas la taille du d�mon. Cr�ez le r�pertoire /var/httpd avec les sous-r�pertoires cgi-bin, conf, htdocs, icons, virt1, virt2 et logs. Editez access.conf-dist, mime.types et srm.conf-dist ( r�pertoire /usr/src/apache_1.2.6/conf ) selon vos besoins et copiez les en var/httpd/conf/access.conf, srm.conf et mime.types. Enfin, copiez le fichier httpsd.pem cr�� par make certificate en /var/httpd/conf. Utilisez le httpd.conf suivant :

ServerType standalone
Port 80
Listen 80
Listen 443
User wwwrun
Group wwwrun
ServerAdmin [email protected]
ServerRoot /var/httpd
ErrorLog logs/error_log
TransferLog logs/access_log
PidFile logs/httpd.pid
ServerName www.yourhost.com
MinSpareServers 3
MaxSpareServers 20
StartServers 3

SSLCACertificatePath /var/httpd/conf
SSLCACertificateFile /var/httpd/conf/httpsd.pem
SSLCertificateFile /var/httpd/conf/httpsd.pem
SSLLogFile /var/httpd/logs/ssl.log
 
<VirtualHost www.virt1.com>
SSLDisable
ServerAdmin [email protected]
DocumentRoot /var/httpd/virt1
ScriptAlias /cgi-bin/ /var/httpd/virt1/cgi-bin/
ServerName www.virt1.com
ErrorLog logs/virt1-error.log
TransferLog logs/virt1-access.log
User virt1admin
Group users
</VirtualHost>

<VirtualHost www.virt1.com:443>
ServerAdmin [email protected]
DocumentRoot /var/httpd/virt1
ScriptAlias /cgi-bin/ /var/httpd/virt1/cgi-bin/
ServerName www.virt1.com
ErrorLog logs/virt1-ssl-error.log
TransferLog logs/virt1-ssl-access.log
User virt1admin
Group users
SSLCACertificatePath /var/httpd/conf
SSLCACertificateFile /var/httpd/conf/httpsd.pem
SSLCertificateFile /var/httpd/conf/httpsd.pem
SSLLogFile /var/httpd/logs/virt1-ssl.log
SSLVerifyClient 0
SSLFakeBasicAuth
</VirtualHost>

<VirtualHost www.virt2.com>
SSLDisable
ServerAdmin [email protected]
DocumentRoot /var/httpd/virt2
ScriptAlias /cgi-bin/ /var/httpd/virt2/cgi-bin/
ServerName www.virt2.com
ErrorLog logs/virt2-error.log
TransferLog logs/virt2-access.log
</VirtualHost>

Les directives d�pendent des modules compil�s. Leur liste s'obtient avec httpsd -h.

3.4 Ajout des fonctionnalit�s Frontpage au serveur Web

Allez en /usr/local/frontpage/version3.0/bin et lancez ./fpsrvadm. Choisissez install et apache-fp. R�pondez comme suit aux questions :

Enter server config filename: /var/httpd/conf/httpd.conf
Enter host name for multi-hosting []: www.virt2.com
Starting install, port: www.virt2.com:80, web: ""
Enter user's name []: virt2admin
Enter user's password:
Confirm password:
Creating root web
Recalculate links for root web
Install completed.

Le nom d'utilisateur doit correspondre au login Unix du ppropri�taire du web. Le mot de passe peut diff�rer. Ajoutez � la main sendmailcommand:/usr/sbin/sendmail %r au fichier /usr/local/frontpage/www.virt2.com:80.conf ou vos utilisateurs ne pourront envoyer de courriers g�n�r�s via le web. Faites un kill -HUP sur votre httpsd de fa�on � ce que fp r�examine sa configuration. Votre client FrontPage peut � pr�sent acc�der � www.virt2.com

Dans certains cas, fpsrvadm se plaint de l'absence d'un web � la racine. Cela ne sert gu�re, mais vous devrez surement le faire pour que fpsrvadm se taise.

3.5 D�marrage du d�mon

Lancez Apache via httpsd -f /var/httpd/conf/httpd.conf. On acc�de � pr�sent � www.virt1.com aussi bien via http que via https. C'est chouette la vie. Naturellement, vous acheterez un v�ritable certificat afin d'offrir un service Web SSL qui ne fasse pas rigoler les clients.

Copiez un des fichiers du r�pertoire d'exemples de php en virt1 pour essayer phtml.

3.6 Consid�rations diverses

N'utilisez pas les extensions FrontPage 97. Elles ne fonctionnent pas sous Linux. A l'installation, les biblioth�ques C++ semblent fonctionner mais vos fichiers de logs se rempliront de premature end of script headers tandis que votre boite au lettre d�bordera de r�clamations. Evitez les extensions FrontPage 98 avec des versions ant�rieures � la 3.0.2.1330. Les num�ros de version manquent singuli�rement d'homog�n�it�. Faites un telnet sur le port 80, tapez "get / http/1.0" suivi de deux retours � la ligne et vous obtiendrez un num�ro de version de 3.0.4 pour FrontPage.

Des informations plus pr�cises sont disponibles en ex�cutant : /usr/local/frontpage/currentversion/exes/_vti_bin/shtml.exe -version. Les versions plus anciennes sont bugg�es en ce qu'elles exigent du httpd.conf qu'il puisse �tre �crit sous le gid du serveur web. Voila de quoi faire hurler ceux qui tiennent � la s�curit�. Les versions post�rieures � la 3.0.2.1330 fonctionnent mieux.

3.7 Bugs connus

L'utilisation de Recalculate Links par le client Frontpage lance au niveau du serveur un process qui consomme 99% du cpu et 10 Mo de m�moire. Pour des webs de taille moyenne avec des machines rapides, le client re�oit parfois un timeout et ce alors m�me que le calcul parvient normalement � son terme. Demandez aux adeptes de FrontPage de rester patients et de ne pas activer Recalculate Links � r�p�tition. Pensez � mettre au moins 64 Mo.

A l'instant o� j'�cris ces lignes, SSL et Frontpage fonctionnent mais pas de fa�on simultan�e. Vous ne pouvez donc ni mettre � jour votre web via SSL, ni utiliser des webbots avec https. Vous pouvez actualiser votre web via le port 80 et y acc�der en chiffr� via le port 443 mais les compteurs par exemple seront faux. Je consid�re ceci comme un bug. Il devrait disparaitre avec SSL 0.9.0.

3.8 Le mot de la fin

Pour ceux qui trouvent que le titre de ce HOWTO est presque aussi long que son contenu : avez vous jamais �cout� Meat Loaf ?

Bien, amis lecteurs, c'est tout pour aujourd'hui. N'h�sitez pas � me transmettre vos exp�riences, votre reconnaissance �ternelle, des fleurs, de l'argent, des voitures, des gisements de p�trole, ou des ratons laveurs.