Pour commencer nous allons créer un répertoire /home/prison dans lequel nous mettrons nos chroot, vous pouvez changer prison en ce que vous voulez.
Donc:

sudo mkdir /home/prison/


Nous allons installer debootstrap qui va nous aider créer un chroot en créant presque complètement l'environnent d'un système edgy.

sudo aptitude install debootstrap


Maintenant nous allons commencer par créer un chroot que nous appellerons edgy qui sera une basé sur ubuntu Edgy et qui sera situé dans le répertoire /home/prison/edgy/.

sudo debootstrap edgy /home/prison/edgy http://archive.ubuntu.com/ubuntu


Nous allons donner une ip virtuel notre chroot

sudo ifconfig eth0:1 192.168.1.10


Nous modifions notre /etc/hosts pour ajouter un hostname notre chroot.
sudo gedit /etc/hosts


et nous ajoutons:

192.168.1.10 edgychroot


Nous testons que tout cela bien fonctionné:

ping edgychroot

Si le ping répond c'est que tout est ok.
Nous copions notre /etc/hosts dans le chroot:
sudo cp /etc/hosts /home/prison/edgy/etc/


Maintenant nous allons lui mettre le point de montage /proc dans le /home/prison/edgy/etc/fstab

sudo cat /etc/fstab|grep proc >> /home/prison/edgy/etc/fstab


Nous allons lui ajouter notre sources.list:

sudo cp /etc/apt/sources.list /home/prison/edgy/etc/apt/


Maintenant nous allons tester notre chroot:

sudo chroot /home/prison/edgy/


Vous devriez avoir quelque chose comme ça:


Pour sortir faites simplement CTRL+D, ou logout

Faite un ps, vous devriez obtenir ceci:

Il n'affiche rien car votre /proc n'est pas monté, nous le montons:
mount /proc (nous n'avons plus besoin du sudo, nous en root dans notre chroot)


Maintenant un ps devrait vous donner ceci:


Maintenant nous allons tester l'installation d'un serveur ftp dans notre chroot.

Dans le chroot:
aptitude update && aptitude install proftpd

Vous devez avoir des messages comme ceci:

perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "fr_FR:fr:en_GB:en",
LC_ALL = (unset),
LANG = "fr_FR.UTF-8"
are supported and installed on your system.

Vos locales ne sont pas configurés vous pouvez résoudre ça en tapant dans le chroot:

locale-gen fr_FR.UTF-8


Si vous avez déj un serveur ftp qui tourne coupez le.
Ajoutez dans le proftpd.conf du chroot et ajoutons la ligne suivante:
DefaultRoot ~


Nous démarrons le serveur ftp (toujours depuis le chroot):

/etc/init.d/proftpd start


Nous créons un utilisateur pour tester le tout:

adduser testftp


Maintenant nous allons tester notre serveur ftp chrooté, Raccourcis->Se connecter un serveur et nous remplissons les champs comme ceci:


Vous devriez avoir un dossier comme celui-ci sur votre bureau. En cliquant dessus gnome devrait vous demander le mot de passe (c'est celui que vous avez définit en créant l'utilisateur testftp), puis votre mot de passe pour accéder votre trousseau de clés.
Si tout ce passe bien vous obtenez ceci:

Une fois connecté nous créons un dossier dans le répertoire comme ceci:

Normalement le dossier doit être dans /home/prison/edgy/home/testftp/

Notre serveur ftp chrooté fonctionne parfaitement.

Si vous voulez accéder des partitions de votre système depuis votre chroot vous devez utiliser l'option --bind de mount.
Par exemple si vous avez une partition de sauvegarde /mnt/backup et que vous voulez l'avoir dans votre chroot dans /mnt/backup (donc /home/prison/edgy/mnt/backup)
Vous devez créer le répertoire /home/prison/edgy/mnt/backup:

sudo mkdir /home/prison/edgy/mnt/backup


Et vous montez votre partition:

mount --bind /mnt/backup /home/prison/edgy/mnt/backup


Attention toutes les modifications dans /home/prison/edgy/mnt/backup sera appliqués /mnt/backup.

Maintenant si vous voulez que votre serveur ftp soit lancer au démarrage, il faut revenir sur notre système principal:
Nous créons le fichier /etc/init.d/chroot qui contiendra toutes nos commandes de démarrage.
(vous pouvez récupérer le fichier ici Nous y mettons ceci (adaptez selon vos besoins):
#/bin/bash
# Script de démarrage du chroot
CHROOTPATH=/home/prison #Le chemin vers nos chroots

mountstart(){
#montage des partions 
mount --bind /mnt/backup/ /home/prison/edgy/mnt/backup/
}
mountstop(){
#démontage des partitions
umount /mnt/prison/edgy/mnt/backup/
}

servicesstart(){
#nous devons faire du cas par cas
chroot /home/prison/edgy/ /etc/init.d/proftpd start
#par exemple si nous avion un chroot edgywww avec un serveur apache
#chroot /home/prison/edgywww/ /etc/init.d/apache start
}

servicestop(){
#nous devons faire du cas par cas
chroot /home/prison/edgy/ /etc/init.d/proftpd stop
#par exemple si nous avion un chroot edgywww avec un serveur apache
#chroot /home/prison/edgywww/ /etc/init.d/apache stop
}

stopchroot(){
echo "Stopper les chroot"
for i in ls $CHROOTPATH;do
chroot $CHROOTPATH/$i umout /proc
echo "Demontage de /proc dans le chroot $i"
done
#Destruction de l'ip virtuel
ifconfig eth0:1 192.168.1.10 down
echo "Ip virtuel down"
}
startchroot(){
echo "Demarrage des chroot"
for i in $CHROOTPATH;do
chroot $CHROOTPATH/$i mount /proc
echo "/proc monter dans le chroot $i"
done
#Activation de l'ip virtuel
ifconfig eth0:1 192.168.1.10 up
echo "Ip virtuel up"
}

case $i in
"start")
startchroot
mountstart
servicestart
;;
"stop")
servicestop # on arrete les services avant de démonter /proc
mountstop
stopchroot
;;
"restart")
servicestop
mountstop
stopchroot
startchroot
mountstart
servicestart
;;
esac

Nous lui donnons les droits d'executions:

sudo chmod +x /etc/init.d/chroot


Nous créons les scripts de démarrages:

sudo update-rc.d -f chroot defaults 99

Maintenant pour démarrer votre script:

sudo /etc/init.d/chroot start

Pour l'arreter:

sudo /etc/init.d/chroot stop


Pour le redémarrer:

sudo /etc/init.d/chroot restart


Vous pouvez avoir accé votre chroot directement depuis un TTY.
éditer votre fichier /etc/inittab
et ajoutez une ligne comme ceci:

8:23:respawn:/usr/sbin/chroot /home/prison/edgy /sbin/getty 38400 tty8


Appliquez le changement

sudo init q


Maintenant quand vous ferez CTRL+ALT+F8 vous aurez la demande de login et password mais qui vous amènera dans votre chroot edgy, dans notre cas vous pourrez vous connecter qu'en testftp puisque c'est le seul utilisateur du chroot actuellement.

Pour conclure je dirais que les chroot étaient la mode il fut un temps pour la gestion des services, chrooter un bind8 était courant toutefois qui dit prison dit évasion et il est en effet possible de sortir d'un chroot lisez par exemple ce très bon post.

Pour l'hébergement de service nous préfèront utiliser les vservers ou encore mieux xen, toutefois le chroot reste le moyen le plus simple de compiler ou tester quelque chose sans trop de risque.