Utente in Docker

Andrea Kopylov, il nostro direttore tecnico, ama utilizzare attivamente e promuovere Docker. Nel suo nuovo articolo, spiega come creare utenti in Docker. Ci racconta dell'importanza di lavorare correttamente con gli utenti, del perché non si dovrebbero lasciare privilegi di root e di come risolvere il problema delle incoerenze negli indicatori nel Dockerfile.

Tutti i processi all'interno del contenitore verranno eseguiti come utente root, a meno che non venga specificato diversamente. Questo sembra molto comodo, poiché questo utente non ha alcuna restrizione. Tuttavia, lavorare come root non è corretto dal punto di vista della sicurezza. Se nessuno utilizza i privilegi di root sui computer locali, molti avviano processi come root all'interno dei contenitori.

Ci sono sempre bug che consentono a un malware di uscire dal contenitore e di accedere al computer host. Considerando il peggio, dobbiamo garantire che i processi vengano eseguiti all'interno del contenitore da un utente che non ha alcun diritto sulla macchina host.

Creazione di un utente

La creazione di un utente in un contenitore non differisce da quella in distribuzioni Linux. Tuttavia, i comandi possono variare a seconda delle diverse immagini di base.

Per le distribuzioni basate su debian, è necessario aggiungere nel Dockerfile:

RUN groupadd --gid 2000 node 
  && useradd --uid 2000 --gid node --shell /bin/bash --create-home node

Per alpine:

RUN addgroup -g 2000 node 
    && adduser -u 2000 -G node -s /bin/sh -D node

Esecuzione di processi come utente

Per eseguire tutti i processi successivi come utente con UID 2000, eseguire:

USER 2000

Per eseguire tutti i processi successivi come utente node, eseguire:

USER node

Ulteriori dettagli in documentazione.

Montaggio dei volumi

Quando si montano i volumi all'interno del contenitore, assicurarsi che l'utente possa leggere e (o) scrivere file. A tal fine, l'UID (GID) dell'utente nel contenitore e dell'utente al di fuori del contenitore, che ha diritti di accesso corrispondenti al file, devono corrispondere. In questo caso, i nomi degli utenti non hanno importanza.

Spesso, su un computer Linux, l'utente ha UID e GID pari a 1000. Questi identificatori vengono assegnati al primo utente del computer.

Scoprire i propri identificatori è semplice:

id

Otterrai informazioni dettagliate sul tuo utente.
Sostituisci 2000 con il tuo identificatore e sarà tutto a posto.

Assegnazione di UID e GID all'utente

Se l'utente è stato creato in precedenza, ma è necessario modificare gli identificatori, puoi farlo in questo modo:

RUN usermod -u 1000 node 
  && groupmod -g 1000 node

Se stai usando un'immagine di base alpine, devi installare il pacchetto shadow:

RUN apk add --no-cache shadow

Passaggio dell'identificatore utente all'interno del contenitore durante la costruzione dell'immagine

Se il tuo identificatore e gli identificatori di tutte le persone che lavorano al progetto coincidono, è sufficiente specificare questo identificatore nel Dockerfile. Tuttavia, spesso gli identificatori degli utenti non coincidono.

Non è subito chiaro come realizzare il desiderato. Per me, questo è stato il più difficile nel processo di apprendimento di Docker. Molti utenti di Docker non si rendono conto che ci sono diverse fasi della vita dell'immagine. Prima l'immagine viene assemblata per questo si usa il Dockerfile. Durante l'avvio del contenitore dall'immagine, il Dockerfile non viene più utilizzato.

La creazione degli utenti deve avvenire durante la costruzione dell'immagine. Questo vale anche per la definizione dell'utente sotto il quale vengono eseguiti i processi. Ciò significa che dobbiamo in qualche modo trasferire l'UID (GID) all'interno del container.

Le direttive per utilizzare variabili esterne nel Dockerfile sono ENVARG. Un confronto dettagliato delle direttive qui.

Dockerfile

ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node 
  && groupmod -g $GID node

È possibile passare argomenti tramite docker-compose in questo modo:

docker-compose

build:
  context: ./src/backend
  args:
    UID: 1000
    GID: 1000

P.S. Per padroneggiare tutte le sfumature di docker, non basta leggere la documentazione o articoli. È necessario praticare molto, è importante sentire docker.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster