Pengguna di Docker

Andrey Kopylov , direktur teknis kami, mencintai, secara aktif menggunakan dan mempromosikan Docker. Dalam artikel baru, ia berbicara tentang cara membuat pengguna di Docker. Benar bekerja dengan mereka, mengapa pengguna tidak dapat dibiarkan dengan hak akses root dan bagaimana menyelesaikan masalah ketidakcocokan pengidentifikasi di Dockerfile.


Semua proses dalam wadah akan berjalan sebagai root, kecuali ditentukan secara khusus. Tampaknya sangat nyaman, karena pengguna ini tidak memiliki batasan. Itulah sebabnya bekerja di bawah root salah dari sudut pandang keamanan. Jika pada komputer lokal tidak ada orang waras yang bekerja dengan hak root, maka banyak yang memulai proses di bawah root dalam wadah.


Selalu ada bug yang memungkinkan malware keluar dari wadah dan sampai ke komputer host. Dengan asumsi yang terburuk, kita harus memastikan bahwa proses dimulai di dalam wadah dari pengguna yang tidak memiliki hak apa pun pada mesin host.


Pembuatan Pengguna


Membuat pengguna di sebuah wadah tidak berbeda dengan membuatnya di distribusi Linux. Namun, untuk gambar dasar yang berbeda, tim dapat bervariasi.


Untuk distribusi berbasis debian di Dockerfile, Anda harus menambahkan:



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 

Mulai proses dari pengguna


Untuk memulai semua proses selanjutnya dari pengguna dengan UID 2000, jalankan:


 USER 2000 

Untuk memulai semua proses selanjutnya dari simpul pengguna, jalankan:


 USER node 

Lebih detail dalam dokumentasi .


Mount volume


Saat memasang volume di dalam wadah, berikan pengguna kemampuan untuk membaca dan / atau menulis file. Untuk ini, UID (GID) dari pengguna dalam wadah dan pengguna di luar wadah yang memiliki hak akses yang sesuai untuk file harus sesuai. Dalam hal ini, nama pengguna tidak masalah.


Seringkali pada komputer Linux, pengguna UID dan GID adalah 1000. Pengidentifikasi ini ditugaskan untuk pengguna komputer pertama.


Mendapatkan pengenal Anda mudah:


 id 

Anda akan menerima informasi lengkap tentang pengguna Anda.
Ganti 2000 contoh dengan pengenal Anda dan semuanya akan baik-baik saja.


Tetapkan UID dan GID Pengguna


Jika pengguna dibuat sebelumnya, tetapi perlu untuk mengubah pengidentifikasi, maka Anda dapat melakukannya seperti ini:


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

Jika Anda menggunakan gambar alpine dasar, Anda harus menginstal paket bayangan:


 RUN apk add —no-cache shadow 

Melewati ID pengguna di dalam wadah saat membuat gambar


Jika pengidentifikasi Anda dan pengidentifikasi semua orang yang bekerja di proyek adalah sama, maka cukup tentukan pengidentifikasi ini di Dockerfile. Namun, seringkali pengidentifikasi pengguna tidak cocok.


Cara mewujudkan yang diinginkan tidak segera jelas. Bagi saya itu yang paling sulit dalam proses menguasai buruh pelabuhan. Banyak pengguna buruh pelabuhan tidak berpikir bahwa ada tahapan yang berbeda dalam kehidupan suatu gambar. Pertama, gambar dikumpulkan untuk ini menggunakan Dockerfile. Saat memulai sebuah wadah dari gambar Dockerfile, itu tidak lagi digunakan.


Penciptaan pengguna harus terjadi saat membangun gambar. Hal yang sama berlaku untuk definisi pengguna dari mana proses diluncurkan. Ini berarti bahwa kita harus mengoper UID (GID) entah bagaimana ke dalam wadah.


Arahan ENV dan ARG digunakan untuk menggunakan variabel eksternal di Dockerfile. Perbandingan rinci arahan ada 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 memberikan argumen melalui komposisi buruh pelabuhan seperti ini:


buruh pelabuhan-menulis


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

PS Untuk menguasai semua trik buruh pelabuhan, tidak cukup membaca dokumentasi atau artikel. Anda perlu banyak berlatih, Anda perlu merasakan buruh pelabuhan.

Source: https://habr.com/ru/post/id448480/


All Articles