(注意:下面的二进制文件和二进制文件以及库的名称都是混淆的,以保护无辜。;-)该应用程序是NDA专有的,但行为可能不依赖于它。)
我有一个Linux二进制文件,在运行时会输出以下错误:
binary:加载共享库时出错:libshared.so:无法打开共享对象文件:没有这样的文件或目录
由于libshared.so位于LD_LIBRARY_PATH中,因此自身令人困惑。然而,
运行ldd binary
时找到了正确的库(即ldd输出指向文件位置)
运行strace binary
时找到了正确的库,以便程序设法打印其使用信息!
我从未见过一个应用程序,当它自行运行而不是在strace中运行时表现不同,但我想也许其他人已经看到过这种情况发生之前?有任何想法如何解决这个问题?
我没有源,所以我无法重建。在strace下运行应用程序可能不是首发。操作系统是RHEL 6.2。
答案 0 :(得分:6)
(老问题,但希望这会对其他人有帮助)
在新的Linux安装中,标准系统运行时链接程序不会将LD_LIBRARY_PATH用于设置了SUID的程序。似乎strace,gdb和朋友的工作方式不同,做使用LD_LIBRARY_PATH。
对于suid程序,必须在系统库缓存中找到所有库。使用
检查(以root用户身份)是否存在“缺失”库ldconfig -p | grep <my_library_name>
并且,如果缺少任何内容,请根据需要将其添加到/etc/ld.so.conf或ld.so.conf.d /中的新文件中,然后使用
重建ldconfig -v
当然,如果不需要,则删除SUID位。