我们使用RPM软件包在我们客户的环境中部署我们的产品。为了使RPM完全独立,我们“个性化”RPM以适应特定客户的环境。这样,客户只需要安装RPM而无需遵循任何向导来编辑配置文件。
我的问题如下: 我们在个性化之前签署RPM包。个性化过程涉及将信息附加到RPM文件(无需真正添加RPM标头,只需附加原始数据)。这种修改(自然地)打破了包的签名。
我正在寻找的是让我在不破坏签名的情况下修改文件的技巧。
这是我到目前为止所尝试的内容:
请注意,我知道签名应该阻止修改文件的内容(它的行为符合预期)。但是,我真的不想修改RPM 数据,只需在文件中包含额外的信息。
有什么想法吗?
谢谢!
答案 0 :(得分:3)
第五种选择是制作一个包含您的更改并取决于签名包的包。是否签署您的包当然取决于它的分发方式。
如果您的软件包修改了原始RPM中的文件,您可以通过使%pre
和%preun
scriptlet将原始文件重命名为备份版本并添加一个来解决此问题(文件名的使用冲突)。替换的符号链接。这确实会干扰验证原始包装内容,但您的修改应该是您可以根据具体情况进行验证的。
答案 1 :(得分:2)
如果你真的必须在保留现有签名的同时修改* .rpm,那么在签名标题中添加标签,最好使用十进制~275到999之间的标签号。两个现有的签名明文(仅限标题和标题+有效负载)将不受签名标题中其他标记/数据的影响。
请注意,最新版本的RPM已被强制显式枚举标记,类型和数据,以防止通过模糊测试发现的段错误。但即使在这种情况下,也有一个填充标记(来自内存的0x3fffffff)可以填充其他数据。再次--iirc - 最新版本的rpm也验证填充是全部0x00所以警告。
与此同时,您还没有描述“个性化”是什么,并且在安装软件包时,将丢弃添加到签名标头的任何标签。另请注意,在* .rpm中重写签名头的代码有点棘手,因为填充以确保签名头后面的元数据头是8字节对齐的。
我建议你会发现包含“个性化”的附加文件是一种更好的工程方法。黑客艺术知道何时停止; - )
答案 2 :(得分:1)
在个性化发生后签署包裹 - 也是 不可扩展,因为这意味着我们需要为每个包签署包 客户而不是一次。
为什么这不能扩展?仅仅因为rpmsign想要你输入密码?看看obs-sign https://en.opensuse.org/openSUSE:Build_Service_Signer (可在Suse,Fedora和Epel中获得)。它能够自动进行签名并保证其安全。