Gdzie są granice bezpieczeństwa kontenerów LXC?

8

Moje pytanie dotyczy bezpieczeństwa kontenera LXC.

Jeśli korzystam z wielu kontenerów na moim pudełku i daję użytkownikom oddzielny dostęp ssh do ich własnego kontenera, czy którykolwiek z tych kontenerów może włamać się do innych kontenerów na tym pudełku, a nawet na maszynie hosta?

Gdzie są granice bezpieczeństwa kontenerów LXC?

iCode
źródło
wiesz, że musisz się tym martwić, AppArmor zajmie się tym.
rɑːdʒɑ

Odpowiedzi:

8

Jak widziałem o LXC Przechowuje informacje o kontenerze i (przy domyślnym magazynie kopii zapasowych) główne systemy plików w / var / lib / lxc. Szablony tworzenia kontenerów przechowują również buforowane informacje o dystrybucji w / var / cache / lxc.

Zasadniczo dostęp do głównego systemu plików jest dozwolony tylko dla administratorów, chyba że podczas ich tworzenia wystąpi błąd lub niewłaściwa konfiguracja profili użytkowników.

Ale deweloperzy Ubuntu mogli już do tego dojść i zapewnili bezpieczne rozwiązanie przy pomocy AppArmor.

LXC jest dostarczany z profilem Apparmor, który ma chronić hosta przed przypadkowym niewłaściwym wykorzystaniem uprawnień w kontenerze. Na przykład kontener nie będzie mógł zapisywać /proc/sysrq-triggerani do większości /sysplików.

Profil usr.bin.lxc-start jest wprowadzany przez uruchomienie lxc-start. Profil ten przede wszystkim uniemożliwia lxc-startowi montowanie nowych systemów plików poza głównym systemem plików kontenera. Przed uruchomieniem init kontenera LXC żąda przełączenia do profilu kontenera. Domyślnie ten profil jest domyślną polityką kontenera lxc, która jest zdefiniowana w /etc/apparmor.d/lxc/lxc-default. Ten profil uniemożliwia kontenerowi dostęp do wielu niebezpiecznych ścieżek i montaż większości systemów plików.

Jeśli stwierdzisz, że lxc-start kończy się niepowodzeniem z powodu legalnego dostępu, którego odmawia jego polityka Apparmor, możesz wyłączyć profil lxc-start, wykonując:

sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start
sudo ln -s /etc/apparmor.d/usr.bin.lxc-start /etc/apparmor.d/disabled/

Spowoduje to, że lxc-start będzie działał nieskończenie, ale nadal będzie ograniczał sam kontener. Jeśli chcesz również wyłączyć ograniczenie kontenera, oprócz usr.bin.lxc-startprofilu musisz dodać:

lxc.aa_profile = unconfined

do pliku konfiguracyjnego kontenera. Jeśli chcesz uruchomić kontener w profilu niestandardowym, możesz utworzyć nowy profil w /etc/apparmor.d/lxc/. Jego nazwa musi zaczynać się od lxc-, aby lxc-start mógł przejść do tego profilu. Po utworzeniu zasady załaduj ją za pomocą:

sudo apparmor_parser -r /etc/apparmor.d/lxc-containers

Profil zostanie automatycznie załadowany po ponownym uruchomieniu, ponieważ pochodzi z pliku /etc/apparmor.d/lxc-containers. Na koniec, aby kontener CN używał tego nowego lxc-CN-profile, dodaj następujący wiersz do pliku konfiguracyjnego:

lxc.aa_profile = lxc-CN-profile

lxc-execute nie wchodzi do profilu Apparmor, ale pojemnik, który spawnuje, będzie ograniczony.

rɑːdʒɑ
źródło
Wielkie dzięki za odpowiedź. Czy mówisz, że jeśli korzystam z AppArmor, jest to bezpieczne?
iCode
@iCode, Yes appArmor zaprojektowany do ochrony aplikacji Ubuntu, a LXC zapewnia również doskonałą obsługę w zakresie bezpieczeństwa, jeśli używasz AppArmor.
rɑːdʒɑ
AppArmor to nie wszystko, na przykład znalazłem, że dmesgmożna go wywołać z dowolnego kontenera (przynajmniej w domyślnej konfiguracji). Obawiam się, że to nie jedyne zagrożenie bezpieczeństwa ...
Daniel Alder