SystemdSandboxing
Systemd memungkinkan pengguna untuk memperkuat keamanan systemd service units. Karena keterbatasan teknis dan alasan keamanan, systemd sandboxing tidak berlaku untuk layanan systemd pengguna (systemd user) karena upaya melakukan hal ini justru akan membuka peluang priviledge escalation. Hal ini tidak berlaku untuk units yang menggunakan User=
.
Karena sifat tipe unit lainnya, hanya unit layanan yang dapat diperkuat/dibuat sandbox dalam pengertian tradisional. Lihat systemd.exec(5) untuk informasi lebih lanjut.
Umum
Karena penguatan sandboxing secara efektif membatasi aplikasi, maka tidak mungkin untuk menggunakan semua arahan sandboxing. Sebuah server web misalnya tidak boleh menggunakan ProtectNetwork=true` karena biasanya membutuhkan akses jaringan.
systemd-analyze security unit
menghasilkan skor untuk unit yang menunjukkan semua arahan yang digunakan, yang dapat membantu untuk menentukan pengaturan apa yang akan dicoba selanjutnya.
Peringatan: Skor ini sedikit menyesatkan. Program sederhana seperti Wikipedia:Hello world dapat mencapai skor yang nyaris sempurna. Tidak ada program yang dapat menggunakan semua pengaturan sandboxing.
Sayangnya, pesan kesalahan dari systemd tentang kesalahan konfigurasi yang berkaitan dengan sandboxing terkadang tidak jelas dan/atau menyesatkan. Mengatur level log untuk sementara ke debug dapat membantu mendapatkan informasi yang benar-benar relevan.
systemctl log-level debug
Direktif umum
Sebagian besar konfigurasi ini dapat diterapkan pada sebagian besar aplikasi tanpa menyebabkan terlalu banyak masalah.
Tanpa konfigurasi khusus
Pengaturan boolean sederhana yang dapat diaktifkan atau tidak.
Direktif | Pengaruh1 | Dampak2 | Catatan |
---|---|---|---|
LockPersonality | Sedang | Rendah | |
MemoryDenyWriteExecute | Sedang3 | Sedang | Tidak kompatibel dengan kode yang dibuat secara dinamis pada saat runtime |
NoNewPriviledges | Tinggi | Rendah | |
PrivateDevices | Medium | Rendah | /dev/null dan lainnya yang serupa akan tetap di sana |
PrivateNetwork | Tinggi | Sangat tinggi | Melarang semua akses ke jaringan |
PrivateTmp | Sedang | Rendah | |
PrivateUsers | Tinggi | Tinggi | |
ProtectClock 4 | Rendah | Sedang5 | |
ProtectControlGroups 4 | Sedang | Rendah | Sangat direkomendasikan karena tidak ada satupun layanan yang boleh menulis ke sana |
ProtectHostname 4 | Rendah | Rendah | |
ProtectKernelLogs 46 | Rendah | Rendah | |
ProtectKernelModules 4 | Sedang | Rendah | |
ProtectKernelTunables 4 | Rendah | Rendah | |
RestrictRealtime | Rendah | Rendah | Dapat mencegah denial-of-service |
RestrictSUIDSGID | Sedang | Rendah | Baik digunakan bersama NoNewPriviledges |
2 Kemungkinan direktif dapat merusak sesuatu
3 Dapat ditingkatkan dengan SystemCallFilter
4 Warning: Footnote 'protect' referenced but not defined.
5 Beberapa pengguna melaporkan bahwa smartctl
tidak bisa digunakan saat direktif ini diaktifkan, tapi seharusnya bukan masalah besar
6 Bahkan saat menjalankan dengan User=
, systemd seccomp filters yang dapat sebagai contoh menangkap aplikasi yang menjalankan sudo modprobe
saat ProtectKernelModules
diatur ke true
.
Referensi
ArchWiki: User:NetSysFire/systemd sandboxing