当前位置: 首页 > news >正文

大良营销网站建设案例房屋室内设计学校

大良营销网站建设案例,房屋室内设计学校,在线做3d交互的网站,租赁网站空间一、Trivy简介 1.1 Trivy 概述 Trivy 是一款全面多功能的安全扫描器。Trivy具有寻找安全问题和目标的扫描器。现已经被 Github Action、Harbor 等主流工具集成#xff0c;Trivy支持大多数流行的编程语言、操作系统和平台的扫描#xff0c;应该是该领域目前目前采用最广的开…一、Trivy简介 1.1 Trivy 概述 Trivy 是一款全面多功能的安全扫描器。Trivy具有寻找安全问题和目标的扫描器。现已经被 Github Action、Harbor 等主流工具集成Trivy支持大多数流行的编程语言、操作系统和平台的扫描应该是该领域目前目前采用最广的开源工具之一了。 项目地址 https://github.com/aquasecurity/trivy最新版本V0.49.1官方文档https://aquasecurity.github.io/trivy/v0.49/ 1.2 Trivy可扫描的内容 容器镜像文件系统Git存储库远程虚拟机镜像KubernetesAWS Trivy支持大多数流行的编程语言、操作系统和平台。有关完整列表请参阅扫描范围页面。 正在使用的操作系统包和软件依赖关系SBOM已知漏洞CVEIaC问题和配置错误敏感信息和秘密软件许可证 目前支持的操作系统 1.3 Trivy 的工作原理 Trivy 自身只是一个扫描工具实际上支撑这个工具的还有一个工具链多种工具/库的协同完成了从 CVE 到扫描识别的各个环节 其中包括 vuln-list-update 负责更新各个来源的威胁数据转换成 JSON 数据保存在 vuln-list 项目之中。trivy-db 既是工具也是库用于操作 Trivy 的数据库。fanal 从 vuln-list 获取数据并构建成 bbolt 格式的数据库文件可以用 upload 命令上传到 Github Release。Trivy 获取 trivy-db 的 Release 数据进行漏洞扫描工作。 综上所述Trivy 的总体工作流程 从操作系统厂商等 CVE 源获取数据使用 vuln-list-update 脚本进行汇总转换为一致的 JSON 数据保存到 vuln-list 项目。trivy-db 从 vuln-list 下载数据转换为 bbolt 格式发布到 trivy-db 的 Release。Trivy 下载 trivy-db 数据作为本地检测的数据源。 二、Trivy安装配置离线库 2.1 二进制部署Trivy Trivy 支持多种部署方式常见的有 rpm包,deb包, 通用二进制和 源码部署,当然也支持 docker部署, 详细的安装手册 方便快速部署升级我采用了二进制的部署方式下载地址 https://github.com/aquasecurity/trivy/releases/tag/v0.49.1 #下载加速地址 [rootopeneuler ~]# wget https://github.com/aquasecurity/trivy/releases/download/v0.49.1/trivy_0.49.1_Linux-64bit.tar.gz[rootopeneuler ~]# tar -xf trivy_0.49.1_Linux-64bit.tar.gz[rootopeneuler ~]# mv ./trivy /usr/local/bin/[rootopeneuler ~]# chmod x /usr/local/bin/trivy[rootopeneuler ~]# which trivy /usr/local/bin/trivy2.2 配置离线漏洞库 2.2.1 了解官方漏洞库的生成过程 Trivy 漏洞库是以符合 OCI 制品的方式发布。OCIOpen Container Initialtive是目前通用的镜像格式规范以 Docker 镜像规范 v2 为基础制定的是围绕容器格式和运行时开放的行业标准。它定义了镜像的主要格式及内容主要用于镜像仓库存放镜像及分发镜像等场景。 官方漏洞库的生成过程涉及到这几个项目 trivy-db制作 Trivy 漏洞库并发布。注意不要和 trivy.db 弄混早期还有一个 fanal 项目已经被合并到 trivy-db 项目中。注意不要和 fanal.db 弄混vuln-list存储漏洞信息并定期发布以 main.tar.gz 压缩包形式发布。vuln-list-update 负责收集各个来源的漏洞信息。Trivy 官方使用该工具每天从 NVD, RedHat, Debian, Ubuntu, Alpine 等渠道收集漏洞信息转换成符合要求的 JSON 格式数据保存在 vuln-list 项目之中。 简单来说就是trivy-db 会去源头下载漏洞信息库。语言漏洞库包括 ruby、php 和 node.js来自各官方项目的漏洞库常用的数据源包括 NVDNational Vulnerability Database和 Red Hat CVE 数据库等。其次trivy-db 会将原始压缩包解压、解析、合并并生成 bboltDB 格式的 trivy.db 漏洞库文件同时生成 metadata.json 文件。最后trivy-db 以 OCI 制品的方式将它们打包生成 db.tar.gz 压缩包并发布到 ghcr.io/aquasecurity/trivy-db供 trivy 远程下载。 2.2.2 trivy-db离线漏洞库 trivy-db是一个包含漏洞数据库的开源项目用于帮助开发人员和安全团队识别容器镜像中的漏洞。它可以与 trivy 工具配合使用帮助用户快速发现容器镜像中存在的安全漏洞并提供修复建议。trivy-db 中包含了各种已知的漏洞信息Trivy在内部使用 trivy-db 来操作漏洞数据库。此数据库包含来自NVD、Red Hat、Debian等的漏洞信息。用户可以通过更新 trivy-db 来获取最新的漏洞数据以保持镜像的安全性。 项目地址 https://github.com/aquasecurity/trivy-db最新版本Trivy DB v2更新间隔每6小时 2.2.3 trivy-java-db离线漏洞库 trivy-java-db 是 Trivy 工具的一个组件用于存储 Java 相关的漏洞数据库。Trivy 是一个开源的漏洞扫描工具用于帮助用户检测容器镜像中的安全漏洞。trivy-java-db 会包含 Java 相关的漏洞信息用户可以通过更新 trivy-java-db 来获取最新的漏洞数据以保持镜像的安全性。这个组件可以帮助用户识别容器镜像中与 Java 相关的漏洞并提供修复建议以提高容器镜像的安全性。 项目地址https://github.com/aquasecurity/trivy-java-db更新间隔每周四0000 2.2.4 使用oras下载漏洞数据库 Trivy DB v2托管在GHCR上。虽然GitHub默认显示 docker pull 命令但请注意它不能使用 docker pull 下载因为它不是容器映像。 官方推荐使用 oras工具 去下载漏洞库。 oras 是一个开源项目是 Open Container Initiative (OCI) 的一个子项目用于定义和实现容器镜像的存储和传输规范。它提供了一个统一的标准使得容器镜像可以在不同的容器运行时中进行共享和交换。oras 支持将容器镜像存储在各种不同的后端存储系统中如容器注册表、对象存储等并提供了用于上传、下载和管理容器镜像的工具和库。oras 旨在提供一个开放、灵活和可扩展的容器镜像存储和传输解决方案使得容器技术更加便捷和可移植。 项目地址 https://github.com/oras-project/oras最新版本 V1.1.0 二进制安装oras 官方下载地址https://github.com/oras-project/oras/releases/download/v1.1.0/oras_1.1.0_linux_amd64.tar.gz #加速下载地址 [rootopeneuler ~]# wget https://gh.api.99988866.xyz/https://github.com/oras-project/oras/releases/download/v1.1.0/oras_1.1.0_linux_amd64.tar.gz[rootopeneuler ~]# tar -xf oras_1.1.0_linux_amd64.tar.gz[rootopeneuler ~]# mv oras /usr/local/bin/ [rootopeneuler ~]# chmod x /usr/local/bin/oras [rootopeneuler ~]# which oras /usr/local/bin/oras离线库下载地址 官方的下载地址 oras pull ghcr.io/aquasecurity/trivy-db:2 oras pull ghcr.io/aquasecurity/trivy-java-db:1 国内代理下载地址南大代理镜像 镜像加速地址请自行准备 oras pull ghcr.nju.edu.cn/aquasecurity/trivy-db:2 oras pull ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 配置离线库 #创建离线库数据目录 [rootopeneuler ~]# mkdir -p /home/application/trivy-db/{db,java-db}[rootopeneuler ~]#cd /home/application/trivy-db#下载trivy-db离线库 [rootopeneuler trivy-db]# oras pull ghcr.nju.edu.cn/aquasecurity/trivy-db:2Downloading b520fb99698f db.tar.gz Downloaded b520fb99698f db.tar.gz Pulled [registry] ghcr.nju.edu.cn/aquasecurity/trivy-db:2 Digest: sha256:c62e392709fe1070c397f763535f364a1e273377e7220117dbdde4086eef6a7d#下载trivy-java-db离线库 [rootopeneuler trivy-db]# oras pull ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1Downloading cd5ea8aec93d javadb.tar.gz Downloaded cd5ea8aec93d javadb.tar.gz Pulled [registry] ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 Digest: sha256:760ebdf834a5772413beda8c126c2f7c04d26cea6baf572e50a69fc698a5f0b9[rootopeneuler trivy-db]# ls -l 总用量 569992 drwxr-xr-x 2 root root 4096 3月 13 13:57 db -rw-r--r-- 1 root root 46383125 3月 13 13:58 db.tar.gz drwxr-xr-x 2 root root 4096 3月 13 13:57 java-db -rw-r--r-- 1 root root 537270294 3月 13 13:59 javadb.tar.gz#解压离线库 [rootopeneuler trivy-db]# tar -xf db.tar.gz -C db [rootopeneuler trivy-db]# tar -xf javadb.tar.gz -C java-db#查看离线库文件 [rootopeneuler trivy-db]# ls -l db 总用量 436256 -rw-r--r-- 1 tsingyun-dev 127 143 3月 13 02:13 metadata.json -rw------- 1 tsingyun-dev 127 446722048 3月 13 02:13 trivy.db[rootopeneuler trivy-db]# ls -l java-db 总用量 849416 -rw-r--r-- 1 tsingyun-dev 127 143 3月 13 08:45 metadata.json -rw-r--r-- 1 tsingyun-dev 127 869793792 3月 13 08:45 trivy-java.db三、Trivy使用 3.1 扫描镜像 使用Trivy扫描镜像的漏洞。 trivy [global flags] command [flags] target trivy [command] 每种扫描能力对应一种命令 aws 【实验性】扫描 AWS 账户config 扫描错误配置 Scan config files for misconfigurationsfilesystem 扫描本地文件image 扫描容器镜像。kubernetes 【实验性】扫描 K8s clusterrepository 扫描远程仓库rootfs 扫描 rootfssbom 根据 SBOM 扫描漏洞可作为简单的 SCA 工具。vm 【实验性】扫描虚拟机镜像 我这里以扫描容器镜像为例 $ trivy image {image_name}:{tag}可选参数 --cache-dir 指定漏洞数据库的本地缓存目录默认在是 ~/.cache/trivy 下 --skip-db-update, 扫描启动的时候会检查本地漏洞库。如果超过 12 小时为更新会自动下载更新漏洞库。由于官方漏洞库放在 github下载比较慢可以使用 --skip-db-update 跳过这一过程。 --skip-java-db-update 同样java 的漏洞库每周四凌晨自动更新也是存在github上以使用--skip-java-db-update 跳过这一过程。 --severity CRITICAL  指定扫描的严重程度分为CRITICAL[紧急],HIGH[高的],MEDIUM[中等],LOW[低的] --vuln-type , 指定想要扫描的漏洞种类 , os仅扫描目标比如容器镜像或文件系统中操作系统包含的已知漏洞; library 应用程序库的漏洞扫描; --vuln-type os,library 同时包含操作系统包和应用程序库的漏洞扫描 -f 指定输出的格式默认的输出格式是 table, 以表格的形式显示扫描结果。-f json 以json 格式输出结果 配合 -o 输出文件 如 trivy -f json -o nginx.1.22.1.json --ignore-unfixed  会忽略那些当前没有可用修复的已知漏洞这个选项对于聚焦于立即可行的修复措施特别有用。在一些场景下特别是在资源有限或时间紧迫的情况下您可能更希望先关注那些已经有解决方案的漏洞而将那些暂时无法解决的漏洞留待以后处理。 示例扫描一个名为 mysql:5.7.44 的本地 Docker 镜像。 [rootopeneuler ~]# trivy --cache-dir /home/application/trivy-db image mysql:5.7.44 --skip-db-update --skip-java-db-update --severity CRITICAL 2024-03-14T18:44:04.3010800 INFO Vulnerability scanning is enabled 2024-03-14T18:44:04.3010800 INFO Secret scanning is enabled 2024-03-14T18:44:04.3010800 INFO If your scanning is slow, please try --scanners vuln to disable secret scanning 2024-03-14T18:44:04.3010800 INFO Please see also https://aquasecurity.github.io/trivy/v0.49/docs/scanner/secret/#recommendation for faster secret detection 2024-03-14T18:44:04.4070800 INFO Detected OS: oracle 2024-03-14T18:44:04.4070800 INFO Detecting Oracle Linux vulnerabilities... 2024-03-14T18:44:04.4130800 INFO Number of language-specific files: 2 2024-03-14T18:44:04.4130800 INFO Detecting gobinary vulnerabilities... 2024-03-14T18:44:04.4140800 INFO Detecting python-pkg vulnerabilities...mysql:5.7.44 (oracle 7.9)Total: 0 (CRITICAL: 0)2024-03-14T18:44:04.4170800 INFO Table result includes only package filenames. Use --format json option to get the full path to the package file.Python (python-pkg)Total: 1 (CRITICAL: 1)┌─────────────────────────┬────────────────┬──────────┬────────┬───────────────────┬───────────────┬────────────────────────────────────────────────────────────┐ │ Library │ Vulnerability │ Severity │ Status │ Installed Version │ Fixed Version │ Title │ ├─────────────────────────┼────────────────┼──────────┼────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤ │ cryptography (METADATA) │ CVE-2020-36242 │ CRITICAL │ fixed │ 3.2.1 │ 3.3.2 │ python-cryptography: Large inputs for symmetric encryption │ │ │ │ │ │ │ │ can trigger integer overflow leading to... │ │ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2020-36242 │ └─────────────────────────┴────────────────┴──────────┴────────┴───────────────────┴───────────────┴────────────────────────────────────────────────────────────┘ 扫描之后以 table 形式展示了该镜像包含的漏洞提示漏洞所在库Library、漏洞编号Vulnerability、严重程度Severity、当前使用版本Installed Version、漏洞修复版本Fixed Version以及其他信息Title。 在 Title 信息中有一个网站说明漏洞的详情可以更好的帮我们去处理漏洞如 https://avd.aquasec.com/nvd/cve-2020-36242 3.2 了解本地漏洞库结构 刚刚我们已经下载了离线漏洞库且使用了trivy 扫描了一个mysql 的镜像现在我们来看下本地漏洞库的结构 注意Trivy默认的漏洞数据库的本地缓存目录在是 ~/.cache/trivy 下 我这边自己定义了Trivy 本地缓存目录为 /home/application/trivy-db [rootopeneuler application]# tree ./trivy-db/ ./trivy-db/ ├── db │ ├── metadata.json │ └── trivy.db ├── fanal │ └── fanal.db └── java-db├── metadata.json└── trivy-java.db3 directories, 5 files3.2.1 metadata.json metadata.json 是 trivy.db 漏洞库的更新描述文件。记录了 Version漏洞库格式的版本目前为 2。UpdateAt本次漏洞库更新时间。是指漏洞库更新的发布时间并非本地更新时间NetxUpdate下次漏洞库更新时间。官方库默认每 6 小时更新发布一次DownloadedAt漏洞库下载时间。 [rootopeneuler application]# cat ./trivy-db/db/metadata.json {Version:2,NextUpdate:2024-03-13T00:11:44.883502148Z,UpdatedAt:2024-03-12T18:11:44.883502428Z,DownloadedAt:0001-01-01T00:00:00Z}注意如果触发 trivy 更新下载漏洞库过程trivy 会先删除 metadata.json 文件。此时即便中断更新过程【比如无法科学上网】再次使用--skip-db-update 仍会重新下载漏洞库直到完整更新流程完成因为检查 metadata.json 已经被删除了。 3.2.2 fanal.db fanal.db 使用 blotDB 数据存储格式。blotDB是一个 key-value 形式的数据库在 go 语言程序中比较常用可以用 bbolt 等工具查看。 blotDB是一个 key-value 形式的数据库在 go 语言程序中比较常用可以用 bbolt 等工具查看。blotDB 数据库的顶层是一个 Bucket 桶列表桶可以继续嵌套子桶。每个桶里面最终存放的是一组 key-value 的数据集合大致结构如下 * Bucket* Bucket* key:value* key:value* key:value * Bucket* key:value * ……同样 fanal.db 是容器镜像 ImageID 的快速索引库。trivy 在扫描时可以利用 fanal.db 匹配镜像的 ImageID快速确认镜像的操作系统、版本等信息。fanal.db 目前包含两个桶artifact、blob。artifact 有 3 个 keyblob 有 19 个 key。key 都是使用“sha256:哈希值”形式的 ImageID。 每个 Docker 容器镜像都有一个“sha256:哈希值”形式地 ImageID 来标识。 3.2.3 trivy.db trivy.db是漏洞信息的存储库。也是使用 blotDB 作为数据存储格式。trivy.db 有很多存储桶Bucket 3.2.4 总结 使用 fanal 漏洞库快速查询操作系统版本信息 trivy 会提取目标镜像的 ImageID并根据目标镜像记录的生成关系计算出其基础镜像的 ImageID。然后在 fanal.db中保存的 ImageID 进行查询。如果命中就可以快速确基础镜像对应的操作系统、版本信息等信息。 解析基础镜像的系统文件获得操作系统版本信息 如果没有则需要解析基础镜像并根据其中的操作系统版本文件etc/alpine-release、usr/lib/os-release、/etc/os-release 等来确定基础镜像的操作系统版本。这种方式要比查询 fanal.db 慢一些。 示例的 mysql:5.7 的基础镜像 os-release 文件表明它是一个 Oracle Linux 7 版本的操作系统。 $ sudo cat /var/lib/docker/overlay2/7c2ae603cabf55836770978b28dc133719ce2f43f9c36499308cba1ad080c305/diff/etc/os-release NAMEOracle Linux Server VERSION7.9 IDol ID_LIKEfedora VARIANTServer VARIANT_IDserver VERSION_ID7.9 PRETTY_NAMEOracle Linux Server 7.9 ANSI_COLOR0;31 CPE_NAMEcpe:/o:oracle:linux:7:9:server HOME_URLhttps://linux.oracle.com/ BUG_REPORT_URLhttps://bugzilla.oracle.com/ORACLE_BUGZILLA_PRODUCTOracle Linux 7 ORACLE_BUGZILLA_PRODUCT_VERSION7.9 ORACLE_SUPPORT_PRODUCTOracle Linux ORACLE_SUPPORT_PRODUCT_VERSION7.9根据操作系统版本信息使用不同的检测模块和漏洞库进行检测。 trivy 根据目标基础镜像的操作系统和版本就可以确定具体的扫描器在 trivy.db 中使用对应的操作系统版本 Buckets 桶。 trivy 解析目标镜像的文件系统采集模块和版本信息并根据模块信息去 trivy.db 中匹配对应模块的漏洞信息。如果找到记录下来最终形成漏洞检测结果。 例如上文的 mysql:5.7 镜像在扫描镜像包含的 openssl 库时会根据操作系统版本去 trivy.db 的Oracle Linux 7、“openssl”桶中查询相关漏洞信息并最终生成 CVE-2023-0286 漏洞告警。 3.3 定期自动下载离线库 创建本地漏洞库缓存目录 mkdir -p /home/application/trivy-db/{db,java-db}创建 download_and_extract.sh 脚本, 前提是 安装好 trivy 和 oras 工具 #切换到缓存目录下 [rootopeneuler trivy-db]# cd /home/application/trivy-db/#编写脚本 [rootopeneuler trivy-db]# vim download_and_extract.sh#!/bin/bash#创建缓存目录 mkdir -p /home/application/trivy-db/{db,java-db}# 清空 db 目录下的内容 rm -rf /home/application/trivy-db/db/* # 清空 java-db 目录下的内容 rm -rf /home/application/trivy-db/java-db/*# 下载离线库文件 cd /home/application/trivy-db/ /usr/local/bin/oras pull ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 /usr/local/bin/oras pull ghcr.nju.edu.cn/aquasecurity/trivy-db:2# 解压 jdb.tar.gz 文件到 java-db 目录 tar -xvf /home/application/trivy-db/javadb.tar.gz -C /home/application/trivy-db/java-db# 解压 db.tar.gz 文件到 db 目录 tar -xvf /home/application/trivy-db/db.tar.gz -C /home/application/trivy-db/db# 删除压缩包文件 rm -f /home/application/trivy-db/javadb.tar.gz rm -f /home/application/trivy-db/db.tar.gz给脚本添加可执行权限 [rootopeneuler trivy-db]# chmod x /home/application/trivy-db/download_and_extract.sh验证 #执行脚本 [rootopeneuler trivy-db]# bash download_and_extract.sh Downloading 17e353961a66 javadb.tar.gz Downloaded 17e353961a66 javadb.tar.gz Pulled [registry] ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 Digest: sha256:3330dc2c525849b8bf76c9c4ea1b97bfd69f3a86a8e4a62e7fd1cedab4a4d98c Downloading 3bf672bda57d db.tar.gz Downloaded 3bf672bda57d db.tar.gz Pulled [registry] ghcr.nju.edu.cn/aquasecurity/trivy-db:2 Digest: sha256:52e79cf2c9deee18f498dde13da653854eab1c60c358c0b51caa74f712e5e01c trivy-java.db metadata.json trivy.db metadata.json#查看数据 [rootopeneuler trivy-db]# tree . . ├── db │ ├── metadata.json │ └── trivy.db ├── download_and_extract.sh ├── fanal │ └── fanal.db └── java-db├── metadata.json└── trivy-java.db3 directories, 6 files#执行容器镜像扫描 [rootopeneuler trivy-db]# trivy --cache-dir /home/application/trivy-db image nginx:1.25 --skip-db-update --skip-java-db-update --severity CRITICAL,HIGH添加定时任务 每天凌晨 3 点执行 /home/application/download_and_extract.sh 脚本实现自动下载和解压离线库文件的操作 0 3 * * * /bin/bash /home/application/download_and_extract.sh四、Trivy和Harbor镜像仓库集成 4.1 安装Docker 下载地址https://mirrors.nju.edu.cn/docker-ce/linux/static/stable/x86_64/docker-20.10.18.tgz [rootopeneuler ~]# wget https://mirrors.nju.edu.cn/docker-ce/linux/static/stable/x86_64/docker-20.10.18.tgz[rootopeneuler ~]# tar -xf docker-20.10.18.tgz[rootopeneuler ~]# mv docker/* /usr/bin[rootopeneuler ~]# which docker /usr/bin/docker编写docker.service文件, 使用systemd管理 [rootopeneuler ~]# cat /etc/systemd/system/docker.service EOF[Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target[Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/kill -s HUP $MAINPID LimitNOFILE65535 LimitNPROC65535 LimitCORE65535 TimeoutStartSec0 Delegateyes KillModeprocess Restarton-failure StartLimitBurst3 StartLimitInterval60s[Install] WantedBymulti-user.targetEOF**[可选] ** 挂载docker默认存储路径 docker的默认工作路径在/var/lib/docker 最好不修改默认存储路径可以做软链接 #建立docker工作目录 [rootopeneuler ~]# mkdir -p /home/application/docker#格式化磁盘 [rootopeneuler ~]# mkfs.ext4 /dev/sdb#磁盘永久挂载 [rootopeneuler ~]# vim /etc/fstab /dev/sdb /home/application/docker ext4 defaults 0 0#使挂载生效 [rootopeneuler ~]# mount -a#创建软链接 [rootopeneuler ~]# ln -s /home/application/docker /var/lib/添加可执行权限 [rootopeneuler ~]# chmod x /etc/systemd/system/docker.service启动加载开机自启动 [rootopeneuler ~]# systemctl daemon-reload [rootopeneuler ~]# systemctl start docker.service [rootopeneuler ~]# systemctl enable docker.service配置镜像加速器 [rootopeneuler ~]# mkdir -p /etc/docker [rootopeneuler ~]# tee /etc/docker/daemon.json -EOF {registry-mirrors: [https://docker.nju.edu.cn/],exec-opts: [native.cgroupdriversystemd] } EOF[rootopeneuler ~]# systemctl daemon-reload [rootopeneuler ~]# systemctl restart docker验证docker [rootopeneuler ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4.2 安装Docker-Compose docker 和docker-compose 的版本对应关系https://docs.docker.com/compose/compose-file/compose-versioning/#version-1-to-2x 下载地址https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-linux-x86_64 [rootopeneuler ~]# wget https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-linux-x86_64 -O /usr/local/bin/docker-compose[rootopeneuler ~]# chmod x /usr/bin/docker-compose[rootopeneuler ~]# docker-compose version Docker Compose version v2.10.24.3 离线安装Harbor 项目地址 https://github.com/goharbor/harbor最新版本V2.10.1 离线包下载地址 https://github.com/goharbor/harbor/releases/download/v2.10.1/harbor-offline-installer-v2.10.1.tgz #创建harbor工作目录数据目录 [rootopeneuler ~]# mkdir -p /home/application/harbor [rootopeneuler ~]# mkdir -p /home/application/harbor/data#切换到harbor工作目录下 [rootopeneuler ~]# cd /home/application/harbor#下载软件包 [rootopeneuler harbor]# wget https://github.com/goharbor/harbor/releases/download/v2.10.1/harbor-offline-installer-v2.10.1.tgz#解压 [rootopeneuler harbor]# tar -xf harbor-offline-installer-v2.10.1.tgz #重命名软件包 [rootopeneuler harbor]# mv harbor harbor-offline-install#删除harbor-offline-installer-v2.10.1.tgz [rootopeneuler harbor]# rm -rf harbor-offline-installer-v2.10.1.tgz#查看目录下内容 [rootopeneuler harbor]# ls -l 总用量 8 drwxr-xr-x 2 root root 4096 3月 15 17:53 data drwxr-xr-x 2 root root 4096 3月 15 17:52 harbor-offline-install编辑配置文件harbor.yml #进入到安装目录下 [rootopeneuler harbor]# cd /home/application/harbor/harbor-offline-install#拷贝harbor.yml [rootopeneuler harbor-offline-install]# cp harbor.yml.tmpl harbor.yml#编辑harbor.yml配置 文件 [rootopeneuler harbor-offline-install]# vim harbor.yml#!!!注意需要修改的地方!!!!hostname: harbor.srebro.cn#只开启http #注释掉https内容 #后面使用外部的nginx 代理这个harbor的https # http related config http:# port for http, default is 80. If https enabled, this port will redirect to https portport: 80# https related config #https:# https port for harbor, default is 443# port: 443# The path of cert and key files for nginx#certificate: /your/certificate/path# private_key: /your/private/key/path# enable strong ssl ciphers (default: false)# strong_ssl_ciphers: false#启用外部代理后将不再使用主机名 external_url: https://harbor.srebro.cn#修改Harbor默认密码 harbor_admin_password: Harborsrebro.cn#修改数据库默认密码 database:# The password for the root user of Harbor DB. Change this before any production use.password: Harborsrebro#Harbor数据目录路径 data_volume: /home/application/harbor/data#配置trivy相关配置设置离线配置 trivy:ignore_unfixed: falseskip_update: trueskip_java_db_update: trueoffline_scan: truesecurity_check: vulninsecure: false开始安装harbor #进入到安装目录下 [rootopeneuler harbor]# cd /home/application/harbor/harbor-offline-install#开始安装harbor离线安装速度很快大概2分钟 [rootopeneuler harbor]# ./install.sh --with-trivy#安装过程省略当看到下面的这段话时表示harbor安装成功 ✔ ----Harbor has been installed and started successfully.----查看Harbor运行状态 [rootopeneuler harbor-offline-install]# docker-compose ps NAME COMMAND SERVICE STATUS PORTS harbor-core /harbor/entrypoint.… core running (healthy) harbor-db /docker-entrypoint.… postgresql running (healthy) harbor-jobservice /harbor/entrypoint.… jobservice running (healthy) harbor-log /bin/sh -c /usr/loc… log running (healthy) 127.0.0.1:1514-10514/tcp harbor-portal nginx -g daemon of… portal running (healthy) nginx nginx -g daemon of… proxy running (healthy) 0.0.0.0:80-8080/tcp, :::80-8080/tcp redis redis-server /etc/r… redis running (healthy) registry /home/harbor/entryp… registry running (healthy) registryctl /home/harbor/start.… registryctl running (healthy) trivy-adapter /home/scanner/entry… trivy-adapter running (healthy) 编写service文件使用systemd管理 [rootharbor harbor-offline-install]# cat /lib/systemd/system/harbor.service EOF [Unit] DescriptionDocker Harbor Afterdocker.service systemd-networkd.service systemd-resolved.service Requiresdocker.service Documentationhttp://github.com/vmware/harbor[Service] Typesimple Restarton-failure ExecStart/usr/bin/docker-compose -f /home/application/harbor/harbor-offline-install/docker-compose.yml up ExecStop/usr/bin/docker-compose -f /home/application/harbor/harbor-offline-install/docker-compose.yml down RestartSec5[Install] WantedBymulti-user.targetEOF启动加载开机自启动 systemctl enable --now harbor.service4.4 使用NGINX代理Harbor镜像仓库 Nginx安装文档省略 代理配置文件如下 如果需要配置HTTPS访问需要配置SSL 证书哦 server {listen 80;listen 443 ssl;server_name harbor.srebro.cn;root /usr/share/nginx/html;ssl_certificate /home/application/nginx/cert/harbor.srebro.cn/harbor.srebro.cn.crt;ssl_certificate_key /home/application/nginx/cert/harbor.srebro.cn/harbor.srebro.cn.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {proxy_pass http://172.16.10.181:80;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;client_max_body_size 2000m;proxy_set_header X-Forwarded-Proto https;proxy_redirect off;}error_page 404 /404.html;location /40x.html {}error_page 500 502 503 504 /50x.html;location /50x.html {}}使用域名访问 https://harbor.srebro.cn 使用docker命令行登录Harbor仓库 #登录私有仓库harbor.srebro.cn[rootopeneuler harbor-offline-install]# docker login harbor.srebro.cn Username (admin): admin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded4.5 Harbor 配置定期自动下载Trivy离线库 4.5.1 环境前提 需要安装好 Trivy和 oras 工具 4.5.2 查看Trivy-adapter宿主机的漏洞库缓存路径 #查看harbor安装时生成的docker-compose.yml 文件[rootopeneuler ~]# cat /home/application/harbor/harbor-offline-install/docker-compose.yml#找到trivy 相关内容trivy-adapter:container_name: trivy-adapterimage: goharbor/trivy-adapter-photon:v2.10.1restart: alwayscap_drop:- ALLdepends_on:- log- redisnetworks:- harborvolumes:- type: bindsource: /home/application/harbor/data/trivy-adapter/trivytarget: /home/scanner/.cache/trivy- type: bindsource: /home/application/harbor/data/trivy-adapter/reportstarget: /home/scanner/.cache/reports- type: bindsource: ./common/config/shared/trust-certificatestarget: /harbor_cust_certlogging:driver: syslogoptions:syslog-address: tcp://localhost:1514tag: trivy-adapterenv_file:./common/config/trivy-adapter/env通过查看docker-compose.yml 文件得知容器外部的漏洞库缓存路径在 /home/application/harbor/data/trivy-adapter/trivy目录下 #切换到缓存路径下 [rootopeneuler ~]# cd /home/application/harbor/data/trivy-adapter/trivy查看目录的所属为uidguid 为10000 的 用户用户组 后面下载离线库到此路径下需要chown 授权uidguid 为10000 的 用户用户组 不然容器内无法访问离线库文件 [rootopeneuler trivy]# ls -ld drwxr-xr-x 2 10000 10000 4096 3月 15 18:29 .4.5.3 定期自动下载Trivy离线库 创建 download_and_extract.sh 脚本 #切换到trivy-adapter缓存目录下[rootopeneuler ~]# cd /home/application/harbor/data/trivy-adapter/trivy#编写脚本 [rootopeneuler harbor]# vim download_and_extract.sh#!/bin/bash #创建缓存目录 mkdir -p /home/application/harbor/data/trivy-adapter/trivy/{db,java-db}# 清空 db 目录下的内容 rm -rf /home/application/harbor/data/trivy-adapter/trivy/db/* # 清空 java-db 目录下的内容 rm -rf /home/application/harbor/data/trivy-adapter/trivy/java-db/*# 下载离线库文件 /usr/local/bin/oras pull ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 /usr/local/bin/oras pull ghcr.nju.edu.cn/aquasecurity/trivy-db:2# 解压 jdb.tar.gz 文件到 java-db 目录 tar -xvf /home/application/harbor/data/trivy-adapter/trivy/javadb.tar.gz -C /home/application/harbor/data/trivy-adapter/trivy/java-db# 解压 db.tar.gz 文件到 db 目录 tar -xvf /home/application/harbor/data/trivy-adapter/trivy/db.tar.gz -C /home/application/harbor/data/trivy-adapter/trivy/db# 删除压缩包文件 rm -f /home/application/harbor/data/trivy-adapter/trivy/javadb.tar.gz rm -f /home/application/harbor/data/trivy-adapter/trivy/db.tar.gz#chown赋权 chown -Rf 10000:10000 /home/application/harbor/data/trivy-adapter/trivy给脚本添加可执行权限 [rootopeneuler trivy]# chmod x download_and_extract.sh 执行脚本下载离线库文件 [rootopeneuler trivy]# ./download_and_extract.sh Downloading aacb390976a2 javadb.tar.gz Downloaded aacb390976a2 javadb.tar.gz Pulled [registry] ghcr.nju.edu.cn/aquasecurity/trivy-java-db:1 Digest: sha256:9c88e77a0d210afb0bad04be6dbc46200462f4da4c8af73f5b541cfcda01fcac Downloading 3bf672bda57d db.tar.gz Downloaded 3bf672bda57d db.tar.gz Pulled [registry] ghcr.nju.edu.cn/aquasecurity/trivy-db:2 Digest: sha256:52e79cf2c9deee18f498dde13da653854eab1c60c358c0b51caa74f712e5e01c trivy-java.db metadata.json trivy.db metadata.json[rootopeneuler trivy]# ll db/ java-db/ db/: 总用量 436196 -rw-r--r-- 1 10000 10000 143 3月 15 02:11 metadata.json -rw------- 1 10000 10000 446656512 3月 15 02:11 trivy.dbjava-db/: 总用量 850720 -rw-r--r-- 1 10000 10000 143 3月 15 08:49 metadata.json -rw-r--r-- 1 10000 10000 871129088 3月 15 08:49 trivy-java.db添加定时任务 每天凌晨 2 点执行 /home/application/harbor/data/trivy-adapter/trivy/download_and_extract.sh 脚本实现自动下载和解压离线库文件的操作 0 2 * * * /bin/bash /home/application/harbor/data/trivy-adapter/trivy/download_and_extract.sh4.5.4 验证使用离线库扫描镜像 #下载一个mysql8 的最新镜像[rootopeneuler ~]# docker pull mysql:8 8: Pulling from library/mysql Digest: sha256:9d1c923e5f66a89607285ee2641f8a53430a1ccd5e4a62b35eb8a48b74b9ff48 Status: Downloaded newer image for mysql:8 docker.io/library/mysql:8#登录私有仓库harbor.srebro.cn[rootopeneuler harbor-offline-install]# docker login harbor.srebro.cn Username (admin): admin Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded#推送镜像到私有仓库 [rootopeneuler harbor-offline-install]# docker tag mysql:8 harbor.srebro.cn/library/mysql:8[rootopeneuler harbor-offline-install]# docker push harbor.srebro.cn/library/mysql:8 The push refers to repository [harbor.srebro.cn/library/mysql] 14544546851f: Pushed 5458227f9e0f: Pushed ec9a59df23f2: Pushed 7fafcf5c6ac1: Pushed a5d9662dde43: Pushed d8fb47b60f94: Pushed 7d05fbfb31ee: Pushed 331304b328ea: Pushed 96549124ed74: Pushed 18a3ada103a9: Pushed 8: digest: sha256:4802e59ea1b51506b1f9137baac8440e1bd6b69ab1c748586859dc0f694916a2 size: 2411Harbor 仓库中查看镜像 在harbor控制台中, 扫描镜像,并查看报告 五、Jenkins CI/CD 集成Trivy Trivy专注于CI环境中的容器镜像漏洞扫描因此它对于持续集成流程的支持非常好。您可以将Trivy集成到您的CI/CD流水线中以确保每次构建生成的镜像都经过了安全性检查。 Trivy是一个简单但功能强大的容器漏洞扫描工具适用于将安全性纳入持续集成流程中以确保生成的容器镜像始终符合安全标准。无论是开发人员、运维团队还是安全专家都可以从Trivy的漏洞检测功能中受益。 5.1 trivy 部署 安装过程同上此处省略 5.2 CI 集成Trivy **说明**这里我们需要在Jenkins上安装 HTML Publisher 插件此插件是用来将构建生成的 HTML 报告发布到作业和构建页面可方便我们进行查阅。 参数说明 --skip-db-update 跳过数据库的更新--exit-code 指定退出状态码--severity 指定漏洞严重级别--cache-dir 指定缓存目录下载html模板文件https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/html.tpl demo流水线 pipeline {agent anystages {stage(镜像安全扫描) {steps{script { def formatOption --format template --template \/opt/jenkins/html.tpl\sh(trivy image --skip-db-update --skip-java-db-update --exit-code 1 --severity CRITICAL IMAGES:TAG --cache-dir trivy_db $formatOption --timeout 10m --output trivy.html)// reportDir 报告所在目录reportFiles 报告名称reportName 在Jenkins菜单栏显示的名称 reportTitles 点进报告显示的TitlepublishHTML (target : [allowMissing: false,alwaysLinkToLastBuild: true,keepAll: true,reportDir: .,reportFiles: trivy.html,reportName: Trivy Scan,reportTitles: Trivy Scan])}}}} }六、常见问题 6.1 Harbor 安装完之后使用IP地址访问总是提示密码错误 问题现象配置文件安装部署时密码都是对的可就是提示密码错误无法登录 解决方法Harbor 配置文件的 values.yaml文件中的 externalURL,不是用 externalURL配置, 也就是需要使用 externalUR 来登录平台不能再用Harbor 的 hostnameIP地址直接登录这边就需要外部做好代理配置好NGINX。 如果不使用域名去登录就需要注释掉 externalURL使用 hostname的IP地址直接登录 6.2 使用Docker 命令行登录Harbor仓库忽略Https认证 问题现象 docker默认不允许向http的仓库地址推送 解决方法 通过配置daemon的方式来跳过证书的验证 $ cat /etc/docker/daemon.json {registry-mirrors: [https://docker.nju.edu.cn/],insecure-registries: [172.16.10.180] }
http://www.hkea.cn/news/14332912/

相关文章:

  • 做网站实例教程沈阳男科在线咨询
  • 淘宝联盟+做网站网站制作品牌有哪些
  • 微博优惠券网站怎么做做网站的请示
  • 南京高新区网站建设公司建网站要多少钱
  • 设计专业干货推荐网站wordpress+判断手机
  • 唐山建设网站设计教学网站推荐
  • 棋牌游戏网站模板下载儿童玩具网站建设实训报告
  • 做食品网站需要什么资质吗注册 网站开发 公司
  • 做标记网站三 网站开发使用软件环境
  • 做词频云图的网站网页源代码有什么用
  • 广州天美展览公司网站受欢迎的网站建设案例
  • 网站定制开发一般多久wordpress中文附件乱码
  • 艺术网站建设dede大气企业网站模板(一屏展示)
  • 网站网址模板企业手机网站建设公司
  • 网页设计最牛的网站建设wap网站开发公司
  • 宿迁网站网站建设西安短视频培训
  • 网站ftp上传工具哪个好用vps lnmp wordpress
  • 深圳企业社保网站官网黄页是什么东西
  • 大眼睛网站建设长沙模板网站长沙网站建设
  • 网站建设有必要做手机端吗外贸快车
  • 北京著名网站建设公司网站桌面图标怎么做
  • 便宜的广州网站建设服务上杭建设局网站
  • 吴江区经济开发区建设工程网站网页设计需求分析
  • 关于单位网站建设的免费购物平台都有哪些
  • 新视网站建设联系qq玉屏网络推广公司
  • 化妆品品牌网站建设学做网站培训
  • 专业网站设计的公司wordpress做企业网站
  • 网站 app 哪个先做网站建设与维护学什么科目
  • 如何建设网站子页零基础学做网站教程
  • 番禺网站开发哪家好铜川公司做网站