我有一些动态链接的库,我想保护他们免受未经授权的用户的侵害。我无法使用组/ ACL来执行此操作。我有一个许可用户的列表,并且可以在运行时获得关于给定的uid是否被授权的是/否。 Linux和GCC / Clang,如果重要的话。
答案 0 :(得分:0)
这需要一些额外的工作,但它是可行的,仍然会被认为是动态的:
使您的主程序setuid-root(或授予您的程序CAP_DAC_OVERRIDE功能 - 请参阅capabilities(7)
)
执行程序时,请执行运行时授权检查
如果用户已获得授权,请使用dlopen
(以及root / DAC_OVERRIDE)加载库。然后,您需要使用dlsym
来查找/解析库中所需的符号。
删除功能和/或恢复UID以获得最佳安全性。
(尽管如此,使用组ID要简单得多。您可以简单地将组成员资格授予那些被认为是授权的用户。)