Pengguna dalam Docker

Andrey Kopylov, CTO kami, suka, menggunakan dan mempromosikan Docker secara aktif. Dalam artikel baharu, beliau menerangkan cara membuat pengguna dalam Docker. Betulkan kerja dengan mereka, mengapa pengguna tidak boleh dibiarkan dengan hak root dan cara menyelesaikan masalah penunjuk yang tidak sepadan dalam Dockerfile.

Semua proses dalam bekas akan dijalankan sebagai pengguna akar, melainkan anda menentukannya dengan cara yang istimewa. Ini nampaknya sangat mudah, kerana pengguna ini tidak mempunyai sekatan. Inilah sebabnya mengapa bekerja sebagai root adalah salah dari sudut pandangan keselamatan. Jika tiada sesiapa yang waras bekerja pada komputer tempatan dengan hak root, maka banyak proses dijalankan di bawah akar dalam bekas.

Sentiasa ada pepijat yang akan membenarkan perisian hasad melarikan diri dari bekas dan masuk ke komputer hos. Dengan mengandaikan yang paling teruk, kita mesti memastikan bahawa proses di dalam bekas dijalankan oleh pengguna yang tidak mempunyai sebarang hak pada mesin hos.

Mencipta pengguna

Mencipta pengguna dalam bekas tidak berbeza dengan menciptanya dalam pengedaran Linux. Walau bagaimanapun, arahan mungkin berbeza untuk imej asas yang berbeza.

Untuk pengedaran berasaskan debian, anda perlu menambah yang berikut pada Dockerfile:

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

Untuk alpine:

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

Menjalankan proses daripada pengguna

Untuk menjalankan semua proses berikutnya sebagai pengguna dengan UID 2000, jalankan:

USER 2000

Untuk menjalankan semua proses seterusnya sebagai pengguna nod, jalankan:

USER node

Lebih banyak di dokumentasi.

Jumlah pelekap

Apabila memasang volum di dalam bekas, berikan pengguna keupayaan untuk membaca dan/atau menulis fail. Untuk melakukan ini, UID (GID) pengguna dalam bekas dan pengguna di luar bekas yang mempunyai kebenaran yang sesuai untuk mengakses fail mesti sepadan. Dalam kes ini, nama pengguna tidak penting.

Selalunya pada komputer Linux, UID dan GID pengguna adalah sama dengan 1000. Pengecam ini diberikan kepada pengguna pertama komputer.

Mencari pengecam anda adalah mudah:

id

Anda akan menerima maklumat menyeluruh tentang pengguna anda.
Gantikan 2000 daripada contoh dengan pengecam anda dan semuanya akan baik-baik saja.

Menetapkan UID dan GID kepada pengguna

Jika pengguna telah dibuat sebelum ini, tetapi anda perlu menukar pengecam, anda boleh melakukannya seperti ini:

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

Jika anda menggunakan imej asas alpine, anda perlu memasang pakej bayangan:

RUN apk add β€”no-cache shadow

Melepasi ID pengguna di dalam bekas semasa membina imej

Jika ID anda dan ID semua orang yang bekerja pada projek itu sepadan, maka nyatakan ID ini dalam Dockerfile. Walau bagaimanapun, selalunya ID pengguna tidak sepadan.

Bagaimana untuk mencapai apa yang anda inginkan tidak begitu jelas. Bagi saya, ini adalah perkara yang paling sukar dalam proses menguasai Docker. Ramai pengguna buruh pelabuhan tidak menyedari bahawa terdapat pelbagai peringkat dalam kehidupan imej. Pertama, imej itu dipasang menggunakan Dockerfile. Apabila menjalankan bekas daripada imej, Dockerfile tidak lagi digunakan.

Penciptaan pengguna mesti berlaku apabila imej dibina. Perkara yang sama berlaku untuk menentukan pengguna di bawah siapa proses dilancarkan. Ini bermakna kita mesti melepasi UID (GID) di dalam bekas.

Arahan digunakan untuk menggunakan pembolehubah luaran dalam Dockerfile ENV ΠΈ ARG. Perbandingan terperinci arahan di sini.

Dockerfile

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

Anda boleh menyampaikan hujah melalui docker-compose seperti ini:

compiler-compose

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

PS Untuk menguasai semua selok-belok Docker, membaca dokumentasi atau artikel tidak mencukupi. Anda perlu banyak berlatih, anda perlu merasai Docker.

Sumber: www.habr.com

Tambah komen