3.2 Konttiprosessien UID:t OpenShiftissä

Last modified by tykkala@helsinki_fi on 2024/02/07 06:34

Root-käyttäjä ei ole sallittu konteissa

Oletuksena OpenShift arpoo kontin sisällä prosessia ajavan käyttäjän UID:n tietystä numeroavaruudesta. Tiken jaetuilla konttialustoilla tätä tietoturvaominaisuutta ei ilman erittäin hyvin perusteltua syytä poisteta käytöstä asiakasprojekteille.

OpenShiftissä ajetuissa konteissa ei siis voida ajaa prosesseja root-käyttäjänä eikä minään muunakaan ennalta määritettävänä UID:nä. Dockerfilejen USER-määreet jyrätään yli: OpenShift arpoo UID:t näistä huolimatta.

Kontissa ajettavan prosessin satunnainen UID asettaa toisinaan haasteita tiedostojen oikeuksille ja prosessin avaamille porteille. Prosessit eivät pysty avaamaan kaikkia kontti-imagen sisältämiä tiedostoja eivätkä avaamaan matalia portteja (<1024). Usein myös ohjelmistoprojektien itse tarjoamat Dockerfilet tai Dockerhubin kautta levittämät imaget olettavat, että root-käyttäjä on kontin sisällä mahdollinen, joten näitä imageja ei voida OpenShiftissä käyttää.

Neuvoja:

  • Kannattaa selvittää, saisiko valmiin sovelluksen sellaisena versiona, joka toimii OpenShiftin päällä. Toisinaan valmiiden ohjelmistojen tarjoavat myös OpenShiftiä varten muutoksia. Lisäksi joistakin valmiista imageista saattaa löytyä myös virallinen rajoitetuilla oikeuksilla toimiva versio, esim. https://hub.docker.com/r/nginxinc/nginx-unprivileged
    • Konttialustan ylläpito pyrkii laittamaan esimerkkejä tälle sivulle esimerkkisovelluksista. Tämä on kuitenkin vielä työnalla.
  • Tiedosto-oikeudet tulisi kontin sisällä antaa GID 0:n välityksellä. OpenShift asettaa automaattisesti ryhmäjäsenyyden GID=0 (root) kontin sisällä ajettaville prosesseille. Jos sovellus haluaa käyttää kontin sisältä tiedostoja, tulisi siis ryhmälle 0 määritellä oikeudet oikeisiin tiedostoihin halutulla tavalla.
  • Aseta sovelluksesi vastaanottamaan liikennettä portissa ≥1024. Ulospäin näkyvän palvelun avaaminen normaaliin porttiin 80 tai 443 tehdään servicen ja routen kautta. Kätevintä on, jos sovellukselle voi kertoa avattavan portin esim. ympäristömuuttujalla tai konttiin ulkopuolelta liitettävässä konfiguraatiotiedostossa.

Lisätietoa ja ohjeita:


PodmanJos haluat käyttää Podmania kehitystyökaluna Dockerin sijasta ja jättää taaksesi root-oikeuksien tarjoamisen kontille, seuraavasta linkistä on apua:

Podmanille on neljä eri konfiguraatiota liittyen käyttäjään kontin sisällä ja ulkopuolella:

  • Root podman, root kontissa
  • Ei root podman, root kontissa
  • Root podman, ei root kontissa
  • Ei root podman, ei root kontissa.

Näistä ylin on selkeästi huonoin tietoturvallisuuden kannalta, ja alin paras. Kaksi ylintä ovat yliopiston OpenShift toteutuksessa mahdottomia, koska konttien sisällä root oikeudet on kielletty kokonaan. Podmanin käytön etuna on se, että se voi mapata UID/GID nimiä konttirajan läpi, ja antaa konteissa ajettaville prosesseille oikeudet käyttää esimerkiksi käyttäjän kotihakemistoa.

Toiseksi alimmassa tapauksessa on lisäksi vaarana se että prosessi esittää OpenShiftin näkymästä jotain muuta käyttäjää kuin se oikeasti on. Jos esimerkiksi kontin sisällä on UID 4000 (Mikko) ja kontin ulkopuolella on eri käyttäjällä UID 4000 (Tiina), jokainen kontissa Mikkona pyörivä prosessi näkyy OpenShiftille pyörivän Tiinana. Myös tästä syystä alin esimerkki on ainoa jota suositellaan.


Tarkka ohje rootless podmanin käytöstä: https://www.tutorialworks.com/podman-rootless-volumes/


Yhteystietoja

Suositeltu yhteydenottotapa kysymyksiin on:

https://helsinkifi.slack.com #kontit 

Resurssien lisäys/muutospyynnöt kannattaa lähettää sähköpostilla.

grp-openshift-owner@helsinki.fi (alustan ylläpito ja kehitys)

tike-ohjelmistotuotanto@helsinki.fi (sovelluskehitys)