O RSyslog não funciona com um arquivo de log localizado fora de / var / log

3

Não consigo fazer o rsyslog gravar em um arquivo de log localizado em um diretório diferente de / var / log.

O servidor é o RHELS 5.6 e, na maior parte, com uma configuração padrão. Além das alterações específicas do rsyslog (regras adicionadas ao iptables, etc.)

Funciona se eu especificar o seguinte em /etc/rsyslog.conf:

local6.* /var/log/MyLog.log

No entanto, NÃO FUNCIONA se eu criar um arquivo de log no local /Testing/MyLog.log, chmod -R 777 e, em seguida, atualizar a configuração para:

local6.* /Testing/MyLog.log

Estou confuso porque eu configurei /Testing/MyLog.log (e o diretório) com chown e chmod para ter usuário idêntico: group e permissões como log /var/log/MyLog.log (de acordo com a saída de ls -la).

O que estou fazendo de errado? Isso é possível? Eu até tentei criar um link simbólico em / var / log, nada que eu tentei parece funcionar. Eu brinquei com todos os tipos de opções de configuração documentadas no site rsyslog.

    
por MikeCompSciGeek 10.02.2012 / 14:59

2 respostas

5

O SELinux impedirá que os processos rotulados com syslogd_t gravem em arquivos que sejam (provavelmente) rotulados como default_t . Você precisa rotular o arquivo com algo em que syslogd_t possa gravar. Os arquivos em /var/log são, na maioria das vezes, rotulados como var_log_t , um tipo que o syslogd_t pode gravar com segurança.

Você deve não apenas re-marcar os arquivos em /Testing to var_log_t , porque isso é inevitável em algum ponto, quando alguém executa um autorrelabel no próximo boot ou executa restorecon -FvR / .

Em vez disso, escreva uma pequena política que rotule seus arquivos de maneira automática e consistente em /Testing . Algo para você começar. Seu arquivo de políticas pode ser semelhante a este:

/Testing(/.*)?    --    gen_context(system_u:object_r:var_log_t)

A política de SELinux escrita, no entanto, é um pouco complicada. É por isso que você deve colocar coisas no local padrão para essas coisas.

No entanto, eu pessoalmente acho que o log deve realmente entrar em /var/log . Está lá por um motivo. Não importa quão bom você acha que seu motivo é escrever para /Testing , provavelmente é melhor escrever para algo como /var/log/testing .

Editar: não, não, não, não, não. Isso não vai fazer. Isso foi bobo. Você não deseja gravar uma política para permitir que syslogd_t grave em var_log_t , porque isso já é permitido pela política padrão. Você precisa escrever regras de filecontext (um arquivo .fc), como meu novo snippet acima, para rotular /Testing as var_log_t se você precisar ...

    
por 10.02.2012 / 15:37
-1

selinux está então impedindo você de escrever logs fora de / var / log. Você pode testá-lo desligando-o temporariamente

setenforce 0

Em seguida, ele deve começar a gravar nesse novo diretório de log.

    
por 10.02.2012 / 15:33