Installer un serveur Apache 2.0 dans un chroot
Auteur : Olivier BOYER - oboyer () ajoute ! org
Mots clés
NetBSD, apache, apache 2.0.x, chroot
Introduction
Ce document décrit comment installer un serveur Apache2.0.x dans un environnement “chrooté” sur un système NetBSD.
Présentation de la maquette
- un système NetBSD1.6.2 sparc64
- le serveur 'httpd' est installé à partir des sources, et non pas à partir de l'arbre des 'pkgsrc'.
- les sources d'Apache sont extraites dans le répertoire
/usr/local/src - la version d'apache utilisée est la
2.0.49
Note
Toutes les commandes présentées ici, sont à executer, sauf mention contraire, en tant qu'administrateur de la machine.
Compilation et installation d'Apache 2.0
Exécutez les commandes suivantes :
Compilation
# cd /usr/local/src/httpd-2.0.49 ./configure \ --prefix=/ \ --datadir=/www \ --sysconfdir=/etc \ --localstatedir=/var \ --with-mpm=prefork \ --enable-so \ --enable-modules="all proxy proxy_connect proxy_ftp proxy_http ssl" # # make [...]
Installation
Créez la nouvelle racine pour le serveur web :
# mkdir -p /chroot/httpd
Il est conseillé d'installer Apache sous l'identité d'un utilisateur non privilegié. Ainsi, si le make install se passe mal, aucun fichier système ne sera endomagé.
# chown <unpriv_user> /chroot/httpd # su - <unpriv_user> $ cd /usr/local/src/httpd-2.0.49 $ make install DESTDIR=/chroot/httpd
Cette dernière commande permet d'installer Apache dans le répertoire DESTDIR au lieu du prefix passé lors du configure. Cette possibilité est apparue dans la version 2.0.38 d'Apache. Elle reproduit le comportement de l'option root= d'Apache1.3.x
Il faut maintenant mettre les “vrais droits” à l'arborescence :
# chown -R root:wheel /chroot/httpd
Création d'un utilisateur dédié
www/www
Création de la cage
Le produit Apache a été installé dans sa cage, c'est-à-dire le répertoire qui apparaîtra pour le processus httpd comme la racine du système (/).
Maintenant il faut copier dans cette cage tous les binaires et bibliothèques nécessaires au fonctionnement d'Apache. Dans le cas contraire, le processus ne s'exécutera pas.
Pour faciliter la création, définissons la variable d'environnement suivante :
# $TGT=/chroot/httpd # export TGT
Créer les répertoires dans la cage
# cd $TGT # mkdir dev home tmp # mkdir -p usr/lib usr/libexec
Copier les bibliothèques de fonctions dans la cage
# ldd /chroot/httpd/bin/httpd
/chroot/httpd/bin/httpd:
-lssl.2 => /usr/lib/libssl.so.2
-lcrypto.1 => /usr/lib/libcrypto.so.1
-laprutil-0.9 => not found
-lexpat.1 => not found
-lapr-0.9 => not found
-lm.0 => /usr/lib/libm.so.0
-lcrypt.0 => /usr/lib/libcrypt.so.0
-lresolv.1 => /usr/lib/libresolv.so.1
-lc.12 => /usr/lib/libc.so.12
#
# for i in `ldd $TGT/bin/httpd |awk '{print $3}' |grep /usr/lib` ; do \
cp $i $TGT/usr/lib; done
# cp /usr/libexec/ld.elf_so $TGT/usr/libexec
Créer les périphériques
# cd $TGT/dev # /dev/MAKEDEV null # /dev/MAKEDEV random
Copier les fichiers d'authentification
/etc/master.passwd
# cp /etc/master.passwd $TGT/etc # chmod 400 $TGT/etc/master.passwd
Supprimer TOUS les utilisateurs SAUF les comptes : root nobody www
/etc/passwd
# cp /etc/passwd $TGT/etc # chmod 444 $TGT/etc/passwd
Supprimer TOUS les utilisateurs SAUF les comptes : root nobody www
/etc/group
# cp /etc/group $TGT/etc/group # chmod 444 $TGT/etc/group
Supprimer TOUS les groupes SAUF les groupes : wheel nogroup www
Générer les bases password
# pwd_mkdb -d $TGT $TGT/etc/master.passwd
Extrait de la page de manuel :
pwd_mkdb creates db(3) style secure and insecure databases for the speci- fied file. These databases are then installed into ''/etc/spwd.db'' and ''/etc/pwd.db'' respectively.
Divers
- Pour que
apachectlpuisse fonctionner :
# cp /bin/sh $TGT/bin
- Pour que le serveur soit à la bonne heure :
# cp /etc/localtime $TGT/etc
- Pour que le serveur puisse résoudre les noms :
# cp /etc/host /etc/resolv.conf $TCT/etc # cp /etc/nsswitch.conf $TGT/etc
Ne garder QUE les entrées group, passwd, hosts du fichier resolv.conf. Il doit ressembler à celui ci-dessous :
# nsswitch.conf(5) - # name service switch configuration file # # These are the defaults in libc # group: files passwd: files hosts: files dns #EOF
Démarrer Apache dans sa cage
# chroot $TGT /bin/apachectl start # chroot $TGT /bin/apachectl stop