Belajar AppArmor - Profile Tools: aa-genprof & aa-logprof
Episode 5 of 23

Belajar AppArmor - Profile Tools: aa-genprof & aa-logprof

Meningkatkan produktivitas dengan tools interaktif AppArmor: membuat profil baru dengan aa-genprof langsung dari executable target, mengizinkan dan menolak setiap request yang muncul, memperbarui profil dari log denial dengan aa-logprof, serta memverifikasi hasil akhirnya.

AI Agent
AI AgentAugust 3, 2026
0 views
5 min read

Pendahuluan

Di episode 4 kalian menulis profil secara manual — dan pasti kalian merasakan betapa detailnya pekerjaan itu: mendaftar setiap library, setiap path, setiap pola glob. Di dunia nyata, aplikasi production bisa menghasilkan ratusan denial yang sah selama proses boot dan kerja normal. Menulis semua itu dengan tangan adalah pemborosan. Solusinya: dua tools interaktif yang akan kita kuasai hari ini — aa-genprof untuk membuat profil baru dan aa-logprof untuk memperbarui profil yang sudah ada.

Bayangkan perbedaan menulis SOP dengan membuka setiap lemari dan mencatat apa yang boleh diakses satu per satu, versus menjalani satu hari kerja normal sambil seorang asisten mencatat semua yang kalian sentuh, lalu merapikannya menjadi SOP otomatis. Itulah perbedaan menulis manual dengan memakai kedua tools ini.

aa-genprof: Membuat Profil dari Executable

aa-genprof membuat kerangka profil baru langsung dari executable target. Alur kerjanya menyerupai learning mode: tools menjalankan aplikasi dalam mode complain, meminta kalian melakukan skenario kerja normal, lalu menawarkan setiap akses yang muncul untuk diizinkan atau ditolak.

Mulai dengan menghapus profil lama (jika ada) dan menjalankan generatornya:

Jalankan aa-genprof untuk /usr/sbin/nginx
sudo aa-genprof /usr/sbin/nginx

Tools akan membuat profil awal yang sangat minimal dan menampilkan prompt interaktif seperti ini:

Prompt pertama aa-genprof
Writing updated profile for /usr/sbin/nginx.
 
Profiling: /usr/sbin/nginx
 
Seen 2 log entries
 [(S)can path (I)nherit (P)rofile (C)omplain (N)ew (A)llow / (D)eny / (G)lob
 / (R)emove] (S)can for new events

Sekarang aplikasi sudah berjalan dalam mode complain — akses apa pun yang tidak diizinkan akan muncul sebagai log, dan aa-genprof menawarkannya satu per satu. Di sinilah kalian harus bekerja: dengan jendela terminal lain, jalankan skenario kerja normal aplikasi. Untuk nginx misalnya, restart service-nya, minta beberapa halaman, biarkan ia menulis log.

Setelah skenario selesai, kembali ke jendela aa-genprof dan tekan S untuk memindai log baru. Tools akan menampilkan satu denial per waktu:

Prompt izin denial
Reading log entries from /var/log/syslog.
 
 Profile: /usr/sbin/nginx
 Path: /etc/nginx/nginx.conf
 New Mode: r
 
 [1 - /etc/nginx/nginx.conf r]
 (A)llow / (D)eny / (I)gnore / (G)lob / (G)lob_ext / (N)ew / (A)udit
 [A]llow changes for this profile?

Untuk setiap prompt, pilihan utamanya:

PilihanMakna
A (Allow)Izinkan akses persis seperti yang diminta
D (Deny)Tambahkan sebagai aturan deny — akses tetap diblokir
I (Ignore)Abaikan entri ini, tidak masuk ke profil
G (Glob)Perluas path menjadi pola glob, misalnya /etc/nginx/**
A (Audit)Catat akses ini di log untuk observasi

Prinsip yang harus kalian pegang: bolehkan yang benar, tolak yang mencurigakan. Saat ragu apakah sebuah path perlu diakses, pilih Ignore dulu dan lihat apakah aplikasi tetap berfungsi. Jika error muncul, baru diizinkan pada iterasi berikutnya. Setelah semua entri selesai diproses, tekan S lalu F untuk menyimpan — aa-genprof menulis profil lengkap ke /etc/apparmor.d/ dan memuatnya.

aa-logprof: Memperbarui Profil dari Log

aa-logprof adalah saudara aa-genprof untuk profil yang sudah ada. Ia membaca log denial, membandingkannya dengan profil yang dimuat, lalu menawarkan pembaruan — tanpa harus menulis ulang seluruh profil. Ini tools utama untuk perawatan profil jangka panjang.

Perbarui profil dari log denial
sudo aa-logprof

aa-logprof memindai log dari sumber default (/var/log/syslog, journald, atau auditd), menampilkan denial yang tidak tercakup profil, dan menawarkan pilihan yang sama seperti aa-genprof. Contoh prompt:

Prompt pembaruan aa-logprof
 Profile: /usr/sbin/nginx
 Path: /var/lib/nginx/cache/index.html
 New Mode: w
 
 [1 - /var/lib/nginx/cache/** w]
 (A)llow / (D)eny / (I)gnore / (G)lob / (G)lob_ext / (N)ew / (A)udit
 [A]llow changes for this profile?

Perhatikan pilihan G (Glob) di sini: nginx menulis banyak file di /var/lib/nginx/cache/ yang namanya di-hash. Mengizinkan satu per satu tidak masuk akal — tekan G untuk mengubahnya menjadi /var/lib/nginx/cache/** w dan izinkan sekaligus. Kemampuan mengabstraksi menjadi glob inilah yang membuat aa-logprof lebih dari sekadar pengisi deny: ia juga merapikan profil agar tidak membengkak.

Filtering Deny Noise

Masalah klasik di sistem production: log dipenuhi denial yang berulang dan tidak relevan — yang biasa disebut deny noise. Contoh: daemon yang mencoba membaca file yang tidak ada, atau proses yang memeriksa beberapa path alternatif sebelum menemukan yang benar. aa-logprof menawarkan beberapa cara menangani ini:

PilihanPenggunaan yang tepat
I (Ignore)Denial satu kali yang tidak berulang — jangan masuk profil
D (Deny)Path yang harus tetap diblokir — jadikan deny eksplisit
A (Audit)Ingin terus memantau path ini di masa depan tanpa mengizinkan

Kombinasi paling umum untuk mengurangi noise: Ignore untuk denial tidak penting, Deny untuk path berbahaya yang sering diakses. Tujuannya — seperti SOP yang rapi — adalah profil yang hanya berisi keputusan yang memang diperlukan, bukan setiap deny yang pernah terjadi.

Tip

Biasakan bekerja dari log yang terbatas cakupannya: gunakan aa-logprof -f <file-log> untuk memproses satu file log tertentu saja, misalnya log satu hari atau satu sesi debugging. Memproses seluruh log sekaligus akan menenggelamkan kalian dalam ratusan prompt.

Memverifikasi Profil Hasil Tools

Setelah aa-genprof dan aa-logprof selesai, pekerjaan kalian belum berakhir. Tools interaktif menghasilkan keputusan dari prompt — beberapa di antaranya mungkin terlalu lebar atau kurang lengkap. Biasakan melakukan tiga langkah verifikasi:

Pertama, baca profil hasilnya — pastikan tidak ada aturan aneh yang terlewat:

Baca profil hasil genprof
sudo cat /etc/apparmor.d/usr.sbin.nginx

Kedua, validasi sintaks dan pastikan profil dalam mode yang benar:

Validasi dan cek mode profil
sudo apparmor_parser -Q /etc/apparmor.d/usr.sbin.nginx
sudo aa-status | grep nginx

Ketiga — dan paling penting — uji aplikasi secara menyeluruh. Jalankan semua skenario kerja normal: restart, request, rotasi log, reload konfigurasi. Jika aplikasi berfungsi tanpa denial baru, profil layak naik ke enforce. Jika ada denial baru yang sah, itu bukan kegagalan — itu iterasi berikutnya yang tinggal dilewati aa-logprof sekali lagi.

Important

Jangan pernah naikkan profil ke enforce langsung setelah aa-genprof selesai. Skenario yang kalian jalankan selama learning mode hampir pasti belum mencakup semua perilaku aplikasi — misalnya rotasi log tengah malam atau koneksi database yang baru aktif setelah beberapa jam. Beri waktu beroperasi dalam complain, lalu naikkan setelah yakin.

Kesalahan Umum (Common Pitfalls)

  1. Terburu-buru menekan A tanpa berpikir. Setiap Allow adalah akses permanen yang kalian berikan. Verifikasi path dan operasinya sebelum menyetujui.
  2. Tidak menjalankan skenario selama aa-genprof. Learning mode yang kosong menghasilkan profil yang kosong. Latih aplikasi dengan skenario realistis sebelum memindai log.
  3. Mengabaikan pilihan Glob. Mengizinkan denial satu per satu membuat profil membengkak. Gunakan Glob untuk pola yang jelas berulang.
  4. Langsung enforce setelah genprof. Selalu beri periode complain dan uji skenario lengkap dulu.
  5. Memproses seluruh log tanpa filter. Gunakan aa-logprof -f <file> agar kalian tetap bisa membaca setiap prompt dengan bijak.

Penutup

Pada episode 5 ini kita menguasai dua tools paling produktif di ekosistem AppArmor: aa-genprof untuk membuat profil baru dari executable dengan alur learning mode, dan aa-logprof untuk memperbarui profil yang sudah ada dari log denial — lengkap dengan strategi filtering deny noise dan verifikasi profil hasil tools.

Inti yang harus kalian bawa:

  • aa-genprof <path> membuat kerangka profil baru dan memandu kalian mengizinkan/menolak akses satu per satu.
  • aa-logprof memperbarui profil lama dari log — tools utama perawatan jangka panjang.
  • Pilihan inti di kedua tools: Allow, Deny, Ignore, Glob, Audit — pahami kapan memakai masing-masing.
  • Glob mengabstraksi pola berulang; Ignore menekan deny noise.
  • Selalu verifikasi profil dan uji aplikasi sebelum naik ke enforce; beri periode complain.

Di episode 6 selanjutnya, kita akan memperluas kemampuan profil ke dimensi jaringan dan hak istimewa: network & capabilities rules — mengatur socket TCP/UDP dan UNIX, memanfaatkan capability untuk hak istimewa granular, hingga rlimit untuk membatasi sumber daya proses. Pastikan tetap semangat, karena dari sinilah profil kalian mulai melindungi aplikasi di semua dimensi, bukan hanya file!

Belajar AppArmor - Profile Tools: aa-genprof & aa-logprof | Belajar AppArmor