"Jangan biarkan container bertindak seperti raja! Atur izin dan hak aksesnya dengan benar!"
Docker adalah alat yang luar biasa, tapi kalau izin dan hak aksesnya dibiarkan terbuka lebar, bisa jadi pintu masuk hacker ke server kamu!
Jadi, gimana cara mengelola izin dan hak akses dengan benar di Docker?
Yuk, kita bahas dengan gaya santai tapi tetap serius soal keamanan!
1. Jangan Jalankan Container Sebagai Root!
Kesalahan paling fatal:
Menjalankan container sebagai root (pengguna dengan hak penuh di sistem).
"Tapi kan container itu terisolasi?"
Iya, tapi kalau container diretas dan dia punya akses root, hacker bisa kabur dari container dan merusak sistem utama!
Solusi: Jalankan container dengan user non-root!
Di Dockerfile:
RUN addgroup --system appgroup && adduser --system --ingroup appgroup appuser
USER appuser
Saat menjalankan container:
docker run -u 1001 my-container
Keuntungan:
- Kalau container diretas, hacker gak bisa melakukan aksi berbahaya di sistem utama.
- Mengurangi risiko eskalasi hak akses.
2. Gunakan File System Read-Only (Supaya Container Gak Bisa Nulis Sembarangan!)
Masalah:
Container sering kali hanya perlu membaca data, bukan menulis!
Tapi kalau kita gak batasi, bisa-bisa container mengedit file penting tanpa izin!
Solusi: Jalankan container dengan mode read-only!
docker run --read-only nginx
Keuntungan:
- Mencegah malware atau hacker menulis file berbahaya di container.
- Mengurangi kemungkinan perubahan tidak disengaja di file sistem.
3. Batasi Hak Akses File dan Folder di Container
Masalah:
Kadang kita perlu mount volume atau bind mount ke dalam container.
Kalau gak hati-hati, container bisa membaca dan menulis file sensitif di host!
Solusi: Gunakan opsi :ro
untuk hanya membaca file!
Contoh: Mount file dengan akses baca saja (read-only):
docker run -v /data/logs:/app/logs:ro my-container
Keuntungan:
- Container tidak bisa mengedit atau menghapus file yang dimount.
- Mengurangi risiko manipulasi file oleh container.
4. Gunakan User Namespace untuk Isolasi Lebih Baik
Masalah:
Secara default, user di dalam container memiliki ID yang sama dengan user di host.
Artinya, kalau container diretas, hacker bisa punya akses penuh ke sistem utama!
Solusi: Aktifkan User Namespace Remapping!
Di /etc/docker/daemon.json
, tambahkan:
{
"userns-remap": "default"
}
Lalu restart Docker:
sudo systemctl restart docker
Keuntungan:
- Container dijalankan dengan user ID yang dipetakan ulang, tidak sama dengan user di host!
- Mencegah container punya hak istimewa di sistem utama.
5. Gunakan docker run --cap-drop
untuk Mengurangi Hak Istimewa Container
Masalah:
Secara default, container punya beberapa capabilities (hak akses khusus di Linux) yang mungkin tidak perlu.
Solusi: Hapus hak akses yang tidak diperlukan dengan --cap-drop
!
Contoh: Jalankan container dengan hak akses minimal:
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE my-container
Keuntungan:
- Container hanya punya hak akses yang benar-benar dibutuhkan.
- Mengurangi risiko eksploitasi oleh hacker.
6. Gunakan Docker Secrets untuk Menyimpan Informasi Sensitif
Kesalahan umum:
Menyimpan password atau API key di dalam Dockerfile atau environment variables.
Solusi: Gunakan Docker Secrets!
Contoh: Simpan password database sebagai secret:
echo "supersecretpassword" | docker secret create db_password -
Lalu gunakan secret ini di service Swarm:
docker service create --name myapp --secret db_password my-app:latest
Keuntungan:
- Password tidak tersimpan di Dockerfile atau environment variables!
- Lebih aman daripada menyimpan password langsung di kode aplikasi!
7. Gunakan Docker AppArmor atau SELinux untuk Keamanan Tambahan
Apa itu AppArmor/SELinux?
AppArmor dan SELinux adalah sistem keamanan di Linux yang bisa membatasi apa yang boleh dilakukan oleh container!
Aktifkan AppArmor untuk container:
docker run --security-opt apparmor=myprofile my-container
Aktifkan SELinux untuk container:
docker run --security-opt label=type:container_t my-container
Keuntungan:
- Mencegah container mengakses file atau proses yang seharusnya tidak boleh diakses.
- Memberikan lapisan perlindungan tambahan terhadap eksploitasi.
Kesimpulan: Jangan Biarkan Container Jadi Raja Tanpa Aturan!
Checklist Keamanan Docker:
Jangan jalankan container sebagai root
Gunakan read-only filesystem
Batasi akses file dan folder dengan mode read-only (:ro
)
Gunakan User Namespace Remapping
Hapus hak akses yang tidak perlu dengan --cap-drop
Gunakan Docker Secrets untuk informasi sensitif
Gunakan AppArmor atau SELinux untuk lapisan keamanan tambahan
Next Step:
- Coba implementasikan tips ini di proyek Docker kamu!
- Lihat apakah ada container yang masih berjalan dengan akses root!
0 Comments