, 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 nodePer 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 2000Per eseguire tutti i processi successivi come utente node, eseguire:
USER nodeUlteriori dettagli in .
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:
idOtterrai 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 shadowPassaggio 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 e . Un confronto dettagliato delle direttive .
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
