c++ - 我可以在不授予库读取权限的情况下动态链接吗?

标签 c++ linux

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

最佳答案

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

  1. 将您的主程序设为 setuid-root(或向您的程序授予 CAP_DAC_OVERRIDE 功能 - 请参阅功能(7))

  2. 当你的程序执行时,进行运行时授权检查

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

  4. 放弃该功能和/或恢复 UID 以获得最佳安全性。

(话虽如此,使用组 ID 要简单得多。您只需将组成员身份授予那些被视为已授权的用户即可。)

关于c++ - 我可以在不授予库读取权限的情况下动态链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31345151/

相关文章:

c++ - 将 boost::gregorian::date_duration 转换为 double

linux - 获取时区日期命令行linux

python - 在 Linux 中创建独立于系统的最小 Python 足迹

c++ - 使用 decltype(this) 获取函数引用

c++ - 初学者模板编译错误 - 无法将函数作为 arg 传递

c++ - 不允许将强类型枚举用作相同基础类型的参数?

c++ - 求解平方根反比

python - 如何将文件夹中的所有文件类型更改为特定类型?

Linux 跟踪/trace_pipe 文件不可读 (debugfs)

linux - 将 hazelcast 管理中心警报与 Pagerduty 集成