На моей системе CentOS 7 я пытаюсь запустить dovecot с требуемым TLS. Для этого я создал приватный ключ и сертификат в
[root@homeserver /]# ls -lZ indernet/cert/homeserver.*
-r--r--r--. root certuser system_u:object_r:default_t:s0 indernet/cert/homeserver.crt
-r--r-----. root certuser system_u:object_r:default_t:s0 indernet/cert/homeserver.key
[root@homeserver /]#
Чтобы dovecot действительно загрузил файлы, я убедился, что /etc/dovecot/conf.d/10-ssl.conf содержит следующие строки:
ssl=required
ssl_key=</indernet/cert/homeserver.key
ssl_cert=</indernet/cert/homeserver.crt
Проблемная часть: Dovecot не может запуститься, он отказывается с этой ошибкой:
dovecot: doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-ssl.conf line 14: ssl_key: Can't open file /indernet/cert/homeserver.key: Permission denied
Я пытался изменить разрешения файлов сертификата и ключа (это не должно требоваться согласно https://doc.dovecot.org/configuration_manual/dovecot_ssl_configuration/), даже до 777, и ничего не меняется. Кто-то подсказал мне, что это может быть SELinux, препятствующий доступу, и я настроил unconfined_u:object_r:default_t:s0, а также system_u:object_r:default_t:s0, как вы можете видеть выше. Без изменений.
Теперь удивительная часть: Мне стало очень любопытно и я отредактировал /usr/lib/systemd/system/dovecot.service, чтобы он содержал
ExecStart=/bin/strace /usr/sbin/dovecot
и затем в /var/log/messages я увидел, что сертификат и ключ получают доступ и загружаются. И dovecot работает. Но когда я снова удаляю strace, я остаюсь с той же проблемой.
Что здесь может происходить?
Ключи не могут быть прочитаны, так как SELinux запретил доступ к ним.
Чтобы устранить проблему, скопируйте (используя cp
или mv -Z
) ключи в каталог, где SELinux ожидает хранения ключей и сертификатов TLS. , то есть /etc/pki/tls
и его подкаталоги. Новые файлы будут иметь правильные контексты SELinux, если вы использовали cp
или mv -Z
. Затем обновите расположение файлов в конфигурации Dovecot.