111 lines
2.9 KiB
Markdown
111 lines
2.9 KiB
Markdown
|
\newpage
|
||
|
|
||
|
Mise en place
|
||
|
=============
|
||
|
|
||
|
Noyau Linux
|
||
|
-----------
|
||
|
|
||
|
Ce TP requiert un noyau Linux, dans sa version 3.12 au minimum. Il doit de plus
|
||
|
être compilé avec les options suivantes (lorsqu'elles sont disponibles pour
|
||
|
votre version) :
|
||
|
|
||
|
<div lang="en-US">
|
||
|
```
|
||
|
General setup --->
|
||
|
[*] Control Group support --->
|
||
|
-*- Namespaces support
|
||
|
[*] UTS namespace
|
||
|
[*] IPC namespace
|
||
|
[*] User namespace
|
||
|
[*] PID Namespaces
|
||
|
[*] Network namespace
|
||
|
[*] Networking support --->
|
||
|
Networking options --->
|
||
|
<M> 802.1d Ethernet Bridging
|
||
|
Device Drivers --->
|
||
|
[*] Network device support --->
|
||
|
<M> MAC-VLAN support
|
||
|
<M> Virtual ethernet pair device
|
||
|
```
|
||
|
</div>
|
||
|
|
||
|
Les variables de configuration correspondantes sont :
|
||
|
|
||
|
<div lang="en-US">
|
||
|
```
|
||
|
CONFIG_CGROUPS=y
|
||
|
|
||
|
CONFIG_NAMESPACES=y
|
||
|
CONFIG_UTS_NS=y
|
||
|
CONFIG_IPC_NS=y
|
||
|
CONFIG_USER_NS=y
|
||
|
CONFIG_PID_NS=y
|
||
|
CONFIG_NET_NS=y
|
||
|
|
||
|
CONFIG_NET=y
|
||
|
CONFIG_BRIDGE=m
|
||
|
|
||
|
CONFIG_NETDEVICES=y
|
||
|
CONFIG_MACVLAN=m
|
||
|
CONFIG_VETH=m
|
||
|
```
|
||
|
</div>
|
||
|
|
||
|
Référez-vous, si besoin, au TP précédent pour la marche à suivre.
|
||
|
|
||
|
|
||
|
Paquets
|
||
|
-------
|
||
|
|
||
|
Nous allons utiliser des programmes issus des
|
||
|
[`util-linux`](https://www.kernel.org/pub/linux/utils/util-linux/), de
|
||
|
[`procps-ng`](https://gitlab.com/procps-ng/procps) ainsi que ceux de la
|
||
|
[`libcap`](http://www.friedhoff.org/posixfilecaps.html).
|
||
|
|
||
|
Sous Debian et ses dérivés, ses paquets sont respectivement :
|
||
|
|
||
|
* `util-linux`
|
||
|
* `procps`
|
||
|
* `libcap2-bin`
|
||
|
|
||
|
|
||
|
À propos de la sécurité de l'espace de nom `user`
|
||
|
-------------------------------------------------
|
||
|
|
||
|
La sécurité du *namespace* `user` a souvent été remise en cause et on lui
|
||
|
attribue de nombreuses vulnérabilités. Je vous laisse consulter à ce sujet :
|
||
|
|
||
|
* [Anatomy of a user namespaces vulnerability](https://lwn.net/Articles/543273/) ;
|
||
|
* <http://marc.info/?l=linux-kernel&m=135543612731939&w=2> ;
|
||
|
* <http://marc.info/?l=linux-kernel&m=135545831607095&w=2>.
|
||
|
|
||
|
De nombreux projets ont choisi de ne pas autoriser l'utilisation de cet espace
|
||
|
de noms sans disposer de certaines *capabilities*[^userns-caps].
|
||
|
|
||
|
[^userns-caps]: Sont nécessaires, conjointement, `CAP_SYS_ADMIN`, `CAP_SETUID` et `CAP_SETGID`.
|
||
|
|
||
|
De nombreuses distributions ont par exemple choisi d'utiliser un paramètre du
|
||
|
noyau pour adapter le comportement.
|
||
|
|
||
|
|
||
|
### Debian et ses dérivées {.unnumbered}
|
||
|
|
||
|
Si vous utilisez Debian ou l'un de ses dérivés, vous devrez autoriser
|
||
|
explicitement cette utilisation non-privilégiée :
|
||
|
|
||
|
```shell
|
||
|
42sh# sysctl -w kernel.unprivileged_userns_clone=1
|
||
|
```
|
||
|
|
||
|
|
||
|
### Grsecurity {.unnumbered}
|
||
|
|
||
|
D'autres patchs, tels que
|
||
|
[*grsecurity*](https://forums.grsecurity.net/viewtopic.php?f=3&t=3929#p13904) ont
|
||
|
fait le choix de désactiver cette possibilité sans laisser d'option pour la
|
||
|
réactiver éventuellement à l'exécution. Pour avoir un comportement identique à
|
||
|
celui de Debian, vous pouvez
|
||
|
[appliquer ce patch](https://virli.nemunai.re/grsec-enable-user-ns.patch), sur
|
||
|
vos sources incluant le patch de *grsecurity*.
|