Jails avec FreeBSD 10.1 (1/x)


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 :

1
$ sudo cp /usr/local/etc/ezjail.conf.sample /usr/local/etc/ezjail.conf

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).

1
$ sudo zfs create -o mountpoint=/usr/ezjails zroot/ezjails

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).

1
2
3
4
$ sudo service ezjail onestart
$ sudo ezjail-admin install
$ sudo ezjail-admin create test 'lo0|10.0.0.2'
$ sudo ezjail-admin onestart test

  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 :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ sudo ezjail-admin console test
FreeBSD 10.1-RELEASE-p19 (GENERIC) #0: Sat Aug 22 03:55:09 UTC 2015

Welcome to FreeBSD!

Release Notes, Errata: https://www.FreeBSD.org/releases/
Security Advisories:   https://www.FreeBSD.org/security/
FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
FreeBSD FAQ:           https://www.FreeBSD.org/faq/
Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
FreeBSD Forums:        https://forums.FreeBSD.org/

Documents installed with the system are in the /usr/local/share/doc/freebsd/
directory, or can be installed later with:  pkg install en-freebsd-doc
For other languages, replace "en" with a language code like de or fr.

Show the version of FreeBSD installed:  freebsd-version ; uname -a
Please include that output and any error messages when posting questions.
Introduction to manual pages:  man man
FreeBSD directory layout:      man hier

Edit /etc/motd to change this login announcement.
root@test:~ #

Pour arrêter et supprimer cette première jail il suffit de faire :

1
2
$ sudo ezjail-admin onestop test
$ sudo ezjail-admin delete test

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.

powered by FreeBSD