26 lines
979 B
Markdown
26 lines
979 B
Markdown
\
|
||
|
||
D'une manière similaire à notre dernier exemple, depuis Linux 5.8, `setns(2)`
|
||
peut utiliser comme premier argument, un *file descriptor* pointant un
|
||
processus (`pidfd`).
|
||
|
||
Eh oui, outre l'obtention d'un *file descriptor* sur un lien symbolique étrange
|
||
d'une structure du noyau, il est possible d'en obtenir un sur un processus :
|
||
|
||
- soit en réalisant un `open(2)` d'un dossier `/proc/<PID>` ;
|
||
- soit en utilisant l'appel système `pidfd_open(2)`, en précisant l'identifiant
|
||
du processus dont on souhaite obtenir le *file descriptor* ;
|
||
- soit en retour d'un `clone(2)` avec l'option `CLONE_PIDFD`.
|
||
|
||
<div lang="en-US">
|
||
```bash
|
||
int fd = pidfd_open(42, 0);
|
||
setns(fd, CLONE_NEWUSER | CLONE_NEWNET | CLONE_NEWUTS);
|
||
```
|
||
</div>
|
||
|
||
À travers cet exemple, on cherche à récupérer un *file descriptor* pour le
|
||
processus 42. On le passe ensuite à `setns(2)` en précisant que l'on ne
|
||
souhaite rejoindre que les espaces de noms Utilisateurs, Réseau et UTS (nom de
|
||
la machine).
|