Docker-də istifadəçi

Andrey Kopylov, CTO-muz Docker-i sevir, fəal şəkildə istifadə edir və təbliğ edir. Yeni məqaləsində o, Docker-də istifadəçilərin necə yaradılacağını izah edir. Onlarla düzgün işləmək, istifadəçilərin niyə kök hüquqları ilə qalmaması və Dockerfile-də uyğunsuz göstəricilər problemini necə həll etmək.

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 sənədləşdirmə.

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 ENV и ARG. Direktivlərin ətraflı müqayisəsi burada.

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

Добавить комментарий