Как мне изменить SELinux, чтобы позволить OpenDKIM писать в / var / tmp?

Я попробовал этот ответ ( https: / /serverfault.com/a/744756/123651), но по-прежнему выдает ошибку.

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 release 6.8 (Final)

2
задан 13 April 2017 в 15:14
4 ответа

Нет необходимости разрешать OpenDKIM писать в любые другие каталоги. Просто напишите во временный каталог по умолчанию, / var / run / opendkim , который уже должен существовать и иметь правильный контекст SELinux, позволяющий записывать в него.

3
ответ дан 3 December 2019 в 10:36

Я думаю, что то, что сказал Майкл Хэмптон ♦ , является лучшим решением.

Но что, если вам действительно нужно установить Temporary на / var / tmp

Тогда вы можете попробовать следующее.

  1. Нам нужно изменить политику, которая изначально была у dkim_milter_t . Итак, создайте файл .te (пример opendkim.te ниже)

  2. Пусть 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 /

  1. , повторное создание opendkim.pp вручную

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

    semodule_package -o opendkim.pp -m opendkim.mod

  2. Разрешить изменение

    semodule -i opendkim.pp

Возможно, вам потребуется дополнительная помощь здесь . И для человек .

0
ответ дан 3 December 2019 в 10:36

Во-первых, пакет 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, чтобы использовать этот вновь созданный каталог, который выходит за рамки этого ответа.

3
ответ дан 3 December 2019 в 10:36
# 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
-3
ответ дан 3 December 2019 в 10:36

Теги

Похожие вопросы