Kabeh pangolahan ing wadhah bakal mbukak minangka pangguna root, kajaba sampeyan nemtokake kanthi cara khusus. Iki katon trep banget, amarga pangguna iki ora ana watesan. Iki sebabe digunakake minangka root salah saka sudut pandang keamanan. Yen ora ana siji ing pikiran tengen bisa ing komputer lokal karo hak ROOT, banjur akeh mbukak pangolahan ing ROOT ing kontaner.
Ana uga kewan omo sing bakal ngidini malware uwal saka wadhah lan mlebu menyang komputer host. Assuming paling awon, kita kudu mesthekake yen pangolahan nang wadhah mbukak dening pangguna sing ora duwe hak ing mesin inang.
Nggawe pangguna
Nggawe pangguna ing wadhah ora beda karo nggawe ing distribusi Linux. Nanging, printah bisa beda-beda kanggo gambar dhasar sing beda.
Kanggo distribusi basis debian, sampeyan kudu nambahake ing Dockerfile:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home node
Kanggo alpine:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
Mlaku proses saka pangguna
Kanggo mbukak kabeh proses sakteruse minangka pangguna karo UID 2000, mbukak:
USER 2000
Kanggo mbukak kabeh proses sakteruse minangka pangguna simpul, jalanake:
USER node
Liyane ing
Volume pemasangan
Nalika nambah volume ing wadhah, menehi pangguna kemampuan kanggo maca lan / utawa nulis file. Kanggo nindakake iki, UID (GID) pangguna ing wadhah lan pangguna ing njaba wadhah sing duwe ijin sing cocog kanggo ngakses file kudu cocog. Ing kasus iki, jeneng panganggo ora masalah.
Asring ing komputer Linux, UID lan GID pangguna padha karo 1000. Pengenal kasebut ditugasake kanggo pangguna pertama komputer kasebut.
Nggoleki pengenal sampeyan gampang:
id
Sampeyan bakal nampa informasi lengkap babagan pangguna sampeyan.
Ganti 2000 saka conto karo pengenal sampeyan lan kabeh bakal apik.
Nemtokake UID lan GID menyang pangguna
Yen pangguna wis digawe sadurunge, nanging sampeyan kudu ngganti pengenal, sampeyan bisa nindakake kaya iki:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Yen sampeyan nggunakake gambar dhasar alpine, sampeyan kudu nginstal paket bayangan:
RUN apk add βno-cache shadow
Nglebokake ID pangguna ing wadhah nalika nggawe gambar
Yen ID lan ID kabeh wong sing nggarap proyek cocog, banjur mung nemtokake ID iki ing Dockerfile. Nanging, asring ID pangguna ora cocog.
Carane entuk apa sing dikarepake ora langsung jelas. Kanggo kula, iki minangka sing paling angel ing proses nguwasani Docker. Akeh pangguna docker ora ngerti manawa ana macem-macem tahapan ing urip gambar. Pisanan, gambar dirakit nggunakake Dockerfile. Nalika mbukak wadhah saka gambar, Dockerfile ora digunakake maneh.
Nggawe pangguna kudu kedadeyan nalika gambar dibangun. Padha ditrapake kanggo nemtokake pangguna sing proses diluncurake. Iki tegese kita kudu ngliwati UID (GID) ing wadhah kasebut.
Directives digunakake kanggo nggunakake variabel eksternal ing Dockerfile
file docker
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Sampeyan bisa ngirim argumen liwat docker-compose kaya iki:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Kanggo nguwasani kabeh intricacies Docker, iku ora cukup kanggo maca dokumentasi utawa artikel. Sampeyan kudu latihan akeh, sampeyan kudu ngrasakake Docker.
Source: www.habr.com