C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了将setuid位置1后,程序无法加载大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
考虑这种情况,其中可执行文件A.bin使用libY.so和libZ.so. A.c,Y.c和Z.c都是用C语言编写的.
Z.c和Y.c被编译成相应的.so文件.

这是文件的目录结构

$HOME /斌/ A.bin
$HOME / lib目录/ libY.so
$HOME / lib目录/ libZ.so

当我以普通用户身份运行A.bin时,A.bin按预期正常运行.
注意:$LD_LIBRARY_PATH包含$home / lib

我在A.c中更改了一些代码,添加了一些需要管理员权限的功能(比如绑定到小于1000的端口).
我将A.bin,libY.so和libZ.so的setuid位设置为rwsrwsrws,并将文件的所有权更改为root.当我尝试运行A.bin时,我收到以下错误

ld.so.1:A.bin:致命:libY.so:打开失败:没有这样的文件或目录
杀害

当我刚从所有这些文件删除setuid权限时,除了功能失败之外,二进制运行它需要root权限.

如何克服这个问题?

编辑:操作系统是Solaris 5.10

解决方法

正如AProgrammer所说,在执行setuid程序时,$LD_LIBRARY_PATH被忽略.因此,路径必须在链接时使用此标志在可执行文件本身中进行硬编码

gcc -R $home / lib

-R标志将运行时搜索路径列表构建为可执行文件.

参考:http://www.justskins.com/forums/loading-shared-libraries-from-a-setuid-program-116597.html

大佬总结

以上是大佬教程为你收集整理的将setuid位置1后,程序无法加载全部内容,希望文章能够帮你解决将setuid位置1后,程序无法加载所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: