Запуск сервера BIND в рамках поддерева chroot
Запуск сервера BIND в рамках поддерева chroot
Ранее описывался процесс подготовки сервера к запуску в рамках поддерева chroot. Чтобы лучше понять изложенный выше материал, желательно рассмотреть запуск конкретного сервера в подобном режиме. В качестве примера выберем сервер имен BIND, работа которого обсуждалась в главе 18. При подготовке сервера к работе в пределах поддерева chroot будет в основном использоваться конфигурация, устанавливаемая по умолчанию. Процедура инсталляции данного сервера в различных версиях Linux имеет свои характерные особенности; для данного примера выберем версию Debian 2.2.
На заметку
В данном разделе рассматривается запуск сервера BIND с использованием программы chroot. В качестве примера сервера, вызывающего функцию chroot() самостоятельно, можно привести сервер FTP.
Прежде всего вам необходимо инсталлировать стандартный пакет BIND. Поскольку сервер инсталлируется в системе Debian, для его установки можно использовать программу apt-get.
# apt-get install bind
В процессе выполнения сценарий инсталляции спрашивает, следует ли добавить адрес локального сервера имен в файл /etc/resolv.conf. На этот вопрос я даю положительный ответ, но для демонстрации работы сервера в рамках поддерева chroot это не имеет значения. По окончании установки система Debian запускает сервер имен. Проверить, работает ли сервер, вы можете с помощью следующих двух команд:
# ps aux | grep named
root 7656 0.0 1.5 2184 1492 ? S 13:29 0:00
/usr/sbin/named
# host awl.com localhost
awl.com A 165.193.123.224
Вторая команда позволяет убедиться в том, что сервер BIND установлен и работает: она выводит IP-адрес узла awl.com, причем для преобразования имени используется сервер на компьютере localhost. Имя awl.com вы можете заменить любым другим именем узла, расположенного в Internet, а вместо localhost можно указать IP-адрес или имя вашего компьютера. Если система сообщит о том, что команда не найдена (command not found), вам надо установить пакет dnsutils, содержащий программу host. (В других версиях Linux пакет подобного назначения может называться иначе, например bind-utils).
Убедившись, что сервер работает, завершите его выполнение с помощью команды
# /etc/init.d/bind stop
Затем вам надо создать поддерево chroot и скопировать в него файлы BIND.
# mkdir -p /opt/chroot/usr/sbin /opt/chroot/var/cache/bind
# mkdir /opt/chroot/lib /opt/chroot/etc
# cp /usr/sbin/named /opt/chroot/usr/sbin
# cp -rp /etc/bind/ /opt/chroot/etc
На заметку
Данная процедура подготавливает BIND для выполнения с помощью команды chroot. Такой подход используется лишь для демонстрации действия данной команды. В случае необходимости сервер BIND может самостоятельно вызывать функцию chroot(), поэтому выполнение сервера имен в рамках поддерева chroot можно организовать несколько проще. Однако при этом все равно придется создать поддерево и поместить в него конфигурационные файлы. Отпадает необходимость лишь в копировании исполняемых файлов сервера.
В результате выполнения приведенных выше команд создается основа поддерева и в соответствующий каталог помещаются исполняемые коды сервера имен и конфигурационные файлы. При подготовке сервера к выполнению важно получить информацию о библиотеках, необходимых для его выполнения. Получив сведения о библиотеках с помощью команды следует скопировать соответствующие файлы в каталог поддерева chroot.
# ldd /usr/sbin/named
libc.so.6 => /lib/libc.so.6 (0x40017000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
# cp/lib/libc.so.6 /lib/ld-linux.so.2 /opt/chroot/lib
На этом этапе можно снова проверить функционирование сервера.
# chroot /opt/chroot /usr/sbin/named
# host awl.com localhost
awl.com A 165.193.123.224
Если сервер не работает, убедитесь в том, что в системе выполняется только один экземпляр named, и проверьте, все ли файлы вы скопировали в каталог поддерева chroot. Обеспечив нормальную работу сервера, измените сценарий запуска BIND (в системе Debian это /etc/init.d/bind) так, чтобы сервер запускался посредством команды chroot. Безусловно, вы можете запретить выполнение сценария SysV и запустить сервер имен другим способом. Многие сценарии SysV используют вспомогательные программы (в Debian это start-stop-daemon и ndc). Данные программы могут создавать файлы в каталоге /var/run, поэтому вам надо создать в поддереве chroot нужные каталоги и скопировать файлы программ.
# mkdir -p /opt/chroot/sbin /opt/chroot/var/run
# cp /usr/sbin/ndc /opt/chroot/usr/sbin
# cp /sbin/start-stop-daemon /opt/chroot/sbin
При редактировании сценария запуска SysV перед каждым вхождением start-stop-daemon и ndc надо добавить последовательность символов chroot /opt/chroot. Однако на этом работа не заканчивается, поскольку start-stop-daemon обращается к файловой системе /proc, которая не доступна из поддерева chroot. Чтобы обеспечить доступ к ней, необходимо внести изменения в файл /etc/fstab — скопировать строку, содержащую /proc, и изменить ее на /opt/chroot/proc. Затем вы должны вызвать команду mount -а, чтобы смонтировать /proc в поддереве chroot.
Внимание
Поскольку файловая система /proc предоставляет контроль над компьютером, дублировать ее нежелательно. Лучше отредактировать сценарий запуска SysV так, чтобы он не использовал start-stop-daemon, либо отказаться от сценария SysV и организовать запуск сервера другим способом.
Выполнив все описанные выше действия, вы можете запустить сервер с помощью сценария SysV и проверить его работу.
# /etc/init.d/bind start
# host awl.com localhost
awl.com A 165.193.123.224
Если вы хотите удостовериться в том, что сервер выполняется в среде поддерева chroot, вам надо удалить исполняемый файл сервера из каталога /usr/sbin и конфигурационные файлы из каталога /etc/bind, а потом перезапустить сервер. Если сервер работает, то выполняться он может только в рамках поддерева chroot.
Вместо того чтобы запускать сервер BIND посредством утилиты chroot, вы можете использовать опцию -t программы named, которая разрешает вызов функции chroot() сервером имен. Соответствующая команда имеет следующий вид:
# /usr/sbin/named -t /opt/chroot
Данный подход намного проще описанного выше, так как при этом вам придется копировать в каталоги поддерева chroot гораздо меньше файлов, в частности, вы можете оставить программу named и библиотеки в тех каталогах, в которых они были записаны при инсталляции. Скопировать конфигурационные файлы необходимо, поскольку сервер имен читает их уже после вызова chroot(). При использовании опции -t упрощается подготовка сервера для запуска посредством сценария SysV, так как при нет необходимости дублировать файловую систему /proc.
Детали подготовки сервера к выполнению в рамках поддерева chroot зависят от типа сервера и версии Linux, однако общий ход процедуры остается прежним. Возможно, вам придется немного модифицировать среду поддерева chroot, например, изменить права доступа к каталогам или настроить сервер для запуска от имени пользователя, отличного от root.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
8.9. Запуск клиента без запуска сервера
8.9. Запуск клиента без запуска сервера Следующий сценарий, который мы рассмотрим, — это запуск клиента без запуска сервера. Если мы сделаем так и введем одну строку на стороне клиента, ничего не будет происходить. Клиент навсегда блокируется в своем вызове функции recvfrom,
Запуск и тестирование сервера
Запуск и тестирование сервера Для запуска сервера DNS можно применить любой из способов, рассмотренных в главе 4, но чаще всего сервер DNS запускается с помощью сценария SysV или локального сценария запуска. Запуск сервера DNS посредством суперсервера снизит скорость
Запуск FTP-сервера
Запуск FTP-сервера Варианты запуска серверов в системе Linux рассматривались в главе 4. Если пакет, реализующий FTP-сервер, поставляется в составе системы, для обеспечения запуска сервера вам потребуется приложить лишь минимальные усилия. Не исключено также, что запуск
Глава 23 Создание поддерева chroot
Глава 23 Создание поддерева chroot Каждый сервер в процессе работы читает файлы с диска компьютера, некоторые серверы также записывают файлы на локальный диск. Получив контроль над таким сервером, взломщик может изменить конфигурацию программ, обеспечивая себе базу для
Настройка сервера для работы в рамках поддерева chroot
Настройка сервера для работы в рамках поддерева chroot Создав поддерево chroot, можно приступать к его использованию. Для этого надо сконфигурировать сервер для работы в рамках поддерева, организовать запуск сервера и обеспечить контроль доступа к поддереву chroot извне.
Запуск сервера в рамках поддерева chroot
Запуск сервера в рамках поддерева chroot Если сервер осуществляет вызов функции chroot(), вероятнее всего, что в его конфигурационном файле содержится одна или несколько опций, предназначенных для управления выполнением в рамках поддерева chroot. Например, для ProFTPd предусмотрена
Управление доступом к каталогам поддерева chroot
Управление доступом к каталогам поддерева chroot Поддерево chroot реализует одностороннюю защиту — программы, выполняющиеся в рамках поддерева, не имеют доступа к ресурсам за его пределами. Поэтому вы можете ограничить доступ и в другом направлении. Для этого надо указать в
13.8.1. Настройка и запуск DNS-сервера в chroot-окружении
13.8.1. Настройка и запуск DNS-сервера в chroot-окружении Из соображений безопасности рекомендуется запускать все сетевые сервисы в так называемом chroot-окружении (change root). Это файловая система, повторяющая структуру корневой файловой системы, но содержащая только те файлы,
18.10.3. Запуск сервера socks5
18.10.3. Запуск сервера socks5 Запускается сервер следующей командой:# /usr/local/bin/socks5 -f -sПри запуске с этими ключами демон должен перейти в фоновый режим и выводить диагностические сообщения на стандартный вывод (в нашем случае это экран). Если сервер сконфигурирован правильно, вы
Запуск InterBase-сервера
Запуск InterBase-сервера InterBase-сервер, функционирующий под управлением NT/2000/XP, может выполняться в двух режимах - в виде службы (service) и в виде приложения. На Windows 9x InterBase может использоваться только в режиме приложения. Давайте рассмотрим, как настроить и запустить наш сервер
11.4.3. Запуск сервера
11.4.3. Запуск сервера Для запуска сервера достаточно ввести в командной строке имя server. Если не задать номер порта с помощью опции --port (-p). ОС Linux самостоятельно выберет порт. При указании опции --verbose (-v) сервер покажет, какой порт ему назначен.Если не назначить серверу адрес с
Запуск сервера Firebird в Windows
Запуск сервера Firebird в Windows Суперсервер Выполняемая программа Суперсервера Firebird - fbserver.exe. Хотя он может запускаться и как самостоятельная программа, он также может находиться под управлением Guardian - fbguard.exe. Guardian обеспечивает возможность эмулировать автоматический рестарт
Запуск сервера как приложения вручную
Запуск сервера как приложения вручную Если Суперсервер не запущен, или Классический сервер не инициализирован, он может быть запущен вручную при выборе в меню Firebird - Пуск | Все программы | Firebird (Start | Programs | Firebird).Альтернативно можно стартовать сервер или Guardian из командной
Запуск встроенного сервера
Запуск встроенного сервера Единственным допустимым протоколом соединения является "локальный Windows". Встроенный сервер не поддерживает локальный loopback-протокол или любой из сетевых протоколов.Поставляемое приложение хорошо сконфигурировано, и у сервера не будет
26.3.3. Запуск и останов сервера
26.3.3. Запуск и останов сервера Для управления сервером используется программа /etc/init.d/mysql. Раньше нужно было вызывать /etc/init.d/mysql непосредственно, сейчас можно вызвать управляющую программу через команду service, что намного удобнее. Для запуска сервера следует передать этой