我想在Linux中将二进制文件的执行限制为仅由我自己编译的二进制文件。假设我的系统有gcc版本4.8.4,我想允许执行仅由我的系统上安装的gcc编译的ELF二进制文件。任何甚至由相同版本4.8.4编译的ELF都不应在我的系统上执行。
.comment
部分包含用于编译ELF的编译器的版本和名称。如果是,我们可以使用这些信息吗?
任何想法和建议都非常感谢
答案 0 :(得分:0)
我想在Linux中将二进制文件的执行限制为仅由我自己编译的那些。
假设你成功了。你做意识到你的shell,你的gcc
,你的ls
都将立即停止工作(除非你自己构建了之前转向限制)。
但是假设您构建了整个系统,包括编译器,汇编器和链接器。在这种情况下,您需要修改链接器和内核,以便链接器签署它链接的二进制文件,并且内核验证是否存在有效签名,如果签名无效,则拒绝运行二进制文件。您可以阅读有关代码签名here的更多信息。
.comment
部分包含用于编译ELF的编译器的版本和名称。
通常情况确实如此。但是,向已经链接的可执行文件添加具有任意内容的.comment
部分是微不足道的,因此您不能将限制基于.comment
的内容(除非您希望您的限制对于旁路)。
可以在不改变链接器的情况下使我的生活更轻松吗?
是
我相信你是以错误的方式思考你的问题(在思考解决方案的实质之前考虑机制)。
假设您确实想要进行代码签名,则需要为每个二进制文件生成签名,然后:
foo.signature
在foo
相同的目录中一样简单。或者您可以使用objcpy
来创建二进制文件的签名部分(如果您移动二进制文件,则更方便)。