Служба имён не загружает зону: нет прав или ошибка в файле
Службе имён нужен доступ не только к файлу зоны, но и к каталогу: при динамических обновлениях она создаёт рядом журнал изменений. Права только на файл дают отказ, который выглядит как ошибка в самой зоне.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Нет права записи в каталог зоны
При динамических обновлениях служба создаёт журнал изменений рядом с файлом зоны. Без права записи в каталог загрузка отказывает.
-
Ошибка в файле зоны
Служба проверяет файл при загрузке. Неверная запись или отсутствие обязательных полей отклоняют зону целиком.
-
Серийный номер зоны не увеличен
Без увеличения серийного номера подчинённые серверы не заберут изменения. Зона расходится между серверами.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Проверка настроек службы имён.
sudo named-checkconf 2>&1 | tail -5Проверка конкретного файла зоны.
sudo named-checkzone example.org /etc/bind/zones/db.example.org 2>&1 | tailСообщения службы о загрузке зон.
journalctl -u named -u bind9 -n 30 --no-pager 2>/dev/nullРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- При динамических обновлениях служба создаёт журнал изменений рядом с файлом зоны. Без права записи в каталог загрузка отказывает.
- Как проверить
-
Посмотрите права каталога и пользователя службы.
sudo ls -ld /var/lib/bind /etc/bind/zones 2>/dev/null systemctl show named -p User 2>/dev/null || systemctl show bind9 -p User 2>/dev/null
- Как исправить
- Держите изменяемые зоны в каталоге, доступном службе для записи. Статические зоны можно оставить только для чтения.
- Почему происходит
- Служба проверяет файл при загрузке. Неверная запись или отсутствие обязательных полей отклоняют зону целиком.
- Как проверить
-
Проверьте файл зоны отдельной командой.
sudo named-checkzone example.org /etc/bind/zones/db.example.org 2>&1 | tail -5
- Как исправить
- Исправьте ошибку по сообщению проверки. Проверять зону стоит до перезагрузки службы: иначе зона выпадет из обслуживания.
- Почему происходит
- Без увеличения серийного номера подчинённые серверы не заберут изменения. Зона расходится между серверами.
- Как проверить
-
Сравните серийные номера на серверах.
dig @localhost example.org SOA +short 2>/dev/null dig @подчинённый example.org SOA +short 2>/dev/null
- Как исправить
- Увеличивайте серийный номер при каждой правке зоны. Это единственный признак изменения, на который смотрят подчинённые серверы.
Пример вывода
Нет права записи в каталог зоны. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
named[12900]: zone example.org/IN: loading from master file /etc/bind/zones/db.example.org failed: permission denied
named[12900]: zone example.org/IN: not loaded due to errors.
named[12900]: /etc/bind/named.conf.local:12: journal rollforward failed: create failed
Связанные ошибки
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- BIND: порт 53 занят systemd-resolved named не может занять порт 53: его держит локальный разрешатель имён. Как развести их по адресам.
- dnsmasq: failed to create listening socket for port 53 Порт 53 занят встроенной службой разрешения имён. Как развести dnsmasq и systemd-resolved.
- AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
- Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
- Interactive authentication required при управлении службой systemctl требует аутентификации: обращение от непривилегированного пользователя через polkit. Как разрешить точечно.
Где встречается чаще всего
Источники
-
named-checkzone(8)
Проверка файлов зон до загрузки. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено каталогом зоны без права записи для службы.