Mam kontener Docker (LXC), który obsługuje MySQL. Skoro idea Dockera polega na tym, że „jeden działający proces na kontener”, jeśli zdefiniuję profile AppArmor ukierunkowane na plik binarny MySQL, to czy będą one egzekwowane? Czy jest jakiś sposób, żeby to sprawdzić?
11
cgroups
, ale nie za bardzo . Lepiej być bezpiecznym niż żałować, wolę zablokować MySQL niż pozwolić, aby MySQL zero-day znalazł sposób na wyjście z grupy.Odpowiedzi:
Po pierwsze, grupy cg nie są używane do izolowania aplikacji od innych w systemie. Służą do zarządzania wykorzystaniem zasobów i dostępem do urządzeń. Różne przestrzenie nazw (PID, UTS, mount, user ...) zapewniają pewną (ograniczoną) izolację.
Ponadto proces uruchomiony w kontenerze Docker prawdopodobnie nie będzie w stanie zarządzać profilem AppArmor, pod którym działa. Obecnie stosowane podejście polega na skonfigurowaniu określonego profilu AppArmor przed uruchomieniem kontenera.
Wygląda na to, że sterownik wykonywania libcontainer w Docker obsługuje ustawianie profili AppArmor dla kontenerów , ale nie mogę znaleźć żadnego dokumentu ani odniesienia w tym dokumencie.
Najwyraźniej AppArmor jest także obsługiwany przez LXC w Ubuntu .
Powinieneś napisać profil AppArmor dla swojej aplikacji i upewnić się, że LXC / libcontainer / Docker / ... załaduje go przed uruchomieniem procesów w kontenerze.
Profile używane w ten sposób powinny być egzekwowane, a aby je przetestować, powinieneś spróbować nielegalnego dostępu i upewnić się, że się nie powiedzie.
W tym przypadku nie ma powiązania między profilem binarnym a faktycznie wymuszonym. Musisz wyraźnie powiedzieć Docker / LXC, aby używał tego profilu dla twojego kontenera. Napisanie profilu dla pliku binarnego MySQL wymusi go tylko na hoście, a nie w kontenerze.
źródło
Odpowiedź jest bardzo prawdopodobna: nie.
W Ubuntu Server temat przypomnienie LXC omówione dość dużo dokładną pytanie i czyni następujące oświadczenie:
Lepszym sposobem uniknięcia exploitów mających niepożądane efekty jest ograniczenie użytkownika uruchamiającego kontener i użycie kontenerów LXC przestrzeni użytkownika, które wykorzystują funkcję jądra użytkownika. Jednak
docker
obecnie - o ile mi wiadomo - nie obsługujeuserns
.W takim przypadku MySQL działałby - z perspektywy hostów - jako nieuprzywilejowany użytkownik, podczas gdy wewnątrz kontenera mógłby być uruchamiany jako
root
. Wiptables
razie potrzeby możesz użyć powiązania MySQL z zewnętrznym portem hosta.źródło