是否可以在 Linux 上从“ps”或“top”列表中“隐藏”进程

是否可以在 Linux 上从“ps”或“top”列表中“隐藏”进程

首先,我推测如果可能的话,则需要以 root 身份(或以与 root 共享 UID 0 的用户身份)来完成。

如果命令由非 root 运行,如何启动一个进程以便它不会出现在ps aux或列表中?ps eftop

这可能吗?

我通常运行的发行版是 RHEL/CentOS 和 Ubuntu - 所以如果有一个特定于发行版的答案,那也可以。

答案1

嗯,您有几个选择。最简单的方法是将 ps 和 top 程序替换为修改后的版本,以隐藏您想要隐藏的内容。

另一种方法是运行嵌入在现有进程中的代码,或者用无害的名称围绕代码编写包装脚本。

在某些版本的 PS 中,您可以通过更改 argv[] 来修改它,但不确定这是否适用于 top,也不确定它是否适用于 linux(这主要是 BSD 约定)。

这完全取决于你通过这样做到底想达到什么目的?

答案2

根据内核补丁http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201,您可以对 proc 文件系统使用 hidepid 选项:

hidepid=0(默认)表示旧行为 - 任何人都可以读取所有全世界可读的 /proc/PID/* 文件。

hidepid=1 表示用户不能访问任何 /proc// 目录,只能访问自己的目录。cmdline、sched*、status 等敏感文件现在受到保护,无法供其他用户访问。由于权限检查在 proc_pid_permission() 中完成,并且文件的权限保持不变,因此需要特定文件模式的程序不会感到困惑。

hidepid=2 意味着 hidepid=1 加上所有 /proc/PID/ 对其他用户都是不可见的。这并不意味着它隐藏了进程是否存在(可以通过其他方式了解,例如通过 kill -0 $PID),但它隐藏了进程的 euid 和 egid。它使入侵者收集有关正在运行的进程的信息的任务变得复杂,包括某个守护进程是否以提升的权限运行,另一个用户是否运行某个敏感程序,其他用户是否运行任何程序等。

gid=XXX 定义一个能够收集所有进程信息的组(如 hidepid=0 模式)。应使用此组,而不是将非 root 用户放入 sudoers 文件或类似的东西中。但是,不应将不值得信任的用户(如守护进程等)添加到该组中,因为它们不应监视整个系统中的任务。

您无法控制流程级别的可见性,但是您可以确保您的用户只能看到他们自己的流程。

如果您的内核版本高于 3.3,您可以尝试以下命令:

 
mount /proc -o remount,hidepid=2

答案3

中描述的选项此链接对我有用。在该链接中,作者隐藏了一个名为的过程evil_script.py

我把内容粘贴在这里以防链接失效:

  1. 首先,创建一个名为 processhider.c 的文件,内容如下:进程隐藏器

  2. 使用以下命令编译代码:

    gcc -Wall -fPIC -shared -o libprocesshider.so processhider.c -ldl

  3. 使用以下命令移动库:

    sudo mv libprocesshider.so /usr/local/lib/

  4. 告诉动态链接器使用它:

    echo /usr/local/lib/libprocesshider.so >> /etc/ld.so.preload

就是这样。如果你现在运行,ps faux你将看不到任何名为 的进程evil_script.py

答案4

例如,在 top 中使用 F 命令和 n 命令来配置您想要查看的内容。使用 W 命令将您喜欢的配置写入 ~/.toprc - 使用 ? 查看 top 命令。这可能会快速解决您的问题 - 对我来说确实如此。使用 F 我可以添加/删除我想要查看的字段,而在 f 中可以使用 s 设置排序,然后使用 q 返回显示。然后使用 n 设置我想要查看的进程数,并使用 W 保存到 .toprc

相关内容