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 apachectl puisse 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
 
doc/netbsd/apache2_chroot.txt · Dernière modification: 2009/12/23 22:36 (édition externe)     Haut de page