Belajar Bacula - Hardening & Least Privilege
Episode 14 of 23

Belajar Bacula - Hardening & Least Privilege

Episode ini membahas hardening Bacula dengan prinsip least privilege: menjalankan daemon dengan user non-root bila memungkinkan, mengunci permission konfigurasi hingga 600, audit log yang efektif, password FD unik per client, serta monitoring akses untuk mendeteksi penyalahgunaan.

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

Pendahuluan

TLS dan firewall menutup pintu dari luar. Tapi setengah pertempuran keamanan justru di dalam: berapa banyak hak yang sebenarnya dibutuhkan setiap komponen? Prinsip least privilege menjawabnya — beri setiap proses hanya hak minimum yang ia butuhkan, tidak lebih. Di episode 14 kita meng-hardening Bacula dari dalam.

Tiga sasaran: user daemon yang tidak istimewa, konfigurasi yang terkunci, dan log yang bisa dipercaya. Plus satu kebiasaan penting di sisi client: password unik per mesin.

Hardening Daemon

Jalankan Daemon sebagai User Non-Root

File Daemon adalah komponen paling sensitif: ia membaca file yang dijadwalkan Director. Jika FD berjalan sebagai root, kompromi FD = akses root ke seluruh sistem. Solusinya: jalankan FD sebagai user khusus.

Bacula Community FD mendukung directive FDUser di bacula-fd.conf:

Jalankan FD sebagai user terbatas
FileDaemon {
  Name = client-fd
  FDUser = bacula
  FDPort = 9103
}

Dengan ini, FD menurunkan privilege setelah start. Batasan yang harus diterima: direktori yang dibackup harus bisa dibaca user tersebut. Untuk data yang hanya bisa dibaca root (misal /etc/shadow), kompromi harus dibuat — dan itulah alasan banyak admin memilih tetap root di lingkungan khusus, dengan kompensasi pengamanan lain.

Note

Director (bacula-dir) dan Storage Daemon (bacula-sd) juga punya opsi menurunkan privilege (directive DirUser/SDUser di beberapa edisi), tapi SD sering tetap perlu akses ke device tape. Evaluasi per komponen: turunkan privilege di mana mungkin, terima sisanya dengan mitigasi.

Service Level: systemd Hardening

Bacula berjalan sebagai service systemd. Manfaatkan fitur hardening systemd pada file unit:

Tambahan hardening unit systemd
[Service]
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadOnlyPaths=/etc/bacula
PrivateTmp=true

NoNewPrivileges=true mencegah eskalasi privilege, ProtectSystem=strict membuat sistem file read-only kecuali yang diizinkan. Sesuaikan ReadWritePaths dengan direktori storage Bacula.

Permission Konfigurasi

Konfigurasi berisi password daemon. Kunci permission-nya:

Kunci permission konfigurasi
sudo chmod 0640 /etc/bacula/*.conf
sudo chmod 0600 /etc/bacula/certs/*.key
sudo chown root:bacula /etc/bacula/*.conf

Aturannya: baca untuk user service + root, tulis hanya root, tidak pernah world-readable. Kunci privat TLS (*.key) paling ketat: 0600 root.

Audit Log

Konfigurasi Messages

Bacula mengirim pesan ke berbagai target via resource Messages. Untuk audit, arahkan semuanya ke file dan direktori:

Messages untuk audit
Messages {
  Name = Standard
  mailcommand = "/usr/sbin/bsmtp -h localhost -f \"(Bacula)\" %r"
  operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"(Bacula)\" %r"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved
  append = "/var/log/bacula/bacula.log" = all, !skipped
  catalog = all
}

append = "/var/log/bacula/bacula.log" menulis semua pesan penting ke file log; mail mengirim notifikasi; console menampilkan ke bconsole. Log inilah bahan audit.

Proteksi Log

Log audit yang bisa diubah penyerang tidak berguna. Gunakan log rotation dan batasi akses:

Rotate dan proteksi log
sudo chmod 0640 /var/log/bacula/bacula.log
sudo chown root:bacula /var/log/bacula/bacula.log

Jika compliance menuntut, kirim log ke SIEM eksternal (syslog) agar ada salinan yang tidak bisa dihapus lokal.

Client Security

Password FD Unik per Client

Satu password Director yang sama untuk semua FD adalah pintu yang sangat lebar: kompromi satu client = semua client bisa dibackup/dibaca. Buat password unik per client:

Password unik per client di bacula-dir.conf
Client {
  Name = web-01-fd
  Address = 10.0.0.11
  Password = "pwd-untuk-web-01"
}
Client {
  Name = db-01-fd
  Address = 10.0.0.12
  Password = "pwd-untuk-db-01"
}

Masing-masing harus cocok dengan resource Director di bacula-fd.conf mesin tersebut. Automatisasi (Ansible/Terraform) adalah cara realistis mengelola password unik ratusan client — generate per host, inject ke konfigurasi.

Warning

Password FD yang bocor berarti siapa pun yang memilikinya bisa meminta Director membaca file dari client tersebut. Rotasi password FD adalah langkah pertama wajib saat ada indikasi kompromi — dan sebaiknya dilakukan rutin bersama rotasi credential lain.

Monitoring Akses

Pantau siapa yang terhubung ke daemon:

Cek koneksi aktif
* status client=web-01-fd
* status dir
ss -tnp | grep -E "9101|9102|9103"

Dari bconsole, status client menampilkan koneksi FD yang sedang aktif; status dir menampilkan koneksi konsol. Pola mencurigakan yang harus diwaspadai:

  • Koneksi dari alamat yang bukan milik komponen Bacula.
  • Job backup dijalankan di luar jadwal normal.
  • Restore job yang mencurigakan (siapa memulihkan ke mana).

Korelasi tiga hal ini — log job, koneksi aktif, dan alamat sumber — adalah audit access yang sesungguhnya.

Checklist Hardening

Checklist hardening Bacula
[x] FD berjalan dengan user non-root bila memungkinkan
[x] NoNewPrivileges + ProtectSystem di unit systemd
[x] Konfigurasi 0640 root:bacula; kunci TLS 0600
[x] Log mengalir ke file + mail + (opsional) syslog/SIEM
[x] Password FD unik per client, dirotasi rutin
[x] Koneksi aktif dipantau via status dan ss

Penutup

Inti yang harus dibawa pulang:

  • Least privilege: turunkan privilege FD via FDUser; perkecil hak service di systemd.
  • Permission konfigurasi: 0640 root:bacula, kunci TLS 0600 root.
  • Log audit via resource Messages ke file + email; proteksi dari modifikasi.
  • Password FD unik per client — jangan satu password untuk semua.
  • Monitor koneksi aktif dan pola job yang mencurigakan.

Di episode 15 selanjutnya kita akan menskalakan Bacula ke banyak client dan multi-Director — banyak FD ke satu Director/SD, konfigurasi per-tenant dengan Client resource dan ACL, serta opsi Director HA dan SD clustering. Inilah transisi dari deployment kecil menuju arsitektur enterprise.

Belajar Bacula - Hardening & Least Privilege | Belajar Bacula