我试过这个答案(https://serverfault.com/a/744756/123651),但仍然会出现错误。
1 月 7 日 23:56:33 ip-172-31-15-65 opendkim[24223]: AF15521407: dkim_eoh(): 资源不可用: 无法在 /var/tmp/dkim.AF15521407.ennuJK 创建临时文件: 权限被拒绝
以下是一些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 ]
我不知道还能尝试什么。
CentOS 版本 6.8(最终版)
答案1
无需允许 OpenDKIM 写入任何其他目录。只需写入默认临时目录,/var/run/opendkim
该目录应该已经存在,并且具有允许其写入的正确 SELinux 上下文。
答案2
我认为Michael Hampton♦
所说的是最好的解决方案。
但如果你真的需要设置Temporary
为/var/tmp
那么您可以尝试下面的操作。
我们需要修改原来的策略
dkim_milter_t
。因此,创建一个.te
文件(下面的例子opendkim.te
)让其
dkim_milter_t
有权访问tmp_t
该目录的类型/var/tmp/
。# ll -Zd /var/tmp/ drwxrwxrwt. root root system_u:object_r:tmp_t:s0 /var/tmp/
文件可能如下所示
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 };
当然,您可以对其进行适当的更改。但我认为这是您最不需要的。它实际上授予了dkim_milter_t
写入权限,删除权限,创建权限,打开文件权限/var/tmp/
手动重新生成 opendkim.pp
checkmodule -M -m -o opendkim.mod opendkim.te
semodule_package -o opendkim.pp -m opendkim.mod
实现变革
semodule -i opendkim.pp
答案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