设置 setuid 位后程序无法加载

发布于 2024-08-02 02:18:52 字数 598 浏览 7 评论 0原文

考虑这种情况,其中可执行文件 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: fatal: libY.so: open failed: No such file or directory 。

当我从所有这些文件中删除 setuid 权限时,二进制文件就会运行,但需要 root 权限的功能会失败

如何克服这个问题?

编辑:操作系统是Solaris 5.10

Consider this scenario in which an executable A.bin uses libY.so and libZ.so. A.c, Y.c and Z.c are all written in C.
Z.c and Y.c are compiled into respective .so files.

This is the directory structure of the files

$home/bin/A.bin
$home/lib/libY.so
$home/lib/libZ.so

When I run A.bin as normal user, A.bin runs normally as expected.
Note: $LD_LIBRARY_PATH contains $home/lib

I changed some code in A.c adding some functionality which needs admin privileges(like binding to a port less than 1000).
I set the setuid bit for A.bin, libY.so and libZ.so to rwsrwsrws, and change the ownership of the files to root. When I try to run A.bin, I get the following error

ld.so.1: A.bin: fatal: libY.so: open failed: No such file or directory
Killed

When I just remove the setuid permission from all those files, then the binary runs except for the functionality fails where it needs root privileges.

How to overcome this problem ?

Edit: The OS is Solaris 5.10

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

〃安静 2024-08-09 02:18:53

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

因此,在链接gcc -R $home/lib

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

As AProgrammer said, while executing setuid programs, $LD_LIBRARY_PATH is ignored. Hence the path has to be hardcoded in the executable itself using this flag while linking

gcc -R $home/lib

The -R flag builds runtime search path list into executable.

计㈡愣 2024-08-09 02:18:53

在某些 Unix 变体中,suid 可执行文件具有一些安全功能,例如忽略 LD_LIBRARY_PATH、检查可执行文件和使用的共享库的所有权和访问权限,...我不记得 Solaris 的情况,但你也许应该检查一下。

In some Unix variants, suid executables have some security features like ignoring LD_LIBRARY_PATH, checking ownership and access rights on the executable and used shared libraries,... I don't remember the case of Solaris, but you should probably check that.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文