您如何启动进程并使它对top
命令不可见?该过程由普通用户(不是root用户)启动,其他普通用户不应看到。
您如何启动进程并使它对top
命令不可见?该过程由普通用户(不是root用户)启动,其他普通用户不应看到。
Answers:
自3.3以来的Linux内核包含对向其他用户隐藏进程的支持。
它由完成hidepid=
并gid=
如上述安装架,用于的/ proc选项对应的提交和文档/文件系统/ proc.txt。
Debian Wheezy也包含此功能。
该top
命令从proc读取数据,该数据直接从内核提供。为了隐藏进程,您必须使用内核内部的代码进行屏蔽。
除了使用SELinux和grsecurity之类的安全框架(在其他答案中提到)之外,rootkit风格的代码是您唯一的选择。我说“样式”是因为“ rootkit”本身并不坏,它的用法就是这样。在向其他用户隐藏进程的背后有完全正当的理由,这就是为什么此功能存在于安全框架中的原因。
要使它起作用,您必须遵循的基本途径是挂接到(或劫持,具体取决于您如何看待)Linux内核中用于分发/proc/pid/
数据的功能。我演示了一种在我编写的安全模块中加入linux内核功能的方法:
https://github.com/cormander/tpe-lkm
“高级”代码位于的hijack_syscalls()
方法中security.c
,其背后的细节魔咒位于hijacks.c
文件中。
您可能会fs/proc/
在Linux内核的源代码目录中找到要挂接到的函数。请记住,Linux没有提供稳定的ABI,因此您的代码需要进行一些更改才能使其在不同版本的linux内核中运行。另外,请记住,您需要对计算机具有完全root权限才能插入此代码。
更新:
如果包裹 pid_getattr
内核符号与其他一些代码在一起,则这样做确实很容易。我最近在上面的内核模块中添加了一些隐藏进程的东西:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
您可以通过使某个用户或组的进程无法被root和该用户以外的任何人查看来执行类似的操作。按进程名称执行此操作比较复杂,但可以实现。看一下exe_from_mm()
功能。请注意,在中使用它可能会对性能产生影响pid_getattr
。
似乎有两个主要选择。
Selinux的工作原理是将不同的人员置于不同的安全域中,并在某种意义上将其沙盒化,以使他们看不到彼此的东西。这个问题涵盖了这一点。由于selinux迅速成为Linux世界中的实际安全框架,所以这可能是您应该寻找的方向。
另一个是marioosh提到 并在此问题中提出的安全问题。一些发行版使用了grsecurity补丁来替代内核程序包。如果您有此功能,则可以考虑使用它们。
如果出于某种原因您想要在不添加诸如selinux或grsecurity之类的安全框架的情况下执行此操作,请说明您的工作方式是不编写root-kit。
您可以用另一个名称覆盖argv [0] ...但严格来说,您正在寻找某种rootkit。这可能会帮助您:http : //stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
this_is_not_the_process_you_are_looking_for
?