Saya memiliki wadah buruh pelabuhan dengan beberapa proses (uwsgi dan seledri) berjalan di dalam. Saya ingin membuat pengguna seledri dan pengguna uwsgi untuk proses-proses ini dan juga kelompok pekerja yang akan menjadi bagian keduanya, untuk menetapkan izin.
Saya mencoba menambahkan RUN adduser uwsgi
dan RUN adduser celery
ke Dockerfile saya, tetapi ini menyebabkan masalah, karena perintah ini meminta input (saya sudah memposting tanggapan dari build di bawah).
Apa cara terbaik untuk menambahkan pengguna ke wadah Docker untuk mengatur izin bagi pekerja yang menjalankan dalam wadah?
Gambar Docker saya dibuat dari basis Ubuntu14.04 resmi.
Ini adalah output dari Dockerfile ketika perintah adduser dijalankan:
Adding user `uwsgi' ...
Adding new group `uwsgi' (1000) ...
Adding new user `uwsgi' (1000) with group `uwsgi' ...
Creating home directory `/home/uwsgi' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for uwsgi
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []: Work Phone []: Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
---> 258f2f2f13df
Removing intermediate container 59948863162a
Step 5 : RUN adduser celery
---> Running in be06f1e20f64
Adding user `celery' ...
Adding new group `celery' (1001) ...
Adding new user `celery' (1001) with group `celery' ...
Creating home directory `/home/celery' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for celery
Enter the new value, or press ENTER for the default
Full Name []: Room Number []: Work Phone []:
Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
sumber
useradd --create-home --shell /bin/bash
lebih mudah dimengerti / dibaca untuk rekan kerja.RUN echo 'newuser:newpassword' | chpasswd
--no-log-init
opsi untukuseradd
.USER newuser
. Jika Anda juga membutuhkan pengguna untuk memiliki hak akses root, Anda juga bisa memasukkanadduser <username> sudo
./bin/sh: useradd: not found
alpine linuxUntuk menghindari pertanyaan interaktif dengan adduser, Anda dapat menyebutnya dengan parameter berikut:
The
--gecos
parameter digunakan untuk mengatur informasi tambahan. Dalam hal ini hanya kosong.Pada sistem dengan busybox (seperti Alpine), gunakan
Lihat adduser busybox
sumber
adduser
solusi tingkat tinggi umumnya lebih disukai daripada menggunakan fungsi tingkat rendah sepertiuseradd
.adduser: unrecognized option: gecos
Ini sepertinya tidak berhasil di Alpine.Ubuntu
Coba baris berikut di
Dockerfile
:useradd
opsi (lihatman useradd
:):-r
,--system
Buat akun sistem. lihat: Implikasi membuat akun sistem-m
,--create-home
Buat direktori home pengguna.-d
,--home-dir HOME_DIR
Direktori rumah dari akun baru.-s
,--shell SHELL
Login shell dari akun baru.-g
,--gid GROUP
Nama atau ID grup utama.-G
,--groups GROUPS
Daftar kelompok tambahan.-u
,--uid UID
Tentukan ID pengguna. lihat: Memahami bagaimana uid dan gid bekerja dalam wadah Docker-p
,--password PASSWORD
Kata sandi terenkripsi dari akun baru (misalnyaubuntu
).Pengaturan kata sandi pengguna default
Untuk mengatur kata sandi pengguna, tambahkan
-p "$(openssl passwd -1 ubuntu)"
keuseradd
perintah.Atau tambahkan baris berikut ke Anda
Dockerfile
:Instruksi shell pertama adalah untuk memastikan bahwa
-o pipefail
opsi diaktifkan sebelumRUN
dengan pipa di dalamnya. Baca selengkapnya: Hadolint: Linting Dockerfile Anda .sumber
root
grup tidak mengindikasikan mereka telah mengakses root, hanya saja mereka lebih banyak membaca akses ke beberapa file (seperti log), yang berguna, tetapi itu tergantung pada proyek.Menambahkan pengguna di buruh pelabuhan dan menjalankan aplikasi Anda di bawah pengguna itu adalah praktik yang sangat baik untuk sudut pandang keamanan. Untuk melakukan itu saya akan merekomendasikan langkah-langkah di bawah ini:
Langkah-langkah di atas adalah contoh lengkap dari menyalin file proyek NodeJS, membuat grup pengguna dan pengguna, memberikan izin kepada pengguna untuk folder proyek, beralih ke pengguna yang baru dibuat dan menjalankan aplikasi di bawah pengguna itu.
sumber
Anda dapat meniru open source Dockerfile, misalnya:
Node: node12-github
superset: superset-github
Saya pikir ini cara yang baik untuk mengikuti open source.
sumber
Setiap orang memiliki favorit pribadi mereka, dan ini milik saya:
Referensi: man useradd
The
RUN
line akan menambahkan user dan groupapp
:Gunakan nama yang lebih spesifik daripada
app
jika gambar tersebut akan digunakan kembali sebagai gambar dasar. Sebagai tambahan, sertakan--shell /bin/bash
jika Anda benar-benar membutuhkannya.Penghargaan parsial: dijawab oleh Ryan M
sumber
Atau Anda dapat melakukannya seperti ini.
Perintah pertama membuat grup bernama demo . Perintah kedua membuat pengguna demo dan menambahkannya ke grup demo yang dibuat sebelumnya .
Bendera adalah singkatan:
sumber
Tambahkan baris ini ke Dockerfile Anda (Anda dapat menjalankan perintah linux dengan cara ini)
sumber