Como posso mover /var/log/audit/audit.log para outra partição

1

Fresh centos 6.5 com atualizações instaladas. Queremos registrar a auditoria em um volume não persistente, já que capturamos tudo com splunk ou logstash.

O diretório de destino é / mnt / ephemeral / audit /

# ls -l /var/log
lrwxrwxrwx. 1 root      root          21 Dec  9 12:11 audit -> /mnt/ephemeral/audit

Com isso em vigor, o auditd não inicia, presumivelmente é negado pelo selinux. Estou assumindo que os logs em / var / log / messages contenham as negações de avc necessárias para criar uma nova política.

Então eu

semanage permissive -a auditd_t

e tente novamente

Dec  9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:93): avc:  denied  { write } for  pid=13174 comm="auditd" name="audit" dev=xvdb ino=147457 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=dir
Dec  9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:94): avc:  denied  { add_name } for  pid=13174 comm="auditd" name="audit.log" scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=dir
Dec  9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:95): avc:  denied  { create } for  pid=13174 comm="auditd" name="audit.log" scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Dec  9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:96): avc:  denied  { read open } for  pid=13174 comm="auditd" name="audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Dec  9 12:50:56 myhost kernel: type=1400 audit(1418129456.307:97): avc:  denied  { getattr } for  pid=13174 comm="auditd" path="/mnt/ephemeral0/audit/audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Dec  9 12:50:56 myhost kernel: type=1400 audit(1418129456.310:98): avc:  denied  { append } for  pid=13175 comm="auditd" name="audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
Dec  9 12:50:56 myhost kernel: type=1400 audit(1418129456.310:99): avc:  denied  { setattr } for  pid=13175 comm="auditd" name="audit.log" dev=xvdb ino=147458 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file

Então eu, então,

grep avc /var/log/messages > /tmp/avc
audit2allow -M mypol < /tmp/avc
semodule -i mypol.pp
restorecon -R -v /

Conteúdo do arquivo te:

# cat mypol.te    
module mypol 1.0;
require {
    type var_t;
    type auditd_t;
    class dir { write add_name };
    class file { getattr setattr read create open append };
}

    #============= auditd_t ==============
    #!!!! The source type 'auditd_t' can write to a 'dir' of the following types:
    # var_run_t, auditd_var_run_t, file_t, auditd_log_t, cluster_var_lib_t, cluster_var_run_t, root_t, cluster_conf_t

    allow auditd_t var_t:dir { write add_name };
    allow auditd_t var_t:file { getattr setattr read create open append };

Mas o auditd se recusa a começar. Eu sou fraco no selinux reconhecidamente, por favor, não flameja!

Tentei a sugestão de Michaels, eu vejo em / var / log / messages

Dec 10 11:42:52 myhost kernel: type=1400 audit(1418211771.996:29): avc:  denied  { read } for  pid=1494 comm="auditd" name="audit" dev=xvdf ino=49153 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=dir
Dec 10 11:42:52 myhost auditd: Could not open dir /mnt/ephemeral/audit (Permission denied)

Voltar para audit2allow, tentei

# grep avc /var/log/messages |tail -n1 | audit2allow -w
Dec 10 12:03:09 euw1-infradev01-sonar-01 kernel: type=1400 audit(1418212989.424:48): avc:  denied  { read } for  pid=1928 comm="auditd" name="audit" dev=xvdf ino=49153 scontext=unconfined_u:system_r:auditd_t:s0 tcontext=unconfined_u:object_r:var_log_t:s0 tclass=dir

    Was caused by:
        Missing type enforcement (TE) allow rule.


# grep avc /var/log/messages |tail -n1 | audit2allow -M mypol
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i mypol.pp

# cat mypol.te

module mypol 1.0;

require {
    type var_log_t;
    type auditd_t;
    class dir read;
}

#============= auditd_t ==============
allow auditd_t var_log_t:dir read;

e, bingo esperançosamente:

# setenforce 1
# service auditd start
Starting auditd:                                           [  OK  ]

Bit final, isso é persistente na reinicialização? Eu vou descobrir.

    
por Jepper 09.12.2014 / 14:17

2 respostas

2

O SELinux nega que o auditd faça nada com /mnt/ephemeral/audit porque ele não possui um dos tipos permitidos; em vez disso, parece ter um tipo genérico.

Você precisa dizer ao SELinux qual contexto fornecerá a este diretório e aos arquivos nele contidos. Idealmente, vamos copiar o contexto existente que se aplica a /var/log/audit e reutilizá-lo.

Então, quando olhamos em /etc/selinux/targeted/contexts/files/file_contexts , descobrimos que o contexto aplicável é:

/var/log/audit(/.*)?        system_u:object_r:auditd_log_t:s0

Isso é fácil de se adaptar. Execute o comando:

semanage fcontext --add --type auditd_log_t "/mnt/ephemeral/audit(/.*)?"

Em seguida, corrija os contextos dos arquivos existentes:

restorecon -r -v /mnt/ephemeral/audit

Por fim, reinicie o auditd.

Eu não tenho garantias sobre o que acontecerá na próxima inicialização. Você precisará testar isso e ver o que quebra. :)

    
por 09.12.2014 / 16:31
1

Eu acho que falha ao iniciar porque o log aponta para um symlink. Você pode definir o local do arquivo de registro em /etc/audit/auditd.conf. De auditd.conf página do manual :

log_file     Esta palavra-chave especifica o nome completo do caminho para o arquivo de log no qual os registros de auditoria serão armazenados. Deve ser um arquivo normal.

    
por 09.12.2014 / 14:23

Tags