Корень зла ANDREY MATVEEV Спецвыпуск: Хакер, номер #069, стр. 069-050-1 (ANDRUSHOCK@REAL.XAKEP.RU) WEB-СЕРВЕР В СРЕДЕ CHROOT: ПРАКТИЧЕСКАЯ ПАРАНОЙЯ Сегодня у нас на повестке дня вопросы, касающиеся обеспечения безопасности Web-сервера на базе OpenBSD. Мы научим PHP, MySQL и Sendmail работать с Apache, который запускается в окружении chroot - измененном корневом каталоге /var/www с правами непривилегированного пользователя www. Таким образом, нам удастся обеспечить дополнительный уровень защиты и максимально снизить возможный ущерб в том случае, если злоумышленнику окажется под силу взломать нашу систему. Применив полученные знания на практике, в твоем арсенале будет настолько защищенная система, что ты сможешь совершенно спокойно взяться за разработку любого проекта, будь то личный блог, новостной сайт компании или даже интернет-магазин с мириадами клиентов. [предварительный ликбез.] Последняя версия ультрасекьюрной OpenBSD (3.9 на момент написания статьи) как нельзя лучше подойдет для выполнения нашей миссии. Короткая история взломов, прекрасная реализация стека TCP/IP, отличный файервол Packet Filter (pf), залатанный Apache 1.3.29 с поддержкой SSL, наличие последних версий OpenSSH и OpenSSL, тысячи добротно протестированных прекомпилированных пакетов - все это говорит в пользу сделанного выбора. Хотя стоит отметить, что в качестве используемой операционной системы может выступать любая из Free/Net/DragonFlyBSD. За основу нашей конструкции примем PHP и MySQL. Не секрет, что за последние годы эта связка стала стандартом де-факто для интернет-проектов различного масштаба. Поэтому давай не будем на этом останавливаться и перейдем непосредственно к настройке. [каждой службе - свой раздел.] Прежде всего, необходимо грамотно подойти к разделению дискового пространства. Лично я предпочитаю для каждой критически важной сетевой службы выделять собственный раздел. Для наглядности приведу содержимое конфига fstab(5) полностью: # vi /etc/fstab /dev/wd0a / ffs rw 1 1 /dev/wd1h /backup ffs rw,nodev,nosuid,softdep 1 2 /dev/wd1a /cvs ffs rw,nodev,nosuid 1 2 /dev/wd0g /export ffs rw,nodev,nosuid,softdep 1 2 /dev/wd1i /home ffs rw,nodev,nosuid,softdep 1 2 /dev/wd0d /tmp ffs rw,nodev,nosuid,noexec,softdep 1 2 /dev/wd0f /usr ffs rw,nodev,softdep 1 2 /dev/wd0e /var ffs rw,nodev,nosuid,softdep 1 2 /dev/wd1d /var/mail ffs rw,nodev,nosuid,noatime,softdep 1 2 /dev/wd1e /var/mysql ffs rw,nodev,nosuid,softdep 1 2 /dev/wd1f /var/squid ffs rw,nodev,nosuid,softdep 1 2 /dev/wd1g /var/www ffs rw,nodev,nosuid,softdep 1 2 /dev/wd1b none swap sw 0 0 Преимущества такой конфигурации видны даже невооруженным глазом: - ПЕРЕПОЛНЕНИЕ ОДНОГО ИЗ РАЗДЕЛОВ НЕ ПОВЛИЯЕТ НА РАБОТУ БОЛЬШИНСТВА СЛУЖБ; - ПРИ СЛУЧАЙНОМ ОТКЛЮЧЕНИИ ПИТАНИЯ ВО ВРЕМЯ ВЫПОЛНЕНИЯ ОПЕРАЦИИ ЗАПИСИ НА ОДНУ ИЗ ФАЙЛОВЫХ СИСТЕМ СНИЖАЕТСЯ ВОЗМОЖНОСТЬ ПОВРЕЖДЕНИЯ ОСТАЛЬНЫХ ФС; - УВЕЛИЧЕНИЕ БЕЗОПАСНОСТИ СИСТЕМЫ ЗА СЧЕТ УКАЗАНИЯ ДЛЯ КАЖДОЙ ФС СПЕЦИАЛЬНЫХ ФЛАГОВ МОНТИРОВАНИЯ. [MySQL: записная книжка с SQL-интерфейсом.] Теперь перейдем к установке и конфигурированию сервера баз данных. Собираем из портов три MySQL-пакета - client, server, tests: |