Konteynerdəki bütün proseslər, onu xüsusi bir şəkildə göstərməyincə, kök istifadəçi kimi işləyəcək. Bu, çox rahat görünür, çünki bu istifadəçinin heç bir məhdudiyyəti yoxdur. Bu səbəbdən root kimi işləmək təhlükəsizlik baxımından yanlışdır. Əgər ağlı başında olan heç kim yerli kompüterdə kök hüquqları ilə işləmirsə, o zaman bir çoxları konteynerlərdə kök altında prosesləri həyata keçirir.
Zərərli proqramların konteynerdən çıxmasına və ana kompüterə daxil olmasına imkan verən səhvlər həmişə olur. Ən pisini fərz etsək, konteyner daxilində proseslərin host maşında heç bir hüququ olmayan istifadəçi tərəfindən idarə olunmasını təmin etməliyik.
İstifadəçi yaradılması
Konteynerdə istifadəçi yaratmaq onu Linux paylamalarında yaratmaqdan fərqlənmir. Bununla belə, əmrlər müxtəlif əsas şəkillər üçün fərqli ola bilər.
Debian əsaslı paylamalar üçün Dockerfile-ə aşağıdakıları əlavə etməlisiniz:
RUN groupadd --gid 2000 node
&& useradd --uid 2000 --gid node --shell /bin/bash --create-home node
Alp üçün:
RUN addgroup -g 2000 node
&& adduser -u 2000 -G node -s /bin/sh -D node
İstifadəçidən proseslərin icrası
UID 2000 ilə istifadəçi kimi bütün sonrakı prosesləri işə salmaq üçün aşağıdakıları yerinə yetirin:
USER 2000
Bütün sonrakı prosesləri qovşaq istifadəçisi kimi icra etmək üçün aşağıdakıları yerinə yetirin:
USER node
Daha çox
Montaj həcmləri
Həcmləri konteynerin içərisinə quraşdırarkən istifadəçiyə faylları oxumaq və/yaxud yazmaq imkanı verin. Bunun üçün konteynerdəki istifadəçi ilə fayla daxil olmaq üçün müvafiq icazələrə malik olan konteynerdən kənar istifadəçinin UID (GID) uyğun olmalıdır. Bu halda istifadəçi adlarının əhəmiyyəti yoxdur.
Çox vaxt Linux kompüterində istifadəçinin UID və GID-i 1000-ə bərabər olur. Bu identifikatorlar kompüterin ilk istifadəçisinə təyin edilir.
İdentifikatorlarınızı tapmaq asandır:
id
İstifadəçiniz haqqında hərtərəfli məlumat alacaqsınız.
Nümunələrdəki 2000-i identifikatorunuzla əvəz edin və hər şey yaxşı olacaq.
İstifadəçiyə UID və GID təyin edilməsi
İstifadəçi əvvəllər yaradılıbsa, lakin identifikatorları dəyişdirməlisinizsə, bunu belə edə bilərsiniz:
RUN usermod -u 1000 node
&& groupmod -g 1000 node
Alp əsas təsvirindən istifadə edirsinizsə, kölgə paketini quraşdırmalısınız:
RUN apk add —no-cache shadow
Təsviri qurarkən istifadəçi ID-sinin konteynerin içinə keçməsi
Əgər sizin şəxsiyyət vəsiqəniz və layihədə işləyən bütün insanların şəxsiyyət vəsiqələri uyğun gəlirsə, sadəcə Dockerfile-də bu ID-ni göstərin. Lakin, çox vaxt istifadəçi identifikatorları uyğun gəlmir.
İstədiyinizə necə nail olmaq dərhal aydın deyil. Mənim üçün bu Docker-i mənimsəmək prosesində ən çətin şey idi. Bir çox doker istifadəçiləri bir görüntünün həyatında müxtəlif mərhələlərin olduğunu başa düşmürlər. Birincisi, şəkil Dockerfile istifadə edərək yığılır. Şəkildən konteyner işlədərkən Dockerfile artıq istifadə edilmir.
Şəkil qurulduqda istifadəçi yaradılması baş verməlidir. Eyni şey proseslərin işə salındığı istifadəçinin müəyyən edilməsinə də aiddir. Bu o deməkdir ki, biz birtəhər konteynerin içinə UID (GID) ötürməliyik.
Direktivlər Dockerfile-də xarici dəyişənlərdən istifadə etmək üçün istifadə olunur
Docker faylı
ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node
&& groupmod -g $GID node
Arqumentləri docker-compose vasitəsilə belə ötürə bilərsiniz:
docker-compose
build:
context: ./src/backend
args:
UID: 1000
GID: 1000
PS Docker-in bütün incəliklərinə yiyələnmək üçün sənədləri və ya məqalələri oxumaq kifayət deyil. Siz çox məşq etməlisiniz, Docker haqqında hisslər əldə etməlisiniz.
Mənbə: www.habr.com