![如何向具有某项功能运行的可执行文件添加库搜索路径?](https://linux22.com/image/754939/%E5%A6%82%E4%BD%95%E5%90%91%E5%85%B7%E6%9C%89%E6%9F%90%E9%A1%B9%E5%8A%9F%E8%83%BD%E8%BF%90%E8%A1%8C%E7%9A%84%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E6%B7%BB%E5%8A%A0%E5%BA%93%E6%90%9C%E7%B4%A2%E8%B7%AF%E5%BE%84%EF%BC%9F.png)
我有一个应用程序需要使用该CAP_NET_BIND_SERVICE
功能运行,以便它可以打开低端口(对于 TCP/Modbus 服务器,端口号为 502)。它捆绑了一组需要动态链接的 .so 文件,包括固定版本的系统库(libxml.so 和 libz.so)。通常,我会设置LD_LIBRARY_PATH
,但是当可执行文件具有功能时,环境变量将被忽略(请参阅“安全执行模式”中的ld.so(8))。
我尝试了以下方法:
- 将搜索路径添加到
/etc/ld.so.conf.d
目录会破坏任何依赖于系统库的内容,这些系统库现在已被供应商库所掩盖 - 根据我们的安全策略,不允许设置防火墙规则以将端口 502 重定向到高端口、更改配置的侦听端口以及禁用该功能*
- 我们与供应商签订的许可证不允许我们修改其编译的可执行文件,因此
chrpath
我们别无选择 - 出于安全原因,不建议以 root 身份运行,并且会生成 root 拥有的日志文件(我们希望避免这种情况)
操作系统是 RHEL 7,作为具有自定义单元文件的 systemd 服务运行。
有没有办法只为这个特定的应用程序添加库搜索路径?
*我无权更改或破例