Kullanıcı değiştirme
- Docker & Kubernetes kursu
- Başlangıç
- Ders 35/82
- 4 dk
-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=10001024'ü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
# buraya yazÖrnek çözüm
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.
____ app
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 |