FreeBSD Serveur FreeBSD: Installation du serveur Web

3 janvier 2008 – 0:33

Dans cet article nous allons voir l’installation d’un apache 2.2 avec php 5 en tant que cgi-bin ainsi que l’installation de suphp pour que les utilisateurs ne puissent faire n’importe quoi. Nous aborderons aussi l’installation de mysql. Enfin nous installerons un serveur ftp proftpd.

Nous avons donc installé des outils lors de la première partie de l’installation du serveur tels que portupgrade que nous allons pleinement mettre à  profit. Ce dernier permet de pouvoir définir les MAKE_ARGS par ports et permet aussi de mettre en place des procédures de mise à  jour afin de n’interrompre les services tels que apache que quelque secondes et que cela soit “proprement” fait.

Installation de Apache 2.2

Dans cette partie, nous allons installer un apache 2.2 avec tous les modules.

Préparation de la compilation

Pour commencer nous allons rendre une petite visite au fichier de configuration /usr/local/etc/pkgtools.conf afin de passer quelques options lors de la compilation d’apache. Pour cela on va rajouter à  l’endroit opportun:

...
MAKE_ARGS = {
'www/apache22' => [
'WITH_APR_FROM_PORTS=yes',
'WITH_ALL_MODULES=yes',
],
}

Installation

Ensuite nous allons lancer la commande magique afin d’installer apache:

serveur# portinstall www/apache22

Une fois cela fait rajoutons la ligne suivant au fichier /etc/rc.conf:

apache22_enable="YES"

Mise à jour du firewall

Maintenant avant de se ruer sur un navigateur pour voir si ça marche bien on pense à  mettre à  jour le fichier de configuration du firewall /etc/pf.conf en rajoutant les lignes suivantes.

pass in on $ext_if inet proto tcp from any to ($ext_if) port 80 \
flags S/SA keep state

Maintenant on peut (re)lancer les services et tapoter dans son navigateur préféré l’adresse IP du serveur.

/usr/local/etc/rc.d/apache22 start
/etc/rc.d/pf restart

Au passage vous avez pu voir qu’il s’est plein car on n’a pas dit à  apache le nom du serveur sur lequel il tournait, mais ce n’est pas grave on reviendra sur la configuration d’apache ainsi que la personnalisation du layout plus tard.

Installation de PHP 5

L’installation de PHP que je présente dans cette partie se décompose en deux parties, la première installation à  partir des ports “classiquement” mais ensuite nous allons installer suphp qui permettra à  Apache d’exécuter les scripts php avec les droits de leur propriétaire. Au passage on verra que j’installe suphp à  la main car les réglages du port ne me vont pas et que je patch les sources (grâce à  un patch issu des paquets Debian) pour des facilités de configuration.

Installation du port PHP 5

On va commencer par éditer le fichier /usr/local/etc/pkgtools.conf afin de préciser nos options de compilations. Ce sont essentiellement des options liées à  la sécurisation de php. Donc on rajoute dans les MAKE_ARGS ceci:

'lang/php5' => [
'WITH_DISCARD=yes',
'WITH_REDIRECT=yes',
],

Puis on lance la commande suivante afin d’installer php5:

serveur# portinstall lang/php5

Installation de suPHP

On va commencer par éditer le fichier /usr/local/etc/pkgtools.conf afin de préciser nos options de compilations. Ce sont essentiellement des options liées à  la sécurisation de suphp. Donc on rajoute dans les MAKE_ARGS ceci:

'www/suphp' => [
'WITH_SETID_MODE=paranoid',
],

Puis on lance la commande suivante afin d’installer suPhp:

serveur# portinstall www/suphp

On va tout d’abord télécharger ce dernier et l’extraire.

Configuration de PHP et suPHP

Pour cela on va tout d’abord copier des fichiers de configuration aux endroits appropriés et leur donner les bons droits:

serveur# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
serveur# cp /usr/local/etc/suphp.conf-example /usr/local/etc/suphp.conf
serveur# chmod 600 /usr/local/etc/suphp.conf
serveur# chmod 600 /usr/local/etc/php.ini

Ensuite on va rajouter dans la configuration générale de apache (fichier /usr/local/etc/apache22/httpd.conf) les lignes suivantes:

LoadModule suphp_module libexec/apache22/mod_suphp.so
suPHP_engine On
AddType application/x-httpd-php .php
suPHP_AddHandler application/x-httpd-php

Il faut aussi modifier dans ce même fichier la directive DirectoryIndex par la ligne suivante:

DirectoryIndex index.php index.html

Et pour chaque vhost on rajoutera les lignes suivantes que l’on adaptera selon l’utilisateur:

suPHP_UserGroup admin admin

Maintenant nous allons regarder dans le fichier /usr/local/etc/suphp.conf et prendre soin de modifier les lignes suivantes:

logfile=/var/log/suphp.log
loglevel=info
webserver_user=www
docroot=/usr/local/www/*:/usr/home/*
allow_file_group_writeable=false
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false
check_vhost_docroot=true
errors_to_browser=false
env_path=/bin:/usr/bin:/usr/local/bin
umask=0022
min_uid=1000
min_gid=1000
x-httpd-php=php:/usr/local/bin/php-cgi
x-suphp-cgi="execute:!self"

Une fois cela fait il suffit de redémarrer apache pour qu’il prenne en compte les changements:

serveur# /usr/local/etc/rc.d/apache22 restart

Installation de MySQL

Nous allons maintenant procéder à  l’installation de mysql 5.5 afin que les utilisateurs du serveur web puissent jouer avec.

Compilation et installation de MySQL

Pour cela comme d’habitude on va commencer par éditer le fichier /usr/local/etc/pkgtools.conf pour donner les options de compilations:

'databases/mysql55-server' => [
'WITH_OPENSSL=yes',
'WITH_CHARSET=utf8',
'WITH_XCHARSET=all',
'WITH_COLLATION=utf8_general_ci',
],

Et ensuite on lance l’installation via la désormais célèbre commande:

serveur# portinstall databases/mysql55-server

Une fois cela fait, je préfère chrooter mysql à  un répertoire dans le /home afin que les quotas que je vais mettre aux utilisateurs puissent être appliqués aussi aux bases de données.


serveur# mkdir /home/mysql
serveur# mkdir /home/mysql/tmp
serveur# cp /usr/local/share/mysql/my-medium.cnf /home/mysql/my.cnf
serveur# chmod 644 /home/mysql/my.cnf
serveur# chown -R mysql:mysql /home/mysql

Ensuite j’édite le fichier /home/mysql/my.conf afin de mettre à  jour le path pour le répertoire temporaire en modifiant cette ligne:

tmpdir = /home/mysql/tmp/

Il ne reste qu’à  rajouter au fichier /etc/rc.conf les lignes suivantes pour démarrer le serveur de base de données:


mysql_enable="YES"
mysql_dbdir="/home/mysql"

Changement du mot de passe et création d’utilisateurs

Maintenant que nous avons fait tout cela il ne reste qu’à  lancer mysql et à  nous authentifier en tant que root pour mettre un nouveau mot de passe à  ce dernier:


serveur# /usr/local/etc/rc.d/mysql-server start
serveur# /etc/rc.d/pf restart
serveur# mysql -u root
mysql> DROP DATABASE test;
mysql> DELETE FROM mysql.user WHERE Host <> 'localhost' OR User <> 'root';
mysql> SET PASSWORD FOR root@localhost=PASSWORD('mot_de_passe');
mysql> FLUSH PRIVILEGES;
mysql> quit;

Voilà j’en ai fini pour cette partie. Maintenant il ne reste que le serveur FTP à  mettre en place.

Installation des extensions PHP

Afin d’installer quelques extension php lancez les commandes suivantes

serveur# portinstall converters/php5-mbstring
serveur# portinstall graphics/php5-gd
serveur# portinstall security/php5-mcrypt
serveur# portinstall security/php5-mhash
serveur# portinstall databases/php5-mysql
serveur# portinstall databases/php5-mysqli
serveur# portinstall devel/php5-gettext
serveur# portinstall math/php5-gmp
serveur# portinstall mail/php5-imap
serveur# portinstall graphics/php5-ming
serveur# portinstall security/php5-openssl
serveur# portinstall devel/php5-pcre
serveur# portinstall sysutils/php5-posix
serveur# portinstall textproc/php5-pspell
serveur# portinstall www/php5-session
serveur# portinstall archivers/php5-bz2
serveur# portinstall math/php5-bcmath
serveur# portinstall misc/php5-calendar
serveur# portinstall textproc/php5-ctype
serveur# portinstall ftp/php5-curl
serveur# portinstall databases/php5-dba
serveur# portinstall databases/php5-dbase
serveur# portinstall textproc/php5-dom
serveur# portinstall graphics/php5-exif
serveur# portinstall ftp/php5-ftp
serveur# portinstall devel/php5-tokenizer
serveur# portinstall textproc/php5-wddx
serveur# portinstall textproc/php5-xml
serveur# portinstall archivers/php5-zlib
serveur# portinstall devel/php5-sysvshm

Mise en place du serveur FTP

Pour le serveur FTP j’ai choisi proftpd car c’est un logiciel que je connais bien et dont je connais les possibilités. Nous allons commencer par ajouter les lignes suivantes au fichier /usr/local/etc/pkgtools.conf:

'ftp/proftpd' => [
'WITH_CTRLS=yes',
'WITH_BAN=yes',
],

Ensuite nous pouvons installer proftpd:

serveur# portinstall ftp/proftpd

Ensuite nous allons rajouter la ligne suivante au fichier /etc/rc.conf afin de lancer le serveur ftp automatiquement:

proftpd_enable="YES"

Configuration du Firewall

La configuration du firewall pour un serveur ftp est un casse-tête à  cause du protocole ftp lui-même. Cependant on peut réussir à  en faire un â  peu près propre. Pour cela sur mon serveur je vais autoriser le trafic entrant sur le port 21 ainsi que sur une plage de ports haut. Mais en fait mon serveur étant placé derrière un firewall openbsd, celui-ci s’occupera en frontal de m’ouvrir les ports hauts au coup par coup en fonction des requêtes FTP. Ce qui donne dans notre fichier /etc/pf.conf les lignes suivantes en plus:

pass in on $ext_if inet proto tcp from any to ($ext_if) port 21 keep state
pass in on $ext_if inet proto tcp from any to ($ext_if) port > 49151 \
keep state

Je reviendrais sur la configuration du firewall dans un prochain article.

Configuration de proftpd

Pour commencer on va limiter les utilisateurs que nous voulons voir se connecter via le ftp en rajoutant leur login dans le fichier /etc/ftpusers. Typiquement on y rajoutera “admin”. Ensuite on va mettre les lignes suivantes dans le fichier /usr/local/etc/proftpd.conf:

Umask 022
IdentLookups off
ServerIdent off
DeferWelcome On
RequireValidShell yes
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth
ExtendedLog /var/log/ftp.log AUTH
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
SyslogFacility AUTH
MaxInstances 30
ServerType standalone
UseReverseDNS off
AllowOverwrite yes
PassivePorts 49152 65534
MaxLoginAttempts 5
MaxClients 20
DefaultRoot ~/www

Il ne reste qu’à  redémarrer certains services et le tour est joué:

serveur# mkdir /var/log/proftpd
serveur# /etc/rc.d/pf restart
serveur# /usr/local/etc/rc.d/proftpd start

Tags: , , , , ,

You must be logged in to post a comment.