Aller au menu - Aller au contenu

Icône Vous allez aimer les prisons

Avatar
Mise à jour : 31/12/2011
Difficulté : Facile Facile Creative Commons BY-NC-SA
7 018 visites depuis 7 jours, dont 104 sur ce chapitre classé 32/786
Si je vous dis "prison", a priori, ça ne donne pas envie. Mais les prisons de FreeBSD sont un outil formidable aux multiples applications. Nous allons commencer par l'exemple d'une prison spécialisée : la portjail.


Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

A - Un OS compartimenté

FreeBSD est un OS très "compartimenté", et c'est là l'une des clés de sa stabilité. Voyez plutôt. Dans la version "classique" de FreeBSD, celle où aucune interface graphique n'est pré-installée, on distingue 3 compartiments :

Image utilisateur

Les documents des utilisateurs sont isolés dans le dossier /usr/home/. Si vous n'êtes pas l'administrateur du système, vous ne pouvez écrire que dans ce compartiment-là.

L'administrateur du système est le seul à pouvoir installer des applications supplémentaires. Il n'utilise pas pour cela des paquets PBI (spécifiques à PC-BSD) mais des paquets TBZ. Cela ne change pas grand-chose mais comprenez simplement que ce n'est pas le même format de paquet. Il peut aussi se servir des ports, nous verrons ça. L'important, pour l'instant, c'est que toutes ces applications ne sont pas mélangées, en vrac, avec le système de base de FreeBSD. Elles sont rangées dans le dossier /usr/local/. Elles ne risquent donc pas d'endommager ce système de base ou d'entrer en conflit avec lui en voulant installer tel ou tel fichier dans un dossier ou existe déjà un fichier du même nom.

Note pour les habitués de Linux : Remarquez que cette séparation entre système de base et applications supplémentaires permet à FreeBSD de faire évoluer quotidiennement ses dépôts de logiciels tiers, indépendamment du système de base. Il n'y a pas un dépôt différent pour chaque nouvelle édition de FreeBSD : il n'y a que 3 dépôts, communs à toutes les éditions : celui des paquets TBZ, celui des paquets PBI et celui des ports.


Voyons maintenant la version PC-BSD. PC-BSD, c'est un FreeBSD pré-configuré, sur lequel un certain nombre d'applications sont déjà installées. Il y a donc un étage supplémentaire, au dessus du système de base de FreeBSD, que j'appellerai le "système de base de PC-BSD".On y trouve par exemple l'environnement graphique X.org, le gestionnaire de fenêtres Fluxbox, l'AppCafé, la Bouée de sauvetage, et plein d'autres programmes. On y trouve aussi les applications que vous avez cochées pendant l'installation de PC-BSD : KDE, par exemple.

Image utilisateur

Les éléments de ce "système de base de PC-BSD" sont installés sous forme de paquets TBZ et donc tout logiquement rangés dans le dossier /usr/local/. Eux non plus ne risquent donc pas de comprommettre le "vrai" système de base (celui de FreeBSD).

Mais si l'administrateur veut ensuite ajouter des logiciels supplémentaires dans le même dossier /usr/local/, le principe de compartimentation n'est plus respecté. Techniquement, il peut le faire : les outils classiques de FreeBSD sont toujours là. Mais ce n'est pas malin : d'abord parce qu'un administrateur inexpérimenté court ainsi le risque de provoquer un conflit entre les applications qu'il installe et le "système de base de PC-BSD". Et aussi parce qu'à la prochaine mise à jour de PC-BSD, tous les logiciels installés de cette manière seront supprimés.

Pour installer des applications sous PC-BSD, on utilise donc plutôt les paquets PBI, et on les range dans un autre dossier : /usr/pbi/. Cette opération n'est d'ailleurs pas réservée à l'administrateur : tous les utilisateurs membres du groupe operator peuvent ouvrir l'AppCafé et installer, supprimer ou mettre à jours des applications PBI. Bien entendu, c'est l'administrateur qui décide qui il inscrit dans le groupe operator. Par défaut, le premier utilisateur créé pendant l'installation y est inscrit d'office.

Le problème, c'est que, pour l'instant, il y a encore beaucoup moins d'applications disponibles en PBI qu'en paquet TBZ, et je ne parle même pas des ports.

Ça veut dire qu'on est condamnés à n'utiliser qu'une petite partie des logiciels FreeBSD existants ?

Heureusement, non ! :)

Vous avez peut-être remarqué la mention "SYSTEME PRINCIPAL" sur les schémas ci-dessus. En effet, on peut créer des systèmes secondaires. Autant qu'on veut. Une prison, c'est un peu (un peu seulement) comme un deuxième ordinateur : elle peut avoir des utilisateurs différents de ceux du système principal, un administrateur différent, des programmes installés différents, une configuration différente, un système de fichiers différents, etc. Et les programmes qui s'exécutent dans la prison ne peuvent pas interférer avec ceux du système principal, à moins de se connecter à lui comme le ferait un autre ordinateur.

Pour plus de théorie approfondie sur les prisons, il faudra attendre le chapitre La prison, dans la Partie 5 du tutoriel. Mais nous allons tout de suite voir un cas pratique.

Image utilisateur


B - La prison des ports

Voici donc notre portjail, à côté du système principal. Quand vous demandez la création d'une prison, le système de base de FreeBSD y est automatiquement installé. L'administrateur de la prison peut ensuite y installer toutes les applications qu'il veut, en se servant des ports ou des paquets TBZ. Plus le nombre d'applications disponibles dans l'AppCafé augmentera et plus l'utilité de la portjail, ou "prison des ports" diminuera. Son utilisation est effectivement plus complexe. Pour l'instant, vous pouvez encore en avoir besoin.


Mais si l'administrateur les installe dans /usr/local/, ça ne va pas se mélanger avec le système de base ?

Non, car ce n'est pas le même /usr/local/. Il y a un dossier de ce nom sur le système principal et un autre dans la prison.

Mais comment deux dossiers différents peuvent-ils avoir le même chemin d'accès ? o_O

Vous comprendrez mieux en essayant. Nous allons tout de suite créer une portjail. Ouvrez une console (pardon, une Konsole). Nous avons maintenant besoin du code-source de FreeBSD. Si vous avez suivi mes instructions, vous l'avez demandé pendant l'installation de PC-BSD et il se trouve maintenant dans /usr/src/. Allez donc dans ce dossier avec la commande cd et vérifiez qu'il contient bien quelque chose avec ls.

Code : Console
[brice@Acer] ~> cd /usr/src
[brice@Acer] /usr/src> ls
COPYRIGHT         UPDATING          include           share
LOCKS             bin               kerberos5         sys
MAINTAINERS       cddl              lib               tools
Makefile          contrib           libexec           usr.bin
Makefile.inc1     crypto            release           usr.sbin
Makefile.mips     etc               rescue
ObsoleteFiles.inc games             sbin
README            gnu               secure


Si ls ne vous renvoie rien, c'est que vous avez oublié d'installer le code-source. Il faut lire plus attentivement. :colere2: Mais ne vous inquiétez pas, vous pouvez vous rattraper en utilisant le Panneau de contrôle de PC-BSD. Ouvrez-y l'outil Gestionnaire système puis l'onglet Tâches. Allez-y même si vous avez les sources, pour bien repérer les lieux.

Image utilisateur

Regardez un peu ce gros bouton Télécharger les Sources du Système qui n'attend que votre clic. Si vous n'avez pas encore les sources, allez-y : faites-vous plaisir. ;) Ensuite, laissez cette fenêtre ouverte et mettez-la de côté pour une prochaine étape.

Maintenant que nous avons les sources, nous pouvons créer la prison. Mais seul l'administrateur, le root, le superutilisateur :zorro: , a le droit de le faire. Or, vous, vous n'êtes qu'un simple utilisateur ordinaire.

Comment ça, ordinaire ? C'est mon ordinateur, quand même ! Et c'est moi qui ai installé le système. Si ce n'est pas moi l'administrateur, c'est qui ?


C'est effectivement vous. Mais encore faut-il vous connecter en tant que root, ce qui n'est pas le cas pour l'instant. Vous allez utiliser la commande su (comme substitute user) pour vous substituer à l'administrateur. Ensuite, vous tapez le mot de passe de root. Il ne s'affiche pas quand vous le saisissez. C'est qu'il ne faudrait pas que quelqu'un le lise par dessus votre épaule :pirate: . Votre invite de commande va se transformer :

Code : Console
[brice@Acer] /usr/src> su
Password:
[brice@Acer] /usr/src#


COMMANDE UNIX ----- su (substitute user)

Vous donne les droits d'un autre utilisateur jusqu'à ce que vous tapiez exit. Vous devez connaître son mot de passe.

  • su : vous donne les droits de root, le superutilisateur.
  • su -l tartempion : vous donne les droits de l'utilisateur tartempion (vous perdez temporairement vos droits à vous).

_____________________________________________________________________

Enfin, on peut créer cette prison :

Code : Console
[brice@Acer] /usr/src# portjail init


La création de la portjail est assez longue. Le code-source de FreeBSD va être compilé, pour reconstituer tout un système de base à l'intérieur de la prison. Faites autre chose pendant ce temps là. Quand c'est prêt, démarrez-la avec portjail start. C'est un peu comme si vous allumiez un deuxième ordinateur.

Maintenant que la prison des ports fonctionne, nous voulons y installer des applications, soit par les ports, soit par les paquets TBZ. Dans un cas comme dans l'autre, on commence par récupérer la liste des ports. Reprenez donc la fenêtre du Gestionnaire système, celle que vous aviez mise de côté. En haut, dans la partie Console des ports, il y a un bouton Récupérer les Ports (voir image ci-dessus). Cliquez dessus.

Le bouton Récupérer l'arborescence des Ports sert à installer des paquets TBZ ou des ports sur le système principal. Je vous ai déjà expliqué pourquoi je déconseillais vivement cette méthode sous PC-BSD.


Mais quand est-ce qu'on la voit, cette prison ?

Vous avez raison, il est temps d'y entrer. Vous pouvez cliquer sur Ports Jail dans le Panneau de Contrôle ou aller dans le menu de KDE : Applications -> Système -> Ports Jail.

Image utilisateur


La console des ports est blanche, ce qui permet de la distinguer facilement de celle du système principal. Autre différence, l'invite de commande se termine par le symbole %. Nous voici donc dans la place. La prison des ports est prête, allumée, nous y sommes, et la liste des ports aussi.

On va la voir ?

C'est parti. Tapez cd dans la blanche console des ports et rendez-vous dans le dossier /usr/ports/ pour un petit ls :


Tous ces dossiers sont autant de catégories dans lesquelles sont rangés tous les ports disponibles. Bien sûr, il n'est pas très confortable de les parcourir dans la console pour chercher l'application que vous souhaitez installer. Si vous connaissez son nom précis, vous pouvez essayer la commande whereis pour trouver dans quelle catégorie il est. Ou consulter le site FreshPorts, comme je vous l'ai montré au chapitre précédent. Imaginons, par exemple, que vous vouliez installer Freemat, un logiciel de mathématiques similaire à Matlab et compatible avec lui. Voici sa fiche sur Freshports :

Image utilisateur

Regardons un peu quelles informations cette fiche nous fournit :
  • La version actuelle de Freemat (4.0_2).
  • L'e-mail du responsable du port (glarkin@FreeBSD.org). C'est la première personne à contacter pour râler :colere: demander de l'aide si vous rencontrez des problèmes.
  • La description de l'application.
  • Son site officiel.
  • La liste des dépendances, c'est à dire des bibliothèques ou programmes qui doivent être présents sur votre système pour que vous puissiez installer ou exécuter freemat. Quand vous demandez l'installation d'un programme, toutes ses dépendances sont également installées.

Une bibliothèque est une collection de petits bouts de programmes : des pièces détachées très pratiques et réutilisées par de nombreux logiciels.

  • La commande à employer pour installer freemat par le système des ports : cd /usr/ports/math/freemat/ && make install clean
  • La commande pour installer le paquet TBZ : pkg_add -r FreeMat. Je vous déconseille ces paquets sous PC-BSD : ils sont parfois obsolètes et peuvent alors provoquer des conflits.
  • La liste des options de compilation disponibles : des choix que vous pouvez faire pour personnaliser certains logiciels (là, il n'y en a pas).
  • La liste des serveurs HTTP ou FTP que votre ordinateur va contacter automatiquement pendant l'installation.
  • L'historique des mises à jour et événements survenus depuis 10 ans concernant ce port.


La commande qui va nous permettre d'installer Freemat est donc : cd /usr/ports/math/freemat/ && make install clean. Il s'agit en fait de deux commandes distinctes, séparées par un &&.


COMMANDE UNIX ----- && (and)

Permet d'écrire deux commandes sur la même ligne. Elles seront exécutées l'une après l'autre.

_____________________________________________________________________


Parmi ces deux commandes, vous connaissez déjà cd. Elle vous conduit tout simplement dans le port de Freemat : le dossier abritant son fichier Makefile.

Eh bien ! Ne restez pas plantez là : allez-y et regardez ce qu'il y a dans ce dossier.

Code : Console
[brice@Acer] /% cd /usr/ports/math/freemat && ls
Makefile  distinfo  files     pkg-descr pkg-plist
[brice@Acer] /usr/ports/math/freemat/%


Dans chaque port, on trouve toujours à peu près les mêmes fichiers. pkg-descr, par exemple, est une description rapide du logiciel concerné. La même que sous Freshports. Vous pouvez le lire avec la commande cat.


COMMANDE UNIX ----- cat (concatenate)

Affiche le contenu d'un fichier texte

  • cat fichier : affiche le contenu de ce fichier.
  • cat -n fichier : affiche le contenu de ce fichier, en numérotant les lignes.
  • cat fichier1 > fichier2 : recopie le contenu du fichier1 dans le fichier2. Si fichier2 n'existait pas, il est créé. S'il existait, son ancien contenu est perdu.
  • cat fichier1 >> fichier2 : recopie le contenu du fichier1 dans le fichier2, à la suite de l'ancien contenu du fichier2.

_____________________________________________________________________


Le gros défaut de cat, c'est qu'il affiche la totalité du fichier d'un coup. S'il est court, comme pkg-descr, ça va. Mais essayez avec Makefile : vous allez voir... Ou plutôt non, vous n'allez voir que la fin du fichier. Et s'il est vraiment long, même en remontant, vous ne trouverez pas le début.

Non. Pour lire Makefile, il vous faut la commande more. Ou la commande less, qui est pratiquement équivalente. Un dicton unixien dit d'ailleurs : "less is more, more or less" (traduction : less est identique à more, enfin plus ou moins).


COMMANDE UNIX ----- less (less)

Affiche le début d'un fichier. On peut ensuite faire défiler ce fichier avec Entrée pour le lire jusqu'au bout. À tout moment, on peut revenir à la ligne de commande en appuyant sur q. Beaucoup d'autres commandes (dont les flèches directionnelles) permettent de naviguer dans le fichier.

  • less fichier : affiche le début du contenu de ce fichier.
  • less --help : affiche la liste des commandes utilisables quand vous êtes en mode less.

_____________________________________________________________________


Mais c'est quoi ce fichier Makefile ? Je ne comprends rien à son contenu.


Ce fichier est destiné à être lu par la deuxième commande : make install clean. Quand vous tapez make install clean, le programme make exécute l'ensemble des instructions du fichier Makefile :
  • Il regarde si le programme que vous voulez installer à des dépendances.
  • Si oui, il regarde si ces dépendances sont déjà installées sur votre système.
  • Si non, il les installe.
  • Il télécharge le code-source de votre application.
  • Il s'assure que le téléchargement a bien réussi, en se servant du fichier distinfo.
  • Il compile ce code-source et génère des fichiers objets temporaires, dans un sous dossier work.
  • À partir de ces fichiers objets, il construit les fichiers exécutables de votre application (freemat).
  • Il installe tous les fichiers de l'application dans les sous-dossiers de /usr/local/.
  • Le clean : il efface les fichiers temporaires, qui ne sont plus nécessaires une fois la compilation terminée.

Alors, ça vous dit ? On installe FreeMat ? OK. On se met d'abord en mode root avec su et on tape :

Code : Console
# make install clean BATCH=yes


make install clean, je veux bien. Mais BATCH=yes, c'est quoi ?


Certaines applications sont personnalisables pendant la compilation. Celle-ci s'interrompt soudain et on vous pose une question pour savoir si vous voulez activer telle ou telle fonctionnalité. Ce n'est pas le cas de FreeMat. C'est le cas de quelques-unes des dépendances de FreeMat. Mais nous, on veut juste installer FreeMat et on ne veut pas avoir à surveiller la compilation en attendant les moments où on devra répondre à ces questions. On indique donc BATCH=yes pour dire : avec toutes les options par défaut.

Le programme make est maintenant lancé. Il va mettre un bon moment pour compiler FreeMat (environ 1h). Vous pouvez lire la suite de ce chapitre, et même le suivant, pendant ce temps là. À la fin, vous pourrez lancer FreeMat depuis la console des ports :

Image utilisateur

C - The Warden

Vous pouvez créer autant de prison que vous voulez. Et pas seulement pour les ports !

Par exemple, vous avez codé une application vous-mêmes et vous ne voulez pas qu'elle risque de faire des dégâts. >_< Exécutez-la dans une prison ! Ainsi, elle ne pourra pas intérférer avec les processus du système principal.

PC-BSD dispose d'un utilitaire spécifique pour gérer les prisons. Il s'appelle The Warden, et vous le trouverez dans l'AppCafé, rubrique System Utilities, tout en bas. Une fois installé, vous pouvez le lancer depuis le Panneau de contrôle. Nous allons commencer par créer une prison en choisissant New Jail dans le menu File. Et nous installerons un serveur web à l'intérieur.

Image utilisateur

Votre prison va avoir sa propre adresse IP. Comme ça, si quelqu'un s'y connecte depuis l'extérieur, il n'aura accès qu'au contenu de la prison. Vous pouvez choisir n'importe quelle adresse du moment qu'elle n'est pas déjà utilisée sur votre réseau local. Par contre, notez-la bien : vous n'avez pas fini de vous en servir.

Donnez un nom à la prison et cochez Include ports tree si vous voulez installer les ports à l'intérieur. Nous n'avons pas besoin des deux autres options donc cliquez sur Create. Le root dont vous parle l'écran suivant n'est pas le vrai administrateur de votre ordinateur mais celui de la prison. Donnez-lui un mot de passe et créez aussi un utilisateur ordinaire dans la prison (un prisonnier, :&#39;( donc). Quand c'est fait, actionnez le bouton Save.

Image utilisateur


Votre prison est créée dans le dossier /usr/local/warden/jails/192.1.1.1 (non, vous ne pouvez pas choisir). The Warden procède à l'installation du monde. Il suit ensuite vos instructions pour l'utilisateur et les mots de passe. Pour démarrer la prison, faites un clic droit dessus dans la fenêtre The Warden et choisissez Start this jail.

Tout comme la portjail, cette prison est l'équivalent d'un nouvel ordinateur, dans lequel vous pouvez installer ce que vous voulez. Un serveur web, par exemple. Ou votre dernier programme que vous n'avez pas encore testé. Ou des paquets TBZ, avec la commande pkg_add. Ou une application dont FreshPorts vous dit qu'elle présente un risque de sécurité : dans la prison, cette fragilité n'aura aucune conséquence sur le reste du système.
Il y a un autre chapitre sur les prisons dans la Partie 5 de ce tutoriel. Mais vous avez de quoi vous amuser, dans un environnement sécurisé. Dans ce chapitre, vous avez également découvert le système des ports, qui est une composante essentielle de FreeBSD. Lui aussi, nous l'approfondirons bientôt.
Chapitre précédent Sommaire Chapitre suivant

Partager

Il n'y a pas encore de commentaire pour ce tuto.