Ou l’on va voir comment mettre en place des « jails » FreeBSD avec FreeBSD 10.1 et ezjail.
Un grand merci à mon camarade Ollivier Robert pour sa patience, ses explications et sa relecture de ce tutoriel.
Voici une série d’article sur la mise en place des jails de FreeBSD (FreeBSD 10.2 plus exactement).
j’apprend en même temps que j’écris. Il est possible que certaines parties soient à refaire ultériement.
Une définition
Avant d’aller plus loin il est bon de définir se que sont les jails.
Les jails de FreeBSD 10 sont les héritières des environnements « chroot » de FreeBSD4. Le but est de faire tourner dans un environnement confiné un ou plusieurs services. Les services (et les utilisateurs) emprisonnés dans leur environnement ne peuvent pas accéder aux autres processus ou partie de la machine. Ce ne sont pas des machines virtuelles.
Dans une jail on peut faire tourner une autre version de FreeBSD que celle de l’hôte. Ainsi un service qui n’est conçu que pour FreeBSD 9 pourra bénéficier d’une jail avec cet version du système, même si l’hôte utilise une autre version (FreeBSD 10 dans notre cas).
le vocabulaire
- machine hote → la machine physique sur laquelle nous allons faire tourner un système principal et des systèmes dans des jails ;
- template (modèle) → modèle de jail à partir duquel les autres font être créées. Il est possible d’avoir plusieurs modèles. Par exemple, vous pouvez avoir un modèle basé sur FreeBSD 10.1 et un autre basé sur FreeBSD 9.
Les prérequis
- Il est plus que conseillé d’utiliser ZFS. Ce système de fichier facilite la vie de l’administrateur et permet, là encore, d’isoler le système de fichier de chacune des jails sur un dataset spécifique. Toutefois ZFS n’est pas obligatoire. Je vais m’entraîner à faire des jails en utilisant l’installationde FreeBSD que j’ai fait sur ma RaspberryPI (voyez cet article)
- Il faut également avoir une bonne expérience d’Unix en général et de FreeBSD en particulier
- Pour nous faciliter les choses, nous allons utiliser ezjail, deux scripts qui facilitent l’administration des jails
- Trouver des caisses de patience.
Installation de ezjail
L’installation de ezjail peut se faire en utilisant pkg, les sources dans /usr/ports/sysutils/ezjail ou bien une poudrière si vous en avez installé une.
Les chemins de ezjail
- /usr/jails → le dossier de stockage par défaut des gabarits des jails ;
- /usr/jails/flavours → la personnalisation des jails se fait par l’intermédiaire de flavours ;
- /usr/jails/basejails → ce répertoire de base est exporté et monté par chacune des jails pour économiser de la place sur les disques ;
- /usr/local/etc/rc.d/ezjail.sh → script de démarrage, d’arrêt de ezjail ;
- /usr/local/etc/ezjail.conf → le fichier de configuration de ezjail. Il controle certains paramètres utilisés par le script de démarrage ;
- /usr/local/etc/ezjail/ → les fichiers de configuration de chacune des jails.
Fichiers de configuration
La configuration de ezjail se fait à deux niveaux. Le premier niveau, général, est valable pour toutes les jails que nous allons créer. Le fichier de configuration est /usr/local/etc/ezjail.conf. Il est obtenu en copiant le fichier d’exemple :
|
|
Le deuxième est un fichier spécifique à chaque jail précise certains paramètres propre à la l’instance et se trouve dans le répertoire /usr/local/etc/ezjail. Il porte le nom de la jail.
Le fichier ezjail.conf
Certaines options sont faciles à comprendre :
- ezjail_use_zfs=“YES” → Nous utilisons ZFS pour les jails ;
- ezjail_use_zfs_for_jails=“YES”→ pour forcer les nouvelles jails à utiliser ZFS ;
- ezjail_jailzfs=“zroot/ezjail”→ le dataset ZFS qui sera utiliser pour les jails.
Pensez à créer le dataset nécessaire et à faire en sorte qu’il soit monté à l’emplacement défini par dans la varaible ezjail_jaildir (définie au début du fichier /usr/local/etc/ezjail.conf).
|
|
Une première jail, pour tester
Nous allons construire notre première jail, juste pour voir comment ça marche et à quelle point cette partie est facile (nous aurons tout le loisir de nous arracher les cheveux un peu plus tard).
|
|
tant que nous n’aurons pas mis dans le fichier /etc/rc.conf la ligne ezjail_enable=“YES” nous devrons passer par onestart et onestop.
Une fois votre jail préparée et démarrée, vous allez pouvoir vous y connecter :
|
|
Pour arrêter et supprimer cette première jail il suffit de faire :
|
|
Ne subsite alors que le dataset ZFS /usr/jails/test.
Conclusion
Nous venons de créer notre première jail. Il nous reste bien du chemin à parcourir pour séparer les différents services que nous voulons offrir à nos utilisateurs dans autant de jails que nécessaire. Nous devrions en être capables à la fin de cette série d’articles.