Docker: Baiki Kelemahan Imej dengan Trivy dan Copa
Imej kontena Docker selalunya mengandungi kelemahan keselamatan yang diwarisi daripada pakej sistem pengendalian asas mereka. Daripada membina semula imej dari awal, anda boleh menggunakan Trivy untuk mengimbas kelemahan dan Copa untuk menampalnya secara langsung. Tutorial ini menunjukkan cara untuk mengenal pasti dan memperbaiki kelemahan kontena pada sistem Ubuntu, Debian, RHEL, CentOS, dan Fedora menggunakan kedua-dua alat sumber terbuka yang berkuasa ini.
Dalam tutorial ini anda akan belajar:
- Cara memasang pengimbas kerentanan Trivy pada Ubuntu/Debian
- Cara memasang alat tampalan bekas Copa
- Cara mengimbas imej Docker untuk kelemahan OS
- Cara membaiki kerentanan kontena secara automatik
- Cara mengesahkan imej yang telah ditampal bebas daripada kerentanan
Ringkasan artikel: Imbas imej Docker untuk kelemahan menggunakan Trivy dan tampal secara automatik menggunakan Copa.
| Langkah | Arahan/Tindakan |
|---|---|
| 1. Imbas imej | |
| 2. Eksport laporan JSON | |
| 3. Mula BuildKit | |
| 4. Tampal imej | |
Langkah 1: Pasang Pengimbas Kelemahan Trivy
Trivy adalah pengimbas kerentanan sumber terbuka yang dibangunkan oleh Aqua Security. Ia mengesan kerentanan dalam pakej OS, pergantungan aplikasi, dan imej kontena.
Ubuntu/Debian
-
Pasang kebergantungan: Pertama pasang pakej wget dan gnupg yang diperlukan untuk menambah repositori:
$ sudo apt-get install wget gnupg -y Tambah kunci GPG Trivy: Muat turun dan tambah kunci tandatangan repositori Trivy:
$ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/nullTambah repositori Trivy: Tambahkan repositori rasmi Trivy ke senarai sumber anda:
$ echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.listPasang Trivy: Kemas kini senarai pakej dan pasang Trivy:
$ sudo apt-get update $ sudo apt-get install trivy -y
RHEL/CentOS/Fedora
Tambah repositori Trivy: Cipta fail repo Trivy:
# sudo tee /etc/yum.repos.d/trivy.repo << 'EOF' [trivy] name=Trivy repository baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://aquasecurity.github.io/trivy-repo/rpm/public.key EOFPasang Trivy: Gunakan dnf atau yum untuk memasang:
# sudo dnf install trivy -y
Sahkan pemasangan dengan memeriksa versi:
$ trivy --versionLangkah 2: Pasang Alat Penampalan Copa
Copa (Copacetic) ialah projek CNCF sandbox yang menampal imej kontena secara langsung tanpa memerlukan binaan penuh. Ia menggunakan laporan kelemahan dari pengimbas seperti Trivy untuk memohon kemas kini keselamatan. Copa diedarkan sebagai binari tunggal yang berfungsi pada semua pengedaran Linux.
Muat turun binari Copa: Dapatkan binari siap bina dari halaman pelepasan GitHub rasmi Copa:
$ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gzKeluarkan arkib: Buka fail tar yang dimuat turun:
$ tar -xzf copa_0.9.0_linux_amd64.tar.gz-
Pasang Copa: Pindahkan binari ke laluan sistem anda:
$ sudo mv copa /usr/local/bin/ Sahkan pemasangan: Sahkan Copa dipasang dengan betul:
$ copa --version
Langkah 3: Imbas Imej Kontena untuk Kerentanan
Sebelum membuat tampalan, anda perlu mengenal pasti kelemahan dalam imej kontena anda. Langkah-langkah berikut menggunakan linuxconfig/instantprivacy sebagai contoh – gantikan ia dengan nama imej anda sendiri.
Muat turun imej bekas: Muat turun imej yang anda ingin imbas:
$ sudo docker pull linuxconfig/instantprivacyPemeriksaan kerentanan: Jalankan Trivy untuk mengimbas kerentanan pada peringkat OS. Bendera
--ignore-unfixedmengecualikan kerentanan yang tiada pembaikan tersedia:$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacyEksport laporan JSON: Copa memerlukan hasil imbasan dalam format JSON:
$ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy
Langkah 4: Tampal Imej Bekas dengan Copa
Copa menggunakan BuildKit untuk menerapkan tampalan pada imej kontena.
Mula kontena BuildKit: Lancarkan BuildKit sebagai kontena dengan keistimewaan:
$ sudo docker run --detach --rm --privileged \ -p 127.0.0.1:8888:8888/tcp \ --name buildkitd \ --entrypoint buildkitd \ moby/buildkit:v0.11.4 \ --addr tcp://0.0.0.0:8888-
Sahkan BuildKit sedang berjalan: Sahkan kontena telah bermula dengan berjaya:
$ sudo docker ps Pat kemas kini imej kontena: Gunakan Copa untuk menerapkan tampalan keselamatan. Flag
-tmenetapkan tag untuk imej yang telah ditampal:$ sudo copa patch \ -i docker.io/linuxconfig/instantprivacy \ -r instantprivacy.json \ -t patched \ -a tcp://0.0.0.0:8888Copa memuat turun kemas kini keselamatan dan mencipta lapisan imej baru dengan tampalan yang diterapkan. Imej yang telah ditampal akan ditandakan sebagai
linuxconfig/instantprivacy:patched.
Langkah 5: Sahkan Imej yang Dipatch
Imbas imej yang dipatch: Sahkan semua kerentanan telah diselesaikan:
$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patchedUji imej yang dipatch: Sahkan imej yang dipatch berjalan dengan betul:
$ sudo docker run --name=instantprivacy -d -p 8118:8118 linuxconfig/instantprivacy:patched $ export http_proxy="http://localhost:8118" $ curl api.ipify.org 45.84.107.174Pembersihan: Hentikan bekas BuildKit selepas selesai:
$ sudo docker stop buildkitd
Kesimpulan
Anda telah berjaya mengimbas imej bekas Docker untuk kelemahan keselamatan menggunakan Trivy dan menampalnya secara automatik dengan Copa. Pendekatan ini lebih cepat daripada membina semula imej daripada awal dan hanya menambah satu lapisan tampalan, sambil mengekalkan struktur imej asal. Untuk persekitaran pengeluaran, gabungkan alat ini ke dalam saluran CI/CD anda untuk mengimbas dan menampal imej bekas secara automatik sebelum penyebaran. Untuk maklumat lanjut, rujuk dokumentasi rasmi Trivy dan laman web projek Copa.
Soalan Lazim
- Jenis kelemahan apa yang boleh diperbaiki oleh Copa? Copa hanya memperbaiki kelemahan pada peringkat pakej OS (seperti pakej Debian, Ubuntu, Alpine, atau RHEL). Ia tidak dapat memperbaiki kebergantungan pada peringkat aplikasi seperti pakej npm, modul Python pip, atau modul Go. Untuk itu, anda perlu membina semula aplikasi dengan kebergantungan yang dikemas kini.
- Mengapa saya memerlukan BuildKit untuk menjalankan Copa? Copa menggunakan keupayaan diff dan merge BuildKit untuk membuat lapisan imej baru yang hanya mengandungi fail yang ditampal. BuildKit dijalankan sebagai kontena berkeistimewaan yang mengendalikan manipulasi imej pada tahap rendah. Tanpa BuildKit, Copa tidak dapat menerapkan tampalan pada sistem fail kontena.
- Bolehkah saya menampal imej dari registri peribadi? Ya, Copa menyokong registri peribadi. Anda perlu mengesahkan dengan
docker loginsebelum menjalankan arahan tampalan. Copa menggunakan kelayakan Docker anda untuk memuat turun imej asas dan mendorong hasil tampalan jika perlu. - Apa yang berlaku jika Copa tidak dapat menampal semua kelemahan? Sesetengah kelemahan mungkin belum mempunyai pembaikan. Flag
--ignore-unfixeddalam Trivy mengecualikan kelemahan ini dari laporan. Copa akan menampal semua yang mempunyai pembaikan yang tersedia. Jalankan Trivy sekali lagi tanpa--ignore-unfixeduntuk melihat semua kelemahan termasuk yang menunggu tampalan. - Bagaimana saya mengemas kini Copa ke versi terkini? Muat turun versi terkini dari halaman pelepasan GitHub Copa dan gantikan binari di
/usr/local/bin/. Semak versi semasa dengancopa --version.





