Episode ini membedah inti keamanan unprivileged container: file /etc/subuid dan /etc/subgid, konfigurasi pemetaan UID/GID lewat lxc.idmap, kuota network lxc-usernet, dan best practice pemetaan rentang 0-65536 di lingkungan tepercaya.

Di episode 5 kita memperkenalkan unprivileged container secara umum. Sekarang kita membedah mekanisme yang membuatnya aman: user namespaces dan ID mapping (idmap). Inilah alasan mengapa root di dalam container tidak berbahaya di host — dan inilah yang perlu kalian pahami saat bind-mount terasa "aneh", atau saat ingin menyesuaikan pemetaan untuk berbagi file dengan host. Di episode 15 kita turun ke detailnya.
Di dalam container unprivileged, UID 0 (root) hanyalah tampilan lokal. Di host, UID itu sebenarnya dipetakan ke angka besar (misal 100000) milik user biasa. Karena pemetaan ini, "root" di container tidak memiliki kekuatan root host — ia bekerja dengan hak user biasa saat menyentuh sumber daya host.
Pemetaan dilakukan satu arah: UID container → UID host. Rentang ini didefinisikan dua kali: sekali di /etc/subuid//etc/subgid (jatah sistem untuk user), dan sekali di config container lewat lxc.idmap.
File ini menentukan jatah sub-UID dan sub-GID untuk tiap user — rentang angka yang boleh dipakai untuk container unprivileged:
root:100000:65536
devnull:165536:65536Formatnya: <user>:<base>:<count>. Baris devnull:165536:65536 berarti user devnull boleh memakai UID 165536 hingga 165536+65536-1 untuk container-nya. Setiap container yang dimiliki user tersebut memakai potongan dari rentang ini.
Cek jatah kalian:
grep "$USER" /etc/subuid
grep "$USER" /etc/subgidWarning
Jika /etc/subuid dan /etc/subgid kosong untuk user kalian, container unprivileged tidak akan bisa dibuat — atau dibuat namun gagal start dengan error idmap. Tambahkan barisnya (misal sudo usermod --add-subuids 100000-165535 $USER) sebelum mulai. Ini adalah penyebab nomor satu kegagalan unprivileged di instalasi fresh.
Pemetaan di dalam config container ditulis dengan lxc.idmap. Formatnya: lxc.idmap = <ttype> <nsid> <hostid> <range>.
ttype — u untuk UID, g untuk GID.nsid — UID/GID di dalam namespace container.hostid — UID/GID di host.range — jumlah ID yang dipetakan berurutan.Container unprivileged tipikal (template modern) memakai dua baris untuk UID dan dua untuk GID:
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536Artinya: UID container 0-65535 dipetakan ke UID host 100000-165535. GID sama. Dengan pemetaan ini, UID 0 container = UID 100000 host, UID 1000 container = UID 101000 host.
Untuk berbagi direktori dengan user host (misal UID 1000 host ingin punya file di dalam container sebagai UID 1000), kalian bisa menambahkan pemetaan:
lxc.idmap = u 0 100000 1000
lxc.idmap = g 0 100000 1000
lxc.idmap = u 1000 1000 1
lxc.idmap = g 1000 1000 1
lxc.idmap = u 1001 101001 64535
lxc.idmap = g 1001 101001 64535Dengan pola ini, UID container 1000 dipetakan satu-ke-satu ke UID host 1000 — sehingga file milik user host 1000 bisa dibaca/ditulis langsung dari dalam container. Trik ini dipakai bersama bind-mount (episode 11) untuk berbagi data antara host dan container.
Tip
Cek pemetaan yang aktif dari dalam container: lxc-attach -n c1 -- cat /proc/self/uid_map. Baris 0 100000 65536 menunjukkan pemetaan yang sedang berlaku. Ini cara tercepat memverifikasi konfigurasi lxc.idmap kalian.
Di episode 6 kita menyentuh lxc-usernet. Kini perannya jadi jelas: user biasa tidak berhak membuat veth yang menempel ke bridge host. File /etc/lxc/lxc-usernet memberikan izin tersebut secara eksplisit — ini "jatah network" untuk user unprivileged.
# <user> <type> <link> <parent bridge> <count>
devnull veth lxcbr0 10Artinya: user devnull boleh membuat maksimal 10 veth yang terhubung ke lxcbr0. Tanpa entri ini, lxc-start container unprivileged gagal dengan "Operation not permitted" pada pembuatan network.
grep "$USER" /etc/subuid
grep "$USER" /etc/subgid
lxc-attach -n c1 -- cat /proc/self/uid_map
grep "$USER" /etc/lxc/lxc-usernetInti yang harus dibawa pulang:
/etc/subuid dan /etc/subgid memberi jatah rentang ID untuk container unprivileged.lxc.idmap memetakan UID/GID container ke host: u 0 100000 65536.lxc-usernet memberi kuota network (veth) untuk user biasa.Di episode 16 selanjutnya kita akan membahas keamanan & CVE — fakta fix CVE-2026-39402 di LXC 7.0, pentingnya patch rutin, isolasi host-container, serta model ancaman: unprivileged + AppArmor + seccomp + kernel terbaru.