Docker: Ispravljanje ranjivosti slika pomoću Trivy i Copa
Docker slike kontejnera često sadrže sigurnosne ranjivosti naslijeđene iz paketa osnovnog operativnog sustava. Umjesto da izrađujete slike od nule, možete koristiti Trivy za skeniranje ranjivosti i Copa za njihovo izravno popravljanje. Ovaj vodič prikazuje kako identificirati i popraviti ranjivosti kontejnera na sustavima Ubuntu, Debian, RHEL, CentOS i Fedora koristeći ova dva moćna open-source alata.
U ovom ćeš tutorijalu naučiti:
- Kako instalirati Trivy skener ranjivosti na Ubuntu/Debian
- Kako instalirati alat za zakrpe Copa kontejnera
- Kako skenirati Docker slike na ranjivosti operativnog sustava
- Kako automatski zakrpati ranjivosti kontejnera
- Kako provjeriti jesu li popravljene slike bez ranjivosti
Sažetak članka: Skenirajte Docker slike na ranjivosti pomoću Trivy i automatski ih patchajte koristeći Copa.
| Korak | Naredba/Akcija |
|---|---|
| 1. Skeniraj sliku | |
| 2. Izvezi JSON izvještaj | |
| 3. Pokreni BuildKit | |
| 4. Slika zakrpe | |
Korak 1: Instalirajte Trivy skener ranjivosti
Trivy je skener ranjivosti otvorenog koda koji je razvila tvrtka Aqua Security. Otkriva ranjivosti u OS paketima, ovisnostima aplikacija i kontejnerskim slikama.
Ubuntu/Debian
-
Instalirajte ovisnosti: Prvo instalirajte pakete wget i gnupg potrebne za dodavanje repozitorija:
$ sudo apt-get install wget gnupg -y Dodajte Trivy GPG ključ: Preuzmite i dodajte ključ za potpisivanje Trivy repozitorija:
$ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/nullDodajte Trivy repozitorij: Dodajte službeni Trivy repozitorij na popis svojih izvora:
$ 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.listInstalirajte Trivy: Ažurirajte popis paketa i instalirajte Trivy:
$ sudo apt-get update $ sudo apt-get install trivy -y
RHEL/CentOS/Fedora
Dodajte Trivy repozitorij: Kreirajte Trivy datoteku repozitorija:
# 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 EOFInstalirajte Trivy: Koristite dnf ili yum za instalaciju:
# sudo dnf install trivy -y
Provjerite instalaciju provjerom verzije:
$ trivy --versionKorak 2: Instalirajte Copa alat za zakrpe
Copa (Copacetic) je CNCF sandbox projekt koji direktno popravljava slike kontejnera bez potrebe za potpunim ponovnim izgradnjom. Koristi izvještaje o ranjivostima s alata za skeniranje poput Trivyja kako bi primijenio sigurnosna ažuriranja. Copa se distribuira kao jedinstvena binarka koja radi na svim Linux distribucijama.
Preuzmi Copa binarni fajl: Nabavite unaprijed izgrađeni binarni fajl sa službene Copa GitHub stranice za izdanja:
$ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gzIzvucite arhivu: Raspakirajte preuzetu tar datoteku:
$ tar -xzf copa_0.9.0_linux_amd64.tar.gz-
Instalirajte Copa: Premjestite izvršnu datoteku u svoj sistemski put:
$ sudo mv copa /usr/local/bin/ Provjeri instalaciju: Potvrdi da je Copa ispravno instalirana:
$ copa --version
Korak 3: Skenirajte sliku kontejnera na ranjivosti
Prije instaliranja zakrpa, trebate identificirati ranjivosti u svojoj slici kontejnera. Sljedeći koraci koriste linuxconfig/instantprivacy kao primjer – zamijenite ga vlastitim imenom slike.
Povucite sliku spremnika: Preuzmite sliku koju želite skenirati:
$ sudo docker pull linuxconfig/instantprivacySkeniraj zbog ranjivosti: Pokrenite Trivy za skeniranje ranjivosti na razini operativnog sustava. Zastavica
--ignore-unfixedisključuje ranjivosti za koje ne postoje dostupna rješenja:$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacyIzvezi JSON izvještaj: Copa zahtijeva rezultate skeniranja u JSON formatu:
$ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy
Korak 4: Zakrpi slikovnu datoteku spremnika pomoću Copa
Copa koristi BuildKit za primjenu zakrpa na slike spremnika.
Pokreni BuildKit spremnik: Pokrenite BuildKit kao privilegirani spremnik:
$ 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-
Provjerite radi li BuildKit: Potvrdite da je kontejner uspješno pokrenut:
$ sudo docker ps Zakrpajte sliku kontejnera: Koristite Copa za primjenu sigurnosnih zakrpa. Zastavica
-tspecificira oznaku za zakrpanu sliku:$ sudo copa patch \ -i docker.io/linuxconfig/instantprivacy \ -r instantprivacy.json \ -t patched \ -a tcp://0.0.0.0:8888Copa preuzima sigurnosna ažuriranja i stvara novi sloj slike s primijenjenim zakrpama. Zakrpana slika bit će označena kao
linuxconfig/instantprivacy:patched.
Korak 5: Provjerite zakrpljenu sliku
Skenirajte zakrpanu sliku: Potvrdite da su sve ranjivosti riješene:
$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patchedTestirajte zakrpanu sliku: Provjerite radi li zakrpana slika ispravno:
$ 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.174Čišćenje: Zaustavite BuildKit kontejner kada završite:
$ sudo docker stop buildkitd
Zaključak
Uspješno ste skenirali Docker image kontejnera za sigurnosne ranjivosti koristeći Trivy i automatski ih zakrpali pomoću Copa. Ovaj pristup je brži od ponovne izgradnje imagena od nule i dodaje samo jedan sloj zakrpe, zadržavajući izvornu strukturu imagena. Za produkcijska okruženja, integrirajte ove alate u vaš CI/CD pipeline kako biste automatski skenirali i zakrpali imageove kontejnera prije implementacije. Za više informacija, pogledajte službenu dokumentaciju Trivy-a i web stranicu projekta Copa.
Često postavljana pitanja
- Koje vrste ranjivosti može popraviti Copa? Copa popravlja samo ranjivosti na razini OS paketa (kao što su Debian, Ubuntu, Alpine ili RHEL paketi). Ne može popraviti ovisnosti na razini aplikacija poput npm paketa, Python pip modula ili Go modula. Za njih je potrebno ponovno izgraditi aplikaciju s ažuriranim ovisnostima.
- Zašto mi treba BuildKit da bih pokrenuo Copa? Copa koristi BuildKitove mogućnosti razlike i spajanja kako bi stvorio novi sloj slike koji sadrži samo patchirane datoteke. BuildKit radi kao privilegirani kontejner koji upravlja manipulacijom slike na niskoj razini. Bez BuildKita, Copa ne može primijeniti patchove na datotečni sustav kontejnera.
- Mogu li ažurirati slike iz privatnih registara? Da, Copa podržava privatne registre. Morate se prijaviti pomoću
docker loginprije pokretanja naredbe za ažuriranje. Copa koristi vaše Docker vjerodajnice za preuzimanje osnovne slike i slanje ažuriranog rezultata ako je potrebno. - Što se događa ako Copa ne može zakrpati sve ranjivosti? Neke ranjivosti možda još nemaju dostupna rješenja. Zastavica
--ignore-unfixedu Trivyju isključuje ih iz izvještaja. Copa će zakrpati sve za što postoji dostupno rješenje. Pokrenite Trivy ponovno bez--ignore-unfixedda biste vidjeli sve ranjivosti, uključujući one koje još čekaju zakrpe. - Kako ažurirati Copu na najnoviju verziju? Preuzmite najnovije izdanje s stranice Copina GitHub izdanja i zamijenite binarnu datoteku u
/usr/local/bin/. Provjerite trenutnu verziju pomoćucopa --version.





