将setuid位置1后,程序无法加载
考虑这种情况,其中可执行文件A.bin使用libY.so和libZ.so. A.c,Y.c和Z.c都是用C语言编写的.
Z.c和Y.c被编译成相应的.so文件. 这是文件的目录结构 $HOME /斌/ A.bin 当我以普通用户身份运行A.bin时,A.bin按预期正常运行. 我在A.c中更改了一些代码,添加了一些需要管理员权限的功能(比如绑定到小于1000的端口). 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |