GoDasturchi
Production Dockerfile: Security

Production Dockerfile: Security

Production Dockerfile: xavfsizlik

Shu paytgacha ko'rgan Dockerfile'larimiz o'quv uchun soddalashtirilgan edi. Haqiqiy production muhitida esa xavfsizlik bo'yicha bir nechta qo'shimcha qoidaga rioya qilish shart — bu qoidalarga rioya qilmaslik, hujumchiga ochiq eshik qoldirishga o'xshaydi.

1. Root bo'lmagan foydalanuvchi bilan ishga tushiring

Dockerfile
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o server .

FROM scratch
COPY --from=builder /app/server /server

# Root bo'lmagan foydalanuvchi ID'sini qo'llash (scratch'da /etc/passwd yo'q, shuning uchun sonli ID)
USER 1000:1000

CMD ["/server"]

Standart holatda, konteyner ichidagi dastur root ("administrator", cheklovsiz) huquqi bilan ishlaydi. Agar hujumchi dasturingizdagi zaiflikdan foydalanib, konteyner ichiga kira olsa, u root sifatida hamma narsani qila oladi. USER 1000:1000 — dasturni oddiy, cheklangan huquqli foydalanuvchi sifatida ishga tushiradi, xuddi mehmonga uyning barcha xonalari emas, faqat mehmonxona kalitini berganingizdek.

2. Minimal asosiy image ishlating

"Multi-Stage Builds" darsida ko'rgan FROM scratch — nafaqat kichik, balki xavfsiz ham: unda shell, paket menejeri yoki boshqa vositalar yo'q, shuning uchun hujumchi hatto konteyner ichiga kirsa ham, deyarli hech narsa qila olmaydi (hatto oddiy ls buyrug'ini ham bajara olmaydi, chunki bunday buyruqlarning o'zi mavjud emas).

3. Image'larni muntazam yangilab turing

golang:1.22 kabi asosiy image'larda vaqti-vaqti bilan xavfsizlik zaifliklari topiladi va tuzatiladi. Image'ni muntazam qayta qurish (yangi, tuzatilgan versiyasi bilan) — bu "Publishing Go Modules" darsida ko'rgan "bog'liqliklarni yangilab turish" odatining Docker'dagi davomi.

Key Takeaway

Key Takeaway:

Production Dockerfile'da root bo'lmagan foydalanuvchi bilan ishga tushiring, minimal (masalan scratch) asosiy image ishlating, va asosiy image'larni muntazam yangilab turing — bularning har biri hujum yuzasini kamaytiradi.

NEXT UP

Production Dockerfile: Optimization

Production Dockerfile: Security

Production Dockerfile: xavfsizlik

Shu paytgacha ko'rgan Dockerfile'larimiz o'quv uchun soddalashtirilgan edi. Haqiqiy production muhitida esa xavfsizlik bo'yicha bir nechta qo'shimcha qoidaga rioya qilish shart — bu qoidalarga rioya qilmaslik, hujumchiga ochiq eshik qoldirishga o'xshaydi.

1. Root bo'lmagan foydalanuvchi bilan ishga tushiring

Dockerfile
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o server .

FROM scratch
COPY --from=builder /app/server /server

# Root bo'lmagan foydalanuvchi ID'sini qo'llash (scratch'da /etc/passwd yo'q, shuning uchun sonli ID)
USER 1000:1000

CMD ["/server"]

Standart holatda, konteyner ichidagi dastur root ("administrator", cheklovsiz) huquqi bilan ishlaydi. Agar hujumchi dasturingizdagi zaiflikdan foydalanib, konteyner ichiga kira olsa, u root sifatida hamma narsani qila oladi. USER 1000:1000 — dasturni oddiy, cheklangan huquqli foydalanuvchi sifatida ishga tushiradi, xuddi mehmonga uyning barcha xonalari emas, faqat mehmonxona kalitini berganingizdek.

2. Minimal asosiy image ishlating

"Multi-Stage Builds" darsida ko'rgan FROM scratch — nafaqat kichik, balki xavfsiz ham: unda shell, paket menejeri yoki boshqa vositalar yo'q, shuning uchun hujumchi hatto konteyner ichiga kirsa ham, deyarli hech narsa qila olmaydi (hatto oddiy ls buyrug'ini ham bajara olmaydi, chunki bunday buyruqlarning o'zi mavjud emas).

3. Image'larni muntazam yangilab turing

golang:1.22 kabi asosiy image'larda vaqti-vaqti bilan xavfsizlik zaifliklari topiladi va tuzatiladi. Image'ni muntazam qayta qurish (yangi, tuzatilgan versiyasi bilan) — bu "Publishing Go Modules" darsida ko'rgan "bog'liqliklarni yangilab turish" odatining Docker'dagi davomi.

Key Takeaway

Key Takeaway:

Production Dockerfile'da root bo'lmagan foydalanuvchi bilan ishga tushiring, minimal (masalan scratch) asosiy image ishlating, va asosiy image'larni muntazam yangilab turing — bularning har biri hujum yuzasini kamaytiradi.

NEXT UP

Production Dockerfile: Optimization