Personal tools
You are here: Home GNU / Linux Debian 4.0 Etch Installer un chroot sur une Debian 4.0 Etch
Document Actions
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Installer un chroot sur une Debian 4.0 Etch

by admin last modified 2008-01-21 17:22

Un chroot permet de déplacer facilement un serveur d'une machine à l'autre. Cela apporte aussi une sécurité minimale en séparant les systèmes présents sur une machine (minimale hein, rien n'empêche un pirate de sortir d'un chroot créé avec ce guide). Personnellement je m'en sers pour déployer rapidement des serveurs Zope :D

Remarque : Si vous destinez le chroot que vous voulez créer à l'hébergement d'un serveur ouvert à l'internet, je vous conseille plutôt d'utiliser le guide Créer un chroot en mode paranoïaque sur Debian 4.0 Etch. Il est plus abouti et plus sécurisé que ce guide-ci.

Pré-requis

En premier lieu, il faut installer le logiciel permettant de créer facilement des chroots :

apt-get install debootstrap

Création du chroot

Afin de simplifier au maximum ce mode d'emploi, nous allons stocker le nom de notre prison dans une variable d'environnement :

CHROOT_JAIL_NAME=nom-de-la-prison

Evitez d'utiliser des espaces et autres caractères spéciaux dans ce nom, car il sera utilisé par la suite pour créer le dossier contenant votre prison chroot. Une fois cette variable créée, configurez le dossier où vous souhaitez créer votre prison :

CHROOT_JAIL_ROOT=/home/roots
Créez ensuite le dossier de la future prison :
mkdir $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME

Une fois ce dossier créé, vous pouvez lancer l'initialisation de la prison. Pour cet exemple, nous allons utiliser la distribution Debian Etch. Il est toutefois possible d'utiliser une version testing ou unstable si vous souhaitez disposer de paquets plus récents.

debootstrap etch $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME http://ftp2.fr.debian.org/debian/

Remarque: Vous pouvez de même créer un chroot Ubuntu mais ceci n'est pas détaillé dans ce manuel :

debootstrap dapper $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME http://fr.archive.ubuntu.com/ubuntu/

La commande debootstrap va télécharger les paquets correspondants à la distribution choisie et va les installer dans le dossier de votre prison chroot. Cet étape peut prendre plusieurs minutes suivant la rapidité de votre connexion Internet. Enfin, nous créons le fichier debian_chroot qui nous permet de savoir quand nous travaillons dans le chroot :

echo $CHROOT_JAIL_NAME > $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc/debian_chroot

Mise en place des points de montages nécessaires

Une fois que la commande debootstrap s'est terminée avec succès, il vous faut configurer le montages des systèmes de fichiers spéciaux :

echo "
# $CHROOT_JAIL_NAME jail environment.
proc-$CHROOT_JAIL_NAME $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/proc proc defaults 0 0
devpts-$CHROOT_JAIL_NAME $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/dev/pts devpts defaults 0 0
tmpfs-$CHROOT_JAIL_NAME $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/dev/shm tmpfs defaults 0 0" \
>> /etc/fstab

Nous créons de plus une partition loopback d'1 Go pour le dossier /tmp afin de le rendre non exécutable:

/bin/mkdir -p /var/lib/tmpfs
/bin/dd if=/dev/zero of=/var/lib/tmpfs/chrooted-$CHROOT_JAIL_NAME-tmp.fs bs=1024 count=1000000
/sbin/mkfs.ext3 -F /var/lib/tmpfs/chrooted-$CHROOT_JAIL_NAME-tmp.fs

Nous ajoutons la ligne adéquate au fichier fstab :

/bin/echo "/var/lib/tmpfs/chrooted-$CHROOT_JAIL_NAME-tmp.fs $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/tmp ext3 loop,noexec,nosuid,nodev,rw 0 0" \
>> /etc/fstab

Une fois cette configuration effectuée, il vous faut monter ces systèmes de fichier :

mount $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/proc
mount $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/dev/pts
mount $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/dev/shm
mount $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/tmp

Par la suite, ces montages seront effectués au démarrage de votre système. Enfin, nous donnons les droits d'écriture à tout le monde sur le dossier temporaire de la prison :

chmod ugo+rwx $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/tmp

Configuration des hôtes

Copiez ensuite le fichier /etc/hosts de la machine hôte dans la prison :

cp /etc/hosts $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc

Configuration de syslog

Configurez le démon sysklogd de la machine hôte pour qu'il prenne en compte la prison :

echo $CHROOT_JAIL_ROOT | sed -e 's/\//\\\\\//g' | \
xargs -iCHROOT_JAIL_ROOT sed -i -e \
"s/^SYSLOGD[^=]*=[^\"]*\"\([^\"]*\)\"/SYSLOGD=\"\1 -a CHROOT_JAIL_ROOT\/$CHROOT_JAIL_NAME\/dev\/log\"/g" \
/etc/default/syslogd

Il vous faut maintenant redémarrer le démon syslogd :

/etc/init.d/sysklogd restart

Configuration de apt-get

Vérifiez que le contenu du fichier sources.list de la prison correspond à vos besoins :

cat $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc/apt/sources.list

Si il ne correspond pas à vos besoins, vous pouvez le compléter avec la commande suivante (pour un chroot Debian 4.0 Etch) :

echo "deb ftp://ftp2.fr.debian.org/debian/ etch main contrib non-free
deb-src ftp://ftp2.fr.debian.org/debian/ etch main contrib non-free
deb http://security.debian.org/ etch/updates main contrib non-free" \
> $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc/apt/sources.list

N'oubliez pas de mettre à jour la liste des paquets disponibles une fois cette opération effectuée:

chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME \
apt-get update

Configuration des informations régionales de la prison.

Nous adaptons en premier lieu la zone horaire de la prison de façon à ce qu'elle corresponde à celle de l'hôte :
cp /etc/timezone $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc/timezone

Ensuite, nous installons locales :

chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME \
apt-get install locales

Et nous configurons le support linguistique :

chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME \
sh -c 'echo "fr_FR.UTF-8 UTF-8" >> /etc/locale.gen'
chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME \
locale-gen
chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME \
sh -c 'echo LANG="fr_FR.UTF-8" >> /etc/environment'

Remarque : Vous pouvez bien sûr choisir une autre locale que "fr_FR.UTF-8".

Mise en place de la gestion des emails

Il nous faut remplacer le MTA (Mail Transport Agent : le serveur mail quoi :D) de la prison (par défaut exim) par nullmailer qui est un MTA qui se contente de transférer les emails du systèmes vers un autre serveur mail. Exim sera automatiquement supprimé par cette installation :

chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME \
apt-get install nullmailer mailx

Ce qui nous interesse ici est de transférer les emails généré par l'environnement emprisonné vers le serveur mail de la machine hôte. Pour obtenir ce résultat, utilisez les options suivantes :

  • nom de courrier du système : localhost.localdomain
  • Machines relais : localhost.localdomain

Remarque: pensez à vérifier que localhost.localdomain est présent dans le fichier hosts du chroot.

Mise en place de la gestion des scripts cron

Il suffit simplement d'installer cron:

chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME \
apt-get install cron

Installation du script de démarrage de la prison

Nous allons maintenant mettre en place le script init.d destiné à faire démarrer les démons de la prison (cron, nullmailer, etc...). Nous commençons par mettre en place un fichier de configuration par défaut pour ce script :

wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-un-chroot-sur-une-debian-4-0-etch/chroot-environment \
--output-document=$CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc/default/chroot-environment

L'utilité de ce fichier est expliqué à la fin de cet article.

Nous mettons maintenant en place le script de démarrage de la prison :

wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-un-chroot-sur-une-debian-4-0-etch/chrooted-initd \
--output-document=/etc/init.d/chrooted-$CHROOT_JAIL_NAME
chmod +x /etc/init.d/chrooted-$CHROOT_JAIL_NAME

Et nous l'adaptons à notre prison :

echo $CHROOT_JAIL_ROOT | sed -e 's/\//\\\\\//g' | \
xargs -iCHROOT_JAIL_ROOT_VALUE sed -i -e \
"s/CHROOT_JAIL_ROOT/CHROOT_JAIL_ROOT_VALUE/g" \
/etc/init.d/chrooted-$CHROOT_JAIL_NAME
sed -i -e "s/CHROOT_JAIL_NAME/$CHROOT_JAIL_NAME/g" /etc/init.d/chrooted-$CHROOT_JAIL_NAME

Vous pouvez maintenant démarrer votre prison avec la commande :

/etc/init.d/chrooted-$CHROOT_JAIL_NAME start

et l'arrêter avec :

/etc/init.d/chrooted-$CHROOT_JAIL_NAME stop

Ce script est aussi capable de commander à un service précis de la prison. Par exemple, pour redémarrer nullmailer :

/etc/init.d/chrooted-$CHROOT_JAIL_NAME nullmailer restart

Remarque : Si vous souhaitez que votre prison soit démarrée en même temps que le système hôte, exécutez la commande :

update-rc.d chrooted-$CHROOT_JAIL_NAME defaults

Mise en place de la rotation des logs de la prison

Bien que la plupart des logiciels enregistrent leur actions par l'intermédiaire de sysklogd (ce que nous avons configuré plus haut), ceux pour qui ce n'est pas le cas stockent leur fichiers logs dans la prison même (c'est le cas par exemple pour apache). Nous allons donc faire en sorte que la rotation des fichiers logs s'applique aussi à ceux de la prison. Pour ce faire, nous  installons logrotate:
chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME \
apt-get install logrotate

Installation de cron-apt dans la prison

cron-apt est un logiciel très pratique qui surveille les mises à jour disponibles pour votre installation. Nous allons configurer ce logiciel pour l'adapter à notre prison. En premier lieu, nous installons le paquet :

chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME \
apt-get install cron-apt

Ensuite, nous configurons le paquet pour qu'il envoie des emails à l'utilisateur root lorsque des mises à jour sont disponibles :

sed -i -e 's/^#[ \t]*\(MAILTO="root"\)/\1/' \
-e '/^#[ \t]*\(MAILON="error"\)/a\
MAILON="upgrade"' \
$CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc/cron-apt/config

Nous personnalisons les emails envoyés de façon à ce qu'il soit possible de mettre à jour la prison par un simple copier / coller :

echo "###### $(hostname) ######
## Prison : $CHROOT_JAIL_NAME

Pour mettre à jour la prison, executez la commande :

/usr/sbin/chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME apt-get upgrade

########################" \
> $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc/cron-apt/mailmsg.d/0-update
cp $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc/cron-apt/mailmsg.d/0-update \
$CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME/etc/cron-apt/mailmsg.d/3-download

Administration du chroot

Maintenant que votre prison est créée, vous pouvez y entrer avec la commande :

chroot $CHROOT_JAIL_ROOT/$CHROOT_JAIL_NAME /bin/su -

Vous aurez ainsi un accès root à votre prison. Vous pourrez y travailler comme dans tout système Debian / Ubuntu. Pour sortir de votre prison, tapez simplement :

exit

Si vous souhaitez installer un service supplémentaire dans votre prison, installez le avec apt-get. Par exemple :

apt-get install apache2

Puis éditez le fichier /etc/default/chrooted-environment et ajoutez le nom du fichier init.d du service à la fin de la variable INITD_SCRIPTS :

INITD_SCRIPTS="cron nullmailer apache2"

Vous pouvez maintenant contrôler le nouveau service depuis le système hôte de la prison avec les commandes suivantes :

/etc/init.d/chrooted-$CHROOT_JAIL_NAME apache2 stop
/etc/init.d/chrooted-$CHROOT_JAIL_NAME apache2 start
/etc/init.d/chrooted-$CHROOT_JAIL_NAME apache2 restart
/etc/init.d/chrooted-$CHROOT_JAIL_NAME apache2 reload

Pour en savoir plus

Attachments

init.d apache2

Posted by amin_jaf at 2007-06-25 14:05
Bonjour je trouve ce tuto trés bien les service fonctionne corectement dans ce chroot mais apache ne se lance pas au demarage de la machine je doit le lancer a la main.

avez vous une solution pour lancer mysql au demarage.


Merci pour ce tuto

http://www.jaflinux.org

Lancement d'apache

Posted by Lone Wolf at 2007-06-29 07:09
Bonjour,

Normallement apache est lancé par le script : /etc/init.d/chrooted-nomduchroot-apache. Basiquement, il faut faire un script init.d avec le contenu suivant :

Fichier : /etc/init.d/chrooted-nomduchroot-apache

#!/bin/sh
/usr/sbin/chroot /home/roots/nomduchroot /etc/init.d/apache $1

Et ensuite, utilise :

update-rc.d chrooted-nomduchroot-apache defaults

C'est un remplacement, mais ca devrait résoudre ton problème.
Normallement les scripts de ce howto font quelque chose de similaire. Dès que possible je vérifie d'ou peut venir ton soucis.

Le problème devrait être corrigé

Posted by Pierre-Yves Landuré at 2007-07-10 17:25
J'ai trouvé et corrigé un problème dans le script d'installation d'apache. Je pense que maintenant cet article devrait être fonctionnel. Merci de m'avoir signalé le bug.

Bravo

Posted by Zoph at 2008-04-14 10:02
Merci d'avoir partagé cette installation ! C'est vraiment un très bon tuto.

Encore merci.

Connexion SSH sur la cage ?

Posted by Sora at 2009-05-21 12:16
Bonjours j'aimerais savoir si c'est possible de connecter sur un utilisateur de la cage ?

car j'ai installer ssh sous la cage, créé un utilisateur, je peux m'y connecter avec "su NameUser" depuis la konsole du chroot mais pas depuis l'extérieur via ssh...

SSH en chroot

Posted by lwolf at 2009-05-21 19:40
Bonjour,

comme ca, je dirais que vous vous connectez au ssh de la machine "hote", pas celui du chroot, je vous conseille de changer le port du serveur ssh du chroot pour quelque chose qui n'est pas 22.

Bon courage.

BlogBang
Navigation
 

Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards:

Wikio