Назад | Перейти на главную страницу

В разрешении OpenDKIM отказано

Я установил opendkim на CentOS 6 и установил TemporaryDirectory к /var/tmp в opendkim.conf Файл конфигурации. После перезапуска службы и попытки отправить электронное письмо я получаю сообщение об ошибке в журнале постфиксов, которое гласит

opendkim[27392]: F2C3E20509: dkim_eoh(): resource unavailable: can't create temporary file at /var/tmp/dkim.F2C3E20509.FiOvYB: Permission denied

Итак, я заглянул в разрешения папки tmp (ls -l /var/) и они являются

drwxrwxrwt.  2 root root 4096 Nov 23 20:42 tmp

Насколько я понимаю, каждый должен иметь возможность писать в /var/tmp папка. Почему Permission denied сообщение об ошибке вернулось?

  • Обновленный ответ *

Перейти к /etc/opendkim.conf и измените эту строку:

TemporaryDirectory /var/tmp

кому:

TemporaryDirectory /var/run/opendkim

И перезапустите свои почтовые службы (например

# service opendkim restart
# chkconfig opendkim on
# service postfix restart

У вопроса уже было решение Вот

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

Вот это решение избегать эта проблема в SELinux.)

Так. Очень старая ветка, не поддающаяся разрешению. И примерно несколько дней назад я нашел эту тему, так как ive столкнулся с той же проблемой и решил ее с помощью решения Дедгара.

И вы можете попробовать ниже, что, если вы действительно хотите установить Temporary к /var/tmp

журнал выглядит так:

opendkim[46233]: E9A563F480: dkim_eoh(): resource unavailable: can't create temporary file at /var/tmp/dkim.E9A563F480.IjgWhi: Permission denied

И как сказала Хлоя. это ошибка SELinux, потому чтоeverbody should be able to write into the /var/tmp folder

Проверить файл журнала # grep opendkim /var/log/audit/audit.log Получил:

...
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
...

Как сказал Дедгар, похоже, что у opendkim отсутствует политика, которая может создавать файл из tmp файл. Итак, сначала проверьте тип каталога

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

тогда проверьте, если opendkim иметь разрешение на доступ /var/tmp

# 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

Результат может выглядеть так:

... разрешить демону puppet_tmp_t: file {ioctl read write getattr lock append}; разрешить dkim_milter_t tmp_t: file {написать создать удалить ссылку открыть}; разрешить dkim_milter_t tmp_t: dir {написать add_name remove_name}; разрешить домен tmp_t: dir {getattr search open}; ...

Уведомление о линии

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

Это почти говорит об использовании dkim_milter_t иметь разрешение на доступ к каталогам с типом tmp_t лайк /var/tmp,

Но в большинстве случаев у нас нет этого строкового вывода, или эта конфигурация вообще не работает, или другой случай ...

Итак, нам нужно добавить политику, которая дает разрешение на политику dkim_milter_t который opendkim использовать для доступа к файлу или каталогам type tmp_t. И самый простой способ - использовать audit2allow как выразился Дедгар:

grep opendkim /var/log/audit/audit.log | audit2allow -M opendkim
semodule -i opendkim.pp

он сгенерирует политику SELinux, чтобы сделать что-то раньше. Но точно не знаю, что это не сработает в случае с Хлоей. Ставьте мой 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 };

А что, если вам нужно регенерировать файл (для этого opendkim.pp) вручную.

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

И semodule -i opendkim.pp для того, что вам нужно.

По моему опыту, это вызвано отсутствующей политикой SELinux. Вы можете получить ошибку с подробным описанием отсутствующих разрешений из журнала аудита и использовать ее для создания пакета модуля SELinux с:

grep opendkim /var/log/audit/audit.log | audit2allow -M opendkim

Опция -M обозначает имя пакета модуля, вы можете назвать его как-нибудь, если хотите. Эта команда сгенерирует два файла: opendkim.pp, который представляет собой фактический пакет модуля selinux, и opendkim.te, текстовый файл, показывающий, какие политики содержит пакет модуля.

Если политики выглядят хорошо, импортируйте пакет модуля с помощью:

semodule -i opendkim.pp