proceso obtiene sus propios recursos globales del sistema de manera aislada sobre un mismo kernel. Ventaja: Menor uso de recursos que la virtualización convencional
y escritura. • Networking: NAT, veth, macvlan, phys, etc. • Muchos procesos por contenedor. • Tienden a persistir como una máquina virtual completa. • LXC/LXD, OpenVZ. Application container: • Root tree – solo lectura (teóricamente). • Networking – NAT solamente(hasta ahora). • 1 proceso por contenedor. • “Efímeros”. • Docker, Rocket.
llamada clone() o unshare(). • Cada proceso en diferentes espacios de nombres de montaje, tienen una vista particular del sistema de archivo • La vista del sistema de archivos del proceso es idéntica a la del proceso padre en el momento de la creación; sin embargo, cualquier modificación posterior en el montaje no se propaga al proceso padre y viceversa. • Se puede variar la visibilidad utilizando los operadores de mount: bind, make-shared, make-slave, make-private, make- unbindable
llamada clone() o unshare(). • Permite que procesos en diferentes espacios de nombre PID pueden tener un número de identificador de proceso(PID) diferentes para cada espacio de nombre. • Utilizado para implementar contenedores que puedan ser migrados a otros hosts manteniendo el mismo PID.
Cuando un nuevo espacio de nombre PID es creado, los procesos en ese espacio de nombre son visibles por el espacio de nombre PID del proceso que creo el nuevo espacio de nombre PID. Los procesos del espacio de nombre PID creado no tienen visibilidad del espacio de nombre PID del padre. La existencia de una jerarquía de espacios de nombre significa que cada proceso puede tener multiples PID's, uno para cada espacio de nombre en el cual es visible.
llamada clone() o unshare(). • Cada proceso en cada espacio de nombre tenga su propio identificador nodename, y domainname. • Los valores de la arquitectura, kernel, y otros no se modifican. • Nodename se utiliza para inicializar ciertos servicios de red que necesitan el nombre de la máquina.
llamada clone() o unshare(). • Cada espacio de nombre de red tiene su propia tabla de enrutamiento, pilas IPv4 e IPv6, firewalls, archivos de dispositivos de red, directorio /proc/net, directorio /sys/class/net, sockets de red. • Un dispositivo de red física puede existir solo en un espacio de nombre de red, • Es posible utilizar puentes para crear túneles por medio de interfaces virtuales entre espacios de nombre de red
utilizados por un proceso para probar si tiene permitido realizar una operación privilegiada sobre los recursos del sistema operativo. • Aplicados a procesos creados con execve() o a archivos ejecutables solamente. • Aplicado por: – Proceso. – Archivo.
llamada clone() o unshare(). • Permiten mapear UID y GID entre espacios de nombres. • Aíslan identificadores y atributos relacionados con seguridad; en particular, UID's y GID's, el directorio root, llaves del kernel y las capacidades.
usuario utilizando llamadas a clone() o unshare() se brinda un nuevo conjunto de capacidades con todos los bits habilitados en el mapa de bits para el nuevo proceso en el nuevo espacio de nombre de usuario, el nuevo proceso es propietario del nuevo espacio de nombre de usuario; sin embargo, se eliminan todo el conjunto de capacidades del nuevo proceso en el espacio de nombre del proceso padre. Además, cualquier llamada a execve() desde el proceso hijo a un archivo ejecutable tendrá como resultado la pérdida de las capacidades ya que el nuevo espacio nombre de usuario se crea con los securebits deshabilitados
conjunto de parámetros para uno o más subsistemas. • Subsistema: Representa un recurso del sistema al cual se le aplican límites a través de los cgroups. • Jerarquía de cgroups: Conjunto de cgroups organizados en un árbol de directorios donde cada tarea pertenece a exactamente a un cgroup para un subsitema definido.
solo puede ser miembro de exactamente un solo cgroup en esa jerarquía, pero puede pertenecer a muchos cgroups en diferentes jerarquías. Regla 3: Cualquier proceso hijo automáticamente hereda el cgroup del proceso padre; no obstante, puede ser movido a cualquier otro cgroup, ya que el proceso hijo es totalmente independiente del proceso padre luego de la llamada a fork().
usuario root en realizar operaciones que puedan afectar al host. • Sin LSM, la política de seguridad a ejecutar por defecto son las capacidades de Linux. • AppArmor: – Confina programas a un conjunto limitado de recursos a través de perfiles que son cargados al kernel para realizar un control a nivel de programas sobre usuarios – Los perfiles son aplicados a los procesos en la llamada de sistema exec(), incluso a los procesos root. – No se puede confinar para procesos que ya están corriendo en el sistem
de recursos a través de perfiles que son cargados al kernel para realizar un control a nivel de programas sobre usuarios – Los perfiles son aplicados a los procesos en la llamada de sistema exec(), incluso a los procesos root. – No se puede confinar para procesos que ya están corriendo en el sistema. – Su politica por defecta es permitir.
reduciendo la exposición de las interfaces del kernel. • 2 tipos de restricción: – Estricta: solo se permiten las llamadas de sistema a read(), write(), exit(), sigreturn() de lo contrario resulta en la terminación del proceso. – Filtro: Filtrar llamadas al sistema utilizando un filtro de paquetes Berkey(BPF) donde se envía el número de la llamada de sistema y los argumentos de la llamada. Si el filtro permite la ejecución de las llamadas fork() o clone(), cualquier proceso hijo obtiene los filtros de su proceso padre.
tu contenedor, eres libre de ponerlo en producción. De otra manera es posible: – ssh forwarding. – spam de correo. – minar bitcoins. – proxy/VPN tunneling. – Escalar privilegios(LXC/Docker se encuentra en fuerte desarrollo aún). • En el caso de docker, un solo bridge donde se conectan todos los contenedores. • Evita los puntos de montaje compartido entre el host y los contenedores. • Limita los accesos a través de apparmor, linux capabilities y seccomp. • Crea tus propias imágenes. EVITA UTILIZAR IMAGENES DE DOCKERHUB EN PRODUCCIÓN. • Utiliza contenedores sin privilegio(Para el siguiente meetup).