GNU/Linux >> Znalost Linux >  >> Linux

Jak přidat uživatele do kontejneru Docker?

Trik je v použití useradd místo jeho interaktivního obalu adduser .Obvykle vytvářím uživatele s:

RUN useradd -ms /bin/bash newuser

který vytvoří domovský adresář pro uživatele a zajistí, že bash je výchozí shell.

Poté můžete přidat:

USER newuser
WORKDIR /home/newuser

do vašeho dockerfile. Každý následující příkaz i interaktivní relace budou provedeny jako uživatel newuser :

docker run -t -i image
[email protected]:~$

Možná budete muset zadat newuser oprávnění ke spouštění programů, které hodláte spouštět před vyvoláním uživatelského příkazu.

Použití neprivilegovaných uživatelů uvnitř kontejnerů je z bezpečnostních důvodů dobrý nápad. Má také několik nevýhod. A co je nejdůležitější, lidé odvozující obrázky z vašeho obrázku se budou muset přepnout zpět na root, než budou moci provádět příkazy s oprávněními superuživatele.


Přidání uživatele do dockeru a spuštění aplikace pod tímto uživatelem je z hlediska zabezpečení velmi dobrý postup. K tomu bych doporučil následující kroky:

FROM node:10-alpine

# Copy source to container
RUN mkdir -p /usr/app/src

# Copy source code
COPY src /usr/app/src
COPY package.json /usr/app
COPY package-lock.json /usr/app

WORKDIR /usr/app

# Running npm install for production purpose will not run dev dependencies.
RUN npm install -only=production    

# Create a user group 'xyzgroup'
RUN addgroup -S xyzgroup

# Create a user 'appuser' under 'xyzgroup'
RUN adduser -S -D -h /usr/app/src appuser xyzgroup

# Chown all the files to the app user.
RUN chown -R appuser:xyzgroup /usr/app

# Switch to 'appuser'
USER appuser

# Open the mapped port
EXPOSE 3000

# Start the process
CMD ["npm", "start"]

Výše uvedené kroky jsou úplným příkladem kopírování souborů projektu NodeJS, vytvoření skupiny uživatelů a uživatele, přiřazení oprávnění uživateli pro složku projektu, přepnutí na nově vytvořeného uživatele a spuštění aplikace pod tímto uživatelem.


Ubuntu

Zkuste následující řádky v Dockerfile :

RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1001 ubuntu
USER ubuntu
WORKDIR /home/ubuntu

useradd možnosti (viz:man useradd ):

  • -r , --system Vytvořte systémový účet.
  • -m , --create-home Vytvořte domovský adresář uživatele.
  • -d , --home-dir HOME_DIR Domovský adresář nového účtu.
  • -s , --shell SHELL Přihlašovací prostředí nového účtu.
  • -g , --gid GROUP Název nebo ID primární skupiny.
  • -G , --groups GROUPS Seznam doplňkových skupin.
  • -u , --uid UID Zadejte ID uživatele.
  • -p , --password PASSWORD Šifrované heslo nového účtu (např. ubuntu ).

Nastavení výchozího hesla uživatele

Chcete-li nastavit heslo uživatele, přidejte -p "$(openssl passwd -1 ubuntu)" na useradd příkaz.

Případně přidejte do Dockerfile následující řádky :

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN echo 'ubuntu:ubuntu' | chpasswd

První instrukce shellu je ujistit se, že -o pipefail možnost je povolena před RUN s trubkou v něm. Přečtěte si více:Hadolint:Linting your Dockerfile.


Abyste se vyhnuli interaktivním otázkám uživatele adduser, můžete to volat s těmito parametry:

RUN adduser --disabled-password --gecos '' newuser

--gecos Parametr se používá k nastavení doplňkových informací. V tomto případě je pouze prázdný.

Na systémech s busyboxem (jako Alpine) použijte

RUN adduser -D -g '' newuser

Viz busybox adduser


Linux
  1. Jak přidat uživatele do skupiny v Linuxu

  2. Jak spustit program uvnitř kontejneru Docker?

  3. Jak spustit MySQL v kontejneru Docker

  1. Jak přidat uživatele do Ubuntu?

  2. Jak spustit příkaz na spuštěném kontejneru Docker

  3. Jak spustit úlohu cron uvnitř kontejneru dockeru

  1. Jak přidat uživatele do skupiny v Linuxu

  2. Jak opustit kontejner Docker

  3. Jak poslat signál ke spuštění programu v kontejneru dockeru?