Вопрос или проблема
Меня беспокоит простая ошибка разрешений. Исследования показывают, что это всё, что есть, и я не уверен, какие правильные разрешения должны быть установлены. Странным образом BIND указывает на успех И разрешает запросы для узлов в файле зоны. Вот как это выглядит:
Primary
Jun 15 23:48:28 dns1 named[1151]: zone 127.in-addr.arpa/IN: loaded serial 1
Jun 15 23:48:28 dns1 named[1151]: zone 255.in-addr.arpa/IN: loaded serial 1
Jun 15 23:48:28 dns1 named[1151]: zone example.com/IN: loaded serial 2017061503
Jun 15 23:48:28 dns1 named[1151]: zone localhost/IN: loaded serial 2
Jun 15 23:48:28 dns1 named[1151]: all zones loaded
Jun 15 23:48:28 dns1 named[1151]: running
Jun 15 23:48:28 dns1 named[1151]: zone 40.0.10.in-addr.arpa/IN: sending notifies (serial 2017061502)
Jun 15 23:48:28 dns1 named[1151]: zone example.com/IN: sending notifies (serial 2017061503)
Jun 15 23:48:28 dns1 named[1151]: client 10.0.40.89#60405 (example.com): transfer of 'example.com/IN': AXFR-style IXFR started (serial 2017061
Jun 15 23:48:28 dns1 named[1151]: client 10.0.40.89#60405 (example.com): transfer of 'example.com/IN': AXFR-style IXFR ended
Secondary
Jun 15 23:48:28 dns2 named[1138]: client 10.0.40.88#59749: received notify for zone 'example.com'
Jun 15 23:48:28 dns2 named[1138]: zone example.com/IN: notify from 10.0.40.88#59749: serial 2017061503
Jun 15 23:48:28 dns2 named[1138]: zone example.com/IN: Transfer started.
Jun 15 23:48:28 dns2 named[1138]: transfer of 'example.com/IN' from 10.0.40.88#53: connected using 10.0.40.89#60405
Jun 15 23:48:28 dns2 named[1138]: zone example.com/IN: transferred serial 2017061503
Jun 15 23:48:28 dns2 named[1138]: zone example.com/IN: transfer: could not set file modification time of '/etc/bind/zones/db.example.com': permission denied
Jun 15 23:48:28 dns2 named[1138]: transfer of 'example.com/IN' from 10.0.40.88#53: Transfer status: success
Jun 15 23:48:28 dns2 named[1138]: transfer of 'example.com/IN' from 10.0.40.88#53: Transfer completed: 1 messages, 7 records, 199 bytes, 0.001 secs (199000 by
Jun 15 23:48:28 dns2 named[1138]: zone example.com/IN: sending notifies (serial 2017061503)
Jun 15 23:48:28 dns2 named[1138]: dumping master file: /etc/bind/zones/tmp-dvJaLDDA7o: open: permission denied
root является владельцем, так что я немного озадачен.
chris@dns2:~$ ls -la /etc/bind/zones
total 12
drwxr-sr-x 2 root bind 4096 Jun 16 08:54 .
drwxr-sr-x 3 root bind 4096 Jun 15 23:12 ..
-rw-r--r-- 1 root bind 270 Jun 15 23:05 db.target.lab
chris@dns2:~$
Я решаю эту проблему, изменив правила apparmor
в /etc/apparmor.d/usr.sbin.named
.
Я отредактировал файл и изменил строку:
/etc/bind/** r,
на
/etc/bind/** rw,
и затем:
service apparmor restart
service bind9 restart
Это изменение также предотвращает ошибки отказа в разрешении при сохранении файлов в /etc/bind/slave
.
Следуя ответу @estibordo, я заметил ссылку на README DEBAIN. Так что я посмотрел. Ондрей (основной пакетный maintainer пишет):
Конфигурационный файл named.conf находится в /etc/bind, чтобы все статические конфигурационные файлы, относящиеся к bind, находились в одном месте. Если вы действительно не хотите, чтобы named.conf находился в /etc/bind, то лучший способ справиться с этим – вероятно, заменить /etc/bind/named.conf символической ссылкой на тот путь, который вы хотите использовать. Вы также можете использовать опцию для named в скрипте init.d, но это работает только для named, а не для таких вещей, как ndc.
Это заставило меня подумать, что лучший способ решить эту проблему – изменить конфигурационный файл, чтобы он читал файлы из /var/lib/bind и использовал символические ссылки в /etc/bind, чтобы указывать на те, которые находятся в /var/lib/bind.
Для полной раскрытия информации: я пользователь Debain. Но я не вижу, почему это не должно работать на Ubuntu. 🙂
Вы должны изменить владельца на пользователя bind, потому что тот, кто записывает файлы, это служба.
cd /etc
chown -R bind bind
Ответ или решение
Исправление ошибки при работе с BIND: Ошибка доступа к файлам зоны
Введение
Ошибка "Zone AFXR fails on permission error – dumping master file: /etc/bind/zones/tmp-yVIchKNnUC: open: permission denied" указывает на проблему с правами доступа, возникающую при попытке сервиса BIND (Berkeley Internet Name Domain) записать или модифицировать файлы зон. Хотя в ваших логах указано, что зоны загружены успешно и разрешаются запросы, это не исключает возможности возникновения проблем при попытке записи в определенные файлы.
Анализ проблемы
В вашем случае основная проблема заключается в неправильных правах доступа к директории и файлам, используемым BIND для хранения данных зон. Подобные ошибки чаще всего обусловлены тем, что сервис BIND (с идентификатором пользователя bind
) не имеет необходимых разрешений для записи в указанные каталоги.
Ваша команда ls -la /etc/bind/zones
показывает, что файлы зон принадлежат пользователю root
и группе bind
:
-rw-r--r-- 1 root bind 270 Jun 15 23:05 db.target.lab
Это означает, что пользователь bind
может читать файлы, но не может их изменять или создавать новые. Правильная практика заключается в том, чтобы изменять владельца и права доступа к файлам и директориям, чтобы сервис мог выполнять свои функции без ошибок.
Решение проблемы
-
Изменение владельца файлов: Наиболее оптимальным решением является изменение владельца файлов на пользователя
bind
, так как он является пользователем, под которым работает служба DNS. Используйте следующую команду для смены владельца:sudo chown -R bind:bind /etc/bind/zones
-
Проверка прав доступа: Убедитесь, что права доступа к файлам корректны. Параметры
rw-r--r--
указывают на то, что только владелец (в данном случаеroot
), может менять файл, а группа и другие пользователи только читают его. Чтобы изменить права доступа и разрешить пользователюbind
записывать данные, используйте:sudo chmod -R 775 /etc/bind/zones
После выполнения этой команды группа
bind
(к которой принадлежит пользовательbind
) также получит права на запись. -
Использование AppArmor: Если вы используете AppArmor, убедитесь, что конфигурация службы
named
(BIND) позволяет запись в указанные директории:-
Откройте файл конфигурации AppArmor для
named
:sudo nano /etc/apparmor.d/usr.sbin.named
-
Измените строку:
/etc/bind/** r,
на
/etc/bind/** rw,
-
Перезапустите службы AppArmor и BIND для применения изменений:
sudo service apparmor restart sudo service bind9 restart
-
-
Оптимизация структуре каталогов: Рекомендуется переместить файлы зон в
/var/lib/bind
с последующим установлением символических ссылок из/etc/bind
. Это позволит лучше следовать рутинным стандартам хранения данных и избежать проблем с правами доступа.sudo mv /etc/bind/zones/* /var/lib/bind/ sudo ln -s /var/lib/bind/* /etc/bind/zones/
Заключение
Проблемы с правами доступа могут создавать значительные неудобства при работе с BIND. Однако, соблюдая правильные меры по управлению пользователями, правами доступа и конфигурацией служб, можно избежать возникновение таких проблем. Ваша текущая конфигурация, адаптированная к стандартам работы с BIND, поможет обеспечить надёжность и безопасность работы DNS-сервиса в вашей среде.