Langsung ke konten

Arsip

Linux

180 artikel
Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux userfaultfd Memindahkan Penanganan Page Fault Terpilih ke User Space

Page fault biasanya membawa eksekusi dari proses ke kernel dan baru kembali setelah kernel menyelesaikan kondisi virtual-memory atau mengirim error. Linux userfaultfd dapat menyisipkan komponen user-space ke jalur tersebut untuk rentang alamat yang didaftarkan secara eksplisit. Kernel melaporkan fault terpilih melalui file descriptor, memblokir execution context yang mengalami fault saat mode mengharuskannya, lalu menerima ioctl yang menyelesaikan fault tersebut. Ini adalah antarmuka virtual-memory Linux, bukan jaminan memori dari C atau POSIX. Perilakunya bergantung pada fitur kernel yang dinegosiasikan, rentang terdaftar, jenis mapping, dan mode registrasi.

Rekayasa Perangkat Lunak 18 Sep 2026 6 min read

Linux splice Menjadikan Kapasitas Pipe Bagian dari Semantik Transfer Data

Linux splice() dapat memindahkan byte antar-file descriptor tanpa mengalirkan byte tersebut melalui buffer user space, tetapi interface ini bukan primitive penyalinan generik dari sembarang descriptor ke descriptor lain. Sedikitnya satu endpoint harus berupa pipe. Syarat tersebut membuat state pipe menjadi bagian dari kontrak transfer: kapasitas, data yang dapat dibaca, keberadaan writer, mode blocking, dan progres parsial dapat memengaruhi jalur data yang tampak sederhana. Batas yang relevan bukan sekadar “salinan kernel versus salinan user.” splice() mengubah bentuk ownership dan flow control. Kode aplikasi tidak lagi memiliki array byte perantara, tetapi tetap memiliki control loop yang menghitung byte yang sudah dipindahkan, menangani readiness, dan mempertahankan semantik offset.

Rekayasa Perangkat Lunak 18 Sep 2026 6 min read

Linux signalfd Mengubah Sinyal Pending menjadi Read Descriptor

Linux signalfd memberi sinyal terpilih jalur konsumsi berbasis descriptor. Alih-alih memindahkan kontrol ke handler asinkron, proses dapat memblokir sinyal tersebut, mengaitkannya dengan objek signalfd, lalu mengonsumsi instance yang pending melalui read(). Descriptor ini juga dapat masuk ke poll(), select(), dan epoll, sehingga penerimaan sinyal dapat berada bersama socket, timer, dan sumber readiness lain. Antarmuka ini khusus Linux. Signal mask, aturan pending signal, dan operasi descriptor berasal dari semantik sinyal Linux serta POSIX pada bagian yang relevan; semuanya bukan properti bahasa C itu sendiri.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux signalfd Mengubah Signal Terpilih Menjadi Read Descriptor

Signal yang masuk ke mask signalfd dapat muncul sebagai state readable pada file descriptor alih-alih menjalankan asynchronous signal handler, selama signal tersebut diblokir dari delivery biasa pada thread yang relevan. Batas interface pun berubah: kedatangan signal dapat ikut dalam event loop berbasis descriptor yang sama dengan socket, pipe, dan objek pollable lain. Mekanisme ini tidak mengganti semantik signal Linux. Pembentukan signal, signal mask pada proses dan thread, state pending, penggabungan standard signal, antrean real-time signal, serta aturan delivery tetap berlaku. signalfd mengubah interface konsumsi untuk signal yang dipilih oleh mask-nya.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux renameat2 Membuat Kebijakan Penggantian Path Bersifat Atomik

Rename pathname mengubah entri direktori sementara file descriptor yang sudah terbuka tetap merujuk ke objek dasar yang sama. Linux renameat2() menambahkan kebijakan pada pembaruan namespace tersebut: pemanggil dapat menolak penggantian, menukar dua nama yang sudah ada, atau meminta whiteout untuk operasi union filesystem. Kebijakan ini dijalankan sebagai bagian dari operasi rename, bukan sebagai pemeriksaan terpisah di userspace. Interface ini khusus Linux. Argumen flags bernilai nol memberikan perilaku renameat(), sedangkan flag nonnol menambahkan semantik Linux yang juga bergantung pada dukungan filesystem yang di-mount.

Rekayasa Perangkat Lunak 18 Sep 2026 6 min read

Linux pidfd Mengikat Operasi Proses ke Referensi Kernel yang Stabil

Process ID numerik adalah nama di dalam PID namespace, bukan handle permanen untuk satu masa hidup proses. Setelah proses berhenti dan PID-nya tersedia untuk dipakai kembali, proses lain dapat memperoleh nomor yang sama. PID file descriptor di Linux menyediakan batas antarmuka berbeda: sebuah pidfd adalah file descriptor yang merujuk ke task tertentu, sehingga operasi berikutnya dapat menargetkan referensi kernel tersebut tanpa meresolusi PID numerik lagi. Perbedaan ini relevan pada supervisor, service manager, launcher, dan kode lain yang bertindak terhadap proses setelah suatu jeda. Persoalannya bukan bahwa penggunaan PID selalu tidak aman. PID numerik dan referensi objek yang dipertahankan memiliki semantik masa hidup yang berbeda.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

Linux pidfd Mengikat Operasi Proses ke Identitas Kernel yang Stabil

PID numerik menamai proses melalui lookup dalam namespace. Nomor tersebut dapat dipakai kembali setelah proses berakhir dan sudah di-reap. PID file descriptor pada Linux mengubah batas ini: sebuah pidfd adalah file descriptor yang merujuk ke task tertentu, sehingga operasi berikutnya dapat menargetkan referensi tersebut tanpa melakukan resolusi PID numerik lagi. Perilaku manajemen proses ini khusus Linux. Perilaku tersebut bukan properti identifier proses POSIX ataupun bahasa C. PID numerik adalah nama, bukan handle permanen Jalur kontrol yang umum menyimpan PID, menunggu kondisi eksternal, lalu memanggil kill(pid, sig). Kedua operasi itu terpisah oleh waktu. Jika proses awal telah berakhir dan PID-nya sudah didaur ulang sebelum operasi signal, lookup numerik baru dapat menunjuk proses yang berbeda.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux openat2 Membatasi Resolusi Path di Dalam Batas Direktori

Pathname yang diberikan ke openat2() dapat diresolusikan relatif terhadap file descriptor direktori sambil meminta kernel menegakkan batas pada proses resolusi itu sendiri. Perbedaan ini penting saat proses menerima komponen path dari sumber dengan tingkat kepercayaan lebih rendah. Pemeriksaan string dapat memeriksa teks pathname, tetapi pemeriksaan itu sendiri tidak dapat membekukan namespace filesystem selama lookup berlangsung. openat2() menempatkan kebijakan bersama operasi lookup. struct open_how memisahkan flag open biasa dari flag resolve yang membatasi traversal. Batas yang dihasilkan berkaitan dengan semantik resolusi, bukan sekadar bentuk teks sebuah path.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux O_PATH Memisahkan Referensi Objek dari Otoritas I/O

open() biasanya menggabungkan dua efek: resolusi pathname memilih objek sistem file, lalu file descriptor yang dihasilkan membawa mode akses untuk I/O data. Linux O_PATH memisahkan kedua efek tersebut. open(path, O_PATH) yang berhasil menghasilkan descriptor yang merujuk objek terpilih, sementara read() dan write() biasa melalui descriptor itu tidak diizinkan. Pemisahan ini berguna ketika proses memerlukan referensi kernel yang tahan terhadap perubahan nama untuk operasi metadata atau operasi relatif terhadap pathname, tanpa membuka objek untuk transfer data. Analisis race juga berubah: operasi berikutnya dapat dimulai dari descriptor, bukan melakukan resolusi ulang terhadap pathname awal.

Rekayasa Perangkat Lunak 18 Sep 2026 5 min read

Linux inotify Melaporkan Event Entri Direktori, Bukan Identitas Path yang Persisten

Sebuah watch inotify tidak menjadikan pathname sebagai identifier yang persisten. Linux menempelkan watch pada objek filesystem yang dipilih saat inotify_add_watch() berhasil, lalu menghasilkan record yang mendeskripsikan aktivitas terkait objek yang dipantau dan entri direktori. Nama dapat berpindah, objek dapat hilang, dan detail event dapat terlewat ketika queue mengalami overflow. Batas ini relevan bagi file synchronizer, pemuat ulang konfigurasi, indexer, dan service supervisor. Event stream dapat memberi sinyal bahwa state filesystem lokal berubah, tetapi rekonstruksi state yang otoritatif tetap bergantung pada operasi filesystem yang dilakukan setelah event diterima.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

Linux eventfd Merepresentasikan State Counter melalui Readiness Descriptor

Objek eventfd menyimpan counter unsigned 64-bit di kernel dan mengekspos state tersebut melalui file descriptor. Operasi write menambah counter dalam batas yang ditentukan; operasi read mengonsumsi state counter; antarmuka readiness menunjukkan apakah suatu operasi dapat berjalan tanpa blocking. Hasilnya adalah batas sinkronisasi ringkas yang cocok dengan event loop berbasis descriptor tanpa mengubah counter menjadi byte stream. Antarmuka ini khusus Linux. Jaminannya berasal dari kontrak system call eventfd dan semantik descriptor kernel, bukan dari bahasa C atau POSIX.

Rekayasa Perangkat Lunak 18 Sep 2026 7 min read

Linux copy_file_range Memisahkan Semantik Penyalinan dari Pergerakan Data

copy_file_range() meminta Linux menyalin byte di antara regular file tanpa mengharuskan aplikasi memindahkan byte tersebut melalui buffer user space. Pemanggilan ini mendefinisikan operasi rentang byte, tetapi tidak menentukan mekanisme transfer fisiknya. Filesystem dapat melakukan pergerakan data biasa, memakai mekanisme sharing copy-on-write seperti reflink, atau memakai jalur akselerasi lain yang didukung sambil mempertahankan isi file yang terlihat sesuai operasi tersebut. Pemisahan itu merupakan batas utama API. Aplikasi menentukan rentang sumber dan tujuan lalu mengamati jumlah byte yang dikembalikan. Kernel dan filesystem tetap memiliki keleluasaan untuk memilih mekanisme yang merealisasikan salinan.

Rekayasa Perangkat Lunak 18 Sep 2026 7 min read

Linux close_range Menjadikan Pembersihan Tabel Descriptor sebagai Operasi Rentang

Proses yang bersiap mengeksekusi program lain sering memerlukan invariant descriptor yang sederhana: standard input, output, dan error tetap tersedia, sedangkan descriptor yang tidak terkait tidak melewati batas eksekusi. Menutup descriptor satu per satu dapat mengubah invariant tersebut menjadi persoalan enumerasi. Linux close_range() menerapkan operasi pada interval numerik inklusif di tabel file descriptor milik task pemanggil. Antarmukanya kecil, tetapi semantiknya menjangkau sharing tabel descriptor, pewarisan melalui execve(), alokasi descriptor secara concurrent, dan transisi privilege. Flag yang dipilih menentukan lebih dari strategi implementasi: flag tersebut menetapkan apakah descriptor langsung hilang, menjadi close-on-exec, atau terlebih dahulu dipisahkan dari tabel yang dibagi dengan task lain.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

Linux close_range Menjadikan Pembersihan Descriptor sebagai Operasi Tabel

Proses yang bersiap menjalankan execve() sering memerlukan invariant sederhana: descriptor di atas allowlist kecil tidak boleh bertahan ke program baru. Menutup nomor descriptor satu per satu mengubah invariant tersebut menjadi masalah enumerasi. Linux close_range() menyatakannya langsung sebagai operasi pada interval inklusif di tabel file descriptor milik task pemanggil. Interface ini khusus Linux. Perilakunya berasal dari semantik file table dan system call Linux, bukan dari bahasa C atau jaminan POSIX yang portabel.

Rekayasa Perangkat Lunak 18 Sep 2026 3 min read

Link io_uring Menserialkan Request yang Saling Bergantung

Dua submission queue entry io_uring yang bersebelahan pada kondisi normal merupakan request independen. Menetapkan IOSQE_IO_LINK pada entry pertama mengubah hubungan itu: request berikutnya tidak mulai sebelum request yang ditautkan selesai. Pengulangan flag tersebut membentuk rantai berurutan di dalam satu batch submission. Sifat pengurutan ini lebih sempit daripada serialisasi queue secara global. Request di luar rantai tetap dapat berjalan secara independen, dan rantai terpisah dapat berjalan tumpang tindih. Sebuah link dengan demikian menyatakan dependensi antar-SQE tertentu, bukan memasang barrier pada seluruh ring.

Keamanan Siber 18 Sep 2026 7 min read

Landlock Menambahkan Lapisan Pembatasan Lokal Proses pada Kontrol Akses Linux

Sebuah service dapat dimulai dengan seluruh izin filesystem yang diberikan kepada identitas Unix-nya, tetapi hanya memerlukan sebagian kecil izin tersebut setelah inisialisasi. Mengganti akun service atau topologi mount dapat mengurangi otoritas itu, tetapi keduanya merupakan keputusan pada tingkat deployment. Linux Landlock menyediakan batas yang berbeda: proses dapat menambahkan pembatasan pada dirinya sendiri dan turunannya tanpa memperoleh privilege untuk memberikan akses baru. Landlock adalah Linux Security Module yang dapat ditumpuk. Aturannya menjadi constraint tambahan, bukan pengganti discretionary access control, capabilities, atau kebijakan LSM lain yang aktif. Aturan Landlock tidak dapat mengubah operasi yang ditolak menjadi diizinkan. Landlock hanya dapat menghapus otoritas yang sebelumnya dimiliki proses.

Keamanan Siber 18 Sep 2026 5 min read

Kredensial Peer UNIX Socket Mengikat IPC Lokal ke Identitas yang Diamati Kernel

Sebuah daemon lokal berprivilege menerima request melalui socket AF_UNIX dan perlu memutuskan apakah pengirim boleh menjalankan suatu operasi. Mempercayai UID, PID, atau nama akun yang dikodekan di dalam request hanya berarti mempercayai data yang diberikan client. Linux menyediakan kanal identitas berbeda: kernel dapat mengekspos kredensial yang terkait dengan peer atau dengan satu pesan tertentu. SO_PEERCRED dan SCM_CREDENTIALS sama-sama membawa struct ucred, tetapi keduanya menggambarkan momen berbeda dalam relasi IPC. Menganggap keduanya setara dapat mengubah batas otorisasi lokal yang kuat menjadi asumsi identitas yang sudah stale.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

Handled Rights Landlock Menetapkan Batas Sandbox Deny-by-Default

Sebuah ruleset Landlock tidak otomatis menolak setiap operasi yang dikenal kernel. Ruleset terlebih dahulu menyatakan access rights yang ditanganinya. Setelah ruleset diberlakukan, action yang ditangani tersebut ditolak secara default kecuali rule yang cocok memberinya izin. Batas eksplisit ini menjadi bagian penting dari kompatibilitas Landlock. User space dapat membatasi rights yang dikenal dan telah diuji, sementara kernel yang lebih baru dapat menyediakan rights tambahan yang tidak pernah disebut binary lama. Handled rights memilih kumpulan action yang dibatasi landlock_create_ruleset() menerima landlock_ruleset_attr dengan access mask yang menentukan action yang dikontrol ruleset baru.

Keamanan Siber 18 Sep 2026 6 min read

fs-verity Mengikat Pembacaan File pada Digest Merkle Tree

Package manager dapat menempatkan executable pada filesystem yang writable, menutupnya, lalu mengharapkan setiap byte yang dibaca kemudian tetap sama dengan objek yang sebelumnya disetujui. Permission biasa dapat menghentikan penulis yang tunduk pada kebijakan, tetapi tidak mengubah isi file menjadi objek dengan identitas kriptografis. Linux fs-verity menyediakan properti yang lebih sempit untuk file individual: setelah verity diaktifkan, data file menjadi read-only dan pembacaan diperiksa terhadap Merkle tree yang berakar pada digest file yang stabil.

Linux 18 Sep 2026 5 min read

Flag Resolve openat2 Membatasi Traversal Path per Operasi Open

Sebuah pathname yang diberikan ke openat2() dapat ditolak walaupun pathname yang sama berhasil diresolusikan melalui openat(). Perbedaannya berasal dari open_how.resolve: Linux dapat menerapkan batas traversal ketika setiap komponen path diresolusikan untuk satu operasi open. Batas penanganan path pun berubah. File descriptor direktori dapat berfungsi lebih dari sekadar titik awal; flag resolve dapat membatasi escape, traversal symbolic link, perpindahan mount, dan lookup yang membutuhkan pekerjaan di luar state cache. Kebijakan resolusi melekat pada satu operasi openat2() memperluas model openat() dengan struct open_how yang dapat diperluas:

Keamanan Siber 18 Sep 2026 4 min read

Flag Resolusi openat2 Membatasi Traversal Path pada Batas Kernel

Sebuah layanan dapat memvalidasi pathname tetapi tetap membuka objek yang berbeda jika namespace berubah antara validasi dan pemakaian. Symbolic link, topologi mount, operasi rename, dan link khusus procfs membuat resolusi pathname menjadi operasi kernel dengan state yang dapat berubah secara konkuren. Linux openat2() menangani sebagian batas ini dengan melekatkan batasan resolusi pada lookup yang menghasilkan file descriptor. Properti keamanannya lebih sempit daripada sanitasi path secara umum. openat2() tidak menyatakan bahwa sebuah pathname aman. Syscall ini memungkinkan pemanggil meminta kernel menolak perilaku resolusi tertentu saat kernel menjalankan path walk.

Rekayasa Perangkat Lunak 18 Sep 2026 4 min read

eventfd Mengubah Status Counter Menjadi Readiness Descriptor

Descriptor eventfd menjadi readable saat counter yang dipelihara kernel bernilai lebih besar dari nol. Sebuah write tidak memasukkan pesan dengan panjang variabel ke antrean. Operasi itu menambahkan nilai unsigned 64-bit ke counter, sehingga status notifikasi yang terakumulasi tampil sebagai readiness file descriptor biasa. Batas ini berguna ketika thread atau fasilitas kernel perlu membangunkan event loop tanpa membentuk protokol byte stream. Status yang dibawa descriptor sengaja sempit: sebuah counter, kondisi readiness, dan dua pilihan semantik konsumsi.

Linux 18 Sep 2026 4 min read

eventfd Mengagregasi Notifikasi dalam Counter Kernel

Sebuah eventfd dapat menyerap beberapa write notifikasi sebelum userspace melayani descriptor. Kernel menyimpan write tersebut dalam counter 64-bit, sehingga readiness merepresentasikan state counter yang tertunda, bukan antrean dengan satu record untuk setiap notifikasi. Perbedaan ini penting di event loop. Producer dapat menambah nilai saat consumer sedang sibuk, lalu read berikutnya dapat melebur state yang terakumulasi menjadi satu hasil. Dengan EFD_SEMAPHORE, objek yang sama menyediakan aturan konsumsi berbeda tanpa mengubah model readiness-nya.

Keamanan Siber 18 Sep 2026 5 min read

Event Permission Fanotify Menempatkan Akses File di Balik Keputusan Userspace

Sebuah proses memanggil execve() untuk binary pada filesystem yang dipantau, tetapi kernel tidak langsung menyelesaikan execution open. Sebuah grup fanotify meminta FAN_OPEN_EXEC_PERM, sehingga akses menunggu ketika listener userspace menerima event lalu mengembalikan FAN_ALLOW atau FAN_DENY. Mekanisme ini menyisipkan keputusan userspace sinkron ke dalam operasi filesystem yang semestinya berjalan setelah pemeriksaan permission kernel biasa. Titik intersepsi tersebut berguna bagi policy engine yang memerlukan informasi di luar permission inode biasa, tetapi juga membentuk batas enforcement tersendiri. Availability kini bergantung pada responder userspace, cakupan event bergantung pada mark dan kelas event fanotify yang dipilih, dan mekanisme ini tidak mengubah setiap bentuk penggunaan file menjadi operasi yang dimediasi.