# Scan SBOM **Repository Path**: maniacratt/scan-sbom ## Basic Information - **Project Name**: Scan SBOM - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-17 - **Last Updated**: 2025-09-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java项目SBOM解决方案 本方案提供了在RedHat系统上为Java项目生成和管理软件物料清单(SBOM)的完整解决方案。 ## 目录 - [环境要求](#环境要求) - [离线安装](#离线安装) - [环境检查](#环境检查) - [Jenkins集成](#jenkins集成) - [使用说明](#使用说明) - [常见问题](#常见问题) - [依赖检查工具使用说明](#依赖检查工具使用说明) ## 环境要求 - 操作系统:RedHat 7.9 - Java版本:JDK 1.8 - Jenkins:2.x或更高版本 - 磁盘空间:至少10GB可用空间 - 系统架构:x86_64 ## 离线安装 ### 1. 在Windows上下载工具 1. 创建下载目录: ``` D:\SBOM-Tools ``` 2. 下载必要工具: - Syft工具:访问 https://github.com/anchore/syft/releases/download/v0.94.0/syft_0.94.0_linux_amd64.tar.gz - jq工具:访问 https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 - Grype工具:访问 https://github.com/anchore/grype/releases/download/v0.92.2/grype_0.92.2_linux_amd64.tar.gz 3. 创建安装包: - 将下载的文件放入 `D:\SBOM-Tools` 目录 - 使用7-Zip或WinRAR创建压缩包: - 右键选择 `D:\SBOM-Tools` 目录 - 选择"添加到压缩包" - 选择ZIP格式 - 命名为 `sbom-tools.zip` ### 2. 将文件传输到Linux服务器 1. 使用U盘传输: - 将 `sbom-tools.zip` 复制到U盘 - 将U盘插入Linux服务器 2. 或使用SCP传输(如果有网络): ```bash # 在Windows PowerShell中执行 scp D:\SBOM-Tools\sbom-tools.zip username@linux-server:/tmp/ ``` ### 3. 在Linux服务器上安装 ```bash # 创建安装目录 sudo mkdir -p /opt/sbom-tools cd /opt/sbom-tools # 如果使用U盘,先挂载U盘 sudo mount /dev/sdb1 /mnt/usb # 根据实际U盘设备名调整 # 复制文件 sudo cp /mnt/usb/sbom-tools.zip /opt/sbom-tools/ # 或如果使用SCP传输 sudo cp /tmp/sbom-tools.zip /opt/sbom-tools/ # 解压文件 sudo unzip sbom-tools.zip # 安装Syft sudo tar -xzf syft_0.94.0_linux_amd64.tar.gz sudo mv syft /usr/local/bin/ sudo chmod +x /usr/local/bin/syft # 安装jq sudo mv jq-linux64 /usr/local/bin/jq sudo chmod +x /usr/local/bin/jq # 安装Grype sudo tar -xzf grype_0.92.2_linux_amd64.tar.gz sudo mv grype /usr/local/bin/ sudo chmod +x /usr/local/bin/grype # 安装bc (如果系统中没有) sudo yum install bc -y # 或者 sudo apt-get install bc -y (Debian/Ubuntu) # 验证安装 syft version jq --version grype version ``` ### 4. 配置环境变量 ```bash # 编辑环境变量文件 sudo vim /etc/profile.d/sbom-tools.sh # 添加以下内容 export PATH=$PATH:/usr/local/bin # 使环境变量生效 source /etc/profile.d/sbom-tools.sh ``` ### 5. 创建必要的目录 ```bash # 创建SBOM报告目录 sudo mkdir -p /var/sbom-reports sudo chown -R $USER:$USER /var/sbom-reports # 创建日志目录 sudo mkdir -p /var/log/sbom sudo chown -R $USER:$USER /var/log/sbom ``` ## 环境检查 ### 1. 运行环境检查脚本 ```bash # 添加执行权限 chmod +x check-environment.sh # 运行检查脚本 ./check-environment.sh ``` ### 2. 检查项目 脚本会检查以下内容: - Java环境 - Syft工具 - jq工具 - Grype工具 - bc工具 - 目录权限 - 磁盘空间 - 系统架构 - 环境变量 - Jenkins环境(如果已安装) ### 3. 常见问题解决 如果检查失败,请参考以下解决方案: 1. **Java环境问题**: ```bash # 检查Java版本 java -version # 如果未安装,安装Java sudo yum install java-1.8.0-openjdk ``` 2. **工具安装问题**: ```bash # 检查工具是否在PATH中 echo $PATH # 手动添加PATH export PATH=$PATH:/usr/local/bin ``` **检查特定工具是否安装:** ```bash which syft which jq which grype which bc ``` 3. **权限问题**: ```bash # 检查目录权限 ls -l /var/sbom-reports ls -l /var/log/sbom # 修复权限 sudo chown -R $USER:$USER /var/sbom-reports sudo chown -R $USER:$USER /var/log/sbom ``` 4. **磁盘空间问题**: ```bash # 检查磁盘空间 df -h # 清理不需要的文件 sudo find /var/log -type f -mtime +30 -delete ``` ## Jenkins集成 ### 1. 安装必要插件 在Jenkins中安装以下插件: - Pipeline - Git - Email Extension - HTML Publisher ### 2. 配置Jenkins项目 1. 创建新的流水线项目 2. 选择"Pipeline script from SCM" 3. 配置Git仓库地址 4. 指定Jenkinsfile路径 ### 3. 配置邮件通知 在Jenkins系统配置中: 1. 配置SMTP服务器 2. 设置发件人邮箱 3. 配置收件人列表 ## 使用说明 ### 1. 自动触发 - 每次代码提交后自动触发SBOM生成 - 检查间隔:5分钟 - 自动发送邮件通知 ### 2. 手动触发 - 在Jenkins界面点击"Build Now" - 选择构建参数(如果需要) ### 3. 查看结果 生成的文件位于`sbom-reports`目录: - `sbom.json`:完整的SBOM文件 - `outdated-deps.txt`:过时依赖列表 - `license-report.txt`:许可证报告 - `dependency-changes.txt`:依赖变更记录 ### 4. 邮件通知内容 成功通知: - 项目名称 - 构建编号 - 变更信息 - 报告链接 失败通知: - 项目名称 - 构建编号 - 错误信息 - 日志链接 ## 常见问题 ### 1. 工具安装失败 检查点: 1. 文件权限是否正确 2. 磁盘空间是否充足 3. 系统架构是否匹配(amd64) 解决方案: ```bash # 检查文件权限 ls -l /usr/local/bin/syft ls -l /usr/local/bin/jq # 检查磁盘空间 df -h # 检查系统架构 uname -m ``` ### 2. Jenkins构建失败 检查点: 1. Jenkins插件是否正确安装 2. Git仓库权限是否正确 3. 邮件服务器配置是否正确 4. 工作空间权限是否正确 ### 3. 扫描结果异常 检查点: 1. 项目路径是否正确 2. Java环境是否正确 3. 文件权限是否正确 4. 磁盘空间是否充足 ## 维护说明 ### 1. 更新工具 在Windows上: 1. 下载新版本工具 2. 创建新的安装包 3. 按照上述步骤传输到Linux服务器 在Linux服务器上: ```bash # 备份旧版本 sudo mv /usr/local/bin/syft /usr/local/bin/syft.bak # 安装新版本 cd /opt/sbom-tools sudo tar -xzf syft_0.94.0_linux_amd64.tar.gz sudo mv syft /usr/local/bin/ sudo chmod +x /usr/local/bin/syft ``` ### 2. 清理历史数据 ```bash # 清理旧的SBOM报告 find /var/sbom-reports -type f -mtime +30 -delete # 清理日志文件 find /var/log/sbom -type f -mtime +30 -delete ``` ### 3. 备份重要数据 ```bash # 备份SBOM报告 tar -czf sbom-backup-$(date +%Y%m%d).tar.gz /var/sbom-reports/ # 备份日志 tar -czf sbom-logs-$(date +%Y%m%d).tar.gz /var/log/sbom/ ``` ## 依赖检查工具使用说明 ### 1. 在有网络的环境中 1. 初始化数据库目录: ```bash ./dependencies_check.sh <项目路径> init ``` 2. 让 grype 自动下载数据库(第一次运行时会自动下载): ```bash ./dependencies_check.sh <项目路径> ``` 3. 导出数据库文件: ```bash ./dependencies_check.sh <项目路径> export ``` 这将生成一个类似 `vulnerability-db-20240321.tar.gz` 的文件。 ### 2. 在不通外网的服务器上 1. 初始化数据库目录: ```bash ./dependencies_check.sh <项目路径> init ``` 2. 导入数据库文件: ```bash ./dependencies_check.sh <项目路径> import vulnerability-db.tar.gz ``` 3. 检查数据库状态: ```bash ./dependencies_check.sh <项目路径> check ``` 4. 运行扫描: ```bash ./dependencies_check.sh <项目路径> ``` ### 3. 数据库更新流程 1. 在有网络的环境中: - 使用 `grype db download` 下载最新数据库 - 将数据库打包为 `vulnerability-db.tar.gz` - 将文件复制到不通外网的服务器 2. 在不通外网的服务器上: - 运行 `./dependencies_check.sh <项目路径> import vulnerability-db.tar.gz` 导入新数据库 ### 4. 数据库管理命令说明 - `init`: 初始化数据库目录 - `import`: 导入数据库文件 - `check`: 检查数据库状态和更新时间 ### 5. 注意事项 1. 数据库更新建议: - 建议定期在有网络的环境中下载最新数据库 - 如果发现新的重大漏洞,应立即更新数据库 2. 数据库文件管理: - 建议在文件名中包含日期信息 - 建议保留最近几个版本的数据库文件 - 数据库文件较大,注意磁盘空间管理 3. 错误处理: - 如果数据库导入失败,检查文件完整性 - 如果数据库检查失败,可以重新导入 - 确保有足够的磁盘空间 4. 性能考虑: - 数据库文件较大,导入可能需要一些时间 - 建议在系统负载较低时进行数据库更新 - 确保有足够的磁盘空间和内存