Мы должны найти совместно-используемые библиотеки от которых зависит named (named √ это DNS демон). Их будет нужно позже скопировать в chroot ⌠окружение■.
Для поиска подобных библиотек используйте следующую команду:
Сделайте себе соответствующую отметку, чтобы можно было использовать ее позже на следующих шагах.
Сейчас мы должны определить chroot окружение и создавать корневой каталог для него. Мы выбрали каталог ⌠/chroot/named■, потому что хотим разместить ее на независимом разделе, чтобы предотвратить атаки на файловую систему. Раньше, во время инсталляции Linux мы создали раздел ⌠/chroot■ специально предназначенный для этого.
[root@deep /]# /etc/rc.d/init.d/named stop
(требуется ввести только если сещуствующий named демон запущен)
Shutting down named: [ OK ]
[root@deep /]# mkdir -p /chroot/named
Затем, создаем остальные каталоги:
[root@deep /]# mkdir /chroot/named/dev
[root@deep /]# mkdir /chroot/named/lib
[root@deep /]# mkdir /chroot/named/etc
[root@deep /]# mkdir -p /chroot/named/usr/sbin
[root@deep /]# mkdir -p /chroot/named/var/run
[root@deep /]# mkdir /chroot/named/var/named
Сейчас копируем основные конфигурационные файлы, файлы с описаниями зон, программы named named-xfer в необходимые места:
ВАЖНОЕ ЗАМЕЧАНИЕ. Для подчиненного сервера имен владельцем каталога ⌠/chroot/named/var/named■ и всех файлов расположенных в нем должен быть процесс с ⌠named■, иначе вы не сможете осуществить пересылку зоны. Чтобы сделать на подчиненном сервере владельцем каталога ⌠named■ и всех файлов лежащих в нем пользователя ⌠named■ используйте следующую команду:
Копируйте файлы ⌠localtime■ и ⌠nsswitch.conf■ в chroot каталог etc, чтобы элементы файлов регистрации были правильно установлены для вашей временной зоны:
Для большей безопасности на некоторые файлы из каталога ⌠/chroot/named/etc■ мы должны установить бит постоянства:
[root@deep /]# cd /chroot/named/etc/
[root@deep etc]# chattr +i nsswitch.conf
[root@deep /]# cd /chroot/named/etc/
[root@deep etc]# chattr +i named.conf
Файл с атрибутом +i не может быть модифицирован, удален или переименован; к нему не может быть создана ссылка и никакие данные не могут быть записаны в него. Только суперпользователь может установить или снять этот атрибут.
Добавьте новый UID и новый GID для запуска демона ⌠named, если они еще не определены. Это важно, так как запуск его как root нарушит правильное функционирование ⌠окружения, а использование существующих пользовательских id позволит вашему сервису получить доступ к другим ресурсам.
Проверьте файлы ⌠/etc/passwd и ⌠/etc/group на наличие свободных UID/GID. В нашем примере, мы используем номер ⌠53 и имя ⌠named.
Мы должны сказать syslogd (демону системы syslog) о новом chrooted сервисе: Обычно, процессы обращаются к syslogd через ⌠/dev/log■. chroot-овое ⌠окружение■, этого сделать не сможет, поэтому syslogd необходимо объяснить, что нужно слушать ⌠/chroot/named/dev/log■ вместо принятого по умолчанию ⌠dev/log■. Чтобы сделать это, нужно редактировать скрипт запуска syslog.
Редактируйте скрипт syslog (vi +24 /etc/rc.d/init.d/syslog) и измените следующую строку:
daemon syslogd -m 0
Должна читаться как:
daemon syslogd -m 0 -a /chroot/named/dev/log
Скрипт для запуска ISC BIND/DNS по умолчанию настроен для запуска его вне chroot ⌠окружения. Мы должны внести следующие изменения в файл named (vi /etc/rc.d/init.d/named), чтобы исправить это:
Опция ⌠-t говорит named запускаться, используя новое chroot окружение.
Опция ⌠-u определяет пользователя от имени которого стартует named.
Опция ⌠-g определяет группу от имени которой стартует named.
В BIND 8.2, команда ⌠ndc■ стала двоичным файлом (ранее, это был скрипт), которая в этой конфигурации не работает. Чтобы исправить это, пакет ISC BIND/DNS должен быть скомпилирован из исходных кодов.
Различие между Makefile, который мы использовали прежде и новым, заключается в изменении строк ⌠DESTSBIN=■, ⌠DESTEXEC=■ и ⌠DESTRUN=■. В них мы задаем новое месторасположение файлов и теперь программа ⌠ndc■ будет знать, где находится ⌠named■.
[root@deep src]# make clean [root@deep src]# make [root@deep src]# cp bin/ndc/ndc /usr/sbin/ [root@deep src]# cp: overwrite `/usr/sbin/ndc ? y [root@deep src]# strip /usr/sbin/ndc
Мы создали двоичный файл, а затем копируем полученную программу ⌠ndc в ⌠/usr/sbin, переписывая старую. Мы не должны забыть выполнить команду strip для улучшения производительности.
Также хорошей идеей будет создание новых двоичных файлов ⌠named■ и ⌠named-xfer■, чтобы грантировано использовать одну и туже версию ⌠named■ и ⌠ndc■.
Для named:
[root@deep /]# cd /var/tmp/src [root@deep src]# cp port/linux/Makefile.set-orig port/linux/Makefile.set [root@deep src]# cp: overwrite `port/linux/Makefile.set ? y
Редактируйте файл Makefile.set (vi port/linux/Makefile.set) и внесите в него следующие изменения:
Мы удалили файл ⌠.settings■, так как система кэширует в нем переменные и выполнили команду ⌠make clean■, чтобы убедиться, что у нас не возникнут старые наложения. После того, как создан файл ⌠named■, мы копируем его вместе с ⌠named-xfer■ в chroot каталог и используем команду ⌠strip■ для улучшения производительности новых исполняемых файлов.
Мы удаляем ⌠named■ и ⌠named-xfer■ из ⌠/usr/sbin■, так как они будут теперь запускаться из chroot каталога. Тоже самое проделываем и для файла ⌠named.conf■ и каталога ⌠/var/named■.
Мы должны тестировать новую chroot-овую конфигурацию ISC BIND/DNS.
Первое, перезапустите ваш syslogd демон:
[root@deep /]# /etc/rc.d/init.d/syslog restart
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
Теперь можно запустить chroot версию ISC BIND/DNS:
[root@deep /]# /etc/rc.d/init.d/named start
Starting named: [ OK ]
Проверяем, что ISC BIND/DNS запущен от имени пользователя ⌠named■ с новыми аргументами:
[root@deep /]# ps auxw | grep named named 11446 0.0 1.2 2444 1580 ? S 23:09 0:00 /chroot/named/usr/sbin/named -t /chroot/named/ -u named √g named
Первая колонка говорит, что программа запущена с UID ⌠named■. Конец строки должен содержать ⌠named -t /chroot/named/ -u named √g named■, представляющие из себя новые аргументы.
Эта команда перемещает исходные файлы и tar архив, которые мы использовали при компиляции и инсталляции ISC BIND/DNS.
Дополнительная документация
Для получения большей информации вы можете читать следующие страницы руководства:
$ man dnsdomainname (1) √ показывает доменное имя системы $ man dnskeygen (1) √ создает публичный, приватный и разделяемый секретные ключи для DNS Security $ man dnsquery (1) √ запрос доменного имени, используя распознаватель (resolver) $ man named (8) √ сервер доменной службы имен (DNS) $ man hesiod_to_bind [hesiod] (3) √ Интерфейсная библиотека к серверу имен Hesiod $ man ldconfig (8) √ определяет связи времени выполнения $ man lesskey (1) √ определяет ключ связанный с less $ man raw (8) - привязывает ⌠сырые■ символьные устройства Linux $ man mkfifo (1) √ создает FIFO (именные каналы) $ man named-bootconf (8) √ конвертирует конфигурационный файл сервера имен $ man named-xfer (8) √ вспомогательный агент для входящей зонной пересылки $ man named.conf [named] (5) √ конфигурационный файл $ man Opcode (3) √ Отключает opcode-ы named, когда компилируется perl код $ man dig (1) √ посылает запросы к серверу имен $ man nslookup (8) √ создание интерактивных запросов к серверу имен $ man ndc (8) √ программа контролирующая работу сервера имен
Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить man-страницы и документацию для получения деталей.