Profil AppArmor di Docker / LXC


11

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?


mengapa Anda ingin menggunakan apparmor di dalam wadah?
c4f4t0r

3
Dalam hal zero-day atau exploit lainnya dijalankan terhadap database untuk mencegahnya mengakses hal lain. Saya mempercayai Linux 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.
Naftuli Kay

Jawaban:


8

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.


Ini adalah pengalaman saya (terbatas) sejauh ini. Saya mempunyai masalah dalam membuat profil dari dalam wadah Docker, tetapi jika suatu profil dibuat di luar wadah dan kemudian disalin, itu hanya akan berfungsi ™, asalkan tentu saja Anda memulai AppArmor dalam wadah sebelum menjalankan yang dapat dieksekusi.
Naftuli Kay

@ Siosm: LCX! = Libcontainer. Pertanyaannya adalah tentang driver LXC.
0xC0000022L

@ 0xC0000022L: Model penegakan profil AppArmor adalah sama untuk alat apa pun yang digunakan untuk membatasi proses dalam wadah.
Siosm

3

Jawabannya sangat mungkin: tidak.

The Ubuntu Server panduan topik LXC dibahas cukup banyak pertanyaan yang tepat dan membuat pernyataan berikut:

Program dalam wadah tidak dapat dibatasi lebih lanjut - misalnya, MySQL berjalan di bawah profil wadah (melindungi tuan rumah) tetapi tidak akan dapat memasukkan profil MySQL (untuk melindungi wadah).

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 dari kernel. Namun, dockersaat ini - setahu saya - tidak mendukung userns.

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 menggunakan iptablesuntuk mengikat MySQL ke port eksternal host, jika perlu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.