Semua proses dalam wadah akan dijalankan sebagai pengguna root, kecuali Anda menentukannya dengan cara khusus. Tampaknya sangat nyaman karena pengguna ini tidak memiliki batasan. Inilah sebabnya mengapa bekerja sebagai root salah dari sudut pandang keamanan. Jika tidak ada orang waras yang bekerja di komputer lokal dengan hak root, maka banyak yang menjalankan proses di bawah root dalam container.
Selalu ada bug yang memungkinkan malware keluar dari wadahnya dan masuk ke komputer host. Dengan asumsi yang terburuk, kita harus memastikan bahwa proses di dalam container dijalankan oleh pengguna yang tidak memiliki hak apa pun pada mesin host.
Membuat pengguna
Membuat pengguna dalam sebuah container tidak berbeda dengan membuatnya di distribusi Linux. Namun, perintahnya mungkin berbeda untuk gambar dasar yang berbeda.
Untuk distribusi berbasis Debian, Anda perlu menambahkan yang berikut ini ke Dockerfile:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home node
Untuk pegunungan Alpen:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Menjalankan proses dari pengguna
Untuk menjalankan semua proses selanjutnya sebagai pengguna dengan UID 2000, jalankan:
USER 2000
Untuk menjalankan semua proses selanjutnya sebagai pengguna node, jalankan:
USER node
Lebih dalam
Volume pemasangan
Saat memasang volume di dalam wadah, berikan pengguna kemampuan untuk membaca dan/atau menulis file. Untuk melakukan hal ini, UID (GID) pengguna dalam penampung dan pengguna di luar penampung yang memiliki izin yang sesuai untuk mengakses file harus cocok. Dalam hal ini, nama pengguna tidak menjadi masalah.
Seringkali di komputer Linux, UID dan GID pengguna sama dengan 1000. Pengidentifikasi ini ditetapkan ke pengguna pertama komputer tersebut.
Menemukan pengidentifikasi Anda itu mudah:
id
Anda akan menerima informasi lengkap tentang pengguna Anda.
Ganti 2000 dari contoh dengan pengenal Anda dan semuanya akan baik-baik saja.
Menetapkan UID dan GID ke pengguna
Jika pengguna telah dibuat sebelumnya, tetapi Anda perlu mengubah pengidentifikasinya, Anda dapat melakukannya seperti ini:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Jika Anda menggunakan gambar dasar alpine, Anda perlu menginstal paket shadow:
RUN apk add βno-cache shadow
Melewati ID pengguna di dalam wadah saat membuat gambar
Jika ID Anda dan ID semua orang yang mengerjakan proyek cocok, maka tentukan saja ID ini di Dockerfile. Namun seringkali user ID tidak cocok.
Cara mencapai apa yang Anda inginkan tidak langsung jelas. Bagi saya, ini adalah hal tersulit dalam proses penguasaan Docker. Banyak pengguna buruh pelabuhan tidak menyadari bahwa ada tahapan berbeda dalam kehidupan sebuah gambar. Pertama, gambar dirakit menggunakan Dockerfile. Saat menjalankan container dari image, Dockerfile tidak lagi digunakan.
Pembuatan pengguna harus dilakukan saat image dibuat. Hal yang sama berlaku untuk menentukan pengguna yang menjalankan proses. Artinya kita harus meneruskan UID (GID) ke dalam container.
Arahan digunakan untuk menggunakan variabel eksternal di Dockerfile
Dockerfile
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Anda dapat menyampaikan argumen melalui docker-compose seperti ini:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Untuk menguasai semua seluk-beluk Docker, membaca dokumentasi atau artikel saja tidak cukup. Anda perlu banyak berlatih, Anda perlu memahami Docker.
Sumber: www.habr.com