EN: Read in English
Dunia D5: Hantar & Lindung
Container dengan hak paling sedikit
Anda akan belajar: jalankan container bukan sebagai root, dengan sistem fail baca sahaja dan tanpa kuasa lebih.
Teks BM belum disemak oleh penutur asli.
Disemak dengan Docker Engine 29 pada 31 Okt 2026
Masalahnya
Laptop anda~/kedai-api
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- alpine:3.221 layer · 12.9MB
- kedai-api:1.06 layer · 244MB
- node:24-alpine4 layer · 244MB
0 container (0 berjalan), 3 image, 0 loker.
Dalam bekas makanan itu, aplikasi anda jalan sebagai root: ketua cef, pegang semua kunci. Kalau ada orang menceroboh, dia pun pegang semua kunci.
Tengok
least privilege: Beri setiap pekerja kunci untuk stesennya sahaja. Tiada lebih. (hak paling sedikit) bermaksud bekas cuma dapat kunci yang ia perlu. Docker ada tiga perisai. Padankan setiap satu dengan kerjanya.
Seret kad ke dalam kotak. Atau ketik kad, kemudian ketik kotak.
Tengok
Laptop anda~/kedai-api
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- alpine:3.221 layer · 12.9MB
- kedai-api:1.06 layer · 244MB
- node:24-alpine4 layer · 244MB
0 container (0 berjalan), 3 image, 0 loker.
Ralat sebenar, maksud mudah. Read-only file system: penutupnya dimeterai. Operation not permitted: pisau itu, satu capability: Satu kuasa khas root, contohnya tukar pemilik fail. Buang yang aplikasi anda tak guna. (kuasa khas), sudah disimpan.
Cuba
Jalankan API dengan ketiga-tiga perisai. Image-nya sudah ada USER node. Tambah dua lagi.
Laptop anda~/kedai-api
- Tiada tingkap terbuka
Bekas (container)
- Belum ada container
Pek beku (image)
- alpine:3.221 layer · 12.9MB
- kedai-api:1.06 layer · 244MB
- node:24-alpine4 layer · 244MB
0 container (0 berjalan), 3 image, 0 loker.
Petunjuk
docker run -d --name api --read-only --cap-drop ALL -p 3000:3000 kedai-api:1.0Teka
nginx mula sebagai root dan tulis fail cache dulu. Anda jalankannya dengan --read-only. Apa jadi?
Pilih satu jawapan.
Semak
Pembaikannya: dua folder sementara yang kecil dalam memori, dengan --tmpfs. Yang lain kekal dimeterai.
Anda berjaya!
Kini anda boleh kunci container: bukan root, baca sahaja, tanpa kuasa lebih.
Nak tahu lebih (pilihan)
Secara lalai Docker kekalkan 14 capability, contohnya CHOWN dan NET_BIND_SERVICE. Tambah semula yang perlu sahaja: --cap-add CHOWN. --security-opt no-new-privileges halang program dapat kuasa lebih. Jangan guna --privileged, dan jangan mount soket Docker: kedua-duanya serahkan seluruh host. Compose ada user, read_only dan cap_drop.
Latihan sebenar (pilihan), di komputer anda:
Misi sebenar
docker run --rm alpine:3.22 iddocker run --rm --user 1000 --read-only --cap-drop ALL alpine:3.22 id
0 daripada 3 langkah siap · Tanda anda disimpan.
English
Inside the lunchbox, your app runs as root: the head chef, holding every key. If someone breaks in, they hold every key too.
Least privilege means the box gets only the keys it needs. Docker has three shields. Match each one to what it does.
Real errors, plain words. Read-only file system: the lid is sealed. Operation not permitted: that knife, a capability, was put away.
Run the API with all three shields. Its image already says USER node. Add the other two.
docker run -d --name api --read-only --cap-drop ALL -p 3000:3000 kedai-api:1.0nginx starts as root and writes cache files first. You run it with --read-only. What happens?
The fix: two small scratch folders in memory, with --tmpfs. Everything else stays sealed.
You can now lock a container down: non-root, read-only, no extra powers.
Anda dah siapkan ini. Latihan lagi pun bagus!
Dokumentasi rasmi: Keistimewaan runtime dan capability Linux · docker container run · Keselamatan Docker Engine
Anda dah belajar 25 minit. Rehat sekejap bantu otak anda.
Pecutan selesai! Fokus yang hebat. Regangkan badan seminit?