Linux LXC vs FreeBSD jail


62

Ci sono differenze notevoli tra le LXC (container Linux) e le jail di FreeBSD in termini di sicurezza, stabilità e prestazioni?

A prima vista, entrambi gli approcci sembrano molto simili.


1
LXC è una tecnologia piuttosto nuova, quindi mi aspetto una migliore sicurezza e stabilità con le carceri. Neanche un'ipotesi sulle prestazioni. Ci sono alcuni problemi di sicurezza noti con LXC che possono essere mitigati usando selinux, per esempio. Personalmente mi piace LXC, però.
Pavel Šimerda,

1
@ PavelŠimerda Ho sentito parlare di LXC oggi, ma sono rimasto sorpreso di scoprire che sia Heroku che probabilmente Google App Engine utilizzano già LXC.
Philipp Claßen,

3
Se ti sei appena imbattuto in LXC dovresti dare un'occhiata a Docker che utilizza LXC sotto il cofano: docker.io/the_whole_story
Kev

1
Docker non utilizza più lxc.

1
@nwildner non usa più liblxc, ma usa gli stessi identici concetti: spazi dei nomi del kernel.
0xC0000022L,

Risposte:


101

Indipendentemente dal nome di fantasia usato qui, entrambi sono soluzioni a un problema specifico: una soluzione di segregazione migliore del chroot Unix classico . Virtualizzazione a livello di sistema operativo, container, zone o persino "chroot with steroids" sono nomi o titoli commerciali che definiscono lo stesso concetto di separazione dello spazio utente, ma con caratteristiche diverse.

Chroot fu introdotto il 18 marzo 1982, mesi prima del rilascio di 4.2 BSD , come strumento per testare la sua installazione e costruire sistema, ma oggi ha ancora i suoi difetti. Poiché il primo obiettivo di chroot era solo quello di fornire un percorso newroot , sono stati scoperti altri aspetti del sistema che dovevano essere isolati o controllati (rete, vista del processo, throughput I / O). È qui che sono comparsi i primi contenitori (virtualizzazione a livello di utente).

Entrambe le tecnologie (FreeBSD Jails e LXC) utilizzano l'isolamento dello spazio utente per fornire un altro livello di sicurezza. Questa compartimentazione assicurerà che un determinato processo comunicherà solo con altri processi nello stesso contenitore sullo stesso host e, se si utilizza qualsiasi risorsa di rete per ottenere una comunicazione "mondo esterno", tutto verrà inoltrato all'interfaccia / canale assegnato a questo contenitore ha.

Caratteristiche

Jail di FreeBSD:

  • Considerata tecnologia stabile, dal momento che è una caratteristica di FreeBSD dal 4.0;
  • Prende il meglio del filesystem ZFS nel punto in cui è possibile clonare jail e creare modelli jail per distribuire facilmente più jail . Qualche altra follia di ZFS ;
  • Ben documentato e in evoluzione ;
  • Le prigioni gerarchiche ti consentono di creare carceri all'interno di una prigione (dobbiamo andare più in profondità!). Combina con allow.mount.zfsper ottenere più potenza e altre variabili come children.maxdefiniscono max jail children.
  • rctl (8) gestirà i limiti delle risorse delle jail (memoria, CPU, disco, ...);
  • Le jail FreeBSD gestiscono lo spazio utente di Linux ;
  • Isolamento della rete con vnet, consentendo a ciascuna jail di avere il proprio stack di rete, interfacce, tabelle di indirizzamento e routing;
  • nullfs per aiutare a collegare le cartelle a quelle che si trovano sul server reale all'interno di una jail;
  • utility ezjail per aiutare le implementazioni di massa e la gestione delle carceri;
  • Un sacco di parametri sintonizzabili del kernel ( sysctl). security.jail.allow.*i parametri limiteranno le azioni dell'utente root di quella jail.
  • Forse le jail di FreeBSD estenderanno alcune delle funzionalità del progetto VPS come la migrazione in tempo reale in un prossimo futuro.
  • C'è qualche sforzo di integrazione con ZFS e Docker in esecuzione. Ancora sperimentale.
  • FreeBSD 12 supporta bhyve all'interno di una prigione e pf all'interno di una prigione, creando ulteriore isolamento per quegli strumenti
  • Molti strumenti interessanti sono stati sviluppati negli ultimi anni. Alcuni di essi sono indicizzati in questo post del blog .
  • Alternative: progetto VPS di FreeBSD

Linux Containers (LXC):

  • Nuova tecnologia "nel kernel" ma approvata da quelle grandi (specialmente canonica);
  • I container non privilegiati a partire da LXC 1.0, fanno un grande passo verso la sicurezza all'interno dei container;
  • Mappatura UID e GID all'interno di contenitori;
  • Spazi dei nomi del kernel, per separare IPC, mount, pid, rete e utenti. Questi spazi dei nomi possono essere gestiti in modo distaccato, in cui un processo che utilizza un diverso spazio dei nomi di rete non sarà necessariamente isolato su altri aspetti come l'archiviazione;
  • Gruppi di controllo (cgroups) per gestire le risorse e raggrupparle. CGManager è il ragazzo per raggiungerlo.
  • Profili Apparmor / SELinux e funzionalità del kernel per migliorare l'applicazione delle funzionalità del kernel accessibili dai container. Seccomp è disponibile anche sui contenitori lxc per filtrare le chiamate di sistema. Altri aspetti di sicurezza qui .
  • Funzionalità di migrazione in tempo reale in fase di sviluppo. È davvero difficile dire quando sarà pronto per l'uso in produzione, poiché docker / lxc dovrà occuparsi della pausa del processo di spazio utente, dello snapshot, della migrazione e del consolidamento - ref1 , ref2 .La migrazione in tempo reale funziona con contenitori di base (nessun passaggio del dispositivo né servizi di rete complessi o configurazioni di archiviazione speciali).
  • Collegamenti API per consentire lo sviluppo in python3 e 2, lua, Go, Ruby e Haskell
  • Area "Novità" centralizzata. Abbastanza utile ogni volta che è necessario verificare se alcuni bug sono stati corretti o se è stata commessa una nuova funzionalità. Qui .
  • Un'alternativa interessante potrebbe essere lxd , che sotto il cofano funziona con lxc ma, ha alcune belle caratteristiche come api REST, integrazione OpenStack, ecc.
  • Un'altra cosa interessante è che Ubuntu sembra spedire zfs come filesystem predefinito per i contenitori su 16.04 . Per mantenere allineati i progetti, lxd ha lanciato la sua versione 2.0 e alcune funzionalità sono correlate a zfs .
  • Alternative : OpenVZ , Docker
  • Docker . Si noti che Docker utilizza spazi dei nomi, cgroup creando l'isolamento "per app" / "per software". Differenze chiave qui . Mentre LXC crea container con più processi, Docker riduce il container il più possibile a un singolo processo e quindi lo gestisce tramite Docker.
  • Sforzo sull'integrazione di Docker con SELinux e riduzione delle capacità all'interno di un contenitore per renderlo più sicuro - Docker e SELinux, Dan Walsh
  • Qual è la differenza tra Docker, LXD e LXC

Docker non utilizza più lxc. Ora hanno una lib specifica chiamata libcontainer che gestisce direttamente l'integrazione con lo spazio dei nomi del kernel di basso livello e le funzionalità dei cgroups.

Nessuna delle due tecnologie è una panacea della sicurezza, ma entrambe sono dei modi piuttosto validi per isolare un ambiente che non richiede la virtualizzazione completa a causa dell'infrastruttura dei sistemi operativi misti. La sicurezza arriverà dopo molta lettura della documentazione e l'implementazione di parametri sintonizzabili del kernel, MAC e isolamenti che quei virt a livello di sistema operativo ti offrono.

Guarda anche:


1
Vale la pena ricordare che lxc non ha alcuno sforzo per fornire un adeguato isolamento agli ospiti. lxd , tuttavia, tenta di fornire isolamento come jail BSD o zone Solaris.
allquixotic,

lxd è una "migliore esperienza" di LXC, che mette in primo piano altre funzionalità. Tuttavia, sembra bello citare questo piccoletto qui

@allquixotic intendi se usi una configurazione invariata creata dai template? Contenitori veri, ma non privilegiati (abilitati per userns) erano disponibili con LXC 1.x e potevano anche essere avviati automaticamente all'avvio del sistema, a condizione che fossero di proprietà root(e quindi situati nella posizione dell'intero sistema per i contenitori).
0xC0000022L
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.