SELinux - logrotate não roda logs do NGINX

2

Estou usando o CentOS, o NGINX e o Passenger para servir um aplicativo Rails. Eu tenho o SELinux ativado e tive uma série de problemas com o logrotate. Eu consegui resolver a maioria dos problemas seguindo vários conselhos on-line. Infelizmente, o logrotate não está girando com sucesso meus arquivos de registro NGINX. O NGINX está instalado em / opt / nginx

Este é o meu arquivo de configuração 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
}

Estas são as mensagens que estou recebendo em / 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]

Eu tentei usar sealert para atualizar as políticas, como as mensagens recomendam, mas isso não resolve o problema (suspeito que isso talvez seja porque os arquivos temporários sempre têm nomes diferentes).

Alguém pode sugerir como posso resolver isso para que os arquivos de log sejam rotacionados com sucesso.

- EDIT - saída adicionada de

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
    
por niciliketo 10.03.2015 / 11:31

2 respostas

2

Descobri que o problema está em alguns dos arquivos de log mais antigos (girados).

executando ls --scontext no diretório em que o log reside mostrou que 2 dos logs girados não tinham o contexto var_log_t .

Eu consertei isso excluindo esses arquivos específicos (eles tinham vários meses).

Na próxima execução agendada, os registros foram girados corretamente.

    
por 02.04.2015 / 09:27
0

Poderia ter algo a ver com o fato de você não estar declarando permissões para o arquivo de controle Logrotate com algo assim. (observe a linha 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 }
    
por 10.03.2015 / 12:06