ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

centos – 如何解决这些SELinux AVC错误?

2019-08-17 02:15:14  阅读:764  来源: 互联网

标签:selinux mysql centos apache-httpd


背景:我有一台CentOS 6 LAMP服务器.最近,服务器每隔几天就开始变得没有响应.最初,mysqld会抛出一个nagios警报,我甚至无法进入服务器,需要进行硬重置. Mysqltuner引导我增加缓冲池,这似乎有所帮助.现在症状已经改为nagios抛出apache http down警报.这次我能够ssh到服务器但是apache无法重启并且需要重新启动.

查看/ var / log / messages和/var/log/audit/audit.log后,我发现有数百个AVC错误. audit.log每天几MB,而我的其他服务器只有kb大小.这可能是潜在问题的线索吗?

典型的/ var / log / messages条目是这样的:

Mar 31 16:50:39 web1 setroubleshoot: SELinux is preventing /bin/ps from getattr access on the directory /proc/<pid>. For complete SELinux messages. run sealert -l be51d126-d70e-491f-9ec8-f897677d9989

通过sealert运行它会产生以下结果:

SELinux is preventing /bin/ps from getattr access on the directory /proc/<pid>.

*****  Plugin catchall (100. confidence) suggests  ***************************

If you believe that ps should be allowed getattr access on the <pid> directory by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# grep ps /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

这是audit.log中的典型条目:

type=SYSCALL msg=audit(1427837702.229:721164): arch=c000003e syscall=4 success=no exit=-13 a0=8164d0 a1=3eaee11cc0 a2=
3eaee11cc0 a3=8164d6 items=0 ppid=2792 pid=2800 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48
 fsgid=48 tty=(none) ses=4294967295 comm="ps" exe="/bin/ps" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1427837702.219:721127): avc:  denied  { getattr } for  pid=2800 comm="ps" path="/proc/875" dev=proc
 ino=9349054 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:kernel_t:s0 tclass=dir

UPDATE
好吧,几个月后它再次发生了.我不知道为什么我的LAMP服务器不时会冻结(我怀疑是MySQL,因为这是第一个提出nagios警报的服务),但我知道为什么SE Linux警报(来自我原来的问题)正在发生的事情:托管的其中一个站点是Magento在线商店,每五分钟触发一次的cron.php脚本每次都会导致SE Linux错误.

所以我更新的问题是:除了我的消息和审计日志中的大量条目之外,这是否需要担心?

解决方法:

我终于能够缩小范围并解决问题了.这是两个问题的组合:

>在vhosts文件中禁用了服务器上的Magento站点.但是Magento cron作业仍在运行,失败并导致所有AVC错误.删除孤立的cron作业会停止AVC错误.
>然而,正如Manuel Faux在评论中所说,SELinux错误与服务器的随机崩溃无关.但是随着AVC条目不再混乱我的日志文件,我能够在服务器冻结之前在mysql日志中找到以下内容:

InnoDB:警告:长信号量等待:
–Thread 140485795231488在btr0sea.c第1706行等待241.00秒信号量:
在文件btr0sea.c第178行中创建的位于0x5583b18的RW锁存器上的X锁定

那些关于信号量等待的日志让我看到了这个related question.所以最后的解决方案是在mysql配置中设置innodb_adaptive_hash_index = 0.

作为进一步的步骤,我还创建了每周一次的mysqlcheck来优化所有数据库.现在已经好几周了,没有自发的崩溃,也没有mysql或SELinux的疯狂错误日志.

标签:selinux,mysql,centos,apache-httpd
来源: https://codeday.me/bug/20190817/1672921.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有