2013-03-27 20 views
9

Ho aggiunto due script nella directory "logrotate.d" per i registri delle applicazioni da ruotare. Questa è la configurazione per uno di loro:logrotate cron job che non ruota determinati registri

<myLogFilePath> { 
    compress 
    copytruncate 
    delaycompress 
    dateext 
    missingok 
    notifempty 
    daily 
    rotate 30 
} 

C'è uno script "logrotate" nella directory "cron.daily" (che sembra essere in esecuzione quotidiana secondo i registri cron):

#!/bin/sh 

echo "logrotate_test" >>/tmp/logrotate_test 
#/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1 
/usr/sbin/logrotate -v /etc/logrotate.conf &>>/root/logrotate_error 

EXITVALUE=$? 
if [ $EXITVALUE != 0 ]; then 
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" 
fi 
exit 0 

La prima dichiarazione di eco sta funzionando.
ma trovo i miei registri delle applicazioni da soli non sono sempre ruotati, mentre altri registri come httpd sono sempre ruotati **
** E anche io non vedo alcun output nel file citato "logrotate_error"
(ha il permesso di scrittura per tutti gli utenti).

Tuttavia lo syslog dice: "logrotate: ALERT uscito in modo anomalo con [1]"

Ma quando faccio funzionare lo stesso "logrotate" in "cron.daily" scritto a mano, tutto sembra funzionare bene.

Perché non sta ruotando durante la pianificazione cron giornaliera? Sto facendo qualcosa di sbagliato qui?
Sarebbe bello se ricevessi questo aiuto tanto necessario.

AGGIORNAMENTO: Sembra, è a causa di SELinux - i file di log nella mia home directory utente ha restrizioni imposte da SELinux e quando lo script logrotate viene eseguito:

SELinux is preventing /usr/sbin/logrotate from getattr access on the file /home/user/logs/application.log 

risposta

10

SELinux ha limitato la accesso a logrotate su file di log in directory che non hanno il tipo di contesto file SELinux richiesto. La directory "/ var/log" ha il contesto di file "var_log_t" e logrotate è in grado di eseguire il necessario. Quindi la soluzione era di impostare questo sui miei file di registro dell'applicazione e la directory padre:

semanage fcontext -a -t var_log_t <directory/logfile> 
restorecon -v <directory/logfile> 
5

Ho avuto un problema simile. Per risolvere questo, ho controllato lo stato del SELinux usando il comando sestatus:

# sestatus 
SELinux status:     enabled 
SELinuxfs mount:    /selinux 
Current mode:     enforcing 
Mode from config file:   enforcing 
Policy version:     24 
Policy from config file:  targeted 

Quindi, controllare il contesto di sicurezza SELinux applicato a file e directory utilizzando ls --scontext. Controllare i file che si desidera logrotate di operare su e controllare i file che stanno lavorando, come ad esempio/var/log/maillog:

# ls --scontext /var/log/maillog* 
system_u:object_r:var_log_t:s0 /var/log/maillog 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140713 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140720 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140727 
system_u:object_r:var_log_t:s0 /var/log/maillog-20140803 

Usa semanage per modificare il contesto del file.

semanage fcontext -a -t var_log_t <directory/logfile> 
restorecon -v <directory/logfile> 
2

Solo per generalizzare il sopra e assicurarsi stesso contesto SELinux è impostato correttamente per tutti i file futuri:

semanage fcontext -a -t var_log_t "<directory>(/.*)?" 
restorecon -v <directory> 
0

Ho visto questo problema con SELinux disabilitato e questo era perché la directory padre di registro file di essere ruotato ha permessi di scrittura globale che non è accolto da logrotate

error: skipping "/xxx/yyy/log/logfile.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. 

chmod directory superiore a 755 ha risolto il problema

# logrotate --version 
logrotate 3.8.6 
0

SELinux impedisce/usr/sbin/logrotate da accesso in lettura alle directory di siti.

***** Plugin catchall (100. fiducia) suggerisce ***************************

Se crediamo che logrotate dovrebbe essere autorizzato ad accedere in lettura alla directory dei siti per impostazione predefinita. Quindi dovresti segnalarlo come un bug. È possibile generare un modulo della politica locale per consentire questo accesso.
Do
consentire tale accesso per ora eseguendo:

# grep logrotate /var/log/audit/audit.log | audit2allow -M mypol 
# semodule -i mypol.pp 
+1

casi in cui è presente preso da? Potresti per favore aggiungerlo? Ho cercato su Google questo e vedo molti messaggi simili a questo, ma non riesco a trovare la fonte. È questo il messaggio predefinito che SELinux fornisce? –