ptrace
semble être l'outil le plus évident mais à part ça…
util-linux[-ng] a une commande unshare
, qui utilise le clone
du noyau /unshare
interfaces. Si vous exécutez le nouveau processus via unshare -n
(ou clone(CLONE_NEWNET)
), tous les sockets réseau qu'il crée se trouvent dans un espace de noms différent. Cela ne résout pas le problème des ressources du noyau, mais cela met le processus en bac à sable.
Le noyau Linux prend également en charge seccomp, un mode entré avec prctl(PR_SET_SECCOMP, 1)
qui empêche le processus (enfin, le thread, vraiment) d'appeler des appels système autres que read
, write
, exit
, et sigreturn
. C'est un bac à sable assez efficace mais difficile à utiliser avec du code non modifié.
Vous pouvez définir un domaine SELinux qui interdit socket
/bind
/etc. appels et effectuer une transition dynamique vers ce type. Cela nécessite (évidemment) un système avec une politique SELinux appliquant activement. (Peut-être que des choses similaires sont possibles avec AppArmor et TOMOYO, mais je ne connais aucun d'entre eux.)
Jetez un œil à systrace - pas limité aux sockets, mais un générateur/exécuteur de politique d'appel système générique. Citation :
Le portage GNU/Linux est terminé et le correctif du noyau est maintenu activement par Marius Eriksen. Peut être exécuté sans modification du noyau à l'aide du backend ptrace.
Avis de non-responsabilité :je ne l'ai jamais essayé sous Linux.