Mar*_*obo 9 linux setuid ld-preload
我试图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.
Run Code Online (Sandbox Code Playgroud)
我尝试将库放入/usr/lib,/usr/local/lib并/usr/lib64使用setuid权限,如上面的这个文档,但它似乎仍然没有工作.如果我LD_PRELOAD在标准dirs中使用setuid的情况下没有给出路径,那么它似乎无法找到库.如果我给它路径,它什么都不做.
setuid二进制文件是在非root用户shell中运行的root权限二进制文件.有什么想法吗?不确定我是否缺少路径,环境变量,或者我误解了上面的文档.
编辑:请求的权限是:
图书馆:
-rwsr-sr-x 1 root root 72580 2012-02-10 07:51
Run Code Online (Sandbox Code Playgroud)
应用程序:
-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)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 SELinux,这可能是因为它。glibc 支持的 ELF 辅助向量之一是AT_SECURE. 这个特定的参数(默认为 0 或 1)告诉 ELF 动态链接器取消设置被认为对您的系统有潜在危害的各种环境变量。其中之一是LD_PRELOAD。通常,在调用 setuid/setgid 应用程序时会完成此环境清理工作(以防止出现明显的漏洞)。SELinux的也增强此卫生每当应用程序被(比如触发SELinux中域中过渡sysadm_t到mozilla_t通过一个二进制标记moz,或其他); SELinuxAT_SECURE为加载的应用程序设置标志(在示例中为 mozilla/firefox)。
该noatsecure权限禁用特定转换的环境卫生活动。您可以通过以下 allow 语句执行此操作(因为它适用于上面的示例):
allow sysadm_t mozilla_t:process { noatsecure };
Run Code Online (Sandbox Code Playgroud)
Chr*_*lan -1
像这样安装你的库:
确保 LD_PRELOAD 已导出到您的环境
$ export LD_PRELOAD=/usr/lib/yourlib.so
$ env | grep LD_PRELOAD # verify
Run Code Online (Sandbox Code Playgroud)
然后运行你的程序。