GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo deshabilitar la creación de sockets para un proceso de Linux, para sandboxing?

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.


Linux
  1. Cómo instalar vtop en Linux

  2. Linux:¿cómo habilitar los espacios de nombres de usuario en el kernel? (para `no compartir` sin privilegios.)?

  3. Linux:¿cómo dejar de compartir la red para el proceso actual?

  4. Linux:¿cómo deshabilitar el pitido del sistema para usuarios sin privilegios?

  5. ¿Núcleo de Linux para Nintendo Wii?

Cómo matar un proceso en Linux

Cómo MATAR un proceso en Linux

Cómo deshabilitar el intercambio en Linux

¿Cómo deshabilitar el inicio de sesión SSH para el usuario raíz en Linux?

¿Cómo funciona internamente copy_from_user del kernel de Linux?

¿Cómo codificar un módulo del kernel de Linux?