- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
导读
rpmsign是 RPM 软件包体系中的签名管理工具,负责为 RPM 包添加、验证、删除和重新生成数字签名,是保障软件包来源可信与内容完整性的关键一环。本文以 linux-command 开源仓库中的 rpmsign.md 为骨架,结合仓库内 rpm.md、gpg.md、rpmbuild.md 等相关命令文档,完整讲解 rpmsign 的语法、全部选项、典型工作流程与安全实践,帮助读者掌握从生成密钥、签名到校验的完整链路。
rpmsign 是什么:RPM 软件包的签名管理工具
rpmsign 命令是使用 RPM 软件包的签名管理工具。在 RPM 软件包体系中,它承担着"签名生命周期管理"的职责——与 rpm(软件包管理)、rpmbuild(软件包构建)相配合:
rpmbuild负责把源码或二进制内容构建成 RPM 包(-ba构建二进制包与源码包、-bb构建二进制包,构建产物通常位于/usr/src/redhat/RPMS/与/usr/src/redhat/SRPMS/,参见 rpmbuild.md);rpmsign负责在构建完成后对 RPM 包施加或移除签名,使其具备可验证的出处;rpm负责日常的安装、升级、查询与签名校验(如rpm -K检查软件包签名和校验和)。
三者共同构成了 RPM 软件包从构建、签名到验证的完整链条。
语法
rpmsign(选项)其中"选项"决定本次操作的动作类型(添加、验证、删除、导入或重签)。rpmsign 通常与一个或多个 RPM 软件包文件名配合使用,例如rpmsign --addsign package.rpm。
选项详解
rpmsign 的全部选项如下:
--addsign:为自动软件包添加签名; --checksig:验证软件包签名; --delsign:删除软件包签名; --import:导入公钥; --resign:重新签名软件包; --nodigest:不验证软件包摘要; --nosignature:不验证软件包签名。各选项的实战含义与典型用途如下。
--addsign:为软件包添加签名
为指定的 RPM 软件包添加(追加)数字签名。该选项适用于首次签名,通常配合 GPG 私钥使用,签名过程会提示输入私钥的 passphrase。它不会移除包上已有的其他签名,而是在现有签名集合上追加新的签名。
--checksig:验证软件包签名
验证指定 RPM 软件包的签名与摘要是否有效,是接收第三方软件包时的首选自检手段。验证时需要本地已经拥有对应的公钥(可通过--import导入)。该选项与 rpm.md 中提到的rpm -K(检查软件包签名和校验和)目的一致,两者可互为补充。
--delsign:删除软件包签名
从软件包中移除已有签名。典型场景包括:
- 软件包被重新打包或内容被修改后,旧签名已经失效,需要先删除再重签;
- 需要以无签名状态重新分发软件包。
--import:导入公钥
导入用于验证签名的公钥。RPM 生态中常见做法是先将发行方 GPG 公钥导入系统(例如导入到 RPM 数据库中),后续的--checksig或rpm -K校验才能通过。公钥的管理与生成细节可参考仓库内的 gpg.md:GPG 支持--generate-key/--quick-generate-key生成密钥对、--export导出公钥、--import导入公钥,且支持 RSA、DSA、ECDSA、EDDSA 等多种公钥算法与 SHA1~SHA512 的哈希算法。
--resign:重新签名软件包
对已有签名的软件包进行重新签名,通常用于以下情况:
- 签名密钥更换(轮换)后,用新密钥覆盖旧签名;
- 包内容更新后同步刷新签名,保证签名与内容一致;
- 需要统一使用同一把发布密钥管理多个软件包。
--nodigest:不验证软件包摘要
在进行签名校验(--checksig)时跳过对软件包摘要(digest)的验证。摘要用于校验包内容是否被篡改,正常情况下不应省略;仅在排查特定问题(如包的摘要格式不兼容)时才考虑使用。
--nosignature:不验证软件包签名
在进行签名校验时跳过签名验证,只关注其他检查项。--nodigest与--nosignature组合使用,等价于"完全跳过完整性检查",应仅用于调试或对来源绝对可信的内部包。
实战流程:从密钥生成到签名校验的完整链路
结合仓库内 gpg.md 与 rpm.md,一套完整的 RPM 包签名工作流如下。
第 1 步:生成 GPG 密钥对
签名的基础是 GPG 密钥对,私钥用于签名,公钥用于分发验证:
gpg --generate-key # 交互式生成密钥对(也可用 --quick-generate-key 快速生成) gpg --list-keys # 查看公钥 gpg --list-secret-keys # 查看私钥 gpg --export -a > mykey.asc # 导出 ASCII 格式的公钥,用于分发给用户验证第 2 步:为 RPM 包添加签名
rpmsign --addsign your-package.rpm执行时会使用本地 GPG 私钥对包进行签名,并提示输入私钥的 passphrase。签名完成后,可以再次使用rpm -K your-package.rpm(参见 rpm.md)确认签名已生效。
第 3 步:分发公钥并验证签名
接收方需要先导入发行方的公钥,再对包做校验:
# 接收方导入公钥 rpmsign --import mykey.asc # 验证软件包签名与摘要 rpmsign --checksig your-package.rpm # 或使用 rpm 自带校验 rpm -K your-package.rpm校验通过意味着:包确实由持有对应私钥的一方签名,且包内容未被篡改。若需要"只看签名、不查摘要"或"只看摘要、不查签名",可分别追加--nosignature或--nodigest。
第 4 步:密钥更换时的重新签名
当发布密钥轮换或包内容更新后,需要先移除旧签名再用新密钥重签:
rpmsign --delsign your-package.rpm rpmsign --resign your-package.rpm与仓库其他命令的协同:完整的 RPM 信任链
rpmsign 并非孤立存在,linux-command 仓库中多个命令文档共同勾勒出 RPM 体系的信任模型:
- rpm.md:日常的包管理入口,其中的
-K(检查软件包签名和校验和)、-V(验证软件包或文件的完整性)与 rpmsign 的签名校验目标一致;仓库文档还总结了 RPM 校验字段SM5DLUGT(size、modified、md5、device、link 路径、user、group、time),可作为理解"摘要校验什么"的补充; - rpmbuild.md:包的构建环节,构建出的二进制包(
/usr/src/redhat/RPMS/下)和源码包(/usr/src/redhat/SRPMS/下)正是 rpmsign 的签名对象; - gpg.md:签名所依赖的密钥体系,涵盖密钥生成、导出、导入、签名、验签等全部底层操作;
- reposync.md:仓库同步时的
--gpgcheck选项会在下载后删除 GPG 签名检查失败的包,说明签名校验已深度嵌入到 yum 仓库管理流程中,是软件分发可信度的最后一道防线。
使用建议与注意事项
- 先建密钥,再谈签名:签名依赖 GPG 私钥,务必妥善保管私钥并设置强 passphrase,公钥则通过官方渠道(如官网、邮件等)分发给用户;
- 校验优先:对来源不明的 RPM 包,务必先
rpmsign --checksig或rpm -K再安装,--nodigest、--nosignature仅限调试场景,切勿在生产环境默认跳过校验; - 密钥轮换要重签:更换签名密钥后记得执行
--delsign+--resign,避免旧签名失效导致用户无法安装; - 与仓库流程结合:在自建 yum 仓库时,可配合 reposync.md 的
--gpgcheck及 yum.md 的签名检查策略,将签名校验固化到自动化分发流程中。
通过上述步骤,开发者可以完整掌握"构建 → 签名 → 分发 → 校验 → 轮换"的 RPM 软件包签名生命周期,为自建软件源或分发内部 RPM 包提供可靠的来源可信与内容完整性保障。
- 文档
- 教程
【免费下载链接】linux-command
Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux
相关推荐
linux-command 命令详解:dpkg-divert —— Debian 软件包文件转向(diversion)管理实战
linux command 命令详解:dpkg divert —— Debian 软件包文件转向(diversion)管理实战 dpkg divert 是 De
文档教程Linux rpm 命令详解:RPM 软件包安装、卸载、查询与验证实战指南
Linux rpm 命令详解:RPM 软件包安装、卸载、查询与验证实战指南 本文是 Linux 命令速查手册( linux command https://li
文档教程深入解析WinRing0:Windows硬件访问的终极解决方案
深入解析WinRing0:Windows硬件访问的终极解决方案 WinRing0是一个专业的 Windows硬件访问库 ,为开发者提供了直接访问底层硬件的强大能
驱动开发系统编程硬件开发
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考