开发者社区> 技术小胖子> 正文

如何监控和保护Linux下进程安全

简介:
+关注继续查看

通过综合采用用户级别的top、ps等系统工具以及Linux内核防护技术,我们可以从用户/内核两个层次全方位地保护Linux系统中重要系统进程以及用户进程的安全性,从而达到保护Linux系统安全的目的 。

经典的信息保密性安全模型Bell-LaPadula模型指出,进程是整个计算机系统的一个 主体,它需要通过一定的安全等级来对客体发生作用。进程在一定条件下可以对诸如文件、数据库等客体进行操作。如果进程用作其他不法用途,将给系统带来重大 危害。在现实生活当中,许多网络黑客都是通过种植“木马”的办法来达到破坏计算机系统和入侵的目的,而这些“木马”程序无一例外的是需要通过进程这一方式 在机器上运行才能发挥作用的。另外,许多破坏程序和攻击手段都需要通过破坏目标计算机系统的合法进程尤其是重要系统进程,使得系统不能完成正常的工作甚至 无法工作,从而达到摧毁目标计算机系统的目的。作为服务器中占绝大多数市场份额的Linux系统,要切实保证计算机系统的安全,我们必须对其进程进行监控 和保护。

用户级进程监控工具

Linux系统提供了who、w、ps和top等察看进程信息的系统调用,通过结合使用这些 系统调用,我们可以清晰地了解进程的运行状态以及存活情况,从而采取相应的措施,来确保Linux系统的安全。它们是目前在Linux下最常见的进程状况 查看工具,它们是随Linux套件发行的,安装好系统之后,用户就可以使用。

1.who命令:该命令主要用于查看当前在线上的用户情况。系统管理员可以使用who命令监视每个登录的用户此时此刻的所作所为。

2.w命令:该命令也用于显示登录到系统的用户情况,但是与who不同的是,w命令功能更加强大,它不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,w命令是who命令的一个增强版。

3.ps命令:该命令是最基本同时也是非常强大的进程查看命令。利用它可以确定有哪些进程正 在运行及运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。ps命令可以监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些 标准输入/输出设备进行通信的,如果需要检测其情况,可以使用ps命令。下面是一个ps命令的例子

$ ps x 
PID TTY STAT TIME COMMAND 
5800 ttyp0 S 0:00 -bash 
5813 ttyp1 S 0:00 -bash 
5921 ttyp0 S 0:00 man ps 
5922 ttyp0 S 0:00 sh -c /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz/ 
5923 ttyp0 S 0:00 /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz 
5924 ttyp0 S 0:00 /usr/bin/less -is 
5941 ttyp1 R 0:00 ps x 
4.top命令:top命令和ps命令的基本作用是相同的,显示系统当前的进程及其状态,但是top是一个动态显示过程,可 以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。比较准确地说,top命令提供了实时的对系统处理器的 状态监视。它可以显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用、内存使用和执行时间对任务进行排序,而且它的很多特性都可以通过交互式 命令或者在个人定制文件中进行设定。下面是一个top命令的例子: 
1:55pm up 7 min, 4 user, load average:0.07,0.09,0.06 
29 processes:28 sleeping, 1 running, 0 zombie, 0 stopped 
CPU states: 4.5% user, 3.6% system, 0.0% nice, 91.9% idle 
Mem: 38916K av, 18564K used, 20352K free, 11660K shrd, 1220K buff 
Swap: 33228K av, 0K used, 33228K free, 11820K cached 
PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 
363 root 14 0 708 708 552 R 0 8.1 1.8 0:00 top 
1 root 0 0 404 404 344 S 0 0.0 1.0 0:03 init 
2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd 
3 root -12 -12 0 0 0 SW < 0 0.0 0.0 0:00 kswapd
需重点监控的一些进程

由上面的介绍可知,Linux提供的这些命令都能提供关于进程的一些信息,可以通过它们查看 系统当前的进程状况,也可以找出那些占用了过多系统资源的进程并结束该进程。它们的优点在于速度快,透明性好,直观明了。下表给出了Linux系统中较为 常见的重要的进程(没有完全列出,用户可以参考相应的资料),用户可以采用上述工具来实时的监测这些重要进程的情况,并采取相应的防护措施。

系统调用存在缺点

 

 

我们上述所介绍的进程监控方法和工具都是基于调用操作系统给我们提供的相应的API接口函数或者系统调用来实现的。我们所得到的只是接口函数处理后的结果,不能够主动地从操作系统内核的进程数据结构当中获取我们需要的信息。因而,它们具有如下缺点:

1.传统的进程监控方法运行效率比较低,同时反应时间也比较长,实时性能差。

2.不能够实时、高效地向用户报告当前系统运行的安全状况,就算系统中有不法进程在运行,系统也不能识别出来。

3.不能给用户捕捉不法进程的行为提供证据和进程的活动轨迹。当一个不法进程运行并对系统产 生破坏时,用户即使通过察看进程列表找到了不合法的进程,也不清楚到底从进程开始运行直到捕捉到这样一个不法进程这样一段时间内,进程都对系统造成了哪些 破坏,比如说,访问、修改了哪些重要的系统文件,占用了哪些系统资源等等。这些都给以后的恢复和处理工作带来了很大的问题。

4.执行程序工作在用户态,本身就不安全,入侵系统的黑客可以轻松地找到这些进程监控程序的 磁盘映像,进行删除甚至替换,从而会给系统带来不可估量的损失。这一点尤其需要强调,比如说,黑客入侵系统成功,就可以植入他们所改写的ps程序以替换原 来系统的ps程序,这样就使得用户不能通过该工具得知系统中当前运行的不法进程,这样无论黑客如何植入木马或者其他程序,用户都无法知道,从而无法采取措 施终止这些行为。不言而喻,这样的后果是很严重的。而在我们下面所要介绍的一种运行于内核的进程监控程序当中,黑客根本无法或者很难深入内核来破坏该进程 监控程序,从而使其能够很好地保证自身的安全。

内核的实时监控技术

基于上述种种不足,我们提出了在Linux内核中实现进程实时监控的原理和技术。该技术主要分为以下几个步骤(见图):

 

首先,在“干净”的系统环境下,全面地运行系统中的安全进程,分析和搜集Linux环境下这些进程的相关信息(包括进程ID号、进程名称、进程可执行映像、进程的开始时间、进程的父进程等主要信息),形成一张“系统安全进程列表”,作为进程监控的依据。

接着,监控代码在进程调度过程中实时地搜集系统中运行进程的信息。如果发现进程不在“系统安 全进程列表”当中,则马上通过终端输出该进程的PID号、名称、进程的可执行映像等信息,或者通过声音向用户报警,等待用户处理,在这个等待的过程中,终 止调度该进程,直到用户做出响应(放行该进程或者杀死该进程)。

在第二步当中,如果超级用户(系统管理员)放行了该进程,则可以将该进程加入“系统安全进程 列表”,以完善该列表;如果是一般用户在使用过程当中放行了某个进程,那么,需要将该用户的用户名和身份记录下来,并且将放行的进程记录下来存为日志,那 么,当超级用户(系统管理员)无论是在审核用户行为还是在修改“系统安全进程列表”时,都是一个有力的依据。

另外,在系统运行过程当中,如果发现“系统安全进程列表”当中的某些重要的进程(包括 kswapd、bdflush等)不在运行,则马上将该进程“遗失”的信息存入文件,以备在系统的恢复过程当中,对它们进行针对性的恢复,根据不同的情 况,有的需要马上停机,恢复进程,有的则可以现场恢复。





      本文转自glying 51CTO博客,原文链接:http://blog.51cto.com/liying/967704,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Linux进程控制【进程程序替换】
子进程 在被创建后,共享的是 父进程 的代码,如果想实现自己的逻辑就需要再额外编写代码,为了能让 子进程 执行其他任务,可以把当前 子进程 的程序替换为目标程序,此时需要用到 Linux 进程程序替换相关知识 子进程 替换为其他程序后,无法再执行原有程序,但 进程 始终为同一个
14 0
Linux进程信号(产生、保存、处理)/可重入函数概念/volatile理解/SIGCHLD信号
本篇文章重点详细地写了Linux进程信号的知识点:Linux进程信号的概念、信号产生的方式、信号传递和信号阻塞的原理、信号捕捉的方式、内核态、用户态、可重入函数的概念、volatile理解等等。
30 0
Linux下进程相关知识
大家好!我是木荣,今天给大家分享一下Linux下进程相关的知识。
23 0
万字讲解Linux进程概念
操作系统中的进程概念,通过学习这部分,可以很好地掌握操作系统的部分知识!
103 0
Linux进程学习【进程地址】
对于 `C/C++` 来说,程序中的内存包括这几部分:`栈区`、`堆区`、`静态区` 等,其中各个部分功能都不相同,比如函数的栈帧位于 `栈区`,动态申请的空间位于 `堆区`,全局变量和常量位于 `静态区` ,区域划分的意义是为了更好的使用和管理空间,那么 `真实物理空间` 也是如此划分吗?`多进程运行` 时,又是如何区分空间的呢?`写时拷贝` 机制原理是什么?本文将对这些问题进行解答
40 0
Linux进程学习【环境变量】
环境变量 是一个即陌生又熟悉的词,说陌生是因为大多数普通用户都接触不到 环境变量 配置,说熟悉是因为很多程序又都离不开 环境变量,比如编写 Java 时需要提前安装 jdk,配置好 Java 的环境,才能正常编写代码,python 也是需要配置编码环境;而在我们的 Linux 中也有环境变量,由 环境变量 构成的集合称做 环境变量表;我们还可以调整 进程 的优先级,使得 进程 运行更加灵活
32 0
Linux进程学习【进程状态】
进程 只有被OS管理好了,才能发挥它的全部功效,而系统中存在多个 进程,OS无法做到面面俱到,因此为了更好的管理进程,OS把 进程 分成了几种状态:阻塞、挂起、运行、休眠等等,至于每种状态的应用场景是什么、有什么用?本文将会带着大家认识的各种 进程 状态
34 0
Linux进程学习【基本认知】
进程 是计算机中的重要概念,每个运行中的程序都有属于自己的 进程 信息,操作系统可以根据这些信息来进行任务管理,比如在我们Windows中的任务管理器中,可以看到各种运行中的任务信息,这些任务就可以称之为 进程,简单的 进程 二字后面包含着许多知识,比如为什么OS需要对任务进行管理、任务信息是如何组成的、如何创建新任务等,下面我将带大家从 冯诺依曼 结构体系开始,理解学习 进程 相关知识
45 0
Linux下如何根据进程 名称/pid 结束对应进程(含 xargs kill -9报错问题)
Linux下如何根据进程 名称/pid 结束对应进程(含 xargs kill -9报错问题)
48 0
linux基础——进程的退出及资源回收
linux基础——进程的退出及资源回收
21 0
+关注
技术小胖子
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
Decian GNU/Linux安全合规之路
立即下载
从 Linux 系统内核层面来解决实际问题的实战经验
立即下载
冬季实战营第二期:Linux操作系统实战入门
立即下载