GNU/Linux → Запуск BIND9 в chroot з AppArmor

Нещодавно вирішив на домашньому сервері налаштувати власний сервер DNS, так як уже трохи набридло прописувати в hosts усі нові сайти, що розробляються. Зупинився на bind9, в гуглі знайшлося багато мануалів, але усюди були нюанси, й щоб не забути про них, пишу нотатку.

У більшості прикладів bind запускався в chroot, для прокачування навичок я зробив так само. Нагадую, що у мене на сервері ubuntu 10.04, тому всі дії описані для неї.
Встановлюємо bind і зупиняємо його

root:~# aptitude install bind9 dnsutils
root:~# /etc/init.d/bind9 stop

Тепер налаштовуємо оточення chroot

root:~# mkdir -p /var/chroot/bind9/{etc,dev,var/cache/bind,var/run/bind/run,var/log,var/cache/bind/master,var/cache/bind/slave}
root:~# mknod /var/chroot/bind9/dev/null c 1 3
root:~# mknod /var/chroot/bind9/dev/random c 1 8
root:~# mv /etc/bind /var/chroot/bind9/etc
root:~# ln -s /var/chroot/bind9/etc/bind /etc/bind
root:~# ln -s /var/chroot/bind9/var/log /var/log/named
root:~# ln -s /var/chroot/bind9/var/cache/bind/master /var/chroot/bind9/etc/bind/master
root:~# ln -s /var/chroot/bind9/var/cache/bind/slave /var/chroot/bind9/etc/bind/slave
root:~# chmod 666 /var/chroot/bind9/dev/null /var/chroot/bind9/dev/random
root:~# chown -R bind:bind /var/lib/named/var/*
root:~# chown -R bind:bind /var/lib/named/etc/bind
root:~# cp /usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libgost.so /var/chroot/bind9/usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libgost.so

Створюємо файл /etc/rsyslog.d/bind-chroot.conf

root:~# cat /etc/rsyslog.d/bind-chroot.conf
$AddUnixListenSocket /var/chroot/bind9/dev/log

Вносимо зміни в /etc/default/bind9

root:~# cat /etc/default/bind9
# run resolvconf?
RESOLVCONF=yes# startup options for the server
OPTIONS=”-u bind -t /var/chroot/bind9″

Для того, щоб в логах був правильний час, виконуємо

root:~# cp /etc/localtime /var/chroot/bind9/etc/

Тепер перезапускаємо rsyslog і запускаємо bind9

root:~# /etc/init.d/rsyslog restart
root:~#/etc/init.d/bind9 start

Все вищезазначене, це збірка з різноманітних мануалів, після виконання даних процедур я спостерігав, як bind9 відмовляється запускатися взагалі.

Першим ділом шукаємо причину

root:~# tail -50 /var/log/syslog

Не пригадую помилку дослівно, але bind повідомляв, що йому заборонений доступ до його ж файлів конфігурації, тому стартувати він не буде. Ще трохи гугла й стає зрозуміло, що причиною всього є AppArmor.

Я не є спеціалістом в безпеці linux, тому важко судити наскільки доцільно використовувати одночасно chroot та apparmor (адже служать вони одній меті), але оскільки сумістити ці два захисти можливо — я так і роблю.

Відкриваємо /etc/apparmor.d/usr.sbin.named і додаємо в кінець

/var/chroot/bind9/etc/bind/* r,
/var/chroot/bind9/dev/random r,
/var/chroot/bind9/var/run/named/* rw,
/var/chroot/bind9/var/log/named/** rw,
/var/chroot/bind9/etc/localtime r,
/var/chroot/bind9/usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libgost.so mr,

Перезапускаємо AppArmor

root:~# /etc/init.d/apparmor restart

Після цього bind успішно завантажується, але не веде логів, зовсім. Тому останнім штрихом вносимо зміни в named.conf.options

logging {
    channel update_debug {
	file "/var/log/named/named_update.log";
	severity debug 5;
	print-time yes;
	print-severity yes;
	print-category yes;
    };
    channel security_info {
	file "/var/log/named/named_auth.log";
	severity notice;
	print-time yes;
	print-severity yes;
	print-category yes;
    };
    channel info {
	file "/var/log/named/named_info.log";
	severity info;
	print-time yes;
	print-severity yes;
	print-category yes;
    };

    category update { update_debug; };
    category security { security_info; };
    category queries { info; };
};

P.S.
Далі планую написати скріпт автоматичного додавання нового хоста в конфіги nginx, apache, bind9, створення БД та дерева каталогів проекту.

Теги: , , , ,
01.12.2011 21:48 Автор: Strange_V Хіти: 677

Коментарів 5
  • Я б для таких цілей вибрав powerdns.
    Бонуси: легший, простіше ставиться, тримає всі настройки у БД, і має веб гуі.

    • bind, якщо не використовувати chroot, ставиться однією командою, ну й це стандарт де-факто як на мене.
      Стараюсь вибирати складніші рішення, той же nginx мені на домашньому сервері в принципі й не потрібен, але є.

      • Ну тоді по логіці замість nginx мав би бути дефакто апач. (:
        Але тут, як кажуть, на смак і колір всі фломастери різні.

        • nginx де-факто на усіх хостингах)
          але так, про фломастери то чиста правда =)

          • http://w3techs.com/technologies/details/ws-nginx/all/all
            Так, це супер рішення для впсів та інших “порізаних” хостингів.
            Але я б з “всіх” не розписувався.

            І так, він супер класний для роботи зі статикою, сам його для кешування використовую.

Напишіть відгук