Saya memiliki wadah Docker (LXC) yang menjalankan MySQL. Karena ide di balik Docker umumnya adalah "satu proses yang berjalan per wadah," jika saya mendefinisikan profil AppArmor yang menargetkan biner MySQL, apakah mereka akan ditegakkan? Apakah ada cara bagi saya untuk menguji ini?
11
cgroups
, tetapi tidak sebanyak itu . Lebih baik aman daripada menyesal, saya lebih suka MySQL dikunci daripada memiliki nol hari MySQL menemukan cara untuk keluar dari cgroup.Jawaban:
Pertama, cgroup tidak digunakan untuk mengisolasi aplikasi dari yang lain pada suatu sistem. Mereka digunakan untuk mengelola penggunaan sumber daya dan akses perangkat. Berbagai ruang nama (PID, UTS, mount, user ...) yang menyediakan beberapa isolasi (terbatas).
Selain itu, proses yang diluncurkan di dalam wadah Docker mungkin tidak akan dapat mengelola profil AppArmor yang sedang dijalankannya. Pendekatan yang saat ini diambil adalah mengatur profil AppArmor tertentu sebelum meluncurkan wadah.
Sepertinya driver eksekusi libcontainer di Docker mendukung pengaturan profil AppArmor untuk kontainer , tetapi saya tidak dapat menemukan contoh atau referensi dalam dokumen.
Rupanya AppArmor juga didukung dengan LXC di Ubuntu .
Anda harus menulis profil AppArmor untuk aplikasi Anda dan memastikan LXC / libcontainer / Docker / ... memuatnya sebelum memulai proses di dalam wadah.
Profil yang digunakan dengan cara ini harus ditegakkan, dan untuk mengujinya Anda harus mencoba akses ilegal dan memastikan gagal.
Tidak ada tautan antara biner dan profil yang sebenarnya ditegakkan dalam kasus ini. Anda harus secara eksplisit memberi tahu Docker / LXC untuk menggunakan profil ini untuk wadah Anda. Menulis profil untuk biner MySQL hanya akan memberlakukannya di host, bukan di wadah.
sumber
Jawabannya sangat mungkin: tidak.
The Ubuntu Server panduan topik LXC dibahas cukup banyak pertanyaan yang tepat dan membuat pernyataan berikut:
Opsi yang lebih baik untuk menghindari eksploitasi yang memiliki efek yang tidak diinginkan adalah membatasi pengguna yang menjalankan wadah dan menggunakan wadah LXC userspace yang memanfaatkan fitur userns dari kernel. Namun,
docker
saat ini - setahu saya - tidak mendukunguserns
.Dalam kasus seperti itu, MySQL akan - dari perspektif host - dijalankan sebagai pengguna yang tidak memiliki hak pribadi, sementara di dalam wadah itu dapat dijalankan sebagai
root
. Anda kemudian dapat menggunakaniptables
untuk mengikat MySQL ke port eksternal host, jika perlu.sumber