Estou usando o software de backup chamado UrBackup, que configurei para girar seus logs uma vez por dia através do cron.daily. Depois que os logs são girados, o software usa um script postrotate para enviar ao processo em execução um sinal HUP com "systemctl kill". No entanto, o SELinux está negando essa operação e não consigo descobrir como consertar isso.
Aqui está o arquivo de configuração do logrotate para o UrBackup em /etc/logrotate.d:
"/var/log/urbackup.log" {
daily
rotate 30
missingok
create 640 urbackup urbackup
compress
postrotate
test -e /var/run/urbackupsrv.pid && kill -HUP 'cat /var/run/urbackupsrv.pid' || /bin/systemctl kill -s HUP urbackup-server.service
endscript
}
Como descobri, o seguinte script pós-problemático problemático está sendo executado no sistema:
/bin/systemctl kill -s HUP urbackup-server.service
O SELinux está bloqueando isso. Aqui está a entrada de registro relevante de / var / log / messages:
Nov 14 03:33:33 backup4 kernel: type=1107 audit(1510648413.518:4407695): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg='avc: denied { stop } for auid=0 uid=0 gid=0 path="/usr/lib/systemd/system/urbackup-server.service" cmdline="/bin/systemctl kill -s HUP urbackup-server.service" scontext=system_u:system_r:logrotate_t:s0-s0:c0.c1023 tcontext=system_u:object_r:systemd_unit_file_t:s0 tclass=service#012 exe="/usr/lib/systemd/systemd" sauid=0 hostname=? addr=? terminal=?'
Nov 14 03:33:33 backup4 logrotate: ALERT exited abnormally with [1]
Como o sinal HUP não é enviado para o serviço, ele não sabe que os arquivos de log foram girados e continua gravando indefinidamente em um log antigo (girado).
Eu tentei solucionar isso usando o utilitário sealert para fornecer uma explicação de todos os erros em /var/log/audit/audit.log. No entanto, parece ignorar esse erro, mesmo que a entrada de log apareça em audit.log.
Eu também tentei executar o comando "systemctl kill" interativamente como root. Completa sem nenhum erro. O mesmo vale para uma execução manual do logrotate:
logrotate -f /etc/logrotate.d/urbackup-server
Esse comando também é executado sem problemas. A única vez que vejo a negação do SELinux é quando o logrotate é acionado pelo processo diário do Anacron.
O comando "systemctl kill" é explicitamente proibido pelo SELinux? Em caso afirmativo, por que posso executá-lo de forma interativa, mas não quando iniciado pelo cron? Existe alguma maneira que eu possa adicionar uma exceção para este caso, ou outra maneira que eu posso enviar o sinal HUP para o processo para que ele irá gravar no arquivo de log correto?
Muito obrigado por qualquer ajuda.