首先,我推测如果可能的话,则需要以 root 身份(或以与 root 共享 UID 0 的用户身份)来完成。
如果命令由非 root 运行,如何启动一个进程以便它不会出现在ps aux
或列表中?ps ef
top
这可能吗?
我通常运行的发行版是 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
。
我把内容粘贴在这里以防链接失效:
首先,创建一个名为 processhider.c 的文件,内容如下:进程隐藏器
使用以下命令编译代码:
gcc -Wall -fPIC -shared -o libprocesshider.so processhider.c -ldl
使用以下命令移动库:
sudo mv libprocesshider.so /usr/local/lib/
告诉动态链接器使用它:
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