You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SUID为root的程序中$ORIGIN被忽略致共享库找不到的解决办法

问题:SUID为root的程序无法通过$ORIGIN加载共享库

环境与现象

在树莓派Raspbian系统中,存在一个SUID设为root的程序my_app,权限信息如下:

-rwsr-xr-x 1 root     user 508K May 11 13:55 my_app

程序配套的共享库libMyLib.so位于非标准部署目录/opt/my_project/libs/下,目录结构:

├── my_app
├── libs
│   └── libMyLib.so

通过chrpath -l my_app检查,二进制文件已正确配置RUNPATH:

my_app: RUNPATH=/usr/local/qt6/lib/:$ORIGIN/libs

但运行程序时提示找不到共享库:

./my_app: error while loading shared libraries: libMyLib.so: cannot open shared object file: No such file or directory

测试得到以下结论:

  • 移除SUID位后,库能被正常找到,但程序因权限不足无法正常运行
  • 用ldd my_app检查时,库路径显示正确:
libMyLib.so => /opt/my_project/./libs/libMyLib.so (0x76e84000)
  • 将RUNPATH中的$ORIGIN替换为绝对路径(通过chrpath -r命令)后,程序可正常运行,推测SUID为root时,含$ORIGIN的RUNPATH路径被系统忽略。

疑问

查阅ld.so手册可知,安全执行模式下LD_LIBRARY_PATH会被忽略,但未找到关于$ORIGIN的相关安全限制说明。希望了解除使用chrpath -r设置绝对路径之外的其他可行解决方法。

内容的提问来源于stack exchange,提问作者vazlsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:12:14