Bon tuyaux Linux / *BSD -
Samedi 12 Août 2006
<Précédent
Voici une feature bien pratique qui consiste à se construire un système complet dans un dossier chrooté.
On peut y trouver divers intérêt à faire ceci :
Gérer :
- une autre base de compte système
- une autre base de ports / packages FreeBSD
- un autre environnement de compilation de source (kernel et userland)
Toute la procédure à suivre doit être adaptée selon votre environnement.
Quelques prérequis :
- sudo, chroot, sh, su doivent être présents sur le systéme
- Se connecter en root
1) Se définir le chemin d'accès du système chrooté.
# mkdir -p /bigdata/chroot
2) Créer un système complet dans le chemin choisi :
Copie de la partition /
# cd /bigdata/chroot
# dump -0af - / | restore rf -
Copie de la partition /usr
# cd /bigdata/chroot/usr
# dump -0af - /usr | restore rf -
Copie de la partition /var
# cd /bigdata/chroot/var
# dump -0af - /var | restore rf -
Compter tout de même de nombreuses minutes ou heures, selon l'espace occupée par vos partitions.
3) Créer les nodes nécessaires à l'environnement chrooté dans /dev
Voici un petit script (chroot_devfs.sh ) bien pratique si vous utilisé devfs
#!/bin/sh
# Change this, if needed
CHROOT=/bigdata/chroot
case $1 in
start)
# umount/mount devfs on chroot filesystem
umount ${CHROOT}/dev 2> /dev/null
mount_devfs devfs ${CHROOT}/dev
# Hide all nodes, by default
devfs -m ${CHROOT}/dev rule apply hide
# Unhide some nodes
devfs -m ${CHROOT}/dev rule apply path fd unhide
devfs -m ${CHROOT}/dev rule apply path fd/0 unhide
devfs -m ${CHROOT}/dev rule apply path fd/1 unhide
devfs -m ${CHROOT}/dev rule apply path fd/2 unhide
devfs -m ${CHROOT}/dev rule apply path stdin unhide
devfs -m ${CHROOT}/dev rule apply path stdout unhide
devfs -m ${CHROOT}/dev rule apply path stderr unhide
devfs -m ${CHROOT}/dev rule apply path null unhide
devfs -m ${CHROOT}/dev rule apply path random unhide
devfs -m ${CHROOT}/dev rule apply path urandom unhide
devfs -m ${CHROOT}/dev rule apply path zero unhide
# Add other nodes, if needed ...
echo "devfs at ${CHROOT}/dev mounted"
;;
stop)
# umount devfs
umount ${CHROOT}/dev 2> /dev/null
if [ $? -eq 0 ]; then
# remove any files
rm -f ${CHROOT}/dev/*
fi
echo "devfs at ${CHROOT}/dev unmounted"
;;
*)
echo "usage : `basename $0` (start|stop)"
;;
esac
Si vous souhaitez que ce script se lance au boot, il suffit de le poser dans /usr/local/etc/rc.d
Lancer donc ce script :
# /usr/local/etc/rc.d/chroot_devfs.sh start
Voilà, les nodes nécessaires seront disponibles dans /bigdata/chroot/dev, soit /dev dans l'environnement chrooté.
4) Préparer un script de login pour les futurs comptes système à "chrooter"
#!/bin/sh
[ "$1" = "-c" ] && a="$*"
sudo /usr/sbin/chroot /bigdata/chroot /usr/bin/su - $USER $a
Poser ce script dans /usr/local/bin/chrootsh , par exemple, de votre système d'origine et render le exécutable.
Bien entendu, adapter ce script en fonction des chemins où sont localisé chroot, su et de votre futur système chrooté
5) Créer un compte système à "chrooter" au login
Nous allons créer le compte polom , par exemple
# pw useradd polom -d /home/polom -m -s /usr/local/bin/chrootsh -c "Polom Chrooté"
# passwd polom
<saisir son mot de passe>
Ajouter une entrée dans le fichier sudoers (/usr/local/etc/sudoers ) avec les lignes suivantes :
Defaults:polom !syslog
polom ALL = NOPASSWD: /usr/sbin/chroot /bigdata/chroot /usr/bin/su - polom*
Il est impératif que tout compte à chrooter doit exister dans votre système d'origine et dans le système chrooté.
Dans le principe, une personne se connecte avec le compte polom.
Son shell de login /usr/local/bin/chrootsh sera donc exécuté.
sudo sera lancé pour effectuer le chroot (car seul root peut chrooter).
Puis un su (en root) sera effectué pour se "remettre" en polom.
Le shell de login du compte polom dans l'environnement chrooté sera ensuite exécuté.
On va donc copier ce compte dans l'environnement chrooté, puis changer son shell de login.
Récupérer la dernière ligne du fichier /etc/master.passwd
pour la copier dans /bigdata/chroot/etc/master.passwd
# tail -1 /etc/master.passwd
polom:$1$VPJuwGKU$9ab6pK5y4DJVWP5vj0H3n1:1011:0::0:0:Polom Chrooted:/home/polom:/usr/local/bin/chrootsh
# tail -1 /etc/master.passwd >> /bigdata/chroot/etc/master.passwd
Ouvrir /bigdata/chroot/etc/master.passwd et modifier le shell de login du compte polom, dans le système chrooté.
Modifier son shell /usr/local/bin/chrootsh
par celui que vous voulez, par exemple /bin/sh
Enfin, mettre à jour le fichier /bigdata/chroot/etc/pwd.db
# pwd_mkdb -d /bigdata/chroot/etc /bigdata/chroot/etc/master.passwd
Ne pas oublier de créer son dossier home
# mkdir /bigdata/chroot/home/polom
# chown polom /bigdata/chroot/home/polom
# chmod 700 /bigdata/chroot/home/polom
Il ne vous reste plus qu'à vous connecter avec ce nouveau compte, et vous apercevoir que vous êtes bien dans le système chrooté. ^_^
<Précédent