Caranya adalah dengan menggunakan useradd
alih-alih pembungkus interaktifnya adduser
.Saya biasanya membuat pengguna dengan:
RUN useradd -ms /bin/bash newuser
yang membuat direktori home untuk pengguna dan memastikan bahwa bash adalah shell default.
Anda kemudian dapat menambahkan:
USER newuser
WORKDIR /home/newuser
ke dockerfile Anda. Setiap perintah sesudahnya serta sesi interaktif akan dieksekusi sebagai newuser
pengguna :
docker run -t -i image
[email protected]:~$
Anda mungkin harus memberikan newuser
izin untuk menjalankan program yang ingin Anda jalankan sebelum menjalankan perintah pengguna.
Menggunakan pengguna yang tidak memiliki hak istimewa di dalam wadah adalah ide yang bagus untuk alasan keamanan. Ini juga memiliki beberapa kekurangan. Yang terpenting, orang yang mengambil gambar dari gambar Anda harus beralih kembali ke root sebelum mereka dapat menjalankan perintah dengan hak superuser.
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:
FROM node:10-alpine
# Copy source to container
RUN mkdir -p /usr/app/src
# Copy source code
COPY src /usr/app/src
COPY package.json /usr/app
COPY package-lock.json /usr/app
WORKDIR /usr/app
# Running npm install for production purpose will not run dev dependencies.
RUN npm install -only=production
# Create a user group 'xyzgroup'
RUN addgroup -S xyzgroup
# Create a user 'appuser' under 'xyzgroup'
RUN adduser -S -D -h /usr/app/src appuser xyzgroup
# Chown all the files to the app user.
RUN chown -R appuser:xyzgroup /usr/app
# Switch to 'appuser'
USER appuser
# Open the mapped port
EXPOSE 3000
# Start the process
CMD ["npm", "start"]
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 tersebut.
Ubuntu
Coba baris berikut di Dockerfile
:
RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1001 ubuntu
USER ubuntu
WORKDIR /home/ubuntu
useradd
opsi (lihat:man useradd
):
-r
,--system
Buat akun sistem.-m
,--create-home
Buat direktori beranda pengguna.-d
,--home-dir HOME_DIR
Direktori beranda akun baru.-s
,--shell SHELL
Shell masuk dari akun baru.-g
,--gid GROUP
Nama atau ID grup utama.-G
,--groups GROUPS
Daftar grup tambahan.-u
,--uid UID
Tentukan ID pengguna.-p
,--password PASSWORD
Kata sandi terenkripsi dari akun baru (mis.ubuntu
).
Menyetel kata sandi pengguna default
Untuk menyetel kata sandi pengguna, tambahkan -p "$(openssl passwd -1 ubuntu)"
ke useradd
perintah.
Atau tambahkan baris berikut ke Dockerfile
Anda :
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN echo 'ubuntu:ubuntu' | chpasswd
Instruksi shell pertama adalah memastikan bahwa -o pipefail
opsi diaktifkan sebelum RUN
dengan pipa di dalamnya. Baca lebih lanjut:Hadolint:Linting Dockerfile Anda.
Untuk menghindari pertanyaan interaktif oleh adduser, Anda dapat memanggilnya dengan parameter berikut:
RUN adduser --disabled-password --gecos '' newuser
--gecos
parameter digunakan untuk mengatur informasi tambahan. Dalam hal ini hanya kosong.
Pada sistem dengan busybox (seperti Alpine), gunakan
RUN adduser -D -g '' newuser
Lihat busybox adduser