【发布时间】:2012-03-03 05:22:37
【问题描述】:
我正在尝试使用 LD_PRELOAD 预加载具有 setuid 权限的应用程序的库。起初尝试LD_PRELOAD,它似乎被setuid二进制文件忽略了,尽管当我与ls、dir等其他人一起尝试时它正在工作。
来自 LD_PRELOAD 的文档:
LD_PRELOAD
A whitespace-separated list of additional, user-specified, ELF shared
libraries to be loaded before all others. This can be used to
selectively override functions in other shared libraries. For set-
user-ID/set-group-ID ELF binaries, only libraries in the standard
search directories that are also set-user-ID will be loaded.
我尝试按照上面的文档将库放在具有 setuid 权限的 /usr/lib、/usr/local/lib 和 /usr/lib64 中,但它似乎仍然不起作用。如果我在标准目录中有带有 setuid 的库的情况下不给 LD_PRELOAD 一个路径,它似乎无法找到该库。如果我给它路径,它不会做任何事情。
setuid 二进制文件是在非 root 用户 shell 中运行的 root 权限二进制文件。有什么想法吗?不确定我是否缺少路径、环境变量,或者我误解了上面的文档。
编辑:请求的权限是:
图书馆:
-rwsr-sr-x 1 root root 72580 2012-02-10 07:51
应用:
-rwsr-xr-x 1 root root 137517601 2012-02-10
env | grep LD
LD_LIBRARY_PATH=/usr/lib (I added this manually myself, usually LD_LIBRARY_PATH is empty)
【问题讨论】:
-
你在运行 SELinux 吗?
-
是的,Suse enterprise 11.1 是我目前正在运行的......
-
终于成功了。在整套测试中,我一定搞砸了。将它放在具有正确权限(setuid)的 lib64 中并且不提供 LD_PRELOAD 的路径是有效的。感谢大家的帮助!
标签: linux setuid ld-preload