Как я могу изменить SELinux, чтобы позволить OpenDKIM писать в /var/tmp?
Я попробовал этот ответ ( /questions/398954/v-razreshenii-opendkim-otkazano/398969#398969), но все равно выдает ошибку.
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 ]
Я не знаю, что еще попробовать.
Ссылка: я использовал это руководство: https://www.rosehosting.com/blog/how-to-install-and-integrate-opendkim-with-postfix-on-a-centos-6-vps/
CentOS релиз 6.8 (финал)
4 ответа
Нет необходимости разрешать OpenDKIM писать в любые другие каталоги. Просто напишите во временный каталог по умолчанию, /var/run/opendkim
, который уже должен существовать и иметь правильный контекст SELinux, чтобы он мог быть записан.
Во-первых, setroubleshoot
Пакет обеспечивает sealert
команда, которая позволит вам устранять неполадки в журналах, связанных с SELinux, и предлагать решения, хотя, возможно, не самые безопасные решения.
Документация EL6: Ссылка
Документация EL7: Ссылка
Ответ Майкла Хэмптона хорош, потому что каталог по умолчанию /var/run/opendkim
с правильным dkim_milter_data_t
Тип SELinux. Однако, чтобы ответить на ваш вопрос, вы можете создать новый каталог под названием /var/tmp/opendkim
(или как вы еще хотите это назвать) с правильными разрешениями и контекстом SELinux с помощью следующих команд:
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
Эти изменения сохраняются после перезагрузки, и вы должны обновить конфигурацию opendkim, чтобы использовать этот недавно созданный каталог, который выходит за рамки этого ответа.
Я думаю что 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
Может быть, вам нужна дополнительная помощь здесь. И для мужчины.
# 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