Idmapped Mount Memetakan Ulang Kepemilikan File Tanpa Menulis Ulang Inode
Sebuah container memerlukan akses baca-tulis ke direktori yang file-nya memiliki nilai kepemilikan host yang tidak selaras dengan user namespace container. Perubahan kepemilikan secara rekursif dapat membuat direktori tersebut dapat digunakan, tetapi tindakan itu juga mengubah metadata inode persisten dan dapat mengganggu setiap tampilan lain dari filesystem yang sama. Idmapped mount Linux menyediakan mekanisme yang lebih sempit: satu mount dapat menerapkan pemetaan identitas berbeda sementara kepemilikan yang tersimpan tetap utuh.
Efek keamanannya bersifat lokal pada mount. Inode yang sama dapat dijangkau melalui mount lain dengan tampilan kepemilikan berbeda, sehingga UID numerik yang terlihat melalui satu path bukan properti universal dari konteks akses efektif inode. Keputusan izin yang melibatkan idmapped mount memasukkan pemetaannya, dengan tetap bergantung pada dukungan filesystem dan kredensial pemanggil.
Mount membawa lapisan translasi identitas
Idmapped mount dikaitkan dengan idmapping yang berasal dari user namespace. VFS menggunakan pemetaan tersebut saat kepemilikan ditampilkan melalui mount dan ketika operasi izin yang relevan menerjemahkan identitas antara domain pemanggil dan filesystem. Filesystem tetap mempertahankan nilai kepemilikan yang tersimpan.
Pemisahan ini membedakan identitas inode persisten dari identitas yang relatif terhadap mount. Jika sebuah file disimpan dengan pemilik yang dipetakan menjadi UID 0 melalui mount tertentu, proses yang menggunakan mount tersebut dapat melihat pemilik hasil pemetaan sementara mount lain dapat menampilkan nilai numerik berbeda untuk inode yang sama. chown rekursif tidak diperlukan hanya untuk membuat tampilan alternatif tersebut.
Perbedaan ini juga berarti kode audit atau kebijakan tidak semestinya menganggap UID yang ditampilkan sebagai bukti memadai mengenai pemilik mentah pada filesystem. Path dan mount yang digunakan untuk menjangkau objek merupakan bagian dari konteks identitas.
mount_setattr mengikat pemetaan pada objek mount
Linux menyediakan konfigurasi idmapped mount melalui mount_setattr() dengan MOUNT_ATTR_IDMAP. Anggota userns_fd menunjuk user namespace yang pemetaannya akan dikaitkan dengan mount.
Pola konstruksi yang umum memakai mount terlepas yang dikloning dengan open_tree(..., OPEN_TREE_CLONE), menerapkan idmapping saat mount tersebut masih terlepas, lalu memasangnya dengan move_mount(). Urutan berbasis file descriptor ini mempertahankan objek mount secara eksplisit selama atributnya disiapkan.
Operasi tersebut memiliki batas dan tidak berlaku universal. Dukungan kernel dan filesystem diperlukan, pemeriksaan privilege tetap berlaku, dan aturan penerapan atau penggantian idmapping bergantung pada keadaan mount serta semantik API kernel. Perangkat lunak perlu memperlakukan kegagalan sebagai kondisi deployment nyata, bukan mengasumsikan setiap filesystem menerima MOUNT_ATTR_IDMAP.
Pemeriksaan izin memakai konteks kepemilikan hasil pemetaan
Pemetaan ini bukan sekadar format tampilan. Operasi VFS yang mendukung idmapped mount menggunakan nilai identitas relatif terhadap mount untuk pemeriksaan sensitif kepemilikan dan operasi metadata. Hal ini memungkinkan identitas proses selaras dengan kepemilikan file melalui mount walaupun ID mentah inode berada pada rentang numerik lain.
Properti tersebut berguna bagi workload terisolasi yang user namespace-nya memakai rentang ID host yang tidak saling tumpang tindih. Sebuah tree filesystem dapat diekspos kepada workload semacam itu dengan pemetaan mount yang kompatibel tanpa menulis ulang setiap inode ke ID sisi host milik workload.
Pemetaan tidak memberikan kewenangan arbitrer di luar aturan kontrol akses normal. Mode bit, pemrosesan ACL, capability, perilaku filesystem, kredensial pemanggil, dan mekanisme keamanan aktif lain tetap berperan. Idmapped mount mengubah translasi identitas yang dipakai oleh path VFS yang mendukungnya; mekanisme ini bukan bypass umum terhadap kontrol akses diskresioner atau mandatori.
Beberapa mount dapat menampilkan kepemilikan berbeda
Karena pemetaan melekat pada mount dan bukan pada inode, dua mount dapat mengekspos objek dasar yang sama dengan translasi identitas berbeda. Ini merupakan properti isolasi utama sekaligus batas operasional.
Tool yang membandingkan kepemilikan antar-path dapat melaporkan identitas numerik berbeda walaupun kedua path mengarah ke inode dasar yang sama. Perangkat lunak backup, policy engine, layanan berbagi file, dan tool diagnostik perlu membedakan kepemilikan filesystem mentah dari kepemilikan yang terlihat melalui mount tertentu ketika perbedaan tersebut memengaruhi keputusan mereka.
Proses yang menerima file descriptor yang dibuka melalui idmapped mount juga tidak semestinya membangun kembali model keamanannya hanya dari pathname yang diamati di tempat lain. File descriptor mempertahankan referensi ke objek kernel dan konteks mount dengan cara yang dapat tersamarkan oleh penalaran berbasis pathname saja.
Dukungan filesystem menetapkan batas deployment
Idmapped mount memerlukan dukungan dari filesystem dan path VFS yang relevan. Dukungan telah meluas pada berbagai filesystem Linux, tetapi dukungan pada satu filesystem atau rilis kernel tidak berarti perilaku identik tersedia di semua tempat. Stacked filesystem menambah lapisan lain karena pemetaan mount miliknya dapat berinteraksi dengan pemetaan pada layer dasar sesuai semantik khusus filesystem tersebut.
Overlayfs memperlihatkan perbedaan ini: idmapping pada overlay mount memengaruhi tampilan dan interpretasi kepemilikan pada tampilan overlay, sedangkan akses ke layer dasar mengikuti aturan overlayfs serta pemetaan apa pun yang terkait dengan mount layer tersebut. Menganggap semua layer sebagai satu domain identitas yang dapat dipertukarkan dapat menghasilkan asumsi akses yang keliru.
Model keamanan yang bertahan adalah model relatif terhadap mount. Kepemilikan inode yang tersimpan tetap menjadi satu input, idmapping mount menyediakan translasi identitas, dan aturan VFS serta filesystem aktif menentukan pemeriksaan akses yang dihasilkan. Batas ini memungkinkan tampilan kepemilikan lokal tanpa mengubah kebutuhan namespace sementara menjadi penulisan ulang metadata persisten.