Userns done
This commit is contained in:
parent
3207724bba
commit
330199cf24
@ -5,11 +5,101 @@ Le *namespace* `user`
|
|||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
## mapping inside/outside users/groups
|
Le *namespace* `user` est plutôt pratiquxe car il permet de virtualiser la
|
||||||
|
liste et les droits des utilisateurs.
|
||||||
|
|
||||||
## l'utilisateur -1 : nobody
|
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.
|
||||||
|
|
||||||
## blabla sur le comportement vis-à-vis des autres namespaces
|
|
||||||
|
## 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 si besoin au passage.
|
||||||
|
|
||||||
|
|
||||||
|
### 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 est -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
|
||||||
|
écrit 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 le correspondance suivante :
|
||||||
|
|
||||||
|
```
|
||||||
|
0 0 4294967295
|
||||||
|
```
|
||||||
|
|
||||||
|
Cela signifie que les utilisateurs dont l'identifiant court de 0 à -2 inclu,
|
||||||
|
dans cet espace de noms, correspond aux utilisateurs allant de 0 à -1 inclu,
|
||||||
|
pour le processus affichant ce fichier.
|
||||||
|
|
||||||
|
Lorsque l'on crée un *namespace* `user`, généralement, la correspondance vaut :
|
||||||
|
|
||||||
|
```
|
||||||
|
0 1000 1
|
||||||
|
```
|
||||||
|
|
||||||
|
Dans cette situation, on comprend que notre processus considère que
|
||||||
|
l'utilisateur root, dans le conteneur équivaut à l'utilisateur 1000 hors de
|
||||||
|
l'espace de noms.
|
||||||
|
|
||||||
|
|
||||||
|
#### `gid_map`
|
||||||
|
|
||||||
|
Le principe est identique pour ce fichier, mais agit sur les correspondances
|
||||||
|
des groupes au lieu des utilisateurs.
|
||||||
|
|
||||||
|
|
||||||
|
## Utilisation de l'espace de noms
|
||||||
|
|
||||||
|
```shell
|
||||||
|
42sh$ unshare --mount --pid --mount-proc --fork --net --user --map-root-user /bin/bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Un `capsh --print` nous montre que l'on est bien root et que l'on possède
|
||||||
|
toutes les capabilities. Cependant, cela ne signifie pas que l'on a tous les
|
||||||
|
droits sur le système ; il y a plusieurs niveau de validation qui entrent en
|
||||||
|
jeu. L'idée étant que l'on a été désigné root dans son conteneur, on devrait
|
||||||
|
pouvoir y faire ce que l'on veut, tant que l'on agit pas en dehors.
|
||||||
|
|
||||||
|
|
||||||
## Aller plus loin
|
## Aller plus loin
|
||||||
|
|
||||||
|
N'hésitez pas à jeter un œil à la page de manuel consacré à ce *namespace* :
|
||||||
|
`user_namespaces(7)`.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user