noyau: prise en charge des espaces de noms

15

Je me demande ce que signifie exactement la fonction «Prise en charge des espaces de noms» dans le noyau Linux. J'utilise le noyau 3.11.1 (le plus récent noyau stable en ce moment).

Si je décide de le désactiver, est-ce que je remarquerai des changements sur mon système?

Et au cas où quelqu'un déciderait d'utiliser des espaces de noms, est-ce suffisant de simplement compiler NAMESPACES=Ydans le noyau, ou a-t-il également besoin d'outils d'espace utilisateur?

Martin Vegter
la source
5
Les espaces de noms sont assez bien expliqués ici: lwn.net/Articles/531114 (pas une réponse, car je ne réponds pas vraiment à vos questions - je vous pointe vers une pile de texte)
derobert

Réponses:

21

En un mot, les espaces de noms fournissent un moyen de construire un système Linux virtuel à l'intérieur d'un système Linux plus grand. Cela diffère de l'exécution d'une machine virtuelle qui s'exécute en tant que processus non privilégié: la machine virtuelle apparaît comme un processus unique dans l'hôte, tandis que les processus s'exécutant dans un espace de noms s'exécutent toujours sur le système hôte.

Un système virtuel fonctionnant à l'intérieur d'un système plus grand est appelé conteneur . L'idée d'un conteneur est que les processus qui s'exécutent à l'intérieur du conteneur pensent qu'ils sont les seuls processus du système. En particulier, l'utilisateur root à l'intérieur du conteneur n'a pas de privilèges root à l'extérieur du conteneur (notez que cela n'est vrai que dans les versions assez récentes du noyau).

Les espaces de noms virtualisent une fonctionnalité à la fois. Voici quelques exemples de types d'espaces de noms:

  • Espaces de noms d'utilisateurs - cela permet aux processus de se comporter comme s'ils s'exécutaient en tant qu'utilisateurs différents à l'intérieur et à l'extérieur de l'espace de noms. En particulier, les processus s'exécutant en tant qu'UID 0 à l'intérieur de l'espace de noms ont des privilèges de superutilisateur uniquement par rapport aux processus s'exécutant dans le même espace de noms.
    Depuis le noyau Linux 3.8, les utilisateurs non privilégiés peuvent créer des espaces de noms d'utilisateurs. Cela permet à un utilisateur ordinaire d'utiliser des fonctionnalités réservées à root (telles que la modification des tables de routage ou la définition de capacités).
  • Espaces de noms PID - les processus à l'intérieur d'un espace de noms PID ne peuvent pas tuer ou tracer les processus à l'extérieur de cet espace de noms.
  • Monter des espaces de noms - cela permet aux processus d'avoir leur propre vue du système de fichiers. Cette vue peut être une vue partielle, permettant de masquer certaines parties du système de fichiers et de les recomposer afin que les arborescences de répertoires apparaissent à différents endroits. Les espaces de noms de montage généralisent le chroot traditionnel des fonctionnalités Unix , qui permet de restreindre les processus à un sous-arbre particulier.
  • Espaces de noms réseau - permettent la séparation des ressources réseau (périphériques réseau) et améliorent ainsi l'isolation des processus.

Les espaces de noms s'appuient sur le noyau pour assurer l'isolement entre les espaces de noms. C'est assez compliqué à faire correctement, il peut donc y avoir encore des bugs de sécurité. Le risque de bogues de sécurité serait la principale raison de ne pas activer la fonctionnalité. Une autre raison de ne pas l'activer serait lorsque vous créez un petit noyau pour un périphérique intégré. Dans un noyau à usage général que vous installez sur un serveur ou une station de travail typique, les espaces de noms doivent être activés, comme toute autre fonctionnalité de noyau mature.

Il existe encore peu d'applications qui utilisent des espaces de noms. Voici quelques-uns:

Voir la série d'articles LWN par Michael Kerrisk pour plus d'informations.

Gilles 'SO- arrête d'être méchant'
la source
6

L'espace de noms du noyau Linux est un concept utilisé pour isoler un groupe de processus des autres en ce qui concerne l'accès à une ressource système. Par exemple, deux espaces de noms PID différents peuvent contenir des processus avec des PID identiques mais une image de processus complètement différente. Ils sont souvent utilisés dans la virtualisation au niveau du système d'exploitation, dans laquelle un seul noyau exécute simultanément différents systèmes d'exploitation - tous doivent être basés sur Linux (car ils partagent le noyau, évidemment), mais peuvent avoir des distributions et des versions différentes. Voir par exemple LXC .

Vous remarquerez peut-être de le désactiver par exemple sur les systèmes basés sur systemd, car systemd est capable d'utiliser des espaces de noms pour sa fonction de conteneur . Par conséquent, cela dépend beaucoup de la distribution que vous utilisez et de ce que vous avez l'intention de faire avec le système.

Comme avec presque toutes les fonctionnalités du noyau, vous avez certainement besoin d'une sorte de programmes d'espace utilisateur - même si vous avez parlé au noyau via des fichiers spéciaux (je ne suis pas sûr que vous le puissiez), il est généralement bien préférable de s'appuyer sur des outils spécialisés, car ils offre une API conviviale.

peterph
la source
1

Pour donner un exemple d'utilisation de l'espace de noms, dans les systèmes compatibles SELinux (MLS ou Strict). L'espace de noms est généralement utilisé pour créer des répertoires individuels /tmpet / ou /homepour chaque utilisateur. Ces répertoires ne sont visibles que par: l'utilisateur, les utilisateurs avec la même étiquette, le noyau et les utilisateurs avec un accès privilégié. Le /tmprépertoire namespace-ed est étiqueté par SELinux-MLS pour correspondre à l'étiquette SELinux-MLS de l'utilisateur. Dans ce scénario, le /tmprépertoire que l'utilisateur voit peut vraiment être monté ailleurs que /tmp( /var/user-tmp). L'utilisateur ne voit cependant /tmpqu'avec les fichiers créés en raison de son activité. l'utilisateur ne verra jamais aucun fichier /tmpqui est le produit d'autres utilisateurs.

guestUserX
la source