Pengguna di Docker

Π΅ΠΉ ΠΎΠΏΡ‹Π»ΠΎΠ², CTO kami, menyukai, secara aktif menggunakan dan mempromosikan Docker. Di artikel baru, dia menjelaskan cara membuat pengguna di Docker. Benar bekerja dengan mereka, mengapa pengguna tidak boleh dibiarkan dengan hak root dan bagaimana mengatasi masalah indikator yang tidak cocok di Dockerfile.

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

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 ENV ΠΈ ARG. Perbandingan arahan yang mendetail 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 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

Tambah komentar