是否可以从 Linux 上的 `ps` 或 `top` 列表中“隐藏”一个进程

war*_*ren 11 linux process top ps

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

如果该命令是由非 root 用户运行的,那么如何启动进程以使其不显示在ps auxorps eftop列表中?

这甚至可能吗?

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

小智 15

根据内核补丁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
Run Code Online (Sandbox Code Playgroud)


小智 6

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

我将内容粘贴到此处,以防链接失效:

  1. 首先,创建一个名为 processhider.c 的文件,其内容在此链接中找到: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


fia*_*tto 5

好吧,你在这里有几个选择。采取简单的方法是将 ps 和 top 程序替换为隐藏您想要隐藏的内容的修改版本。

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

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

这完全取决于您希望通过这样做实现什么目标?