Service Management
Pendahuluan
Service management mengatur bagaimana daemon dan layanan sistem berjalan - termasuk konfigurasi, kontrol, dan keamanannya. Sistem operasi modern menyediakan berbagai opsi untuk menjalankan layanan dengan hak istimewa minimal (least privilege) dan isolasi yang kuat.
Systemd Unit Security
systemd adalah init system default di hampir semua distribusi Linux
modern. File unit systemd (*.service) mendukung
berbagai opsi hardening untuk membatasi kemampuan layanan:
ProtectSystem
Mengontrol akses tulis ke direktori sistem:
ProtectSystem=yes-/usrdan/etcread-only untuk layanan.ProtectSystem=full- plus/bootdan/efiread-only.ProtectSystem=strict- semua mount point read-only kecuali yang dikecualikan.
ProtectHome
Membuat direktori home read-only atau tidak terlihat:
ProtectHome=yes-/home,/root,/run/userread-only.ProtectHome=read-only- sama tapi read-only.ProtectHome=tmpfs- direktori home dipasang sebagai tmpfs kosong.
PrivateTmp
PrivateTmp=yes- layanan mendapat namespace/tmpdan/var/tmpsendiri.- Mencegah layanan melihat file temporary milik layanan lain.
- Mencegah serangan symlink pada file temporary.
NoNewPrivileges
NoNewPrivileges=yes- mencegah layanan dan proses turunannya mendapatkan privilege baru.- Memblokir SUID/SGID, capabilities, dan seccomp yang memberikan privilege.
- Sangat efektif mencegah privilege escalation dari celah di layanan.
Opsi Hardening Lainnya
| Parameter | Fungsi |
|---|---|
CapabilityBoundingSet= |
Membatasi Linux capabilities yang dapat diperoleh |
DeviceAllow= |
Membatasi akses ke device file |
ProtectKernelModules= |
Mencegah load/unload kernel modules |
ProtectKernelLogs= |
Mencegah akses ke kernel log ring buffer |
ProtectClock= |
Mencegah perubahan system clock |
MemoryDenyWriteExecute= |
Mencegah memori yang writable dan executable |
SystemCallFilter= |
Membatasi syscall yang diizinkan (seperti seccomp) |
RestrictAddressFamilies= |
Membatasi address family (AF_INET, AF_UNIX, dll) |
RestrictNamespaces= |
Mencegah pembuatan namespaces baru |
Contoh unit service yang di-hardening:
[Service]
ExecStart=/usr/bin/myapp
ProtectSystem=full
ProtectHome=yes
PrivateTmp=yes
NoNewPrivileges=yes
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
MemoryDenyWriteExecute=yes
Least Privilege for Services
Prinsip least privilege berarti layanan hanya mendapatkan hak minimal yang diperlukan:
- Jangan jalankan layanan sebagai root jika tidak diperlukan.
- Buat service account khusus (misal:
useradd -r -s /bin/false appuser). - Gunakan
User=danGroup=di systemd unit untuk menentukan identitas layanan. - Nonaktifkan login shell untuk service account
(
/sbin/nologinatau/bin/false).
Service Account
Service account adalah user sistem yang digunakan khusus untuk menjalankan layanan. Praktik terbaik:
- Buat dengan
--systematau-r:useradd -r -s /usr/sbin/nologin myservice. - Hindari password login.
- Beri akses hanya ke file dan direktori yang diperlukan.
- Gunakan filesystem permission dan ACL untuk membatasi akses.
Socket Activation
Socket activation adalah fitur systemd yang menunda startup layanan hingga ada permintaan koneksi. Manfaat keamanan:
- Layanan tidak berjalan jika tidak digunakan (mengurangi attack surface).
- systemd mendengarkan di port, bukan layanan (mengurangi risiko jika layanan memiliki bug).
- Dapat menerapkan filter sebelum meneruskan koneksi ke layanan.
- Mendukung lazy startup dan parallel startup.
Service File Hardening
Selain parameter systemd, praktik hardening lainnya:
- ReadWritePaths= - batasi path yang writable.
- InaccessiblePaths= - buat path tertentu tidak terlihat.
- BindPaths=/BindReadOnlyPaths= - bind mount path tertentu.
- UMask= - atur umask default untuk file yang dibuat layanan.
- LimitNOFILE= - batasi jumlah file descriptor.
- TimeoutStartSec= - timeout startup untuk mencegah hang.
Windows Service Security
Di Windows, layanan dikelola melalui Service Control Manager (SCM)
menggunakan alat sc.exe atau PowerShell.
Service Account Types
| Tipe Akun | Penggunaan |
|---|---|
| LocalSystem | Hak tertinggi, akses penuh ke sistem - hindari jika mungkin |
| LocalService | Hak terbatas, akses jaringan sebagai anonymous |
| NetworkService | Hak terbatas, akses jaringan sebagai komputer |
| Managed Service Account (MSA) | Otomatis dikelola, password dirotasi AD |
| Group Managed Service Account (gMSA) | MSA untuk multiple server |
| Virtual Account | Akun lokal yang dibuat otomatis untuk layanan tertentu |
Praktik Keamanan Windows Service
- Jangan gunakan LocalSystem untuk layanan yang tidak perlu.
- Gunakan gMSA untuk layanan di domain.
- Setel Start Type ke Automatic (Delayed Start) jika tidak kritis.
- Terapkan Service ACL untuk membatasi siapa yang bisa start/stop layanan.
- Pantau event log untuk service failure.
- Nonaktifkan layanan yang tidak diperlukan (reduce attack surface).
Kesimpulan
Keamanan layanan membutuhkan konfigurasi yang cermat sejak awal. systemd menyediakan tools hardening yang powerful seperti ProtectSystem, PrivateTmp, dan NoNewPrivileges. Prinsip least privilege harus diterapkan dengan membuat service account khusus, membatasi capabilities, dan menggunakan isolasi. Windows juga memiliki mekanisme serupa melalui service account types dan SCM. Layanan yang tidak diamankan dengan benar adalah salah satu vektor serangan paling umum.