Использование chroot

Команда chroot позволяет выполнять приложения в, так называемом, изолированном окружении. Обычно это используется для запуска служб, требующих привелегий суперпользователя, или приложений, в которых риск наличия уязвимостей достаточно велик. Системный вызов chroot изменяет корневой каталог для процесса, из которого был вызван, и всех потомков данного процесса. После этой операции процесс и его потомки не могут получить доступ к файловой системе за пределами выбранного каталога, кроме как обращаясь к устройствам. Стоит обратить внимание, что изоляция касается исключительно файловой системы. Изоляции процессов в оперативной памяти в данном случае не происходит.

В качестве примера рассмотрим DNS-сервер --- BIND. Уязвимости в BIND встречаются не очень часто, но получить информацию о них вовремя (заранее) и бесплатно невозможно. Таким образом, BIND потенциально опасен. В документации обычно предполагается, что конфигурационные файлы BIND размещены в /etc и /var. В ALTLinux часть конфигурационных файлов расположена в других каталогах. Естественно, все необходимые для работы каталоги включаются в изолированное окружение, в котором запускается приложение. Корневым каталогом для BIND в ALTLinux является /var/lib/bind. Все файлы, необходимые для полноценной работы DNS сервера, находятся в /var/lib/bind. Так как BIND запускается из обычного окружения, и сначала загружает динамические библиотеки, а затем самостоятельно вызывает chroot, необходимость помещать библиотеки в изолированное окружение отсутствует.

Настройка DNS

Как рассказывалось ранее, DNS служит для преобразования символьных имен в IP-адреса и обратно. DNS имеет иерархическую структуру. У каждой зоны есть свой DNS-сервер, кроме того, в каждой сети должна быть зарегистрирована служба, преобразующаяся IP-адрес в доменное имя (обратный DNS). Существует два способа использования доменных имён:

  • Домен, зарегистрированный за провайдером. В этом случае пользователь получает поддомены, которые будут связаны с соответствующими IP-адресами. При необходимости изменить доменное имя какой-либо машины, придется обращаться к провайдеру.
  • Собственный домен. В этом случае провайдер организует лишь обратный DNS. Способов получить собственный домен несколько:
    • Выбрать незанятое доменное имя и оплатить его аренду у специальной компании-регистратора, после чего информация об этом появится в базе whois. Арендатор становится администратором домена. В этом случае надо обеспечить существование определенного количества "живых" адресов в арендованном домене. Общая стоимость подобного решения составляет около 20 у.е. в год.
    • Получить на непонятных правах поддомен у владельца домена. В большинстве случаев это не требует дополнительных затрат. Часто такой подход используется при регистрации поддоменов для структурных подразделений организаций, например --- po.cs.msu.su. Администратором поддомена можете быть и не вы.

При использовании доменного имени желательно (обязательно, в случае собственного домена) обеспечить наличие не менее двух доменных DNS-серверов с существенно различными IP-адресами.

Если задача состоит в организации интранета, например, для школы или компьютерного класса, то необходимости в регистрации доменных имен нет. Можно использовать какой угодно домен, при условии, что не происходит коллизий с уже существующими адресами.

При наличии в сети DNS-сервера, клиентские машины узнают его адрес при помощи DHCP, и все DNS-запросы посылаются к нему. Таким образом можно организовать обращение по именам к локальным компьютерам.

pdnsd

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

Установим pdnsd:

root@demo ~]# apt-get install pdnsd

Посмотрим его состав:

[root@demo ~]# rpmquery -l pdnsd
/etc/pdnsd.conf
/etc/ppp/ip-up.d/0pdnsd
/etc/rc.d/init.d/pdnsd
/usr/sbin/pdnsd
/usr/sbin/pdnsd-ctl
/usr/share/doc/pdnsd-1.2.5
/usr/share/doc/pdnsd-1.2.5/AUTHORS
/usr/share/doc/pdnsd-1.2.5/COPYING.BSD
/usr/share/doc/pdnsd-1.2.5/ChangeLog
/usr/share/doc/pdnsd-1.2.5/ChangeLog.old
/usr/share/doc/pdnsd-1.2.5/NEWS
/usr/share/doc/pdnsd-1.2.5/README
/usr/share/doc/pdnsd-1.2.5/README.ALT
/usr/share/doc/pdnsd-1.2.5/README.par
/usr/share/doc/pdnsd-1.2.5/README.par.old
/usr/share/doc/pdnsd-1.2.5/THANKS
/usr/share/doc/pdnsd-1.2.5/TODO
/usr/share/doc/pdnsd-1.2.5/contrib
/usr/share/doc/pdnsd-1.2.5/contrib/README
/usr/share/doc/pdnsd-1.2.5/contrib/change_pdnsd_server_ip.pl
/usr/share/doc/pdnsd-1.2.5/contrib/dhcp2pdnsd
/usr/share/doc/pdnsd-1.2.5/contrib/pdnsd_dhcp.pl
/usr/share/doc/pdnsd-1.2.5/html
/usr/share/doc/pdnsd-1.2.5/html/dl.html
/usr/share/doc/pdnsd-1.2.5/html/doc.html
/usr/share/doc/pdnsd-1.2.5/html/faq.html
/usr/share/doc/pdnsd-1.2.5/html/index.html
/usr/share/doc/pdnsd-1.2.5/pdnsd.conf
/usr/share/doc/pdnsd-1.2.5/txt
/usr/share/doc/pdnsd-1.2.5/txt/faq.txt
/usr/share/doc/pdnsd-1.2.5/txt/intro.txt
/usr/share/doc/pdnsd-1.2.5/txt/manual.txt
/usr/share/man/man5/pdnsd.conf.5.bz2
/usr/share/man/man8/pdnsd-ctl.8.gz
/usr/share/man/man8/pdnsd.8.gz
/var/cache/pdnsd
/var/cache/pdnsd/pdnsd.cache
/var/run/pdnsd
/var/run/pdnsd/socket

Запустим (при необходимости можно отредактировать /etc/pdnsd.conf, например, чтобы указать отличный от /etc/hosts файл для списка соответствий адреса и имени):

[root@demo ~]# service pdnsd start

Чтобы начать использовать DNS-сервер осталось лишь отредактировать настройки DHCP.

Для того, чтобы DNS-сервер использовал собственный DNS необходимо в качестве первого nameserver в /etc/resolv.conf указать 127.0.0.1.

BIND

BIND (Berkeley Internet Name Domain, ранее Berkeley Internet Name Daemon) --- одна из самых функциональных и популярных в мире реализаций DNS-сервера, разарабатываемая Internet Systems Consortium. Большинство RFC по данной тематике разработаны этой же организацией. bind --- имя пакета, соответствующая служба называется named. Запускается BIND из изолированного окружения /var/lib/bind.

[root@demo ~]# cd /var/lib/bind/
[root@demo bind]# ls
dev  etc  var  zone

В подкаталоге /etc находятся конфигурационные файлы. В подкаталоге /zone размещена информация о зонах --- соответствиях между ip-адресами, доменами, почтовыми серверами, и т.п. Редактировать следует файл local.conf. При это стоит учитывать, что на момент использования этого файла BIND будет работать в изолированном окружении.

Пример настройки можно посмотреть в файле localdomain.

[root@demo bind]# cat zone/localdomain
$TTL    1D
@       IN      SOA     localhost. root.localhost. (
                                2008070800      ; serial
                                12H             ; refresh
                                1H              ; retry
                                1W              ; expire
                                1H              ; ncache
                        )
        IN      NS      localhost.
        IN      A       127.0.0.0
localhost       IN      CNAME   localhost.

Запись типа SOA определяет различные параметры зоны, такие как время жизни, время обновления и т.п. serial --- число, которое должно увеличиваться каждый раз, когда изменяется содержимое зоны. Обычно в serial указывают дату редактирования.

Аналогично задаётся обратное преобразование:

[root@demo bind]# cat zone/127.in-addr.arpa
$TTL    1D
@       IN      SOA     localhost. root.localhost. (
                                2008070800      ; serial
                                12H             ; refresh
                                1H              ; retry
                                1W              ; expire
                                1H              ; ncache
                                )
        IN      NS      localhost.
        0.0.0   IN      PTR     localdomain.
        1.0.0   IN      PTR     localhost.

Устройство обратной зоны ориентировано на сети, и поэтому в названии старший байт находится справа, а младшие слева (так как старшие байты идентифицируют сеть, а младшие --- хосты).

Обратите внимание, что при редактировании зоны, если вы не просто добавляете CNAME, необходимо внести соответствующие изменения и в зону обратного преобразования. Естественно, это надо делать, только если задача обратного DNS решается на этом же сервере. Напомним, что провайдер может предоставлять услугу обратного DNS, и в таком случае заботится о существовании и корректности зоны обратного преобразования должен он.

Для удобства конфигурирования нескольких DNS-серверов существует возможность указать один из серверов в качестве основного (master), а все остальные в качестве вторичных, slave-серверов. Slave-серверам задается адрес основного сервера, и в дальнейшем все slave автоматически синхронизируют настройки с master. Таким образом, можно легко организовать несколько DNS-серверов, идентичных с точки зрения внешнего мира.

Так же имеет смысл запретить рекурсивные запросы для всех машин, кроме тех, для адресации которых предназначен данный DNS-сервер.

DNS предоставляет возможность преобразовывать символьное имя машины в её внутренний или внешний адрес в зависимости от того, откуда поступил запрос. Технология, обеспечивающая эту функциональность, называется split horizon. В BIND она реализована как BIND View Clause.


Сведения о ресурсах

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

1

1

1

1


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex