Bon tuyaux Linux / *BSD  -   Samedi 12 Août 2006

<Précédent

Chrooter un système complet
Catégorie : FreeBSD
par hika hika AT bsdmon DOT com Homepage : http://www.bsdmon.com

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
FreeBSD Mall Smarty Template Engine Page générée le Jeudi 14 Novembre 2019 15:29:07 Powered by FreeBSD
POWERED BY FreeBSD, Apache, PHP, PostgreSQL, Code & design by Hika
BSD Daemon Copyright 1988 by Marshall Kirk McKusick. All Rights Reserved.