\newpage Le *namespace* `user` {#user-ns} ===================== ## Introduction L'espace de noms `user` est plutôt pratique car il permet de virtualiser la liste et les droits des utilisateurs. Par exemple, on va pouvoir entrer dans un conteneur en tant que super-utilisateur à partir d'un compte d'un simple utilisateur. Il nous sera alors possible d'effectuer toutes les actions privilégiées dont nous pourrions avoir besoin à l'intérieur de cet espace de noms, sans que cela ne réduise la sécurité des composants à l'extérieur de cet espace. ## Comportement vis-à-vis des autres *namespaces* Alors qu'il est normalement nécessaire d'avoir des privilèges pour créer de nouveaux espaces de noms, en commençant par demander un *namespace* utilisateurs, on obtient les privilèges requis pour créer tous les autres types de *namespaces*. Grâce à cette technique, il est possible de lancer des conteneurs en tant que simple utilisateur ; le projet [Singularity](http://singularity.lbl.gov/) repose entièrement sur cela. ## Correspondance des utilisateurs et des groupes Comme pour les autres espaces de noms, le *namespace* `user` permet de ne garder dans le nouvel espace, que les utilisateurs et les groupes utiles au processus, en les renumérotant au passage si besoin. ### L'utilisateur -1 : *nobody* Lorsque l'on arrive dans un nouvel espace, aucun utilisateur ni groupe n'est défini. Dans cette situation, tous les identifiants d'utilisateur et de groupe, renvoyés par le noyau sont à -1 ; valeur qui correspond en toute circonstance à l'utilisateur *nobody* et au groupe *nogroup*. ### `uid_map` et `gid_map` #### `uid_map` Pour établir la correspondance, une fois que l'on a créé le nouveau *namespace*, ces deux fichiers, accessibles dans `/proc/self/`, peuvent être écrits une fois. Sur chaque ligne, on doit indiquer : - L'identifiant marquant le début de la plage d'utilisateurs, pour le processus en question. - L'identifiant marquant le début de la plage d'utilisateurs, pour le processus affichant le fichier. - La taille de la page. Par exemple, le *namespace* `user` initial défini la correspondance suivante :