Gilbert Cao
E-mail: gilbert.cao@rmrf.it
Tags : FreeBSD
Voici une feature bien pratique qui consiste à se construire un système complet dans un dossier chrooté. On peut y trouver divers intérêts à faire ceci.
Gérer :
Toute la procédure à suivre doit être adaptée selon votre environnement.
Quelques prérequis :
# mkdir -p /bigdata/chroot
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 -</code>
Compter tout de même de nombreuses minutes ou heures, selon l'espace occupée par vos partitions.
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é.
#!/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é
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é.
Source BSDMon