Como modifico o SELinux para permitir que o OpenDKIM grave em / var / tmp?

2

Eu tentei essa resposta ( link ), mas ainda dá um erro.

Jan 7 23:56:33 ip-172-31-15-65 opendkim[24223]: AF15521407: dkim_eoh(): resource unavailable: can't create temporary file at /var/tmp/dkim.AF15521407.ennuJK: Permission denied

Aqui estão alguns dos audit.log

type=AVC msg=audit(1483827348.024:363280): avc:  denied  { write } for  pid=22334 comm="opendkim" name="tmp" dev=xvde ino=40961 scontext=unconfined_u:system_r:dkim_milter_t:s0 tcontext=system_u:object_r:tmp_t:s0 tclass=dir
type=SYSCALL msg=audit(1483827348.024:363280): arch=c000003e syscall=2 success=no exit=-13 a0=7f7eecd1f910 a1=c2 a2=180 a3=0 items=0 ppid=22035 pid=22334 auid=0 uid=495 gid=495 euid=495 suid=495 fsuid=495 egid=495 sgid=495 fsgid=495 tty=(none) ses=4038 comm="opendkim" exe="/usr/sbin/opendkim" subj=unconfined_u:system_r:dkim_milter_t:s0 key=(null)
# cat opendkim.te

module opendkim 1.0;

require {
        type tmp_t;
        type dkim_milter_t;
        class dir write;
}

#============= dkim_milter_t ==============
#!!!! The source type 'dkim_milter_t' can write to a 'dir' of the following types:
# dkim_milter_data_t, cluster_var_lib_t, cluster_var_run_t, root_t, cluster_conf_t

allow dkim_milter_t tmp_t:dir write;

# semodule -i opendkim.pp

# ls -ldZ /var/tmp
drwxrwxrwt. root root system_u:object_r:tmp_t:s0       /var/tmp

# service opendkim restart
Stopping OpenDKIM Milter:                                  [  OK  ]
Starting OpenDKIM Milter:                                  [  OK  ]

Eu não sei mais o que tentar.

Referência: usei este guia: link

Lançamento do CentOS 6.8 (Final)

    
por Chloe 08.01.2017 / 01:01

4 respostas

3

Não há necessidade de permitir que o OpenDKIM grave em outros diretórios. Basta escrever no diretório temporário padrão, /var/run/opendkim , que já deveria existir e ter o contexto SELinux correto para permitir que ele seja gravado.

    
por 08.01.2017 / 03:42
3

Primeiro, o pacote setroubleshoot fornece o comando sealert , que permitirá que você solucione os logs relacionados ao SELinux e sugira soluções, ainda que talvez não das mais seguras.

Documentação EL6: Link

Documentação EL7: Link

A resposta de Michael Hampton é boa porque o diretório padrão é /var/run/opendkim com o tipo dkim_milter_data_t SELinux correto. Para responder à sua pergunta, você pode criar um novo diretório chamado /var/tmp/opendkim (ou qualquer outro nome que você queira chamá-lo) com as permissões corretas e o contexto do SELinux com os seguintes comandos:

mkdir -p /var/tmp/opendkim
chown opendkim:opendkim /var/tmp/opendkim
chmod 0775 /var/tmp/opendkim
semanage fcontext -a -t dkim_milter_data_t "/var/tmp/opendkim(/.*)?"
restorecon -rv /var/tmp/opendkim

Estas mudanças são persistentes na reinicialização e você deve atualizar sua configuração do opendkim para usar este diretório recém-criado que está fora do escopo desta resposta.

    
por 08.01.2017 / 06:59
0

Acho que Michael Hampton♦ disse que é a melhor solução.

Mas e se você realmente precisar definir Temporary to /var/tmp

Então você pode tentar abaixo.

  1. Precisamos modificar a política que dkim_milter_t tinha originalmente. Portanto, crie um arquivo .te (exemplo opendkim.te below)

  2. Deixa dkim_milter_t ter permissão para acessar tmp_t do tipo que dir /var/tmp/ é.

    # ll -Zd /var/tmp/ drwxrwxrwt. root root system_u:object_r:tmp_t:s0 /var/tmp/

arquivo pode se parecer abaixo

module opendkim 1.0;

require {
        type tmp_t;
        type dkim_milter_t;
        class dir { write remove_name add_name };
        class file { write create unlink open };
}
allow dkim_milter_t tmp_t:dir { write remove_name add_name };
allow dkim_milter_t tmp_t:file { write create unlink open };

É claro que você pode mudá-lo adequadamente. mas eu acho que é o que você menos precisa. Na verdade, ele concede a permissão para dkim_milter_t para gravar remover criar arquivo aberto de /var/tmp/

  1. Regenerar opendkim.pp manualmente

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

    semodule_package -o opendkim.pp -m opendkim.mod

  2. Ativar alteração

    semodule -i opendkim.pp

Talvez você precisar de mais de mais ajuda aqui . E para o homem .

    
por 22.01.2017 / 08:11
-3
# setenforce permissive
# service opendkim restart
... send mail to myself ...
# setenforce enforcing
# grep opendkim /var/log/audit/audit.log | audit2allow -M opendkim
# cat opendkim.te

module opendkim 1.0;

require {
        type tmp_t;
        type dkim_milter_t;
        type sysctl_vm_t;
        class dir { write remove_name search add_name };
        class file { write read create unlink open };
}

#============= dkim_milter_t ==============
allow dkim_milter_t sysctl_vm_t:dir search;
allow dkim_milter_t sysctl_vm_t:file read;

#!!!! This avc is allowed in the current policy
allow dkim_milter_t tmp_t:dir write;
allow dkim_milter_t tmp_t:dir { remove_name add_name };
#!!!! The source type 'dkim_milter_t' can write to a 'file' of the following types:
# dkim_milter_data_t, cluster_var_lib_t, cluster_var_run_t, root_t, cluster_conf_t

allow dkim_milter_t tmp_t:file { write create unlink open };
# semodule -i opendkim.pp
    
por 08.01.2017 / 02:50