Middle
Proč je považováno za špatnou praxi spouštět kontejner jako uživatel root v Kubernetes?
sobes.tech AI
Odpověď od AI
Spouštění kontejnerů jako uživatel root v Kubernetes představuje zvýšená bezpečnostní rizika:
- Vysoká úroveň privilegií: V případě kompromitace kontejneru získá útočník root práva uvnitř kontejneru. To může umožnit eskalaci privilegií na hostitelském systému nebo přístup k dalším zdrojům clusteru.
- Přístup k souborovému systému hostitele: Bez vhodných omezení může root proces uvnitř kontejneru mít přístup k souborovému systému uzlu, na kterém běží, což zvyšuje pravděpodobnost neoprávněných změn nebo úniku dat.
- Zranitelnosti jádra: Root uživatel v kontejneru může využít zranitelnosti jádra Linuxu k opuštění kontejneru a získání kontroly nad hostitelem.
- Těžkosti s auditem: Sledování akcí root uživatele je složitější, což ztěžuje odhalování a vyšetřování bezpečnostních incidentů.
- Dědičnost privilegií: Pokud jsou spuštěny jiné procesy z root uživatele, budou mít také vysokou úroveň privilegií.
Doporučuje se dodržovat princip minimálních práv a spouštět kontejnery s neprivilegovaným uživatelem. To lze nakonfigurovat v manifestu podu pomocí securityContext:
securityContext:
runAsUser: 1000 # Použití neprivilegovaného uživatele s ID 1000
runAsGroup: 3000 # Přiřazení ke skupině s ID 3000 (volitelné)
allowPrivilegeEscalation: false # Zakázat eskalaci privilegií
readOnlyRootFilesystem: true # Zakázat zápis do kořenového souborového systému kontejneru
Dále lze použít:
- Pod Security Policies / Pod Security Admission: Pro aplikaci bezpečnostních politik na úrovni podu.
- AppArmor / SELinux: Pro dodatečnou izolaci kontejnerů.
- Použití obrazů kontejnerů s výslovně uvedeným neprivilegovaným uživatelem: V
Dockerfilepomocí instrukceUSER.
# Příklad Dockerfile s určením uživatele
FROM ubuntu:latest
# Vytvoření neprivilegovaného uživatele
RUN useradd -ms /bin/bash myuser
# Přepnutí na tohoto uživatele
USER myuser
CMD ["/bin/bash"]