ptrace
scheint das naheliegendste Werkzeug zu sein, aber abgesehen davon…
util-linux[-ng] hat einen Befehl unshare
, das den clone
des Kernels verwendet /unshare
Schnittstellen. Wenn Sie den neuen Prozess bis unshare -n
ausführen (oder clone(CLONE_NEWNET)
), befinden sich alle erstellten Netzwerk-Sockets in einem anderen Namespace. Das löst das Problem mit den Kernel-Ressourcen nicht, aber es führt eine Sandbox des Prozesses durch.
Der Linux-Kernel unterstützt auch seccomp, einen Modus, der mit prctl(PR_SET_SECCOMP, 1)
eingegeben wird was verhindert, dass der Prozess (naja, eigentlich Thread) andere Systemaufrufe als read
aufruft , write
, exit
, und sigreturn
. Es ist eine ziemlich effektive Sandbox, aber schwierig mit unverändertem Code zu verwenden.
Sie können eine SELinux-Domäne definieren, die socket
nicht zulässt /bind
/etc. Anrufe und führt einen dynamischen Übergang in diesen Typ durch. Dies erfordert (offensichtlich) ein System mit einer aktiv erzwingenden SELinux-Richtlinie. (Möglicherweise sind ähnliche Dinge mit AppArmor und TOMOYO möglich, aber ich bin mit keinem von ihnen sehr vertraut.)
Werfen Sie einen Blick auf systrace - nicht auf Sockets beschränkt, sondern ein generischer Generator/Enforcer für Syscall-Richtlinien. Zitat:
Die GNU/Linux-Portierung ist abgeschlossen und der Kernel-Patch wird aktiv von Marius Eriksen gepflegt. Kann ohne Kernel-Änderungen mit dem Ptrace-Backend ausgeführt werden.
Haftungsausschluss - Ich habe es nie unter Linux versucht.