考虑一个可执行文件 A.bin 使用 libY.so 和 libZ.so 的场景。Ac、Yc 和 Zc 都是用 CZc 编写的,Yc 被编译成各自的 .so 文件。
这是文件的目录结构
$home/bin/A.bin $home/lib/libY.so $home/lib/libZ.so
当我以普通用户身份运行 A.bin 时,A.bin 按预期正常运行。注意:$LD_LIBRARY_PATH 包含 $home/lib
我在 Ac 中更改了一些代码,添加了一些需要管理员权限的功能(例如绑定到小于 1000 的端口)。我将 A.bin、libY.so 和 libZ.so 的 setuid 位设置为 rwsrwsrws,并将文件的所有权更改为 root。当我尝试运行 A.bin 时,出现以下错误
ld.so.1:A.bin:致命:libY.so:打开失败:没有这样的文件或目录被杀死
当我从所有这些文件中删除 setuid 权限时,二进制文件会运行,但功能会在需要 root 权限的地方失败。
如何克服这个问题?
编辑:操作系统是 Solaris 5.10