LXC adalah runtime container Linux tingkat rendah yang terkenal dan teruji. Ini sedang dalam pengembangan aktif sejak tahun 2008 dan telah membuktikan dirinya dalam lingkungan produksi penting di seluruh dunia. Beberapa kontributor intinya adalah orang-orang yang sama yang membantu mengimplementasikan berbagai fitur containerisasi terkenal di dalam kernel Linux.
Jenis | Melayani | Status |
---|---|---|
CI (Linux) | GitHub | |
CI (Linux) | Jenkins | |
Status proyek | Praktik Terbaik CII | |
kabur | OSS-Fuzz | |
kabur | CIFuzz |
Fokus utama LXC adalah kontainer sistem. Artinya, container yang menawarkan lingkungan sedekat mungkin dengan yang Anda dapatkan dari VM tetapi tanpa overhead yang timbul karena menjalankan kernel terpisah dan mensimulasikan semua perangkat keras.
Hal ini dicapai melalui kombinasi fitur keamanan kernel seperti namespace, kontrol akses wajib, dan grup kontrol.
Kontainer yang tidak memiliki hak istimewa adalah kontainer yang dijalankan tanpa hak istimewa apa pun. Hal ini memerlukan dukungan untuk namespace pengguna di kernel tempat kontainer dijalankan. LXC adalah runtime pertama yang mendukung container tanpa hak istimewa setelah namespace pengguna digabungkan ke dalam kernel jalur utama.
Intinya, ruang nama pengguna mengisolasi kumpulan UID dan GID tertentu. Hal ini dicapai dengan membuat pemetaan antara rentang UID dan GID di host ke rentang UID dan GID yang berbeda (tidak memiliki hak istimewa) di dalam container. Kernel akan menerjemahkan pemetaan ini sedemikian rupa sehingga di dalam wadah semua UID dan GID muncul seperti yang Anda harapkan dari host sedangkan pada host, UID dan GID ini sebenarnya tidak memiliki hak istimewa. Misalnya, proses yang berjalan sebagai UID dan GID 0 di dalam container mungkin muncul sebagai UID dan GID 100000 di host. Detail implementasi dan kerja dapat dikumpulkan dari halaman manual namespace pengguna yang sesuai.
Karena container yang tidak memiliki hak istimewa merupakan peningkatan keamanan, container tersebut tentu saja memiliki beberapa batasan yang diberlakukan oleh kernel. Untuk menyediakan wadah tanpa hak istimewa yang berfungsi penuh, LXC berinteraksi dengan 3 buah kode setuid:
Segala sesuatu yang lain dijalankan sebagai pengguna Anda sendiri atau sebagai uid yang dimiliki pengguna Anda.
Secara umum, tujuan LXC adalah memanfaatkan setiap fitur keamanan yang tersedia di kernel. Ini berarti manajemen konfigurasi LXC akan memungkinkan pengguna berpengalaman untuk menyesuaikan LXC dengan kebutuhan mereka.
Pengenalan lebih rinci tentang keamanan LXC dapat ditemukan di tautan berikut
Pada prinsipnya LXC dapat dijalankan tanpa alat apa pun asalkan konfigurasi yang benar diterapkan. Namun, kegunaan wadah tersebut biasanya sangat terbatas. Sekadar menyoroti dua masalah paling umum:
Jaringan: Tanpa bergantung pada pembantu setuid untuk menyiapkan perangkat jaringan yang sesuai untuk pengguna yang tidak memiliki hak istimewa (lihat biner lxc-user-nic
LXC), satu-satunya pilihan adalah berbagi namespace jaringan dengan host. Meskipun pada prinsipnya hal ini aman, berbagi namespace jaringan host masih mengurangi satu langkah isolasi dan meningkatkan vektor serangan. Lebih jauh lagi, ketika host dan container berbagi namespace jaringan yang sama, kernel akan menolak pemasangan sysfs apa pun. Ini biasanya berarti bahwa biner init di dalam container tidak akan dapat melakukan booting dengan benar.
Ruang Nama Pengguna: Seperti diuraikan di atas, ruang nama pengguna adalah peningkatan keamanan yang besar. Namun, tanpa bergantung pada pembantu yang memiliki hak istimewa, pengguna yang tidak memiliki hak istimewa pada host hanya diizinkan untuk memetakan UID mereka sendiri ke dalam sebuah wadah. Namun sistem POSIX standar memerlukan 65536 UID dan GID untuk menjamin fungsionalitas penuh.
LXC dikonfigurasi melalui serangkaian kunci sederhana. Misalnya,
lxc.rootfs.path
lxc.mount.entry
Kunci konfigurasi namespace LXC dengan menggunakan titik tunggal. Ini berarti kunci konfigurasi kompleks seperti lxc.net.0
mengekspos berbagai subkunci seperti lxc.net.0.type
, lxc.net.0.link
, lxc.net.0.ipv6.address
, dan lainnya untuk lebih menyempurnakan konfigurasi berbutir.
LXC digunakan sebagai runtime default untuk Incus, sebuah hypervisor container yang mengekspos REST-api yang dirancang dengan baik dan stabil di atasnya.
LXC berjalan pada kernel apa pun mulai 2.6.32 dan seterusnya. Yang diperlukan hanyalah kompiler C yang fungsional. LXC bekerja pada semua arsitektur yang menyediakan fitur kernel yang diperlukan. Ini termasuk (namun tidak terbatas pada):
LXC juga mendukung setidaknya pustaka standar C berikut:
LXC selalu fokus pada kompatibilitas ke belakang yang kuat. Faktanya, API tersebut belum rusak sejak rilis 1.0.0
dan seterusnya. LXC utama saat ini berada pada versi 4.*.*
.
Proyek LXC memiliki reputasi yang baik dalam menangani masalah keamanan dengan cepat dan efisien. Jika Anda merasa menemukan potensi masalah keamanan, harap laporkan melalui email ke security (at) linuxcontainers (dot) org.
Untuk lebih jelasnya silakan lihat
Kami selalu menyambut kontributor baru dan dengan senang hati memberikan panduan bila diperlukan. LXC mengikuti konvensi pengkodean kernel. Ini berarti kita hanya mengharuskan setiap commit menyertakan baris Signed-off-by
. Gaya pengkodean yang kami gunakan identik dengan yang digunakan oleh kernel Linux. Anda dapat menemukan pengenalan rinci di:
dan juga harus melihat file CONTRIBUTING di repo ini.
Jika Anda ingin menjadi lebih aktif, biasanya juga merupakan ide bagus untuk tampil di saluran IRC LXC #lxc-dev di irc.libera.chat. Kami mencoba melakukan semua pengembangan secara terbuka dan diskusi tentang fitur baru atau bug dilakukan baik dalam masalah GitHub yang sesuai atau di IRC.
Saat mempertimbangkan untuk memberikan kontribusi penting pada keamanan atau perubahan besar, biasanya merupakan ide bagus untuk melakukan ping ke pengembang terlebih dahulu dan menanyakan apakah PR akan diterima.
LXC dan proyek terkaitnya secara ketat mematuhi skema versi semantik.
Sumber untuk versi rilis terbaru selalu dapat diunduh
Anda dapat menelusuri kode sumber terkini dan mengubah riwayat secara online
Tanpa mempertimbangkan detail spesifik distribusi yang sederhana
meson setup -Dprefix=/usr build
meson compile -C build
biasanya sudah cukup.
Ketika Anda membutuhkan bantuan, proyek LXC memberi Anda beberapa pilihan.
Kami mengadakan forum diskusi di
di mana Anda bisa mendapatkan dukungan.
Anda dapat menemukan kami di #lxc di irc.libera.chat.
Anda dapat memeriksa salah satu dari dua arsip milis LXC dan mendaftar jika tertarik: