Linux LXC vs penjara FreeBSD

62

Apakah ada perbedaan penting antara LXC (wadah Linux) dan penjara FreeBSD dalam hal keamanan, stabilitas & kinerja?

Pada pandangan pertama, kedua pendekatan terlihat sangat mirip.

Philipp Claßen
sumber
1
LXC adalah teknologi yang agak baru, jadi saya mengharapkan keamanan dan stabilitas yang lebih baik dengan penjara. Bahkan tidak menebak tentang kinerja. Ada beberapa masalah keamanan yang diketahui dengan LXC yang dapat dikurangi dengan menggunakan selinux, misalnya. Saya pribadi suka LXC.
Pavel Šimerda
1
@ PavelŠimerda Saya baru saja mendengar tentang LXC hari ini, tetapi saya terkejut mengetahui bahwa Heroku dan mungkin Google App Engine sudah menggunakan LXC.
Philipp Claßen
3
Jika Anda baru saja bertemu LXC, Anda harus melihat Docker yang menggunakan LXC di bawah kap: docker.io/the_whole_story
Kev
1
Docker tidak menggunakan lxc lagi.
1
@nwildner ia tidak menggunakan liblxc lagi, tetapi ia menggunakan konsep yang persis sama: ruang nama kernel.
0xC0000022L

Jawaban:

101

Tidak peduli nama mewah yang digunakan di sini, keduanya adalah solusi untuk masalah tertentu: Solusi pemisahan yang lebih baik daripada chroot Unix klasik . Virtualisasi tingkat sistem operasi, wadah, zona, atau bahkan "chroot with steroids" adalah nama atau judul komersial yang mendefinisikan konsep pemisahan ruang pengguna yang sama, tetapi dengan fitur yang berbeda.

Chroot diperkenalkan pada 18 Maret 1982, berbulan-bulan sebelum rilis 4.2 BSD , sebagai alat untuk menguji instalasi dan membangun sistem, tetapi hari ini masih memiliki kekurangan. Karena tujuan pertama chroot adalah hanya untuk menyediakan jalur root baru , aspek-aspek lain dari sistem yang perlu diisolasi atau dikendalikan terungkap (jaringan, tampilan proses, I / O throughput). Di sinilah wadah pertama (virtualisasi tingkat Pengguna) muncul.

Kedua teknologi (FreeBSD Jails dan LXC) memanfaatkan isolasi userspace untuk memberikan lapisan keamanan lain. Kompartementalisasi ini akan memastikan bahwa proses yang ditentukan hanya akan berkomunikasi dengan proses lain dalam wadah yang sama pada host yang sama, dan jika menggunakan sumber daya jaringan apa pun untuk mencapai komunikasi "dunia luar", semua akan diteruskan ke antarmuka / saluran yang ditetapkan yang digunakan wadah ini. telah.

fitur

Penjara FreeBSD:

  • Dianggap sebagai teknologi yang stabil, karena merupakan fitur di dalam FreeBSD sejak 4.0;
  • Dibutuhkan yang terbaik dari sistem file ZFS pada titik di mana Anda bisa mengkloning penjara dan membuat template penjara untuk dengan mudah menyebarkan lebih banyak penjara. Beberapa kegilaan ZFS ;
  • Didokumentasikan dengan baik , dan berkembang ;
  • Hierarchical Jails memungkinkan Anda membuat penjara di dalam penjara (kita harus masuk lebih dalam!). Gabungkan dengan allow.mount.zfsuntuk mencapai lebih banyak kekuatan, dan variabel-variabel lain seperti children.maxmemang mendefinisikan max child jails.
  • rctl (8) akan menangani batas sumber daya penjara (memori, CPU, disk, ...);
  • Penjara FreeBSD menangani ruang pengguna Linux ;
  • Dengan isolasi jaringan vnet, memungkinkan setiap penjara memiliki tumpukan jaringan, antarmuka, pengalamatan dan tabel perutean sendiri;
  • nullfs untuk membantu menautkan folder ke folder yang terletak di server asli ke dalam penjara;
  • utilitas ezjail untuk membantu penyebaran massal dan pengelolaan penjara;
  • Banyak tunables kernel ( sysctl). security.jail.allow.*parameter akan membatasi tindakan pengguna root penjara itu.
  • Mungkin, penjara FreeBSD akan memperpanjang beberapa fitur proyek VPS seperti migrasi langsung dalam waktu dekat.
  • Ada beberapa upaya integrasi ZFS dan Docker berjalan. Masih eksperimental.
  • FreeBSD 12 mendukung bhyve di dalam penjara dan pf di dalam penjara, menciptakan isolasi lebih lanjut untuk alat-alat itu
  • Banyak alat menarik dikembangkan selama beberapa tahun terakhir. Beberapa dari mereka diindeks pada posting blog ini .
  • Alternatif: Proyek VPS FreeBSD

Linux Containers (LXC):

  • Teknologi "dalam kernel" baru tetapi didukung oleh teknologi besar (khususnya Canonical);
  • Kontainer yang tidak terjangkau mulai dari LXC 1.0, membuat langkah besar ke dalam keamanan di dalam kontainer;
  • Pemetaan UID dan GID di dalam kontainer;
  • Kernel namespaces, untuk melakukan pemisahan IPC, mount, pid, jaringan dan pengguna. Ruang nama ini dapat ditangani dengan cara terpisah, di mana proses yang menggunakan ruang nama jaringan yang berbeda tidak perlu diisolasi pada aspek lain seperti penyimpanan;
  • Kontrol Grup (cgroups) untuk mengelola sumber daya dan mengelompokkannya. CGManager adalah pria untuk mencapai itu.
  • Apparmor / SELinux profil dan kemampuan Kernel untuk menegakkan lebih baik fitur Kernel diakses oleh kontainer. Seccomp juga tersedia pada wadah lxc untuk memfilter panggilan sistem. Aspek keamanan lainnya di sini .
  • Fungsionalitas migrasi langsung sedang dikembangkan. Sangat sulit untuk mengatakan kapan akan siap untuk digunakan produksi, karena buruh pelabuhan / lxc harus berurusan dengan proses userspace jeda, snapshot, migrasi dan konsolidasi - ref1 , ref2 .Migrasi langsung berfungsi dengan wadah dasar (tidak ada perangkat yang tidak melewati layanan jaringan yang kompleks atau konfigurasi penyimpanan khusus).
  • Binding API untuk mengaktifkan pengembangan di python3 dan 2, lua, Go, Ruby dan Haskell
  • Area "Apa yang baru" terpusat. Cukup berguna setiap kali Anda perlu memeriksa apakah ada bug yang diperbaiki atau fitur baru dikomit. Berikut .
  • Alternatif yang menarik bisa lxd , yang di bawah kap bekerja dengan lxc tetapi, ia memiliki beberapa fitur bagus seperti api REST, integrasi OpenStack, dll.
  • Hal lain yang menarik adalah bahwa Ubuntu tampaknya mengirim zfs sebagai sistem file default untuk kontainer pada 16.04 . Untuk menjaga agar proyek tetap selaras, lxd meluncurkan versi 2.0, dan beberapa fitur terkait dengan zfs .
  • Alternatif : OpenVZ , Docker
  • Docker . Perhatikan di sini bahwa Docker menggunakan ruang nama, grup membuat isolasi "per aplikasi" / "per perangkat lunak". Perbedaan utama di sini . Sementara LXC membuat wadah dengan banyak proses, Docker mengurangi wadah sebanyak mungkin untuk satu proses dan kemudian mengelolanya melalui Docker.
  • Upaya mengintegrasikan Docker dengan SELinux dan mengurangi kemampuan di dalam wadah agar lebih aman - Docker dan SELinux, Dan Walsh
  • Apa perbedaan antara Docker, LXD, dan LXC

Docker tidak lagi menggunakan lxc. Mereka sekarang memiliki lib khusus yang disebut libcontainer yang menangani integrasi dengan namespace Kernel tingkat rendah dan fitur cgroup secara langsung.

Baik teknologi adalah obat mujarab keamanan, tetapi keduanya adalah cara yang cukup baik untuk mengisolasi lingkungan yang tidak memerlukan Virtualisasi Penuh karena infrastruktur sistem operasi campuran. Keamanan akan muncul setelah banyak pembacaan dokumentasi dan implementasi merdu kernel, MAC dan isolasi yang ditawarkan oleh OS-Level tersebut kepada Anda.

Lihat juga:


sumber
1
Layak disebutkan bahwa di luar kotak, tidak ada upaya oleh lxc untuk memberikan isolasi tamu yang tepat. lxd , bagaimanapun, berupaya memberikan isolasi seperti penjara BSD atau zona Solaris.
allquixotic
lxd adalah "pengalaman yang lebih baik" dari LXC, menempatkan fitur lain di atasnya. Namun, sepertinya menyenangkan mengutip pria kecil ini di sini
@ allquixotic yang Anda maksud jika menggunakan konfigurasi tidak berubah yang dibuat dari template? Benar, tetapi kontainer yang tidak terjangkau (yang diaktifkan oleh pengguna) tersedia dengan LXC 1.x dan bahkan dapat dimulai secara otomatis pada boot sistem, asalkan mereka dimiliki oleh root(dan dengan demikian terletak di lokasi sistem untuk kontainer).
0xC0000022L