gpt4 book ai didi

c - LD_PRELOAD 在每次登录服务器时

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:27 27 4
gpt4 key购买 nike

我需要在 Linux 中记录所有终端命令。我在 C 中找到了正确工作的库,但它仅在我运行 LD_PRELOAD=/usr/local/bin/bashpreload.so/bin/bash 时有效:

# ldd /bin/bash
linux-vdso.so.1 => (0x00007ffef59f8000)
/usr/local/bin/bashpreload.so (0x00007fe691323000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fe691102000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fe690efe000)
libc.so.6 => /lib64/libc.so.6 (0x00007fe690b6a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe691524000)

如果我在这之后再次登录系统,我将看不到带ldd的库:

[root@XXX ~]# LD_PRELOAD=/usr/local/bin/bashpreload.so /bin/bash
[root@XXX ~]# ldd /bin/bash
linux-vdso.so.1 => (0x00007ffe481f6000)
/usr/local/bin/bashpreload.so (0x00007f3f1b808000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f3f1b5e7000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3f1b3e3000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3f1b04f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3f1ba09000)
[root@XXX ~]# exit
[root@XXX ~]# logout
Connection to XXX closed.
[sahaquiel@sahaquiel-PC ~]$ ssh root@XXX
root@XXX's password:
Last login: Tue Dec 19 11:28:22 2017 from YYY
[root@XXX ~]# ldd /bin/bash
linux-vdso.so.1 => (0x00007ffca2f98000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f19a13ff000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f19a11fb000)
libc.so.6 => /lib64/libc.so.6 (0x00007f19a0e67000)
/lib64/ld-linux-x86-64.so.2 (0x00007f19a1620000)

还有一个麻烦:如果我使用这个库,我当前的 PID 会发生变化:

Last login: Tue Dec 19 11:28:54 2017 from YYY
[root@XXX ~]# echo "Library is not uploaded"
Library is not uploaded
[root@XXX ~]# echo $$
4639
[root@XXX ~]# LD_PRELOAD=/usr/local/bin/bashpreload.so /bin/bash
[root@XXX ~]# echo $$
4654
[root@212-24-57-104 ~]# ps awwufx | grep -B5 [4]654
root 1706 0.0 0.0 66256 1192 ? Ss 10:54 0:00 /usr/sbin/sshd
root 4517 0.0 0.0 104636 4644 ? Ss 11:27 0:00 \_ sshd: root@pts/1
root 4519 0.0 0.0 108320 1872 pts/1 Ss+ 11:27 0:00 | \_ -bash
root 4637 0.0 0.0 104636 4624 ? Ss 11:30 0:00 \_ sshd: root@pts/0
root 4639 0.0 0.0 108320 1872 pts/0 Ss 11:30 0:00 | \_ -bash
root 4654 0.0 0.0 110376 1956 pts/0 S 11:31 0:00 | \_ /bin/bash

所以,我需要两件事:

  1. 找到为每个登录用户安静地执行LD_PRELOAD的方法;
  2. 知道为什么在此之后我在子 /bin/bash 进程中工作。

谢谢!

最佳答案

这是经典XY problem .您需要记录用户操作、决定解决方案并提出有关该解决方案的问题。

即使解决方案不起作用。

因为使用 LD_PRELOAD 库不是记录用户命令的可靠方法。

  1. 用户只需取消设置 LD_PRELOAD 环境变量即可。不,marking it readonly doesn't work .因为它只是用户控制的进程内存中的一个变量。
  2. 您正在将 LD_PRELOAD 设置为 64 位共享对象。每个 32 位程序现在都将无法运行。
  3. 无论您的预加载库如何记录数据,它都会根据用户的许可/访问权限执行此操作。因此,用户可以欺骗记录的数据。

如果您需要记录用户的操作,请使用专为安全执行此操作而设计的系统:auditing .

关于c - LD_PRELOAD 在每次登录服务器时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47882858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com