A questão já tinha uma solução aqui
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á deve existir e ter o contexto SELinux correto para permitir que ele seja gravado.
(E aqui é uma solução para evitar este problema no modo SELinux.)
Tópico muito antigo que desafia a resolução. E há alguns dias atrás, eu encontrei este segmento desde ive tenho um mesmo problema e resolvido por usar a solução de Dedgar.
E você pode tentar abaixo e se realmente quiser definir Temporary
para /var/tmp
log se parece com:
opendkim[46233]: E9A563F480: dkim_eoh(): resource unavailable: can't create temporary file at /var/tmp/dkim.E9A563F480.IjgWhi: Permission denied
E como Chloe disse. é um erro do SELinux porque everbody should be able to write into the /var/tmp folder
Verifique o arquivo de log
%código%
Tem:
...
type=SYSCALL msg=audit(1484968513.231:1415886): arch=c000003e syscall=2 success=no exit=-13 a0=7fc21e6e4910 a1=c2 a2=180 a3=0 items=0 ppid=46231 pid=14906 auid=500 uid=497 gid=497 euid=497 suid=497 fsuid=497 egid=497 sgid=497 fsgid=497 tty=(none) ses=3274 comm="opendkim" exe=2F7573722F7362696E2F6F70656E646B696D202864656C6574656429 subj=unconfined_u:system_r:dkim_milter_t:s0 key=(null)
type=AVC msg=audit(1484968573.318:1415887): avc: denied { write } for pid=14916 comm="opendkim" name="tmp" dev=dm-0 ino=129564 scontext=unconfined_u:system_r:dkim_milter_t:s0 tcontext=system_u:object_r:tmp_t:s0 tclass=dir
...
Como Dedgar disse, parece que o opendkim está faltando uma política que pode criar arquivos do arquivo # grep opendkim /var/log/audit/audit.log
.
Então, primeiro, verifique o tipo dir
# ll -Zd /var/tmp/
drwxrwxrwt. root root system_u:object_r:tmp_t:s0 /var/tmp/
verifique se tmp
tem permissão para acessar opendkim
# ll -Z /usr/sbin/opendkim
-rwxr-xr-x. root root system_u:object_r:dkim_milter_exec_t:s0 /usr/sbin/opendkim
# sesearch -A -s dkim_milter_t| grep tmp_t
A saída pode se parecer com:
allow daemon puppet_tmp_t: arquivo {ioctl ler gravação getattr lock append};
permitir dkim_milter_t tmp_t: arquivo {gravar criar desvincular aberto};
allow dkim_milter_t tmp_t: dir {escreve add_name remove_name};
permitir domínio tmp_t: dir {getattr search open};
...
Aviso da linha
allow dkim_milter_t tmp_t : file { write create unlink open } ;
allow dkim_milter_t tmp_t : dir { write add_name remove_name } ;
Ele quase diz ao uso /var/tmp
tem permissão para acessar diretórios com o tipo dkim_milter_t
como tmp_t
,
Mas, na maioria dos casos, não temos essa saída de linha ou esse conf não funciona em nenhum outro caso ...
Portanto, precisamos adicionar uma política que conceda permissão à política /var/tmp
, que dkim_milter_t
use para acessar o arquivo ou dirs que tenham opendkim
type
.
E a maneira mais simples é usar audit2allow como Dedgar colocou:
grep opendkim /var/log/audit/audit.log | audit2allow -M opendkim
semodule -i opendkim.pp
gerará uma política do SELinux para fazer as coisas antes.
Mas certamente não sabe que não funcionará no caso de Chloe.
Coloque o meu opendkim.te:
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 };
E se você precisar de um arquivo regenerado (opendkim.pp para isso) manualmente.
checkmodule -M -m -o opendkim.mod opendkim.te
semodule_package -o opendkim.pp -m opendkim.mod
E tmp_t
para o que você precisa.