Przełącznik „Uprawnienia” aplikacji ZimaOS działa w praktyce jak uprzywilejowany tryb Dockera. Zespół wsparcia IceWhale opisał go jako przyznający kontenerowi uprawnienia podobne do uprawnień hosta, bezpośredni dostęp do sprzętu oraz możliwości na poziomie roota. Włączaj go tylko wtedy, gdy aplikacja rzeczywiście wymaga takiego poziomu dostępu.
W przypadku większości aplikacji tryb uprzywilejowany jest zbędny i osłabia izolację, dzięki której kontenery są bezpieczniejsze. Zamiast przyznawać kontenerowi dostęp do wszystkiego, lepiej zmapować jedno urządzenie lub dodać jedną możliwość systemu Linux.
Co zmienia tryb uprzywilejowany
Aktualny przewodnik Dockera dotyczący kontenerów uprzywilejowanych wyjaśnia, że parametr --privileged przyznaje kontenerowi wszystkie możliwości systemu Linux oraz dostęp do wszystkich urządzeń hosta, jednocześnie łagodząc najważniejsze mechanizmy bezpieczeństwa.
Dlaczego IceWhale opisało go jako dostęp na poziomie hosta
Oficjalna odpowiedź źródłowa mówi, że proces kontenera może uzyskiwać bezpośredni dostęp do sprzętu hosta i działać z uprawnieniami podobnymi do uprawnień roota. To przydatne krótkie wyjaśnienie, ale praktyczny wpływ na bezpieczeństwo jest szerszy: kontener nie jest już silnie odizolowany.
Nie włączaj uprawnień tylko po to, by naprawić przypadkowy błąd
Jeśli aplikacja nie może uzyskać dostępu do urządzenia USB, GPU, funkcji sieciowej lub punktu montowania, najpierw ustal dokładnie, którego uprawnienia brakuje. Tryb uprzywilejowany może ukryć rzeczywisty problem z konfiguracją, jednocześnie narażając całego hosta.
Preferuj mapowanie urządzeń
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
W przypadku jednego urządzenia sprzętowego zmapuj to urządzenie zamiast wszystkich urządzeń hosta.
Preferuj konkretne możliwości systemu Linux
cap_add:
- NET_ADMIN
Kontener VPN lub routera może wymagać konkretnej możliwości sieciowej. Jeśli dokumentacja aplikacji to umożliwia, przyznaj minimalny wymagany zestaw zamiast włączać tryb uprzywilejowany.
Aplikacje, które mogą zasadnie wymagać większego dostępu
Przykłady obejmują narzędzia do obsługi sprzętu niskiego poziomu, Docker-in-Docker, niektóre urządzenia VPN/sieciowe, zarządzanie urządzeniami USB oraz specjalistyczne oprogramowanie do monitorowania systemu. Nawet wtedy najpierw zapoznaj się z instrukcjami wdrożenia projektu nadrzędnego.
Aplikacje, które zwykle tego nie wymagają
Zwykłe aplikacje internetowe, biblioteki multimediów, aplikacje do notatek, bazy danych, menedżery zdjęć, panele oraz większość usług API nie powinny wymagać pełnego trybu uprzywilejowanego tylko po to, by działać.
Sprawdzaj uprawnienia po aktualizacji aplikacji
Stary pakiet aplikacji mógł włączać tryb uprzywilejowany dla wygody, nawet jeśli projekt nadrzędny dodał później bardziej ograniczone uprawnienia. Podczas aktualizacji ponownie sprawdź aktualne wymagania Compose.
Przewodnik po bezpieczeństwie Dockera przedstawia bezpieczniejszy sposób tworzenia aplikacji niestandardowych.
Sprawdź kontener przed przyznaniem dodatkowego dostępu
docker inspect CONTAINER
Sprawdź istniejące mapowania urządzeń, możliwości, punkty montowania, tryb sieci oraz konfigurację użytkownika. Wiele aplikacji nie działa, ponieważ brakuje jednego wymaganego urządzenia lub ścieżki, a nie dlatego, że potrzebują nieograniczonego dostępu do hosta.
Tryb uprzywilejowany może zwiększyć zakres skutków incydentu
Jeśli zwykła nieuprzywilejowana aplikacja internetowa zostanie zaatakowana, izolacja kontenera może ograniczyć zakres dostępu atakującego. Uprzywilejowany kontener może uzyskać dostęp do znacznie większej liczby urządzeń hosta i interfejsów jądra, więc luka w takiej aplikacji może mieć konsekwencje dla całego systemu.
Udokumentuj, dlaczego włączono uprawnienia
Jeśli celowo je włączasz, zapisz dokładnie, która funkcja tego wymaga. Podczas kolejnej aktualizacji aplikacji sprawdź ponownie, czy może działać z węższym zakresem uprawnień, i wyłącz przełącznik, jeśli nie jest już potrzebny.
Najczęściej zadawane pytania
Czy „Uprawnienia” oznaczają, że kontener działa jako root?
To coś więcej niż zwykłe uruchomienie kontenera jako root; tryb uprzywilejowany przyznaje szerokie możliwości hosta i dostęp do urządzeń.
Czy należy włączać tę opcję dla każdej aplikacji niestandardowej?
Nie. Pozostaw ją wyłączoną, chyba że dokumentacja projektu nadrzędnego wskazuje, że dane obciążenie jej wymaga.
Czy mogę przyznać dostęp tylko do GPU lub USB?
Tak. Preferuj konkretne mapowania urządzeń i ustawienia środowiska uruchomieniowego zamiast pełnego trybu uprzywilejowanego.
Czy tryb uprzywilejowany jest niebezpieczny?
Znacząco ogranicza izolację kontenera, więc zaatakowana uprzywilejowana aplikacja może mieć znacznie większy wpływ na hosta.
