由setroubleshootd进程引起内存不足生产案例

生产现象

系统各功能点击失效,不能正常展示,但是数据齐全。oracle登录secureCRT登录时间过长。

生产查看

应用检查正常,应用服务器资源充足。但是数据库服务器发现问题:内存占满,甚至swap也完全占用。
shift+M按内存排序查看

解决方案

可以看出系统8G内存,setroubleshootd进程占用4G,该进程是SElinux的守护进程,关闭SElinux即可。

vi /etc/selinux/config
#SELINUX=enforce #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #增加
修改配置文件,重启生效

补充资料

前言

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。

SELinux 主要由美国国家安全局开发。

SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。

SElinux的作用及权限管理机制

SElinux的作用

SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。

设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕?

SELinux 就是来解决这个问题的。

DAC

在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。

只要访问这个资源的进程符合以上的条件就可以被访问。

而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。

这种权限管理机制的主体是用户,也称为自主访问控制(DAC)。

MAC

在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。

这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。

即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。

这种权限管理机制的主体是进程,也称为强制访问控制(MAC)。

SElinux工作模式

SELinux 有三种工作模式,分别是:

  1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。

  2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。

  3. disabled:关闭 SELinux。

SELinux 工作模式可以在 /etc/selinux/config 中设定。

如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。

enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。

SElinux有关的日志文件

SELinux有许多相关的日志文件来记录在运行过程中对操作的拒绝日志,以便用户在后续过程中进行审计评估。在缺省情况下,SELinux将拒绝日志写入到/var/log/audit/audit.log文件中,该文件的部分内容显示如图1所示:
audit.log
另外,如果setroubleshooted运行的话,在/var/log/audit/audit.log中的记录将被翻译成容易理解和阅读的方式,保存在/var/log/messages文件中:
部分输出
当然,拒绝信息被送到不同的地方,这要根据不同的守护进程而定表1列出了对应于不同的守护进程的日志文件的路径:

表1 SELinux日志文件列表

守护进程日志文件
auditd on/var/log/audit/audit.log
Auditd off; rsyslogd on/var/log/messages
Setroubleshootd, rsylogd, auditd on/var/log/audit/audit.log翻译后存入/var/log/messages

/var/log/audit/audit.log翻译后存入/var/log/messages
为了启动上述的守护进程,需要来分别配置auditd,rsyslogd以及setroubleshootd来使他们在系统启动时自动运行,可以以root身份运行下述命令:

#/sbin/chkconfig -levels 2345 auditd on
#/sbin/chkconfig -levels 2345 rsyslogd on
#/sbin/chkconfig -levels 2345 setroubleshootd on

并且,可以使用如下命令检查这些守护进程是否正常运行:

#/sbin/service auditd status
#/sbin/service rsyslogd status
#/sbin/service setroubleshootd status

更多参考资料

http://blog.51cto.com/patterson/687854


版权声明:本文为weixin_44167712原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。