Langsung ke konten

Arsip

File Descriptor

32 artikel
Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

Seal memfd Mengubah File Bersama Menjadi Objek Monotonik

Sebuah memfd Linux dapat bermula sebagai file anonim yang writable, lalu memperoleh pembatasan yang tidak dapat dihapus. Pembatasan tersebut melekat pada inode, sehingga transfer atau duplikasi descriptor tidak menghasilkan tampilan yang lebih longgar. Setelah sebuah seal berhasil ditambahkan, setiap descriptor yang merujuk inode itu tunduk pada seal tersebut. Sifat ini berbeda dari access mode pada descriptor. Descriptor dapat membawa flag lokal, sedangkan seal mengubah batas mutasi pada objek file bersama itu sendiri.

Linux 17 Sep 2026 4 min read

O_CLOEXEC Menutup Descriptor Secara Atomik Saat exec

File descriptor yang dibuat tanpa status close-on-exec dapat ikut terbawa ke program baru selama celah konkurensi yang sangat sempit. Pada proses Linux multithread, mengatur FD_CLOEXEC lewat pemanggilan fcntl() setelah descriptor dibuat meninggalkan interval antara pembuatan descriptor dan pembaruan flag tersebut. O_CLOEXEC menghilangkan operasi dua tahap itu. Kernel membuat descriptor dengan flag close-on-exec yang sudah aktif sejak awal, sehingga thread lain tidak dapat melihat kondisi antara ketika descriptor sudah ada tetapi masih bisa diwariskan melalui execve() yang berhasil.

Rekayasa Perangkat Lunak 17 Sep 2026 4 min read

Linux pidfd Mengikat Identitas Proses ke File Descriptor

PID numerik adalah nama dari namespace kernel yang dapat digunakan kembali. Setelah sebuah proses keluar dan PID-nya tersedia lagi, proses lain dapat menerima nomor yang sama. Linux pidfd menyediakan bentuk referensi berbeda: file descriptor yang terikat pada task tertentu, bukan nomor yang harus diresolusi ulang pada setiap operasi. Perbedaan ini mengubah batas antara penemuan proses dan kontrol proses berikutnya. Program dapat meresolusi PID sekali melalui pidfd_open(), menyimpan descriptor hasilnya, lalu memakai antarmuka berbasis pidfd tanpa menganggap PID numerik sebagai identitas permanen.

Rekayasa Perangkat Lunak 17 Sep 2026 6 min read

Linux O_TMPFILE Menjaga File Staging di Luar Namespace

Linux O_TMPFILE membuat regular file tanpa lebih dulu menempatkan nama file tersebut di sebuah direktori. Pemanggil menerima file descriptor dan dapat menulis data, menetapkan metadata, atau membatalkan objek saat belum ada pathname yang mengekspos file yang baru disiapkan sebagian. Jika publikasi diperlukan, operasi link berikutnya dapat memasang directory entry pada inode yang sama. Mekanisme ini memisahkan konstruksi objek dari publikasi namespace. Mekanisme tersebut tidak membuat seluruh operasi filesystem di sekitarnya menjadi transaksional, dan tidak menyediakan semantik penggantian untuk tujuan yang sudah ada. Batas manfaatnya lebih sempit: state file perantara dapat tetap terjangkau hanya melalui referensi terbuka sampai proses secara eksplisit membuat nama.

Linux 17 Sep 2026 4 min read

File Descriptor yang Diduplikasi Berbagi Satu Open File Description

Dua nomor file descriptor dapat mengubah file offset yang sama. Di Linux, hal ini terjadi ketika kedua descriptor merujuk pada satu open file description, seperti setelah dup() atau pada descriptor yang diwariskan setelah fork(). Perbedaan ini penting karena file descriptor adalah integer yang terlihat oleh process, sedangkan open file description adalah objek kernel yang menyimpan state untuk satu instance file yang dibuka. Menganggap kedua lapisan ini sama dapat menyebabkan interferensi offset, perubahan status flag yang melintasi batas descriptor, dan perilaku mengejutkan setelah process dibuat.

Keamanan Siber 17 Sep 2026 5 min read

execveat Mengikat Eksekusi Program ke Referensi File yang Sudah Dibuka

Sebuah launcher memilih executable dari suatu direktori, memeriksa atribut atau kontennya, lalu menjalankannya. Jika tahap pemilihan dan eksekusi masing-masing melakukan resolusi pathname secara terpisah, rename, perubahan symlink, atau penggantian direktori di antara kedua operasi dapat membuat objek yang dieksekusi berbeda dari objek yang diperiksa. Linux execveat() dapat memindahkan batas tersebut dari lookup pathname kedua ke referensi file yang sudah diperoleh. Dengan AT_EMPTY_PATH, pathname kosong memberi instruksi kepada kernel untuk mengeksekusi objek yang dirujuk oleh dirfd. Descriptor tersebut dapat dibuka dengan O_PATH. Keputusan eksekusi tetap melewati pemeriksaan permission dan format executable normal di kernel, tetapi pemilihan objek tidak lagi bergantung pada resolusi ulang pathname asal.

Keamanan Siber 17 Sep 2026 5 min read

Close-on-Exec Menjadikan Pewarisan Descriptor sebagai Batas Eksplisit

Sebuah service membuka socket berprivilege, menjalankan program helper, dan mengharapkan helper hanya menerima standard input, output, serta error. Satu descriptor yang dibuat tanpa close-on-exec dapat melanggar batas tersebut secara diam-diam. Jika descriptor masih ada saat image program baru dipasang, helper mewarisi akses ke objek kernel meski credentials miliknya sendiri tidak akan dapat membuka objek itu. Linux memperlakukan kondisi ini sebagai pewarisan descriptor, bukan peristiwa otorisasi baru. Keputusan keamanan ketika objek dibuka sudah melekat pada descriptor. FD_CLOEXEC mengatur apakah otoritas yang sudah terbentuk itu melintasi execve() yang berhasil.

Keamanan Siber 17 Sep 2026 5 min read

close_range dengan UNSHARE Memisahkan Tabel Descriptor Sebelum Penutupan Massal

Proses Linux multithread dapat mencapai batas yang rumit tepat sebelum execve(): satu thread hendak membuang setiap file descriptor di atas standard input, output, dan error, sementara thread lain masih dapat membuat descriptor pada tabel yang sama. Loop pemanggilan close() menangani nomor descriptor satu per satu, tetapi tidak dengan sendirinya mengubah fakta bahwa tabel tersebut dibagi. close_range() dengan CLOSE_RANGE_UNSHARE menangani race spesifik itu. Kernel terlebih dahulu memberi caller tabel file descriptor yang tidak lagi dibagi dengan pengguna lain dari tabel lama, lalu menerapkan penutupan massal yang diminta pada tabel milik caller. Properti keamanannya berkaitan dengan kepemilikan tabel selama pembersihan, bukan sekadar pengurangan jumlah system call.