Как устранить эти ошибки SELinux AVC?

Предпосылки: У меня есть сервер CentOS 6 LAMP. Недавно сервер начал не реагировать каждые несколько дней. Первоначально mysqld выдавал предупреждение nagios, и я не мог бы даже ssh на сервере, требовался жесткий сброс. Mysqltuner привел меня к увеличению буферного пула, который, казалось, помог. Теперь симптом изменился на nagios, бросая апача http down alert. На этот раз я смог отправить ssh на сервер, но apache не перезагрузился и перезагрузка была необходима.

После просмотра / var / log / messages и /var/log/audit/audit.log я вижу, что есть сотни ошибок AVC. audit.log – несколько МБ в день, а мои другие серверы – просто 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 

Запуск через герметик дает следующее:

 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 

Я даже не уверен, что я на правильном пути, потому что я новичок в Linux. Любые указатели на то, где смотреть дальше, оцениваются. Благодаря!

ОБНОВЛЕНИЕ Хорошо, через несколько месяцев это случилось снова. Я не ближе к выяснению, почему мой LAMP-сервер время от времени замерзает (я подозреваю, что MySQL, так как это первая служба, которая бросает предупреждение nagios), но я знаю, почему предупреждения SE Linux (из моего первоначального вопроса) происходят: один из размещенных сайтов – интернет-магазин Magento, а скрипт cron.php, который срабатывает каждые пять минут, вызывает ошибки SE Linux каждый раз.

Поэтому мой обновленный вопрос: стоит ли беспокоиться о чем-то, кроме огромного количества записей в моих сообщениях и журналах аудита?

Наконец, я смог сузить и решить проблему. Это было сочетание двух вопросов:

  1. Сайт Magento на сервере был отключен в файле vhosts. Но работа Magento cron все еще работала, не срабатывала и вызывала ошибки AVC. Удаление сиротского задания cron остановило ошибки AVC.

  2. Однако, как предположил Мануэль Фокс в комментариях, ошибки SELinux не были связаны с случайными сбоями сервера. Но поскольку записи AVC больше не загромождали мои файлы журналов, я смог найти следующее в журналах mysql непосредственно перед тем, как сервер зависает:

    InnoDB: Предупреждение: долгое семафорное ожидание: –Thread 140485795231488 ждал на линии btr0sea.c 1706 в течение 241.00 секунд семафор: X-lock на RW-защелке на 0x5583b18, созданный в файле btr0sea.c строка 178

Эти журналы о ожиданиях семафора привели меня к этому связанному вопросу . Поэтому окончательным решением было установить innodb_adaptive_hash_index = 0 в конфигурации mysql.

В качестве следующего шага я также создал недельный mysqlcheck для оптимизации всех баз данных. Прошло уже несколько недель и никаких спонтанных сбоев и более сумасшедших журналов ошибок для mysql или SELinux.