{{tag>système sécurité BROUILLON}}
----
====== schroot ======
**schroot** permet de gérer plus efficacement un environnement [[wpfr>chroot]]. L'usage de ces deux outils (schroot et chroot) permet de créer un [[virtualisation|environnement virtualisé]] minimal. Puisque le système d'exploitation de l'environnement chroot partage le même noyau que le système « hôte », les ressources système (mémoire vive, processeur) sont moins sollicitées, mis à part l'utilisation du disque dur.
En terme de sécurité, schroot est moins robuste que les solutions de [[virtualisation]] régulières.
===== Pré-requis =====
* Disposer des [[:sudo|droits d'administration]].
* Disposer d'une connexion à Internet configurée et activée.
===== Installation =====
Il suffit d'[[:tutoriel:comment_installer_un_paquet|installer les paquets]] **[[apt://schroot,debootstrap|schroot debootstrap]]**.
===== L'arborescence =====
Voici un petit descriptif de l'arborescence de **/etc/schroot** :
* **chroot.d** : On peut placer des fichiers de configuration supplémentaires dans ce répertoire qui seront lus de la même manière que schroot.conf
* **copyfiles-defaults** : Les fichiers à copier à partir du système hôte dans l'environnement chroot
* **mount-defaults** : Les systèmes de fichiers à monter à l'intérieur du chroot.
* **nssdatabases-defaults** : Système de base de données NSS à copier dans le chroot.
* **schroot.conf** : Définit chaque chroot à mettre en place
* **script-defaults** : Script à exécuter par défaut lors du démarrage de l'environnement chroot
* **setup.d** : Dossier qui possède des scripts de configuration
===== Mise en place d'un environnement chroot =====
* Création du répertoire :mkdir chroot
N'importe quel répertoire peut faire l'affaire. L'exemple est donné avec le dossier **/chroot**, à changer à loisir.
* Installation d'une distribution (Ubuntu). Pour cela, on récupérera l'ensemble des paquets. Pour du 64 bits :sudo debootstrap --arch amd64 quantal /chroot/quantal http://us.archive.ubuntu.com/ubuntu/
Ou bien, pour installer l'environnement en 32 bits :sudo debootstrap --arch i386 quantal /chroot/quantal http://us.archive.ubuntu.com/ubuntu/
Après cela, le dossier **/chroot/quantal/** contient l'arborescence habituelle de la racine de la distribution Ubuntu Quantal Lynx 10.04.
* Pour conserver les logins utilisateurs, mots de passe, groupes etc du système hôte, ajouter ces lignes au fichier /etc/schroot/default/copyfiles :
/etc/passwd
/etc/shadow
/etc/group
/etc/sudoers
/etc/hosts
/etc/hostname
Pour conserver les dépôts de paquets (NE PAS FAIRE lorsque les distributions sont différentes...), ajouter cette ligne:
/etc/apt/sources.list
* [[:tutoriel:comment_modifier_un_fichier|Configuration du fichier]] **/etc/schroot/schroot.conf**
[quantal]
description=quantal
directory=/chroot/quantal
users=user1,user2,...
root-groups=root
root-users=root
type=directory
aliases=default
Et remplacer "user1", "user2" par les utilisateurs ayant le droit d'utiliser le chroot. La ligne peut être remplacée par "groups=schroot" par exemple, en ajoutant les utilisateurs au groupe "schroot".
===== Utilisation courante =====
* Pour se connecter dans un environnement chroot et avoir la main en ligne de commande :schroot
ou bien, si plusieurs environnements chroot sont installés :schroot -c lucid
Pour quitter l'environnement, utiliser les touches **Ctrl+d** ou bien la commande **exit**.
* Démarrer un environnement chroot :schroot -b -c lucid
Lors du démarrage du chroot, schroot nous donne l'identifiant du chroot, par exemple **lucid-00e8c158-e183-48ad-8407-272808c6b0c6**
* S'identifier dans l'environnement schroot :schroot -r -c lucid-00e8c158-e183-48ad-8407-272808c6b0c6
* Stopper le chroot :schroot -e -c lucid-00e8c158-e183-48ad-8407-272808c6b0c6
===== Exemple d'utilisation avancée =====
Nous allons installer un serveur [[LAMP|LAMP]] dans un environnement chroot. Le système exploitation hôte sera une distribution ubuntu. Par contre le système invité sera une distribution Debian.
==== Configuration de schroot ====
* Installation d'une distribution Debian. Pour cela, on récupérera l'ensemble des paquets :
debootstrap --arch amd64 squeeze /chroot/squeeze http://ftp.fr.debian.org/debian/
* [[:tutoriel:comment_modifier_un_fichier|Configuration du fichier]] **/etc/schroot/schroot.conf**, on ajoute notre nouvelle distribution debian.
[squeeze]
description=squeeze
directory=/chroot/squeeze
root-groups=root
root-users=root
type=directory
script-config=script-squeeze
* On crée le fichier script-squeeze qui a la même structure et qui se trouve dans répertoire que script-defaults
touch /etc/schroot/script-squeeze
* Puis, on édite le fichier **/etc/schroot/script-squeeze**
# Default settings for chroot setup and exec scripts.
# See schroot-script-config(5) for further details.
# Filesystems to mount inside the chroot.
FSTAB="/etc/schroot/mount-squeeze"
* On copie le fichier /etc/schroot/mount-defaults
cp /etc/schroot/mount-defaults /etc/schroot/mount-squeeze
* On commente les lignes dont le montage ne doit pas s'effectuer
# mount.defaults: static file system information for chroots.
# Note that the mount point will be prefixed by the chroot path
# (CHROOT_PATH)
#
#
proc /proc proc defaults 0 0
#procbususb /proc/bus/usb usbfs defaults 0 0
/dev /dev none rw,bind 0 0
/dev/pts /dev/pts none rw,bind 0 0
/dev/shm /dev/shm none rw,bind 0 0
#/home /home none rw,bind 0 0
#/tmp /tmp none rw,bind 0 0
==== Installation du serveur LAMP ====
=== Installation ===
sudo -s
schroot -b -c lenny
schroot -r -c lenny-00e8c158-e183-48ad-8407-272808c6b0c6
apt-get install apache2 mysql-server php5
=== Démarrage automatique du serveur lamp ===
Pour démarrer de façon automatique la chroot et tout les services que vous désirez, je vous propose ce script :
#!/bin/bash
#******************************************************************************
# File : /etc/init.d/schrootlamp
#
# Auteur : Zarkxe
#
# Date create : Mon Nov 1 16:01:09 2010
# Description : démarrer de façon automatique la chroot et tout les services
# que vous désiré
#******************************************************************************
. /lib/lsb/init-functions
NAMESCRIPT="schrootlamp"
do_start() {
if [ ! -e "/tmp/schroot/$NAMESCRIPT" ]; then
SCHROOT_ID=$(schroot -b -c lenny)
schroot -r -c "$SCHROOT_ID" /etc/init.d/mtab.sh
schroot -r -c "$SCHROOT_ID" /etc/init.d/mysql start
schroot -r -c "$SCHROOT_ID" /etc/init.d/apache2 start
schroot -r -c "$SCHROOT_ID" /etc/init.d/exim4 start
mkdir /tmp/schroot/
echo "$SCHROOT_ID" > /tmp/schroot/$NAMESCRIPT
elif [ -e "/tmp/schroot/$NAMESCRIPT" ]; then
echo "$NAMESCRIPT is already running"
fi
}
do_stop() {
if [ -e "/tmp/schroot/$NAMESCRIPT" ]; then
SCHROOT_ID=$(cat /tmp/schroot/$NAMESCRIPT)
schroot -r -c "$SCHROOT_ID" /etc/init.d/mysql stop
schroot -r -c "$SCHROOT_ID" /etc/init.d/apache2 stop
schroot -r -c "$SCHROOT_ID" /etc/init.d/exim4 stop
schroot -e -c "$SCHROOT_ID"
rm -R /tmp/schroot/
elif [ ! -e "/tmp/schroot/$NAMESCRIPT" ]; then
echo "$NAMESCRIPT is not starting"
fi
}
case $1 in
start)
log_daemon_msg "Starting configuration" $NAMESCRIPT
if [[ $EUID = 0 ]]
then
do_start
log_end_msg 0
else
log_end_msg 1
echo "You are not root !"
fi
;;
stop)
log_daemon_msg "Stopping configuration" $NAMESCRIPT
if [[ $EUID = 0 ]]
then
do_stop
log_end_msg 0
else
log_end_msg 1
echo "You are not root !"
fi
;;
restart)
log_daemon_msg "restarting configuration" $NAMESCRIPT
if [[ $EUID = 0 ]]
then
do_stop
do_start
log_end_msg 0
else
log_end_msg 1
echo "You are not root !"
fi
;;
status)
if [[ $EUID = 0 ]]
then
if [ ! -e "/tmp/schroot/$NAMESCRIPT" ]; then
echo "$NAMESCRIPT isn't running"
elif [ -e "/tmp/schroot/$NAMESCRIPT" ]; then
SCHROOT_ID=$(cat /tmp/schroot/$NAMESCRIPT)
echo "$NAMESCRIPT is running : $SCHROOT_ID"
fi
else
echo "You are not root !"
fi
;;
*)
log_daemon_msg "./$NAMESCRIPT [start|stop|restart|status]"
;;
esac
===== Voir aussi =====
* [[chroot|chroot]]
* **(fr)** [[https://ftp.traduc.org/doc-vf/gazette-linux/html/2008/150/lg150-C.html|Virtualiser sans virtualiser]], article sur l'usage de chroot et schroot
* **(fr)** [[http://cepcasa.info/apt/debootstrap.html|Installer Debian depuis une distribution Debian avec debootstrap]]
* **(en)** [[http://www.debian-administration.org/articles/566|schroot - chroot for any users]]
----
//Contributeur principal : ...//