我想将Linux中的二进制文件的执行限制为仅由我自己编译的二进制文件。假设我的系统具有4.8.4版本的gcc,我想允许执行仅由我的系统安装的gcc编译的ELF二进制文件。任何由相同版本4.8.4编译的ELF都不应该在我的系统上执行。由特定编译器创建的二进制文件的执行
.comment
部分包含用于编译ELF的编译器的版本和名称。如果是,我们可以使用这些信息吗? 任何想法和建议,非常感谢
我想将Linux中的二进制文件的执行限制为仅由我自己编译的二进制文件。假设我的系统具有4.8.4版本的gcc,我想允许执行仅由我的系统安装的gcc编译的ELF二进制文件。任何由相同版本4.8.4编译的ELF都不应该在我的系统上执行。由特定编译器创建的二进制文件的执行
.comment
部分包含用于编译ELF的编译器的版本和名称。如果是,我们可以使用这些信息吗? 任何想法和建议,非常感谢
我想限制在Linux中的二进制文件的执行只有我自己编译的。
假设你成功了。你做认识到你的外壳,你的gcc
,你的ls
都将立即停止工作(除非你已经建立它们全部自己之前打开限制)。
但假设你已经构建了整个系统,包括编译器,汇编器和链接器。在这种情况下,您需要修改链接器和内核,以便链接器签署它所链接的二进制文件,并且您的内核将验证是否存在有效签名,并且如果签名无效,则拒绝运行该二进制文件。您可以阅读更多关于代码签名here的信息。
.comment
部分包含用于编译ELF的编译器的版本和名称。
通常情况下,然而,将含有任意内容的.comment
部分添加到已链接的可执行文件中并不重要,因此,您不能将限制条件限制在.comment
的内容上(除非您希望将限制忽略)。
objcopy可以在不改变链接器的情况下缓解我的生活吗?
是的。
我相信你正在以错误的方式思考你的问题(在思考解决方案的实质之前考虑力学)。
假设你想要做的代码签名,你需要生成每个二进制签名,然后:
foo.signature
与foo
所在的目录相同,只要您希望运行每个二进制文件。或者,您可以使用objcpy
来制作二进制文件的签名部分(如果您移动二进制文件,则更方便)。
是的我在读完一些东西后也会这么想。 objcopy可以在不改变链接器的情况下缓解我的生活吗?比方说,我可以添加一些部分的字符串和调整内核(在哪里和多少?)匹配字符串执行之前 – shami
@shami我已经更新了答案。 –