發(fā)行渠道、容器鏡像與包管理器全解析)
Trivy 安裝完全指南官方與社區(qū)發(fā)行渠道、容器鏡像與包管理器全解析【免費(fèi)下載鏈接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more項(xiàng)目地址: https://gitcode.com/GitHub_Trending/tr/trivy本文基于 Trivy 官方文檔 docs/getting-started/installation.md 編寫(xiě)系統(tǒng)梳理 Trivy 在容器、Linux/macOS/Windows、FreeBSD 等平臺(tái)上的全部安裝方式區(qū)分官方Official與社區(qū)Community兩類渠道并結(jié)合當(dāng)前倉(cāng)庫(kù)中的安裝腳本、發(fā)布配置與 CI 部署代碼講清每個(gè)渠道背后的工作原理。讀完本文你可以在裸機(jī)、容器、云服務(wù)器及各類包管理器環(huán)境中快速、正確、可復(fù)現(xiàn)地完成 Trivy 的部署與版本驗(yàn)證。安裝渠道總覽Official 與 CommunityTrivy 官方對(duì)安裝方式做了一個(gè)清晰的兩級(jí)劃分官方安裝Official由 Trivy 團(tuán)隊(duì)開(kāi)發(fā)并維護(hù)包括容器鏡像、GitHub Release 二進(jìn)制包、官方安裝腳本、RHEL/CentOS / Debian / Ubuntu 的軟件源Repository與離線包、Homebrew、Windows以及FreeBSDpkg社區(qū)安裝Community由社區(qū)成員開(kāi)發(fā)并在此匯集方便用戶選用包括Arch Linuxpacman、openSUSEzypper、MacPorts、Nix/NixOS以及asdf/mise。官方對(duì)這類安裝不提供支持遇到問(wèn)題請(qǐng)聯(lián)系對(duì)應(yīng)維護(hù)者。之所以有如此豐富的發(fā)布形態(tài)是因?yàn)?Trivy 采用 Go 編寫(xiě)、通過(guò) goreleaser.yml 做跨平臺(tái)發(fā)布同一份源碼會(huì)同時(shí)產(chǎn)出deb/rpm包nfpm 段、tar.gz歸檔archives 段與各平臺(tái)二進(jìn)制并注入版本號(hào)ldflags: -X github.com/aquasecurity/trivy/pkg/version/app.ver{{.Version}}最終由 pkg/version/app/version.go 承載。理解了這一點(diǎn)就能明白下面各渠道為何能保持版本同步。另外請(qǐng)注意官方文檔中的{{ git.tag }}是 MkDocs 渲染時(shí)自動(dòng)替換的占位符實(shí)際會(huì)變成類似v0.xx.x的具體版本標(biāo)簽而{{ git.tag[1:] }}表示去掉v前綴的版本號(hào)如0.xx.x文檔站渲染后即可直接使用。如果你安裝 Trivy 的目標(biāo)是把它集成進(jìn) CI/CD、IDE、Kubernetes 等第三方系統(tǒng)建議先瀏覽 Ecosystem 集成總覽。官方安裝方式詳解1. 容器鏡像官方推薦Trivy 官方發(fā)布了多架構(gòu)的容器鏡像可從以下三個(gè)鏡像倉(cāng)庫(kù)拉取鏡像倉(cāng)庫(kù)RepositoryDocker Hubdocker.io/aquasec/trivyGitHub Container Registry (GHCR)ghcr.io/aquasecurity/trivyAWS ECR Public Gallerypublic.ecr.aws/aquasecurity/trivy以當(dāng)前倉(cāng)庫(kù)根目錄的 Dockerfile 為參照可以看出官方鏡像的構(gòu)成基于alpine基礎(chǔ)鏡像預(yù)裝ca-certificates與git掃描需要 CA 證書(shū)與 git 能力并把trivy二進(jìn)制復(fù)制到/usr/local/bin/trivy且設(shè)置了ENTRYPOINT [trivy]。因此下面的命令中無(wú)需寫(xiě)trivy子命令前綴——docker run aquasec/trivy ... image ...等價(jià)于宿主上的trivy ... image ...。文檔給出的典型使用示例如下把 Docker 引擎 socket 與緩存目錄同時(shí)掛進(jìn)容器docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy:0.xx.x image python:3.4-alpine其中兩點(diǎn)務(wù)必理解掛載 Docker socketTrivy 在容器內(nèi)掃描宿主上的鏡像時(shí)需要訪問(wèn)宿主 Docker 引擎因此將/var/run/docker.sock掛載進(jìn)容器。這就要求宿主確實(shí)裝有 Docker 引擎若僅僅是要掃描某個(gè)鏡像倉(cāng)庫(kù)里的遠(yuǎn)程鏡像則無(wú)需掛載 socket。掛載緩存目錄Trivy 首次運(yùn)行會(huì)下載漏洞數(shù)據(jù)庫(kù)等數(shù)據(jù)并寫(xiě)入緩存。建議把宿主目錄示例中$HOME/Library/Caches是 macOS 下的寫(xiě)法掛載為容器內(nèi)的/root/.cache/實(shí)現(xiàn)持久化緩存避免每次重建容器都重新下載數(shù)據(jù)。容器內(nèi)緩存目錄的構(gòu)成與清理方式參見(jiàn) Cache 緩存配置指南漏洞數(shù)據(jù)庫(kù)Vulnerability Database / Java Index Database的下載細(xì)節(jié)見(jiàn) DB 數(shù)據(jù)庫(kù)配置。緩存默認(rèn)位于$HOME/.cache/trivy也可用--cache-dir改變位置。提示若你的 CI 環(huán)境沒(méi)有 DockerTrivy 也可以直接掃描倉(cāng)庫(kù)目錄trivy fs、OCI 鏡像經(jīng)認(rèn)證的 registry等具體入口介紹見(jiàn) Getting Started 首頁(yè)。2. GitHub Release 手動(dòng)安裝Trivy 每次發(fā)版都會(huì)在 GitHub Release 頁(yè)面附上各平臺(tái)歸檔。手動(dòng)安裝只需三步到GitHub Release assets下載與你操作系統(tǒng)/架構(gòu)匹配的文件解壓歸檔tar -xzf ./trivy.tar.gz給二進(jìn)制加上執(zhí)行權(quán)限chmod x ./trivy隨后即可運(yùn)行。產(chǎn)物命名規(guī)則可從 goreleaser.yml 的file_name_template反推出來(lái)形如trivy_0.xx.x_Linux-64bit.tar.gz、trivy_0.xx.x_Linux-ARM64.tar.gz、trivy_0.xx.x_macOS-64bit.tar.gz。不同 GOOS/GOARCH 會(huì)被映射為可讀名稱amd64→64bit、386→32bit、arm→ARM、arm64→ARM64而系統(tǒng)名會(huì)輸出為L(zhǎng)inux/macOS/Windows/FreeBSD等。從goreleaser.yml的builds段可以看到官方發(fā)布的平臺(tái)矩陣Linux386、arm(v7)、amd64、arm64、s390x、ppc64lemacOSamd64、arm64FreeBSDamd64Windowsamd64。注釋中還說(shuō)明了限制原因modernc.org/sqlite暫不支持 freebsd/arm64、freebsd/386、windows/386、windows/arm 等組合。也就是說(shuō)發(fā)布矩陣并非窮盡所有 GOOS/GOARCH而是受 SQLite 驅(qū)動(dòng)能力約束后的結(jié)果。3. 官方安裝腳本官方提供了一個(gè)curl | sh式安裝腳本用于從 GitHub Release 自動(dòng)下載并安裝curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin 0.xx.x該腳本的源碼就保存在本倉(cāng)庫(kù)的 contrib/install.sh由 goreleaser/godownloader 生成從源碼可以看清它的完整行為參數(shù)-b指定安裝目錄默認(rèn)./bin-c指定客戶端標(biāo)識(shí)僅允許字母/數(shù)字/-用于下載追蹤默認(rèn)install-script-d開(kāi)啟調(diào)試日志-x開(kāi)啟set -x詳細(xì)輸出最后一個(gè)位置參數(shù)是版本 tag缺省時(shí)自動(dòng)查詢 latest。下載源真正的下載地址指向https://get.trivy.dev/trivy?os...arch...version...type...client...按當(dāng)前系統(tǒng)自動(dòng)選擇正確的歸檔校驗(yàn)和文件trivy_版本_checksums.txt則從 GitHub Release 拉取。安全性腳本會(huì)把 OS/ARCH 自動(dòng)歸一化如x86_64→64bit、aarch64→ARM64、darwin→macOS下載后用sha256sum無(wú)則回退gsha256sum/shasum -a 256/openssl dgst比對(duì)校驗(yàn)和不一致即中止安裝安裝動(dòng)作解壓到臨時(shí)目錄后將trivyWindows 下為trivy.exe用install復(fù)制到目標(biāo)目錄并提示安裝完成。該腳本同樣適用于 CI 中的自動(dòng)安裝例如固定版本號(hào)以避免 latest 漂移。對(duì)于更嚴(yán)謹(jǐn)?shù)墓?yīng)鏈要求Trivy 還提供 Cosign 簽名與 SBOM 校驗(yàn)見(jiàn) 簽名校驗(yàn)指南。4. RHEL/CentOSTrivy 官方維護(hù)獨(dú)立的 RPM 倉(cāng)庫(kù)支持通過(guò)軟件源或直接安裝 RPM 包兩種方式。方式 A配置軟件源Repositorycat EOF | sudo tee -a /etc/yum.repos.d/trivy.repo [trivy] nameTrivy repository baseurlhttps://aquasecurity.github.io/trivy-repo/rpm/releases/\$basearch/ gpgcheck1 enabled1 gpgkeyhttps://aquasecurity.github.io/trivy-repo/rpm/public.key EOF sudo yum -y update sudo yum -y install trivy注意baseurl里的$basearch是 yum 內(nèi)置變量需轉(zhuǎn)義為\$basearchyum 會(huì)按本機(jī)架構(gòu)解析。倉(cāng)庫(kù) CI 部署腳本 ci/deploy-rpm.sh 表明RPM 倉(cāng)庫(kù)實(shí)際覆蓋 RHEL/CentOS 5/6/7/8/9并提供x86_64與aarch64兩種架構(gòu)目錄源中的gpgcheck1配合gpgkey會(huì)校驗(yàn)包簽名RPM 包本身在發(fā)布階段已通過(guò) goreleaser.yml 中rpm.signature.key_file配置的 GPG 私鑰簽名。方式 B直接安裝 RPM 包rpm -ivh https://github.com/aquasecurity/trivy/releases/download/v0.xx.x/trivy_0.xx.x_Linux-64bit.rpm適合不便配置軟件源的離線或一次性環(huán)境。5. Debian/UbuntuTrivy 同樣維護(hù)官方的 APT 軟件源generic分發(fā)代號(hào)附帶按各 Debian/Ubuntu 版本命名的倉(cāng)庫(kù)。方式 A配置軟件源Repositorysudo apt-get install wget gnupg wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg /dev/null 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.list sudo apt-get update sudo apt-get install trivy該流程采用了現(xiàn)代 APT 的signed-by方式先把公鑰 dearmor 成二進(jìn)制 keyring 存入/usr/share/keyrings/trivy.gpg再在 sources 條目中顯式指定避免使用已廢棄的apt-key add。從 ci/deploy-deb.sh 可以看出官方倉(cāng)庫(kù)針對(duì)每個(gè)受支持的 Debian/Ubuntu 發(fā)行版發(fā)布i386/amd64/arm64三個(gè)架構(gòu)的 deb 包并由reprepro維護(hù)簽名索引因此apt-get update時(shí)校驗(yàn)簽名不會(huì)報(bào)錯(cuò)。方式 B直接安裝 DEB 包wget https://github.com/aquasecurity/trivy/releases/download/v0.xx.x/trivy_0.xx.x_Linux-64bit.deb sudo dpkg -i trivy_0.xx.x_Linux-64bit.debDEB/RPM 包安裝后還會(huì)把contrib/*.tpl模板復(fù)制到/usr/local/share/trivy/templates見(jiàn) goreleaser.yml 的contents段供--template報(bào)告模板功能使用。6. macOSHomebrewHomebrew 同時(shí)支持 macOS 與 Linux一條命令即可安裝brew install trivy若需要指定歷史版本可通過(guò)brew install trivy舊版本如果存在對(duì)應(yīng) formula或查閱 Homebrew 對(duì) trivy 的版本策略文檔默認(rèn)安裝當(dāng)前最新穩(wěn)定版。7. WindowsWindows 用戶按如下步驟安裝從releases page下載trivy_x.xx.x_windows-64bit.zip注意發(fā)布矩陣中 Windows 僅提供amd64見(jiàn) goreleaser.yml解壓 zip把trivy.exe復(fù)制到任意目錄并將其所在目錄加入PATH即可在命令行中使用。也可以參考前文install.sh的 Windows 邏輯——腳本在檢測(cè)到windows時(shí)會(huì)把歸檔格式切換為 zip、并把二進(jìn)制改名為trivy.exe只是官方安裝腳本主要面向 Unix shellWindows 上更推薦直接解壓 zip 或使用社區(qū)提供的方式。8. FreeBSDFreeBSD 官方通過(guò) Pkg 包管理器分發(fā)對(duì)應(yīng) goreleaser.yml 中的build-bsd段發(fā)布freebsd/amd64產(chǎn)物pkg install trivy社區(qū)安裝方式以下渠道由社區(qū)維護(hù)安裝前請(qǐng)確認(rèn)其與官方版本的同步節(jié)奏是否符合你的安全策略例如漏洞庫(kù)版本與 Trivy 二進(jìn)制版本需匹配。Arch LinuxArch Linux 官方軟件倉(cāng)庫(kù)extra中直接提供trivysudo pacman -S trivy對(duì)應(yīng)維護(hù)信息可查詢 Arch Linux 軟件包頁(yè)及其 PKGBUILD 構(gòu)建腳本版本同步以 Arch 倉(cāng)庫(kù)實(shí)際為準(zhǔn)。openSUSEopenSUSE 軟件倉(cāng)庫(kù)提供trivysudo zypper install trivyMacPortsmacOSMacPorts 用戶可安裝sudo port install trivyNix / NixOSNix 包管理器同時(shí)覆蓋 Linux 與 macOS提供三種用法命令行方式Nixnix-env --install -A nixpkgs.trivy系統(tǒng)級(jí)聲明式配置NixOS# your other config ... environment.systemPackages with pkgs; [ # your other packages ... trivy ];Home Manager 用戶級(jí)配置# your other config ... home.packages with pkgs; [ # your other packages ... trivy ];asdf / miseasdf 與 mise 是兩款語(yǔ)義相近的版本管理器可通過(guò)同一款社區(qū)插件由第三方維護(hù)安裝 Trivy。兩者均支持全局安裝與按目錄鎖定版本兩種模式此處展示基礎(chǔ)全局安裝。asdf# Install plugin asdf plugin add trivy https://github.com/zufardhiyaulhaq/asdf-trivy.git # Install latest version asdf install trivy latest # Set a version globally (on your ~/.tool-versions file) asdf global trivy latest # Now trivy commands are available trivy --versionmise# Install plugin and install latest version mise install trivylatest # Set a version globally (on your ~/.tool-versions file) mise use -g trivylatest # Now trivy commands are available trivy --version需要多版本共存如驗(yàn)證新舊版本行為差異時(shí)asdf/mise 相比其他渠道有明顯優(yōu)勢(shì)。安裝后驗(yàn)證與下一步無(wú)論使用哪種渠道安裝完成后都建議先驗(yàn)證版本再執(zhí)行一次最小掃描。驗(yàn)證版本trivy --version輸出不僅包含版本號(hào)。從 pkg/version/version.go 的實(shí)現(xiàn)看VersionInfo結(jié)構(gòu)體還會(huì)讀取本地緩存元數(shù)據(jù)展示 Vulnerability DB漏洞數(shù)據(jù)庫(kù)與 Java DB 的 Schema 版本、更新時(shí)間、下次更新時(shí)間等信息方便你確認(rèn)二進(jìn)制版本與已下載數(shù)據(jù)庫(kù)是否配套??焖袤w驗(yàn)掃描以鏡像倉(cāng)庫(kù)中的鏡像為例trivy image python:3.4-alpine首次運(yùn)行會(huì)自動(dòng)下載漏洞數(shù)據(jù)庫(kù)到緩存目錄默認(rèn)$HOME/.cache/trivy后續(xù)使用命中緩存即可。若掃描鏡像過(guò)程中需要緩存與引擎配置優(yōu)化參見(jiàn)前文提及的 Cache 緩存配置。選擇安裝方式時(shí)的決策建議僅想在單機(jī)上試用優(yōu)先Homebrew / 官方 install.sh / GitHub Release 二進(jìn)制需要鎖版本并在生產(chǎn)環(huán)境統(tǒng)一管理優(yōu)先RPM/DEB 軟件源可yum list trivy/apt-cache policy trivy查看候選版本或asdf/mise完全容器化的環(huán)境直接使用官方鏡像并做好 socket 與緩存目錄的掛載追求供應(yīng)鏈可驗(yàn)證性結(jié)合 簽名校驗(yàn)指南 校驗(yàn)二進(jìn)制/容器鏡像簽名。安裝就緒后可以繼續(xù)閱讀 Getting Started 快速上手 了解 target/scanner 的命令行模型如trivy image、trivy fs --scanners vuln,secret,misconfig、trivy k8s --report summary cluster或前往 Ecosystem 集成生態(tài) 查看如何接入 GitHub Actions、Kubernetes Operator、IDE 插件等周邊工具?!久赓M(fèi)下載鏈接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more項(xiàng)目地址: https://gitcode.com/GitHub_Trending/tr/trivy創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考