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
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
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