在linux3.3内核以后,在procs 增加了一个挂载选项hidepid,实现对用户隐藏进程。
hidepid=0: 默认模式,所有人都可以访问读取公开的 /proc/PID/* 文件
hidepid=1: 用户不能访问进入的/proc/PID 文件,除了属于他的目录,一些敏感文件比如cmdline, io, sched*, status, wchan对其他用户保护起来,。当用户输入ps,top等命令,用户是看不到那些不属于自己的进程的!!不过还是能够看到/proc下的process IDs
hidepid=2: 是hidepid的加强,这种设定下,/proc/PID/ 对于任何用户都是不可见的——哪怕是入侵到/proc 目录下,也看不到process IDs。无论是否有部分守护进程是以提升的权限运行,是否有其他用户运行一些敏感程序,是否有其他用户运行任何程序等,这个参数的设定都使得入侵者收集系统运行进程信息变得更复杂,难度加大。
在一个共享服务器上强烈建议hidepid=2选项来挂载procfs, 可以在运行时重新挂载procfs.
$ mount | grep ^proc
proc on /proc type proc (rw,relatime)
$ mount -o remount,hidepid=2 /proc
$ mount | grep ^proc
proc on /proc type proc (rw,relatime,hidepid=2)
也可以直接在/etc/fstab中增加挂载选型来持续生效
这也同样对pstree, top, htop生效
还有其他的一些进程隐藏手段可以采用:
1.使用一个适当的框架(Selinux, gresecurity)
2.改变ps 、 top等命令的二进制文件
3.改变libc库函数, 改变readdir函数
4.系统调用劫持