Je vous la donne à titre indicatif mais ce n'est pas elle que nous emploierons par la suite.
Tout bon chantier commence par le choix d'un grand terrain bien dégagé. La tranche où il y a le plus de place, vous le savez, c'est
/usr. C'est donc dans le dossier
/usr/ que la prison doit être édifiée. Allez-y d'un
cd /usr puis :
Code : Console | [Nom de l'ordinateur]# mkdir prison |
Vous pouvez, bien sûr, donner un autre nom à ce dossier, surtout si vous créez d'autres prisons par la suite.
La prison contiendra un petit système de fichiers (ressemblant à s'y méprendre au vrai), avec une fausse racine, qui sera en réalité le dossier
/usr/prison. Impossible pour un pirate

de remonter l'arborescence des dossiers plus haut que cette fausse racine. L'étape suivante est donc l'
installation du monde :
Code : Console | [Nom de l'ordinateur]# cd src && make installworld DESTDIR=/usr/prison |
Cette fois, vous pouvez rester en mode multi-utilisateurs sans craindre d'endommager

quoi que ce soit.
make installworld va se servir des fichiers objets générés il y a deux chapitres (par
make buildworld) pour installer un deuxième espace utilisateur, non pas à la racine, mais dans le dossier désigné par DESTDIR (
/usr/prison).
Il faut encore recopier certains fichiers de configuration. La commande suivante s'en chargera :
Code : Console | [Nom de l'ordinateur]# make distribution DESTDIR=/usr/prison |
Et pour pouvoir accéder aux périphériques depuis la prison, il faut y
monter le système de fichiers des
devices. Celui-ci s'appelle
devfs et est de type
devfs :
Code : Console | [Nom de l'ordinateur]# mount -t devfs devfs /usr/prison/dev |
Les murs de la prison sont maintenant bâtis. Elle va pouvoir ouvrir ses portes (ou plutôt les fermer, en l'occurence)

:
Code : Console | [Nom de l'ordinateur]# jail -c path=/usr/prison host.hostname=Prison1 ip4.addr=10.1.1.1 persist |
La commande
jail est un vrai couteau suisse en matière de prisons. Elle permet par exemple de créer (
-c), de modifier (
-m) ou de supprimer (
-r) une prison, et bien d'autres choses encore. Il faut indiquer le dossier qui servira de racine à la prison (
/usr/prison), donner un nom à cette dernière (
Prison1) et lui affecter une adresse IPv4 (
10.1.1.1 par exemple). L'option
persist indique que la prison doit continuer à exister même quand elle est vide. C'est une option d'autant plus indispensable que, pour l'instant, elle est justement vide,

c'est à dire qu'aucun processus ne s'y exécute.

Une prison a donc sa propre adresse IP, sa propre racine, son propre système de fichiers. D'une certaine façon, c'est finalement un autre ordinateur, différent du votre. Sauf que son contenu est accessible depuis votre ordinateur (mais pas l'inverse). Vous pouvez à présent démarrer la votre et y demander un shell. Il faut pour cela aller dans le dossier
/usr/prison/ et saisir :
Code : Console | [Nom de l'ordinateur]# jail /usr/prison Prison1 10.1.1.1 /bin/csh |
Vous voyez qu'il faut toujours désigner la prison par son dossier racine, son nom et son adresse IP. C'est un peu long. Pour aller plus vite, vous pouvez créer une variable d'environnement :
Code : Console | [Nom de l'ordinateur]# setenv P '/usr/prison Prison1 10.1.1.1' |
Comme le contenu qu'on veut affecter à
P contient des espaces, il faut l'entourer d'apostrophes.
L'ennui, c'est que la prochaine fois que vous allumerez votre ordinateur, ou même que vous ouvrirez une console, la valeur de
P aura été oubliée. Pour la conserver de façon permanente, vous savez qu'il faut l'enregistrer dans le fichier
/etc/csh.cshrc.
Code : Console | [Nom de l'ordinateur]# echo "setenv P '/usr/prison Prison1 10.1.1.1'" >> /etc/csh.cshrc |
Mettez bien deux chevrons pour ajouter une ligne à csh.cshrc. Si vous n'en mettez qu'un, vous effacerez le contenu précédent.
Maintenant, pour démarrer votre prison, il suffira de taper :
Code : Console | [Nom de l'ordinateur]# jail $P /bin/csh |
Et aussitôt, votre invite de commande devient :
Code : Console
Vous êtes toujours un
superutilisateur 
, mais vous n'êtes plus désormais que celui de la prison. Si vous demandez votre position à
pwd, il vous répondra que vous êtes à la racine. Et pourtant, vous savez bien que c'est faux : vous êtes en réalité dans le dossier
/usr/prison. Mais, à partir de maintenant, vous n'avez plus accès au reste du système.
Ah bah bravo !

J'ai fait tout ça pour avoir moins de liberté ?
Je vous avais bien dit que c'était une prison. Bon, c'est vous qui l'avez créée donc vous pouvez toujours en sortir avec
exit. Mais si quelqu'un

s'y connecte depuis l'extérieur, il n'aura accès qu'au contenu de la prison. S'il tape
exit, il se retrouvera tout simplement chez lui. C'est quand même une sécurité importante. Vous pouvez envisager d'autoriser des connexions
SSH à votre prison, ce que vous aviez refusé pour le système principal. Il faudra alors rediriger vers
lo1 les
paquets du
port 22.
De même, les applications et les processus que vous lancerez dans la prison ne risquent pas d'interagir avec ceux qui sont libres. Bien pratique, par exemple, pour éviter les conflits entre ports et paquets.
Une autre façon de démarrer une prison est de se servir du script
/etc/rc.d/jail. Mais il faut d'abord éditer le fichier
rc.conf. Je ne rentre pas dans les détails car il y a encore plus simple, comme on va le voir tout de suite.