Pertama yang perlu diketahui adalah user yang digunakan oleh docker image, cara termudah untuk mengetahuinya adalah dengan mengeksekusi id, perintah id bisanya sudah ada dalam docker image. Beberapa contoh

docker run debian id
docker run ubuntu id
docker run fedora id
docker run alpine id

dari ke empat docker image tersebut sama-sama menggunakan user root

uid=0(root) gid=0(root) groups=0(root)

Kita asumsikan anda menggunakan user app dengan uid 1000 dan group appgroup dengan gid 1000.

1. Update existing user

1. usermod and groupmod
Bila docker image memiliki usermod dan groupmod, untuk user dan group yang sudah ada, tambahkan di Dockerfile

usermod -u 10000 app && groupmod -g 10000 appgroup

perintah diatas akan mengupdate uid user app menjadi 10000 dan group appgroup menjadi 10000. Untuk pengguna Alpine Linux, perlu menginstall shadow (apk --no-cache add shadow) terlebih dahulu

Untuk contoh kita menggunakan image haproxy:lts-alpine. Pertama mari kita cek, user dan group yang digunakan

$ docker run haproxy:lts-alpine id
uid=99(haproxy) gid=99(haproxy) groups=99(haproxy)

Anggap Dockerfile yang kita miliki, seperti pada baris dibawah ini

FROM haproxy:lts-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

update menjadi

FROM haproxy:lts-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
USER root
RUN apk --no-cache add shadow
RUN usermod -u 10000 haproxy && groupmod -g 10000 haproxy
USER haproxy

build docker diatas, mari kita berinama haproxy-dev2

docker build . -t haproxy-dev1
# cek uid dan group id dengan
docker run haproxy-dev1 id

setelah selesai di-build, cek user dan group user haproxy
build docker usermod usergroup

2. Pilihan terakhir sed
Bila tidak ada usermod dan tidak ada pilihan untuk update Docker image, maka pilihan terakhir kita adalah update file /etc/passwd dan /etc/group manual

sed -i 's/1000/10000/g' /etc/passwd /etc/group

Sebagai contoh, mari kita gunakan kembali Dockerfile diatas

FROM haproxy:lts-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

ubah menjadi

FROM haproxy:lts-alpine
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
USER root
RUN sed -i 's/99/10000/g' /etc/passwd /etc/group
USER haproxy

build, lalu cek user dan group id haproxy

docker build . -t haproxy-dev2
# cek uid dan group id dengan
docker run haproxy-dev2 id

2. Buat user baru

Dalam penggunaan image docker, sangat disarankan untuk menggunakan user dengan privileges/hak akses yang terbatas. Bila anda menggunakan distro sebagai base image, biasanya user default adalah root, untuk itu mari kita buat contoh menambah/membuat user di docker image.

1. adduser dan addgroup
adduser dan groupadd biasanya digunakan di BusyBox atau Alpine

addgroup appgroup -g 10000 && adduser -D -h /app -G appgroup -u 10000 app

Contoh file Dockerfile Alpine Linux

FROM alpine:3
RUN addgroup appgroup -g 10000 && adduser -D -h /app -G appgroup -u 10000 app
USER app

build, lalu jalankan

$ docker build . -t test-user1
# cek user dan group
$ docker run test-user1 id 
uid=10000(app) gid=10000(appgroup) groups=10000(appgroup)

2. useradd dan groupadd
alternative lainnya adalah menggunakan useradd dan groupadd

groupadd -g 10000 appgroup && useradd -u 10000 -g appgroup -m -d /app app

Contoh file Dockerfile Ubuntu

FROM ubuntu:jammy
RUN groupadd -g 10000 appgroup && useradd -u 10000 -g appgroup -m -d /app app
USER app

build, lalu jalankan

$ docker build . -t test-user2
# cek user dan group
$ docker run test-user2 id 
uid=10000(app) gid=10000(appgroup) groups=10000(appgroup)

Leave a comment

Your email address will not be published. Required fields are marked *