virli/tutorial/4/setup.md

121 lines
3.2 KiB
Markdown
Raw Normal View History

2021-10-31 19:51:17 +00:00
### Prérequis
2017-11-09 00:30:41 +00:00
2021-10-31 19:51:17 +00:00
#### Noyau Linux \
2017-11-09 00:30:41 +00:00
2021-10-31 19:51:17 +00:00
Pour pouvoir suivre les exercices ci-après, vous devez disposez d'un noyau
Linux, idéalement dans sa version 5.6 ou mieux. Il doit de plus être compilé
avec les options suivantes (lorsqu'elles sont disponibles pour votre version) :
2017-11-09 00:30:41 +00:00
<div lang="en-US">
```
General setup --->
[*] Control Group support --->
-*- Namespaces support
[*] UTS namespace
2021-10-31 19:51:17 +00:00
[*] TIME namespace
2017-11-09 00:30:41 +00:00
[*] 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
2021-10-31 19:51:17 +00:00
CONFIG_TIME_NS=y
2017-11-09 00:30:41 +00:00
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>
2021-10-31 19:51:17 +00:00
Référez-vous, si besoin, à la précédente configuration que l'on a faite pour la
marche à suivre.
2017-11-09 00:30:41 +00:00
2021-10-31 19:51:17 +00:00
#### Paquets \
2017-11-09 00:30:41 +00:00
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
2019-11-03 17:54:22 +00:00
[`libcap`](https://sites.google.com/site/fullycapable/).
2017-11-09 00:30:41 +00:00
2018-11-06 13:44:59 +00:00
Sous Debian et ses dérivés, ces paquets sont respectivement :
2017-11-09 00:30:41 +00:00
* `util-linux`
* `procps`
* `libcap2-bin`
2021-10-31 19:51:17 +00:00
Sous ArchLinux et ses dérivés, ces paquets sont respectivement :
2017-11-09 00:30:41 +00:00
2021-10-31 19:51:17 +00:00
* `util-linux`
* `procps-ng`
* `libcap`
#### À propos de la sécurité de l'espace de noms `user` \
2017-11-09 00:30:41 +00:00
2021-10-31 19:51:17 +00:00
La sécurité du *namespace* `user` a souvent été remise en cause par le passé,
on lui attribue de nombreuses vulnérabilités. Vous devriez notamment consulter
à ce sujet :
2017-11-09 00:30:41 +00:00
2019-11-03 17:54:22 +00:00
* [Security Implications of User Namespaces](https://blog.araj.me/security-implications-of-user-namespaces/) ;
2017-11-09 00:30:41 +00:00
* [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].
2021-10-31 19:51:17 +00:00
[^userns-caps]: Sont nécessaires, conjointement : `CAP_SYS_ADMIN`, `CAP_SETUID` et `CAP_SETGID`.
2017-11-09 00:30:41 +00:00
2021-10-31 19:51:17 +00:00
De nombreuses distributions ont choisi d'utiliser un paramètre du noyau pour
adapter le comportement.
2017-11-09 00:30:41 +00:00
2021-10-31 19:51:17 +00:00
::::: {.question}
##### Debian et ses dérivées {.unnumbered}
2017-11-09 00:30:41 +00:00
Si vous utilisez Debian ou l'un de ses dérivés, vous devrez autoriser
explicitement cette utilisation non-privilégiée :
<div lang="en-US">
```bash
42sh# sysctl -w kernel.unprivileged_userns_clone=1
2017-11-09 00:30:41 +00:00
```
</div>
2017-11-09 00:30:41 +00:00
2021-10-31 19:51:17 +00:00
##### Grsecurity {.unnumbered}
2017-11-09 00:30:41 +00:00
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
2021-10-31 19:51:17 +00:00
[appliquer ce patch](https://virli.nemunai.re/grsec-enable-user-ns.patch) sur
2017-11-09 00:30:41 +00:00
vos sources incluant le patch de *grsecurity*.
2021-10-31 19:51:17 +00:00
:::::