Mencatat Aktivitas Admin Server dengan auditd
auditd mencatat siapa mengubah file penting dan perintah apa yang dijalankan sebagai root, bahkan setelah sudo. Cara pasang, aturan, dan baca lognya.
Jawaban singkat
auditd adalah layanan audit bawaan kernel Linux yang mencatat akses ke file penting dan perintah yang dijalankan, lengkap dengan ID login asli pelakunya meski ia sudah berpindah ke root lewat sudo. Tulis aturan di /etc/audit/rules.d, muat dengan augenrules, lalu baca dengan ausearch dan aureport.
Daftar isi
auditd adalah layanan yang menerima catatan dari subsistem audit di kernel Linux dan menuliskannya ke log, sehingga kamu bisa tahu siapa mengubah file penting dan perintah apa yang dijalankan dengan hak root.
Kenapa ini penting? Saat server dikelola lebih dari satu orang, pertanyaan "siapa yang mengubah ini?" pasti muncul. Riwayat shell mudah dihapus dan tidak mencatat perintah yang dijalankan lewat skrip. Log autentikasi hanya memberi tahu siapa yang login, bukan apa yang dilakukannya. auditd mengisi celah itu, dan catatannya juga berguna saat menyelidiki insiden keamanan.
Apa yang membuat auditd berbeda dari log biasa?
Kuncinya ada di audit UID (auid), yang juga disebut login UID. Nilai ini ditetapkan saat seseorang login dan tidak berubah walau orang itu menjalankan sudo -i atau su. Jadi kalau user budi login lalu menjadi root dan mengedit /etc/passwd, catatan audit tetap menyebut auid milik budi, bukan sekadar "root".
Catatan audit juga dibuat oleh kernel, bukan oleh program yang dijalankan. Program tidak bisa memilih untuk tidak tercatat. Satu-satunya cara menghindarinya adalah mengubah aturan audit atau mematikan layanannya, dan tindakan itu pun bisa ikut dicatat.
Bagaimana cara memasang auditd?
Di keluarga RHEL seperti AlmaLinux dan Rocky, paket audit biasanya sudah terpasang dan aktif. Cek dengan systemctl status auditd.
Di Ubuntu atau Debian:
sudo apt install auditd
sudo systemctl enable --now auditd
Log tersimpan di /var/log/audit/audit.log. Pengaturan layanan, termasuk ukuran dan jumlah file log, ada di /etc/audit/auditd.conf. Aturan apa yang dicatat ditulis di file berakhiran .rules di folder /etc/audit/rules.d/.
Contoh aturan yang berguna untuk server bisnis
Buat file /etc/audit/rules.d/50-admin.rules:
## Perubahan akun dan sudo
-a always,exit -F arch=b64 -F path=/etc/passwd -F perm=wa -k akun
-a always,exit -F arch=b64 -F path=/etc/shadow -F perm=wa -k akun
-a always,exit -F arch=b64 -F path=/etc/group -F perm=wa -k akun
-a always,exit -F arch=b64 -F path=/etc/sudoers -F perm=wa -k sudoers
-a always,exit -F arch=b64 -F dir=/etc/sudoers.d/ -F perm=wa -k sudoers
## Konfigurasi SSH
-a always,exit -F arch=b64 -F path=/etc/ssh/sshd_config -F perm=wa -k ssh
## Perintah yang dijalankan sebagai root oleh user yang login
-a always,exit -F arch=b64 -S execve -F euid=0 -F auid>=1000 -F auid!=4294967295 -k perintah-root
Setiap aturan diberi kunci (-k) supaya mudah dicari. perm=wa berarti mencatat penulisan dan perubahan atribut. Aturan terakhir mencatat setiap program yang dijalankan dengan hak root oleh user manusia (auid 1000 ke atas pada kebanyakan distro), dan mengecualikan proses sistem yang tidak punya login UID.
Muat aturan lalu periksa:
sudo augenrules --load
sudo auditctl -l
Tutorial lama sering memakai bentuk -w /etc/passwd -p wa. Bentuk itu masih berfungsi, tapi dokumentasi auditctl menyebutnya hanya untuk kompatibilitas dan menyarankan bentuk berbasis syscall dengan -F path seperti contoh di atas karena lebih baik untuk kinerja.
Membaca catatan audit
Log mentah sulit dibaca. Dua alat bawaan membuatnya jauh lebih mudah.
| Kebutuhan | Perintah |
|---|---|
| Semua perubahan akun | sudo ausearch -k akun -i |
| Perintah root hari ini | sudo ausearch -k perintah-root -ts today -i |
| Aktivitas yang melibatkan satu UID | sudo ausearch -ua 1001 -i |
| Ringkasan seluruh kejadian | sudo aureport --summary |
| Laporan percobaan login | sudo aureport -au |
| Laporan program yang dijalankan | sudo aureport -x --summary |
Opsi -i menerjemahkan angka menjadi nama, misalnya UID menjadi nama user dan nomor syscall menjadi namanya. Di hasil ausearch, perhatikan kolom auid untuk mengetahui siapa pelaku aslinya dan exe untuk program yang dipakai.
Apa yang perlu diperhatikan agar tidak jadi masalah?
Jangan mencatat semuanya. Aturan yang terlalu luas, misalnya mencatat setiap akses baca ke seluruh /etc atau setiap execve dari semua user, membuat log membengkak dan menambah beban kernel. Mulai dari daftar kecil di atas, lalu tambahkan sesuai kebutuhan.
Atur rotasi log. Di auditd.conf, pengaturan max_log_file, num_logs, dan max_log_file_action menentukan kapan log dirotasi. Perhatikan juga apa yang terjadi saat disk hampir penuh, karena sebagian pengaturan bisa menghentikan sistem demi menjaga jejak audit.
Kirim salinan ke luar server. Penyerang yang sudah menjadi root bisa menghapus file log lokal. Teruskan catatan audit ke server log terpisah, misalnya lewat plugin syslog dari auditd. Gambaran lebih luas tentang memakai log untuk mendeteksi serangan ada di membaca log server untuk deteksi serangan.
Restart dengan cara yang benar. Di keluarga RHEL, unit auditd menolak dihentikan lewat systemctl stop. Gunakan service auditd restart bila perlu memuat ulang layanan, atau cukup augenrules --load untuk mengganti aturan.
Catatan TTY bisa berisi rahasia. Modul PAM pam_tty_audit mampu merekam ketikan di terminal admin. Fitur ini sangat rinci, tapi juga bisa ikut merekam password yang diketik. Pertimbangkan baik-baik dan batasi siapa yang boleh membaca lognya.
auditd melengkapi lapisan keamanan lain, bukan menggantikannya. Akses login tetap harus dikunci, misalnya dengan SSH key alih-alih password, dan aturan kontrol akses seperti SELinux atau AppArmor tetap aktif untuk membatasi kerusakan bila ada yang berhasil masuk.
Pertanyaan yang sering diajukan
Apakah auditd memperlambat server?
Dengan aturan yang terarah, dampaknya kecil. Beban naik bila aturan mencatat syscall yang sangat sering terjadi untuk semua proses, jadi hindari aturan yang terlalu luas.
Apakah auditd bisa melihat isi perintah yang diketik?
Aturan execve mencatat program dan argumennya. Untuk merekam ketikan di terminal dibutuhkan pam_tty_audit, yang perlu dipertimbangkan karena bisa ikut merekam password.
Apa bedanya auditd dengan journalctl?
journalctl membaca log dari layanan dan aplikasi yang memang menulis log. auditd mencatat kejadian yang dilaporkan kernel sesuai aturanmu, lengkap dengan login UID asli pelakunya.
Sumber & referensi
- man7.org/linux/man-pages/man8/auditctl.8.html
- man7.org/linux/man-pages/man8/ausearch.8.html
- man7.org/linux/man-pages/man8/aureport.8.html
- man7.org/linux/man-pages/man8/augenrules.8.html
- docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/security_hardening/auditing-the-system_security-hardening


