Использование 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 |