系统相关
首页 > 系统相关> > centos – 如何解决这些SELinux AVC错误?

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

作者:互联网

背景:我有一台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