- 当设置了 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。
一点背景知识:
我有一个需要 运行 管理员权限的可执行文件。此可执行文件还对自定义动态库具有 运行 时间依赖性。该动态库必须从自定义路径加载(而不是从 /usr/lib
加载,因为此可执行文件的类似旧版本存在于其他库可能引用的位置)可执行文件指的是设置 -RPATH
编译可执行文件时。
当我 运行 使用 sudo
命令从命令行执行该可执行文件时,一切都按预期正常工作。
现在,这个可执行文件是来自另一个非根进程的fork/exec
,为此我正在将可执行文件的文件权限chmod
设置为4755
,这样可执行文件总是 运行 作为 root。
现在的问题是,当我将文件权限 chmod
设置为 4755
时,系统不再尊重 -RPATH
,我的可执行文件默认为搜索对于 /usr/lib
的 lib 路径,在 -RPATH
.
问题:如何强制我的可执行文件更喜欢 -RPATH
而不是 /usr/lib
,而不管我的文件权限(或至少 chmod 4755
)是什么?
以防万一有人遇到这个问题,这就是我为解决这个问题所做的工作。
只需对路径进行硬编码,dlopen APIs 以编程方式加载 dylib。