5 poin oleh GN⁺ 2025-08-20 | Belum ada komentar. | Bagikan ke WhatsApp
  • systemd menyediakan fitur manajemen layanan yang kuat, tetapi konfigurasi default-nya dioptimalkan untuk kemudahan penggunaan alih-alih keamanan, sehingga perlu menerapkan opsi hardening secara terpisah
  • Melalui perintah systemd-analyze security, Anda dapat menganalisis indikator paparan keamanan untuk seluruh layanan atau layanan tertentu, lalu menentukan prioritas
  • Tersedia berbagai opsi keamanan yang dapat diterapkan pada unit layanan, dan ini bisa dimodifikasi satu per satu melalui /etc/systemd/system/ServiceName.service.d/override.conf dan sejenisnya
  • Opsi utama mencakup ProtectSystem, PrivateTmp, NoNewPrivileges, SystemCallFilter, MemoryDenyWriteExecute, dan lainnya yang membatasi hak proses serta akses ke sumber daya
  • Daripada menargetkan keamanan yang sempurna, lebih efektif memprioritaskan hardening pada layanan yang terekspos ke luar untuk mengurangi risiko, dan ini juga sangat bermanfaat di lingkungan self-hosting

Gambaran umum systemd

  • systemd menyediakan pendekatan yang sangat matang dan tangguh untuk manajemen layanan
  • Namun, karena memprioritaskan kemudahan penggunaan langsung dibanding keamanan, konfigurasi default-nya dibuat cukup longgar
  • Dokumen ini memperkenalkan berbagai opsi penguatan keamanan yang dapat diterapkan pada unit layanan systemd dan podman quadlet untuk mengurangi kemungkinan kompromi serta meminimalkan cakupan dampaknya saat kompromi terjadi
  • Ini bukan panduan untuk diterapkan sekaligus ke semua layanan; diperlukan eksperimen terpisah, pemeriksaan log, dan penyesuaian sesuai karakteristik serta kebutuhan fungsi masing-masing layanan
  • Tanggung jawab keamanan infrastruktur sepenuhnya berada pada operator, dan dokumen ini hanyalah alat referensi

Analisis keamanan systemd

  • Dengan perintah systemd-analyze security, Anda dapat memeriksa status keamanan seluruh layanan atau menganalisis pengaturan detail layanan tertentu (misalnya sshd.service)
    • Output mencakup status pemeriksaan, nama fitur, penjelasan, dan skor Exposure; semakin tinggi Exposure, semakin besar risikonya
  • Opsi keamanan dapat ditambahkan pada bagian [Service] (systemd) atau [Container] (podman quadlet)
  • Disarankan membuat file override melalui systemctl edit ServiceName.service; jika gagal, periksa hak akses yang diperlukan lalu sesuaikan

Opsi keamanan layanan

  • systemd menyediakan berbagai kata kunci opsi keamanan yang dapat dilihat melalui man systemd.exec 5, man capabilities 7, dan lainnya
  • Opsi keamanan yang representatif
    • ProtectSystem → opsi untuk membatasi filesystem menjadi hanya-baca
    • ProtectHome → opsi untuk memblokir akses ke /home, /root, /run/user
    • PrivateDevices → opsi untuk memblokir akses ke perangkat fisik dan hanya mengizinkan perangkat virtual seperti /dev/null
    • ProtectKernelTunables, ProtectKernelModules, ProtectKernelLogs → opsi untuk memblokir akses ke sumber daya kernel
    • NoNewPrivileges → opsi untuk mencegah perolehan hak baru melalui setuid/setgid dan sejenisnya
    • MemoryDenyWriteExecute → memblokir penggunaan memori yang dapat ditulis dan dieksekusi secara bersamaan; dapat menimbulkan masalah pada sebagian bahasa JIT
    • SystemCallFilter → opsi untuk membatasi system call yang diizinkan; jika dilanggar, proses dapat dihentikan atau mengembalikan EPERM

Penjelasan tiap opsi

  • ProtectSystem: saat diatur ke strict, seluruh filesystem di-mount sebagai hanya-baca; /dev, /proc, /sys memerlukan opsi perlindungan terpisah
  • ReadWritePaths: mengatur agar hanya beberapa path tertentu yang bisa ditulis kembali
  • ProtectHome: memblokir akses ke /home, /root, /run/user
  • PrivateDevices: menonaktifkan akses ke perangkat fisik, hanya mengizinkan perangkat pseudo seperti /dev/null
  • ProtectKernelTunables: menjadikan /proc, /sys hanya-baca
  • ProtectControlGroups: hanya mengizinkan akses baca ke cgroup
  • ProtectKernelModules: melarang pemuatan eksplisit modul kernel
  • ProtectKernelLogs: membatasi akses ke buffer log kernel
  • ProtectProc: saat diatur ke invisible, proses milik pengguna lain disembunyikan dari /proc/
  • ProcSubset: memblokir isi /proc selain item terkait PID tertentu
  • NoNewPrivileges: memblokir eskalasi hak baru melalui setuid, setgid, dan capability filesystem
  • ProtectClock: memblokir penulisan ke jam sistem/perangkat keras
  • SystemCallArchitectures: saat diatur ke native, hanya mengizinkan syscall native seperti x86-64
  • RestrictNamespaces: membatasi namespace yang khusus untuk kontainer
  • RestrictSUIDSGID: memblokir pengaturan bit setuid dan setgid pada file
  • LockPersonality: mencegah perubahan domain eksekusi (biasanya hanya diperlukan untuk aplikasi lama)
  • RestrictRealtime: membatasi penjadwalan real-time (hanya diperlukan untuk sebagian layanan tujuan khusus)
  • RestrictAddressFamilies: membatasi keluarga alamat soket yang diizinkan (misalnya menentukan AF_INET, AF_INET6, AF_UNIX, dll.)
  • MemoryDenyWriteExecute: memblokir pembuatan tambahan area memori yang dapat ditulis+dieksekusi (layanan yang memakai JIT perlu berhati-hati)
  • ProtectHostname: melarang penggunaan syscall sethostname, setdomainname
  • SystemCallFilter: mengatur syscall yang diizinkan/diblokir per layanan, dengan pemfilteran yang sangat rinci
    • Dapat disesuaikan berdasarkan grup, syscall individual, serta metode izinkan/blokir
    • Saat terjadi pelanggaran, juga mendukung pengaturan agar mengembalikan kode error seperti EPERM alih-alih langsung dihentikan
    • Daftar lengkap dapat dilihat melalui systemd-analyze syscall-filter atau man systemd.exec(5)
    • Daftar dapat dinegasikan seluruhnya dengan prefiks ~ (misalnya CapabilityBoundingSet=~CAP_SETUID dan seterusnya)

Proses penyesuaian pembatasan SystemCallFilter

  • Dengan auditd, Anda dapat memeriksa log syscall mana yang diblokir saat layanan gagal
    • Jalankan sudo ausearch -i -m SECCOMP -ts recent, lalu periksa nilai syscall
    • Tambahkan syscall tersebut atau grup terkait ke SystemCallFilter untuk menyelesaikan masalah secara bertahap

Prioritas penerapan hardening dan tips operasional

  • Tidak perlu menerapkannya semua ke setiap layanan
  • Threat model dan manajemen risiko adalah inti; khususnya layanan yang terekspos ke luar (httpd, nginx, ssh, dll.) wajib dipertimbangkan
  • Penerapan proaktif juga efektif untuk custom command, unit timer (pengganti cron lama), dan sejenisnya
  • Semakin sederhana sebuah layanan, semakin besar kemungkinan melakukan penyesuaian yang rinci

Checklist: kombinasi opsi keamanan yang direkomendasikan (prioritas awal penerapan)

  • ProtectSystem=strict
  • PrivateTmp=yes
  • ProtectHome=yes atau ProtectHome=tmpfs
  • ProtectClock=yes, ProtectKernelLogs=yes, ProtectKernelModules=yes
  • RestrictSUIDGUID=yes
  • UMask=0077
  • LockPersonality=yes
  • RestrictRealtime=yes
  • MemoryDenyWriteExecute=yes
  • DynamicUser=yes atau menetapkan User ke pengguna tertentu selain root
  • Butir-butir di atas umumnya adalah kombinasi yang dapat digunakan dengan hampir tanpa mengganggu layanan
  • Jika ingin menambahkan pemfilteran syscall (SystemCallFilter), diperlukan pengujian yang lebih rinci

Contoh konfigurasi Traefik

  • Ini adalah contoh menjalankan layanan Traefik berbasis kontainer dengan systemd quadlet, sambil menerapkan banyak opsi keamanan
    • Menerapkan ProtectSystem=full, ProtectHome=yes, SystemCallFilter=@system-service @mount @privileged, dan lainnya
    • Menghapus hak tertentu dengan CapabilityBoundingSet=~CAP_SETUID CAP_SETPCAP
    • Menerapkan pembatasan akses jaringan seperti RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK

Kesimpulan

  • Opsi hardening keamanan systemd adalah sarana praktis yang layak dimiliki dalam kotak alat administrator sistem keluarga Unix
  • Ini bukan solusi keamanan yang sempurna, melainkan alat untuk mengurangi risiko, dan tidak perlu menerapkan pengaturan keamanan secara sembarangan ke semua layanan
  • Terutama bagi administrator di lingkungan self-hosting, ini dapat sangat membantu meningkatkan tingkat keamanan
  • Dengan memprioritaskan “kepraktisan daripada kesempurnaan”, disarankan menerapkannya setidaknya sebagian dalam cakupan yang sesuai dengan pekerjaan dan lingkungan

Belum ada komentar.

Belum ada komentar.