SELinux + logrotate + prerotate = Permissão negada

3

Eu tenho o que (deveria) ser uma tarefa bastante simples: Migre um conjunto de arquivos de log personalizados para um banco de dados à noite.

Eu uso o logrotate (cron.daily) com uma simples tarefa de pré-rotação

/var/log/myapplog/*.log
{
    daily
    copytruncate
    rotate 366
    dateext
    dateformat .%Y-%m-%d
    compress
    missingok
    compresscmd /usr/bin/xz
    compressoptions -ze9
    compressext .xz
    prerotate
        /usr/local/myapp/bin/DBWriter $1
    endscript
}

Infelizmente, o SELinux não vê dessa maneira. Se eu setenforce 0 , o script é executado perfeitamente. Gira os logs, envia-os para o DB, etc. setenforce 1 , no entanto, retorna:

logrotate_script: line 1: /usr/local/myapp/bin/DBWriter: Permission denied

Eu tentei mudar contextos no DBWriter, mais recentemente eu configurei para unconfined_u:unconfined_r:unconfined_t , o que não funcionou ...

Idealmente, preciso manter o SELinux ativado. Se for importante, o DBWriter também está disponível como um arquivo java .jar. Mas executar java -jar DBWriter.jar tem o mesmo resultado.

Obrigado antecipadamente!

Editar: a resposta da Win.T abaixo resolveu o problema para mim.

semanage permissive -a logrotate_t

Parte do problema é que eu estava tentando fazer exatamente o que o SELinux foi projetado para prevenir: fazer com que o processo A execute um arquivo desconhecido B e causar estragos no sistema C

Considerações e restrições do design do projeto nos colocam nesse caminho.

Os clientes nem sempre querem ouvir sobre essas palavras de fantasia, como segurança e proteção do futuro.

    
por Sean 27.02.2015 / 00:37

1 resposta

1

Procure em /var/log/messages e /var/log/audit/audit.log (se você tiver auditd em execução). Você também pode usar audit2allow para ver mensagens de erro do SELinux e possíveis soluções.

    
por 27.02.2015 / 02:17