Altermime e SELINUX

1

Eu configurei um aplicativo chamado altermime ( link ) para o postfix (servidor SMTP), que altera e-mails no meio do caminho. Estou injetando um cabeçalho "X-ListUnsubscribe" em todas as mensagens de email enviadas de nosso servidor por motivos de spam.

O Altermime precisa ser capaz de gravar em / var / spool / filter (normalmente eu acho que o postfix grava em / var / spool / postfix). De qualquer forma, tudo isso funciona bem com o SELinux desabilitado, mas com ele ativado, ele quebra.

Por mais tentador que seja simplesmente desligar o SELinux e acabar com isso, prefiro não comprometer a segurança da minha caixa dessa maneira. Então, estou tentando modificar o SELinux para que a gravação em / var / spool / filter seja permitida.

Eu tentei:

 cat /var/log/audit/audit.log | audit2why 

O que me mostra as exceções (vou incluí-las abaixo).

E eu fiz isso várias vezes:

 audit2allow -M altermime < /var/log/audit/audit.log
 semodule -i altermime.pp

No entanto, isso não parece funcionar. Eu estou supondo que pode ser porque o audit2allow está nomeando arquivos individuais (/ var / spool / filter / xxxx) sendo bloqueados contra o diretório inteiro (/ var / spool / filter / *). Não consigo descobrir como criar uma política ou alterar o SELinux para permitir o acesso.

Algum SELinux Guru pode me ajudar? :)

Aqui está um excerto do meu audit2why:

type=AVC msg=audit(1409231063.712:263024): avc:  denied  { add_name } for  pid=21280 comm="disclaimer" name="in.21279" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir
    Was caused by:
            Missing type enforcement (TE) allow rule.
            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1409231065.905:263025): avc:  denied  { add_name } for  pid=21285 comm="disclaimer" name="in.21284" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir
    Was caused by:
            Missing type enforcement (TE) allow rule.
            You can use audit2allow to generate a loadable module to allow this access.

type=AVC msg=audit(1409231067.380:263026): avc:  denied  { add_name } for  pid=21289 comm="disclaimer" name="in.21288" scontext=unconfined_u:system_r:postfix_pipe_t:s0 tcontext=unconfined_u:object_r:var_spool_t:s0 tclass=dir
    Was caused by:
            Missing type enforcement (TE) allow rule.
            You can use audit2allow to generate a loadable module to allow this access.
    
por Brad 28.08.2014 / 15:15

1 resposta

1

Eu vou responder minha própria pergunta. Primeiro fiz o seguinte:

semodule -l | grep mymodulename

(Substitua mymodulename por qualquer módulo anterior que você tenha importado). Pule esta etapa se você não tiver importado nenhum módulo anteriormente.

Em seguida, execute este comando para remover os módulos importados anteriormente. Novamente pule esta etapa se você não importou nenhum módulo anterior.

semodule -r names_of_modules_returned_from_prior_command

Agora devemos estar de volta a uma lista "limpa".

Em seguida, execute o seguinte para definir o selinux como permissivo (monitor / log mas não bloquear):

setenforce 0

Faça getenforce e verifique se ele retorna: permissivo

Execute o seguinte comando para limpar o log do SELinux:

echo "" >/var/log/audit.log

ESPERE pelo menos 15 a 20 minutos para que o selinux crie novas entradas de registro em /var/log/audit/audit.log

Em seguida, execute o seguinte comando para criar uma política selinux abrangente:

cat /var/log/audit/audit.log | audit2allow -m yourname >yourname.te

Em seguida, execute o seguinte comando, o qual acredito que verifique o arquivo .te e crie um arquivo .mod (?)

checkmodule -M -m -o yourname.mod yourname.te

Em seguida, compile o arquivo .mod em um arquivo .pp binário com o seguinte comando:

 semodule_package -m yourname.mod  -o yourname.pp

Por fim, instale o módulo:

 semodule -i yourname.pp

Monitore o /var/log/audit/audit.log por algum tempo e garanta que nenhuma nova entrada apareça.

cat /var/log/audit/audit.log | audit2why

Se nenhuma nova entrada aparecer, defina o selinux de volta para impor:

setenforce 1

Isso pareceu funcionar para mim. Pode ser um pouco mais permissivo do que o necessário, mas pelo menos eu não estou desligando totalmente o SELinux.

Espero que isso ajude alguém.

Obrigado Brad

    
por 28.08.2014 / 17:20