Memahami fondasi AppArmor: konsep profil per aplikasi yang menentukan akses file, jaringan, capabilities, dan sinyal; dua mode kerja enforce dan complain; perbandingan AppArmor dengan SELinux; hingga komponen kernel LSM dan tools userspace seperti apparmor_parser dan libapparmor.

Di episode 1 kita menelusuri sejarah AppArmor: mengapa dunia butuh MAC, kelahirannya di Immunix, dan adopsi besar-besaran oleh Ubuntu, Debian, Docker, hingga ChromeOS. Kini saatnya memahami bagaimana AppArmor sebenarnya bekerja di dalam. Episode ini adalah fondasi teknis: semua episode setelah ini akan berdiri di atas konsep yang kita bangun di sini.
Tiga hal yang akan kita kuasai: konsep profil sebagai unit kebijakan AppArmor, mode kerja yang menentukan apakah aturan dijalankan atau hanya dicatat, dan arsitektur yang menghubungkan kernel dengan tools userspace. Setelah episode ini, kalian akan bisa menjelaskan kepada orang lain apa itu AppArmor tanpa membuka dokumentasi.
Unit dasar AppArmor adalah profil — seperangkat aturan yang melekat pada satu aplikasi (executable) dan menentukan apa yang boleh dilakukan proses turunannya. Nama profil biasanya mengikuti path executable, misalnya /usr/sbin/nginx. Analoginya: profil adalah kontrak kerja seorang karyawan — sebelum masuk gedung, karyawan itu disodori kontrak yang menyebutkan ruangan mana yang boleh ia masuki, dokumen apa yang boleh ia baca, dan peralatan apa yang boleh ia pakai.
Profil AppArmor mengatur beberapa dimensi akses:
| Dimensi | Yang diatur | Contoh |
|---|---|---|
| File | Akses file berdasarkan path | r, w, m, k |
| Network | Socket dan protokol | network tcp, network udp |
| Capabilities | Hak istimewa Linux | capability net_bind_service |
| Mount | Operasi filesystem | mount, remount, umount |
| ptrace | Inspeksi antar proses | ptrace trace peer=... |
| Signals | Pengiriman sinyal | signal send peer=... |
Prinsip paling penting yang wajib kalian internalisasi: proses tanpa profil adalah proses yang kebal. Kalau sebuah aplikasi tidak punya profil sama sekali, AppArmor tidak membatasi apa pun — ia berjalan persis seperti tanpa MAC. Nilai keamanan muncul justru ketika kita memberi profil. Ini berbeda dengan beberapa MAC lain yang mencoba melabeli semua objek.
Di dimensi file, AppArmor mengenal empat akses dasar yang akan kalian temui terus-menerus:
| Akses | Arti |
|---|---|
r | Baca file |
w | Tulis file |
m | Memory-map file (mmap) — termasuk memuat library |
k | Mengunci file (file lock) |
m sering menjadi sumber denial yang membingungkan pemula: sebuah program boleh mengeksekusi biner, tapi gagal menjalankan library karena library itu tidak diizinkan di-mmap. Kita akan membedah ini lebih dalam di episode 4 saat menulis profil.
Setiap profil dijalankan dalam salah satu dari dua mode:
Analogi yang pas: enforce adalah teman yang menahanmu saat kalian mau masuk ruangan terlarang, sedangkan complain adalah teman yang hanya mencatat setiap pintu yang kalian coba buka tanpa menahan — lalu memberimu laporan di akhir hari. Log itulah bahan untuk menyempurnakan profil.
Mode complain adalah salah satu keunggulan terbesar AppArmor untuk produksi: kalian bisa meluncurkan aplikasi dengan profil baru dalam mode complain, mengumpulkan perilaku aslinya selama beberapa hari, lalu menaikkannya ke enforce dengan percaya diri.
Ini pertanyaan yang paling sering muncul di komunitas: kenapa AppArmor bukan SELinux? Jawabannya ada pada basis keputusan:
owner /etc/nginx/nginx.conf r. Saat sebuah proses mengakses file, kernel membandingkan path file itu dengan aturan profil. Mudah dipahami dan ditulis karena langsung mencerminkan struktur filesystem.| Aspek | AppArmor | SELinux |
|---|---|---|
| Basis keputusan | Path file | Label/type konteks |
| Menulis aturan | Tulis path langsung | Atur label + tulis aturan |
| Kemudahan pemula | Relatif mudah | Lebih curam |
| Ekspresivitas objek non-file | Terbatas | Sangat tinggi |
| Distro default | Ubuntu, Debian, openSUSE | RHEL, Fedora, Rocky |
Perbandingan ini bukan soal mana yang "lebih baik" — keduanya sama-sama MAC yang sudah terbukti. Pertanyaannya adalah konteks: di ekosistem yang berbasis path (Debian/Ubuntu), AppArmor adalah pilihan natural. Dan ingat, keduanya bisa hidup berdampingan di satu sistem melalui LSM stacking modern.
AppArmor terdiri dari dua dunia yang bekerja bersama:
Di sisi kernel, AppArmor diimplementasikan sebagai Linux Security Module (LSM). LSM adalah kerangka hook keamanan di kernel yang dipanggil setiap kali ada operasi sensitif: membuka file, membuat socket, memanggil mount, dan seterusnya. Hook AppArmor memeriksa profil proses yang aktif — jika ada, keputusan diambil berdasarkan aturan; jika tidak ada, operasi dibiarkan lolos.
Kernel mengekspos dua area penting:
/sys/kernel/security/apparmor — securityfs tempat kernel mempublikasikan status dan profil yang dimuat, dan tempat userspace menulis policy.Di sisi userspace, tiga komponen utama:
| Komponen | Peran |
|---|---|
apparmor_parser | Mengompilasi file profil teks menjadi biner dan memuatnya ke kernel |
aa-status | Membaca status runtime dari kernel dan mencetak laporan |
libapparmor | Library bersama yang dipakai tools untuk berkomunikasi dengan kernel |
Sumber kebenaran berada di /etc/apparmor.d/ — direktori tempat semua file profil teks disimpan. Saat sistem boot (atau saat kalian menjalankan apparmor_parser), profil di direktori ini dikompilasi dan dimuat ke kernel. Alur lengkapnya:
/etc/apparmor.d/nginx
│ ditulis sebagai teks
▼
apparmor_parser (kompilasi + load)
│
▼
Kernel LSM (memuat aturan ke memori)
│
▼
Hook LSM menilai akses proses terhadap pathAlur inilah yang akan kalian pegang di episode 3 dan 4: menulis profil di /etc/apparmor.d/, memuatnya dengan apparmor_parser, lalu memverifikasi dengan aa-status.
m sama dengan r. m mengizinkan memory-mapping file — kritis untuk library. Tanpa m, program bisa gagal dijalankan meski r sudah diizinkan.Pada episode 2 ini kita telah membangun fondasi teknis AppArmor: konsep profil sebagai unit kebijakan per aplikasi, aturan file r w m k serta dimensi lain seperti network, capabilities, mount, ptrace, dan signals; dua mode kerja enforce dan complain; perbandingan path-based vs type-based dengan SELinux; hingga arsitektur kernel LSM dan komponen userspace apparmor_parser, aa-status, dan libapparmor.
Inti yang harus kalian bawa:
/etc/apparmor.d/, diproses apparmor_parser, diverifikasi dengan aa-status.Di episode 3 selanjutnya, kita akan masuk ke praktik pertama: status, mode, dan load/unload profil — membaca status lengkap dengan aa-status, memeriksa apakah AppArmor aktif dengan aa-enabled, mengubah mode enforce/complain, serta memuat dan melepas profil dengan apparmor_parser. Pastikan tetap semangat, karena mulai episode inilah kalian menyentuh AppArmor secara langsung!