我试图使用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.
我尝试按照上面这份文档的指示,将该库放置在 /usr/lib
、/usr/local/lib
和 /usr/lib64
目录下,并且使用 setuid 权限,但似乎仍然不起作用。如果我没有在 LD_PRELOAD
中给出路径,在标准目录中使用 setuid 权限放置该库,则无法找到该库。如果我给它提供路径,则没有任何作用。
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)