Sobes.tech
Middle

Kodėl laikoma bloga praktika paleisti konteinerį kaip root vartotoją Kubernetes?

sobes.tech AI

Atsakymas iš AI

Konteinerių paleidimas iš naudotojo root Kubernetes'e kelia didesnę saugumo riziką:

  • Aukšto lygio privilegijos: Jei konteineris yra pažeistas, įsilaužėjas gauna root teises konteineryje. Tai gali leisti eskaluoti teises į host sistemą arba pasiekti kitus klasterio išteklius.
  • Prieiga prie host failų sistemos: Be tinkamų apribojimų, root procesas konteineryje gali turėti prieigą prie mazgo failų sistemos, kas padidina neteisėto pakeitimo ar duomenų nutekėjimo riziką.
  • Branduolio pažeidžiamumai: Root naudotojas konteineryje gali išnaudoti Linux branduolio pažeidžiamumus, kad išeitų iš konteinerio ir įgytų kontrolę virš host.
  • Auditų sudėtingumas: Veiksmų stebėjimas root naudotoju yra sudėtingesnis, kas apsunkina saugumo incidentų nustatymą ir tyrimą.
  • Privilegijų paveldėjimas: Jei iš pagrindinio naudotojo paleidžiami kiti procesai, jie taip pat turės aukštą privilegijų lygį.

Rekomenduojama laikytis mažiausių privilegijų principo, paleidžiant konteinerius iš neprivilegijuoto naudotojo. Tai galima sukonfigūruoti podo manifeste naudojant securityContext:

securityContext:
  runAsUser: 1000  # Naudojant neprivilegijuotą naudotoją su ID 1000
  runAsGroup: 3000 # Priklausomybė grupei su ID 3000 (pasirinktinai)
  allowPrivilegeEscalation: false # Privilegijų eskalacijos draudimas
readOnlyRootFilesystem: true # Draudžiama rašyti į pagrindinę failų sistemą

Taip pat galima naudoti:

  • Pod Security Policies / Pod Security Admission: saugumo politikų taikymui pod lygmeniu.
  • AppArmor / SELinux: papildomai izoliuoti konteinerius.
  • Naudoti konteinerių vaizdus su aiškiai nurodytu neprivilegijuotu naudotoju: Dockerfile naudojant USER instrukciją:
# Pavyzdinis Dockerfile su naudotojo nurodymu
FROM ubuntu:latest
# Sukurti neprivilegijuotą naudotoją
RUN useradd -ms /bin/bash myuser
# Pereiti prie sukurto naudotojo
USER myuser
CMD ["/bin/bash"]