ptrace
parece ser la herramienta más obvia, pero aparte de eso...
util-linux[-ng] tiene un comando unshare
, que usa el clone
del kernel /unshare
interfaces Si ejecuta el nuevo proceso a través de unshare -n
(o clone(CLONE_NEWNET)
), los sockets de red que crea están en un espacio de nombres diferente. Eso no resuelve el problema de los recursos del núcleo, pero limita el proceso.
El kernel de Linux también es compatible con seccomp, un modo ingresado con prctl(PR_SET_SECCOMP, 1)
lo que evita que el proceso (bueno, hilo, en realidad) llame a cualquier llamada al sistema que no sea read
, write
, exit
y sigreturn
. Es un sandbox bastante efectivo pero difícil de usar con código sin modificar.
Puede definir un dominio SELinux que no permita socket
/bind
/etc. llamadas y realizar una transición dinámica a ese tipo. Esto (obviamente) requiere un sistema con una política de SELinux que se aplique activamente. (Posiblemente, cosas similares son posibles con AppArmor y TOMOYO, pero no estoy muy familiarizado con ninguno de ellos).
Eche un vistazo a systrace:no se limita a los sockets, sino que es un generador/ejecutor genérico de políticas de llamadas al sistema. Cita:
El puerto GNU/Linux está terminado y Marius Eriksen mantiene activamente el parche del kernel. Se puede ejecutar sin cambios en el kernel usando el backend ptrace.
Descargo de responsabilidad:nunca lo probé en Linux.