
Ringkas: Peralihan dari Docker ke Podman rootless menghapus kontrol root yang selalu aktif dan membatasi dampak potensial container yang terkompromi terhadap server host.
Selama bertahun-tahun, saya menjalankan Docker di server rumah dan pada dasarnya semuanya bekerja tanpa masalah. Tidak perlu mengetik sudo juga terasa praktis. Namun, peningkatan keamanan yang sebenarnya baru terlihat setelah seluruh stack dipindahkan ke Podman rootless: bukan karena Podman lebih baru, melainkan karena kontrol root yang selalu aktif berhasil dihilangkan. Satu perubahan ini mendefinisikan ulang apa yang berpotensi dilakukan container terkompromi terhadap host, sebuah batas yang penting bagi keamanan container di rumah.
Docker Memberikan Kunci Utama Setingkat Root
Saya tidak pernah membutuhkan sudo, tetapi kemudahan itulah yang sebenarnya menjadi masalah. Secara default, Dockerd berjalan sebagai root, sedangkan socket Docker menjadi antarmuka kontrol aktif menuju proses root tersebut. Untuk waktu yang sangat lama, saya menganggap kemampuan menjalankan perintah Docker tanpa sudo sebagai peningkatan kenyamanan. Padahal, keanggotaan dalam grup docker pada praktiknya memberikan hak akses setingkat root, dan risiko ini juga ditandai dalam dokumentasi Docker sendiri.
Walaupun arsitektur berlapis Docker lebih kompleks daripada ilustrasi sederhana yang sering digunakan, socket Docker tetap dapat memberi container akses ke proses root itu sehingga dampak praktisnya tidak berubah. Selama sebuah proses dapat berkomunikasi dengan socket, proses tersebut berpotensi menggunakan hak akses daemon root. Ia dapat membuat container dengan hak istimewa, memasang jalur host, atau menjalankan operasi melalui daemon menggunakan otoritas setingkat root.
Antarmuka kontrol ini terus tersedia di server rumah saya yang menjalankan perangkat media, sinkronisasi dokumen, reverse proxy, serta beberapa database. Namun, keputusan saya bukan sekadar mengganti satu engine container dengan engine lain karena salah satunya dianggap secara ajaib lebih aman. Tujuannya adalah memutus permukaan kontrol dengan hak root yang selalu aktif dan sudah menjadi bagian dari alur kerja saya. Podman memakai arsitektur tanpa daemon, sehingga tidak ada daemon root pusat yang berada di antara perintah dan container.
Cara Podman Rootless Membatasi Hak Akses Container
Sebuah proses masih dapat berjalan sebagai root atau UID 0 di dalam container rootless. Namun, kekuasaan tersebut tidak melewati batas container. UID 0 milik container dipetakan ke rentang UID tanpa hak istimewa pada host. Berkas /etc/subuid dan /etc/subgid menyediakan rentang ID subordinat yang digunakan untuk pemetaan itu, sementara kernel Linux menegakkan pemisahannya.
Menjalankan perintah id di dalam container, lalu melihat proses yang sama dari host, memperlihatkan ketidaksesuaian yang menjelaskan batas tersebut. Di dalam container, proses terlihat sebagai root, sedangkan pada host UID-nya adalah milik pengguna biasa.
Artinya, proses terkompromi yang menganggap dirinya root langsung berada dalam posisi lebih lemah ketika keluar dari container. Proses itu sejak awal tidak pernah menjadi UID 0 pada host, sehingga kemampuannya dibatasi apabila berhasil keluar dari container.
Saya mengalami beberapa kendala saat melakukan penyiapan, dan kendala itu membuktikan bahwa batas keamanan tersebut benar-benar ada. Sejumlah perilaku jaringan yang biasa saya gunakan pada container rootful tidak bekerja tanpa hak istimewa tersebut. Untuk jaringan rootless, Podman dapat memakai alat seperti Pasta agar jaringan tersedia tanpa memberikan hak root kepada engine container. Mode rootless memang tidak memiliki hak istimewa yang biasanya menyederhanakan model jaringan tradisional.
Bind Mount Masih Bisa Merusak Batas Keamanan
Menjalankan container secara rootless tidak otomatis melindungi semua direktori host yang dipasang ke container. Folder yang dibagikan kepada container tetap mengikuti batas izin akun pengguna biasa. Container berpotensi membaca atau menulis berkas host yang memang sudah dapat diakses oleh akun pengguna tersebut.
Memasang seluruh direktori berbeda dari hanya memasang satu folder data aplikasi khusus. Folder data aplikasi yang terpisah mempersempit jangkauan container. Sebaliknya, memasang direktori yang jauh lebih besar memberi container akses ke semua data dalam mount tersebut yang dapat dijangkau akun pengguna.
Kernel yang digunakan bersama tetap menjadi batas keamanan yang lebih sulit diatasi. Pemetaan user namespace—mekanisme yang memisahkan identitas pengguna container dari host—tidak dapat menghentikan eksploitasi kernel atau keberhasilan keluar dari namespace. Rootless membatasi luas dampak setelah kompromi terjadi, tetapi belum tentu mencegah kompromi itu sejak awal.
Rootless, Bukan Sekadar Podman, Menjadi Peningkatan Utama
Selama beberapa tahun, Docker juga menyediakan mode rootless yang menjalankan daemon dan container di dalam user namespace. Desain ini berupaya mengurangi hak istimewa inti tanpa mengharuskan pengguna mengganti engine. Ini merupakan perbedaan arsitektur yang nyata, tetapi cakupannya lebih sempit daripada yang mungkin diperkirakan karena Docker rootless masih menjalankan daemon tersendiri untuk setiap pengguna.
Podman, sebaliknya, tidak menjalankan daemon. Quadlet memungkinkan Linux mengelola container sebagai layanan latar belakang native dan menjadi keunggulan terbesar Podman untuk penggunaan harian di server rumah. Dengan Quadlet, systemd dapat mengelola container sebagai layanan sehingga container bisa dimulai, dimulai ulang, dan menghasilkan log melalui perangkat pengelolaan layanan yang sudah saya gunakan di Linux.
| Karakteristik | Docker rootful | Docker rootless | Podman rootless |
|---|---|---|---|
| Daemon pusat rootful | Ya | Tidak | Tidak |
| Container rootless | Tidak | Ya | Ya |
| Daemon diperlukan | Ya | Ya, per pengguna | Tidak |
| Perubahan arsitektur utama | — | Menghapus hak istimewa daemon root | Menghapus hak istimewa daemon root dan daemon |
Podman Desktop tersedia untuk Windows, macOS, dan Linux. Perangkat lunak yang dikembangkan Red Hat ini gratis dan bersifat open-source. Podman Desktop merupakan alat pengelolaan container dengan antarmuka grafis intuitif untuk membangun, menjalankan, dan men-debug container secara lokal. Aplikasi ini menyederhanakan penggunaan Podman dan Kubernetes sekaligus menyediakan alternatif yang lebih bersih dibandingkan platform desktop container yang lebih berat.
Berpindah dari model rootful ke rootless merupakan perubahan yang bermakna. Langkah ini mengurangi blast radius, yaitu luas dampak kompromi, pada mesin saya yang terus menyala dan menyimpan banyak data pribadi. Podman menjadi sarana untuk menerapkan perubahan tersebut.
Poin penting
- Podman rootless tanpa daemon pusat
- Socket Docker berotoritas root
- UID container dipetakan ulang
- Jaringan rootless memakai Pasta
- Risiko bind mount tetap ada
- Quadlet terintegrasi dengan systemd
Sumber: https://www.makeuseof.com/switched-from-docker-to-podman-real-security-upgrade-was-going-rootless/