非root用户运行Mellanox libvma:解决LD_LIBRARY_PATH失效问题
问题:setcap/setuid权限导致LD_LIBRARY_PATH失效,如何加载路径不固定的自研共享库?
在使用Mellanox内核旁路库libvma运行项目时,按照官方指南完成以下操作后:
sudo chmod u+s /usr/lib64/libvma*sudo setcap cap_net_raw,cap_net_admin+ep my_programLD_PRELOAD=libvma.so my_program
LD链接器进入「安全执行」模式,完全忽略LD_LIBRARY_PATH环境变量。但项目依赖多个自研共享库(如my_program依赖libmy-core.so、libmy-network.so、libmy-util.so),缺少该环境变量会触发./my_program: error while loading shared libraries: ....错误。
已尝试的方案:
- 编译时设置rpath:但由于编译后的.so需要部署到路径不固定的不同账户下,该方案效果不佳,仅能通过在rpath中添加相对路径「.」临时解决。
- 包装脚本:子进程无法继承父脚本设置的权限,即使已授予+epi组权限。
请问是否有更优方法绕过该安全限制?
内容的提问来源于stack exchange,提问作者KKK
相关产品推荐
相关产品推荐

