Lewati ke isi

Keamanan/Cyber Security

SELinux atau AppArmor, Cara Kerjanya di Server Linux

SELinux dan AppArmor sama-sama membatasi gerak program di server Linux. Ini bedanya, cara membaca penolakannya, dan kenapa jangan dimatikan.

Terbit 5 menit baca

Jawaban singkat

SELinux memberi label pada file dan proses lalu mengizinkan akses antarlabel, bawaan di AlmaLinux, Rocky, dan RHEL. AppArmor memakai profil berbasis path per program, bawaan di Ubuntu dan Debian. Pilihan biasanya mengikuti distro; yang penting tetap aktif.

Daftar isi
  1. Bagaimana keduanya bekerja?
  2. SELinux: label pada segala hal
  3. AppArmor: profil per program
  4. Perbandingan SELinux dan AppArmor
  5. Kapan memakai SELinux, kapan AppArmor
  6. Cara membaca dan mengatasi penolakan
  7. Di SELinux
  8. Di AppArmor
  9. Pertanyaan yang sering diajukan

SELinux dan AppArmor adalah sistem kontrol akses wajib (mandatory access control) di kernel Linux. Keduanya menambah lapisan aturan di atas izin file biasa, sehingga program hanya bisa menyentuh file, port, dan sumber daya yang memang diizinkan untuknya, walaupun program itu berjalan sebagai root.

Yang dipertaruhkan cukup besar. Kalau aplikasi web dibobol, izin file biasa tidak menghalangi penyerang membaca apa pun yang bisa dibaca user aplikasi. Lapisan SELinux atau AppArmor bisa menghentikan langkah berikutnya, misalnya membaca kunci SSH atau menjalankan program lain. Sayangnya, banyak admin mematikannya di hari pertama karena aplikasinya "tidak jalan", lalu kehilangan perlindungan itu selamanya.

Bagaimana keduanya bekerja?

Keduanya dibangun di atas kerangka Linux Security Modules (LSM) di kernel. Bedanya ada pada cara mengenali apa yang dilindungi.

SELinux: label pada segala hal

SELinux memberi label (context) pada setiap file, proses, dan port. Contohnya, proses Nginx atau Apache berjalan dengan tipe httpd_t, dan file website diberi tipe httpd_sys_content_t. Kebijakan berisi aturan seperti "proses bertipe httpd_t boleh membaca file bertipe httpd_sys_content_t". Apa pun yang tidak diizinkan, ditolak.

Kamu bisa melihat label dengan ls -Z untuk file dan ps -eZ untuk proses. Karena berbasis label, memindahkan file ke folder lain tidak otomatis mengubah aksesnya. File yang dipindah dengan mv membawa label lamanya, dan ini sumber masalah paling umum.

AppArmor: profil per program

AppArmor bekerja dengan profil untuk program tertentu, disimpan di /etc/apparmor.d/. Profil berisi daftar path yang boleh dibaca, ditulis, atau dijalankan oleh program itu, serta kemampuan lain seperti akses jaringan. Program yang tidak punya profil tidak dibatasi AppArmor.

Pendekatan berbasis path ini lebih mudah dibaca manusia. Kamu bisa membuka file profil dan langsung paham apa yang diizinkan. Kekurangannya, perlindungan hanya berlaku untuk program yang punya profil.

Perbandingan SELinux dan AppArmor

AspekSELinuxAppArmor
Dasar aturanLabel pada file, proses, portPath file dalam profil per program
Bawaan di distroRHEL, AlmaLinux, Rocky, FedoraUbuntu, Debian (aktif bawaan sejak Debian 10)
CakupanSeluruh sistem lewat kebijakanProgram yang punya profil
Mode longgar untuk ujiPermissiveComplain
Cek statusgetenforce, sestatusaa-status
Tempat melihat penolakan/var/log/audit/audit.log (pesan AVC)Log kernel atau audit log (pesan DENIED)
Kurva belajarLebih curamLebih landai

Kapan memakai SELinux, kapan AppArmor

Dalam praktik, pilihannya hampir selalu mengikuti distro. Mengganti SELinux dengan AppArmor di AlmaLinux, atau sebaliknya di Ubuntu, berarti melawan arah distro: kebijakan bawaan, dokumentasi, dan dukungan paket semuanya disusun untuk sistem bawaannya. Jadi pertanyaan yang lebih berguna adalah "distro mana yang cocok untukmu", dan itu dibahas di memilih OS untuk VPS baru.

SELinux layak dipilih (lewat distro keluarga RHEL) bila kamu butuh kontrol yang sangat rinci di seluruh sistem, misalnya server yang menampung banyak layanan dengan tingkat kepercayaan berbeda, atau lingkungan yang diaudit ketat. Kebijakan bawaannya sudah mencakup banyak layanan umum seperti web server, database, dan SSH.

AppArmor cocok bila kamu ingin pembatasan yang mudah dibaca dan diubah per aplikasi, dan timmu lebih akrab dengan Ubuntu atau Debian. Membuat profil untuk aplikasi buatan sendiri juga relatif sederhana dengan bantuan aa-genprof dan aa-logprof dari paket apparmor-utils.

Cara membaca dan mengatasi penolakan

Di SELinux

Gejala umum: web server menampilkan 403 padahal izin file sudah benar, atau aplikasi PHP tidak bisa terhubung ke API luar. Langkahnya:

  1. Cari penolakan terbaru: sudo ausearch -m avc -ts recent.
  2. Minta penjelasan: alirkan hasilnya ke audit2why, yang menerangkan alasan penolakan dan sering menyebut boolean yang bisa diaktifkan.
  3. Perbaiki dengan cara yang tepat. Untuk folder website di lokasi tidak standar: sudo semanage fcontext -a -t httpd_sys_content_t "/srv/web(/.*)?" lalu sudo restorecon -Rv /srv/web. Untuk mengizinkan web server membuka koneksi jaringan keluar: sudo setsebool -P httpd_can_network_connect on. Untuk SSH di port lain: sudo semanage port -a -t ssh_port_t -p tcp 2222.

Bila perintah semanage atau audit2why belum ada, pasang paket policycoreutils-python-utils di AlmaLinux atau Rocky.

Hindari kebiasaan membuat modul kebijakan otomatis dari semua penolakan dengan audit2allow tanpa membaca isinya, karena kamu bisa ikut mengizinkan hal yang seharusnya ditolak.

Di AppArmor

Penolakan tercatat sebagai apparmor="DENIED" di log kernel (sudo journalctl -k | grep DENIED) atau di audit log bila auditd terpasang. Pesannya menyebut profil, operasi, dan path yang ditolak. Untuk menguji, pindahkan satu profil ke mode complain dengan sudo aa-complain /usr/sbin/nama-program, jalankan aplikasi, lalu sesuaikan profil dengan aa-logprof dan kembalikan dengan aa-enforce. Penyesuaian lokal sebaiknya ditaruh di folder local/ di dalam /etc/apparmor.d/ agar tidak tertimpa saat paket diperbarui.

Pelajaran yang sama berlaku untuk keduanya: penolakan adalah informasi, bukan gangguan. Bila ingin melihat gambaran keamanan server secara menyeluruh, audit dengan Lynis juga memeriksa apakah salah satu kerangka ini aktif. Lalu untuk jejak siapa melakukan apa di server, lanjutkan dengan mencatat aktivitas admin dengan auditd.

Pertanyaan yang sering diajukan

Bisakah SELinux dan AppArmor aktif bersamaan?

Dalam praktik distro umum, tidak. Keduanya adalah modul keamanan utama yang saling menggantikan, dan setiap distro memilih salah satu sebagai bawaan.

Apakah container Docker juga dilindungi?

Bisa. Di Ubuntu dan Debian, Docker memasang profil AppArmor bawaan untuk container. Di keluarga RHEL, Podman memberi label SELinux tersendiri pada container sehingga terpisah dari host dan satu sama lain, sedangkan Docker baru memakai SELinux bila opsi selinux-enabled diaktifkan di konfigurasi daemon.

Apakah SELinux memperlambat server?

Ada pemeriksaan tambahan di kernel, tapi untuk beban server pada umumnya dampaknya kecil dibanding manfaat perlindungannya. Masalah yang lebih sering terjadi adalah salah konfigurasi, bukan kecepatan.

Bagaimana cara tahu SELinux atau AppArmor sedang aktif?

Di keluarga RHEL jalankan getenforce, hasil Enforcing berarti aktif penuh. Di Ubuntu atau Debian jalankan sudo aa-status untuk melihat jumlah profil dalam mode enforce dan complain.

Sumber & referensi

Baca juga