【问题标题】:rpmbuild and signed executable filesrpmbuild 和签名的可执行文件
【发布时间】:2014-12-24 02:36:16
【问题描述】:

在我正在处理的项目中,我需要使用私钥从我的一个输出可执行 (elf) 文件生成签名(签名形成 rpm 中的文件之一,执行此操作的私钥永远不会离开构建机器)。目前这是在我的 makefile 中完成的,作为 rpm 系统之外的“make”、“make install”过程的一部分。

但是,似乎不是使用 rpmbuild 制作 rpm,在 %build 和 %install 之后的某个时间点,它会进一步修改我的可执行文件(似乎出于某种原因从 .strtab 和 .symtab 中删除了一些东西)。这意味着稍后在安装 rpm 后,由于可执行文件的更改,我正在与之集成的其他软件拒绝我的签名数据...

有什么方法可以阻止 rpmbuild 修改我的文件,或者至少有什么方法可以在它进行任何此类更改之后移动我的 %build 和 %install 的一部分(这样我就可以重新创建签名文件)。

【问题讨论】:

  • 这可能是调试符号剥离,您可以禁用它(尽管可能不是基于每个文件)。我不记得什么方法是临时的,但我可以稍后再看。或者,如果您预先剥离二进制文件(假设您不需要该信息),您可能能够阻止 rpm 剥离实际修改您的二进制文件,尽管它尝试这样做。

标签: linux makefile rpm rpmbuild rpm-spec


【解决方案1】:

如果您禁用 -debuginfo 包构建,我相信 RPM 将停止剥离包中的二进制文件。

您可以通过将 %debug_package 宏设置为 %{nil} 来做到这一点。

在 rpmmacros 文件中(我相信默认搜索$HOME/.rpmmacros)下面的行应该这样做。

%debug_package %{nil}

也可以在命令行上使用-D'debug_package %{nil}' 执行此操作,但我还没有测试过。

【讨论】:

    【解决方案2】:

    您可以考虑对 buildid 进行签名(这是在 ELF 可执行文件上生成的摘要,对于剥离是不变的)。 buildid 上的签名(可以验证)与任何其他签名方案一样安全,只是明文不同。

    【讨论】:

    • 很遗憾这不是我的签名方案。
    猜你喜欢
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多