doc/fr_FR.ISO8859-1/books/handbook/jails/chapter.xml
Gabor Kovesdan a6684b4306 - Reduce the misuse of role attribute; role="directory" should actually be
class="directory"
- Add constraint to enforce this
2013-04-04 11:40:58 +00:00

620 lines
24 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!--
The FreeBSD Documentation Project
The FreeBSD French Documentation Project
$FreeBSD$
Original revision: 1.9
-->
<chapter id="jails">
<chapterinfo>
<authorgroup>
<author>
<firstname>Matteo</firstname>
<surname>Riondato</surname>
<contrib>Contribution de </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>Environnements jail</title>
&trans.a.fonvieille;
<indexterm><primary>jails</primary></indexterm>
<sect1 id="jails-synopsis">
<title>Synopsis</title>
<para>Ce chapitre expliquera ce que sont les environnements jail
(prisons) et comment les utiliser. Les environnements jail,
souvent présentés comme une amélioration et
un remplacement des <emphasis>environnements
chrootés</emphasis> sont des outils très puissants
pour les administrateurs système, mais certaines de leurs
fonctionnalités de base peuvent être
également utiles aux utilisateurs avancés.</para>
<para>Après avoir lu ce chapitre, vous
connaîtrez:</para>
<itemizedlist>
<listitem>
<para>Ce qu'est un environnement jail, et quelle
utilité il peut avoir sur une installation &os;.</para>
</listitem>
<listitem>
<para>Comment construire, démarrer et arrêter un
environnement jail.</para>
</listitem>
<listitem>
<para>Les bases de l'administration d'un environnement jail,
de l'intérieur et de l'extérieur de
l'environnement.</para>
</listitem>
</itemizedlist>
<para>D'autres sources d'information utiles concernant les
environnements jail sont:</para>
<itemizedlist>
<listitem>
<para>La page de manuel &man.jail.8;. C'est la
référence pour l'emploi de l'utilitaire
<command>jail</command> &mdash; l'outil d'administration qui
peut être utilisé sous &os; pour démarrer,
arrêter, et contrôler les environnements jail
&os;.</para>
</listitem>
<listitem>
<para>Les listes de diffusion et leurs archives. Les archives
de la &a.questions; et d'autres listes hébergées
par le &a.mailman.lists; contiennent déj&agrave;
quantité d'information sur les environnements jail. Il
sera toujours conseillé de chercher dans les archives
ou de poster une nouvelle question sur la liste de diffusion
&a.questions.name;.</para>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="jails-terms">
<title>Termes relatifs aux environnements jail</title>
<para>Pour faciliter la compréhension des parties du
système &os; relatives aux jails, leurs mécanismes
internes et la manière dont ils interagissent avec le
reste de &os;, les termes suivants seront utilisés tout
au long de ce chapitre:</para>
<variablelist>
<varlistentry>
<term>&man.chroot.2; (commande)</term>
<listitem>
<para>Un appel système &os;, qui modifie le
répertoire racine d'un processus et de tout ses
descendants.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&man.chroot.2; (environnement)</term>
<listitem>
<para>Environnement des processus pour lesquels
l'emplacement de la racine du système de fichier a
été modifiée
(<quote>chrootée</quote>). Cela comprend les
ressources comme la partie du système de fichiers qui
est visible, les identifiants utilisateur et groupe qui sont
disponibles, les interfaces réseaux et autres
mécanismes IPC, etc.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>&man.jail.8; (commande)</term>
<listitem>
<para>L'utilitaire système d'administration qui
permet le lancement de processus &agrave; l'intérieur
d'un environnement jail.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>hôte (système, processus, utilisateur,
etc.)</term>
<listitem>
<para>Le système de contrôle d'un environnement
jail. Le système hôte a accès &agrave;
toutes les ressources matérielles disponibles, et
peut contrôler des processus &agrave;
l'extérieur et &agrave; l'intérieur d'un
environnement jail. Une des différences importantes
entre le système hôte et l'environnement jail
est que les limitations qui s'appliquent aux processus du
super-utilisateur &agrave; l'intérieur de
l'environnement jail ne s'appliquent pas aux processus du
système hôte.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>hébergé (système, processus,
utilisateur, etc.)</term>
<listitem>
<para>Un processus, un utilisateur ou toute autre
entité, dont l'accès aux ressources est
limité par un environnement jail &os;.</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="jails-intro">
<title>Introduction</title>
<para>Comme l'administration système est une tâche
difficile et déroutante, de nombreux outils ont
été développés pour rendre la vie de
l'administrateur plus simple. Ces outils apportent pour la
plupart des améliorations dans la manière dont
sont installés, configurés et maintenus les
systèmes. Une partie des tâches dévolues
&agrave; l'administrateur est la sécurisation du
système, de façon &agrave; ce que le
système puisse se consacrer aux tâches qui lui sont
confiées sans toutefois mettre en péril sa propre
sécurité.</para>
<para>Un de ces outils pouvant être employé pour
augmenter la sécurisation d'un système &os; sont
les environnements <emphasis>jail</emphasis>. Les
environnements jail ont été introduits sous
&os;&nbsp;4.X par &a.phk;, mais ils ont été
fortement améliorés sous &os;&nbsp;5.X pour en
faire des sous-systèmes flexibles et puissants. Des
développements sont toujours en cours pour
l'amélioration de leur utilité, performances,
fiabilité et sécurité.</para>
<sect2 id="jails-what">
<title>Qu'est-ce qu'un environnement jail?</title>
<para>Les systèmes BSD disposent de l'environnement
&man.chroot.2; depuis l'époque de 4.2BSD. L'utilitaire
&man.chroot.8; peut être employé pour changer le
répertoire racine d'un ensemble de processus,
créant ainsi un environnement sécurisé et
séparé du reste du système. Les
processus créés dans l'environnement
chrooté ne peuvent accéder aux fichiers et aux
ressources extérieures &agrave; cet environnement.
Pour cette raison, si un attaquant compromet un service
tournant dans un environnement chrooté, cela ne devrait
pas lui permettre de compromettre l'intégralité
du système. L'utilitaire &man.chroot.8; est parfait
pour des tâches simples qui ne demandent pas trop de
flexibilité ou de fonctionnalités
avancées et complexes. Depuis l'apparition du concept
d'environnement chrooté, de nombreuses manières
de s'échapper de ces environnements ont
été découvertes, et bien que cela ait
été corrigé dans les versions
récentes du noyau &os;, il est clair que
l'environnement &man.chroot.2; n'est pas la solution
idéale pour la sécurisation des services. Un
nouveau sous-système devait être
implémenté.</para>
<para>Ceci est une des raisons principales &agrave; l'origine du
développement de l'environnement
<emphasis>jail</emphasis>.</para>
<para>Les environnements jail améliorent de plusieurs
manières le concept d'environnement &man.chroot.2;.
Dans un environnement &man.chroot.2; traditionnel, les
processus sont ne sont limités que dans la partie du
système de fichiers &agrave; laquelle ils ont
accès. Le reste des ressources système (comme
l'ensemble des utilisateurs système, les processus en
cours d'exécution, ou le réseau) est
partagé par les processus de l'environnement
chrooté et les processus du système hôte.
L'environnement jail étend ce modèle en
virtualisant non seulement l'accès au système de
fichiers mais également l'ensemble des utilisateurs, la
partie réseau du noyau &os; et quelques autres
éléments du système. Un ensemble plus
complet de contrôles fins pour optimiser l'accès
&agrave; un environnement jail est décrit dans la <xref
linkend="jails-tuning"/>.</para>
<para>Un environnement jail est caractérisé par
quatre éléments:</para>
<itemizedlist>
<listitem>
<para>Une arborescence de répertoires &mdash; le
point d'accès &agrave; l'environnement jail. Une
fois &agrave; l'intérieur de l'environnement jail, un
processus ne peut s'échapper hors de cette
arborescence. Les traditionnels problèmes de
sécurité qui grèvent l'architecture
&man.chroot.2; d'origine n'affecteront pas les
environnements jail &os;.</para>
</listitem>
<listitem>
<para>Un nom de machine &mdash; le nom de machine qui sera
utilisé &agrave; l'intérieur de
l'environnement jail. Les environnements jails sont
principalement utilisés pour l'hébergement de
services réseaux, par conséquent choisir un
nom évocateur pour chaque environnement peut
être d'une grande aide pour l'administrateur
système.</para>
</listitem>
<listitem>
<para>Une adresse <acronym>IP</acronym> &mdash; elle sera
assignée &agrave; l'environnement jail et ne peut, en
aucun cas, être modifiée pendant toute la
durée de vie de l'environnement. L'adresse IP d'un
environnement jail est en général un alias
d'une interface réseau existante, mais cela n'est pas
forcément nécessaire.</para>
</listitem>
<listitem>
<para>Une commande &mdash; le chemin d'accès d'un
exécutable &agrave; exécuter &agrave;
l'intérieur de l'environnement jail. Il est relatif
au répertoire racine de l'environnement jail, et peut
beaucoup varier, en fonction du type d'environnement jail
mis en oeuvre.</para>
</listitem>
</itemizedlist>
<para>En dehors de cela les environnements jail peuvent avoir
leur propre ensemble d'utilisateurs et leur propre utilisateur
<username>root</username>. Naturellement les pouvoirs de
l'utilisateur <username>root</username> sont limités
&agrave; l'environnement jail et, du point de vue du
système hôte, l'utilisateur
<username>root</username> de l'environnement jail n'est pas un
utilisateur omnipotent. De plus, l'utilisateur
<username>root</username> d'un environnement jail n'est pas
autorisé &agrave; effectuer des opérations
critiques au niveau du système en dehors de son
environnement &man.jail.8;. Plus d'information au sujet des
possibilités et des restrictions de l'utilisateur
<username>root</username> sera donnée dans la <xref
linkend="jails-tuning"/> ci-après.</para>
</sect2>
</sect1>
<sect1 id="jails-build">
<title>Création et contrôle de l'environnement
jail</title>
<para>Certains administrateurs divisent les environnements jail en
deux catégories: les environnements jails
<quote>complets</quote>, qui ressemblent &agrave; un
véritable système &os;, et les environnements
jails de <quote>service</quote>, qui sont dédiés
&agrave; une application ou un seul service, et tournant
éventuellement avec des privilèges. Cette
séparation est juste conceptuelle et n'affecte pas la
création de l'environnement jail. La page de manuel
&man.jail.8; est très claire quant &agrave; la
procédure de création d'un environnement
jail:</para>
<screen>&prompt.root; <userinput>setenv D <replaceable>/here/is/the/jail</replaceable></userinput>
&prompt.root; <userinput>mkdir -p $D</userinput> <co id="jailpath"/>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make world DESTDIR=$D</userinput> <co id="jailworld"/>
&prompt.root; <userinput>cd etc/</userinput> <footnote><para>Cette
étape n'est pas requise sous &os; 6.0 et versions ultérieures.</para></footnote>
&prompt.root; <userinput>make distribution DESTDIR=$D</userinput> <co id="jaildistrib"/>
&prompt.root; <userinput>mount_devfs devfs $D/dev</userinput> <co id="jaildevfs"/></screen>
<calloutlist>
<callout arearefs="jailpath">
<para>Sélectionner un emplacement pour l'environnement
est le meilleur point de départ. C'est l'endroit
où l'environnement jail se trouvera dans le
système de fichiers de la machine hôte. Un bon
choix peut être <filename
class="directory">/usr/jail/<replaceable>jailname</replaceable></filename>,
<replaceable>jailname</replaceable> est le nom de
machine identifiant l'environnement jail. Le système
de fichiers <filename class="directory">/usr/</filename>
dispose généralement de suffisamment d'espace
pour le système de fichiers de l'environnement jail,
qui est pour les environnements <quote>complets</quote>,
essentiellement, une copie de chaque fichier présent
dans une installation par défaut du système de
base de &os;.</para>
</callout>
<callout arearefs="jailworld">
<para>Cette commande peuplera l'arborescence du
répertoire choisi comme emplacement pour
l'environnement jail avec les binaires, les
bibliothèques, les pages de manuel, etc.
nécessaires. Tout sera fait selon le style &os;
habituel &mdash; en premier lieu tout est compilé, puis
ensuite installé &agrave; l'emplacement voulu.</para>
</callout>
<callout arearefs="jaildistrib">
<para>La cible <maketarget>distribution</maketarget> pour
<application>make</application> installe tous les fichiers de
configuration nécessaires. Ou pour faire simple, cette
commande installe tous les fichiers installables du
répertoire <filename
class="directory">/usr/src/etc/</filename> vers le
répertoire <filename class="directory">/etc</filename>
de l'environnement jail: <filename
class="directory">$D/etc/</filename>.</para>
</callout>
<callout arearefs="jaildevfs">
<para>Le montage du système de fichiers &man.devfs.8;
&agrave; l'intérieur d'un environnement jail n'est pas
requis. Cependant, toutes, ou presque toutes les applications
nécessitent l'accès &agrave; au moins un
périphérique, en fonction du rôle de
l'application. Il est vraiment important de contrôler
l'accès aux périphériques depuis
l'intérieur d'un environnement jail, comme un mauvais
paramétrage pourrait permettre &agrave; quelqu'un de
malintentionné de faire de <quote>mauvaises</quote>
choses dans l'environnemane jail. Le contrôle sur
&man.devfs.8; est géré par
l'intermédiaire d'un ensemble de règles qui est
décrit dans les pages de manuel &man.devfs.8; et
&man.devfs.conf.5;.</para>
</callout>
</calloutlist>
<para>Une fois l'environnement jail installé, il peut
être lancé en employant l'utilitaire &man.jail.8;.
Cet outil requiert obligatoirement quatre arguments qui sont
décrits dans la <xref linkend="jails-what"/>. D'autres
arguments peuvent également être utilisés,
pour par exemple exécuter le processus avec les droits
d'un utilisateur particulier. L'argument
<option><replaceable>command</replaceable></option>
dépend du type d'environnement; pour un
<emphasis>système virtuel</emphasis>,
<filename>/etc/rc</filename> est un bon choix puisque la
séquence de démarrage d'un véritable
système &os; sera dupliquée. Pour un
environnement jail de type <emphasis>service</emphasis>, cela
dépendra du service ou de l'application qui sera
exécuté dans l'environnement jail.</para>
<para>Les environnements jails sont souvent lancés au
démarrage de la machine et le système
<filename>rc</filename> de &os; propose une méthode
simple pour cela.</para>
<procedure>
<step>
<para>Une liste des environnements jail autorisés
&agrave; être lancés au démarrage du
système devrait être ajoutée au fichier
&man.rc.conf.5;:</para>
<programlisting>jail_enable="YES" # Utiliser NO pour désactiver le lancement des environnements jail
jail_list="<replaceable>www</replaceable>" # Liste des noms des environnements jail séparés par une espace</programlisting>
</step>
<step>
<para>Pour chaque environnement listé dans
<varname>jail_list</varname>, un ensemble de
paramètres &man.rc.conf.5;, qui décrivent
l'environnement jail, devrait être
ajouté:</para>
<programlisting>jail_<replaceable>www</replaceable>_rootdir="/usr/jail/www" # le répertoire racine de l'environnement jail
jail_<replaceable>www</replaceable>_hostname="<replaceable>www</replaceable>.example.org" # le nom de machine de l'environnement jail
jail_<replaceable>www</replaceable>_ip="192.168.0.10" # son adresse IP
jail_<replaceable>www</replaceable>_devfs_enable="YES" # monter devfs dans l'environnement jail
jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</replaceable>" # les règles devfs &agrave; appliquer &agrave; l'environnement jail</programlisting>
<para>Le démarrage par défaut des environnements
jails, configuré dans &man.rc.conf.5;,
exécutera la procédure
<filename>/etc/rc</filename> de l'environnement jail, ce qui
suppose que l'environnement est un système virtuel
complet. Pour les environnements jail de service, la
commande de démarrage par défaut de
l'environnement devrait être modifiée en
configurant correctement l'option
<varname>jail_<replaceable>jailname</replaceable>_exec_start</varname>.</para>
<note>
<para>Pour une liste complète des options
disponibles, veuillez consulter la page de manuel
&man.rc.conf.5;.</para>
</note>
</step>
</procedure>
<para>La procedure <filename>/etc/rc.d/jail</filename> peut
être utilisée pour démarrer ou arrêter
un environnement jail &agrave; la main si une entrée pour
l'environnement existe dans le fichier
<filename>rc.conf</filename>:</para>
<screen>&prompt.root; <userinput>/etc/rc.d/jail start <replaceable>www</replaceable></userinput>
&prompt.root; <userinput>/etc/rc.d/jail stop <replaceable>www</replaceable></userinput></screen>
<para>Il n'existe pas pour le moment de méthode propre pour
arrêter un environnement &man.jail.8;. C'est dû au
fait que les commandes normalement employées pour
arrêter proprement un système ne peuvent être
utilisées &agrave; l'intérieur d'un environnement
jail. La meilleur façon d'arrêter un environnement
jail est de lancer la commande suivante &agrave;
l'intérieur de l'environnement ou en utilisant le
programme &man.jexec.8; depuis l'extérieur de
l'environnement:</para>
<screen>&prompt.root; <userinput>sh /etc/rc.shutdown</userinput></screen>
<para>Plus d'information &agrave; ce sujet peut être
trouvé dans la page de manuel de &man.jail.8;.</para>
</sect1>
<sect1 id="jails-tuning">
<title>Optimisation et administration</title>
<para>Il existe plusieurs options qui peuvent être
configurées pour n'importe quel environnement jail, et de
nombreuses manières de combiner un système &os;
hôte avec des environnements jail pour donner naissance
&agrave; des applications haut-niveau. Cette section
présente:</para>
<itemizedlist>
<listitem>
<para>Certaines des options disponibles pour l'optimisation du
fonctionnement et des restrictions de sécurité
implémentées par une installation jail.</para>
</listitem>
<listitem>
<para>Des applications de haut niveau pour la gestion des
environnements jail, qui sont disponibles dans le catalogue
des logiciels portés, et peuvent être
utilisées pour implémenter des environnements
jail complets.</para>
</listitem>
</itemizedlist>
<sect2 id="jails-tuning-utilities">
<title>Outils systèmes pour l'optimisation d'un
environnement jail sous &os;</title>
<para>L'optimisation de la configuration d'un environnement jail
se fait principalement par le paramétrage de variables
&man.sysctl.8;. Une sous-catégorie spécifique
de &man.sysctl.8; existe pour toutes les options pertinentes:
la hiérarchie <varname>security.jail.*</varname>
d'options du noyau &os;. Ci-dessous est donnée une
liste des principales variables relatives aux environnements
jail avec leur valeur par défaut. Leurs noms sont
explicites, mais pour plus d'information, veuillez vous
référer aux pages de manuel &man.jail.8; et
&man.sysctl.8;.</para>
<itemizedlist>
<listitem>
<para><varname>security.jail.set_hostname_allowed:
1</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.socket_unixiproute_only:
1</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.sysvipc_allowed:
0</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.enforce_statfs:
2</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.allow_raw_sockets:
0</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.chflags_allowed:
0</varname></para>
</listitem>
<listitem>
<para><varname>security.jail.jailed: 0</varname></para>
</listitem>
</itemizedlist>
<para>Ces variables peuvent être utilisées par
l'administrateur du <emphasis>système
hôte</emphasis> pour ajouter ou retirer certaines
limitations imposées par défaut &agrave;
l'utilisateur <username>root</username>. Notez que certaines
limitations ne peuvent être retirées.
L'utilisateur <username>root</username> n'est pas
autorisé &agrave; monter ou démonter des
systèmes de fichiers &agrave; partir d'un environnement
&man.jail.8;. L'utilisateur <username>root</username> d'un
environnement jail ne peut charger ou modifier des
règles &man.devfs.8;, paramétrer des
règles de pare-feu, ou effectuer des tâches
d'administration qui nécessitent la modification de
données du noyau, comme le paramétrage du niveau
de sécurité <varname>securelevel</varname> du
noyau.</para>
<para>Le système de base de &os; contient un ensemble
d'outils basiques pour afficher les informations au sujet des
environnements jail actifs, pour s'attacher &agrave; un
environnement jail pour lancer des commandes d'administration.
Les commandes &man.jls.8; et &man.jexec.8; font partie du
système de base de &os; et peuvent être
utilisées pour effectuer les tâches simples
suivantes:</para>
<itemizedlist>
<listitem>
<para>Afficher une liste des environnements jail actifs et
leur identifiant (<acronym>JID</acronym>), leur adresse
<acronym>IP</acronym>, leur nom de machine et leur
emplacement.</para>
</listitem>
<listitem>
<para>S'attacher &agrave; un environnement jail actif,
&agrave; partir de son système hôte, et
exécuter une commande &agrave; l'intérieur de
l'environnement ou effectuer des tâches
d'administration &agrave; l'intérieur de
environnement lui-même. C'est tout
particulièrement utile quand l'utilisateur
<username>root</username> veut arrêter proprement un
environnement. L'utilitaire &man.jexec.8; peut
également être employé pour lancer un
interpréteur de commandes dans un environnement jail
pour faire de l'administration; par exemple:</para>
<screen>&prompt.root; <userinput>jexec <replaceable>1</replaceable> tcsh</userinput></screen>
</listitem>
</itemizedlist>
</sect2>
<sect2 id="jails-tuning-admintools">
<title>Outils d'administration haut niveau du catalogue des
logiciels portés de &os;</title>
<para>Parmi les nombreux utilitaires tierce-partie pour
l'administration des environnements jail, un des plus complet
et utile est <filename
role="package">sysutils/jailutils</filename>. C'est un
ensemble de petites applications qui aident &agrave; la
gestion des environnements &man.jail.8;. Veuillez consulter
sa page Web pour plus d'information.</para>
</sect2>
</sect1>
</chapter>