• Evolución de LXC-TOOLS. • Contenedores en modo no privilegiado por defecto. • La configuración se almacena en sqlite3. • Tienden a persistir como una máquina virtual completa.
del cliente LXD. • /var/lib/lxd • devlxd/sock, api rest socket de comunicación con los contenedores. • images/, mantiene las imágenes que gestiona el servidor. • lxc/, mantiene el rootfs de los contenedores. • lxd.db, base de datos sqlite con las configuraciones. • unix.socket, api rest socket. • server.crt, server.key; certificados del server. • /var/log/lxd/ • Logs por contenedor.
de configuración: • Configura los recursos, dispositivos, seguridad, etc. • JSON, basado en clave/valor. • Perfiles para agrupar varios contenedores por un tipo de configuración. • Los perfiles se pueden encadenar. • El último parámetro definido en un perfil es el que tiene validez.
de archivos que son visibles por un proceso. • La vista los montajes de un namespace difiere de los otros namespace. • Aplicado pasando el flag CLONE_NEWNS en la llamada clone() o unshare().
pueden tener un número de identificador de proceso(PID) diferentes para cada namespace. • Utilizado para implementar contenedores que puedan ser migrados a otros hosts manteniendo el mismo PID. • Aplicado pasando el flag CLONE_NEWPID en la llamada clone() o unshare(). • El espacio de nombre PID es jerárquico.
tenga su propio identificador nodename, y domainname. • Los valores de la arquitectura, kernel, y otros no se modifican. • Aplicado pasando el flag CLONE_NEWUTS en la llamada clone() o unshare().
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. • Aplicado pasando el flag CLONE_NEWNET en la llamada clone() o unshare().
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. • /proc/PID/status, para verificar las capacidades de un proceso. • Aplicado por: • Proceso. • Archivo.
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. • Aplicado pasando el flag CLONE_NEWUSER en la llamada clone() o unshare().
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 4: 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 sistema.
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: Filtra llamadas al sistema enviando el número de la llamada de sistema y los argumentos de la llamada. Cualquier proceso hijo luego de clone() o fork() obtiene los filtros de su proceso padre.
donde se conectan todos los contenedores. • Múltiples asignaciones de UID/GID. • Evita que otros contenedores sean afectados si algún contenedor ocupa todos los descriptores de archivos. • Si se escapa del contenedor no afecta a los otros contenedores. • Evita los puntos de montaje compartido entre el host y los contenedores.