- 当设置了 SETUID 的可执行 运行 时,RPATH 首选项不起作用

-RPATH preference not working when executable run with SETUID set

一点背景知识:

我有一个需要 运行 管理员权限的可执行文件。此可执行文件还对自定义动态库具有 运行 时间依赖性。该动态库必须从自定义路径加载(而不是从 /usr/lib 加载,因为此可执行文件的类似旧版本存在于其他库可能引用的位置)可执行文件指的是设置 -RPATH 编译可执行文件时。

当我 运行 使用 sudo 命令从命令行执行该可执行文件时,一切都按预期正常工作。

现在,这个可执行文件是来自另一个非根进程的fork/exec,为此我正在将可执行文件的文件权限chmod设置为4755,这样可执行文件总是 运行 作为 root。

现在的问题是,当我将文件权限 chmod 设置为 4755 时,系统不再尊重 -RPATH,我的可执行文件默认为搜索对于 /usr/lib 的 lib 路径,在 -RPATH.

问题:如何强制我的可执行文件更喜欢 -RPATH 而不是 /usr/lib,而不管我的文件权限(或至少 chmod 4755)是什么?

以防万一有人遇到这个问题,这就是我为解决这个问题所做的工作。

只需对路径进行硬编码,dlopen APIs 以编程方式加载 dylib。