3.0 KiB
Palier 5 : Une vraie isolation (3 points)
En plus du chroot
, assignez de nouveaux namespaces au processus que vous
allez lancer : cgroups
, IPC
, mount
, net
, PID
, UTS
, user
.
Il est requis que le nouveau processus ne puisse pas s'échapper de ses namespaces !
Astuce : unshare(2)
.
Palier 6 : Empêcher les fuites d'information (2 points)
Démontez tous les systèmes de fichiers qui ne sont pas nécessaires au fonctionnement de votre conteneur et remontez les partitions
N'oubliez pas de remonter les systèmes de fichiers pour lesquels cette opération est nécessaire afin de terminer l'étape d'isolation.
Astuce : mount(2)
.
Palier 7 : Identification du conteneur (1 point)
Maintenant que vous avez votre conteneur, personalisez-le un peu en lui donnant un nom unique.
Astuce : sethostname(2)
Palier 8 : pivot_root
(4 points)
Effectuez un pivot_root(2)
de telle sorte qu'il ne reste plus de trace du
système de fichiers hôte.
Astuce : pivot_root(2)
, umount(2)
.
Palier 9 : Bac à sable connecté (4 points)
Partant d'une liste d'interfaces sur la machine hôte similaire à :
Vous devrez pouvoir ping
er votre conteneur depuis votre hôte :
Dans l'exemple ci-dessus, l'interface dans le conteneur a l'IP 10.10.10.42
,
tandis que la machine hôte a l'IP 10.10.10.41
.
Astuces : vous pouvez utiliser la libnetlink(3)
ou même faire des appels aux
programmes ip(8)
, brctl(8)
, ...
Palier 10 (bonus) : seccomp (2 points)
Filtrez les appels systèmes de telle sorte qu'aucun programme exécuté dans votre bac à sable ne puisse plus lancer les appels systèmes suivants :
nfsservctl(2)
;personality(2)
;pivot_root(2)
.
Astuce : seccomp(2)
.