我可以动态链接而不给图书馆提供读取权限吗?

时间:2015-07-10 15:52:10

标签: c++ linux

我有一些动态链接的库,我想保护他们免受未经授权的用户的侵害。我无法使用组/ ACL来执行此操作。我有一个许可用户的列表,并且可以在运行时获得关于给定的uid是否被授权的是/否。 Linux和GCC / Clang,如果重要的话。

1 个答案:

答案 0 :(得分:0)

这需要一些额外的工作,但它是可行的,仍然会被认为是动态的:

  1. 使您的主程序setuid-root(或授予您的程序CAP_DAC_OVERRIDE功能 - 请参阅capabilities(7)

  2. 执行程序时,请执行运行时授权检查

  3. 如果用户已获得授权,请使用dlopen(以及root / DAC_OVERRIDE)加载库。然后,您需要使用dlsym来查找/解析库中所需的符号。

  4. 删除功能和/或恢复UID以获得最佳安全性。

  5. (尽管如此,使用组ID要简单得多。您可以简单地将组成员资格授予那些被认为是授权的用户。)