Назад | Перейти на главную страницу

SELinux - logrotate не вращает журналы NGINX

Я использую CentOS, NGINX и Passenger для обслуживания приложения Rails. У меня активирован SELinux, и у меня возникла серия проблем с logrotate. Я смог решить большинство проблем, следуя различным советам в Интернете. К сожалению, logrotate не выполняет ротацию моих файлов журналов NGINX. NGINX установлен в / opt / nginx

Это мой файл конфигурации logrotate:

/opt/nginx/logs/*log {
daily
rotate 30
missingok
notifempty
sharedscripts
delaycompress
postrotate
[ ! -f /opt/nginx/logs/nginx.pid ] || kill -USR1 `cat /opt/nginx/logs/nginx.pid`
endscript
}

Это сообщения, которые я получаю в / var / log / messages

Mar  9 03:49:14 localhost setroubleshoot: SELinux is preventing /usr/sbin/logrotate from rename access on the file logrotate_temp.RTg4y3. For complete SELinux messages. run sealert -l 8c5238cd-3e95-4af6-b150-498080c862b8
Mar  9 03:49:14 localhost setroubleshoot: SELinux is preventing /usr/sbin/logrotate from rename access on the file logrotate_temp.OjvGsG. For complete SELinux messages. run sealert -l 8c5238cd-3e95-4af6-b150-498080c862b8
Mar 10 03:55:46 localhost logrotate: ALERT exited abnormally with [1]

Я пробовал использовать sealert чтобы обновить политики в соответствии с рекомендациями сообщений, однако это не решает проблему (я подозреваю, что это может быть связано с тем, что временные файлы всегда имеют разные имена).

Может ли кто-нибудь предложить, как я могу решить эту проблему, чтобы файлы журналов были успешно повернуты.

- EDIT - добавлен вывод

sudo sealert -l 8c5238cd-3e95-4af6-b150-498080c862b8

:

SELinux is preventing /usr/sbin/logrotate from rename access on the file logrotate_temp.NuwGkX.

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

If you believe that logrotate should be allowed rename access on the logrotate_temp.NuwGkX file 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 logrotate /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp

Я обнаружил, что проблема заключалась в паре старых (повернутых) файлов журнала.

Бег ls --scontext в каталоге, где находится журнал, показал, что 2 из повернутых журналов не имеют var_log_t контекст.

Я исправил это, удалив именно эти файлы (им было несколько месяцев).

При следующем запланированном запуске журналы повернулись правильно.

Может ли это иметь какое-то отношение к тому факту, что вы не объявляете разрешения для файла управления Logrotate с чем-то вроде этого. (обратите внимание на строку create 0644 ....)

/var/log/nginx/*log {
     create 0644 nginx nginx
     daily
     rotate 10
     missingok
     notifempty
     compress
     sharedscripts
     postrotate
         /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
     endscript }