Docker'daki kullanıcı

Andrey KopylovCTO'muz Docker'ı seviyor, aktif olarak kullanıyor ve tanıtıyor. Yeni makalesinde Docker'da nasıl kullanıcı oluşturulacağını anlatıyor. Onlarla doğru çalışma, kullanıcıların neden kök haklarına bırakılmaması gerektiği ve Dockerfile'daki uyumsuz göstergeler sorununun nasıl çözüleceği.

Özel bir şekilde belirtmediğiniz sürece kapsayıcıdaki tüm işlemler kök kullanıcı olarak çalışacaktır. Bu çok kullanışlı görünüyor çünkü bu kullanıcının herhangi bir kısıtlaması yok. Bu nedenle root olarak çalışmak güvenlik açısından yanlıştır. Aklı başında hiç kimse yerel bilgisayarda kök haklarıyla çalışmıyorsa, çoğu kişi işlemleri kapsayıcılarda kök altında çalıştırır.

Kötü amaçlı yazılımların konteynerden kaçıp ana bilgisayara girmesine izin verecek hatalar her zaman vardır. En kötüsünü varsayarsak, konteyner içindeki işlemlerin ana makine üzerinde hiçbir hakkı olmayan bir kullanıcı tarafından çalıştırıldığından emin olmalıyız.

Kullanıcı oluşturma

Bir kapsayıcıda kullanıcı oluşturmak, onu Linux dağıtımlarında oluşturmaktan farklı değildir. Ancak farklı temel görüntüler için komutlar farklılık gösterebilir.

Debian tabanlı dağıtımlar için Dockerfile'a aşağıdakileri eklemeniz gerekir:

RUN groupadd --gid 2000 node 
  && useradd --uid 2000 --gid node --shell /bin/bash --create-home node

Alp için:

RUN addgroup -g 2000 node 
    && adduser -u 2000 -G node -s /bin/sh -D node

Kullanıcıdan işlemleri çalıştırma

Sonraki tüm işlemleri UID 2000'e sahip bir kullanıcı olarak çalıştırmak için şunu çalıştırın:

USER 2000

Sonraki tüm işlemleri düğüm kullanıcısı olarak çalıştırmak için şunu çalıştırın:

USER node

Daha belgeleme.

Montaj hacimleri

Birimleri bir konteynerin içine monte ederken, kullanıcıya dosyaları okuma ve/veya yazma yeteneği sağlayın. Bunu yapmak için, kapsayıcıdaki kullanıcının UID'sinin (GID) ve kapsayıcının dışında, dosyaya erişim için uygun izinlere sahip olan kullanıcının eşleşmesi gerekir. Bu durumda kullanıcı adlarının bir önemi yoktur.

Çoğu zaman bir Linux bilgisayarda kullanıcının UID'si ve GID'si 1000'e eşittir. Bu tanımlayıcılar bilgisayarın ilk kullanıcısına atanır.

Tanımlayıcılarınızı bulmak kolaydır:

id

Kullanıcınız hakkında kapsamlı bilgi alacaksınız.
Örneklerdeki 2000'i tanımlayıcınızla değiştirin, her şey yoluna girecek.

Bir kullanıcıya UID ve GID atama

Kullanıcı daha önce oluşturulmuşsa ancak tanımlayıcıları değiştirmeniz gerekiyorsa bunu şu şekilde yapabilirsiniz:

RUN usermod -u 1000 node 
  && groupmod -g 1000 node

Alpine temel görüntüsünü kullanıyorsanız gölge paketini yüklemeniz gerekir:

RUN apk add —no-cache shadow

Görüntüyü oluştururken kullanıcı kimliğini kabın içine geçirme

Sizin kimliğiniz ile projede çalışan tüm kişilerin kimlikleri eşleşiyorsa bu kimliği Docker dosyasında belirtmeniz yeterlidir. Ancak çoğu zaman kullanıcı kimlikleri eşleşmez.

İstediğinizi nasıl elde edeceğiniz hemen belli değil. Benim için Docker'a hakim olma sürecindeki en zor şey bu oldu. Birçok liman işçisi kullanıcısı bir görüntünün yaşamında farklı aşamalar olduğunun farkında değildir. İlk olarak, görüntü bir Dockerfile kullanılarak birleştirilir. Bir görüntüden bir kapsayıcı çalıştırırken Dockerfile artık kullanılmamaktadır.

Kullanıcı oluşturma, görüntü oluşturulduğunda gerçekleşmelidir. Aynı durum, süreçlerin başlatıldığı kullanıcının belirlenmesi için de geçerlidir. Bu, UID'yi (GID) bir şekilde konteynerin içine aktarmamız gerektiği anlamına gelir.

Direktifler Dockerfile'daki harici değişkenleri kullanmak için kullanılır ENV и ARG. Direktiflerin ayrıntılı karşılaştırması burada.

Dockerfile

ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node 
  && groupmod -g $GID node

Argümanları docker-compose aracılığıyla şu şekilde iletebilirsiniz:

liman işçisi-oluşturma

build:
  context: ./src/backend
  args:
    UID: 1000
    GID: 1000

Not: Docker'ın tüm inceliklerine hakim olmak için belgeleri veya makaleleri okumak yeterli değildir. Çok pratik yapmalısınız, Docker'ı tanımanız gerekiyor.

Kaynak: habr.com

Yorum ekle