Installer un chroot sur une Debian 4.0 Etch
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/rootsCré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
Lancement d'apache
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é
Bravo
Encore merci.
Connexion SSH sur 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
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.
init.d apache2
avez vous une solution pour lancer mysql au demarage.
Merci pour ce tuto
http://www.jaflinux.org