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

Unbound не может читать файлы сертификатов для DNS-over-TLS, получает сообщение «Permission denied»

Я пытаюсь настроить DNS-over-TLS (DoT) с помощью несвязанный резольвер. т.е. я пытаюсь зашифровать соединение между клиентом и несвязанным. Я НЕ пытаюсь зашифровать несвязанный преобразователь → восходящее соединение, о чем говорят многие руководства в Интернете.

У меня есть следующее в файле конфигурации, как описано на странице руководства, а также описано Вот:

 server:
   interface: 0.0.0.0@853

   tls-port: 853
   tls-service-key: "/etc/letsencryp/live/DOMAIN/privkey.pem"
   tls-service-pem: "/etc/letsencryp/live/DOMAIN/fullchain.pem"

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

package-helper[778]: /var/lib/unbound/root.key has content
package-helper[778]: success: the anchor is ok
unbound[813]: [1586107523] unbound[813:0] error: error for cert file: /etc/letsencryp/live/DOMAIN/fullchain.pem
unbound[813]: [1586107523] unbound[813:0] error: error in SSL_CTX use_certificate_chain_file crypto error:0200100D:system library:fopen:Permission denied
unbound[813]: [1586107523] unbound[813:0] error: and additionally crypto error:20074002:BIO routines:file_ctrl:system lib
unbound[813]: [1586107523] unbound[813:0] error: and additionally crypto error:140DC002:SSL routines:use_certificate_chain_file:system lib
unbound[813]: [1586107523] unbound[813:0] fatal error: could not set up listen SSL_CTX
systemd[1]: unbound.service: Main process exited, code=exited, status=1/FAILURE

Я пробовал переместить файлы из этого каталога и экспериментировал с настройкой root или unbound как собственник. Единственный способ заставить его работать - это поместить файлы прямо в /etc/unbound/ каталог. Символическая ссылка в том же месте, указывающая на управляемые файлы letsencrypt, также не работала. Это не идеально, поскольку мне нужно будет регулярно копировать файлы сертификатов из каталога letsencrypt всякий раз, когда происходит обновление сертификата и / или без необходимости перезапускать преобразователь DNS.

Я тщательно проверил, что chroot не настроен в файлах конфигурации, настройках по умолчанию или скомпилирован в двоичном формате. Фактически, он был явно отключен по умолчанию в Debian (отчет об ошибке)

Как может несвязанный быть неспособным читать файлы, что прямо здесь, с unbound:unbound как владелец: группа, а разрешения установлены как читаемые?

Я использую несвязанную версию 1.9.0-2 + ​​deb10u1 на Debian buster (10), если это важно.

Это не permission проблема сама по себе, так как Unbound читает файлы как root, прежде чем терять привилегии. Вы можете оставить файлы сертификатов letsencrypt как root:root и они все равно будут работать.

Что мешает unbound читать сертификаты, так это AppArmor. Debian (и многие другие дистрибутивы) ограничивают двоичные файлы сервера в целях безопасности. Вы можете увидеть конфигурацию AppArmor по умолчанию на /etc/apparmor.d/usr.sbin.unbound, это не позволяет читать за пределами /etc/unbound, /var/lib/unbound/, /etc/openssl(через #include <abstractions/openssl> директива) и некоторые другие каталоги. Поскольку ваши сертификаты letsencrypt находятся в другом каталоге, они недоступны для отмены привязки, даже если запущены от имени пользователя root.

Вы можете обойти это, разрешив несвязанным читать файлы сертификатов (и «живые» ссылки, указывающие на них). Вот конфигурация локального переопределения для AppArmor, этот файл включен из основного файла.

$ cat /etc/apparmor.d/local/usr.sbin.unbound
/etc/letsencrypt/archive/** r,
/etc/letsencrypt/live/** r,

После изменения этого файла вам необходимо активировать изменения, запустив:

$ apparmor_parser --replace /etc/apparmor.d/usr.sbin.unbound

Как только вы выполните эти шаги, у несвязанного не должно возникнуть проблем с чтением ключевого материала.

Вы можете получить дополнительную информацию об AppArmor из Хорошее руководство Ubuntu