CodeBlanks Logo Icon CodeBlanks

Kullanıcı değiştirme

-u ile container kullanıcısını değiştirmeyi öğrenirsin.

Kullanıcı değiştirme

Container'daki süreçler varsayılan olarak root olarak çalışır. Bir açık bulunursa saldırgan container içinde root yetkisi kazanır. Bu yüzden Dockerfile'da yetkisiz bir kullanıcı oluşturup USER ile ona geçilir:

FROM node:20-alpine
WORKDIR /app
COPY --chown=node:node . .
USER node
CMD ["node", "server.js"]

Resmi Node image'ları hazır bir node kullanıcısı içerir.

Kullanıcı oluşturmak ve -u

Hazır kullanıcısı olmayan image'larda kullanıcı RUN ile oluşturulur. Çalışma anında -u kullanıcı ya da -u UID:GID ile kullanıcı değiştirilebilir:

FROM python:3.12-slim
RUN useradd --create-home --uid 1000 app
USER app

$ docker run --rm -u 1000:1000 alpine id
uid=1000 gid=1000 groups=1000

1024'ün altındaki portları dinlemek root ister; yetkisiz kullanıcıyla uygulamayı 8080 gibi yüksek bir portta dinletirsin.

Uygulama Yetkisiz kullanıcıyla Python

python:3.12-slim tabanlı bir Dockerfile yaz: useradd --create-home --uid 1000 app ile kullanıcı oluştur; WORKDIR /app; dosyaları --chown=app:app ile kopyala (COPY --chown=app:app . .); USER app; CMD exec biçiminde python app.py.

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
FROM python:3.12-slim
RUN useradd --create-home --uid 1000 app
WORKDIR /app
COPY --chown=app:app . .
USER app
CMD ["python", "app.py"]

Beklenen çıktı

[+] Building 3.8s (9/9) FINISHED
 => naming to docker.io/library/api:latest done

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Container'da root olmayan kullanıcı çalıştırmanın temel nedeni nedir?

  • Port açabilmek
  • Bir açık durumunda verilecek zararı azaltmak Doğru cevap
  • Uygulamayı hızlandırmak
  • Image'ı küçültmek

Açıklama: En az yetki ilkesi container'lar için de geçerlidir.

2 Sonraki talimatları app kullanıcısıyla çalıştır.

Soru
____ app
Cevap
USER app

Açıklama: USER, sonraki RUN, CMD ve ENTRYPOINT için kullanıcıyı ayarlar.

3 Eşleştir.

Kavram Anlamı
USER Dockerfile'da kullanıcı
-u 1000:1000 Çalışma anında UID:GID
useradd Kullanıcı oluşturur
port 8080 Root gerektirmez

Başlangıç bölümündeki tüm dersler