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

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

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

Настройка DNS

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

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

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

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

pdnsd

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

Установим pdnsd:

root@class305 ~]# apt-get install pdnsd

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

[root@class305 ~]# 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

Запустим, предварительно отредактировав конфигурационный файл pdnsd.conf:

[root@class305 ~]# service pdnsd start

Осталось лишь поправить соответствующим образом настройки DHCP.

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

BIND

Пакет называется bind, а соответствующий сервис называется named.Один из самых популярных в мире. BIND делают долго и упорно люди из Internet Service consorcium, большинство RFC на этот счёт тоже написаны ими. Этот сервис очень большой и имеет много функций.

Запускается он из изолированного окружения /var/lib/bind.

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

В подкаталоге etc лежат настройки. В подкаталоге zone - соответствия между ip-адресами, доменами, почтовыми серверам. Редактировать следует файл local.conf(Учтите что файл написан з соображение что chroot уже сделан)

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

[root@class305 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 --- такое число, которое надо увел каждый раз, когда изменяется содержимое зоны. Обычная практика - записывать туда дату редактирования.

Аналогично для обратного преобразования, только запись типа PTR а не A.

[root@class305 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-серверов обычно более одного, один из них объявляется master, а остальные - slave. и они будут скачивать с master конфигурацию. Устроенно это просто: в конфигурационном файле пишете, что он slave, и указываете, адрес master. Тем самым получаются два абсолютно идентичных(с точки зрения внешнего мира) сервера.

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

Последнее, что стоит упомянуть: если у вас есть интранет, есть внешняя сеть, и если у вас есть машины, которые снаружи видны под внешним адресом, то неплохо бы чтобы при обращении к DNS серверу за адресом внутренней машины из внутренней сети он выдавал бы её внутренний адрес, а не внешний. Для этого существует технология split horizon, а соответствующее место в документации называется view.


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

Готовность (%)

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

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

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

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

Level

Maintainer

Start date

End date

20

1

1

1

1

ArtemSerebriyskiy, Allena, MaximByshevskiKonopko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex