|
La méthode traditionnelle pour restreindre l'accès d'un processus se
fait avec l'appel système chroot()
. Cet appel
système change le répertoire racine depuis lequel tous les autres chemins
sont référencés pour un processus et ses fils. Pour que cet appel
réussisse, le processus doit avoir exécuté (recherché) la
permission dans le répertoire référencé. Le nouvel
environnement environment ne prend pas effet que lorsque vous appelez chdir()
dans celui-ci. Il doit être aussi noté qu'un
processus peut facilement s'échapper d'un environnement chroot s'il a les
privilèges du super-utilisateur. Cela devrait être accompli en créant
des fichiers spéciaux de périphérique pour la mémoire du
noyau, en attachant un dévermineur à un processus depuis l'extérieur
de sa "prison", ou par d'autres manières créatrices.
Le comportement de l'appel système chroot()
peut
être un peu contrôlé avec la commande sysctl
et la variable kern.chroot_allow_open_directories. Quand cette valeur est
règlée à 0, chroot()
échouera
avec EPERM s'il y a un répertoire d'ouvert. Si la variable est
règlée sur la valeur par défaut 1, alors chroot()
échouera avec EPERM s'il y a un répertoire
d'ouvert et que le processus est déjà sujet à un appel chroot()
. Pour toute autre valeur, la vérification des
répertoires ouverts sera totalement court-circuitée.
Le concept de Prison ("Jail") étend chroot()
en
limitant les droits du super-utilisateur pour créer un véritable `serveur
virtuel'. Une fois qu'une prison est mise en place, toute communication réseau
doit avoir lieu au travers de l'adresse IP spécifiée, et le droit du
"privilège super-utilisateur" dans cette prison est sévèrement
gêné.
Tant qu'il se trouve en prison, tout test avec les droits du super-utilisateur dans le
noyau au travers d'un appel à suser()
échouera. Toutefois, quelques appels à suser()
ont été changés par la nouvelle
interface suser_xxx()
. Cette fonction est responsable de
fournir ou de retirer les accès aux droits du super-utilisateur pour les processus
emprisonnés.
Un processus super-utilisateur dans un environnement emprisonné a le pouvoir de :
Manipuler les identitifications avec setuid
, seteuid
, setgid
, setegid
, setgroups
, setreuid
, setregid
, setlogin
Règler les limites en ressources avec setrlimit
Modifier quelques variables du noyau par sysctl (kern.hostname)
chroot()
Règler les paramètres d'un noeud virtuel (vnode): chflags
, fchflags
Règler les attributs d'un noeud virtuel comme les permissions d'un fichier, le propriétaire, le groupe, la taille, la date d'accès, et la date de modification.
Se lier à des ports privilégiés sur Internet (ports < 1024)
Jail
est un outil très utile pour exécuter
des applications dans un environnement sécurisé mais il a des
imperfections. Actuellement, les mécanismes IPC (Inter-Process Communications)
n'ont pas été convertis pour utiliser suser_xxx
aussi des applications comme MySQL ne peuvent
être exécutée dans une prison. L'accès super-utilisateur peut
avoir un sens très limité dans une prison, mais il n'y aucune façon de
spécifier exactement ce que très limité veut dire.
Posix a réalisé un document de travail qui ajoute l'audit d'évènement, les listes de contrôle d'accès, les privilèges fins, l'étiquetage d'information, et le contrôle d'accès mandaté.
Il s'agit d'un travail en cours et c'est l'objectif du projet TrustedBSD. Une partie du travail initial a été intégré dans FreeBSD-current (cap_set_proc(3)).
Précédent | Sommaire | Suivant |
Les problèmes liés à SetUID | Niveau supérieur | La confiance |
Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.
Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:12