‫W porządku. Wiemy, aby nie uruchamiać się jako root w kontenerze.
‫Ale, nawiasem mówiąc, poza kontenerem root w kontenerze
‫nie ma bezpośredniego dostępu do niczego na hoście,
‫prawda. Tylko dlatego, że
‫jesteś rootem w kontenerze, nadal tam jesteś więziony.
‫Ale jeśli chcesz
‫przejść na następny poziom, gdzie jeśli użytkownik ma nawet root w
‫kontenerze, chce się przedostać do hosta, ponieważ
‫istnieje jądro podatności, o której mówiliśmy,
‫na przykład brudna krowa lub inna luka w Docker
‫lub coś.
‫Następnie następnym krokiem jest włączenie przestrzeni nazw użytkowników, która
‫nie jest domyślnie włączona.
‫Mam tutaj link do artykułu na blogu, który
‫mówi o tym wszystko.
‫Zasadniczo jest to ustawienie dla jednego hosta ustawione w konfiguracji
‫Docker. Docker JSON.
‫Mówi Dockerowi, że za każdym razem, gdy tworzy nowy kontener,
‫aby uruchomić ten kontener
‫jako użytkownik inny niż root na hoście.
‫Zasadniczo jest tam kilka
‫programów, containerd i runC, które są innymi programami używanymi przez
‫Dockera do uruchamiania twojego kontenera.
‫Domyślnie działają one jako root.
‫Funkcja Docker polega na włączaniu przestrzeni nazw użytkowników,
‫co w gruncie rzeczy
‫oznacza, że ponieważ Docker tworzy te kontenery, nie odradza
‫ich jako podproces, który działa jako root, podobnie jak Docker.
‫Odrodzi je jako użytkownik o wysokiej liczbie.
‫Rodzaj niekoniecznie przypadkowego użytkownika, ale użytkownika wysokiego
‫poziomu.
‫Oznacza to, że jeśli w tym
‫kontenerze występują jakiekolwiek luki w zabezpieczeniach, w
‫których użytkownik może uciec z kontenera, nadal będzie tylko
‫użytkownik na hoście. Ponieważ to oni będą
‫działać jako użytkownik, którego używa proces uruchamiający ten
‫kontener. Zasadniczo runC.
‫Program runC uruchamia ten kontener i będzie
‫działał jako użytkownik o wysokiej liczbie, a
‫nie root. Ten użytkownik tak naprawdę nie
‫ma żadnych uprawnień poza tym kontenerem. Tak więc ta funkcja jest
‫ustawieniem dla jednego hosta, a nie dla jednego kontenera,
‫i nie wszystko działa w przestrzeniach nazw użytkowników.
‫Musisz po prostu spróbować i poćwiczyć.
‫Musisz włączyć tę funkcję na niektórych serwerach, wypróbować aplikacje
‫na tym serwerze, sprawdzić, czy działają.
‫Jeśli nie, będziesz musiał podzielić swoją
‫architekturę na segmenty. Ilekroć implementuję
‫przestrzenie nazw użytkowników w klastrze, zwykle mamy określone węzły
‫robocze z włączonymi przestrzeniami użytkowników.
‫To tam działają te programy, które mogą go obsługiwać, które
‫z nim współpracują.
‫Cała reszta musi działać na zwykłych serwerach Docker
‫w innym miejscu. W ten sposób dzielimy to na segmenty.
‫Dzielimy na dwie klasy serwerów.
‫To, wiesz, jeśli prowadzisz strefę DMZ, to właśnie
‫bym to zrobił, uruchomiłbym w strefie DMZ wszystkie
‫przestrzenie nazw użytkowników na wszystkich serwerach,
‫a następnie uruchomione kontenery musiałby istnieć, musiałby obsługiwać przestrzenie
‫nazw użytkowników.
‫Nie możesz przejść do aplikacji i dowiedzieć się, czy obsługują one
‫przestrzenie nazw użytkowników.
‫To jest... przestrzenie nazw użytkowników niekoniecznie są
‫funkcją specyficzną dla Docker. Zasadniczo oznacza to,
‫że Twój kontener działa w przestrzeni nazw,
‫a teraz aplikacja uruchomiona dla tego kontenera jest również
‫nieco zablokowana.
‫Nie wszystko może to obsługiwać. Będziesz musiał
‫po prostu poćwiczyć, a może poszukać informacji, czy
‫inni ludzie byli w stanie sprawić,
‫by działało pod nim. Wiesz, dla typowych rzeczy, takich jak
‫MySQL i takie tam. Ale oczywiście w
‫przypadku własnych programów, które opracowujesz, będziesz musiał je przetestować,
‫aby sprawdzić, czy zadziałają. Powiedziałbym, że większość
‫programów i popularnych języków, które uruchamiam, działają
‫dobrze w przestrzeniach nazw użytkowników. Prawdziwy problem z przestrzeniami
‫nazw użytkowników polega na tym, że masz aplikację, która musi
‫pisać w woluminach lub wiązać montowania, że
‫być może masz przesłane pliki użytkownika i
‫udostępniasz je w wielu różnych kontenerach. To tam przestrzenie nazw użytkowników nie są niemożliwe.
‫To staje się trochę trudne, ponieważ pliki, które
‫są teraz zapisywane na dysku na hoście są teraz
‫zapisywane jako inny użytkownik.
‫Ponieważ ten proces na hoście zarządzającym kontenerem
‫jest innym użytkownikiem.
‫Zobaczysz różne identyfikatory użytkowników w tych plikach i po prostu będziesz musiał
‫sobie z tym poradzić.
‫W tym momencie istnieją standardowe uprawnienia do Linuksa i
‫wystarczy zautomatyzować i rozwiązać te problemy na różne
‫standardowe sposoby dla Linuksa.
‫W tym momencie nie jest to nawet problem Dockera.
‫To tylko problem z uprawnieniami na hoście.