Невозможно запустить Bind open: /etc/ named.conf: доступ запрещен

так что я действительно новичок в этом и следил за this учебник по настройке привязки, и до 4:50 у меня не было проблем, я мог пинговать, использовать nslookup и иметь подключение к Интернету с DNS-сервером, затем нам пришлось добавить зоны и создать файлы зон (просто создание их), отлично, я перезапускаю, чтобы увидеть, есть ли проблемы (я использую виртуальную машину, кстати), тогда я больше не мог пинговать, использовать nslookup, и у меня даже не было подключения к Интернету. Это то, что я получил, используя systemctl status

Redirecting to /bin/systemctl status  -l named.service
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor prese$
   Active: failed (Result: exit-code) since jue 2019-04-25 23:14:30 -04; 3min 3$
  Process: 3355 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "y$

abr 25 23:14:30 linux bash[3355]: _default/0.168.192.in-addr.arpa/IN: bad zone
abr 25 23:14:30 linux bash[3355]: zone localhost.localdomain/IN: loaded serial 0
abr 25 23:14:30 linux bash[3355]: zone localhost/IN: loaded serial 0
abr 25 23:14:30 linux bash[3355]: zone 
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.$
abr 25 23:14:30 linux bash[3355]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial$
abr 25 23:14:30 linux bash[3355]: zone 0.in-addr.arpa/IN: loaded serial 0
abr 25 23:14:30 linux systemd[1]: named.service: control process exited, code=e$
abr 25 23:14:30 linux systemd[1]: Failed to start Berkeley Internet Name Domain$
abr 25 23:14:30 linux systemd[1]: Unit named.service entered failed state.
abr 25 23:14:30 linux systemd[1]: named.service failed.

. Я подумал, что это из-за пустых файлов зон, поэтому я заменил named.conf без зон, попытался перезапустить с перезапуском службы named, но получил (снова):

Failed to start BIND : Redirecting to /bin/systemctl start named.service Job 
for named.service failed because the control process exited with error code.
See "systemctl status named.service" and "journalctl -xe" for details.

Итак Я сделал

● named.service - Berkeley Internet Name Domain (DNS)
 Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since jue 2019-04-25 23:25:30 -04; 1min 3s ago
  Process: 5557 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=1/FAILURE)
  Process: 5552 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)

abr 25 23:25:30 linux named[5559]: found 2 CPUs, using 2 worker threads
abr 25 23:25:30 linux named[5559]: using 2 UDP listeners per interface
abr 25 23:25:30 linux named[5559]: using up to 21000 sockets
abr 25 23:25:30 linux named[5559]: loading configuration from '/etc/named.conf'
abr 25 23:25:30 linux named[5559]: open: /etc/named.conf: permission denied
abr 25 23:25:30 linux named[5559]: loading configuration: permission denied
abr 25 23:25:30 linux systemd[1]: named.service: control process exited, code=exited status=1
abr 25 23:25:30 linux systemd[1]: Failed to start Berkeley Internet Name Domain (DNS).
abr 25 23:25:30 linux systemd[1]: Unit named.service entered failed state.
abr 25 23:25:30 linux systemd[1]: named.service failed.

Это проблема с разрешением, но раньше она работала отлично, поэтому я в растерянности.

Это то, что я получаю, выполняя ls -l /etc/ named.conf:

-rw-r-----. 1 root root 1808 abr 25 15:13 /etc/named.conf

И вот тогда я выполните ls -Z /etc/ named.conf (если он имеет какое-то отношение к selinux):

 -rw-r-----. 1 root root unconfined_u:object_r:etc_t:s0 /etc/named.conf

Не уверен, что это поможет, но вот имя файла.conf

options {
    listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { ::1; };
        directory   "/var/named";
        dump-file   "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        allow-query     { localhost; };

    recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
    channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
    type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

У меня также нет папки chroot в / etc / named /
Есть ли решение для этого? Благодарю.

2
задан 28 April 2019 в 19:18
5 ответов

когда я заменил named.conf контекст selinux был испорчен, при выполнении ls -Z он должен выглядеть так

-rw-r--r--. root root system_u:object_r:named_conf_t:s0 named.conf

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

restorecon -RFv /etc/named.conf

С этим, однако, выполнение ls -Z дало мне это

-rw-r-----. root root system_u:object_r:named_conf_t:s0 named.conf

Чтобы добавить последний 'r', чтобы все могли его прочитать, я сделал

chmod 644 /etc/named.conf

Остановил названную службу и перезапустил ее, и она снова работает.

2
ответ дан 3 December 2019 в 10:31

В CentOS 7 привязка запускается по умолчанию от имени пользователя с именем , а не от пользователя root , поэтому он не может прочитать ваш named.conf, поскольку он принадлежит root и доступен для чтения только root .

Как уже прокомментировал Хокан Линдквист, разрешения в CentOS 7 должны выглядеть следующим образом:

-rw-r-----. 1 root named 10672 04-09 20:02 /etc/named.conf

так и сделайте:

# chown root:named /etc/named.conf
# chroot 640 /etc/named.conf
1
ответ дан 3 December 2019 в 10:31

Я бы попросил вас проверить журналы аудита, и если вы используете какую-либо дополнительную файловую систему acl, проверьте и эти журналы. Если вы думаете, что это проблема SELinux, отключите и попробуйте снова, если это сработает у вас необходимо исправить политики selinux. пожалуйста, проверьте https://www.systutorials.com/docs/linux/man/8-bind_selinux/ для ссылки на привязку selinux.

0
ответ дан 3 December 2019 в 10:31

То же самое: но с Debian 10 ISC Bind 9.11.5.

Предварительный контрольный список

Я предоставляю контрольный список, чтобы убедиться, что остальная часть сообщения неприменима. Вы можете проверить следующие каталоги на предмет каких-либо ошибочных настроек конфигурации пути PID для Bind9 / named.

  • / etc / default / named (или / etc / default / bind9 ) для PIDFILE =
  • /etc/ named/ named.conf (или любого другого включают файлы конфигурации) для pid-file =
  • /etc/systemd/system/bind9.conf для PIDfile =

Подробности, подробности, подробности

Один раз выше контрольный список готов ... вы можете перейти в конец этого TL; DR к разделу Временное решение для получения мгновенного решения.

Сообщение журнала частичных ошибок «could mkdir» найдено только в исходном файле bind9 / named / unix / os.c : ближайшая ссылка на строку находится в ISC Bind9 Github .

После ознакомления с исходным кодом для использования mkdirpath () и подтверждения того, что mkdirpath () используется только в bind9 / named / unix / os.c исходный код, я понял, что разработчики ISC не использовали более новый метод защиты разрешений групповых файлов без полномочий root ... но поскольку код все еще жестко запрограммирован для того, чтобы именованный демон работал только как ' root 'группа, а не в' bind '(или' named ') группе ... пока.

Это особенно верно в Debian при запуске демона tmpfiles (через systemctl start tmpfilesd ), где управление / var / run (точнее, / run ) управляется демоном tmpfiles (а не именованным демоном).

В параметрах CLI моего именованного демона есть опция -u bind , которая конфликтует с жестко запрограммированным «корнем».

Мы знаем, что named_os_issingleton () не является вызывающим для mkdirpath () , потому что в выводе журнала отсутствует тот второй журнал ошибок «не удалось создать: ...».

Остается одинокий вызывающий named_os_openfile () вызов mkdirpath (). И он вызывается в двух местах:

  • server.c (для сохранения ключа в файл ключа)
  • os.c (для записи файла PID)

Мы знаем, что это не server.c, потому что существует нет 2-го сообщения об ошибке в нашем файле журнала.

На данный момент мы можем только предполагать, что у него проблемы с записью PID-файла. Я не удивлен, что Debian решил убрать часть / var из своего обычного /var/run/ named.pid . Этого и следовало ожидать, учитывая новейший стандарт файловой системы Linux 3.0, подробные подробности можно найти здесь .

Как и вы, я тоже изменил этот каталог PID-файла с « / run / named » на « / run / bind » (или, точнее, « / run / bind-public ', потому что я запускаю несколько именованных демонов в режиме конфигурации хоста-бастиона). И КТО-ТО все еще застрял на с именем в качестве имени подкаталога, даже несмотря на то, что мы изменили его на bind .

На данный момент выполняется обратная трассировка вручную:

  • mkdirpath ()
  • named_os_openfile ()
  • named_os_writepidfile ()

Повторно просматривая server.c , вы будете заметил, что определение named_g_defaultpidfile жестко запрограммировано на « / run / named », несмотря на все наши попытки перенастроить его на что-то другое. Он определен в globals.h ( здесь ).

Обходной путь

Обходной путь: ... создать подкаталог / run / named , чтобы подделать код привязки ISC во время запуска

   mkdir /run/named
   chown root:bind /run/named
   chmod u+rwx,g+rx-w,o-rwx /run/named

и «игнорировать его» на данный момент.

Но ... также, если вы запускаете демон tmpfiles при запуске, вам, вероятно, придется сделать это в /etc/tmpfiles.d/ named.conf (или bind.conf или, в моем случае, /etc/tmpfiles.d/bind-public.conf ):

#Type Path                 Mode User Group Age Argument

# We set the 2xxx part (g+s) of directories' chmod so
# that when the named/bind9 daemon creates 
# that PID file, its ownership would be bind:bind.
d  /run/bind           2770 root bind  - -

# Add the following line to suppress spurious log message    
d  /run/named          0750 root bind  - -

После создания надоедливый журнал пропал.

0
ответ дан 15 January 2020 в 20:24

У меня была похожая проблема с некоторыми новыми скриптами, которые загружают обновления на локальные машины. Эти команды будут выполняться как «named» и позволят вам увидеть несколько простых ответов:

runuser -u named -- /usr/sbin/named-checkconf -z /etc/named.conf runuser -u named -- /usr/sbin/named-checkzone mydomain.internal /var/named/chroot/var/named/internal/mydomain.internal runuser -u named -- /usr/bin/ls -l /var/named/chroot/var/named/internal/

При необходимости вы можете изменить пути.

0
ответ дан 31 December 2020 в 16:10

Теги

Похожие вопросы