Utente in Docker

Andrei Kopylov, il nostro direttore tecnico, ama, utilizza attivamente e promuove Docker. Nel suo nuovo articolo racconta come creare utenti in Docker. Il corretto utilizzo degli utenti, perché non dovrebbero essere lasciati con i diritti di root e come risolvere il problema della non corrispondenza degli indicatori nel Dockerfile.

Tutti i processi all'interno del contenitore verranno eseguiti con l'utente root, a meno che non venga indicato in modo specifico. Questo sembra molto comodo, poiché questo utente non ha alcuna limitazione. Proprio per questo motivo, lavorare con il root è sbagliato dal punto di vista della sicurezza. Se sul computer locale nessuno lavora con i diritti di root in buona salute mentale, molti avviano processi con root nei contenitori.

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

Creazione dell'utente

La creazione di un utente all'interno di un contenitore non è diversa da quella nei distribuzioni Linux. Tuttavia, le istruzioni possono variare a seconda delle immagini di base.

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

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

Avvio dei processi come utente

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

USER 2000

Per avviare tutti i successivi processi come utente node eseguire:

USER node

Ulteriori informazioni su documentazione.

Montaggio dei volumi

Quando si montano volumi all'interno del contenitore, assicurarsi che l'utente possa leggere e/o scrivere file. Per fare ciò, l'UID (GID) dell'utente nel contenitore e dell'utente al di fuori del contenitore, che ha i diritti corrispondenti di accesso 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

Riceverai informazioni complete sul tuo utente.
Sostituisci 2000 negli esempi con il tuo identificatore e tutto sarà a posto.

Assegnazione di UID e GID all'utente

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

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

Se stai utilizzando un'immagine di base alpine, è necessario installare il pacchetto shadow:

RUN apk add --no-cache shadow

Trasferimento 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, basta indicare questo identificatore nel Dockerfile. Tuttavia, spesso gli identificatori degli utenti non coincidono.

Non è subito chiaro come raggiungere l'obiettivo desiderato. Per me è 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 costruita, a tal fine si utilizza il Dockerfile. Durante l'esecuzione del contenitore dall'immagine, il Dockerfile non viene più utilizzato.

La creazione degli utenti deve avvenire durante la costruzione dell'immagine. Lo stesso vale per la definizione dell'utente sotto cui vengono eseguiti i processi. Significa che in qualche modo dobbiamo passare all'interno del contenitore UID (GID).

Per utilizzare variabili esterne nel Dockerfile vengono utilizzate le direttive 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 apprendere tutte le complessità di docker non è sufficiente leggere la documentazione o articoli. È necessario praticare molto, bisogna 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