我有一些动态链接库,我想保护它们免受未经授权的用户的侵害。我无法使用组/ACL 来执行此操作。我有一个许可用户的列表,并且可以在运行时得到关于给定 uid 是否被授权的"is"/“否”。 Linux 和 GCC/Clang,如果重要的话。
最佳答案
这需要一些额外的工作,但它是可行的,并且仍然被认为是动态的:
将您的主程序设为 setuid-root(或向您的程序授予 CAP_DAC_OVERRIDE 功能 - 请参阅
功能(7)
)当你的程序执行时,进行运行时授权检查
如果用户获得授权,请使用 dlopen(以及 root/DAC_OVERRIDE)加载库。然后,您需要使用
dlsym
从库中查找/解析您需要的符号。放弃该功能和/或恢复 UID 以获得最佳安全性。
(话虽如此,使用组 ID 要简单得多。您只需将组成员身份授予那些被视为已授权的用户即可。)
关于c++ - 我可以在不授予库读取权限的情况下动态链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31345151/