Ö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
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
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