-RPATH 首选项在设置了 SETUID 的可执行文件运行时不起作用

Posted

技术标签:

【中文标题】-RPATH 首选项在设置了 SETUID 的可执行文件运行时不起作用【英文标题】:-RPATH preference not working when executable run with SETUID set 【发布时间】:2021-11-01 02:34:24 【问题描述】:

一点背景:

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

当我使用sudo 命令从命令行运行该可执行文件时,一切正常。

现在,这个可执行文件是来自另一个非 root 进程的 fork/exec,为此我将可执行文件的文件权限 chmod 设置为 4755,以便可执行文件始终以 root 身份运行。

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

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

【问题讨论】:

【参考方案1】:

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

通过dlopen APIs 以编程方式加载dylib,通过硬编码路径。

【讨论】:

以上是关于-RPATH 首选项在设置了 SETUID 的可执行文件运行时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Vue2 element selection组件设置默认选项

linux sudo命令失败 提示sudo:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位

如何在首选项摘要中显示 Android 首选项的当前值?

允许非 root 用户处理.setuid 给某些其他用户

如何在 Android 默认设置中添加应用程序设置(首选项)?

在首选项设置中膨胀布局