Так видит журнал читатель, который забыл оформить подписку: БЫ СТ РО ТИ РАС РА КУ Ж ПИ
КА НИ НО КУ ВО ЛЫ ГО ЗА ДНИ ТЯ Е НУ ЛИ
ЛИ
СЬ
№5(30) май 2005 подписной индекс 81655 www.samag.ru
Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети
№2(51) февраль 2007 подписной индекс 20780 www.samag.ru
Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM
Так видит журнал читатель, оформивший подписку: №5(30) май 2005 подписной индекс 81655 www.samag.ru
Почему MS SQL медленно работает? Ищем причины
№2(51) февраль 2007
ЗА Н КО ЕО НЧ ЖИ ИЛ ДА ИС НН ЬД О ЕН ЬГ И
ПО АВ СЛ РА Е О Л НА ТПУ РА СКА БО ТЕ
УЕ
ХА Л
ВО
ТП УС
К
Интервью с Ларри Уоллом – создателем языка Perl
Как навести порядок в стойке (из личного опыта) Два канала – роскошь? Резервирование и балансировка трафика во FreeBSD Принципы построения доменов Active Directory
Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM Интервью с Ларри Уоллом – создателем языка Perl
Нововведения в Solaris 10: на что обратить внимание админу Как «подружить» сети с пересекающейся адресацией Настраиваем DNS и DHCP с хранением информации в LDAP
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Роспечать – 20780, 81655 Пресса России – 87836 Интер-почта – тел. (495) 500-00-60
Создаем интегрированный в AD файл-сервер на базе Samba и FreeBSD Open Source и Classic Games
в номере ТЕНДЕНЦИИ 4 LiMo Foundation: мобильное будущее с Linux открыто
Гиганты мобильной индустрии создали Linux-организацию. Дмитрий Шурупов osa@samag.ru
АДМИНИСТРИРОВАНИЕ 6 Два канала – роскошь? Резервирование и балансировка трафика во FreeBSD
Как обеспечить резервирование или распределение трафика при наличии двух каналов в Интернет. Сергей Супрунов amsand@rambler.ru
12 Создаём интегрированный в Active Directory файл-сервер на базе Samba во FreeBSD
На базе сервера, давно устаревшего по критериям Microsoft, вы можете сделать файл-сервер и сервер печати, используя пакет Samba 3.x и операционную систему FreeBSD 6.x. Алексей Бережной beralex2@mail.ru
21 Полезные советы. Утилита find. Сергей Супрунов amsand@rambler.ru
22 Подключаем несколько локальных сетей с пересекающейся адресацией к одному компьютеру
Сети можно «подружить», если вы используете ОС Linux. Андрей Кишкин anksh@mail.ru
26 Настраиваем DNS и DHCP с хранением информации в LDAP
Стоит посвятить достаточное количество времени на изучение принципов работы системы DNS и на настройку сервера имен. Сегодня речь пойдет о настройке bind для хранения информации о зонах в базе данных LDAP. Василий Озеров fr33man@fr33man.ru
32 Размещаем пользовательские бюджеты в LDAP. Часть 2
Настроив подсистему аутентификации и авторизации на использование LDAP, попробуем работать с ней прозрачным образом, так же как с файловой базой учетных записей. Алексей Барабанов alekseybb@mail.ru
38 Принципы построения доменов Active Directory
От понимания сущности AD до создания собственного домена. Александр Емельянов numb13@mail.ru
44 Тонкая настройка Microsoft ISA 2004
Известно, что настройки, используемые по умолчанию при установке программного обеспечения, не являются оптимальными. Как можно настроить межсетевой экран ISA 2004, чтобы оптимизировать работу сети? Андрей Бирюков mex_inet@rambler.ru
№2, февраль 2007
48 Проводим мониторинг нагрузки операционной системы Solaris
Выявляем «узкие места», препятствующие производительной работе системы. Сергей Косько sergkosko@ua.fm
54 Нововведения в Solaris 10: на что обратить внимание админу?
Современная версия Solaris 10 содержит большое количество нововведений, что даже бывалые администраторы не успевают уследить за всеми появившимися возможностями. Алексей Коробкин korobkin@src.samsung.ru
60 Обзор серверного дистрибутива tinysofa
Установить и настроить надежную систему на сервер не такая уж и легкая задача. Упростить ее можно, правильно подобрав дистрибутив и компоненты будущей системы. Сергей Яремчук grinder@ua.fm
СЕРВЕРНАЯ 62 Как навести порядок в стойке
Кто из вас, имея в распоряжении серверную, не сталкивался с проблемой «бороды» из проводов на лицевой стороне стойки? С чего начать наводить порядок? Даниил Никифоров danila_work@mail.ru
БЕЗОПАСНОСТЬ 66 Боремся с вирусами и спамом с помощью MPP
Как с минимальными затратами настроить эффективную систему борьбы со спамом и вирусами, рассылаемыми по электронной почте? Сергей Яремчук grinder@ua.fm
ХОББИ 72 Open Source и Classic Games
Благодаря энтузиастам сообщества Open Source многие культовые игры получили «вторую жизнь». Иван Максимов ivan_maksimov@inbox.ru
РЕТРОСПЕКТИВА 80 Глобальная сетевая энциклопедия
Гигабайты информации. Ответ на любой вопрос. Сотни тысяч статей на всевозможные темы. Как вы уже догадались, речь пойдёт о wikipedia.org. Илья Александров ilya_al@rambler.ru
WEB 84 Работаем с MediaWiki
MediaWiki – механизм, который превращает старыедобрые статичные тексты в «живые», постоянно развивающиеся хранилища информации. Евгений Балдин E.M.Baldin@inp.nsk.su
92 КНИЖНАЯ ПОЛКА 70, 71, 78, 79 BUGTRAQ
тенденции SourceKibitzer анализирует Java Open Source-проекты Стартовал проект SourceKibitzer (http://www.sourcekibitzer. org), который занимается сбором и оценкой программных метрик Open Source-проектов, написанных на языке Java, размещенных в глобальной паутине. Заявленным существенным отличием SourceKibitzer от ряда подобных инициатив является высокая скорость выполнения анализа: участники обрабатывают и представляют информацию об интересующем проекте в течение суток. Данные по обработанному проекту будут затем регулярно обновляться, пополняться и размещаться на сайте. SourceKibitzer позволяет наблюдать и сравнивать метрические показатели лидеров движения ПО с открытым кодом. Основываясь на данных, размещенных на сайте, можно принимать решение относительно того, как улучшить тот или иной проект.
Sun открыла исходники интерпретатора Fortress Компания Sun Microsystems опубликовала исходный код прототипа интерпретатора нового языка программирования, получившего название Fortress. Fortress призван стать современной заменой классическому языку программирования Fortran, созданному усилиями сотрудников IBM еще 50 лет назад, но все еще используемому для решения задач, требующих высокопроизводительных вычислений (например, прогноз погоды). Fortress должен облегчить программистам взаимодействие с многоядерными процессорами. «Мы находим перспективным рынок высокопроизводительных вычислений. И считаем, что многоядерность становится все более важной для обычных десктоп-систем, используемых программистами вкупе с языком программирования вроде Fortress для получения хороших результатов по производительности от такого железа», – прокомментировал Эрик Аллен (Eric Allen), лидер проекта Fortress.
Основная причина преобразования ныне функционирующей платежной системы – тот факт, что она была создана в 80-е года и ей существенно не хватает технической поддержки. Специалистами из OKQ8 была проведена оценка ряда готовых решений, после чего они пришли к выводу, что необходимо создать свою систему, в основе которой будет лежать Open Source-ПО: операционная система GNU/Linux и СУБД MySQL. Новую систему тестировали и вносили в нее поправки на протяжении года, и теперь она будет введена в строй на всех бензозаправочных станциях (число коих насчитывает одну тысячу).
Novell начинает рекламную кампанию для SUSE Linux Компания Novell запустила акцию по переманиванию пользователей Microsoft Windows на платформу с открытым кодом. В середине января на сайте Novell появилась страница, где рассказывается о преимуществах Suse Linux Enterprise Desktop 10 над Windows Vista. Основной акцент делается на экономические выгоды, получаемые при отказе от продукции Microsoft в пользу решений Novell: «Получите более 90% функциональности Windows Vista и Microsoft Office за менее 10% стоимости». Кроме того, Novell сообщает и о других выигрышных аспектах ее флагманского продукта для настольных ПК: высокая безопасность системы, удобство использования и функциональность «инновационной десктоп-платформы», гибкость, позволяющая решать широкий спектр задач.
Составил Дмитрий Шурупов по материалам www.nixp.ru
OpenOffice.org представил проект ODF Toolkit Авторы популярного офиса с открытым кодом OpenOffice.org представили новый проект – ODF Toolkit Project, призванный расширить адаптацию как файлового формата для документов OpenDocument (ODF), так и самого OpenOffice.org. «Представляя ODF Toolkit Project, мы приглашаем разработчиков воспользоваться исходным кодом лидирующего свободного и открытого набора офисных приложений в качественно новых направлениях», – заявляется в анонсе ODF Toolkit. Ожидается, что с помощью этого проекта энтузиасты своими коллективными усилиями смогут создавать новое полезное программное обеспечение, взаимодействующие с файлами в формате ODF.
Крупнейший продавец бензина Швеции выбрал MySQL и Linux Компания MySQL AB, занимающаяся разработкой одноименной СУБД с открытым кодом, объявила о том, что OKQ8, крупнейший в Швеции продавец бензина, запустит систему платежей и сбора на базе Linux и MySQL в течение первой половины 2007 года.
№2, февраль 2007
тенденции
LiMo Foundation: мобильное будущее с Linux открыто
Дмитрий Шурупов 25 января 2007 года компании Motorola, NEC, NTT DoCoMo, Panasonic Mobile Communications, Samsung Electronics и Vodafone объявили о формировании организации LiMo Foundation, созданной для поддержки первой в мире глобальной инициативы по созданию платформы с открытым кодом на базе Linux для мобильных устройств.
П
ервая информация об этом союзе появилась еще летом 2006 года, однако только теперь он принял официальный статус, обрел ясность в своих целях, вопросах, общей структуры и ближайших планов.
Цели LiMo Foundation Главная заявленная цель международного союза – разработка так называемой «Foundation Platform», т.е. основанной на Linux программной платформы с открытым кодом, предназначенной для коммуникационных мобильных устройств. Чего хотят добиться участники проекта путем создания «новой, открытой и экономически выгодной платформы на базе Linux»? Об этом они говорят сами в «User Guide to the Foundation» (этот материал, как и другие официальные документы LiMo Foundation, доступен в формате PDF на сайте организации): n снизить расходы на разработку мобильных устройств; n уменьшить время, необходимое для выхода на рынок новых мобильных устройств;
n минимизировать фрагментацию
ходящимися на одном уровне. Это сомобильных Linux-реализаций, ус- вет по архитектуре (занимается техникорить процессы разработки, ин- ческими проблемами, управляет ратеграции и тестирования для но- бочими группами), совет по требовавых продуктов и услуг; ниям, управление программой оргаn создать благоприятный рынок для низации (возглавляется исполнительразработчиков с целью ускорения ным директором). В LiMo Foundation уповают на стоинноваций; n обеспечить возможность разграни- ронних разработчиков, которые, восчения дизайна, приложений и ус- пользовавшись SDK, примут активлуг для изготовителей оборудова- ное участие в проекте путем создания (OEM), операторов беспровод- ния различных приложений для новой ных сетей и независимых продав- платформы. цов ПО (ISV); n предоставить возможность влиять Что будет сделано на эволюцию и разработку индуст- Планы у организации наполеоновские, но как все это будет достигнуто? риальной платформы. Общее представление об этом имеетВнутренняя структура ся уже сейчас. организации Весь код, который будет создан Главная управляющая роль отводит- LiMo Foundation, формально разделен ся совету директоров, 13 членов ко- на 4 категории: торого выбираются ежегодно. Сове- n Framework – абстрактный слой, щания проводятся 4 раза в год. Слекоторый предоставит набор продующий звеном предстает исполниграммных интерфейсов приложетельный совет, ответственный за опения (API), необходимых для взаирационные и стратегические вопромодействия со всеми функциями сы и управляющий тремя последуюядра (которые не должны зависеть щими руководящими элементами, наот железа).
тенденции n Plug-in – «подключаемые» к базо-
вой структуре дополнительные ме- OpenMoko готовит к продаже ханизмы, расширяющие ее функ- открытый Linux-смартфон циональность (может быть несколь- Тем временем, начинающая компания ко различных механизмов, реали- из Тайваня OpenMoko планирует в ближайшее время начать продажи первого Linuxзующих одну и ту же функцию). n Общий код, соответствующий за- смартфона, созданного исключительно данной спецификации и реализу- на открытых стандартах. Смартфон, получивший название ющий все необходимые для этого функции. Именно его и будут рас- Neo1973, был представлен еще в ноябре пространять привилегированные прошлого года, а начало его продаж запланировано на февраль. члены LiMo. Ключевая особенность продукта – вся n Не общий код, состоящий из дополнительных модулей, в которых его начинка является программным обесможет присутствовать реализация печением с открытым кодом (Open Source). каких-то специфичных (например, Устройство было создано при содействии компании FIC (First International Computer), для данного железа) функций. Базовый пользовательский интерфейс приложений будет использовать свободно распространяемые разработки GTK+ (на его основе построена популярная графическая среда для UNIXи GNU/Linux-систем GNOME). Среди промежуточного ПО (middleware), что будет подготовлено, выделяются элементы: n реестр (с набором записей вида ключ и его значение); n обработка конфликтов (при запросах к разделяемым ресурсам); n обработка событий; n структура безопасности; n телефонная структура; n сетевая структура; n структура обмена сообщениями; n структура мультимедиа; n структура управления цифровыми подписями (DRM); n база данных (управление данными по принципу ACID). Список этот пока не полон и включает в себя лишь основные компоненты.
Правовые аспекты LiMo Foundation пошла по единственно верному пути «mixed source» и решила допускать наличие программного обеспечения с идеологически противоречивыми типами лицензий. Во-первых, организация по понятным причинам постарается «взять максимум» из того, что уже имеется и что адекватно отвечает требованиям к итоговому продукту. Соответственно, будет использоваться код известных проектов мира Open Source
№2, февраль 2007
специализирующейся на производстве материнских плат и периферии для ноутбуков, ПК и КПК.
«В мире Linux до сих пор никто еще не создавал интегрированного набора программного обеспечения для мобильных телефонов, но теперь мы сделали это», – заявил Шон Мосс-Пультц (Sean Moss-Pultz), менеджер по разработке продуктов в FIC. Открытый Linux-смартфон взаимодействует с персональным компьютером посредством USB и поддерживает USBэмуляцию сети для подключения ПК к Интернету через сеть сотового оператора. Устройство оснащено 128 Мб оперативной памяти, MicroSD-картой на 64 Мб, 2,8-дюймовым сенсорным экраном, возможностью GPS; требует наличия GSM/GPRS-сети для функционирования. Первые 6 месяцев Linux-смартфон Neo1973 будет продаваться напрямую FIC по цене в 350 USD.
(таких, как ядро Linux и библиотека Capable) с правом на требование деGTK+). Здесь все просто: лицензии ти- нежных отчислений за патенты. па GPL, LGPL и т. п. останутся нетронутыми, а лицензированное по ним ПО Диагноз возьмут для своих целей. Появление LiMo Foundation вряд ли Но ведь проект не обойдется и без можно назвать сенсационным – сконаписания собственного кода, реали- рее, долгожданным. Новейшая исзующего все то, что FOSS-сообщество тория знает не один пример попылибо не сделало вообще, либо созда- ток крупных компаний объединиться ло в виде, не удовлетворяющем спе- на почве бурно процветающей экосистемы GNU/Linux и Open Source, в том цификациям LiMo. Для лицензирования такого кода числе и в мобильном мире. Однако, будет использоваться новая лицензия, несомненно, в этой области до сих получившая название FPL (Foundation пор еще не возникало сопоставимых Public License). FPL не требует денеж- по размаху инициатив, и уже хотя бы ных отчислений за использование ли- поэтому данный шаг достоин внимацензированного по ней ПО и следу- ния, уважения и поддержки. ет принципу свободы в духе GPL, обяЧто из всего этого выйдет, покажет зывая в случае внесения в код попра- время, но я, учитывая очевидность восвок возвращать модифицированные требования (полноценных, унифицироисходники. Однако FPL накладыва- ванных, готовых к работе, инновационет и сильное (впрочем, логичное) ог- ных и тем более поддерживаемых гигараничение: запрещено в любом виде нтами индустрии) решений с открытым распространять код тем, кто не состо- кодом на рынке мобильных устройств, ит в LiMo Foundation. склонен считать, что LiMo Foundation У FPL есть две разновидности, од- сможет со временем внести сущесна из которых предназначена для об- твенный вклад в эту отрасль. Может щего кода (Common Capable), а дру- быть, даже произвести в некотором рогая – для не общего (Non-Common де революцию. Но все это – лишь в перCapable). спективе... Поживем – увидим. Кроме того, предусмотрена «поддержка» проприетарных лицензий, 1. h t t p : / / l i n u x d e v i c e s . c o m / n e w s / что актуально для мобильных устNS2923387573.html или http://www. ройств. Эта возможность подразуnixp.ru/news/8085. мевает обязательное представление 2. http://www.limofoundation.org. равных условий для всех членов LiMo 3. http://news.com.com/Mobile+phone+ Foundation и дальнейшую трансфорcompanies+join+forces+on+Linux/2100мацию лицензии в FPL (Non-Common 1039_3-6083883.html.
администрирование
Два канала – роскошь? Резервирование и балансировка трафика во FreeBSD
Сергей Супрунов На форумах, посвящённых системному администрированию, с завидной регулярностью появляются вопросы о том, как обеспечить резервирование или распределение трафика при наличии двух каналов в Интернете. Ввиду отсутствия однозначного ответа проведём собственное исследование.
И
так, вы «раскрутили» своего дый провайдер захочет с этим возитьшефа на подключение локаль- ся, если вы для него – лишь один из тыной сети компании ещё к одно- сяч клиентов, подключённых по обычму провайдеру. Со временем возника- ному ADSL. Поэтому мы рассмотрим, ет желание распорядиться этим «бо- что можно сделать без взаимодейсгатством» более рационально, неже- твия с провайдером, имея в своём расли определять факт пропадания кана- поряжении лишь машину с установленла по начинающейся в бухгалтерии па- ной FreeBSD, выполняющей роль шлюнике и вручную переопределять шлюз за для локальной сети. по умолчанию. Конечно, «академически» правиль- Анализ проблемы ным решением была бы настройка пол- Итак, в общих чертах задача ясна – ноценного маршрутизатора (возможно, нужно обеспечить рациональное исдаже программно-аппаратного ком- пользование двух каналов в сеть Инплекса типа Cisco), обеспечивающе- тернет и позаботиться об автоматиго динамическое регулирование тра- ческом резервировании, чтобы рабофика на основании такой информа- тоспособность сети быстро восстации, как доступность того или иного навливалась при проблемах на одном узла, «стоимость» маршрута, требо- из каналов. вания к качеству обслуживания (сеЧтобы не потерять за деревьями тевики этот QoS уже в ночных кошма- леса, будем считать, что оба канала рах видят). Однако это зачастую свя- «приходят» к нашему серверу в виде зано с необходимостью регистриро- Ethernet, т.е. подключаются на обычные вать собственную автономную систему сетевые карты и настраиваются путём (AS), настраивать один из протоколов указания IP-адреса самого интерфеймаршрутизации (например, BGP) и т. д. са, адреса шлюза по умолчанию и масДля небольших компаний такие реше- ки подсети (т.е. как статические марния обычно оказываются неоправдан- шруты). Через третью сетевую карно дорогими и сложными, да и не каж- ту подключается локальная сеть. Для
определённости в дальнейших примерах будем считать, что внешними интерфейсами являются rl0 и rl1, а ed0 – внутренний. В зависимости от условий договоров с провайдерами могут возникнуть следующие подзадачи: n переключение на более дорогой канал только на время проблем с дешёвым; n направление трафика, чувствительного к задержкам, в более «быстрый» канал, в то время как весь не критичный к скорости доставки пакетов трафик (например, FTPзакачки) заворачивать в «медленный», но более дешёвый канал; n пропорциональная балансировка нагрузки между каналами, имеющими сопоставимые по качеству и стоимости характеристики. Думаю, и без длительных объяснений понятно, что как-то влиять мы сможем лишь на тот трафик, который инициируется хостами локальной сети, получающими доступ в Интернет через данный сервер, либо самим сервером. То есть мы сможем управлять тем, через какой из каналов будет за-
администрирование гружаться запрошенная пользователем страница или «за- других критериев (проливаться» на удалённый FTP-сервер какой-то файл. А вот токол, порты источника трафик, инициированный «снаружи» (например, почтовый и назначения, IP-адрес или запросы на веб-сервер компании), придётся обслужи- источника, и т. д.). Впрочем, об этом мы ещё повать на том канале, куда он придёт. Конечно, используя некоторые приёмы при настройке говорим. DNS-зон, например, MX-записи с одинаковым приоритеОсобо хочу обратить том, можно в определённой степени влиять и на входящий ваше внимание, что этот трафик, но сегодня мы не будем останавливаться на этом метод будет работать только при наличии в совопросе. ответствующем направПростая маршрутизация лении (то есть уже за инРисунок 1. Схема с «внешними» Начнём с простейшей задачи. Допустим, мы подключены терфейсом) NAT-сервеNAT-серверами к двум провайдерам – «Мегаполис» и «Интерком» (все на- ра, например, реализозвания здесь и далее вымышлены; любое совпадение с на- ванного в ADSL-модеме, – это то самое «особое условие», именованиями и торговыми марками реально существую- на которое я ссылался выше. В противном случае провайщих компаний случайно). Причём «Мегаполис» предостав- дер наверняка будет «рубить» у себя на шлюзе пакеты с ляет дешёвый трафик внутри сети, но довольно дорогой IP-адресами, не принадлежащими ему. И уж тем более нет внешний, в то время как «Интерком» продаёт весь трафик никаких оснований полагать, что схема будет работать при по единой, «средней», цене. Возникает желание весь внут- непосредственном использовании «серых» адресов, вроде рисетевой трафик направлять через канал «Мегаполиса», показанных в примере 192.168.0.0/24 (см. рис. 1). в то время как остальной – через «Интерком». Да и даже в том случае, если вы – счастливый обладаВ этом случае логично в качестве маршрута по умол- тель достаточно большого массива реальных адресов, кочанию (параметр defaultrouter в файле /etc/rc.conf) задать торые без проблем пропускают через себя все ваши прошлюз «Интеркома» (пусть это будет 10.1.1.1; на интерфей- вайдеры, поставленная задача без NAT-серверов решесе rl1 будем полагать адрес 10.1.1.2). А задачу выделения на не будет. Поскольку ответные пакеты будут приходить трафика на внутренние сети «Мегаполиса» можно решить к вашему серверу в соответствии с правилами маршрутипутём настройки статических маршрутов (при некоторых зации внешних узлов, на которые вы вряд ли сможете окаусловиях, о которых читайте дальше): зать какое-то влияние. То есть входящий трафик в любом случае будет идти так, как прописано на маршрутизаторах # route add 8x.25y.0.0/16 10.0.1.1 провайдера и выше, а не так, как захочется нам. (Позже будет показано, как можно использовать NAT непосредственadd net 8x.25y.0.0: gateway 10.0.1.1 но на настраиваемой машине, чтобы «форсировать» реше# netstat -rn | head -4; netstat -rn | grep 8x.25y ние данной проблемы). Routing tables Internet: Destination Gateway 8x.25y/16 10.0.1.1
Ещё один пример маршрутизации Flags Refs Use Netif Expire UGS 0 2 rl0
Постоянная «прописка» маршрута делается в /etc/ rc.conf: static_routes="meganet" route_meganet="-net 8x.25y 10.0.1.1"
Здесь 8x.25y.0.0 – внутренняя подсеть провайдера «Мегаполис». То есть мы прописываем для этих адресов явный маршрут через интерфейс rl0 (для определённости его IP будет 10.0.1.2 со шлюзом 10.0.1.1), подключённый к каналу «Мегаполиса», в то время как для остального трафика используется маршрут по умолчанию. Аналогичного результата можно достичь, используя функцию «форвардинга» файервола ipfw:
Более общий случай рассмотренного примера может использоваться для балансировки нагрузки на каналы – это заворачивание «половины Интернета» по альтернативному маршруту (с учётом всего сказанного касательно NAT-серверов): # route add 0.0.0.0/1 10.0.1.1
Способ довольно грубый, но как аварийное решение вполне годится. Очевидно, варьируя маску «заворачиваемой» сети и контролируя получающийся результат на более-менее длительном временном интервале (например, по счётчикам того же ipfw), можно добиться близкого к желаемому соотношения трафика в обоих каналах.
Условное перенаправление трафика
Чуть усложним предыдущую задачу. Допустим, что «Интер# ipfw table 1 add 8x.25y.0.0/16 ком» предоставляет «внешний» трафик хоть и дешевле, # ipfw add 5000 fwd 10.0.1.1 ip from 192.168.0.0/24 ↵ но худшего качества. То есть работать через «Интерком» to 'table(1)' не совсем комфортно, особенно в часы пик, и это вызыБлагодаря использованию файервола можно более гиб- вает вполне законное возмущение руководящих лиц комко управлять трафиком, определяя его в тот или иной ка- пании («Мы за Интернет такие деньги платим, а страницы нал не просто по IP-адресу назначения, но и по целому ряду по полчаса открываются»)...
№2, февраль 2007
администрирование В этом случае можно дополнить показанные в предыдущем разделе правила форвардинга записями для «особо важных персон»: # ipfw add 4900 fwd 10.0.1.1 ip from 192.168.0.100 to any # ipfw add 4950 fwd 10.0.1.1 tcp from 192.168.0.128/29 ↵ to any # ipfw add 5000 fwd 10.0.1.1 ip from 192.168.0.0/24 ↵ to 'table(1)'
В этом примере показано перенаправление на канал «Мегаполиса» всего директорского трафика с адреса 192.168.0.100 и http-трафика, идущего из бухгалтерии с адресов 192.168.0.128/29. Остальным придётся терпеть, как и раньше, ради процветания родной компании.
Распределение трафика по типу Механизм форвардинга позволяет делить трафик и по типу. Например, один канал можно использовать для работы с электронной почтой и интернет-страницами, а весь ftp‑трафик направить во второй канал. В зависимости от режима использования интернет-доступа компанией есть некоторая надежда добиться таким образом равномерного баланса нагрузки на каналы и при этом учесть требования отдельных видов трафика к качеству соединения (процент потерь, величина задержек и т. д.). Пример приводить не буду – всё и так очевидно. Помимо форвардинга здесь можно использовать и некоторые «узкоспециализированные» решения. Например, если объём http-трафика достаточно высок, чтобы полностью задействовать один из каналов, то можно настроить прокси-сервер таким образом, чтобы он для своей работы использовал именно этот канал, а второй оставался бы для всего остального. Например, для Squid можно использовать параметры: tcp_outgoing_address 10.0.1.2 udp_incoming_address 10.0.1.2 udp_outgoing_address 10.0.1.2
Здесь 10.0.1.2 – IP-адрес на rl0; напомню, что шлюзом по умолчанию у нас является 10.1.1.1. Для полного счастья этого ещё недостаточно (поскольку трафик к «чужим» IP‑адресам по-прежнему будет стремиться уйти через шлюз по умолчанию), поэтому заключительным штрихом будет перенаправление трафика с адреса, к которому мы таким образом привязали Squid, в наш второй канал, скажем, тем же fwd-правилом: # ipfw add fwd 10.0.1.1 ip from 10.0.1.2 ↵ to not 192.168.0.0/24 out
Эта схема будет работать и без последующего NAT-преобразования, но при условии, что IP-адрес, заданный на rl0 (и к которому мы привязываем Squid) будет из диапазона, выданного нам провайдером, предоставляющим подключение на данном канале. Это даст гарантию, что и входящий трафик будет маршрутизирован должным образом. Ещё один пример: если один из каналов можно полностью выделить под электронную почту, то и почтовый сервер можно заставить работать через «альтернативный» канал, а не руководствоваться установленным шлюзом по умолчанию. Конфигурация для Sendmail:
CLIENT_OPTIONS(`Addr=10.0.1.2')dnl
Теперь вся исходящая почта будет уходить с указанного адреса – остаётся только пакеты перенаправить в нужный шлюз. (Думаю, не нужно пояснять, что на маршрут входящей почты мы можем влиять лишь соответствующей MX‑записью для нашего домена).
Распределение нагрузки по подсетям Если равномерно распределить трафик по типу не удаётся (допустим, 99% всей нагрузки приходится на http-соединения), то можно попытаться «раскидать» трафик внутренних подсетей по разным каналам. Использование для этой цели fwd-правил очевидно (с той же поправкой на дальнейшую NAT-трансляцию): ipfw add 4900 fwd 10.0.1.1 ip from 192.168.0.0/25 to any
Но в данном случае можно использовать распределение нагрузки и на базе NAT, запущенного на данном компьютере (рис. 2). Например, так это можно осуществить, используя ipfw и два экземпляра natd: # # # # # # # #
natd natd ipfw ipfw ipfw ipfw ipfw ipfw
-n rl0 -p 8668 -n rl1 -p 8669 add divert 8668 ip from 192.168.0.0/25 to any add divert 8669 ip from 192.168.0.128/25 to any add fwd 10.0.1.1 ip from 10.0.1.2 to any add fwd 10.1.1.1 ip from 10.1.1.2 to any add divert 8668 ip from any to 10.0.1.2 add divert 8669 ip from any to 10.1.1.2
Назначение fwd-правил, думаю, уже пояснять не требуется. Решение той же задачи с помощью фильтра pf: nat on rl0 from 192.168.0.0/25 to any -> 10.0.1.2 nat on rl1 from 192.168.0.128/25 to any -> 10.1.1.2 pass out route-to (rl0 10.0.1.1) from 10.0.1.2 to any pass out route-to (rl1 10.1.1.1) from 10.1.1.2 to any
Squid, кстати, тоже умеет использовать отдельные исходящие каналы для конкретных подсетей: acl subnet1 src 192.168.0.0/255.255.255.240 acl subnet2 stc 192.168.0.128/255.255.255.240 tcp_outgoing_address 10.0.1.2 subnet1 tcp_outgoing_address 10.1.1.2 subnet2
Ну и нужно не забыть про уже набивший оскомину форвардинг с соответствующего адреса в альтернативный шлюз. В некоторых экзотических случаях можно попробовать запустить два экземпляра прокси-сервера для обслуживания своих подсетей, но в большинстве случаев это может оказаться нерационально.
Пропорциональная балансировка Описанные примеры сравнительно просты и зачастую позволяют «малой кровью» достичь желаемого эффекта. Но когда трафик носит слишком нерегулярный характер (с утра бухгалтерия какие-то отчёты по электронке шлёт, забывая, как обычно, предварительно сжимать свои файлы Excel; под вечер сисадмин начинает качать очередной сервис-пак; в обеденный перерыв со всех отделов подска-
администрирование Использование мультиплексора ng_one2many В качестве особого случая обсуждаемого здесь вопроса можно рассматривать ситуацию, когда необходимо (или желательно) соединить несколько машин, входящих в вашу зону ответственности, используя одновременно несколько сетей разных провайдеров. Помимо того, что в каждой точке можно решать задачу автономно, FreeBSD предоставляет ещё одну возможность – использование узла ng_one2many. Этот netgraph-узел позволяет объединить не-
сколько интерфейсов по принципу «один ко многим», когда пакеты с интерфейса, объявленного как «one», по очереди перенаправляются в интерфейсы «many*» (поддерживается также возможность дублирования one-пакетов во все many-интерфейсы, но сейчас это нам неинтересно). Входящие пакеты со всех many-интерфейсов собираются в one-интерфейс. Подробности можно узнать на странице справки man ng_one2many(4), там же приведён пример конфигурации. Таким образом, если на обеих машинах настроить несколько туннелей
кивает http-трафик), то возникает желание поделить всю нагрузку «пополам». Пакетные фильтры pf и ipf предоставляют в ваше распоряжение средство балансировки трафика между несколькими внешними интерфейсами: алгоритм round-robin. Рассмотрим пример для pf: pass in on ed0 \ route-to { (rl0 10.0.1.1), (rl1 10.1.1.1)} round-robin \ from 192.168.0.0/24 to any keep state
Этим правилом входящий трафик на внутреннем интерфейсе (т.е. исходящий для пользователей) будет распределяться между интерфейсами rl0 и rl1 с соответствующими шлюзами по алгоритму round-robin (т.е. внешний интерфейс будет меняться циклически – первое соединение будет использовать rl0, второе – rl1, третье – снова rl0 и так далее). Опция keep state сохраняет состояние, благодаря чему все пакеты в рамках одного соединения будут использовать один и тот же шлюз. В итоге нагрузка будет распределяться между двумя каналами – нельзя сказать, что трафик поделится абсолютно поровну, но при рассмотрении за большой период времени можно считать, что балансировка будет приближаться к этому. Правда, в данном случае могут возникнуть некоторые проблемы. Например, если некий веб-сервер отслеживает сессию по исходящему IP-адресу, то такая смена шлюза может привести к тому, что уже после ввода логина/пароля при запросе другой страницы веб-сервер не «узнает» вас и потребует повторной аутентификации. Конечно, привязка сессии к IP-адресу в нынешних условиях широкой распространённости NATтрансляции – решение довольно странное, но всё ещё может встречаться (например, как «второй эшелон безопасности» в дополнение к использованию cookies). В pf для решения этой проблемы можно использовать опцию sticky-address – при её наличии в правиле nat Рисунок 2. Схема с «внутренними» или route-to с опцией NAT-серверами
№2, февраль 2007
через разные каналы и затем объединить их в ng‑узел, то можно удвоить пропускную способность соединения. К сожалению, сейчас ng_one2many не поддерживает алгоритмы распределения пакетов кроме round-robin («по очереди»), так что для настоящего удвоения необходимы каналы с одинаковой пропускной способностью. Существуют также проблемы с определением работоспособности конкретного канала, так что этот метод пока не слишком пригоден как средство обеспечения надёжности.
round-robin или random, фильтр будет следить за тем, чтобы все соединения с конкретного IP-адреса попадали на одно и то же правило трансляции или перенаправления. В ipfw тоже есть возможность реализовать нечто подобное, но на другом принципе. Здесь в правило можно включить опцию prob N, где N – число от 0 до 1, указывающее вероятность, с которой правило будет применяться к пакетам, подходящим по остальным критериям. В паре с действием skipto можно попробовать реализовать нечто подобное: ipfw ipfw ipfw ipfw
add add to add to add to
500 check-state 1000 prob 0.4 skipto 2000 ip from any ↵ any in via ed0 1500 fwd 10.0.1.1 ip from 192.168.0.0/24 ↵ any out keep-state 2000 fwd 10.1.1.1 ip from 192.168.0.0/24 ↵ any out keep-state
Правило 1000, имея в своём составе опцию prob 0.4, будет выполняться для всех исходящих пакетов (с точки зрения пользователей; для FreeBSD-шлюза это будут входящие пакеты на внутреннем интерфейсе, что и отражается опциями in via ed0) с вероятностью 40%. Эти 40% «счастливчиков» будут перебрасываться на правило 2000, которым будут отправляться в шлюз интерфейса rl1 (хотя, поскольку это шлюз по умолчанию, можно было бы ограничиться действием allow). Оставшиеся 60% пакетов продолжат свой путь и правилом 1500 будут переброшены на шлюз интерфейса rl0. Важной особенностью здесь является наличие опций keep-state – благодаря им под «пробу» будет попадать только первый пакет устанавливаемого соединения, а все остальные пакеты подпадут под действие правила checkstate, которое должно быть указано до правила skipto, чтобы избежать «разрыва» уже установленной сессии. Поскольку динамические правила сохраняют первоначальное действие (в данном случае forward), то все пакеты соединения будут отправляться через указанный шлюз. В отличие от балансировки по методу round-robin, здесь есть возможность распределять трафик между интерфейсами в любой пропорции. Кстати, такой механизм можно реализовать и в pf – используя опцию probability, работающую аналогично опции prob в ipfw.
Проблема резервирования Несмотря на то что резервирование сетевых каналов – одна из основных задач, ради которых заключаются догово-
администрирование Отступление про шейперы Вопросы регулирования трафика с помощью так называемого шейпинга (shaping) не относятся напрямую к теме данной статьи, но всё же о них следует упомянуть. Шейпинг позволяет распределять трафик по различным очередям с различными параметрами (такими как пропускная способность) и приоритетами, позволяя тем самым реализовывать различные политики качества обслуживания. Например, с помощью шейпинга можно выделить для кон-
кретной машины внутри сети гарантированную полосу пропускания, повысить приоритет http-трафика перед ftp-трафиком и т. д. Реализуется шейпинг, как правило, с помощью файервола. Во FreeBSD это можно сделать либо связкой ipfw/dummynet, либо PF/ALTQ. Зачастую грамотное распределение разных типов трафика по разным очередям позволяет заметно повысить качество работы интернет-соединения, приближающегося к пределу своих пропускных возможностей.
Multipath в Linux В Linux, в отличие от FreeBSD, всё заметно проще благодаря имеющемуся пакету iproute2. Он предоставляет возможность задавать несколько шлюзов по умолчанию с различным весом, за счёт чего балансировка трафика в любых пропорциях реализуется просто и прозрачно. Более подробные сведения вы найдёте на страницах справки и в дополнительной литературе (ссылки на некоторые материалы смотрите в конце статьи).
ры сразу с несколькими провайдерами, FreeBSD не предо- торому будет проверяться. Например, если выбрать в каставляет штатных средств решения этой задачи в автома- честве такового шлюз или DNS-сервер провайдера, то в тическом режиме (по крайней мере, мне их найти не уда- случае аварии на внешнем канале провайдера эти ресурлось). Приходится искать обходные пути. сы будут доступны, и переключение на резервный канал Например, можно разработать небольшой скрипт, кото- не произойдёт. рым будет контролироваться работоспособность канала: Можно пытаться определять доступность некоторого удалённого ресурса (скажем, сервера yandex.ru), указывая #!/bin/sh с помощью ключа -S команды ping конкретный IP-адрес источника для отправляемых пакетов (понятно, что этот адрес GW1=10.161.193.1 GW2=83.221.201.197 должен «заворачиваться» в нужный интерфейс): /sbin/ping -q -c 1 $GW1 > /dev/null 2>&1 if [ $? != 0 ]; then /sbin/ping -q -c 1 $GW2 > /dev/null 2>&1 if [ $? = 0 ]; then if [ ! -f /tmp/gw.changed ]; then /sbin/route change default $GW2 \ && touch /tmp/gw.changed fi fi else if [ -f /tmp/gw.changed ]; then /sbin/route change default $GW1 \ && rm /tmp/gw.changed fi fi
То есть мы просто «пингуем» шлюз на стороне основного провайдера, и если он оказывается недоступен, то: n проверяем работоспособность резервного канала; n перенастраиваем маршрут по умолчанию на шлюз резервного канала; n оставляем «метку» /tmp/gw.changed, сигнализирующую о смене шлюза. При следующем выполнении (например, скрипт можно запускать по cron раз в минуту), если GW1 в норме и есть «метка», то возвращаем основной шлюз на место. Если оба шлюза недоступны, текущее состояние не меняем. Показанный пример упрощён (в частности, могут потребоваться перенастройка NAT-сервера и правил файерволов для работы с новым шлюзом), но для понимания принципа работы достаточен. Основным (и, видимо, единственным) достоинством этого метода можно назвать прозрачность и сравнительную простоту. Недостатки – определённая инерционность, хоть и небольшие, но всё же непроизводственные затраты трафика, ненулевая вероятность ложных срабатываний, особенно при высокой загрузке канала. Более серьёзной проблемой, чем может показаться на первый взгляд, является выбор ресурса, доступ к ко-
10
ping -S 10.0.1.2 yandex.ru
Но и в этом случае могут быть разные «казусы», например, временная недоступность самого ресурса при нормальной работе обоих каналов. Хотя если проверять доступность одного и того же ресурса приведённым выше сценарием, то переключения на резервный канал не произойдёт, поскольку его работоспособность также не будет подтверждена.
Заключение Как видите, при желании можно решить почти любую задачу. Хотя приходится констатировать, что системе FreeBSD явно недостаёт возможностей пакета iproute2, используемого в Linux. Если бы была возможность, скажем, указывать несколько шлюзов по умолчанию с разными метриками, многие проблемы эффективного использования нескольких внешних каналов решались бы гораздо элегантнее. 1. Балансировка загрузки каналов средствами FreeBSD – http:// www.opennet.ru/base/net/freebsd_balance.txt.html. 2. FreeBSD: управление загрузкой 2 каналов, отказоустойчивость и балансировка нагрузки – http://dreamcatcher.ru/docs/ freebsd_bal.html. 3. Policy-Based Routing (PBR) в ОС FreeBSD – http://ipfw.ism.kiev.ua/ pbr.html. 4. Укрощение двухголового змия – http://www.xakep.ru/magazine/ xa/092/110/1.asp. 5. Маршрутизация через несколько каналов/провайдеров (Linux) – http://www.opennet.ru/docs/RUS/LARTC/x348.html. 6. Два канала в Internet (Linux) – http://www.osp.ru/lan/2002/05/ 042_print.html. 7. Balancing Connections Over Multiple Links (Linux) – http://tetro.net/ misc/multilink.html.
администрирование
Создаём интегрированный в Active Directory файл-сервер на базе Samba во FreeBSD
Алексей Бережной «Как поступить со старой серверной техникой?» – такой вопрос возникает во многих организациях. На базе сервера, давно устаревшего по критериям Microsoft, вы можете сделать вполне приличный файл-сервер и сервер печати, используя пакет Samba3.x и операционную систему FreeBSD 6.x.
Л
ежал без дела в серверной ста- ли памяти: 4 слота по 256 Мб – всего рый сервер с двухпроцессор- 1 Гб ОЗУ. А это уже не так плохо. К тоной материнской платой, дву- му же после апгрейда других сервемя процессорами Pentium III 450 МГц ров у меня скопилось некоторое ко«на борту» и SCSI-адаптером (80 Мб/с, личество SCSI‑винчестеров: шесть но все же «скайзи»!), правда, без под- дисков (три пары по два одинаковых) держки функций RAID-контроллера. размером 18 Гб и два диска размеК моей радости, к материнской плате ром по 9 Гб. подошли обычные Non-ECC (то есть А тут на основном файловом сербез контроля четности) SDRAM-моду- вере стало заканчиваться свободное
12
место. Возникло решение: не так часто используемые файлы, такие как юридическая справочная база данных, коллекцию драйверов и другие подобные «пожиратели пространства», перенести на отдельный файл-сервер. Другая проблема возникла с необходимостью использования старинных программ, написанных для DOS‑совместимых операционных сис-
администрирование тем. Как известно, многие из них не работают с сетевыми печатающими устройствами. В лучшем случае от них можно добиться корректного вывода на LPT‑порт из Windows 2000/XP. А посему просто необходим сервер печати, позволяющий подключать сетевые принтеры на порт LPT командой «net use».
Готовим к инсталляции Samba
Организация дискового пространства Объем
Обозначение устройства во FreeBSD
Примечание
9 Гб
da0
Диск с установленной системой
9 Гб
da1
Файл подкачки + место для хранения резервной копии конфигурационных файлов
18 Гб
da2
Первый дисковый массив RAID1
18 Гб
da3
Выбор операционной системы и планирование конфигу- 18 Гб da4 Второй дисковый массив RAID1 рации сервера. 18 Гб da5 В качестве операционной системы я выбрал FreeBSD. 18 Гб da6 Третий дисковый массив RAID1 Подкупила низкая требовательность к ресурсам вкупе 18 Гб da7 с высокой стабильностью и хорошо продуманной системой инсталляции ПО через коллекцию портов. К тому же она стройки был описан в моей статье: «Настраиваем шлюз бесплатна, а покупку дополнительной лицензии, скажем, в Интернет на базе FreeBSD», вышедшей в №12 за 2006 г. Microsoft Windows 2003 Server для «файлопомойки» вряд ли Кроме того, с этой задачей прекрасно справится все та же кто-то одобрит. Версия OS также определилась сразу – 6.1, программа sysinstall. После всех настроек наш сервер как самая свежая на тот момент. Ну а раз решено ставить имеет имя fs, сетевой адрес 192.168.1.3, маску подсети UNIX-систему в качестве файлового сервера для клиентов 255.255.255.0. Имя домена: mydomain.ru. Так как создается дополнительный файл-сервер для храсети Microsoft Windows, да еще интегрированного в структуру каталога Active Directory, то ясно, что без пакета про- нения некритичных файлов, который будет располагаться внутри периметра локальной сети, требования к безопасграмм Samba не обойтись. Поскольку винчестеры, которые предполагалось ис- ности в данном случае не слишком высокие. Поэтому я пользовать, были, что называется, «видавшие виды», нуж- не стал устанавливать на эту машину файервол. В то же но было задуматься о структуре дискового массива. При- время хотелось бы иметь возможность назначать права на няв во внимание тот факт, что купить аналогичные 18 Гб тот или иной ресурс для каждого пользователя. SCSI-винчестеры на замену вышедшим из строя не представляется возможным, я решил организовать три неболь- Сборка ядра с поддержкой ших массива RAID1 (прямое зеркалирование) по 18 Гб каж- двухпроцессорной конфигурации дый для хранения данных. В случае выхода одного из зер- и дисковых квот кальных дисков из строя это позволит сделать резервную Поскольку у нас двухпроцессорный сервер, то для вклюкопию данных. А заменять в этом случае лучше сразу оба чения двухпроцессорной поддержки необходимо пересобзеркальных диска, не дожидаясь выхода из строя второго рать ядро с опциями поддержки SMP. Кроме того, я решил накопителя. Поскольку встроенной аппаратной поддержки включить в ядре заодно и опцию поддержки дисковых квот RAID в данной материнской плате не наблюдалось, требо- (на будущее, как я уже писал выше). Переходим в каталог с конфигурационными файлами валось сделать программный RAID средствами, доступныдля процессоров с архитектурой i386: ми в ОС FreeBSD 6.1 Также, несмотря на отсутствие на данный момент необfs# cd /sys/i386/conf ходимости, решил зарезервировать возможность применения дисковых квот на будущее. Делаем копию файла GENERIC: Систему установил на первый 9-гигабайтный диск, а файл подкачки размером 2 Гб создал на другом 9-гигаfs# cp GENERIC fs байтном диске, чтобы тем самым повысить быстродействие системы. Остаток пространства на втором 9-гигабайтном диске решил зарезервировать для резервного копирова- открываем файл на редактирование и добавляем следующие строки: ния конфигурационных файлов. Таким образом, была запланирована следующая оргаfs# vi fs низация дискового пространства (см. таблицу).
Начало установки Наверное, не имеет смысла подробно рассказывать, как устанавливать саму операционную систему и как размечать первые два диска. Со всем этим прекрасно справляется программа /usr/sbin/sysinstall. Отмечу только, что, так как мы будем строить на базе оставшихся дисков RAID-массивы, нет смысла выполнять их разметку на этапе установки системы. После установки операционной системы необходимо сконфигурировать сетевые интерфейсы. Этот процесс на-
№2, февраль 2007
Опцию поддержки двухпроцессорной архитектуры: options
SMP
Опцию поддержки дисковых квот: options
QUOTA
Изменяем параметр ident (это поможет в дальнейшем использовать команду «uname -i» для в качестве «шпар-
13
администрирование галки» при определение наличия мультипроцессорной поддержки в ядре): ident
SMP-GENERIC
Создаем компиляционный каталог: fs# config fs
Эта команда создаст директорию /usr/src/sys/compile/fs и поместит туда файлы, необходимые для компиляции ядра. Сохраняем изменения, закрываем файл, переходим в нужный каталог: fs# cd ../compile/fs
и запускаем компиляцию ядра: fs# make depend && make && make install
(последовательность && означает, что следующая команда будет выполняться только после успешного завершения предыдущей), после чего можно идти пить кофе, потому что процесс сборки ядра на подобной конфигурации выполняется далеко не так быстро, как хотелось бы. Вернувшись, перезагружаем систему и смотрим, нормально ли работает только что собранное ядро: fs# reboot
дания зеркальных массивов. У нас самый простой случай, так как мы объединяем свободные от данных, идентичные винчестеры в простой RAID1: fs# gmirror label -v gm0 da2 da3 fs# gmirror label -v gm1 da4 da5 fs# gmirror label -v gm2 da6 da7
Итак, у нас созданы на дисках da2, da3, da4, da5, da6, da7 соответствующие метки, указывающие на их принадлежность к тому или иному дисковому массиву. Необходимо включить поддержку gmirror. Добавляем в /boot/loader.conf функцию geom_mirror_load=YES и перезагружаемся. fs# echo geom_mirror_load="YES" >> /boot/loader.conf
После перезагрузки проверяем наличие вновь созданных псевдоустройств, представляющих собой дисковые массивы: fs# ls /dev/mirror gm0
gm1
gm2
Теперь можно создать файловые системы на этих разделах: fs# newfs /dev/mirror/gm0 fs# newfs /dev/mirror/gm1 fs# newfs /dev/mirror/gm2
Перезагрузку на данном этапе можно было бы и не вы- Поддержка ACL полнять, поскольку все равно придется перезагружаться Теперь еще одна интересная деталь. FreeBSD, как и все после объединения винчестеров в дисковые массивы, но я стандартные UNIX-системы, имеет стандартную структуру предпочитаю лишний раз убедиться, что все идет по плану. атрибутов. Что это означает? Это значит, что для одного Кроме того, после перезагрузки будут работать оба процес- файла, каталога или другого ресурса можно задать следусора, что немаловажно для нашего не слишком производи- ющие права: права для владельца, права для группы (прительного железа. Обновляем коллекцию портов: чем владелец файла необязательно должен принадлежать этой группе) и права для всех остальных. Но представьте fs# portsnap fetch && portsnap extract && portsnap update себе ситуацию, когда над одним файлом работают сразу несколько пользователей, к тому же совершенно из разных групп. Как поступить в этом случае? Выход есть – создать Создание дисковых массивов еще одну дополнительную группу, в которую бы входили В современных версиях FreeBSD есть три способа созда- все данные пользователи, и разрешить этой группе доступ ния RAID1-массивов: к ресурсу. Вроде бы все ничего, только в стандартных слуn Старый добрый ccd, издавна присутствовавший чаях в UNIX существует еще одно ограничение: пользоваво FreeBSD, но показавшийся, на мой взгляд, доволь- тель может входить не более чем в 16 групп (включая групно сложным для решения простейших задач. пу по умолчанию). А если пользователю необходимо периоn Неплохо отработавший во FreeBSD 4-й ветки vinum. Сов- дически работать над 17 аналогичными ресурсами? Вот тут ременная интерпретация vinum носит название gvinum, на помощь приходит поддержка Access Control Lists (сокрачтобы подчеркнуть, что работа современного vinum щенно ACL), проще говоря, – списков доступа. Это позвостроится на базе другого продукта: GEOM. Кроме того, ляет разрешить доступ пользователям из различных групп сам vinum имеет непрозрачный для понимания конфи- к одному ресурсу, не включая этих пользователей в дополнительную группу, так, как это реализовано в операционгурационный файл. n И наконец, сам GEOM – новый программный продукт, ных системах Microsoft Windows и Novell Netware. имеющий хорошую репутацию и прекрасно работаюПомимо указанной проблемы, существует и другая щий в 5-й и 6-й ветках FreeBSD. причина применения ACL. Это делегирование полномочий. В нашем случае сотрудник, ответственный за поддеЯ выбрал GEOM за его простоту и стабильность. Мы бу- ржание системы в отсутствие системного администратодем использовать утилиту gmirror из пакета GEOM для соз- ра, даже не обладая знаниями по операционным системам
14
администрирование семейства UNIX, сможет сам назначать права, используя обычный инструментарий (в данном случае – Проводник Microsoft Windows). Поддержка ACL по умолчанию включена в ядро GENERIC FreeBSD 6.1. Поскольку при построении нашего ядра мы ориентировались на ядро GENERIC, нам нужно только включить поддержку ACL для выбранных файловых систем. У нас самый простой случай, потому что мы включаем поддержку ACL для несмонтированных файловых систем, на которых нет данных. Итак, приступим. Вводим команду: fs# /sbin/tunefs -a enable /dev/mirror/gm0
# GMIRROR volume /dev/mirror/gm0 /vol0 /dev/mirror/gm1 /vol1 /dev/mirror/gm2 /vol2
ufs ufs ufs
rw rw rw
1 1 1
2 2 2
Установка Kerberos, интеграция с Active Directory В Active Directory для обеспечения единой системы безопасности используется протокол Kerberos. Во FreeBSD для его поддержки нужно установить программу heimdal: fs# cd /usr/ports/security/heimdal fs# make install clean
Создаем файл /etc/krb5.conf: На что система нам выдаст ответ:
fs# vi /etc/krb5.conf
tunefs: ACLs set
Аналогично:
И вносим туда следующие строки:
fs# /sbin/tunefs -a enable /dev/mirror/gm1
[libdefaults] default_realm = MYDOMAIN.RU clockskew = 300 v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } }
tunefs: ACLs set
fs# /sbin/tunefs -a enable /dev/mirror/gm2 tunefs: ACLs set
Все, теперь можно смело монтировать наши созданные файловые системы.
Монтирование и проверка созданных разделов
[realms]
Создаем каталоги для монтирования новых файловых систем (в моем случае это были каталоги: /vol0, /vol1, /vol2): fs# mkdir /vol0 fs# mkdir /vol1 fs# mkdir /vol2
И монтируем файловые системы наших RAID-массивов: fs# mount /dev/mirror/gm0 /vol0 fs# mount /dev/mirror/gm1 /vol1 fs# mount /dev/mirror/gm2 /vol2
Стоит обратить особое внимание на строки: default_realm = MYDOMAIN.RU и default_domain = mydomain.ru. Они необходимы для описания домена, который подразумевается по умолчанию, когда пользователь не указывает его имя в явном виде. Синхронизируем время с контроллером домена:
Проверяем: fs# mount /dev/da0s1a on / (ufs, local, soft-updates) devfs on /dev (devfs, local) /dev/da1s1d on /add (ufs, local, soft-updates) /dev/mirror/gm1 on /vol1 (ufs, local, acls) /dev/mirror/gm0 on /vol0 (ufs, local, acls) /dev/mirror/gm2 on /vol2 (ufs, local, acls)
fs# ntpdate 192.168.1.6
Запись «acls» показывает, что для указанных файловых систем включена поддержка ACL. Добавляем нужные записи в /etc/fstab: fs# vi /etc/fstab # Device /dev/da1s1b /dev/da0s1a /dev/da1s1d /dev/acd0
Mountpoint none / /add /cdrom
№2, февраль 2007
MYDOMAIN.RU = { kdc = pdc.mydomain.ru admin_server = pdc.mydomain.ru default_domain = mydomain.ru } OTHER.REALM = { v4_instance_convert = { kerberos = kerberos computer = pdc.mydomain.ru } } [domain_realm] .mydomain.ru = MYDOMAIN.RU
Я предпочитаю, чтобы время синхронизировалось при каждом старте системы (мало ли из-за чего мог перезагрузиться сервер, например, из-за длительного отключения питания), для этого добавляем в файл /etc/rc.local строку с командой синхронизации. Следующая команда добавляет команду ntpdate в стартовый файл запуска /etc/rc.local: fs# echo ntpdate 192.168.1.6 >> /etc/rc.local
FStype swap ufs ufs cd9660
Options sw rw rw ro,noauto
Dump Pass# 0 0 1 1 2 2 0 0
Пробуем получить билетик от Kerberos: fs# kinit -p Administrator
15
администрирование Ответ системы в положительном случае: Administrator@MYDOMAIN.RU's password:
После ввода правильного пароля система выдаст ответ: kinit: NOTICE: ticket renewable lifetime is 1 week
Если введен неверный пароль, система выдаст сообщение: kinit: krb5_get_init_creds: Preauthentication failed
Если возникли какие-либо дополнительные проблемы, нужно более тщательно проверить конфигурационный файл /etc/krb5.conf. С приведенными здесь настройками у меня в сети данная схема работает. Если возникли дополнительные трудности, рекомендую книгу «Active Directory для Windows Server 2003. Справочник администратора», авторы Стен Реймер и Майк Малкер, СП ЭКОМ. Москва, 2004 г. Проверим состояние соединения; fs# klist Credentials cache: FILE:/tmp/krb5cc_0 Principal: berezhnoy_a@MYDOMAIN.RU Issued Expires Principal Jan 11 17:03:04 Jan 12 03:03:04 krbtgt/MYDOMAIN.RU@MYDOMAIN.RU
Все. Поддержка Kerberos включена.
Настройка файла переключения служб /etc/nsswitch.conf Я не буду подробно описывать для чего нужен файл nsswitch.conf и какие опции он содержит. Обо всем этом подробнейшим образом можно узнать посредством man nsswitch.conf. Из файла /etc/nsswitch.conf удаляем все, оставим только следующие строки: passwd: files winbind group: files winbind hosts: files dns
Теперь, когда выполнены все необходимые подготовительные этапы, можно приступать к установке и настройке Samba-сервера.
Установка Samba И теперь нам осталось последнее и самое важное: установить пакет программ Samba (вместе с системой печати CUPS) и настроить его. Так как необходима интеграция с Active Directory, мы используем Samba версии 3x (в нашем случае 3.0.23d). Устанавливаем Samba из портов: fs# cd /usr/ports/net/samba3 fs# make install clean
Появится окно с предложением выбрать нужные опции, которые будет поддерживать наш Samba-сервер. Я отметил следующие опции (некоторые модули, приведенные без комментариев, включены с расчетом «на будущее», чтобы не пересобирать каждый раз Samba):
16
[X] LDAP With LDAP support # Включаем поддержку LDAP [X] ADS With Active Directory support # Необходимо для интеграции # с Active Directory [X] CUPS With CUPS printing support # Система печати [X] WINBIND With WinBIND support # Необходимо для интеграции # с Active Directory [X] ACL_SUPPORT With ACL support # Поддержка ACL [X] FAM_SUPPORT With File Alteration Monitor [X] SYSLOG With Syslog support # Поддержка Syslog [X] QUOTAS With Disk quota support # Поддержка квот [X] UTMP With UTMP accounting support [X] MSDFS With MSDFS support # Поддержка Microsoft # Distributed File Systems [X] PAM_SMBPASS With PAM authentication vs passdb backends [ ] CLUSTER With experimental cluster support [ ] EXP_MODULES With experimental modules [X] POPT With system-wide POPT library [ ] MAX_DEBUG With maximum debuging
После некоторого этапа компиляции появится окно с выбором опций для сборки CUPS. Опять же с тем же расчетом «на будущее» я отметил все опции. После сборки необходимо отредактировать файл /etc/rc.conf на предмет запуска необходимых «демонов» – резидентных программ. Открываем файл /etc/rc.conf: fs# vi /etc/rc.conf
И вносим туда необходимые строки: cupsd_enable="YES" # inetd_enable="YES" # nmbd_enable="YES" # smbd_enable="YES" # winbindd_enable="YES"
Unix Pint System Super Daemon for call some services SMB client for Unix (need for WINS) SMB server for Unix # WinBIND for Windows autorization
После чего перезагружаемся и проверяем запущенные сервисы: fs# ps aux | grep inetd root 533 0.0 0.1 1428 /usr/sbin/inetd -wW -C 60
952 ?? Is
Fri04PM
0:00.06
root 418 0.0 0.2 4184 2168 ?? Is /usr/local/sbin/cupsd
Fri04PM
0:04.75
root 437 0.0 0.2 5544 2128 ?? Ss Fri04PM /usr/local/sbin/nmbd -D -s /usr/local/etc/smb.conf
0:30.16
root 441 0.0 0.4 9588 4120 ?? Is Fri04PM /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf
0:01.19
fs# ps aux | grep cupsd
fs# ps aux | grep nmbd
fs# ps aux | grep smbd
fs# ps aux | grep winbindd root 446 0.0 0.3 7036 2788 ?? Ss Fri04PM /usr/local/sbin/winbindd -s /usr/local/etc/smb.conf
0:11.49
Настройка системы печати CUPS Весь этап настройки CUPS сводится к редактированию файла /usr/local/etc/cupsd.conf: fs# vi /usr/local/etc/cupsd.conf
Привожу пример своего файла cupsd.conf. Красным цветом выделены необходимые изменения:
администрирование # # "$Id: cupsd.conf.in 5454 2006-04-23 21:46:38Z mike $" # # Sample configuration file for the Common UNIX Printing # System (CUPS) scheduler. See "man cupsd.conf" for # a complete description of this file. # # Log general information in error_log - change "info" # to "debug" for troubleshooting... LogLevel info # Administrator user group... SystemGroup wheel # Only Listen Listen Listen
listen for connections from the local machine. localhost:631 192.168.1.3:631 /var/run/cups.sock
# Show shared printers on the local network. Browsing On BrowseOrder allow,deny BrowseAllow @LOCAL # Default authentication type, when authentication # is required... DefaultAuthType Basic # Restrict access to the server... <Location /> Order deny,allow Deny From All Allow localhost Allow 192.168.1.* </Location> # Restrict access to the admin pages... <Location /admin> AuthType Basic AuthClass System Encryption Required Order deny,allow Deny From All Allow localhost Allow 192.168.1.* </Location> # Restrict access to configuration files... <Location /admin/conf> AuthType Basic Require user @SYSTEM Order deny,allow Deny From All Allow localhost Allow 192.168.1.* </Location> # Set the default printer/job policies... <Policy default> # Job-related operations must be done by the owner or # an adminstrator... <Limit Send-Document Send-URI Hold-Job Release-Job RestartJob Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job SuspendCurrent-Job Resume-Job CUPS-Move-Job> Require user @OWNER @SYSTEM Order deny,allow </Limit> # All administration operations require an adminstrator # to authenticate... <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Job s Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-JobAfter CUPS-Add-Printer CUPS-Delete-Printer CUP S-Add-Class CUPS-Delete-Class CUPS-Accept-Jobs CUPS-RejectJobs CUPS-Set-Default> AuthType Basic Require user @SYSTEM Order deny,allow </Limit> # Only the owner or an administrator can cancel # or authenticate a job...
№2, февраль 2007
<Limit Cancel-Job CUPS-Authenticate-Job> Require user @OWNER @SYSTEM Order deny,allow </Limit> <Limit All> Order deny,allow </Limit> </Policy> # # End of "$Id: cupsd.conf.in 5454 2006-04-23 21:46:38Z # mike $". #
Коротко прокомментируем: Строка: Listen 192.168.1.3:631
указывает, на каком интерфейсе и порту сервер CUPS будет ожидать соединения с интернет-браузером для настройки параметров. Строки: Order deny,allow Deny From All Allow localhost Allow 192.168.1.*
разрешают доступ к серверу для настройки только с внутренней подсети 192.168.1.*. Строка: Encryption Required
указывает, что для доступа к веб-интерфейсу управления CUPS будет использоваться шифрованный протокол https. Перезапускаем CUPS: fs# /usr/local/etc/rc.d/cupsd restart
Для того чтобы CUPS стартовал автоматически при каждом запуске системы, мы уже добавили строку «inetd_enable=”YES”» в файл /etc/rc.conf. Далее посредством интернет-браузера подключаемся к адресу: https://192.168.1.3:631. Система предложит принять сертификат. Соглашаемся. В разделе «Администрирование» сервер будет запрашивать пароль. Вводим логин root и соответствующий пароль. Все, можно подключать и настраивать принтеры (см. рис. 1, 2). Возможные проблемы и пути их разрешения: 1. На файерволе (если вы все же решите использовать файервол на этом серврере и/или на рабочей станции) закрыт TCP-порт 631. Соответственно нужно или открыть этот порт или использовать другой. 2. Используется прокси-сервер, который не позволяет интернет-браузеру нормально работать c веб-интерфейсом CUPS. Нужно или отключать прокси или указать в настройках интернет-браузера – не использовать прокси-сервер для соединения с данным сервером. 3. Не запущен «демон» cupsd. Проверить это можно командой:
17
администрирование
Рисунок 1. Так выглядит раздел «Администрирование» в веб-консоли для настройки сервера CUPS
Но поскольку мы решили идти по пути делегирования полномочий, то все настройки будем выполнять через веб-консоль настройки Samba – SWAT. Дополнительный бонус, который мы получаем в этом случае, – наличие прекрасной системы помощи при конфигурировании Samba-сервера. Программа SWAT вызывается посредством супердемона inetd. Мы уже добавили строку «inetd_enable=”YES”» в файл /etc/rc.conf для его автоматического запуска. Поэтому всего лишь остается открыть для редактирования конфигурационный файл /etc/inetd.conf: fs# vi /etc/inetd.conf
и раскомментировать в нем следующую строку: swat stream tcp nowait/400 root /usr/local/sbin/swat swat
↵ ↵
после чего перезапустить «демон» inetd: fs# killall -1 inetd
Проверяем доступность веб-консоли по 901 порту: fs# sockstat | grep 901 Рисунок 2. Консоль управления подключенным принтером
root
inetd
533
fs# ps aux | grep cupsd
5 tcp4
*:901
*:*
После чего вводим в строке интернет-браузера адрес http://192.168.1.3:901, в ответ на запрос пароля вводим лоВ ответ вы увидите сообщение: гин и пароль root. Все, мы подключились к серверу Samba через веб-консоль программы SWAT. root 418 0.0 0.3 4120 2616 ?? Ss Fri01AM 0:06.13 Нас интересуют в первую очередь вкладки «GLOBALS» /usr/local/sbin/cupsd и «WIZARD». Управляя параметрами, приведенными в них, Если «демон» не запущен, сообщение выведено не бу- необходимо создать соответствующий конфигурациондет. Запустить cupsd можно следующим образом: ный файл. Изменения сохраняются при нажатии кнопки «Commit». Проконтролировать его содержание можно fs# /usr/local/etc/rc.d/cupsd start во вкладке «VIEW» (см. рис. 3, 4, 5). Приведу пример основной части моего конфигураципосле чего нужно проверить наличие строчки «cupsd_enable= онного файла: ”YES”» в файле /etc/rc.conf.
Настройка файлового сервера Итак, наступил решающий момент. Мы настраиваем наш конфигурационный файл Samba – smb.conf. «Классический» метод настройки данного сервиса заключается в копировании файла /usr/local/etc/smb.conf. sample в /usr/local/etc/smb.conf с последующим редактированием smb.conf в текстовом редакторе: fs# cp usr/local/etc/smb.conf.sample ↵ usr/local/etc/smb.conf fs# vi usr/local/etc/smb.conf
18
# Samba config file created using SWAT # from 192.168.1.32 (192.168.1.32) # Date: 2007/01/12 15:19:15 [global] dos charset = cp866 unix charset = koi8-r display charset = cp866 workgroup = ARS realm = MYDOMAIN.RU server string = Samba Server security = DOMAIN auth methods = winbind map to guest = Bad User client NTLMv2 auth = Yes client lanman auth = No
администрирование
client plaintext auth = No log file = /var/log/samba/log.%m max log size = 50 client signing = Yes preferred master = No local master = No domain master = No dns proxy = No wins server = 192.168.1.1 ldap ssl = no usershare allow guests = Yes idmap uid = 10000-20000 idmap gid = 10000-20000 winbind use default domain = Yes printer admin = root acl group control = Yes hosts allow = 192.168.1., 127. map acl inherit = Yes case sensitive = No
Процесс создания конфигурационного файла при помощи SWAT несколько необычен, но несложен. В случае возникновения проблем с подключением к SWAT, как и в случае с CUPS, нужно проверить доступность сервера по соответствующему порту (port 901), возможно, настроить браузер, чтобы тот не использовал прокси для адреса файл-сервера, проверить запуск супердемона inetd. После создания нужной конфигурации переходим на вкладку «STATUS» и при помощи кнопки «Restart All» перезапускаем «демоны», входящие в пакет Samba 3x (см. рис. 5). Включаем наш сервер в домен:
Рисунок 3. Так выглядит вкладка «GLOBALS» для задания общих параметров
fs# net ads join -U ↵ _Domain_Administrator_%_password_of_domain_admin_ Joined 'FS' to realm 'MYDOMAIN.RU'
Проверим правильность работы WinBIND: fs# wbinfo -t
Система должна ответить: checking the trust secret via RPC calls succeeded
Если мы получили данное сообщение, это означает, что учетная запись компьютера в Active Directory создана успешно. Просмотрим список пользователей и компьютеров Active Directory при помощи команды: fs# wbinfo -u
и список групп командой: fs# wbinfo -g
Последнее, что мы должны посмотреть, – это аутентификацию в домене:
Рисунок 4. Так выглядит вкладка «SHARES», служащая для конфигурации общих папок
fs# wbinfo -a _имя_юзера_%_пароль_юзера_
можно быть уверенным – аутентификация в Active Directory выполнена успешно.
При ответе:
Создание общих ресурсов
plaintext password authentification succeeded challenge/response password authentification succeeded
№2, февраль 2007
Поскольку сервер находится внутри периметра локальной офисной сети, куда закрыт доступ всем, кроме пользова-
19
администрирование Используя вкладки «SHARES» и «PRINTERS» управляющей веб-консоли SWAT, добавляем к своему конфигурационному файлу следующие опции: [printers] comment = All Printers path = /var/spool/samba printable = Yes browseable = No [vol0] comment = vol0 path = /vol0 read only = No guest ok = Yes hosts allow = browseable = No [vol1] path = /vol1 read only = No guest ok = Yes hosts allow = browseable = No [vol2] path = /vol2 read only = No guest ok = Yes hosts allow = available = No Рисунок 5. Вкладка «STATUS», где нужно перезапустить «демоны» пакета Samba
[hp_LaserJet_1320_series_192.168.1.15] comment = hp LaserJet 1320 series path = /var/spool/samba read only = No guest ok = Yes printable = Yes printer name = hp_LaserJet_1320_series_192.168.1.15 oplocks = No share modes = No
И снова перезапускаем «демоны» из вкладки «STATUS». Где vol0, vol1, vol2 – необходимые общие ресурсы, а hp_LaserJet_1320_series_192.168.1.15 – общий принтер, созданный для примера. Все, теперь можно вводить в адресной строке Проводника Windows необходимое значение, скажем, \\fs\vol0\, создавать каталоги, назначать права и подключать их как сетевые диски (см. рис. 6).
Заключение Рисунок 6. Создаем каталоги и назначаем права обычными средствами Windows
телей, находящихся внутри офиса, я решил организовать общие ресурсы следующим образом: создать общие папки \\fs\vol0, \\fs\vol1, \\fs\vol2, сделать их скрытыми, разрешив при этом гостевой доступ. Внутри этих папок создать подкаталоги, а уже на них средствами Windows установить ограниченные права. А пользователям подключать сетевые диски командой net use, например: c:\> net use h: \\fs\vol0\_имя_каталога_
Что же касается общих принтеров, то с ними вообще не должно возникнуть проблем при подключении командой типа: c:\> net use lpt2: \\fs\_printer_name_
20
Идея использования операционных систем семейства UNIX в сети Microsoft Windows, пусть даже на вспомогательных ролях, всегда вызывала некоторое недоверие скептиков. Однако простота реализации и, главное, возможность делегирования полномочий, описанные в данной статье, способны пошатнуть устоявшееся мнение о трудности совместного использования UNIX- и Windows-платформ. Наличие таких удобных инструментов управления, как веб-консоли CUPS и SWAT, ACL и возможность управлять правами доступа из обычного Проводника Windows делают реальным администрирование сервера, даже не имея серьезного опыта работы с UNIX-подобными операционными системами. 1. «Using Samba» By Jay Ts, Robert Eckstein, David CollierBrown 2nd Edition, February 2003 O’Reilly & Associates, ISBN: 0‑596‑00256‑4 – http://us3.samba.org/samba/docs/using_samba/ toc.html. 2. «SAMBA с авторизацией в AD и поддержкой NT ACL» – http://www.lissyara.su.
Утилита find Не стесняйтесь искать
полезные советы find ./ -name "*.py" -exec cat {} \;
Поиск файлов – частая операция, если только вы не обА так можно вывести на экран содержимое всех скрипладаете феноменальной памятью или не поддерживаете тов на Python (если точнее, то файлов, имеющих расширевсе вверенные вам файлы в строгом порядке. Да и вряд ние .py). Обратите внимание на непонятную конструкцию ли память вам поможет, если нужно будет найти систем- «{}» – в процессе выполнения она будет заменена резульный файл, фигурирующий в сообщении об ошибке какой- татом поиска, т.е. cat получит в качестве параметров спинибудь службы. сок соответствующих файлов. Точка с запятой в конце тоЭта небольшая подборка советов посвящена утилите же обязательна – это указание для find, что опция exec заfind – наиболее эффективному (но почему-то пугающему кончилась. Чтобы «;» не интерпретировалась оболочкой, новичков) средству поиска и «массовой обработки» фай- не забывайте его экранировать. лов. Начну с нескольких простых примеров. find ./ -name "milter-spa*"
Эта команда выведет список файлов, имена которых соответствуют указанному шаблону, размещённых начиная с текущего каталога и вглубь до победного конца. Обратите внимание на несколько нестандартный порядок параметров вызова – сначала указывается начальный каталог поиска, а затем – опции. Если вы запустите эту команду от имени непривилегированного пользователя в системном каталоге, то наверняка получите массу сообщений типа: find: ./backup/pgsql: Permission denied
Избавиться от них поможет следующий приём:
Не забывайте о времени При необходимости всегда можно воспользоваться богатым набором опций для поиска файлов на основании их временных атрибутов (времени модификации, доступа и т. д.). find ./ -atime +90d -size +20 -exec tar cjf old.tbz2 {} \;
Этой страшной конструкцией мы упакуем в архив все файлы больше 10 килобайт (20 блоков по 512 байт; в GNUверсии утилиты можно указывать размер и непосредственно в кило/мега/гигабайтах), к которым никто не обращался более трёх месяцев. find . -type f -newerac Qwert
Будет выведен список регулярных файлов, обращение к которым выполнялось позже того, как был модифицироТо есть сообщения об ошибках (2 – это дескриптор потока ван файл Qwert (подробности по -newerXY см. на страниSTDERR) мы просто выкидываем, оставляя лишь нормаль- це справки). Одним из применений этого может быть поиск файлов, которые используются некоторой программой – ный вывод STDOUT. создаём (скажем, по команде touch) файл-метку, запускаfind /home/serg/samag -mindepth 2 -maxdepth 2 ем программу и смотрим, к каким файлам было обращеА это будет список всех файлов, находящихся в указанном ние после создания метки. каталоге непосредственно в его подкаталогах первого уровня. То есть будут найдены файлы samag/jail/jail-wu и samag/ python/test-map.py, но не samag/meta.tgz (т.к. не в подката- Ищите и найдёте логе) и не samag/sendmailx/bin/smx (т.к. в подкаталоге вто- Критерии поиска могут быть самыми разнообразными – рого уровня вложенности). Зачем это может понадобиться по типу файла (каталог, символическая ссылка, регупрактически – затрудняюсь сказать, но, как видите, можно лярный файл и т. д.), по владельцу и группе (опции -user и ‑group), по выставленным на файле флагам и правам доделать и такое. ступа (‑flags и -perm соответственно). Для поиска без учёта регистра символов используйте -iname, в более сложных случаях к вашим услугам опция -regex. Можно даже Приводите в исполнение немедленно Find – это не столько средство поиска, сколько инс- учитывать тип файловой системы (например, при выполтрумент для обхода файловой иерархии. Вывод на эк- нении какого-то действия не принимать во внимание файран имён найденных файлов – лишь частный случай лы, доступные через NFS). Утилита find обладает развитым языком составления (это действие можно указать и явно с помощью опции print). В целом же вы можете также удалять файлы, со- выражений, когда различные критерии поиска можно групответствующие критериям поиска или даже применять пировать с использованием логических операций (разбор к ним любую произвольную команду. В этом и заключа- оставлю вам в качестве упражнения): ется мощь утилиты find. find ./ -name "milter-spa*" 2>/dev/null
find test -nouser -delete
Этой командой мы одним махом удалим все файлы в каталоге test, не имеющие владельца (т.е. UID которых не фигурируют в базе учётных записей). Понятно, что таким образом можно удалить и всё, найденное по критерию -name или любому другому. Будьте осторожны!
№2, февраль 2007
find ./ -iname 'qwe*' -and -size +20 -or -name 'Qwert'
Показанным выше возможности find не исчерпываются – это всего лишь несколько примеров из возможных. Не поленитесь прочитать справку (man find), особенно обращая внимания на приведённые там примеры. И жить в консоли сразу станет проще, жить станет веселей.
Сергей Супрунов
21
администрирование
Подключаем несколько локальных сетей с пересекающейся адресацией к одному компьютеру
Андрей Кишкин В вашу квартиру или офис проведено несколько локальных сетей, но их одновременному подключению к компьютеру мешают пересекающиеся адресные пространства. Сети можно «подружить», если вы используете ОС Linux. 22
администрирование
Л
Исходные данные для подключений окальные пользовательские сети стихийно появляются и исчезают повсюду, они могут охватывать как цеИнтерфейс Адрес Маска Шлюз DNS-сервер лые городские районы, так и соединять лишь пару Сеть 1 Eth0 192.168.0.10 255.255.255.0 192.168.0.1 192.168.0.2 компьютеров в квартире. 192.168.0.10 255.255.255.0 192.168.0.1 192.168.0.2 Ситуация, когда компьютер подключен одновремен- Сеть 2 Eth1 но к нескольким сетям, нередка. Но часто одновременной работе во всех этих сетях препятствует объективная причина – пересекающаяся, а чаще всего и вовсе одинаковая адресация. Что же делать? 192.168.0.0/24 192.168.0.0/24 Одни эту проблему решают физическим подключением только одной из «проблемных» сетей к компьютеру и «перетыкая» кабели по мере необходимости. 192.168.0.10/24 Другие устанавливают для каждой сети отдельную плаСхема соединения ту в системный блок и «переключают» сети на уровне операционной системы, активизируя нужный сетевой интер- зом можно «обмануть» систему маршрутизации, заставив ее «плясать под нашу дудку». фейс и выключая все ненужные. О том, какими критериями нужно пользоваться при Третьи используют для управления сетевым «зоопарком» дополнительное оборудование, благо простенький выборе сети, адреса которой мы будем подменять, чимаршрутизатор стоит сейчас совсем недорого, кроме то- тайте в конце статьи, пока же для простоты выберем го, в его роли можно использовать старый никому не нуж- в качестве «подопытной» сеть, подключенную к интерфейсу Eth1. ный компьютер. Задачу конфигурирования системы можно разбить Последний подход универсален, но при всех своих плюсах требует, во-первых, дополнительное «железо», а во вто- на три, более мелкие: 1. Идентификация и инициализация входящего трафирых – умения это «железо» настраивать. ка. Я расскажу о том, как к своему компьютеру с операци2. Инициализация и маршрутизация ответного трафионной системой Linux подключить несколько локальных ка. сетей с произвольной адресацией, и о том, как работать со всеми подключенными сетями одновременно, не испы- 3. Инициализация и маршрутизация собственного трафика системы. тывая при этом почти никаких проблем. Для начала рекомендую ознакомиться с материалаПод идентификацией трафика подразумевается опреми [1, 2]. Эти материалы можно найти и на русском языке, но най- деление сети источника, а под инициализацией – придание идентифицированным пакетам неких специфических денные мной переводы несколько устарели. черт, разговор о которых пойдет дальше. Требования к системе: n Ядро Linux 2.6 (я использовал 2.6.17.9), собранное с подИдентификация и инициализация держкой следующих опций netfilter:
входящего трафика
CONFIG_NETFILTER CONFIG_IP_NF_CONNTRACK CONFIG_IP_NF_IPTABLES CONFIG_IP_NF_MATCH_MARK CONFIG_IP_NF_NAT
В большинстве ядер из дистрибутивов нужные опции уже включены, но для их работы требуется подгрузить нужные модули ядра. n IPTables 1.2.9 и выше (я использовал 1.3.3).
Инициализацию будем производить в зависимости от интерфейса, с которого трафик пришел. Неуникальный адрес хоста назначения (нашего компьютера) (в общем случае не уникальна адресация сетевых сегментов, подключенных к компьютеру, но так как из каждого сегмента нашей системе принадлежит только один адрес, будем именно его называть неуникальным, хотя это может быть и не так, т.е. адреса разные, но принадлежат одному сетевому пространству) будем заменять уникальным. Это поможет нам решить и еще одну задачу – задачу маршрутизации обратного трафика, но об этом позже. Мы выбрали в качестве «подопытной» сеть, подключенную к интерфейсу eth1, поэтому назначаем дополнительный уникальный адрес на этом интерфейсе:
При тестировании работы схемы использовался дистрибутив Slackware Linux 10.2, но вы можете работать с другими дистрибутивами, так как схема универсальна. Команды, приведенные в статье, можно просто набирать с консоли, но лучше оформить их в качестве командного файла, запускаемого при старте системы, я для этих ip address add 192.168.1.10/32 dev eth1 целей использую /etc/rc.local. Итак, мы решили подключить компьютер к двум локальАдрес можно выбирать любой удобный, особой роли ным сетям с пересекающейся адресацией. Исходные данон не играет, важно, чтобы он не входил в сети, подклюные для подключений смотрите в таблице. ченные к другим сетевым интерфейсам. Схематично это они представлены на рисунке. Обратите внимание на маску сети, в общем случае она Алгоритм решения поставленной задачи состоит в замене неуникальных адресов на уникальные, таким обра- может быть любой, но так как адрес не участвует в реаль-
№2, февраль 2007
23
администрирование ном сетевом взаимодействии, то лучше ее сделать как в нашем примере. Далее заменяем адрес хоста назначения в пакетах, приходящих с интерфейса eth1: iptables –t NAT –A PREROUTING –i eth1 –s 192.168.0.0/24 ↵ –j DNAT -–to-destination 192.168.1.10
Инициализация и маршрутизация ответного трафика Маршрутизацию обратного трафика будем производить «от источника», т.е. в зависимости от адреса отправителя, т.к. он уникальный. Создадим в системе дополнительную таблицу маршрутизации для каждой сети. Из консоли дайте следующие команды:
В реальности такую ситуацию представить сложно, поэтому займемся трафиком, который генерирует сам хост. Логика работы такова: при обращении к хосту из сети, подключенной к интерфейсу eth1, заменяем адрес сети хоста с 192.168.0.0 на 192.168.1.0, например, пишем не: ping 192.168.0.5
а ping 192.168.1.5
При обращении к сети, подключенной к интерфейсу eth0 все остается по-старому. Существует один не очень приятный момент: невозможность работы с DNS-сервером сети, подключенной к интерфейсу eth1 (распространяется только на подменяемые наecho /etc/iproute2/rt_tables >> 10 TO_ETH0 ми адреса, т.е. все нелокальные для этой сети имена (наecho /etc/iproute2/rt_tables >> 20 TO_ETH1 пример, интернет-имена) будут разрешаться корректно). или добавьте в файл /etc/iproute2/rt_tables строки соответс- То есть посылать DNS-запросы вы, конечно, можете, но оттвующие «10 TO_ETH0», «20 TO_ETH1» вручную. В скрипт веты сервера теперь будут «некорректными», эта проблема эти команды добавлять не нужно, достаточно запустить их решается занесением нужных, но уже откорректированных записей в файл /etc/hosts. То есть если в сети, подключенодин раз. ной к интерфейсу eth1, имеется хост с именем server.local Добавляем маршрут по умолчанию в эти таблицы: и адресом 192.168.0.1, то файл /etc/hosts следует прописать ip route add default dev eth1 table TO_ETH1 server.local 192.168.1.1. ip route add default dev eth0 table TO_ETH0 Для реализации схемы, описанной выше, нам требуетА теперь создаем правила, в соответствии с которыми ся только заменить адрес сети на выходе: все пакеты, у которых в поле «От» указан адрес 192.168.1.10, iptables –t nat –A POSTROUTING –d 192.168.1.0/24 ↵ нужно маршрутизировать в соответствии с таблицей –j NETMAP –to 192.168.0.0 TO_ETH1, т.е. передавать через интерфейс eth1, а все пакеты у которых в поле «От» указан адрес 192.168.0.10, пеИ все. Пакеты будут корректно отмаршрутизированы редавать через интерфейс eth0. при помощи правил, созданных нами выше. Маркируем пакеты: Теперь несколько слов о том, как следует подходить к выбору сети, в которой будем «подменять» адреса. iptables –t mangle –A OUTPUT –s 192.168.0.10/24 ↵ Во-первых, подменять адреса нужно в более «простой» –j MARK -–set-mark 0 сети, т.е. в той, где меньше сервисов (выделенные сервеiptables –t mangle –A OUTPUT –s 192.168.1.10/24 ↵ –j MARK -–set-mark 1 ры и т. д.). Во-вторых, не стоит выбирать сеть, адреса в которой Маршрутизируем в зависимости от метки: выдаются по DHCP. Для гарантированной работы конфигурации следует в стартовом скрипте каждый раз выяснять ip rule add fwmark 1 table TO_ETH1 свой адрес, например, через «ip link sh». ip rule add fwmark 0 table TO_ETH0 Будьте предельно внимательны при наборе правил, Теперь осталось заменить адрес, и пакет может отправ- т.к. даже малейшие ошибки могут привести к серьезным проблемам, поэтому перед подключением к реальным селяться в путешествие по сети: тям работоспособность конфигурации настоятельно рекоiptables –t nat –A OUTPUT –s 192.168.1.10 –j DNAT ↵ мендую проверить на «испытательном стенде»: вашем ПК -–to 192.168.0.10 и нескольких подключенных к нему. Теперь наш компьютер может отвечать на запросы (например, DNS или ICMP) из обеих подключенных сетей. Мож- 1. Advanced Linux Routing – http://lartc.org/howto. но попробовать его «попинговать» и насладиться получен- 2. IPTables 1.2.2 Tutorial – http://iptables-tutorial.frozentux.net/ ным эффектом. iptables-tutorial.html.
Инициализация и маршрутизация собственного трафика системы Описанных действий достаточно для организации работы сервера в двух сетях, отвечающего на запросы, приходящие из обеих сетей, но не генерирующего собственного трафика.
24
администрирование
Настраиваем DNS и DHCP с хранением информации в LDAP
Василий Озеров Система DNS очень важна для работы Интернета в целом, поэтому стоит посвятить достаточное количество времени на изучение принципов работы системы и на настройку сервера имен. Сегодня я расскажу о настройке bind для хранения информации о зонах в базе данных LDAP.
О
чень часто в локальных сетях, будь то большие сети крупных организаций или же небольшие «домашние» сети, устанавливается и настраивается локальный DNS-сервер. Ставят его для удобства работы или для кэширования запросов к DNSсерверам провайдера. Для UNIX-систем стандартом среди DNS-серверов является bind. По умолчанию bind хранит все записи о зонах в простых текстовых файлах, с которыми не всегда удобно работать. Например, если у вас есть несколько DNS-серверов на разных машинах, то править файлы зон через шелл не очень удобно, так как придется выполнить большое число однообразных действий, начиная от ввода логина, заканчивая перезагрузкой DNS‑сервера. Если у вас в сети настроен LDAP-сервер, то разумнее
26
всего хранить прямые и обратные зо- n I P - а д р е с D N S - с е р в е р а : ны DNS-сервера в LDAP. Разумнее, по192.168.1.254 (hostname: dns). тому что тогда получается централизо- n I P - а д р е с L D A P - с е р в е р а : ванное хранилище данных, с которым 192.168.1.250 (hostname: spider). легко можно работать из различных Итак, приступаем к настройке: ОС, да и программ для работы с LDAP- n Система: FreeBSD-6.1-p6 (и на сервером очень много, как для UNIX, LDAP- и на DNS-сервере). так и для Windows. Еще один довод n К о р е н ь L D A P - с е р в е р а : для хранения информации в LDAP – dc=l1523,dc=ru. динамическое обновление зон. DHCP может не посылать запросы DNS-серЕсли у вас не настроен LDAP-серверу на обновление зоны, тем самым вер, то можете почитать о его настройнагружая DNS-сервер, а может сам об- ке на сайте: http://www.fr33man.ru/ новить запись на LDAP-сервере. Наде- index.php?newsid=5б. юсь, вы задумались о LDAP как о хранилище данных DNS-сервера. Теперь Настройка LDAP приступим к практической реализации. С н а ч а л а н е о б х о д и м о п о д к л ю Сразу хочу описать сеть, для которой мы чить две схемы к нашему серверу: будем настраивать DNS-сервер: dnsZone.schema и dhcp.schema. Схеn Адрес сети: 192.168.1.0/24. ма dnsZone поставляется по умолчанию с сервером slapd, а вот схема dhcp n Домен: teachers.
администрирование появляется после установки DHCP-сервера. Забирайте dhcp.schema отсюда: http://fr33man.ru/files/dhcp.schema. Редактируем slapd.conf, добавляем: include include
/usr/local/etc/openldap/schema/dnszone.schema /usr/local/etc/openldap/schema/dhcp.schema
После этого перезапускаем slapd: spider@/root/> /usr/local/etc/rc.d/slapd.sh restart Stopping slapd. Starting slapd.
Все, теперь можно добавить необходимые записи в LDAP. Я предоставляю ldif-файл с комментариями: Dns.ldif # Добавляем контейнер, где будут храниться все зоны # нашего DNS-севера dn: ou=dns,dc=l1523,dc=ru objectClass: top objectClass: organizationalUnit ou: dns description: domain zones # Добавляем прямую зону teachers dn: zoneName=teachers,ou=dns,dc=l1523,dc=ru objectClass: top objectClass: dNSZone zoneName: teachers relativeDomainName: teachers # SOA-запись для зоны teachers dn: relativeDomainName=@,zoneName=teachers,ou=dns, ↵ dc=l1523,dc=ru objectClass: top objectClass: dNSZone zoneName: teachers relativeDomainName: @ nSRecord: ns.teachers. sOARecord: ns.teachers. root.ns.teachers. 1 8H 2H 1W 1D # Добавляем запись вида: # ns IN A 192.168.1.254 dn: relativeDomainName=ns,zoneName=teachers,ou=dns, ↵ dc=l1523,dc=ru objectClass: top objectClass: dNSZone zoneName: teachers relativeDomainName: ns dNSClass: IN aRecord: 192.168.1.254 # Добавляем запись вида: # spider IN A 192.168.1.250 dn: relativeDomainName=spider,zoneName=teachers,ou=dns, ↵ dc=l1523,dc=ru objectClass: top objectClass: dNSZone zoneName: teachers relativeDomainName: spider dNSClass: IN aRecord: 192.168.1.250 # Добавляем новую обратную зону 1.168.192.in-addr.arpa dn: zoneName=1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru objectClass: top objectClass: dNSZone zoneName: 1.168.192.in-addr.arpa relativeDomainName: 1.168.192.in-addr.arpa # SOA-запись для зоны 1.168.192.in-addr.arpa dn: relativeDomainName=@,zoneName= ↵ 1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru objectClass: top objectClass: dNSZone relativeDomainName: @ nSRecord: ns.teachers. sOARecord: ns.teachers. root.ns.teachers. 1 8H 2H 1W 1D zoneName: 1.168.192.in-addr.arpa
№2, февраль 2007
# Добавляем запись вида: # 254 PTR ns.teachers. dn: relativeDomainName=254,zoneName= ↵ 1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru objectClass: top objectClass: dNSZone zoneName: 1.168.192.in-addr.arpa relativeDomainName: 254 pTRRecord: ns.teachers. # Добавляем запись вида: # 250 PTR spider.teachers. dn: relativeDomainName=250,zoneName= ↵ 1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru objectClass: top objectClass: dNSZone zoneName: 1.168.192.in-addr.arpa relativeDomainName: 250 pTRRecord: spider.teachers.
Может показаться, что добавлять записи в файлы зон намного удобнее, чем в LDAP-сервер, но кто вас заставляет составлять ldif-файлы и добавлять их через shell? Можете использовать программы для работы с LDAP-сервером, например ldapadmin: http://ldapadmin.sourceforge.net. Я давно пользуюсь этой программой и ни разу не испытывал неудобств. Вернемся к добавлению записей в LDAP. Составленный нами ldif-файл нужно добавить в директории LDAP: spider@/root/> ldapadd -x -D "cn=root,dc=l1523,dc=ru" ↵ -W -f dns.ldif Enter password:
Первоначальная настройка LDAP-сервера закончена.
Настройка DNS-сервера Первым делом необходимо установить bind. По умолчанию bind уже установлен во FreeBSD, но он не поддерживает работу с LDAP-сервером, поэтому необходимо установить другую версию bind, которая поддерживает работу с LDAP (bind9-sdb-ldap): dns@/root> cd /usr/ports/dns/bind9-sdb-ldap/ dns@/usr/ports/dns/bind9-sdb-ldap> make install clean
Проверим, что установился нужный нам bind. dns@/> pkg_info | grep bind bind9-sdb-ldap-9.3.2 The well known Bind9, patched for use of an LDAP based back
dns@/> /usr/local/sbin/named -v BIND 9.3.2
Bind-sdb-ldap установился. Теперь создадим конфигурационный файл named.conf и подготовим сервис к запуску: Named.conf # Описание списков доступа к bind acl lan { 192.168.1.0/24; }; acl transfers { 127.0.0.1; }; # Конфигурация rndc-ключа. Сгенерировать ключ можно командой # rndc-confgen, вывод которой нужно вставить в named.conf key "rndc-key" { algorithm hmac-md5; secret "V0spN5Z3OWgkGG2Bt0SdKQ=="; };
27
администрирование controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; # Опции демона named options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; # IP-адреса, на которых named будет слушать запросы listen-on { 127.0.0.1; 192.168.1.254; } # Если named не найдет адрес, запрашиваемый клиентом, # в локальных базах или кэше, то запрос перенаправится # DNS-серверам провайдера forward only; # DNS-сервера провайдеров forwarders { 192.168.49.100; 172.16.0.3; }; # Разрешение запросов allow-query { lan; trusted; }; allow-recursion { trusted; lan; }; }; # Описание зоны teachers zone "teachers." { # Наш сервер является первичным для этой зоны type master; # Где располагается зона. # Формат записи: database «ldap протокол: # //IP_адрес_LDAP_сервер/_путь_к_нужной_зоне_ ttl» # Указанный ttl будет использован по умолчанию, # если не будет указан другой ttl database "ldap ldap://192.168.1.250/zoneName=teachers, ↵ ou=dns,dc=l1523,dc=ru 178600"; # Права доступа allow-query { lan; trusted; }; allow-transfer { transfers;}; }; # Описание обратной зоны: 1.168.192.in-addr.arpa zone "1.168.192.IN-ADDR.ARPA." { # Наш сервер primary type master; # Где хранится зона database "ldap ldap://192.168.1.250/zoneName= ↵ 1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru 178600"; # Права доступа allow-query { lan; trusted; }; allow-transfer { transfers; }; };
Все, конфигурационный файл составлен, подготавливаем named к запуску. Разрешаем запуск named: dns@/root/> echo named_enable=\"YES\" >> /etc/rc.conf
Меняем путь к программе DNS-сервера. Это нужно для того, чтобы не запустился стандартный bind, который не умеет работать с LDAP. Стандартный bind лежит в /usr/sbin/named: dns@/root/> echo named_program= ↵ \"/usr/local/sbin/named\" >> /etc/rc.conf
Теперь выставляем необходимые права на /var/named: dns@/root/> chown bind:bind /var/named/etc/namedb/master ↵ /var/named/etc/namedb/dynamic dns@/root/> chown –R bind:bind /var/named/var/
Теперь можно запускать DNS-сервер: dns@/root/> /etc/rc.d/named start Stating named.
dns@/root/> ps ax | grep named
28
275 ?? Ss 464 ?? Is
0:01,64 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/r 0:31,00 /usr/local/sbin/named -u bind -t /var/named
Bind запустился. Давайте проверим его на работоспособность. Проверяем работу утилитой rndc: dns@/root> rndc status number of zones: 2 debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF recursive clients: 0/1000 tcp clients: 0/100 server is up and running
dns@/root> dig @127.0.0.1 teachers. axfr ; <<>> DiG 9.3.2 <<>> @127.0.0.1 teachers. axfr ; (1 server found) ;; global options: printcmd teachers. 178600 IN SOA ns.teachers. root.ns.teachers. 1 28800 7200 604800 86400 teachers. 178600 IN NS ns.teachers. spider.teachers. 178600 IN A 192.168.1.250 ns.teachers. 178600 IN A 192.168.1.254 ;; Query time: 26 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Jan 11 22:27:24 2007 ;; XFR size: 17 records (messages 1)
dns@/root> dig @127.0.0.1 1.168.192.in-addr.arpa axfr ; <<>> DiG 9.3.2 <<>> @127.0.0.1 1.168.192.in-addr.arpa axfr ; (1 server found) ;; global options: printcmd 1.168.192.in-addr.arpa. 178600 IN SOA ns.teachers. root.ns.teachers. 1 28800 7200 604800 86400 1.168.192.in-addr.arpa. 178600 IN NS ns.teachers. 250.1.168.192.in-addr.arpa. 178600 IN PTR spider.teachers. 254.1.168.192.in-addr.arpa. 178600 IN PTR ns.teachers. ;; Query time: 7 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Jan 11 22:28:28 2007 ;; XFR size: 12 records (messages 1)
Как видите, все работает. Единственное замечание: я запрашивал полный трансфер зоны с DNS-сервера, в моем конфигурационном файле выставлены права доступа, которые разрешают трансфер зон только IP-адресу 127.0.0.1, поэтому не пытайтесь скачать зону с другого компьютера. Все, теперь можно переходить к настройке DHCP-сервера.
Настройка DHCP-сервера Сначала необходимо установить DHCP-сервер: spider@/root> cd /usr/ports/net/isc-dhcp3-server/ spider@/usr/ports/net/isc-dhcp3-server> make install clean
Сервер установлен. Теперь переходим к его настройке: /root/dhcpd.conf # Время, на которое выдается IP default-lease-time 14400; # Время, через которое клиент обязан вернуть IP max-lease-time 28800; log-facility local7; authoritative; # Не проводить обновление зон ddns-update-style none; # Описание сети 192.168.1.0/24 subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.200; ignore client-updates; option domain-name "teachers"; option domain-name-servers 192.168.1.254; option routers 192.168.1.254; option default-ip-ttl 64; option default-tcp-ttl 64; }
Вот такой конфигурационный файл получился. Теперь его необходимо перевести в ldif-формат и добавить в LDAP. В поставку isc-dhcp-server входит perl-скрипт
администрирование dhcpd‑conf‑to‑ldap.pl. Давайте откроем его и отредактируем параметры в самом начале: # Этот параметр можно не менять, будет использован # результат, который вернет функция hostdomain() my $domain = hostdomain(); # Корень сервера ldap my $basedn = "dc=l1523,dc=ru"; # В этой строке скрипт заменяет все «.», указанные # в $basedn на «,dc=» $basedn =~ s/\./,dc=/g; # Параметр можно не изменять, будет использован результат # вызова функции hostname(), где будут храниться # настройки DHCP my $server = hostname(); my $dhcpcn = 'dhcp'; # CN of DHCP config tree my $dhcpdn = "cn=$dhcpcn, $basedn"; # DHCP config tree DN my $second = ''; # secondary server DN / hostname my $i_conf = ''; # dhcp.conf file to read or stdin my $o_ldif = ''; # output ldif file name or stdout my @use = (); # extended flags (failover)
Все, теперь можно запускать: spider@/root/> dhcpd-conf-to-ldap.pl < /root/dhcpd.conf Creating LDAP Configuration with the following options: Base DN: dc=l1523,dc=ru DHCP DN: cn=dhcp, dc=l1523,dc=ru Server DN: cn=spider, dc=l1523,dc=ru dn: cn=spider, dc=l1523,dc=ru cn: spider objectClass: top objectClass: dhcpServer dhcpServiceDN: cn=dhcp, dc=l1523,dc=ru dn: cn=dhcp, dc=l1523,dc=ru cn: dhcp objectClass: top objectClass: dhcpService dhcpPrimaryDN: cn=spider, dc=l1523,dc=ru dhcpStatements: default-lease-time 14400 dhcpStatements: max-lease-time 28800 dhcpStatements: log-facility local7 dhcpStatements: authoritative dhcpStatements: ddns-update-style none
# Учетная запись, под которой будет происходить подключение # к LDAP-серверу. ldap-username "cn=root,dc=l1523,dc=ru"; # Пароль учетной записи ldap-password "123456"; # Корень LDAP-сервера ldap-base-dn "dc=l1523,dc=ru"; ldap-method dynamic;
Теперь запускаем DHCP-сервер: spider@/root/> echo dhcpd_enable=\"YES\" >> /etc/rc.conf spider@/root/> /usr/local/etc/rc.d/isc-dhcpd.sh start Starting dhcpd. Internet Systems Consortium DHCP Server V3.0.5rc2 Copyright 2004-2006 Internet Systems Consortium. All rights reserved. For info, please visit http://www.isc.org/sw/dhcp/ TLS session successfully started to spider.teachers Wrote 17 leases to leases file. Listening on BPF/xl0/00:0a:5e:42:b8:01/192.168.1/24 Sending on BPF/xl0/00:0a:5e:42:b8:01/192.168.1/24 Sending on Socket/fallback/fallback-net
Отлично! Сервер запустился. Осталось настроить динамическое обновление DNS-зон. К сожалению, пакет bind‑sdb‑ldap не умеет сам обновлять записи в LDAP, так же как и DHCP. Поэтому придется использовать скрипт, написанный Travis Groth. Подробнее об этом можете почитать на странице: http://www.venaas.no/ldap/bind‑sdb. Давайте скачаем и настроим скрипт: spider@/root/> mkdir dhcp spider@/root/> cd dhcp spider@/root/dhcp/> fetch http://www.venaas.no/ldap/ ↵ bind-sdb/dhcp2ldapd-1.1.gz dhcp2ldapd-1.1.gz spider@/root/dhcp/> spider@/root/dhcp/> total 10 drwxr-xr-x 2 root drwxr-xr-x 8 root -rw-r--r-- 1 root
100% of 2185 B 1279 Bps gunzip dhcp2ldapd-1.1.gz ll wheel wheel wheel
512B 11 янв 23:18 . 1,5K 11 янв 23:18 .. 5,3K 3 май 2005 dhcp2ldapd-1.1
dn: cn=192.168.1.0, cn=dhcp, dc=l1523,dc=ru cn: 192.168.1.0 objectClass: top objectClass: dhcpSubnet objectClass: dhcpOptions dhcpNetMask: 24 dhcpRange: 192.168.1.10 192.168.1.200 dhcpStatements: ignore client-updates dhcpOption: domain-name "teachers" dhcpOption: domain-name-servers 192.168.1.254 dhcpOption: routers 192.168.1.254 dhcpOption: default-ip-ttl 64 dhcpOption: default-tcp-ttl 64
Теперь отредактируем скрипт. В самом начале:
Done.
# Где в LDAP хранятся зоны прямого и обратного # преобразования $FORWARD_BASE = "zoneName=teachers,ou=dns,dc=l1523,dc=ru"; $REVERSE_BASE = "zoneName=1.168.192.in-addr.arpa, ↵ ou=dns,dc=l1523,dc=ru";
Скопируем вывод скрипта в файл dhcp.ldif и добавим его командой: spider@/root/> ldapadd –x –D "cn=root,dc=l1523,dc=ru" ↵ –W –f dhcp.ldif
Теперь составим конфигурационный файл DHCP-сервера, в котором укажем параметры подключения к LDAP-серверу. /usr/local/etc/dhcpd.conf # IP-адрес или hostname LDAP-сервера ldap-server "spider.teachers"; # Порт, который слушает LDAP ldap-port 389;
№2, февраль 2007
Dhcp2ldapd-1.1 #!/usr/bin/perl # Файл, где хранится информация о выданных адресах # DHCP-сервером $LEASES = "/var/db/dhcpd/dhcpd.leases"; # Домен $DOMAIN = "teachers"; # Обратная зона $REVERSE = "1.168.192.in-addr.arpa";
# Пользователь для подключения к LDAP-серверу $USER = 'cn=root,dc=l1523,dc=ru'; # Пароль пользователя $PASSWORD = "9vpIj9"; # Хост, на котором работает LDAP-сервер $LDAP_HOST = 'localhost' # Время проверки файла в секундах $UPDATE_TIME = 30; # Автопроверка $AUTO_VERIFY = 0;
29
администрирование Еще необходимо подправить две строчки в скрипте, потому что у меня сеть с маской 24, а скрипт добавляет записи для маски 16. Поэтому правим строку 172 и 174, меняем там $fourth.$third на $fourth. Все, после этого можно запускать наш скрипт, но сначала составим скрипт запуска: #!/bin/sh case "$1" in start) if [ -f /var/run/dhcpd2ldap.pid ] then echo "Скрипт dhcpd2ldap уже запущен!" else daemon -f -p /var/run/dhcpd2ldap.pid ↵ /root/dhcp2ldapd-1.1 echo "Скрипт dhcpd2ldap запущен!" fi ;; stop) if [ -f /var/run/dhcpd2ldap.pid ] then kill -TERM `cat /var/run/dhcpd2ldap.pid` rm -f /var/run/dhcpd2ldap.pid echo "Скрипт dhcpd2ldap остановлен!" else echo "Скрипт dhcpd2ldap не запущен!" fi ;; *) echo "Использование: ${0##*/}: { start | stop }" >&2 exit 64 ;; esac
Такой скрипт кладем в /usr/local/etc/rc.d/ и выставляем нормальные права: spider@/usr/local/etc/rc.d/> chmod 0755 dhcpd2ldap.sh spider@/usr/local/etc/rc.d/> chown root:wheel dhcpd2ldap.sh spider@/usr/local/etc/rc.d/> ll dhcpd2ldap.sh -rwxr-xr-x 1 root wheel
586B 19 янв 12:19 dhcpd2ldap.sh
Теперь пробуем запустить: spider@/usr/local/etc/rc.d/> ps ax | grep dhcp 483 ?? Is 54964 p0 R+
0:01,56 /usr/local/sbin/dhcpd -cf /usr/local/etc/dhcpd.conf 0:00,00 grep dhcp
spider@/usr/local/etc/rc.d/> ./dhcpd2ldap.sh start Скрипт dhcpd2ldap запущен!
spider@/usr/local/etc/rc.d/> ps ax | grep dhcp 483 ?? Is 54967 ?? Ss 54969 p0 R+
0:01,56 /usr/local/sbin/dhcpd -cf /usr/local/etc/dhcpd.conf 0:00,40 /usr/bin/perl /root/dhcp2ldapd-1.1 (perl5.8.8) 0:00,00 grep dhcp
Как видите, скрипт запустился успешно. Переходим к тестированию нашей связки.
Тестирование Давайте для начала посмотрим pid DNS-сервера, для того чтобы далее можно было проконтролировать, что named не перезапускался: shield@/root> ps ax | grep named 264 ?? Ss 448 ?? Ss 22315 p0 R+
0:00,50 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/r 1:17,13 /usr/local/sbin/named -u bind -t /var/named 0:00,00 grep named
Pid named – 448. Теперь проверим, резолвится ли адрес машины, которую мы вскоре добавим в нашу сеть. Имя машины – fr33man:
30
shield@/root> host fr33man Host fr33man not found: 3(NXDOMAIN) shield@/root> ldapsearch -LLL -x -b 'dc=l1523,dc=ru' -H ldap://spider/ 'relativ eDomainName=fr33man'
Адрес не резолвится, в LDAP также нет записей об этом адресе. Теперь подключим машину к сети и настроим на получение IP-адреса от DHCP-сервера. После этого проверим, резолвится ли адрес: shield@/root> host fr33man fr33man.teachers has address 192.168.1.199
shield@/root> host 192.168.1.199 199.1.168.192.in-addr.arpa domain name pointer fr33man.teachers.
shield@/root> ldapsearch -LLL -x -b 'dc=l1523,dc=ru' ↵ -H ldap://spider/ 'relativeDomainName=fr33man' dn: relativeDomainName=fr33man,zoneName=teachers,ou=dns,dc=l1523,dc=ru relativeDomainName: fr33man objectClass: top objectClass: dNSZone dNSTTL: 7200 zoneName: teachers aRecord: 192.168.1.199
shield@/root> ldapsearch -LLL -x -b 'dc=l1523,dc=ru' ↵ -H ldap://spider/ 'relativeDomainName=199'
dn: relativeDomainName=199,zoneName=1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ru relativeDomainName: 199 objectClass: top objectClass: dNSZone dNSTTL: 7200 zoneName: 1.168.192.in-addr.arpa pTRRecord: fr33man.teachers.
Как видите, адрес резолвится, и в LDAP появились записи о нашем адресе. И под конец проверим pid named: shield@/root> ps ax| grep named 264 ?? Ss 448 ?? Is
0:00,50 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/r 1:17,41 /usr/local/sbin/named -u bind -t /var/named
Pid не изменился, следовательно, DNS-сервер не перезапускался и изменения «подхватились» автоматически.
За и против Мы получили работающую связку, удобную в управлении. Для того чтобы обновить зоны или конфигурацию DHCP, достаточно изменить записи в LDAP, а для этого можно использовать программы для работы с LDAP-сервером. Еще одним плюсом является то, что при изменении информации на LDAP-сервере изменения вступят в силу без перезагрузки зоны. Централизованное хранение данных для крупных компаний выгоднее по нескольким причинам: n Все данные хранятся в одной базе. Если с этой базой что-то случится, то восстанавливать придется только ее, а не бегать по всем серверам и восстанавливать по отдельности каждый сервис. n Управлять базой можно из любой ОС, так как стандарт работы LDAP один. Из минусов можно отметить, что управление немного усложняется, но результат того стоит. Использовать централизованную базу лучше только в сетях со сложной структурой, а для маленьких сетей централизованное хранение данных не так выгодно.
администрирование
Размещаем пользовательские бюджеты в LDAP Часть 2
Алексей Барабанов Настроив подсистему аутентификации и авторизации на использование LDAP, попробуем работать с ней прозрачным образом, так же как с файловой базой учетных записей. Проверим, насколько код стандартных утилит приспособлен для взаимодействия с LDAP. 32
администрирование
В
первой части статьи [1] вы можете найти всё необходимое для настройки сервера OpenLDAP, указания его в качестве хранилища информации о пользовательских бюджетах и соответствующей инициализации. Быть может, кто-то из вас даже попробовал предложенное в действии и «открыл» свой счет удобств и потерь от такого усовершенствования. Если же нет, то предлагаю поверить «на слово» и продолжить рассмотрение вопроса так, будто бы система аутентификации и авторизации с LDAP построена в среде openSUSE версии 10.1 или 10.2 (кому что удобнее) в полном соответствии с рекомендациями из части 1.
Использование LDAP Попробуем создать пользовательский бюджет так, чтобы запись о нем была произведена в LDAP. Воспользуемся стандартным системным средством useradd. Для сравнения создадим обычный бюджет, зарегистрированный в passwd и shadow: # useradd -m -c "shadow user" suser1 # getent passwd | grep suser suser1:x:1001:100:shadow user:/home/suser1:/bin/bash
Установим для него некоторый пароль (здесь и далее пароль совпадает с именем пользователя): # passwd suser1 Changing password for suser1. New Password:***** Bad password: too simple Reenter New Password:***** Password changed.
# getent shadow | grep suser suser1:$2a$10$1qqIvf4KcxLU/1RzxYPIiuKhjnohIlZa68fSHGjwiShgcvheuNFli:13495:0:99999:7:::
Также проверим, как работает авторизация такого бюджета: > su - suser1 -c "LC_ALL=C id" Пароль:***** uid=1001(suser1) gid=100(users) groups=16(dialout),33(video),100(users)
А теперь попробуем проделать то же самое, но для бюджета, регистрируемого в LDAP: # useradd -D cn=ldapadmin,dc=office,dc=localnet ↵ --service ldap -m -c "ldap user" luser1 Enter LDAP Password:***** Base DN for user account `luser1' is "ou=People,dc=office,dc=localnet". LDAP information update failed: Object class violation useradd: User not added to LDAP group `video'. LDAP information update failed: Object class violation useradd: User not added to LDAP group `dialout'.
# getent passwd | grep luser luser1:x:1002:100:ldap user:/home/luser1:/bin/bash
Хотя пользователь был зарегистрирован, но не удалось сделать записи о его членстве в дополнительных группах:
№2, февраль 2007
# getent group | grep "^\(video\|dialout\)" dialout:x:16:alekseybb,suser1 video:x:33:alekseybb,suser1 dialout:*:16: video:*:33:
И, увы, эта проблема не поддается простому «лечению». Секрет в том, что исходные тексты pwdutils, куда входит утилита useradd, модифицированы для использования схемы rfc2307bis, которая заменила схему nis и по идее должна обеспечить POSIX-совместимые атрибуты пользовательских бюджетов. Но вот вместо применяемых в файловых базах индексов в виде номеров GID/UID, автор модификаций, все тот же неутомимый Thorsten Kukuk, решил заменить их на отличительные имена LDAP (то есть поменять индексы на LDAP-ссылки), что делает такую схему несовместимой с ранее принятыми алгоритмами работы с учетными данными пользователей. Можно, конечно, подождать, пока все участники процесса разработки договорятся и придут к выводу о том, что каждая схема регистрации должна пользоваться собственными атрибутами, поддерживая определенный уровень совместимости. Но они не договорились ни к выходу openSUSE 10.1, ни к выходу openSUSE 10.2, и я делаю вывод, что рациональнее пересобрать пакет pwdutils, применяя регрессивную заплатку следующего содержания: # cat pwdutils-3.1.2-memberUid-member.diff --- lib/libldap.c.orig 2006-12-13 07:37:45.000000000 +0300 +++ lib/libldap.c 2006-12-13 07:46:09.000000000 +0300 @@ -1535,12 +1535,12 @@ return 1; rc = ldap_update_group (session, group, binddn, ↵ password, LDAP_MOD_ADD, "member", dn ); "memberUid", member ); free (dn); if ( first ) { ldap_update_group (session, group, binddn, ↵ password, LDAP_MOD_DELETE, "member", "" ); + "memberUid", "" ); } } else @@ -1569,11 +1569,11 @@ if ( last ) { ldap_update_group (session, group, binddn, ↵ password, LDAP_MOD_ADD, "member", "" ); + "memberUid", "" ); } +
+
rc = ldap_update_group (session, group, binddn, ↵ password, LDAP_MOD_DELETE, "member", userdn ); "memberUid", member ); free (userdn);
} else @@ -2039,13 +2039,13 @@ strvals[0][1] = "groupOfNames"; strvals[0][2] = NULL; +
/* groupOfNames requires at least one "member" * attribute /* groupOfNames requires at least one "memberUid" * attribute use an empty value for groups with * no members */ strvals[3][0] = ""; strvals[3][1] = NULL;
33
администрирование +
mod[3].mod_values = strvals[3]; mod[3].mod_type = "member"; mod[3].mod_type = "memberUid"; mod[3].mod_op = LDAP_MOD_ADD; mods[3] = &mod[3]; mods[4] = NULL;
#
Этот патч предназначен д ля исходных текстов к openSUSE 10.2, но должен подойти и к pwdutils-3.0.7.1-17 из openSUSE 10.1, хотя там проще изменить патч, накладывающий модификацию согласно rfc2703bis. Бинарные сборки модифицированных pwdutils соответствующих версий доступны в [2]. Итак, исправим и пробуем снова:
Проверяем, что получилось, и обнаруживаем, что бюджет, где пароль установлен через usermod, недоступен: alekseybb@suse102:~> su - luser1 -c "LC_ALL=C id" Password:***** Пароль:***** Права доступа на базу данных паролей может быть слишком ограниченная. su: неправильный пароль
А вот тот, что получил пароль при инициализации, прекрасно работает: alekseybb@suse102:~> su - luser2 -c "LC_ALL=C id"
# userdel -D cn=ldapadmin,dc=office,dc=localnet ↵ --service ldap -r luser1 Enter LDAP Password:***** no crontab for luser1
# useradd -D cn=ldapadmin,dc=office,dc=localnet ↵ --service ldap -m -c "ldap user" luser1 Enter LDAP Password:***** Base DN for user account `luser1' is "ou=People,dc=office,dc=localnet".
Password:***** uid=1003(luser2) gid=100(users) groups=16(dialout),33(video),100(users)
Причина скрывается в формате парольных хешей: # slapcat | grep "^\(dn\|userPassword\)" | tail -n 4 dn: uid=luser1,ou=People,dc=office,dc=localnet userPassword:: e2NyeXB0fXtTU0hBfS96d0tsREFDak8xa1MxMktrNENKSCsvSTNURVFTSkhZ dn: uid=luser2,ou=People,dc=office,dc=localnet userPassword:: e1NTSEF9eGNtSFRNZC9zTS9WRDd2V2JqWk1tL2phd0lEdFJPc1k=
# getent group | grep "^\(video\|dialout\)" dialout:x:16:alekseybb,suser1 video:x:33:alekseybb,suser1 dialout:*:16:luser1 video:*:33:luser1
Все хорошо. Но не совсем. Возникают трудности с назначением пароля. Поскольку в утилите passwd нет возможности указать, с каким отличительным именем обращаться к LDAP (кстати, вероятно, это временное упущение), а в настройках клиента /etc/ldap.conf не заданы параметры принудительной линковки к LDAP, то если пароль не инициализирован, установить его от суперпользователя никак не получится. Обойти проблему можно несколькими путями. Во-первых, у нас в запасе есть smbldap‑passwd, и если /etc/smbldap-tools/smbldap_bind.conf настроен правильно, то с помощью этой утилиты можно установить пароль любого пользователя, смирившись с тем, что в конфигурационном файле хранится в открытом виде пароль администратора LDAP. Поэтому так делать не будем. Вовторых, можно установить пароль-заглушку сразу при создании бюджета: # useradd -D cn=ldapadmin,dc=office,dc=localnet ↵ --service ldap -p $(slappasswd -s luser2 -h {SSHA} ) ↵ -m -c "ldap user" luser2 Enter LDAP Password:***** Base DN for user account `luser2' is "ou=People,dc=office,dc=localnet".
И в третьих, можно вспомнить про утилиту usermod (кстати, авторы [1] об этом не упоминают, потому что в ALT Linux используется иная версия управляющих утилит), которая позволяет указывать отличительное имя для связи с LDAP: # usermod -D cn=ldapadmin,dc=office,dc=localnet ↵ --service ldap -p $(slappasswd -s luser1 -h {SSHA} ) ↵ luser1 Enter LDAP Password:*****
34
Здесь и «простым глазом» видно, что с хешами что-то не так, а приглядевшись внимательнее, понимаем, что хеш из бюджета luser1 имеет неверный формат. # slapcat | grep "^userPassword" | tail -n 2 | ↵ awk '{print $2}' | mimencode -b -u {crypt}{SSHA}/zwKlDACjO1kS12Kk4CJH+/I3TEQSJHY{SSHA}xcmHTMd/sM/VD7vWbjZMm/jawIDtROsY
Таким образом, обнаруживается вторая ошибка, исправляемая следующим патчем: # cat pwdutils-3.1.2-newpassword.diff --- lib/user.c.orig 2006-12-15 02:16:30.000000000 +0300 +++ lib/user.c 2006-12-15 02:18:42.000000000 +0300 @@ -1036,16 +1036,9 @@ } if (data->newpassword) { const char *cryptstr = "{crypt}"; char buffer[strlen (data->newpassword) + strlen (cryptstr) + 1]; snprintf (buffer, sizeof (buffer), ↵ "%s%s", cryptstr, data->newpassword); retval = ldap_update_user (session, ↵ data->pw.pw_name, data->binddn, ↵ data->oldclearpwd, "userPassword", buffer); } + data->binddn, ↵ data->oldclearpwd, + "userPassword", ↵ data->newpassword); } if (retval != 0) fprintf (stderr,
Видно, что в оригинальном коде полученная строка обрабатывалась не как хеш, а как текстовый пароль. Это противоречит документации на утилиту usermod, и вообще непонятно, как попало в код. В архиве [2] содержатся полностью исправленные версии pwdutils.
администрирование После их установки получаем адекватные записи в LDAP: # usermod -D cn=ldapadmin,dc=office,dc=localnet ↵ --service ldap -e -1 ↵ -p $(slappasswd -s luser1 -h {SSHA} ) luser1 Enter LDAP Password:*****
# slapcat | grep "^\(dn\|userPassword\)" | tail -n 4 dn: uid=luser1,ou=People,dc=office,dc=localnet userPassword:: e1NTSEF9bTY3cGNYYnR3N0xRdEhZNjNlMWpRQmZZakZNSXBNSUQ= dn: uid=luser2,ou=People,dc=office,dc=localnet userPassword:: e1NTSEF9eGNtSFRNZC9zTS9WRDd2V2JqWk1tL2phd0lEdFJPc1k=
И, естественно, удачную проверку авторизации: alekseybb@suse102:~> su - luser1 -c "LC_ALL=C id" Password:***** uid=1002(luser1) gid=100(users) groups=16(dialout),33(video),100(users)
Тем самым ранее поставленную цель – создать полностью совместимую с традиционной схему размещения пользователей в LDAP – можно считать достигнутой. В завершение можно порекомендовать сменить ранее установленный простенький пароль для ldapadmin на что-нибудь более существенное, например, так можно поменять его на my.new.pass: # cat <<EOT | ldapmodify -v -a -D ↵ "cn=ldapadmin,dc=office,dc=localnet" ↵ -H ldap://localhost -x -w admin dn: cn=ldapadmin,dc=office,dc=localnet changetype: modify replace: userPassword userPassword: $(slappasswd -s my.new.pass -h {SSHA}) EOT ldap_initialize( ldap://localhost ) replace userPassword: {SSHA}lZyR2iLrXzijblIE5gBF5UEMMlzMQabk modifying entry "cn=ldapadmin,dc=office,dc=localnet" modify complete
Кстати, после этого smbldap-tools перестанут работать, то есть станут не опасными.
Штатный способ настройки в openSUSE Можно задаться вопросом, зачем там много настраивать и «подкручивать», есть же штатные для openSUSE инструменты, составляющие YaST и позволяющие выполнить все те задачи, что выше были перечислены. Попробуем! Работать будем в openSUSE 10.2, чтобы не натыкаться на давно исправленные ошибки. Запущенное после уже сделанных настроек средство для установки LDAP-сервера приняло установленную конфигурацию, но потребовало вернуть суперпользователя rootdn (см. рис. 1). Здесь важно отметить, что никакой другой уровень доступа, кроме rootdn, автоматического настройщика не устраивает! Предполагаю, что разработчики openSUSE очень не уверены в том, что без rootdn их системы будут работать. Остается лишь гадать, в какой степени это относится к SLES. Кроме того, обратите внимание, что система правильно восприняла тип парольных хешей – SSHA.
№2, февраль 2007
Рисунок 1. Настройка сервера LDAP
После завершения в конфигурационных файлах LDAP ничего не изменилось, кроме того, что был добавлен rootdn: # grep ^root /etc/openldap/slapd.conf rootdn "cn=ldaproot,dc=office,dc=localnet" rootpw "{ssha}DHToDgxUuvxDwua/SB5Em5zzlABQWVpGVA=="
В процессе настройки клиента совсем не удивило, что снова было указано на невозможность работы без задания суперпользователя LDAP (см. рис. 2). Дальнейшая настройка выполняется если не просто, то очень просто. Не буду ее даже и комментировать. Уже здесь можно отметить, насколько все легко. Хотя, как я уже писал, все перечисленные в статье команды легко связываются в единый скрипт и выполняются вообще без каких-либо дополнительных манипуляций. Будем считать, что все уже настроено. Через средство управления пользовательскими учетными записями создадим дополнительного пользователя luser3, зарегистрированного в LDAP. И проверим, как все работает. Снача ла проверим, что не «слома лся» старый бюджет: alekseybb@suse102:~> su - luser1 -c "LC_ALL=C id" Пароль: Права доступа на базу данных паролей может быть слишком ограниченная. uid=1002(luser1) gid=100(users) groups=16(dialout),33(video),100(users)
Да, все работает, но забавно. Если интересно, можете взглянуть, как нелепо расписаны приоритеты поиска для pam в /etc/pam.d. Но раз работает, то и не будем придираться. Хуже то, что проверка «свеженького» бюджета не проходит: alekseybb@suse102:~> su - luser3 -c "LC_ALL=C id" su: пользователь luser3 не существует
Не верим своим глазам, проверяем внимательнее: # getent passwd | tail -n 2
35
администрирование luser1:x:1002:100:ldap user:/home/luser1:/bin/bash luser2:x:1003:100:ldap user:/home/luser2:/bin/bash
Точно, нет такого пользователя! Может быть в shadow: # getent shadow | tail -n 2 suser1:$2a$10$1qqIvf4KcxLU/1RzxYPIiuKhjnohIlZa68fSHGjwiShgcvheuNFli:13495:0:99999:7::: +::0:0:0::::
А там вообще какой-то неадекватный мусор. Хотя в конфигурации nss, как и прежде: # grep shadow /etc/nsswitch.conf shadow: files
Посмотрим, что в самой базе LDAP: # slapcat | grep "^\(dn: u\|userP\)" | tail -n 6 dn: uid=luser1,ou=People,dc=office,dc=localnet userPassword:: e1NTSEF9bTY3cGNYYnR3N0xRdEhZNjNlMWpRQmZZakZNSXBNSUQ= dn: uid=luser2,ou=People,dc=office,dc=localnet userPassword:: e1NTSEF9eGNtSFRNZC9zTS9WRDd2V2JqWk1tL2phd0lEdFJPc1k= dn: uid=luser3,dc=office,dc=localnet userPassword:: e2V4b3B9bHVzZXIz
тах, и им, как «лунатикам» с «марсианами», никак не договориться. Хотя, быть может, это моя вина, и я что-то пропустил в настройке? Снова вернемся к настройке клиента (см. рис. 3). Видим, что контейнер, в котором ищутся, а значит, и размещаются учетные записи пользователей YaST, понят правильно. Даже exop правильно интерпретирован. Но в результате получаем нелепицу. Попробуем починить, исправим путь поиска в nss: # grep passwd /etc/ldap.conf nss_base_passwd dc=office,dc=localnet?sub
И сразу же начинаем «видеть» новичка: # getent passwd | tail -n 3 luser1:x:1002:100:ldap user:/home/luser1:/bin/bash luser2:x:1003:100:ldap user:/home/luser2:/bin/bash luser3:x:1004:100:Yast ldap user:/home/luser3:/bin/bash
Пробуем авторизоваться: alekseybb@suse102:~> su - luser3 -c "LC_ALL=C id" Пароль: Права доступа на базу данных паролей может быть слишком ограниченная. su: неправильный пароль
Нет слов! Смех переходит в гомерический. Кроме тоОпять те же «грабли»! Здесь лично я делаю вывод, го, что учетная запись luser3 не размещена в нужном контейнере, так у нее еще и какой-то странный хеш. Смотрим, что в команде openSUSE не только Thorsten Kukuk любит пошутить. Юмористов там очень много, и шутки их с увечто внутри: личением индекса дистрибутива становятся все разнооб# slapcat | grep "^userP" | tail -n 1 | ↵ разнее.
awk '{print $2}' | mimencode -b -u
{exop}luser3
Ну что тут сказать? Создается впечатление, что разработчики OpenLDAP и YaST проживают на разных плане-
Рисунок 2. Настройка клиента LDAP
36
Выводы Статья может быть использована как практическое руководство в настройке общего пользовательского LDAPкаталога. Но описанное здесь позволяет сделать выводы как насчет надежности используемых в Linux настроек общесетевых каталогов LDAP, понять, чем озабочены разработчики подобных систем или, напротив, чем они пренебрегают, так и установить недостатки предложенного в силу свойств, присущих LDAP. Во-первых, описанная схема работает только в pwdutils, используемых в openSUSE и еще в PLD. Во многих других, например RHEL, FC, Mandriva, ALT Linux, применяются shadow-utils и их модификации. Отличие в том, что pwdutils, которые создал Thorsten Kukuk, позволяют указывать отличительное имя администратора в командной строке, то есть дают работать с административными правами даже в отсутствие параметра rootbinddn в конфигурации клиента LDAP. Это позволяет избежать столь уязвимого указания паро-
администрирование ля администратора в текстовой форме в openSUSE и PLD и приводит к тому, что все остальные дистрибутивные ветки при настройке общесетевого репозитория LDAP вынуждены хранить пароль администратора системы в открытом виде, как минимум, на тех станциях, с которых допускается административное управление каталогом. Что делает использование LDAP менее надежным, чем традиционная схема размещения бюджетных данных, обходящаяся хранением парольных хешей в файлах. Во-вторых, тот факт, что данная схема реализуется лишь с помощью заплаток, отсутствующих в дистрибутивных версиях pwdutils, свидетельствует о том, что никто и в openSUSE не смущается данными проблемами и, как и ранее, работает через rootbinddn, и даже более, используя в качестве оного rootdn, как, например в [3]. Другими словами, хранение пароля администратора в неРисунок 3. Параметры клиента LDAP шифрованном виде является повсеИ вот теперь сделаем самый главИтак, LDAP обречен на взаимоместной практикой в Linux. Для сравнения попробуйте найти нешифро- ный вывод о том, как можно испра- действие с Kerberos. Именно по этованный пароль администратора на вить ситуацию. Фактически вся сла- му пути пошли разработчики Microsoft сервере или на рабочей станции MS бость использования LDAP по сравне- и точно также поступили в Samba Windows. И опять приходится при- нию с традиционной формой хранения Team. Точно так же надо делать и в слузнать, что Linux-каталог LDAP сущес- учетных данных следует из-за невоз- чае любого применения LDAP как хратвенно менее безопасен, чем анало- можности аутентифицировать удален- нилища учетных данных. ного привилегированного пользоваБольшинство схем, описываюгичный в MS Windows. В-третьих, даже использование теля на основе сеансовых данных его щих иную настройку (источники [3] pwdutils не является практичным ре- локальной регистрации. При исполь- и [4] не исключение), можно примешением, так как требует введения па- зовании локального доступа к учет- нять лишь в локальных вариантах, роля администратора для каждой опе- ным данным UID легко проверяется и то, закрывая глаза на вопросы берации, что не всегда возможно в слу- и является надежным критерием для зопасности. Но симбиоз OpenLDAP чае, если эти утилиты используются оценки прав доступа. Так как взаимо- и Kerberos заслуживает отдельного как основа в обертывающих скриптах. действие с LDAP происходит по кли- рассмотрения. Это значит, продолжеТо есть это проблема «by design». Ана- ент-серверной схеме, то удаленная ние следует... логичная проблема возникает при ис- сторона обязана потребовать аутенпользовании smbldap‑tools. Этот инс- тификации клиентской части прежде, 1. Барабанов А. Размещение пользовательских бюджетов в LDAP. Часть 1. трументарий предназначен для под- чем разрешить нужный уровень до//«Системный администратор», №1, ключения его в качестве внутренних ступа. И единственное, на мой взгляд, 2007 г. – C. 36-43. утилит в samba3. И такое их использо- средство, которое позволяет избежать вание исключает интерактивную фа- постоянного интерактивного взаимо- 2. Исходные тексты и собранные пакеты для настоящей статьи – http://www. зу, в ходе которой можно задать воп- действия с механизмами аутентифиbarabanov.ru/arts/ldap-start. рос администратору о парольной фра- кации, это Kerberos. Лишь в случае зе. Что естественным образом приво- построения аутентификации на осно- 3. Как настроить SAMBA в SUSE как PDC с OpenLDAP, DYNDNS и CLAM – http:// дит к необходимости хранить пароль ве Kerberos можно заранее и на опреru.opensuse.org/Howto_setup_SUSE_ в месте, доступном для автоматичес- деленный срок получить для некотоas_SAMBA _ PDC_with_OpenLDAP,_ кого считывания (в данном конкретном рого локального администратора доDYNDNS_and_CLAM. случае пароль записан в конфигура- статочный уровень прав на удаленционный файл). То есть снова прихо- ный каталог LDAP и использовать дан- 4. Нас т р о й к а O penLDAP и е го к л и ентов – http://www.freesource.info/ дим к выводу о слабой защищеннос- ную возможность в неинтерактивных w i k i / A LT L i n u x / D o k u m e n t a c i j a / ти практических решений на основе скриптах, запускаемых от упомянутого пользователя. OpenLDAP?v=1845. LDAP в Linux.
№2, февраль 2007
37
администрирование
Принципы построения доменов Active Directory
Александр Емельянов 38
администрирование
Active Directory уже давно вошла в разряд консервативных принципов логического построения сетевой инфраструктуры. Но многие администраторы продолжают использовать рабочие группы и домены Windows NT в своей работе. Внедрение службы каталогов будет интересно и полезно как начинающим, так и опытным администраторам для централизации управления сетью и обеспечения должного уровня безопасности.
№2, февраль 2007
A
ctive Directory – технологию, появившуюся в линейке систем Win2K шесть лет назад, можно было охарактеризовать как революционную. По своей гибкости и масштабируемости она превосходит домены NT 4 на порядок, не говоря уже о сетях, состоящих из рабочих групп. С момента выхода AD было выпущено огромное количество книг и публикаций на тему планирования, проектирования топологии, поддержки доменов, обеспечения безопасности и т. п. Сертификационные курсы корпорации Microsoft обещают, что за 40 часов вы сможете научиться тому, как развернуть свой домен и с успехом его администрировать. Не верю. Администрирование – это процесс, включающий в себя многолетний опыт с «набитыми шишками», огромным количеством прочитанной документации (в массе своей на английском языке) и «задушевными» беседами с начальством и пользователями. Есть еще один нюанс – перед тем, как пройти курс по внедрению Active Directory, вы должны иметь успешно сданный курс по администрированию сетевой инфраструктуры на базе Windows Server 2003, который тоже требует некоторых финансовых затрат со стороны обучающегося. Лишний раз убеждаемся, что Microsoft своего не упустит. Но речь не об этом… Изучение внедрения AD никак не вписывается в рамки недельного курса и уж тем более одной публикации. Однако, вооружившись опытом предыдущих статей, попытаемся разобраться, что же такое служба каталогов по сути своей, каковы основные тонкости ее инсталляции и чем она может облегчить жизнь системного администратора. Также посмотрим, что нового появилось в Active Directory с выходом Windows Server 2003. Стоит отметить, что в последнем квартале прошедшего года Microsoft выпустила Windows Vista, а вместе с ней и обновленную службу каталогов. Однако старые технологии не потеряли своей актуальности и по сей день. В рамках статьи мы пройдем путь от понимания сущности AD до создания своего собственного домена.
Дальнейшая его настройка и инструменты управления и диагностики будут освещены в следующих номерах.
Чем поможет Active Directory Приведу неполный список всех «вкусностей», которые вы получите, развернув службу каталогов: n единая база регистрации пользователей, которая хранится централизованно на одном либо нескольких серверах; таким образом, при появлении нового сотрудника в офисе вам нужно будет всего лишь завести ему учетную запись на сервере и указать, на какие рабочие станции он сможет получать доступ; n поскольку все ресурсы домена индексируются, это дает возможность простого и быстрого поиска для пользователей; например, если нужно найти цветной принтер в отделе автоматизации; n совокупность применения разрешений NTFS, групповых политик и делегирования управления позволит вам тонко настроить и распределить права между участниками домена; n перемещаемые профили пользователей дают возможность хранить важную информацию и настройки конфигурации на сервере; фактически, если пользователь, обладающий перемещаемым профилем в домене, сядет работать за другой компьютер и введет свои имя пользователя и пароль, он увидит свой рабочий стол с привычными ему настройками; n с помощью групповых политик вы можете изменять настройки операционных систем пользователей, от разрешения пользователю устанавливать обои на рабочем столе до настроек безопасности, а также распространять по сети программное обеспечение, например, Volume Shadow Copy client и т. п.; n многие программы (прокси-серверы, серверы баз данныхи др.) не только производства Microsoft на сегодняшний день научились использовать доменную аутентификацию, таким образом, вам не придется создавать еще одну базу данных пользователей, а можно будет использовать уже существующую;
39
администрирование
Рисунок 1. Дерево доменов
Рисунок 2. Лес доменов с корнем Work.com
n использование Remote Installation Services облегчает установку систем на рабочие места, но, в свою очередь, работает только при внедренной службе каталогов. Отрицательные стороны этой технологии появляются в процессе работы либо от незнания основ, либо от нежелания вдаваться в тонкости компонентов AD. Научитесь правильно решать возникающие задачи, и весь негатив исчезнет. Я лишь заострю внимание на том фак те, что все вышеперечисленное будет иметь силу при наличии гомогенной сети на базе семейства ОС Windows 2000 и выше.
Логика построения Рассмотрим основные составляющие службы каталогов.
Домены Это основная логическая единица построения. В сравнении с рабочими группами домены AD – это группы безопасности, имеющие единую базу регистрации, тогда как рабочие группы – это всего лишь логическое объединение машин. AD использует для именования и службы поиска DNS (Domain
40
Name Server – сервер имен доме- нов будут существовать доверительна), а не WINS (Windows Internet Name ные отношения. Service – сервис имен Internet), как это Еще одно свойство доверительбыло в ранних версиях NT. Таким об- ных отношений – транзитивность. Поразом, имена компьютеров в домене лучаем – для домена net.first.work.com имеют вид, например, buh.work.com, создаются доверительные отношения где buh – имя компьютера в доме- с доменом work.com. не work.com (хотя это не всегда так, об этом читайте далее). Леса В рабочих группах используются Также как и деревья это многодоменNetBIOS-имена. Для размещения до- ные структуры. Но лес – это объединеменной структуры AD возможно ис- ние деревьев, имеющих разные корнепользование DNS-сервера не компа- вые домены. нии Microsoft. Но он должен быть совПредположим, вы решили иметь неместим с BIND 8.1.2 или выше и подде- сколько доменов с именами work.com рживать записи SRV (RFC 2052), а так- и home.net и создать для них дочерже протокол динамической регистра- ние домены, но из-за того, что tld (top ции (RFC 2136). Каждый домен име- level domain) не в вашем управлении, ет хотя бы один контроллер домена, в этом случае вы можете организовать на котором располагается централь- лес (см. рис. 2), выбрав один из доменая база данных. нов первого уровня корневым. Вся прелесть создания леса в этом случае – Деревья двухсторонние доверительные отноЭто многодоменные структуры. Кор- шения между двумя этими доменами нем такой структуры является глав- и их дочерними доменами. Однако при работе с лесами и деный домен, для которого вы создаете дочерние. Фактически Active Directory ревьями необходимо помнить следуиспользует иерархическую систему ющее: построения, аналогичную структуре n нельзя добавить в дерево уже судоменов в DNS. ществующий домен; Например, если мы имеем до- n нельзя включить в лес уже сущесмен work.com (домен первого уровня) твующее дерево; и создаем для него два дочерних до- n если домены помещены в лес, мена first.work.com и second.work.com их невозможно переместить в дру(здесь first и second – это домены втогой лес; рого уровня, а не компьютер в доме- n нельзя удалить домен, имеющий не, как в случае, описанном выше), дочерние домены. то в итоге получим дерево доменов (см. рис. 1). Для получения более глубокой инДеревья как логическое постро- формации по тонкостям использоение используются, когда вам нуж- вания и конфигурирования деревьно разделить филиалы компании, на- ев и лесов вы можете посетить базу пример, по географическим призна- знаний Microsoft TechNet, а мы пойкам, либо из каких-то других органи- дем дальше. зационных соображений. AD помогает автоматически созда- Организационные единицы вать доверительные отношения меж- (OU) ду каждым доменом и его дочерними Их можно назвать субдоменами. OU доменами. позволяют группировать в домене Таким образом, создание домена учетные записи пользователей, групfirst.work.com ведет к автоматической пы пользователей, компьютеры, разорганизации двухсторонних довери- деляемые ресурсы, принтеры и другие тельных отношений между родитель- OU. Практическая польза от их примеским work.com и дочерним first.work.com нения состоит в возможности делеги(аналогично и для second.work.com). рования прав для администрирования Поэтому с родительского домена мо- этих единиц. гут применяться разрешения для доПопросту говоря, можно назначернего, и наоборот. Нетрудно пред- чить администратора в домене, коположить, что и для дочерних доме- торый сможет управлять OU, но не
администрирование иметь прав для администрирования всего домена. Важной особенностью OU в отличие от групп (немного забегаем вперед) является возможность применения к ним групповых политик. «А почему нельзя разбить исходный домен на несколько доменов вместо использования OU?» – спросите вы. Многие специалисты советуют иметь по возможности один домен. Причина этому – децентрализация администрирования при создании дополнительного домена, так как администраторы каждого такого домена получают неограниченный контроль (напомню, что при делегировании прав администраторам OU можно ограничивать их функционал). В дополнение к этому для создания нового домена (даже дочернего) нужен будет еще один контроллер. Если же у вас есть два обособленных подразделения, соединенных медленным каналом связи, могут возникнуть проблемы с репликацией. В этом случае более уместным будет иметь два домена. Также существует еще один нюанс применения групповых политик: политики, в которых определены настройки паролей и блокировки учетных записей могут применяться только для доменов. Для OU эти настройки политик игнорируются.
Группы пользователей и компьютеров Они используются для административных целей и имеют такой же смысл, как и при использовании на локальных машинах в сети. В отличие от OU, к группам нельзя применять групповые политики, но для них можно делегировать управление. В рамках схемы Active Directory выделяют два вида групп: группы безопасности (применяются для разграничения прав доступа к объектам сети) и группы распространения (применяются в основном для рассылки почтовых сообщений, например, в сервере Microsoft Exchange Server). Они подразделяются по области действия: n универсальные группы могут включать в себя пользователей в рамках леса, а также другие универсальные группы или глобальные группы любого домена в лесу;
№2, февраль 2007
Рисунок 3. Пример логики вложенности объектов Active Directory
n глобальные группы домена могут включать в себя пользователей домена и другие глобальные группы этого же домена; n локальные группы домена используются для разграничения прав доступа, могут включать в себя пользователей домена, а также универсальные группы и глобальные группы любого домена в лесу; n локальные группы компьютеров – группы, которые содержит SAM (security account manager) локальной машины. Область их распространения ограничивается только данной машиной, но они могут включать в себя локальные группы домена, в котором находится компьютер, а также универсальные и глобальные группы своего домена или другого, которому они доверяют. Например, вы можете включить пользователя из доменной локальной группы Users в группу Administrators локальной машины, тем самым дав ему права администратора, но только для этого компьютера.
Сайты Это способ физического разделения службы каталогов. По определению сайт – это группа компьютеров, соединенных быстрыми каналами передачи данных.
Например, если вы имеете несколько филиалов в разных концах страны, соединенных низкоскоростными линиями связи, то для каждого филиала вы можете создать свой сайт. Делается это для повышения надежности репликации каталога. Такое разбиение AD не влияет на принципы логического построения, поэтому как сайт может содержать в себе несколько доменов, так и наоборот, домен может содержать несколько сайтов. Но такая топология службы каталогов таит в себе подвох. Как правило, для связи с филиалами используется Интернет – очень небезопасная среда. Многие компании используют средства защиты, например, брандмауэры. Служба каталогов в своей работе использует около полутора десятков портов и служб, открытие которых для прохождения трафика AD через брандмауэр, фактически выставит ее «наружу». Решением проблемы является использование технологии туннелирования, а также наличие в каждом сайте контроллера домена для ускорения обработки запросов клиентов AD. На рис. 3 представлена логика вложенности составляющих службы каталогов. Видно, что лес содержит два дерева доменов, в которых корневой домен дерева, в свою очередь, может со-
41
администрирование Новшества Active Directory в Windows Server 2003 С выходом Windows Server 2003 в Active Directory появились следующие изменения: n Стало возможным переименование домена после его создания. n Улучшился пользовательский интерфейс управления. Например, можно изменить атрибуты сразу нескольких объектов. n Появилось хорошее средство управления групповыми политиками – Group Policy Management Console (gpmc.msc, ее нужно скачивать с сайта Microsoft). n Изменились функциональные уровни домена и леса. О последнем изменении нужно сказать подробнее. Домен AD в Windows Server 2003 может находиться на одном из следующих уровней, перечисленных в порядке роста функциональности: n Windows 2000 Mixed (смешанный Windows 2000). В нем допускается иметь контроллеры различных версий – как Windows NT, так и Windows 2000/2003. Причем если серверы Windows 2000/2003 равноправны, то сервер NT, как уже говорилось, может выступать только резервным контроллером домена. n Windows 2000 Native (естественный Windows 2000). Допускается иметь
контроллеры под управлением Windows Server 2000/2003. Этот уровень более функционален, но имеет свои ограничения. Например, вы не сможете переименовывать контроллеры доменов. n Windows Server 2003 Interim (промежуточный Windows Server 2003). Допускается иметь контроллеры под управлением Windows NT, а также Windows Server 2003. Используется, например, когда главный контроллер домена под управлением сервера Windows NT обновляется до W2K3. Уровень имеет чуть большую функциональность, чем уровень Windows 2000 Native. n Windows Server 2003. Допускается наличие в домене контроллеров только под управлением Windows Server 2003. На этом уровне можно воспользоваться всеми возможностями службы каталогов Windows Server 2003. Функциональные уровни леса доменов практически те же, что и для доменов. Единственное исключение – существует только один уровень Windows 2000, на котором возможно использование в лесу контроллеров под управлением Windows NT, а также Windows Server 2000/2003. Стоит заметить, что изменение функционального уровня домена и леса является операцией необратимой. То есть отсутствует обратная совместимость.
во информации каталога). NTDS.DIT – это модифицированная база данных. Она создана с использованием той же технологии, что и база данных Microsoft Access. Алгоритмы работы контроллеров домена содержат вариант движка JET базы данных Access, который был назван ESE (Extensible Storage Engine – расширяемый движок хранения информации). NTDS.DIT и службы, обеспечивающие взаимодействие с этим файлом, фактически и есть служба каталогов. Структура взаимодействия клиентов AD и основного хранилища данных, аналогично как и пространство имен службы каталогов, представлены в статье [1]. Для полноты описания нужно упомянуть об использовании глобальных идентификаторов. Глобальный уникальный идентификатор (Global Unique Identifier, GUID) – это 128-разрядное число, сопоставляемое каждому объекту при его создании для обеспечения уникальности. Имя объекта AD можно изменить, а вот GUID останется неизменным.
Глобальный каталог Наверняка вы успели заметить, что структура AD может быть весьма сложной и вмещать в себя большое количество объектов. Чего стоит только тот факт, что домен AD может включать в себя до 1,5 млн. объектов. Но изза этого могут возникнуть проблемы с производительностью при выполнении операций. Эта проблема решается с помощью Глобального каталога (Global Catalog, GC). Он содержит сокращенную версию всего леса AD, что помогает ускорять поиск объектов. Владельцем глобального каталога могут выступать специально назначенные для этого контроллеры домена.
держать OU и группы объектов, а так- ные пользователей и был зашифроже иметь дочерние домены (в данном ван. Сегодня SAM также используетслучае их по одному у каждого). До- ся в операционных системах семейсчерние домены также могут содер- тва NT 5 (Windows 2000 и выше). жать группы объектов и OU и иметь Когда вы повышаете роль рядового дочерние домены (на рисунке их нет). сервера до контроллера домена с поИ так далее. Напомню, что OU могут мощью команды DCPROMO (фактисодержать OU, объекты и группы объ- чески она запускает мастер установектов, а группы могут содержать дру- ки службы каталогов), подсистема бегие группы. Более подробно о вложен- зопасности Windows Server 2000/2003 ности групп и их составляющих читай- начинает использовать централизо- Роли FSMO те в следующей статье. ванную базу данных AD. Это можно В AD существует определенный перелегко проверить – попробуйте после чень операций, выполнение которых Сущность службы создания домена открыть на контрол- можно возложить только на один конткаталогов лере оснастку Computer Management роллер. Они называются ролями FSMO Чтобы обеспечить некоторый уровень и найти там «Локальные пользовате- (Flexible Single-Master Operations – опебезопасности, любая операционная ли и группы». Более того, попробуй- рации с одним хозяином). Всего в AD система должна иметь файлы, содер- те войти на этот сервер под локаль- 5 ролей FSMO. Рассмотрим их более жащие базу данных пользователей. ной учетной записью. Вряд ли у вас подробно. В ранних версиях Windows NT для это- получится. В рамках леса обязательно должго использовался файл SAM (Security Большинство данных пользова- на существовать гарантия уникальносAccounts Manager – менеджер учетных телей сохраняются в файле NTDS. ти доменных имен при добавлении нозаписей). Он содержал учетные дан- DIT (Directory Information Tree – дере- вого домена к лесу доменов. Такая га-
42
администрирование рантия осуществляется исполнителем роли владельца операции именования доменов (Domain Naming Master) Исполнитель роли владельца схемы (Schema Master) осуществляет все изменения в схеме каталога. Исполнители ролей владельца доменных имен и владельца схемы должны быть уникальны в рамках леса доменов. Как я уже говорил, при создании объекта ему сопоставляется глобальный идентификатор, гарантирующий его уникальность. Именно поэтому контроллер, отвечающий за генерацию GUID и исполняющий роль владельца относительных идентификаторов (Relative ID Master), должен быть одинединственный в рамках домена. В отличие от доменов NT в AD нет понятия PDC и BDC (основной и резервный контроллеры домена). Одной из ролей FSMO является PDC Emulator (эмулятор основного контроллера домена). Сервер под управлением Windows NT Server может выступать в роли резервного контроллера домена в AD. Но известно, что в доменах NT может использоваться только один основной контроллер. Именно поэтому Microsoft сделала так, что в рамках одного домена AD мы можем назначить единственный сервер – носитель роли PDC Emulator. Таким образом, отступая от терминологии, можно говорить о наличии главного и резервных контроллеров домена, имея в виду обладателя роли FSMO. При удалении и перемещении объектов один из контроллеров должен сохранить ссылку на этот объект, пока не будет полностью завершена репликация. Такую роль выполняет владелец инфраструктуры каталога (Infrastructure Master). Последние три роли требуют уникальности исполнителя в рамках домена. Все роли возлагаются на первый контроллер, созданный в лесу. При создании разветвленной инфраструктуры AD вы можете передавать эти роли другим контроллерам. Могут возникать также ситуации, когда владелец одной из ролей недоступен (вышел из строя сервер). В этом случае необходимо выполнить операцию захвата роли FSMO с помощью утилиты NTDSUTIL (о ее использовании мы поговорим в следующих статьях). Но стоит быть осторожным, так как при за-
№2, февраль 2007
хвате роли служба каталогов полагает, что предыдущего владельца нет, и не обращается к нему вовсе. Возвращение в сеть прежнего исполнителя роли может привести к нарушению ее функционирования. Особенно это критично для владельца схемы, владельца доменных имен и владельца идентификаторов. Что касается производительности: наиболее требовательна к запасу ресурсов компьютера роль эмулятора основного контроллера домена, поэтому ее можно возложить на другой контроллер. Остальные роли не столь требовательны, поэтому при их распределении вы можете руководствоваться нюансами логического построения схемы вашей AD.
Последний шаг теоретика Прочтение статьи вовсе не должно перевести вас из теоретиков в практики. Потому что, пока вы не учли все факторы от физического размещения узлов сети до логического построения всего каталога, не стоит браться за дело и воздвигать домен простыми ответами на вопросы мастера установки AD. Подумайте, как будет называться ваш домен и, если вы собираетесь создать дочерние для него, по каким признакам они будут именоваться. При наличии в сети нескольких сегментов, соединенных ненадежными каналами связи, рассмотрите возможность использования сайтов. Как руководство по установке AD могу посоветовать использовать статьи [2] и [3], а также базу знаний Microsoft. Напоследок несколько советов: n Постарайтесь по возможности не совмещать роли PDC Emulator и прокси-сервера на одной машине. Во-первых, при большом количестве машин в сети и пользователей Интернет возрастает нагрузка на сервер, а во-вторых, при удачной атаке на ваш прокси «упадет» не только Интернет, но и основной контроллер домена, а это чревато некорректной работой всей сети. n Если вы постоянно администрируете локальную сеть, а не собираетесь заняться внедрением Active Directory для заказчиков, вносите машины в домен постепенно, ска-
жем, по четыре-пять в день. Поскольку если у вас в сети большое количество машин (50 и больше) и вы управляете ею один, то вряд ли вы управитесь даже за выходные, а если и управитесь, то насколько все будет корректно, неизвестно. К тому же для обмена документацией внутри сети вы можете использовать файловый или внутренний почтовый сервер (такой был описан мной в №11 за 2006 г.). Единственное, в этом случае стоит корректно разобраться в настройке прав пользователей для доступа к файловому серверу. Потому что, если, например, он не будет включен в домен, аутентификация пользователей будет осуществляться, основываясь на записях локальной базы SAM. Там нет данных о доменных пользователях. Однако если ваш файловый сервер будет в числе первых машин, включенных в AD, и не будет контроллером домена, то будет существовать возможность аутентификации посредством как локальной базы SAM, так и учетной базы AD. Но для последнего варианта вам нужно будет в локальных настройках безопасности разрешить (если это еще не сделано) доступ к файловому серверу по сети как участникам домена, так и локальным учетным записям. О дальнейшей настройке службы каталогов (создание и управление учетными записями, назначение групповых политик и др.) читайте в следующей статье. 1. Коробко И. Active Directory – теория построения. //«Системный администратор», №1, 2004 г. – C. 90-94. (http:// www.samag.ru/cgi-bin/go.pl?q=articles; n=01.2004;a=11). 2. Марков Р. Домены Windows 2000/ 2003 – отказываемся от рабочей группы. //«Системный администратор», №9, 2005 г. – C. 8-11. (http://www.samag. ru/cgi-bin/go.pl?q=articles;n=09.2005; a=01). 3. Марков Р. Установка и настройка Windows 2К Server. //«Системный администратор», №10, 2004 г. – C. 88-94. (http://www.samag.ru/cgi-bin/go.pl?
q=articles;n=10.2004;a=12).
43
администрирование
Тонкая настройка Microsoft ISA 2004
Андрей Бирюков Известно, что настройки, используемые по умолчанию при установке программного обеспечения, не являются оптимальными. Как можно настроить межсетевой экран ISA 2004, чтобы оптимизировать работу сети?
М
ежсетевой экран Microsoft расширяться филиалы, в связи с этим ISA 2004 содержит множест- возрастает нагрузка на каналы связи. во функций, необходимых для Увеличение пропускной способности организации полноценной работы кор- каналов, как правило, требует дополпоративной сети. В предыдущих стать- нительных финансовых затрат, к тому ях [1, 2] я рассмотрел вопросы, связан- же не всегда возможно. Но снизить наные с подключением пользователей грузку можно, не прибегая к каким-лик Интернету и организацией удаленно- бо затратам, используя возможности го доступа к корпоративным ресурсам. ISA Server. Для этого имеются возможТеперь наша географически распреде- ности управления трафиком, кэшироленная корпоративная сеть может пол- вание, сжатие данных и т. д. ноценно функционировать, обеспечивая как доступ локальным пользова- Предыстория, телям к ресурсам Интернета, так и до- исправление ошибок ступ сотрудникам, работающим уда- Изначально в ISA 2004 некоторые ленно в филиалах, к ресурсам основ- из вышеперечисленных функций заной сети. Поскольку с течением вре- ложены не были. Например, отсутсмени численность сотрудников компа- твовали средства управления трафинии может увеличиваться, также могут ком и активное кэширование. В пре-
44
дыдущей версии межсетевого экрана ISA 2000 эти функции были реализованы, однако, по заверениям Microsoft, не пользовались популярностью, поэтому в первом релизе 2004 средства управления трафиком отсутствовали. Но вскоре в Microsoft осознали ошибочность такого подхода, и реализация данных средств была включена в пакет обновлений Service Pack 2. Перехожу непосредственно к описанию тех компонентов, с помощью которых можно повысить эффективность сети. Начну с фоновой интеллектуальной службы передачи (Background Intelligent Transfer Service – BITS), которая помогает передавать большие объемы информации без уменьше-
администрирование ния производительности сети. До- сия, которая уменьшает размер файстигается это за счет передачи дан- ла, используя алгоритмы для снижения ных небольшими порциями, исполь- избыточности передаваемых данных. зуя невостребованную доступную про- Таким образом, могут быть безопаспускную способность, и соединения но сжаты файлы большинства типов. порций данных в месте назначения. HTTP-компрессия использует станВ ISA Server 2004 SP2 встроен меха- дартные алгоритмы GZIP и Deflate, конизм кэширования данных, получен- торые встроены в Windows 2000, 2003 ных из центра Microsoft Update с по- и новые операционные системы, а такмощью BITS. Обновление операцион- же в Internet Explorer версии 4 и выше. ных систем Microsoft Windows и других Эти же алгоритмы используются для продуктов компании Microsoft на ком- декомпрессии статических файлов пьютерах компании может использо- и динамических ответов на стороне вать большую часть доступной про- клиента, поддерживающего протокол пускной способности сети. Это может HTTP 1.1. Клиент, настроенный на иссоздать особые сложности, если для пользование протокола HTTP 1.1, заподключения к Интернету использует- прашивает сжатую информацию у вебся канал с низкой пропускной способ- сервера. Веб-сервер в ответе указыностью. Но своевременное выполне- вает, поддерживает ли он компресРисунок 1. Взаимодействие между основным и удаленным офисами ние обновлений необходимо для ста- сию или нет. бильной работы Windows-приложеВ ISA- сервере HT TP-компрес ний. ISA предоставляет возможность сия является глобальной установкой для кэширования данных Microsoft для всего трафика данного протокола. Update с помощью BITS для хранения Она применяется ко всему HTTP-траобновлений так, чтобы кэш ISA-сер- фику, проходящему через ISA-сервер вера сам отвечал на запросы. Обнов- «к» или «от» отдельной сети или сетеления могут быть получены через Ин- вого объекта, а не только для трафитернет один раз, а затем применяться ка, управляемого отдельным правипо всей корпоративной сети. Для кэ- лом. HTTP-компрессия представлена ширования данных Microsoft Update двумя веб-фильтрами: использует запросы HTTP по диапазо- n Фильтр сжатия. Отвечает за комну (HTTP Range Requests). За счет топрессию и декомпрессию запросов и откликов HTTP. Обладает го, что ISA-сервер может кэшировать такие запросы, достигается дополнивысоким приоритетом и находится тельная эффективность. Это увеличина вершине списка веб-фильтров, вает скорость обновления при низкой поскольку он отвечает за декомппропускной способности сети и безорессию, без чего остальные фильпасность сетевого окружения, так как тры не смогут получить доступ к соРисунок 2. Выбираем типы контента быстрая и своевременная установка держимому потока. В случае выбоКомпрессия по диапазону – это сжаобновлений позволяет повысить усра проверки сжатого содержимого тойчивость к сбоям. декомпрессия должна проходить тие отдельного HTTP-запроса. Компдо того, как другие веб‑фильтры рессия по диапазону может испольДля того чтобы настроить кэширозоваться для несжатых файлов типа вание на ISA Server, нужно проделать будут проверять содержимое. следующие действия: n Фильтр кэширования сжатого со- PDF (Portable Document Format – форВ консоли управления ISA-сервера держимого. Отвечает за кэширо- мат портативных документов). Однако, если в вашей сети исоткройте пункт «Cache», затем опревание сжатого содержимого и обделитесь с правилами «Cache Rules». служивает запросы на сжатое со- пользуется веб-сервер от Microsoft В панели задач создайте правило кэдержимое из кэша. У него самый IIS (Internet Information Ser vices), ширования данных для обновлений: низкий приоритет, и он расположен то не включайте эту функцию, так как «Create the Microsoft Update Cache в конце списка веб-фильтров, пос- он не поддерживает компрессию. Применительно к инфраструктуRule». На последней странице прокольку кэширование происходит смотрите информацию о настройке после того, как все фильтры про- ре ISA, которую мы развернули в предыдущих статьях [1, 2], и в частноси нажмите «Finish», затем «Apply», чтоверят содержимое. ти к связи центрального и удаленного бы изменения вступили в силу. Не рекомендуется изменять при- офисов, можно развернуть компресСжимаем трафик оритеты по умолчанию для этих фильт- сию по диапазону между двумя ISAДругим средством, позволяющим сни- ров. HTTP-компрессия также дает серверами. К примеру, если в главзить загруженность каналов доступа возможность установки компрессии ном офисе стоит веб-сервер, можно отключить компрессию по диапазов Интернет, является HTTP-компрес- по диапазону.
№2, февраль 2007
45
администрирование ну во внутренней сети главного офиса, но включить ее во внешней сети между главным офисом и филиалами. Таким образом, компрессия по диапазону будет использоваться между офисами. Прежде чем описать практическую реализацию, рассмотрим процесс сжатия в ISA Server 2004 SP2: n Браузер клиента запрашивает контент. n Настройки в филиале не разрешают клиенту использование режима сжатия контента. Однако ISA-сервер в филиале настроен на данный режим и поэтому посылает в главный офис уже сжатый запрос. n ISA-сервер главного офиса получает запрос. Поскольку клиенту (ISA-сервер филиала) разрешен сжатый контент, ISA-сервер посылает запрос на веб-сервер. Однако ISA-сервер в главном офисе настроен на запрет запросов с компрессией, ответ веб-сервера содержит несжатый контент. n Когда ISA-сервер главного офиса получает запрос, он возвращает его ISA-серверу филиала. Поскольку запрос от ISA-сервера филиала запрашивал сжатие, ISAсервер главного офиса сжимает данные перед отправкой. n ISA-сервер филиала получает ответ, сжатый контент. ISA-сервер делает декомпрессию и передает несжатые данные клиенту в филиале.
Особенности настройки компрессии по диапазону Компрессия по диапазону не устанавливается через консоль управления ISA-сервера. Поэтому администратор должен редактировать xml-файл вручную и установить флажок CompressRange. Итак, выполните следующие действия: 1. Создайте xml-файл следующей структуры: Листинг 1. XML-файл для компрессии по диапазону <Compression ContentInspectionIsRequired="false" MinimumCompressionLength="36" MemAllocCompression="256"> <NetworksElements> <NetworkElement Name="Internal" Type="Network" ClientCanAskForCompression="true" ServerShouldCompressResponse="false" CompressRange="false" StorageName= ↵ "{4E32B556-0FAF-4A27-9111-085F679EDC9B}" /> <NetworkElement Name="External" Type="Network" ClientCanAskForCompression="false" ServerShouldCompressResponse="true" CompressRange="true" StorageName= ↵ "{F129EACF-778B-44FE-B339-5B752D7220A3}" /> </NetworksElements> <ContentTypes CompressOnlyFollowingContentType="false"> <ContentType Name="Images" StorageName= ↵ "{2f203d1d-9ca0-414a-b036-fc9c585677ab}" /> <ContentType Name="Video" StorageName= ↵ "{7d3e566c-e96c-4cd4-b6aa-8181a8386c8e}" /> </ContentTypes
Графически алгоритм изображен на рис. 1. Теперь реализуем HTTP-компрессию на практике. Для этого требуется произвести следующие действия. Как и в прежних примерах, основным инструментом выступает консоль администрирования ISA. Далее «Configuration» и «General». На вкладке «Global HTTP Policy Settings» нажмите «Define HTTP Compression Preferences» (определить предпочтения HTTP-компрессии). Откроется окно свойств «HTTP Compression». На вкладке «Settings» вы можете добавить сетевые объекты, для которых требуется HTTP-компрессия. Далее «Add». Откроется диалоговое окно «Add Network Entities». Выберите в нем объект и нажмите «Add». Повторите эту процедуру для каждого элемента и нажмите «Close». Обратите внимание, что список сетевых объектов упорядочен, так что вы можете установить предпочтения компрессии между сетевыми объектами (см. рис. 2). Используйте стрелки для изменения порядка сетевых элементов. Выделите сетевой элемент и нажмите «Set Compression» для установки свойств компрессии. При этом можно выбрать: n Reply with compressed HTTP content (отвечать со сжатым HTTP-содержимым). В этом случае ISA-сервер возвращает сжатое содержимое, если клиент запросил компрессию данных от этого сетевого элемента. n Request compressed HTTP content from servers (запрашивать сжатое HTTP-содержимое от серверов). В этом случае ISA-сервер запрашивает сжатое содержимое от сетевых элементов.
Файл сценария входит в состав Compression Configuration Tool for Microsoft Internet Security and Acceleration (ISA) Server 2004 Service Pack 2 (SP2), который можно получить на сайте Microsoft. Для настройки Internet Explorer на использование HTTP 1.1 на вкладке «Advanced» окна «Internet Options» выберите пункт «Use HTTP 1.1 through proxy connections». Тут следует сделать небольшую поправку, отметив, что трафик HTTPS не сжимается.
После настройки компрессии для сетевых элементов в диалоговом окне «Set Compression» нажмите «OK» для его закрытия.
Сжатие HTTP-контента позволяет существенно сэкономить пропускную способность канала. Однако пропускной
46
2. Вы можете создать xml-файл при настройке HTTP-компрессии в консоли управления ISA-сервера, а затем экспортировать настройки с помощью файла SetCompConfig.vbs. Синтаксис строки запуска: SetCompConfig.vbs export имя_файла
3. Отредактируйте xml-файл для изменения настроек и снова запустите скрипт для измененного файла. Запустите файл SetCompConfig.vbs с именем вашего файла в качестве параметра. Так вы поместите файл в хранилище ISA-сервера. Для импорта используйте следующий синтаксис: SetCompConfig.vbs import имя_файла
Организовываем очередность
администрирование способности на всех не хватает, в результате может возникнуть весьма не- Смотрим в будущее приятная ситуация, когда пользовате- В 2006 году вышла новая версия межсели заполняют канал, скачивая мульти- тевого экрана ISA 2006. Внешне она мамедийный контент, зачастую не имею- ло отличается от предыдущей. Однако щий никакого отношения к бизнес-про- официальное описание продукта на сайте цессам (но разрешенный политика- Microsoft сообщает о следующих изменеми безопасности). А в это время кри- ниях и улучшениях: тически важные для бизнеса прило- n улучшена возможность публикации Outlook Web Access; жения не могут установить соединение или работают слишком медленно. n д о б а в л е н м а с т е р п у б л и к а ц и и Sahrepoint; Для борьбы с этим можно воспользоn добавлена поддержка Exchange 2007; ваться встроенным в ISA Server 2004 SP2 механизмом приоритезации па- n добавлен мастер подключения удаленных офисов по VPN; кетов. Конечно, следует сразу отметить, что этот механизм несколько уступает данных при назначении приоритета службе QoS (Quality of Service), в час- первому пакету. Поэтому приоритет тности, ее реализации на активном се- первого пакета выставляется для больтевом оборудовании. Приоритет паке- шой порции данных. На вкладке «Content Types» (типы тов – это установка глобальной политики HTTP. Приоритет применяется ко содержимого) вы можете указать, кавсему трафику, проходящему через кой тип содержимого требует сжатия. ISA-сервер, а не только к тому, кото- У вас есть возможность указать, карый управляется специальным прави- кой тип будет исключен (остальные лом. Приоритет пакетов устанавлива- включены) или какой тип включен (осется с помощью веб-фильтра DiffServ, тальные исключены). Далее выберикоторый проверяет URL или домен те включаемые или исключаемые тии назначает пакетам приоритет с помо- пы содержимого. Рис. 3 является прищью битов данных DiffServ. В ISA-сер- мером настройки, при которой HTMLвере можно создать приоритеты, биты документы будут сжиматься. Вы моDiffServ которых совпадают с приори- жете создать новый тип в панели затетами на корпоративных маршрутиза- дач политик брандмауэра на вкладке торах. Таким образом, можно настро- «Toolbox» (средства), как описано в поить корпоративные маршрутизаторы мощи ISA-сервера. на передачу пакетов соответственно Замечание 2 их приоритету (см. рис. 3). Фильтр обладает высоким приори- Далее перечислены типы данных, котетом и находится в вершине списка торые не могут быть эффективно сжавеб-фильтров, поскольку этот фильтр ты, поскольку они уже представлены должен знать реальный размер пос- с компрессией: n video ланного запроса или ответа и должен проверить данные, получаемые или передаваемые ISA-сервером. Не изменяйте приоритет по умолчанию и порядок настроек фильтра.
Замечание 1 ISA-сервер не добавляет биты DiffServ в заголовки, отличные от HTTP или HTTPS. ISA-сервер не может передавать существующие биты DiffServ на трафик других протоколов. (Данная информация может быть удалена из заголовка сессии.) Для ответов из кэша приоритет первого пакета не устанавливается. Установка приоритета пакета не учитывает размер первой порции
№2, февраль 2007
Рисунок 3. Устанавливаем очередность
n д о ба в л е н а з а щ и та от ата к т и п а flooding. Также, по заявлению создателей, теперь межсетевой экран Microsoft ISA Server 2006 Standard и Enterprise Edition доступен в виде appliance (программно-аппаратных решений). Продукт уже продается, к тому же любой желающий может загрузить испытательную версию с сайта Microsoft [4] и своими глазами убедиться в том, насколько хороша или плоха новая версия межсетевого экрана ISA 2006.
n audio n application/x-tar n x-world/x-vrml n application/zip n application/x-gzip n application/x-zip-compressed n application/x-compress n application/x-compressed n application/x-spoon@@ На вкладке «Content Inspection» (проверка содержимого) вы можете указать, проверять ли веб-фильтрам содержимое или нет. Для этого сжатое содержимое будет подвержено декомпрессии. После декомпрессии содержимое хранится в кэше как несжатый текст. Если ISA-сервер получает запрос на данные из кэша, он сжимает их снова перед отправкой, что увеличивает время ответа. По окончании настройки нажмите «Apply», чтобы изменения вступили в силу. Итак, в результате несложных настроек мы увеличили эффективность использования сетевой инфраструктуры, настроив кэширование и сжатие контента, а также выставив приоретизацию пакетов. 1. Бирюков А. Устанавливаем межсетевой экран MS ISA Server 2004. //«Системный администратор», №12, 2006 г. – С. 4-8. 2. Бирюков А. Настраиваем удаленный доступ к сети с помощью MS ISA 2004. //«Системный администратор», №1, 2007 г. – С. 26-31. 3. Русскоязычная документация и статьи по ISA Server – http://www.isadocs.ru. 4. Испытательная версия ISA 2006 – http://www.microsoft.com/technet/isa/ downloads/2006.
47
администрирование
Проводим мониторинг нагрузки операционной системы Solaris
Сергей Косько Вы установили своё новое приложение (например, СУБД) на сервере с операционной системой Solaris. Сначала всё шло хорошо, пользователи были довольны, но со временем появились жалобы, производительность работы значительно снизилась, и вы задумались о модернизации оборудования. Не стоит этого делать наугад. Прежде чем принимать решение о замене сервера, определите, каких именно ресурсов не хватает.
С
разу после развёртывания приложения, как правило, проводятся измерения исходной рабочей нагрузки. Впоследствии необходимо вести периодические измерения использования ресурсов системы: оперативной памяти, подсистемы дискового ввода-вывода, сети и центрального процессора, чтобы выявлять «узкие места», препятствующие производительной работе системы.
48
Предлагаемая методика известна мне по душе больше, чем стандартдавно (её подробное описание приве- ные команды UNIX. Будем рассматдено, например, в [1]) и в целом при- ривать по порядку сначала загрузменима к любому компьютеру, под уп- ку оперативной памяти, потом дисравлением любой универсальной опе- ков, сети и, наконец, процессоров. Тарационной системы. Тут мы рассмот- кой порядок объясняется тем, что нерим её упрощённый вариант для пред- хватка памяти может внести погрешварительной оценки загрузки серве- ность в определение нагрузки на дисров под управлением операционной ки, а загрузка дисков или сети – в опсистемы Solaris, с использованием ко- ределение загрузки процессора. В каманд и скриптов, которые пришлись честве тестового сервера использу-
администрирование ются SUN Fire v440 (4X1593МГцX8Гб) и операционная сис- манда «vmstat -p». Для версии 7 можно скачать команду «memstat» [2]. Вывод команды vmstat с опцией -p: тема Solaris 8.
Мониторинг памяти При настройке оперативной памяти главная цель – избежать её дефицита. Если запросы приложений к памяти превышают имеющиеся ресурсы, «рабочие наборы» (working sets) выполняющихся процессов станут существенно меньше, чем необходимо для комфортной работы, возникнет избыточная подкачка страниц оперативной памяти. По интенсивности подкачки страниц судят о потребности в памяти. Традиционно наличие подкачки страниц определяют с помощью команды vmstat. Например, вывод команды vmstat при малой загрузке ОЗУ: # vmstat 3
# vmstat -p 2 5
Её достоинство в том, что кроме scan rate, мы можем видеть показатели page-in/page-out/page-frees по отдельности для executable/anonymous/filesystem страниц памяти. Рассмотрим пример: $ find / -name sdfsdfsd -print & 13552
Вывод команды vmstat, демонстрирующий активность кеша файловой системы: $ vmstat -p 1
Анализируя колонки sr (scan rate) и po (page out), пытаются оценить интенсивность подкачки. Если значения в этих колонках не сильно отклоняются от среднестатистических, взятых за эталон благополучия значений (допустим, пускай эталоном будет полное отсутствие подкачки: sr=0 и po=0), можно считать, что проблемы подкачки нет. Еще одна команда – sar. Вывод команды sar при малой загрузке ОЗУ: # sar -g 5 5
Сплошные нули в колонках не являются самоцелью, это скорее показатель избытка оперативной памяти. В нормально работающей системе всегда кто-то запрашивает дополнительную память, кто-то её освобождает, пишет или читает, но если обычная нагрузка была 100, а стало 100 000, это плохой знак. В операционной системе Solaris система виртуальной памяти, кеш файловой системы и каталог /tmp используют общий пул свободной оперативной памяти, распределяемый динамически, вследствие чего колонка free в выводе команды vmstat малоинформативна. Проверим, что происходит с файлом подкачки:
До версии 7 операционной системы Solaris страницы файлового кеша и страницы памяти, отображаемые на swap, имели одинаковый приоритет, вследствие чего активность дискового кеша вносила путаницу в потребности в памяти. В версии 8 и выше эта проблема устранена. Если в последних трёх колонках мы видим большие цифры, то, возможно, пора переходить к проверке дисков (в данном случае работает команда find). А вот если присутствуют большие значения в колонке api, apo, apf, то необходимо проверить запросы процессов к памяти системы. Выполним команду prstat с сортировкой по объёму виртуальной памяти: $ prstat -a -s size
# /usr/sbin/swap -l swapfile /dev/dsk/c1t0d0s1
dev swaplo blocks free 118,1 16 8389632 6532608
Вывод команды iostat при низких объёмах подкачки: # iostat -zxnp 1
Мы видим, что подкачки практически нет. И на последок, в ОС Solaris (начиная с версии 8) есть чудесная ко-
№2, февраль 2007
Вывод этой команды показывает процессы, отсортированные по размеру используемой виртуальной памяти
49
администрирование (а с ключем -s rss резидентной памяти), и суммарные показатели по имени пользователя. Это даёт возможность определиться с дальнейшими поисками «виновного».
Мониторинг дискового ввода-вывода Следить за загрузкой дисков существенно проще. Проведём несколько тестов. Например, с помощью пакета iozone [3]. Откроем несколько терминальных сессий и запустим команды. В первой сессии:
Проведём аналогичный тест для накопителей на гибких магнитных лентах. Получаются аналогичные результаты. $ dd if=/dev/zero of=/dev/rmt/0 bs=1024k count=200000 …
Вывод команды iostat во время записи на магнитную ленту: $ iostat -zxnp 1
$ time iozone -Ra … real user sys
30:29.2 50.9 6:40.9
Вывод команды sar во время записи на магнитную ленту: $ sar -u 1 5
Как видно, большая часть времени в приложении расходуется на ожидание, а время, затраченное процессором, тратится большей частью в режиме sys, а не user. Во второй сессии выполним следующую команду – iostat, получим вывод команды при большой нагрузке на файловую систему: $ iostat -zxnp 1
Если с точки зрения памяти или процессоров у нас всё в порядке, тогда нам осталось рассмотреть сеть и процессор.
Мониторинг сети Команда показывает ввод-вывод по разделам дисков. Если Начнём, как всегда, с теста. Снова создадим несколько добавить к этой команде ключ -C – «iostat ‑zxnpC 1», к пока- сессий: в одной запускаем тест сети. В другой – команду занной статистике прибавятся агрегированные показатели «sar ‑u 1 5», в третьей – команду «netstat». по контроллерам. Конкретные цифры, конечно же, строго $ /usr/sbin/spray datatarget -c 100000000 индивидуальны, но если объёмы (kr/s, kw/s) или время опе… рации ввода-вывода (asvc_t/actv) значительно выше обычВывод команды sar при работе приложения, нагружаюного, это говорит о повышенной нагрузке на систему дискового ввода-вывода. Ещё один важный параметр %b – сте- щего сеть: пень загруженности диска (в процентах от времени интер$ sar -u 1 5 вала измерения). Часто он даже важнее, чем значения объёмов передаваемых данных kr/s и kw/s, поскольку дисковые операции могут отличаться по размеру фрагмента (большие и маленькие), кратности (кратные размеру блока и произвольной величины) и способу доступа (с последовательным и произвольным доступом). В отдельной сессии рассмотрим, как работает во время теста процессор системы. Запустим команду «sar -u 1 5». Мы можем наблюдать поВывод команды netstat – количество пакетов, передавышенное значение в колонках %sys и %wio, которое служит одним из признаков присутствия нагрузки ввода-вы- ваемых по сети: вода и иллюстрирует возможную погрешность, которая мо$ netstat -I ce0 1 жет возникнуть, если мы начнём анализ нагрузки с наблюдения за процессором. Вывод команды sar во время операций ввода-вывода: $ sar -u 1 5
Команда netstat показывает количество пакетов, принимаемых и передаваемых сетевым интерфейсом. По результатам вывода команды «sar -u» мы видим, что при данном тесте создаётся нагрузка на процессор (колонки %usr и %sys).
50
администрирование Современные Ethernet-адаптеры подключаются к коммутаторам в режиме full-duplex, по этой причине возникновение ошибок и коллизий маловероятно и является не столько индикатором избыточной нагрузки на сеть, сколько показателем аппаратных проблем. Поэтому более интересен объём трафика в килобайтах в секунду. Можно воспользоваться утилитой ifstat [4]. Вывод команды ifstat – количество килобайт, передаваемых по сети: $ ifstat -t 1
Если сетевая подсистема не является «бутылочным горлышком», перейдём к проверке загрузки процессора.
Еще одним интересным показателем в листинге вывода команды vmstat является первая колонка – r под заголовком procs, которая показывает количество процессов, готовых к выполнению и ожидающих, когда для них освободится процессор. Если при значении idl=0 это число значительно больше, чем число процессоров, то это говорит о нехватке ресурсов процессора, особенно если очередь ещё и растёт. Если в системе несколько процесоров, посмотреть нагрузку по процессорам поможет команда mpstat, посмотрим некоторую произвольную нагрузку: $ mpstat 1
Мониторинг загрузки процессора Мониторинг центрального процессора является последним этапом. Запустим какое-нибудь «CPU-bound»-приложение и команду «sar -u 1 5». Вывод команды sar при работе приложения, нагружающего процессор: $ sar -u 1 5
Колонки %usr и %sys показывают в сумме процент времени, в течение которого процессор был занят. Колонки %wio и %idle показывают в сумме процент времени, в течение которого процессор простаивал. Часто ошибочно к суммарной загрузке процессора прибавляют %wio, это неправильно. В случае большого процента %wio при запуске ресурсоёмкого приложения с точки зрения процессора эти такты будут отдаваться ему. Рассмотрим случай, когда присутствуют два вида нагрузки: на диск и на процессор. Воспользуемся командой vmstat, приложение использует диск и процессор:
Значение %ildle во всех приведенных листингах говорит только о том, что процессоры системы простаивают. А вот значение этого параметра близкое к нулю – не обязательно катастрофа. Возможно, ваш сервер – это файловый сервер, и, несмотря на то что значение %wio большое, вы довольны скоростью файловых операций, или ваше приложение, послав запрос по сети, находится в состоянии бесконечного цикла ожидания ответа удалённой системы, и вас это устраивает. Желательно иметь некоторый запас (но и не слишком избыточный), например 20%, на случай пиковых нагрузок. Теперь найдём самые затратные с точки зрения процессора приложения. Сделать это можно командой prstat, посмотрим сортировку по времени CPU: $ prstat
$ vmstat 1
Последние три колонки показывают нагрузку на процессор usr, sys, idl (%wio + %idle). Вот что показывает одновременно запущенная команда «sar -u», нагрузка на диск и процессор: $ sar –u 1 5
№2, февраль 2007
В команде prstat существуют также опции «-v» или «‑m» для более подробного вывода (см. рис. 1). Можно, конечно, воспользоваться и стандартной командой ps (SunOS/BSD compatibility command): $ /usr/ucb/ps -aux|head -5
51
администрирование
Сделаем работу удобнее Чтобы не набирать слишком большое количество команд, воспользуемся некоторыми свободно распространяемыми утилитами. Вместо команды prstat можно запустить команду top [5]. Использование top позволяет на одном экране видеть как общую загрузку процессора %usr, %sys, %wio, %idle, так и периодически обновляющийся список процессов, отсортированных по различным критериям, например, по нагрузке на процессор. Если имеется Х-сервер, можно воспользоваться утилитой xcpustate [6], которая отображает информацию по загрузке процессора и дисковых накопителей. # !/bin/sh if [ -z "$DISPLAY" ] then who_host=`who am i |awk ' { print $6 }' | sed 's/[(|)]//g'` DISPLAY=$who_host:0.0 ;export DISPLAY fi /usr/local/bin/xcpustate -wait -disk ↵ -display $DISPLAY -geometry 200x760
Вывод этих команд приведен на рис. 2. Дополнительные сведения о системе Solaris вы можете найти на сайте [2], кроме того, в разделе сайта «Download» вы найдёте много полезных программ, которые помогут получить более подробную информацию о процессах, которые происходят в системе, и позволят детальнее определить источник проблем.
Автоматизируем процесс Наконец, чтобы осуществлять постоянный мониторинг, воспользуемся помощью скриптов sa1 и sa2 из пакета «system activity report package», которые предназначены для запуска в качестве заданий для демона cron.
Рисунок 1. Команда prstat, детальный вывод
Внесём сбор статистики в таблицу crontab. $ su – sys $ EDITOR=vi;export EDITOR $ crontab –e #ident "@(#)sys 1.5 92/07/14 SMI" # # The sys crontab should be used to do # collection. See cron and performance # for details on startup. # # 0 * * * 0-6 /usr/lib/sa/sa1 # 20,40 8-17 * * 1-5 /usr/lib/sa/sa1 # 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00
/* SVr4.0 1.2
*/
performance manual pages
-e 18:01 -i 1200 –A
Раскомментируйте и при необходимости отредактируйте две последние строки. Например: «Собирать статистику круглосуточно с интервалом в 20 минут и формировать текстовый отчёт перед полуночью». 0,20,40 * * * * /usr/lib/sa/sa1 55 23 * * * /usr/lib/sa/sa2 -s 00:00 -e 23:59 -i 1200 –A
Эти скрипты создают двоичные файлы статистики и текстовые файлы отчётов, которые хранятся в каталоге /var/adm/sa в течение недели (по умолчанию). В дальнейшем их можно будет использовать для поиска периодов максимальной и минимальной загрузки и как отправную точку для более подробного анализа.
Рисунок 2. Рабочий стол CDE, команды top и xcpustate
52
1. ht tp://w w w.sun.com/blueprints/0 602 / 816-7191-10.pdf – Configuring and Tuning Databases on the Solaris Platform, by Allan N. Packer, (c) 2002. 2. http://www.solarisinternals.com/si/index. php – Solaris Internals by Jim Mauro, Richard McDougall and Brendan Gregg. 3. www.iozone.org – утилита iozone. 4. http://gael.roualland.free.fr/ifstat – утилита ifstat. 5. http://www.unixtop.org/index.shtml – утилита top. 6. http://www.cs.toronto.edu/~jdd – утилита xcpustate.
администрирование
Нововведения в Solaris 10: на что обратить внимание админу?
Алексей Коробкин Современная версия ОС Solaris 10 содержит в себе большое количество нововведений и уникальных технологий, что даже бывалые администраторы не успевают уследить за всеми появившимися возможностями.
П
олный список нововведений вы можете посмотреть по ссылке [4], а я попытаюсь наглядно показать основные преимущества Solaris нового поколения.
54
Зоны Классическое IT-правило «один сервис – один сервер» практически никогда не удается реализовать из‑за нехватки средств и ресурсов. «Железо»
слишком дорогое, поддержка множества серверов тоже недешевая, да и чересчур много систем приходится администрировать сразу – невозможно уследить ни за обновлени-
администрирование ями, ни за пользователями. Стоимость IT-инфраструктуры Попробуем самостоятельно создать такую конфигус каждым новым сервером возрастает в геометрической рацию: прогрессии. Чтобы всё-таки приблизиться к идеалу и уп# zonecfg -z web ростить работу администраторов, в Solaris была реализована концепция контейнеров (containers), иначе называеweb: No such zone configured Use 'create' to begin configuring a new zone. мых зонами (zones). Зона похожа на Jail во FreeBSD, но имеет больше стеzonecfg:web> create zonecfg:web> set zonepath=/z/web пеней свободы. Приложения, помещенные в различные зоzonecfg:web> set autoboot=true ны, полностью изолированы друг от друга и практически zonecfg:web> add net zonecfg:web:net> set physical=pcn0 независимы от аппаратного обеспечения. У каждой зоны zonecfg:web:net> set address=10.0.0.101 может быть свой набор установленных программ, свои сеzonecfg:web:net> end zonecfg:web> exit тевые адреса, свои объекты файловой системы, свой список пользователей, и в том числе свой суперпользователь – root. Ядро системы – единственное, что есть неизменно По шагам: мы создали зону, путь к её файлам указали общего у всех установленных зон. Таким образом, каж- как /z/web, включили автозагрузку зоны при старте серведая зона работает как независимая операционная систе- ра и назначили ей IP-адрес 10.0.0.101. Этот IP-адрес в дальма, что дает нам возможность просто и безопасно созда- нейшем автоматически появится как дополнительный логивать виртуальные серверы, помещая приложения в соот- ческий интерфейс физического сетевого интерфейса pcn0, ветствующие зоны. нам ничего настраивать не надо. Есть много способов практического применения зон. Посмотрим весь список настроек зоны: Можно использовать зоны для изоляции приложений, риск # zonecfg -z web info атаки которых достаточно велик – в таком случае взломщик будет ограничен пределами зоны и не сможет нанести больzonepath: /z/web autoboot: true шого вреда. Или, к примеру, если вы поддерживаете серьpool: езный веб-сервер, над различными сайтами которого труinherit-pkg-dir: dir: /lib дятся разные группы дизайнеров, вы можете каждой групinherit-pkg-dir: пе предоставить свою среду, свои приложения и даже дать dir: /platform им полный контроль над локальным веб-сервером или саinherit-pkg-dir: dir: /sbin мой зоной. Если же с вашим сервером работают програмinherit-pkg-dir: мисты, то можно сгенерировать зону, максимально подобdir: /usr net: ную production-окружению, и дать им возможность как слеaddress: 10.0.0.101 дует протестировать свои приложения. Некоторые веб-адphysical: pcn0 министраторы в зону помещают honeypot-ловушки и контролируют их активность снаружи – зона изнутри не может Кроме той информации, что мы ввели вручную, в эксузнать, кто и как за ней наблюдает. порте настроек присутствуют блоки: Хорошее решениее – разнести основные службы серinherit-pkg-dir: вера по различным зонам. Можно будет перезагружать зоdir: /путь/к/каталогу ны сервера по отдельности, не мешая остальным приложениям, и обеспечить их раздельное резервное копирова- Так обозначается подключение каталогов /lib, /platform, /sbin, ние – в таком случае вы сможете быстро восстановить зо- /usr глобальной зоны внутрь локальной – они будут подмонну на ближайшем доступном сервере, если основной вый- тированы при помощи loopback file system только для чтения. дет из строя. Кроме того, упрощаются миграция и обновле- Благодаря этому большинство системных файлов не потние приложений в зонах. Кластерный комплекс Sun Cluster, ребуется устанавливать еще раз, так что установка зоны доступный бесплатно на sun.com, позволяет организовать не займёт много места. и зоны высокой доступности – резервная зона подниметПри желании мы можем отказаться от этих каталогов, ся мгновенно (загрузка зоны занимает секунды), если про- примонтировать другие или не монтировать вообще ничеизойдёт сбой основной зоны. Впрочем, благодаря просто- го. Тогда файловая структура локальной зоны будет полте настройки такую отказоустойчивость можно реализо- ностью отличаться от глобальной. Кроме того, мы можем вать и самостоятельно с помощью скриптов. Давайте луч- примонтировать какую-то файловую систему в режиме ше поближе взглянем на сами зоны. записи и обращаться к ней из других зон в режиме чтеРассмотрим простую схему: операционная система ния. Это поможет организовать, например, обмен данныплюс одна зона. Считается, что сама операционная систе- ми между зонами, но мы рискуем ухудшить безопасность ма тоже находится в зоне, и эта зона называется глобаль- системы. По умолчанию между зонами нет никаких свяной (global zone). Все остальные зоны назовем локальны- зей, кроме возможности связаться по сети. Глобальная ми, хотя в английской терминологии они называются «не- зона, как исключение, может обращаться ко всем файлоглобальные» (non-global). вым системам всех зон, что позволяет незаметно провоПусть наша глобальная зона имеет адрес 10.0.0.1. Внут- дить аудит файлов локальных зон, выполнять резервное ри у неё находится локальная зона «web» с веб-сервером копирование, использовать системы обнаружения вторвнутри и адресом 10.0.0.101. жения (IDS), и многое другое.
№2, февраль 2007
55
администрирование Посмотрим, в каком состоянии наша зона. # zoneadm list -cv ID NAME 0 global - web
STATUS running configured
PATH / /z/web
Зона «сконфигурирована», но операционная система туда не установлена. Выполним установку: # zoneadm -z web install /z/web must not be group readable. /z/web must not be group executable. /z/web must not be world readable. /z/web must not be world executable. could not verify zonepath /z/web because of the above errors. zoneadm: zone web failed to verify
Ошибка. По требованию Solaris, путь к корню зоны должен иметь атрибуты доступа 0700 и владельца root. Исправим ошибку и продолжим:
Preparing to install zone <web>. Creating list of files to copy from the global zone. Copying <2422> files to the zone. Initializing zone product registry. Determining zone package initialization order. Preparing to initialize <974> packages on the zone. Initializing package <185> of <974>: percent complete: 18% ...
Solaris начинает копировать файлы внутрь зоны. Он инсталлирует все пакеты, которые установлены в глобальной зоне, и настраивает конфигурационные файлы в каталоге /etc локальной зоны. Локальная зона никак не привязана к настройкам глобальной зоны, в том числе к сервису разрешения имен, поэтому она может иметь совершенно произвольную конфигурацию. Например, глобальная зона может пользоваться DNS и хранить пользователей в /etc/passwd, а локальная – обращаться только в LDAP или NIS+ за пользователями и именами компьютеров. Тем временем копирование и установка пакетов закончились. Initialized <974> packages on zone. Zone <web> is initialized. The file </z/web/root/var/sadm/system/logs/install_log> contains a log of the zone installation.
На самом деле копировались только вспомогательные файлы в каталоги /etc и /var. Дерево каталогов /usr, как мы знаем, подключено из глобальной зоны, и ничего туда копировать не надо. Так мы, во-первых, экономим место, а вовторых, при установке обновлений к пакетам ОС мы обновляем все зоны сразу. Посмотрим состояние зоны: # zoneadm list -cv STATUS running installed
PATH / /z/web
Теперь зона в состоянии installed. Попробуем её запустить:
56
Если ошибок нет, то зона запустится. Посмотрим состояние: # zoneadm list -cv ID NAME 0 global 1 web
STATUS running running
PATH / /z/web
Запустилась? Попингуем: # ping 10.0.0.101 10.0.0.101 is alive
Попробуем зайти на её консоль (для выхода из консоли нажмите тильду и точку (~.)): # zlogin web [Connected to zone 'web' pts/2] Sun Microsystems Inc. SunOS 5.10
inherit-pkg-dir: dir: /путь/к/каталогу
ID NAME 0 global - web
# zoneadm -z web boot
Generic January 2005
Мы сейчас в зоне web. Посмотрим: # zonename web
# uname -a SunOS web 5.10 Generic_118855-33 i86pc i386 i86pc
# psrinfo -v Status of virtual processor 0 as of: 12/26/2006 on-line since 12/26/2006 05:53:50. The i386 processor operates at 3000 MHz, and has an i387 compatible floating point Status of virtual processor 1 as of: 12/26/2006 on-line since 12/26/2006 05:53:57. The i386 processor operates at 3000 MHz, and has an i387 compatible floating point
22:39:19 processor. 22:39:19 processor.
Изучим список процессов зоны: # ps -e -o user,pid,ppid,time,fname UID PID PPID root 4122 4122 root 4135 4122 root 4133 4122 root 4774 4122 root 4137 4122 root 4779 4774 daemon 4564 4122 root 4565 4122 root 4691 4686 root 4582 4122 root 4685 4122 root 4720 4691
TIME 0:00 0:26 0:01 0:00 2:01 0:00 0:00 0:00 0:00 0:02 0:00 0:00
CMD zsched svc.startd init sh svc.configd ps kcfd nscd sysidnet snmpd cron sysidnet
Интересно, что родительским у большинства процессов является процесс zsched c PID=4122, а PID процесса init вовсе не равен 1. Это значит, что зона действительно запущена, и мы находимся в её изолированной виртуальной среде. Ура, вот настоящее сисадминское удовольствие: родился новый сервер, пусть даже виртуальный. Посчитайте-ка, нам на это потребовалось меньше десяти команд, включая
администрирование настройку зоны в zonecfg. А чем меньше команд, тем меньВернемся к Apache и разрешим ему работать. Снаше вероятность ошибиться. чала дадим ему какой-нибудь файл конфигурации, а поПосмотрим, какие файловые системы у нас подклю- том включим службу. Название службы, кстати, можно указывать и целиком, как svc:/network/http:apache2, чены: и частями. # df -n
/ /dev /lib /platform /sbin /usr /proc ...
: : : : : : :
zfs lofs lofs lofs lofs lofs proc
Про удивительную новую файловую систему ZFS я расскажу в следующей статье, а пока обратите внимание на файловые системы, которые значатся как lofs. Это файловые системы глобальной зоны, доступные только для чтения. # touch /usr/test touch: /usr/test cannot create
# mount | grep /usr /usr on /usr read only/setuid/nodevices/nosub/dev=840000
Как видим, достаточно безопасная конфигурация. Давайте попробуем запустить веб-сервер Apache внутри зоны. Я пропущу настройки сетевого интерфейса и DNS – здесь всё делается так же, как если бы это был свежеустановленный Solaris. # svcs http STATE disabled
STIME FMRI 22:38:28 svc:/network/http:apache2
SMF и частичные привилегии Команда, которую мы сейчас выполнили, – еще одно новшество Solaris. Все службы, которые запускаются в системе и призваны работать постоянно, теперь управляются при помощи Service Management Facility (SMF). SMF позволяет указывать зависимости между службами, ускорять загрузку системы за счёт параллельного запуска независимых друг от друга служб, автоматически перезапускать службы в процессе работы сервера вместе с зависимостями и сильно упрощает управление службами с точки зрения администратора. Например, мы хотим узнать, все ли службы нормально запустились после старта сервера. Смотрим: # svcs -xv svc:/application/print/server:default (LP print server) State: disabled since Tue Dec 26 16:55:08 2006 Reason: Disabled by an administrator. See: http://sun.com/msg/SMF-8000-05 See: man -M /usr/share/man -s 1M lpsched Impact: 2 dependent services are not running: svc:/application/print/rfc1179:default svc:/application/print/ipp-listener:default
Мы видим, что принт-сервер не запустился, и из-за этого не запустились подсистемы печати BSD и IPP.
№2, февраль 2007
# cp /etc/apache2/httpd.conf-example ↵ /etc/apache2/httpd.conf # svcadm enable http
Нет необходимости перебирать ссылки в /etc/rc?.d, как это приходилось делать раньше – сервис просто запустился и работает. И будет впредь запускаться автоматически при загрузке зоны. # pgrep -fl http 7797 7801 7799 7800 7795 7798
/usr/apache2/bin/httpd /usr/apache2/bin/httpd /usr/apache2/bin/httpd /usr/apache2/bin/httpd /usr/apache2/bin/httpd /usr/apache2/bin/httpd
-k -k -k -k -k -k
start start start start start start
А теперь посмотрим сразу две интересные особенности SMF и нового Solaris. Как известно, Apache стартует обычно с правами root, открывает порт 80 и потом свои дочерние процессы запускает с правами непривилегированного пользователя (webservd в Solaris). Опираясь на принцип «defence in depth», мы можем дополнительно защитить систему, изначально запуская Apache с правами webservd. Возникает вопрос: как же он откроет привилегированный порт 80? Фокус в том, что в новом Solaris права root – не цельное понятие. По традиции, если в UNIX нужно выполнить привилегированную команду, ядро проверяет, равняется ли uid пользователя нулю. То есть имеет ли он права root. В Solaris эта идея изменилась, когда потребовалось более глубоко реализовать систему ролей и профилей. Привилегии root разбиты на несколько десятков базовых прав, которые можно предоставлять раздельно. То есть мы можем дать пользователю или процессу право открывать привилегированный порт, не давая ему при этом все права root. Или, скажем, мы можем дать право управлять службами. Права root растащили по частям – в релизе Solaris 10 6/06 таких базовых привилегий было 48, в ноябрьском 11/06 их уже больше шестидесяти. Удобство состоит в том, что мы можем указать нужные привилегии в описании службы в SMF. Если перед включением веб-сервера Apache настроить его SMF-манифест так, чтобы там было указано базовое право net_privaddr, Apache сможет самостоятельно открыть 80-й порт, не имея других суперпользовательских привилегий. Как это сделать, подробно описано в BluePrints, [1]. Вот, например, уже настроенный Apache с ограниченными привилегиями. Посмотрим базовые права процесса: # ppriv -S `pgrep -o http` 27400: /usr/apache2/bin/httpd -k start flags = <none> E: net_privaddr,proc_exec,proc_fork
57
администрирование I: net_privaddr,proc_exec,proc_fork P: net_privaddr,proc_exec,proc_fork L: zone
Буква E отображает список действующих (effective) базовых прав процесса. Кроме права net_privaddr, нужного для открытия порта, у сервера есть права запускать другие процессы и потоки. Такие права, кстати, целесообразно отбирать у процессов, которые рискуют быть взломанными, чтобы злоумышленник не смог ничего лишнего запустить. Итого, мы не только изолировали приложение, мы ещё и защитили его дополнительно. Посмотрим теперь на производительность. Как узнать, насколько наша зона нагружает сервер? Команда prstat с новым ключом -Z покажет, кроме обычного списка процессов, табличку активности зон: ZONEID 0 4 2 1 3
NPROC 44 42 23 24 24
SIZE 322M 317M 237M 318M 84M
RSS MEMORY 178M 37% 154M 32% 157M 15% 156M 15% 53M 5.2%
TIME 0:10:32 0:08:34 0:28:34 0:23:12 0:05:43
CPU 0.5% 0.5% 0.0% 0.0% 0.0%
ZONE global web jabber mysql dspam
Предположим, что у нас есть нестабильное приложение на отдельном сервере, которое иногда начинает загружать CPU на все 100%. Неужели мы просто перенесем это приложение в зону и дадим ему время от времени валить наш сервер своей неконтролируемой активностью? А вот и нет. Кроме обычного распределения ресурсов по проектам, которое всегда было в Solaris, теперь есть дополнительные средства ограничения и резервации ресурсов специально для зон. Например, можно выделить зоне только несколько процессоров системы. Если, скажем, у вас сервер T2000 с 32-разрядными ядрами и вы хотите запустить шесть активных приложений в шести зонах, то целесообразно выделить им по 4 ядра на зону и оставить 8 ядер основной системе. Как можно эффективно распределять ресурсы, посмотрите на BigAdmin, [2], или в BluePrints, [3]. Если у вас не так много свободы в манипулировании ресурсами, то при консолидации серверов и переносе приложений в зоны важно заранее представлять себе планируемую нагрузку и не помещать на один сервер два приложения, требовательные к одному и тому же ресурсу. Желательно брать такие пары, в которых, например, одно приложение активно использует CPU и не использует ввод-вывод, а второе – наоборот. Тогда выигрыш в производительности и стоимости будет существенно больше.
IP Multipathing Хорошо, скажете вы, вот мои сервисы теперь собраны в зоны, защищены, наделены нужными ресурсами. И что же, теперь у меня образовалась единая точка отказа – сетевое подключение? Действительно, это важная проблема. К счастью, в современных серверах редко бывает всего один сетевой интерфейс. Если у вас их несколько, вы можете воспользоваться еще одной особенностью Solaris – IP Multipathing (IPMP). IPMP появился еще в 8-й версии, к 10‑й его возможности сильно возросли, но тем не менее я не видел, чтобы его активно использовали.
58
Если у нас есть несколько сетевых интерфейсов, подключенных к одной сети, мы можем объединить их в группу и указать, что каждый является резервным для остальных. Таким образом, если Solaris определяет отказ одного из сетевых соединений, он переносит все адреса с интерфейса, на котором определен отказ, на другой интерфейс группы. При этом установленные сетевые подключения от клиентов сервера тоже переносятся, то есть Solaris пытается их сохранить. Как это работает? Через определенные промежутки времени каждый интерфейс рассылает мультикастовые запросы, проверяя, работает ли сетевое подключение. Подразумевается, что в одной с сервером сети есть еще ктонибудь, кто на эти запросы ответит. Если на одном из интерфейсов ответов нет уже 10 секунд (значение по умолчанию для IPMP), сервер создает логические интерфейсы с адресами отказавшего интерфейса на работающем интерфейсе. Если отключившийся интерфейс оживает, сервер через 10 секунд переносит адреса обратно. При планировании включения новых зон принимайте во внимание нагрузку на сетевые интерфейсы и распределяйте трафик между ними. Кроме того, поскольку в современном Solaris TCP/IP-стек был полностью переписан, теперь низкоуровневая обработка сетевой нагрузки – прерываний от сетевой карты в том числе – распределяется между всеми процессорами, а не отдается нулевому процессору, как это сделано в большинстве ОС. Если ваш сервер обрабатывает огромное количество пакетов в секунду, имеет смысл изменить это поведение. Например, можно убрать обработку прерываний с первых пяти процессоров: # psradm -i 0 1 2 3 4
Теперь эти процессоры заняты только исполнением приложений.
Заключение Мы вкратце посмотрели на зоны, привилегии процессов и управление службами. За кадром остались файловая система ZFS, DTrace, средства автоматического поиска ошибок и самовосстановления ОС, BrandZ – технология запуска приложений Linux в зонах, и многое другое [4]. Если вы еще не пробовали установить Solaris 10, то обязательно попробуйте. Solaris, как и большинство продуктов Sun, теперь можно скачать бесплатно с sun.com и использовать даже для коммерческих целей. А на opensolaris.ru вы всегда найдете поддержку со стороны российского общества пользователей Solaris. 1. BluePrints, Limiting Service Privileges in the Solaris 10 Operating System – http://www.sun.com/blueprints/0505/819-2680.pdf. 2. BigAdmin, Solaris Containers: Consolidating Servers and Applications – http://www.sun.com/software/solaris/howtoguides/ containersLowRes.jsp. 3. BluePrints, Application And Database Server Consolidation On Sun Fire X4600 Server Solaris Containers – http://www.sun.com/ blueprints/1006/820-0040.pdf. 4. Sun.com, What’s new in Solaris 10 – http://www.sun.com/software/ solaris/whats_new.jsp.
администрирование
Обзор серверного дистрибутива tinysofa
Сергей Яремчук Установить и настроить надежную, всесторонне защищенную систему на сервер не такая уж и легкая задача. Упростить ее можно, только правильно подобрав дистрибутив и компоненты будущей системы.
Дистрибутив tinysofa Основой первых версий этого дисЦ е л ь а в с т р а л и й с к о г о п р о е к т а трибутива служил коммерческий дисtinysofa (http://www.tinysofa.org) – со- трибутив Trustix Secure Linux, котоздание быстрой, надежной, стабиль- рый, в свою очередь, базировался ной и безопасной операционной систе- на Red Hat. В середине октября вымы, которую можно применять на сер- шел релиз tinysofa classic server 2.0 верах уровня предприятия, которая ос- Update 6 (Ceara), о котором и будет тавалась бы в течение своего жизнен- идти речь далее. Второй релиз также ного цикла свободной (As in beer). При- основан на Trustix 2.1 и Fedora Core. чем цели проекта, можно сказать, гло- В частности, набор пакетов аналогибальные – стать де-факто серверным чен Trustix. Хотя есть и изменения, так дистрибутивом Linux, заполнив нишу как некоторые идеи взяты с дистрисвободных решений, предназначен- бутивов SUSE и Conectiva. Дистрибуных для этой цели. тив полностью совместим с Red Hat 60
Enterprise Linux (включая ядро и рабочее пространство), поэтому при отсутствии в репозитарии tinysofa необходимых пакетов их всегда можно будет взять с RHEL. Проблем с их установкой не будет. Все пакеты, входящие в состав дистрибутива, собраны с i586 оптимизацией, доступна и x86_64-версия. Для работы с пакетами используется APT, с помощью которого можно легко и просто устанавливать приложения и исправления в безопасности. Начиная со второй версии в дистрибутиве дополнительно к APT для ра-
администрирование боты с пакетами также используется циальные группы выпускают критические и SmartPM. Вокруг дистрибутива об- Преимущества и недостатки обновления, упрощая поддержку систеразовалось большое комьюнити, чле- в использовании «обычного» мы в самом актуальном состоянии. Неконы которого составляют группу под- дистрибутива для сервера держки пользователей tinysofa и дист- Первый вариант, который приходит в го- торые коммерческие приложения доступлову при попытке выбрать систему для ус- ны в скомпилированном виде, для наиборибьюторов пакетов. Безопасность является для tinysofa тановки на сервер, – использовать обыч- лее популярных дистрибутивов. В то же время есть и минусы. Дистриприоритетом номер один. Перед выхо- ный дистрибутив вроде ALTLinux, ASP Linux, дом дистрибутив тщательно тестирует- SUSE или что-то из RedHat/Fedora, в ко- бутивы широкого применения собираются на огромном количестве критичес- тором оставить только самые необходи- ся не с самыми оптимальными для сервера параметрами. И, как правило, после уских задач. В конфигурации по умолча- мые пакеты. Преимущества: использование одного тановки, даже в самой минимальной коннию стартует всего один сетевой сервис – Postfix, привязанный к интерфей- дистрибутива для сервера и клиентов зна- фигурации, содержат большое количество су 127.0.0.1. Решение о запуске осталь- чительно упрощает поддержку. В репози- лишних пакетов. Кроме того, в таких дисных администратор принимает само- тариях многих популярных решений можно трибутивах установленные сервисы старстоятельно после их настройки, на- найти готовые пакеты на все случаи жиз- туют сразу же после инсталляции, с парачальные значения в конфигурацион- ни, которые легко устанавливаются. Спе- метрами по умолчанию. ных файлах этих сервисов также выПо умолчанию устанавливаетбраны с учетом максимальной защи- ря на то, что на сайте DistroWatch.com в списке поддерживаемых файло- ся и драйвер экспорта блочных устщенности. В текущем релизе использова- вых систем были указаны только ext2 ройств DRBD 0.7.14. И пакет UCARP 1.1 но ядро 2.6.16 с поддержкой SELinux и ext3, при форматировании можно (Common Address Redundancy Protocol), и grsecurity, переработанная PAM-ау- также указать ReiserFS, VFAT, а также использование которого позволяет ортентификация, допускающая настрой- Soft-RAID. Путаница может возникнуть ганизовать совместное использоваку контроля доступа в рамках всей только при указании размера разде- ние IP между несколькими серверасистемы. В компиляторе gcc 3.4.3 ис- ла. Доступны три варианта: Fixed size, ми в локальной сети, что может припользована система защиты от «сры- Fill maximum size on MB и Fill all aval годиться для балансировки нагрузки (IP одновременно используют все ва» стека («stack smashing»), разрабо- table space. После создания и форматирова- сервера) или для создания отказоустанная в корпорации IBM. ния разделов – установка загрузчика тойчивых систем. на выбор – GRUB или LILO. Есть и wireless-tools, Squid, базы Установка сервера Этап настройки сети стандартен. данных MySQL 4.1.21 и PostgreSQL tinysofa Дистрибутив прост в установке. Если Выбираем сетевой интерфейс, указы- 7.4.13. Для настройки PPPoE-соедивы сталкивались с ранними версиями ваем IP-адрес, сетевую маску, адреса нения в комплект включен RP-PPPoE, Red Hat или Trustix, то не найдете ниче- DNS-серверов и автоматическую ак- с помощью которого это можно проделать за пару минут. Достаточно ввесго нового. Образ диска, который мож- тивацию при загрузке. Далее – настройка под держи- ти adsl-setup (в новых версиях пакено получить на сайте проекта, по разваемых вариантов ау тентифика- та pppoe-setup) и ответить на все вопмеру небольшой – 350 Мб. Весь процесс установки прохо- ции. По умолчанию включены толь- росы. Всего в дистрибутиве доступно дит в псевдографической среде. Хотя ко Use Shadow Password и Enable MD5 604 пакета. Как говорилось, по умолчанию заздесь нет красоты, какой могут пох- password. Здесь же можно добавить вастаться современные дистрибути- поддержку NIS, LDAP и Kerberos, ак- пускается только один сервер Postfix, вы вроде SUSE и Mandriva, зато с фун- тивировав опцию и заполнив предла- после установки пакетов администратору предлагается активировать еще кциональностью все в порядке. Интер- гаемые параметры. В небольшом по размеру дистри- и сервер SSH. Все остальное доводитфейс англоязычный, других вариантов не предусмотрено. Пользователь, ус- бутиве выбирать пакеты легко, тем ся на уже рабочей системе. Без сомнения, дистрибутивы вротанавливающий tinysofa, будет после- более здесь нет групп и подгрупп, довательно проведен по всем этапам, в которых можно запутаться. Есть де tinysofa classic server ориентировазная необходимые параметры, преодо- несколько базовых групп пакетов, ны на опытных администраторов, копредлагаемые к установке серверы торые хотят полностью контролиролеть их можно будет минут за пять. Помимо CD-ROM поддерживает- (AppleTalk, IMAP Server (Cyrus, dovecot), вать процесс установки и настройки ся установка с раздела жесткого дис- OpenSSH, OpenLDAP, Apache, Samba, системных сервисов, знакомы с осока, NFS, FTP и HTTP. Можно прове- DHCP, vsftpd, tftp и другие) представ- бенностями работы входящих в его рить установочный диск на наличие лены отдельными позициями. Выбор состав приложений и имеющие некоDevelopers позволит включить весь торое время на его доводку. Но зато ошибок. На этапе создания разделов мож- представленный набор средств раз- в свои руки вы получите стабильную, но выбрать автоматическое разби- работки (PHP 5.0.4, Python 2.4.2, GCC безопасную и предсказуемую систему, ение диска, использовать Disk Druid 3.4.3, Ruby 1.8.2, subversion 1.1.3, nasm которую просто поддерживать в актуальном состоянии. или ручной (fdisk) вариант. Несмот- 0.98.39 и другие).
№2, февраль 2007
61
серверная
Как навести порядок в стойке
Даниил Никифоров Кто из вас, имеющих в распоряжении серверную, не сталкивался с проблемой «бороды» из проводов на лицевой стороне стойки? Раздражает, не даёт спокойно спать. Хочется навести порядок, чтобы не было ни одного лишнего проводочка. С чего начать? 62
серверная
П
оводом написания статьи стала долгая дискуссия о том, как же этот порядок навести. Не получив конкретных советов и не найдя ничего стоящего в Интернете, я пошёл в серверную и начал творить. Коротко обрисую проблему. Eсть стойка, в которой собрано активное оборудование и кроссовые блоки (далее всё будем называть блоками). Каждый блок имеет хотя бы один порт (за исключением системы охлаждения и т. п.) для соединения с другим блоком. Если у вас много блоков и у каждого много портов, то огромное количество соединительных проводов со временем закрывают всё в стойке, и уже непонятно, что с чем соединено. Для успешного решения этой проблемы необходимы две составляющие: n аккуратная укладка проводов; n документирование всех соединений (см. рис. 1).
Рисунок 1. Пример документирования имеющихся блоков и соединений
Начну с некоторых пояснений принятой у нас маркировки, которая идёт на рисунках. Приняты следующие типы соединений: n сетевые каналы – это для компьютеров; n телефоны – соответственно линии для телефонов; n внешние каналы – модемы, спутники и прочее оборудование за пределами стойки (кроме рабочих мест). Вся маркировка выполняется в пределах одной стойки. Не спорю, можно ввести единую нумерацию для всего кампуса, но обильное количество лишних символов в маркировке каждого порта вызывают сложности при дальнейшей работе. Все блоки в стойке помечены «KN», где N – порядковый номер блока, начиная сверху. В каждом блоке порты помечены цифрой по порядку. В результате каждый порт в стойке имеет номер вида «KN.M» (N – блок, M – порт). Так как порты телефонной станции разведены на панель в эту же стойку, то правила маркировки для телефонных линий те же. Внешние кана лы помечаются «ВN.M». Номера блока и порта такие,
№2, февраль 2007
Рисунок 2. Планирование «идеального» варианта
как и у порта, куда этот канал подходит. и буквы розетки на месте (1А – перА вот куда ведёт этот канал из стойки, вое место, первая розетка). Отмечу, записано на отдельном листе (на рис. 1 что здесь упрощённая маркировка, закладка «Внешние каналы»), состо- не включающая аббревиатур объекящем из двух колонок: номер порта та и номера этажа из плана розеток и куда ведёт. Кстати, благодаря этому в здании. и не требуются дополнительные уровТеперь о цветах. Принципиально ни в номерах. важно выделять разными цветами элеИсключение составляют магистра- менты таблицы, т.к. это позволяет одли, соединяющие стойки. Здесь номер ним взглядом оценить что где находитсостоит из номеров стоек, между кото- ся. Выбор цветов на ваше усмотрение. рыми она проброшена, и номера жилы Главное, чтобы вы и ваши коллеги не в этой магистрали. запутались. Маркировка рабочих мест состоВ нашем примере цвета следуюит из номера места по плану здания щие:
63
серверная Перекоммутация
Рисунок 3. Составляем план переключений
ный разъём (магистрали и рабочие n оранжевый – сетевые каналы; станции), то тремя строками (номер n бледно-зелёный – телефоны; n жёлтый – внешние каналы и ма- порта на панели, что подходит сзади, гистрали;
n бледно-жёлтый – номера портов (в пределах панели);
n белый – свободный порт. На рис. 1 показан пример документирования содержимого стойки. В начале указано наименование стойки. В зависимости от размера сети, можно указывать дополнительную градацию (страна, город, объект, комната). Затем идут блоки. Если это какое-то оборудование, то обозначается двумя строками (номер порта и что подключено). Если это коммутацион-
Рисунок 4. Как убирать небольшие излишки
64
что подключено). К примеру, второму порту на концентраторе К3 соответствует запись «К4.1». Это значит, что сюда подключен провод с первого порта панели «К4». Ниже идёт эта самая панель. Первому порту соответствуют две записи «1А» и «К3.2». Первая говорит о том, что сюда подведено рабочее место «1А» (так оно отмечено на плане здания). Вторая запись, как и на К3, говорит о том, где находится второй конец кроссового провода. Как видно, записи о кроссировании дублируются, будьте внимательны.
Сложность заключается в том, что хочется перекинуть провода как-то поудобнее, но всё снимать и потом заново подключать долго, тяжело, да и руководство такого простоя не потерпит. Чтобы этого избежать, нужно составить план перекоммутации. Смотрим рис. 2. Стоит задача сделать перекоммутацию К3, чтобы было наименьшее расстояние до подключенных портов на К4. Первым действием мы под К3 делаем ещё одну строчку, где расположим подключения в той последовательности, которая нам нужна (не объясняю, смотрите по номерам портов). Во время составления «идеального» варианта, помечайте в исходном виде те порты, которые вы уже перенесли на идеальный вариант. Не удаляйте их, а только смените цвет, т.к. они нам ещё понадобятся. В нашем случае мы меняли с оранжевого на бледно-жёлтый. Когда все порты станут бледно-жёлтыми, значит, их все перенесли. Теперь приступаем к составлению плана. Смотрите рис. 3. Начнём с того, что доводить до полного отсутствия свободных портов, не следует. В нашем случае их было целых 5. Итак, сверху – то, что есть, снизу – то, что нужно получить. Вопрос в том, в какой последовательности переключать? Для этого: 1. Берём порт, который исходно свободен, а потом занят. У нас это 7, 11, 17 и 21.
Рисунок 5. Получившийся шлейф размещайте между двумя блоками
серверная
Рисунок 6. Скрепляйте провода стяжками
2. Смотрим, откуда нужно произвести переключение на выбранный порт. У нас с 5-го. 3. Записываем в план переключение с пятого на седьмой. 4. Помечаем их цветом, это перемещение уже в плане.
Рисунок 7. Результаты работы
чено к неверному оборудованию в другой (к примеру, вы считаете, что у вас на магистрали уже висит сервер, а там по-прежнему коммутатор). n Своевременно вносите сделанные изменения в документацию. n Предупреждайте пользователей о возможных отключениях.
n Я предпочитаю важные провода (типа связи офисов) пускать за стойкой, дабы что-нибудь с ними случайно не сделать. К портам они выходят через зазоры. n Старайтесь равномерно распределять провода. n Часто от одной панели до другой идёт несколько проводов. Скрепляйте их стяжками, потом проще будет искать в большом вертикальном пучке (см. рис. 6). n К одному горизонтальному органайзеру провода могут тянуться с 4 сторон (лево-верх, левониз, право-верх, право-низ). Чтоб не было путаницы и переплетений в проводах на органайзере, кладите провода в одной последовательности этих сторон. То есть сначала все провода со стороны лево-верх, потом все от лево-низ и т. д. Провода одной стороны скрепляйте стяжками. Таким образом, потом легко можно будет понять, как протянуть провод по органайзеру (какие провода оставить впереди, какие сзади), и никакой паутины и распутывания впоследствии (см. рис. 7).
Далее повторяем эти действия для следующего порта. 5-й становится свободным, и на него можно перемес- Как избавиться тить следующее соединение. Смотрим от «бороды» вниз (К4.4), находим в исходном, запи- Итак, план есть. Теперь идём в серсываем, помечаем. И так далее, пока верную и начинаем наводить поряцепочка не прервётся пустым портом док. Во-первых, при монтаже оборув «идеальном» варианте. Тогда берём дования в стойку, нужно оставлять следующий пустой порт и опять про- просветы (1-2 болта сверху и снизу), делываем то же самое. В результате куда можно будет убрать небольшие все порты должны быть закрашены, излишки провода. Разводку сзади на а на листе по порядку записаны все не- коммутационные панели лучше заобходимые манипуляции. То же самое крыть крышкой, дабы потом случайпри перекоммутациях на нескольких но их не зацепить. Также хорошо бы панелях и нескольких шкафах. ставить органайзеры через каждые Обратите внимание! 2 блока. Всё это незначительно повn Не все порты равноценны (как в на- лияет на полезную площадь, но даст шем случае). Для этого как раз больше возможностей для манёвров и нужен первый шаг, чтобы точно с проводами. убедиться, что куда можно и нельзя Рекомендации на основные слуподключать. Не воткните случайно чаи: станцию в гигабитный канал, а сер- n Если провод чуть длиннее своего вер в мегабитный. пути или вы соединяете близко леТаким образом, мы навели поряn При перекоммутациях через магисжащие порты, то поместите коль- док, аккуратно уложили провода, и ратраль не забывайте отмечать соцо в зазор между панелями, концы ботать с ней теперь одно удовольсответствующие изменения в друснаружи скрепите стяжкой, чтобы твие. При этом, я думаю, мы сэконогой стойке и проверять в принципе потом не искать, где какой провод мили время (по сравнению с полным возможность этих изменений. входит и выходит. Как ни странно, отключением всех проводов), выполn Опять же при магистралях желапетли практически не цепляются няли работу планово в течение дня, а не в авральном режиме, и не вызвательно друг за другом сразу делать друг за друга (см. рис. 4). переключения в обеих стойках, да- n Если провод очень длинный, мотай- ли длительного отключения всего сегте кольцом и поместите на боковую мента, т.к. одновременно было отклюбы избежать того, что оборудование в одной стойке будет подклюсторону или за стойку (см. рис. 5). чено только одно соединение.
№2, февраль 2007
65
безопасность
Боремся с вирусами и спамом с помощью MPP
Сергей Яремчук Как с минимальными финансовыми и временными затратами настроить эффективную систему борьбы со спамом и вирусами, рассылаемыми посредством электронной почты? Попробуем решить эту проблему с Message Processing Platform (MPP) Free Edition.
В
Интернете сегодня можно найти много описаний построения систем защиты электронной почты, для реализации некоторых из них требуется определенный опыт. Администраторы, хорошо знающие Windows, не всегда в состоянии быстро разобраться со всеми особенностями UNIX. Проект MPP Free Edition [1] предлагает, можно сказать, идеальный инструмент, позволяющий быстро развернуть систему борьбы со спамом и вирусами, основанную на ClamAV и SpamAssassin, не уступающую по эффективности, например, таким решениям, как MailScanner
66
или Amavisd, но гораздо проще в настройке. При этом в MPP возможны установка максимального размера проверяемых сообщений, подпись проверенных писем, фильтрация вложений по расширению, обработка исключений и прочее. Сообщения, помещенные в карантин, могут храниться в текстовом виде либо в базе данных MySQL. Веб-интерфейс, реализованный с помощью модуля Webmin, обеспечивает настройку работы, контроль в реальном времени, управление карантином и спамом, внесение отправителей в черный и белый списки, просмотр журналов работы. Реше-
ние очень просто в установке, потребуется наличие в системе лишь нескольких основных компонентов: n операционная система – GNU/Linux приблизительно от RH 8.0 и выше, точно работает в Ubuntu 6.06 и Debian 3.0, FreeBSD от 4.8 и выше, 5.x (ветка 4 рекомендуемая), MacOS X от 10.2 и Solaris 8/9; n поч то вый с ер вер – Sendmail, Postfix, CommuniGate, QMail или SurgeMail; n SpamAssassin от 3.x и ClamAV 0.8 и выше; n опционально для настройки через веб-интерфейс – Webmin.
безопасность Фактически MPP Free Edition является первой версией решения MPP, которую компания решила раздавать всем бесплатно. Ходят слухи о возможном распространении под лицензией GNU GPL, но пока дальше разговоров дело не пошло. Поддержка реализована только посредством электронной почты, без гарантии того, что вам ответят. Коммерческая версия продукта MPP v3 обеспечивает на порядок большую функциональность. Здесь возможна совместная работа со многими коммерческими антивирусными и антиспам-решениями, фильтрацию вложений не только по расширению, но и по имени файла и содержимому, SNMP-мониторинг, усовершенствованный пользовательский интерфейс. Кроме того, для этой версии доступен интерфейс QReview 2.0, позволяющий просматривать и управлять спам-карантином, в версии Free спам-карантином может управлять только администратор. Поэтому Free Edition подойдет больше для небольших организаций. На сайте проекта сказано, что предыдущая GPL-версия QReview для загрузки не доступна, хотя файл [3] спокойно лежит на ftp-сервере. Сравнительная таблица продуктов приведена в [2].
Установка MPP Программа устанавливает все необходимые библиотеки ClamAV, сценарии конфигурации автоматически обновляют файлы сервера электронной почты. Поэтому установка MPP очень проста. Для загрузки доступно несколько файлов. Так как в качестве тестовой платформы использовался дистрибутив Ubuntu 6.06 LTS, поэтому для установки MPP был выбран архив mpp‑free‑1.2-113.Linux.i386.tar.gz. Распаковываем и запускаем скрипт ./instal.sh. Во время его работы возможны ошибки, по окончании дается рекомендация: Please run /usr/local/MPP/configure.pl to automatically configure mpp and your mail server.
Скрипт позволяет указать на используемый почтовый сервер, а также антивирусное и антиспам-приложения, которые будут использованы при обработке электронной почты. Естественно, все это должно быть уже установлено. $ sudo /usr/local/MPP/configure.pl
Выбираем почтовый сервер: Select mailserver 1) Sendmail 2) Postfix 3) CommuniGate 4) QMail 5) SurgeMail [default 1]: 2
Выбираем antivirus/antispam-движок, можно использовать несколько значений через пробел, демон clamd должен использовать стандартный порт 3310: Select antivirus / antispam engine. Could be one or multiple selections separated with blank Example: for clamav, spamassassin use: 1 3 1) clamav 2) clamd 3) spamassassin [default 1]: 2 3
№2, февраль 2007
[17:23:37] 6 [63168] [17:23:37] 8 [63168] MPP/mppd.conf [17:23:37] 8 [63168] cessful ALL DOMAINS [17:23:37] 8 [63168] [17:23:37] 8 [63168] [17:23:37] 6 [63168] [17:23:37] 6 [63168] 4289 ? Ss
[Daemon] Masking signals. [Config] Start loading config file /usr/local/ [Config:InitializeList] [Config] insert suc[Config:InitializeList] [debug] dump list [Config:InitializeList] ALL DOMAINS [Daemon] Changing user/group. [Daemon] Switching to daemon mode. 0:00 /usr/lib/postfix/master
Completed setup.
Вот, собственно, и все по установке MPP. В конфигурационном файле в /etc/postfix/main.cf почтового сервера Postfix появится следующая запись: # -- Added for MPP -content_filter = smtp:localhost:10025 # -- end --
Оригинальный файл будет сохранен в /etc/postfix/ main.cf.mbk. Аналогично и master.cf будет скопирован в master.cf.mbk, и в нем появятся следующие строки: # -- Added for MPP -localhost:10026 inet n - n - 10 smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o myhostname=localhost.domain.tld -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 # -- end --
Все рабочие файлы MPP будут помещены в /usr/local/MPP/, кроме того, в /etc/init.d/ появится скрипт, предназначенный для управления работой демона mppd: $ sudo /usr/local/MPP/configure.pl Starting MPP daemon: mppd.
Соответствующие ссылки для его автоматической загрузки будут помещены в каталоги /etc/rcХ.d. Все, MPP установлен и работает с настройками по умолчанию, и в принципе можно вообще ничего больше не трогать. В репозитарии Ubuntu нет пакета Webmin, поэтому его установку необходимо произвести вручную. Пакет, собранный для Debian, будет работать и в Ubuntu. $ wget –c http://switch.dl.sourceforge.net/sourceforge/ ↵ webadmin/webmin_1.310_all.deb
Устанавливаем пакеты, необходимые для удовлетворения зависимостей: $ sudo apt-get install libauthen-pam-perl ↵ libio-pty-perl libmd5-perl $ sudo dpkg -i /media/win_e/webmin_1.310_all.deb
По окончании процесса будет выдано следующее сообщение. Webmin install complete. You can now login to https://grinder:10000/ as root with your root password, or as any user who can use sudo to run commands as root.
67
безопасность Что свидетельствует о том, что Webmin уже настро- ся /usr/local/MPP/blacklist, просто снимаем комментарий ен и править конфигурационные файлы не придет- со строки и идем дальше. ся. Поэтому просто вызываем веб-браузер и набираем Аналогично параметр: https://имя_компьютера:10000/. donot_scan_users = /usr/local/MPP/donotscanlist Работа с Webmin описана в [4], поэтому подробно о нем говорить не будем. Для установки модуля MPP заходим в «Webmin позволяет занести в файл адреса пользователей, сообщеConfiguration» (настройка Webmin) и переходим в «Модули ния которых на вирусы проверяться не будут. По умолчанию Webmin». Модуль находится в архиве, хотя на сайте проек- параметр scan_domains установлен в all domains, что озната MPP может быть более свежий вариант: чает, что MPP будет проверять почту всех пользователей всех доменов. Домены можно конкретизировать, прописав $ wget -c ftp://ftp.messagepartners.com/pub/mpp/ ↵ их через запятую:
webmin/rae-mpp.wbm.gz
И указываем на него в «Установка модуля». В случае успеха в категории «Службы» (Service) появится новый пункт «RAE Internet MPP Panel». Здесь 6 вкладок: «Control», «Configure», «Templates», «Monitor», «Virus/Error Quarantine» и «Spam Quarantine». Дальнейшую настройку работы MPP можно производить, выбрав «Configure» либо напрямую редактируя конфигурационный файл /usr/local/ MPP/mppd.conf.
Конфигурационный файл mppd.conf Некоторые параметры удобнее редактировать все-таки через веб-интерфейс, выбирая одно из предложенных значений или занося их в соответствующие поля. Но все параметры трогать не будем, обратим внимание только на некоторые из них. Так, несмотря на присутствие слова virus в virus_scanner, сюда прописываем средство для борьбы с вирусами и спамом, указав одно или через через пробел несколько значений из clamav, clamd и spamassassin. В email_server должно стоять имя используемого почтового сервера. В моем случае это postfix, возможны варианты: sendmail, cgp, surgemail или qmail. В blacklist указываем имя файла, в который будет заноситься «черный» список адресатов по одному в строке, можно указывать домены. По умолчанию использует-
scan_domains = mycompany.com, test.com
Если нужно проверять почту конкретных пользователей указанных доменов, их можно занести в scan_users. Архивы во вложениях по умолчанию проверяются: scan_archives = yes
Что делать в случае обнаружения вируса или спама, определяется значением параметра on_infection, а в случае невозможности удаления вируса из вложения – on_disinfection_failure. Здесь могут быть использованы следующие варианты (они используются и в некоторых других параметрах): n quarantine – сообщение помещается в карантин без уведомления отправителя; n discard – сообщение удаляется также без уведомления; n reject – сообщение удаляется с отсылкой уведомления отправителю; n disinfect – производится попытка удалить вирус; n delete – зараженный файл удаляется и заменяется предупреждающим сообщением. Все сообщения, создаваемые при работе MPP, занесены в три шаблонных файла alert_template_ admin.txt, alert_template_reciver.txt и alert_sender_admin.txt, которые можно отредактировать как вручную, так и выбрав «Templates» в Webmin. Аналогично при включенном параметре add_signature = yes, после сканирования в файл добавляется сигнатура – signature_template.txt, а подключив параметр message_header и дополнительный заголовок в письмо, которые также можно изменить по своему усмотрению, показав, что администратор на месте и все контролирует. Зашифрованное сообщение по умолчанию проходит без проверки: on_encrypted_message = pass
Рисунок 1. Настройка MPP через Webmin
68
Хотя в этом случае разрешено ис-
безопасность пользование тех же значений, что и в on_infection. Максимально разрешенный размер вложений, которые будет проверять MPP на наличие вирусов, в установках по умолчанию равен 10 Мб. Изменить это значение можно в max_file_size, указав число в мегабайтах. Действие при превышении этого предела устанавливается в on_max_file_size_exceeded и может принимать значение pass (по умолчанию), quarantine или discard. Аналогично и max_recursion_level с on_max_recursion_level_exceeded отвечает за рекурсивную проверку вложений. Число 50, стоящее по умолчанию, мне кажется, несколько завышено. Как уже говорилось во введении, MPP может блокировать вложения с указанными расширениями. За это отвечает параметр block_extensions, в качестве значений которого через запятую прописываются все расширения файлов, которые администратор считает опасными. Реакция при обнаружении такого файла описана в block_extensions_action. Целый блок параметров alert_admin, alert_sender, alert_receiver определяет отсылку уведомлений соответствующим участникам пересылки. От имени кого отсылаются сообщения, указываем в alert_message_sender. Параметр quarantine_method определяет форму хранения файлов, содержащих вирусы или спам, в карантине. По умолчанию такие сообщения хранятся в текстовом файле: quarantine_method = file
Если планируется использование для этих целей MySQL, измените его на sql. Для создания необходимых баз в архиве имеется скрипт spam-mysql.sql. В этом случае активируйте и следующие параметры, установив необходимые значения: sql_type = mysql sql_database = spam sql_host = localhost sql_user = user sql_password = password
Далее в файле идут настройки проверки почты SpamAssassin: spam_filter = yes
Определяем реакцию при обнару-
№2, февраль 2007
Рисунок 2 Редактирование шаблона
жении спама: marksubject, markheader, forward, quarantine, discard: spam_action = marksubject
И конкретизируем значение поля тема: spam_marksubject = SPAM-%SUBJECT%
При необходимости можно указать адрес, на который будет пересылаться весь обнаруженный спам, который можно будет использовать, например, при обучении фильтров: spam_forwardaddr = ↵ %EMAILID%-spam@%DOMAIN%
Аналогично ситуации с вирусами, используя инструкцию spam_inbound_ whitelist и spam_outbound_whitelist, можно указать белый список адресатов, входящие или исходящие сообщения которых не будут проверяться на спам. Максимальный размер сообщений, проверяемых SpamAssassin, по умолчанию равен 32 Кб, изменить его можно в spam_max_scan_size. После изменений параметров перезапускаем демон mppd. Для проверки правильности настройки работы антивируса и антиспам-подсистем в архиве MPP имеются файлы gtubeeicar-test.msg и test.msg. Обновления ClamAV производятся стандартными методами, кроме того, в поставке MPP есть скрипт clamavupdate.sh,
с помощью которого новые базы берутся с сайта разработчика MPP (ftp:// ftp.raeinternet.com/pub/clamav), запуская его через cron (это можно настроить прямо из Webmin), так и вручную, воспользовавшись меню «Control» и нажав кнопку «Virus Update». Не смотря на то что написано много, MPP можно настроить за полчаса, естественно, при условии, что все остальные компоненты уже готовы к работе. После чего она исправно будет отсеивать вирусы и распознавать спам, защищая пользователей. Успехов. 1. Сайт проек та MPP Free Edition – http://messagepartners.com/products/ mpp_free_edition.html. 2. С р а в н и т е л ь н а я т а б л и ц а в е р сий Free Edition и MPP v3 – http:// messagepartners.com/products/ compare-mpp.php. 3. G P L в е р с и я Q R e v i e w – f t p : / / ftp.raeinternet.com/pub/mpp/ qreview-0.6.tar. 4. Яремчук С. Упрощаем себе жизнь с Webmin. //«Системный администратор», № 7, 2004 г. – C. 34-37. 5. Яремчук С. Roaring Penguin CanIt: ведём борьбу со спамом. //«Системный администратор», № 7, 2006 г. – C. 16‑22. 6. Яремчук С. Защищаем электронную почту средствами MailScanner. //«Системный администратор», № 12, 2005 г. – C. 45-51.
69
bugtraq Целочисленное переполнение в OpenOffice
Переполнение буфера в реализации VML в Microsoft Windows
Программа: OpenOffice версии до 2.1. Опасность: Высокая. Описание: Целочисленное переполнение обнаружено в обработчике WMF/EMF-файлов. Удаленный пользователь может с помощью специально сформированного WMF/EMFфайла вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. URL производителя: www.openoffice.org. Решение: Установите последнюю версию (2.1) с сайта производителя.
Программа: Microsoft Windows 2000, Microsoft Windows XP, Microsoft Windows 2003. Опасность: Критическая. Описание: Целочисленное переполнение существует изза недостаточной проверки входных данных в библиотеке vgx.dll в реализации Vector Markup Language (VML). Удаленный пользователь может с помощью специально сформированной веб-страницы или e-mail-сообщения вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. URL производителя: www.microsoft.com. Решение: Установите исправление с сайта производителя.
Переполнение буфера при обработке GIF-изображений в Sun Java Runtime Environment Программа: JDK и JRE 5.0 Update 9 и более ранние версии, SDK и JRE 1.4.2_12 и более ранние версии, SDK и JRE 1.3.1_18 и более ранние версии. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки при обработке GIF-изображений, длина которых установлена в 0. Удаленный пользователь может с помощью специально сформированного GIF-изображения, загружаемого недоверенным апплетом, вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. URL производителя: www.sun.com. Решение: Установите исправление с сайта производителя.
Несколько уязвимостей в Cisco Secure ACS
Программа: Cisco Secure ACS версии до 4.1. Опасность: Критическая. Описание: 1. Уязвимость существует из-за ошибки в службе CSAdmin при обработке HTTP GET-запросов. Удаленный пользователь может с помощью специально сформированного HTTP GET-запроса вызвать переполнение стека и выполнить произвольный код на целевой системе. 2. Уязвимость существует из-за ошибки в службе CSRadius при обработке RADIUS Accounting-Request-пакетов. Удаленный пользователь может вызвать переполнение стека и выполнить произвольный код на целевой системе. Уязвимость в механизме проверки 3. Уязвимость существует из-за ошибки в службе орфографии в Microsoft Office CSRadius при обработке RADIUS Access-Request-пакетов. Программа: Microsoft Office 2003 Удаленный пользователь может с помощью специально Опасность: Высокая. сформированного RADIUS Access-Request-пакета аварийОписание: Уязвимость существует из-за ошибки в меха- но завершить работу службы. низме проверки орфографии для бразильского португаль- URL производителя: www.cisco.com. ского языка. Удаленный пользователь может с помощью Решение: Установите исправление с сайта производитеспециально сформированного документа вызвать пов- ля. реждение памяти и выполнить произвольный код на целевой системе. URL производителя: www.microsoft.com. Несколько уязвимостей Решение: Установите исправление с сайта производите- в браузере Opera ля. Программа: Opera версии до 9.10. Опасность: Критическая. Уязвимость форматной строки Описание: 1. Уязвимость существует из-за ошибки при обв VLC Media Player работке JPEG-файлов, содержащих специально сформиПрограмма: VLC Media Player 0.8.6, возможно более ран- рованный DHT-маркер. Удаленный пользователь может ние версии. вызвать переполнение динамической памяти и выполнить Опасность: Высокая. произвольный код на целевой системе. Описание: Уязвимость существует из-за ошибки формат2. Уязвимость существует в функции createSVGTransform ной строки при обработке URL «udp://» . Удаленный поль- FromMatrix() при обработке объектов. Удаленный пользовазователь может с помощью специально сформированно- тель может передать некорректный объект уязвимой функго веб-сайта или M3U-файла выполнить произвольный код ции и выполнить произвольный код на целевой системе. на целевой системе. URL производителя: www.opera.com. URL производителя: www.videolan.org/vlc. Решение: Установите последнюю версию (9.10) с сайта Решение: Установите последнюю версию (0.8.6a) с сайта производителя. производителя.
70
bugtraq
Выполнение произвольного кода в Microsoft Word
Уязвимость при обработке неинициализированных указателей в Kerberos kadmind
Программа: Microsoft Office 2000. Опасность: Критическая. Описание: Уязвимость существует из-за ошибки при обработке строк. Удаленный пользователь может с помощью специально сформированного документа Word вызвать повреждение памяти и выполнить произвольный код на целевой системе. Примечание: уязвимость активно эксплуатируется в настоящее время. URL производителя: www.microsoft.com. Решение: В настоящее время cпособов устранения уязвимости не существует.
Программа: Kerberos krb5-1.5 – krb5-1.5.1, возможно, более ранние версии. Опасность: Критическая. Описание: Уязвимость существует из-за ошибки при обработке неинициализированных указателей когда интерфейс mechglue в реализации GSS-API вызывает определенные функции обработки ошибок. Удаленный пользователь может с помощью специально сформированного пакета вызвать отказ в обслуживании или выполнить произвольный код на целевой системе. URL производителя: web.mit.edu/kerberos/www. Решение: Установите последнюю версию с сайта производителя: web.mit.edu/kerberos/advisories/2006-003-patch.txt.
Выполнение произвольного кода в Microsoft Excel
Множественные уязвимости
Программа: Microsoft Office 2000, Microsoft Office XP, в продуктах Oracle Microsoft Office 2003. Программа: Oracle Database 10g, Oracle Application Server 10g, Oracle E-Business Suite 11i, Oracle Enterprise Опасность: Критическая. Описание: 1. Уязвимость существует из-за ошибки при об- Manager 10.x, Oracle PeopleSoft Enterprise Tools 8.x, Oracle9i работке IMDATA-записей. Удаленный пользователь может Database Enterprise Edition, Oracle9i Database Standard с помощью специально сформированного файла вызвать Edition, Oracle Developer Suite 10g, Oracle9i Developer Suite, повреждение памяти и выполнить произвольный код на це- Oracle9i Application Server. левой системе. Опасность: Критическая. 2. Уязвимость существует из-за ошибки при обработ- Описание: 1. Уязвимость существует из-за ошибки проверке определенных записей. Удаленный пользователь мо- ки границ данных в ONS (Oracle Notification Service). Удаленжет с помощью файла, содержащего специально сформи- ный пользователь может послать приложению специальрованную запись, вызвать повреждение памяти и выпол- но сформированный пакет на порт 6200/TCP, вызвать переполнение буфера и выполнить произвольный код на ценить произвольный код на целевой системе. 3. Уязвимость существует из-за ошибки при обработ- левой системе. ке строк. Удаленный пользователь может с помощью фай2. Уязвимость существует из-за недостаточной обрала, содержащего специально сформированную строку, вы- ботки входных данных в Oracle XML DB. Удаленный пользвать повреждение памяти и выполнить произвольный код зователь может с помощью специально сформированного на целевой системе. запроса выполнить произвольный код сценария в браузере 4. Уязвимость существует из-за ошибки при обработ- жертвы в контексте безопасности уязвимого сайта. ке Column-записей. Удаленный пользователь может с по3. Уязвимость существует из-за недостаточной обрамощью специально сформированного файла вызвать пов- ботки входных данных в пакете DBMS_AQ_INV. Удаленный реждение памяти и выполнить произвольный код на целе- пользователь может с помощью специально сформированвой системе. ного запроса выполнить произвольные SQL-команды в ба5. Уязвимость существует из-за ошибки проверки гра- зе данных приложения. ниц данных в Palette записей. Удаленный пользователь мо4. Уязвимость существует из-за недостаточной ображет с помощью файла, содержащего большое количест- ботки входных данных в EmChartBean. Удаленный пользово элементов в записи Palett, вызвать переполнение ди- ватель может с помощью символов обхода каталога полунамической памяти и выполнить произвольный код на це- чить доступ к произвольным файлам на системе. левой системе. URL производителя: www.oracle.com. URL производителя: www.microsoft.com Решение: Установите исправление с сайта производитеРешение: Установите исправление с сайта производите- ля. ля.
Составил Александр Антипов
№2, февраль 2007
71
хобби
Open Source и Classic Games
Иван Максимов Начало 90-х годов прошлого века ознаменовалось выпуском игровых программ, в будущем закрепивших за собой звание «культовых». Эти игры к настоящему времени устарели, но энтузиасты сообщества Оpen Source возродили многие из них.
О
pen Source-сообщество зна90-е годы прошлого столетия. Как на» Сидом Мейром (Sid Meier) на ЭВМ. ет много историй падения ком- много было выпущено замечатель- Через некоторое время состоялся вымерческих проектов и зарож- ных игр в то время – период возник- ход продолжения Civilization, породивдения на их основе свободных, в пос- новения новых идей и новых жан- шего многочисленные клоны (включая ледствии завоевавших доверие мно- ров! Наверное, сложно найти челове- «Колонизацию»), но оригинальной игжества пользователей. Так случилось ка, знакомого с компьютерами не по- ре не хватало очень многих вещей. С с браузером Netscape Navigator, кото- наслышке, который бы ни улыбнулся увеличением мощностей ЭВМ графирый не смог выдержать конкуренции при упоминании таких названий, как: ку удалось подтянуть, но не хватало с аналогом от Microsoft. Но после от- Dune, Doom, Civilization, Kings Bounty, режима многопользовательской игры. крытия исходных кодов проект полу- Transport Tycoon, Ufo, Colonization. Без- Именно по этой причине в 1995 году чил «вторую жизнь», переродившись условно, эти игры устарели по многим стартовал проект FreeCiv, являющийвпоследствии в знаменитый Firefox. параметрам, но их культовый статус ся, по сути, многопользовательской Похожая судьба и у системы управле- не позволит им кануть влету. Поэтому версией «Цивилизации». ния базами данных Interbase компании неудивительно, что энтузиасты со всех Итак, установив клиент игры, мы Borland, которая после прекращениия концов света давно взялись за пере- увидим непритязательную графику официальных работ над ней продол- работку и улучшение классики. Итак, и простой интерфейс, копирующие жила своё существование под назва- в каком же состоянии эти проекты на- вторую часть «Цивилизации», но это нием Firebird. ходятся сейчас? мнение обманчиво. Искусственный Исследуя успешное развитие своинтеллект компьютерных противнибодно распространяемых проектов, Civilization (FreeCiv ) ков очень силен, поэтому рекомендусреди всего многообразия ПО с от- Игру можно встретить почти в каждом ется вначале игры исследовать опции крытым исходным кодом чаще всего дистрибутиве Linux, в любой системе игры (к примеру, лучше ввести запрет можно встретить: программы для ра- портов/пакетов. В чем же секрет зна- на строительство городов на расстоботы с сетью и Интернетом, базы дан- менитой «Цивилизации»? Конечно же, янии менее пяти клеток). Перед игных, служебные утилиты и др. Сущест- в масштабе самой игры. Управление рой на официальных серверах лучвует еще одна область программного целой империей: научной, производс- ше потренироваться в однопользообеспечения, в развитие которой сооб- твенной, военной областями затягива- вательском режиме, так как изменещество OpenSource внесло большой ет не на шутку. ний по сравнению с оригиналом в игвклад, достигнув при этом немалых С чего все начиналось? Как мно- ре достаточно. успехов и популярности. Это игровые гие думают с «Цивилизации» 1 на PC, Вопрос с устаревшей графикой программы. Зайдя по ссылке [1], можно но это не совсем так. В конце 70-х – также решаем. На официальном сайнайти тысячи свободно распространя- начале 80‑х годов появилась настоль- те FreeCiv [3] можно найти большое емых игр (и закрытых портированных). ная игра Civilization. The board game [2]. количество патчей, один из которых, Прежде чем мы пойдём дальше, вер- Получившая большую популярность, Freeland, значительно меняет облик эта игра была со временем «перенесе- игры (см. рис. 1). нёмся на десяток лет назад.
72
хобби Кроме патча на графику, на сайте проекта находится множество других, не менее интересных дополнений: карты островов Великобритании и Японии, новые нации, редакторы карт, звуковые эффекты и многое другое. Несмотря на выход четвёртой части коммерческой, полностью трехмерной «Цивилизации», FreeCiv выглядит очень достойно: развитие игры не останавливается (последняя доступная версия – 2.1.0-beta2 от 12 августа 2006 года), постоянно обновляются уже существующие патчи, появляются новые модули (тот же Freeland – относительно «молодая» разработка). Существенным плюсом является свободная лицензия игры и, как следствие, открытые исходные коды. Поэтому любой желающий может внести во FreeCiv свои изменения, благо, на сайте можно найти очень интересные «рецепты». О популярности и успехе открытой «Цивилизации» можно судить не только по количеству патчей и многоязыковой поддержке (27 локализаций, включая русскую), но и по количеству серверов поклонников этой игры. Подводя итоги, можно сказать, что продолжение получилось очень ярким. Энтузиастам удалось повторить и расширить вселенную Civilization. Учитывая то, что над FreeCiv официально работают 37 человек, – прекращение развития этого Open Sourceпроекта мы увидим ещё не скоро.
Рисунок 1. FreeCiv с патчем Freeland
Сolonization (FreeCol) Один из первых клонов «Цивилизации» – «Колонизация», созданная автором «оригинала» Сидом Мейером и выпущенная в 1994 году. Действие игры происходит в Новом Свете (XV‑XVII века) во времена освоения европейскими государствами североамериканского континента. В игре уменьшен масштаб (по сравнению с Civilization), но более проработана экономическая и торговая системы. Игроку доступны: четыре колониальные государства, десятки товаров, два десятка юнитов, неизведанные территории с враждебно настроенными индейцами и не более дружелюбными конкурентами. Проект FreeCol возник по тем же причинам, что и FreeCiv, – отсутствие у оригинальной версии возможности играть по сети.
№2, февраль 2007
Рисунок 2. FreeCol
Для игры обязательно понадобит- лизация», но за время своего сущесся Java от Sun Microsystems, поэтому твования приобрела немалое колизайдя на официальный сайт игры [4], чество фанатов. В Интернете до сих не забудьте пройти по ссылке [5] и ус- пор существуют сайты с обновленитановить интерпретатор языка. Итак, ями в виде карт, дополнений к оригиустановив игру, первое, что мы уви- нальной версии игры. Фанаты любят дим, неплохую графику. Это, конечно, именно оригинальную версию, проне трехмерная «Цивилизация», но изо- должая рисовать карты и выпуская метрическая карта выглядит достой- дополнения. Кроме проекта FreeCol, в сети но. Учитывая то, что по Интернету одно время ходили слухи о выходе вто- можно найти еще несколько клонов рой части Сolonization, впоследствии Сolonization, но, к сожалению, разне подтвердившиеся, FreeCol вполне работка многих из них прекращена, может сойти за «наследника» ориги- а другие слишком отклонились от идей нала (рис. 2). оригинала. «Колонизация» получилась горазИз минусов FreeCol можно выдо менее популярной, нежели «Циви- делить лишь один: использование
73
хобби
Рисунок 3. jdoom
Рисунок 4. OpenTTD
Java сильно замедляет работу игры (её запуск на системе с процессором Celeron 1.4 ГГц и 256 Мб ОЗУ длится более 10 секунд). Также к минусам можно отнести графику (все-таки это не FreeCiv). Но эти «недостатки» меркнут сразу после начала игры, оригинальная концепция которой затягивает со страшной силой. В завершение обзора FreeCol должен заметить, что проект хоть и потерял многих поклонников, всё же продолжает развиваться. Судить об этом можно по последнему релизу (0.5.3)
74
от 5 декабря 2006 г. и по новым комментариям на многих форумах.
Doom (DoomsDay) Doom (1993 год) – первый 3D-шутер с перспективой «от первого лица», завоевавший с момента своего появления поистине культовый статус. В игре игроку предстоит бороться с полчищами монстров, уничтожая их при помощи различных видов оружия. Как и многие другие популярные игровые продукты, Doom получил множество продолжений и клонов. На его
«движке» было выпущено множество различных игр, как коммерческих, так и свободных. Из коммерческих клонов стоит выделить Heretic (1994 год) и Hexen: Beyond Heretic (1995 год). Свободно распространяемых продолжений Doom вышло очень много. Одно из них, DoomsDay (включает в себя jdoom, jhexen и jheretic), можно найти почти в каждой системе портов/пакетов. DoomsDay – это улучшенный движок для игры Doom (Hexen и Heretic), новые текстуры, а также возможность игры по Интернету. На сайте проекта [6] можно найти описание игр, ссылки на загрузку движка, новые текстуры и статистику оn-line-баталий. К сожалению, для запуска игр необходимо наличие оригинальных *.wad-файлов, но их без особых проблем можно найти в Интернете. Итак, скачав движок, текстуры и оригинальные *.wad-файлы игр Doom, Hexen и Heretic, запустим их по очереди. Уровни не изменились, а вот графика и текстуры пошли «старичкам» на пользу, разработчики достигли больших успехов. Первое, на что обращаешь внимание в jdoom, – отсутствие малейшего намёка на «квадратность» графики, появление рикошетов от пуль, а также динамические тени. Игра настолько преобразилась, что, увидев дым от ракет и разряды плазменной винтовки, некоторые фанаты захотят пройти Doom еще несколько раз. Режим сетевой игры кардинально отличается от оригинала, пункт Multiplaer находится непосредственно в главном меню. Зайдя в него, можно отредактировать профиль игрока, создать игру либо же присоединиться к серверу (ранее для этих целей служило отдельное приложение). Как уже говорилось, список игровых серверов с версиями игр (Doom, Doom2) можно найти на официальном сайте проекта. Стоит отметить, что все старые чит-коды в игре (iddqd, idkfa и др.) остались на месте (рис. 3). Эти же изменения произошли и с оригинальными Hexen и Heretic. Разрывов ракет в играх, конечно, нет, но при использовании «Крыльев феникса» создается ощущение, что руки держат ракетную установку, а не древний артефакт. Также стоит отметить, что текстуры объектов в jheretic про-
хобби рисованы намного лучше, чем в jdoom (объем файла с текстурами в jheretic на 10 Мб больше). Конечно, всеми нововведениями в jdoom, jheretic и jhexen нельзя удивить современного игромана. В настоящее время 3D-шутеры давно обладают хорошей графикой и физической моделью. Тем не менее выглядят DoomsDay все же на уверенную четвёрку даже по сегодняшним меркам. Пожалуй, стоит отметить еще одну небольшую, но приятную особенность: для игр необходимы *.wad-файлы из оригинальных игр, но подойдут и дополнительные и сетевые карты (также являющиеся *.wad-файлами), созданные сторонними разработчиками. Итак, небольшой объем игры (не более 100 Мб), новый удобный интерфейс и графика, регулярное обновление (текущий релиз датирован 28 мая 2006 г.) говорят о том, что проект удался и в дальнейшем будет пользоваться не меньшей популярностью.
Рисунок 5. UFO: Alien Invasion
Transport Tycoon (OpenTTD) Игра представляет собой транспортную экономическую стратегию (http:// open.ttdrussia.net). Первую версию под названием Transport Tycoon Original (последнюю приставку игра приобрела позже) компьютерный мир увидел в 1994 году. Игроку предстоит заниматься перевозкой грузов на четырёх видах транспорта: автомобильном, железнодорожном, морском и воздушном. Начиная игру в 1940 году, он должен будет одолеть конкурентов и справиться со сложностями построек сложных транспортных систем. Именно последний фактор является наиболее интересной особенностью игры, так как создать эффективную, экономичную и, что не маловажРисунок 6. Wargus но, красивую транспортную линию нелегко. Существуют фанаты игры, ко- кать ответы на вопросы типа: «Как же торые даже придерживаются реаль- наиболее эффективно и экономно посных правил строения железнодорож- троить обычную дорогу, а потом рядом ных линий. Масштаб, большой выбор проложить железные пути?» К сожалению, в оригинальной вертоваров, постоянное обновление технологий (от паровозов до электрово- сии игры было много ограничений, назов на монорельсах), гонка с конку- пример, на количество вагонов в сорентами за государственные субси- ставе, платформ на вокзале и мнодии – все это затягивало фанатов иг- гое другое. Даже появление Transport ры. Неудивительно, что после появле- Tycoon Delux в 1995 году не особо увения OpenTTD игра не только вернула личило возможности игрока. Остасебе старых поклонников, но и приоб- лись и другие минусы: плохая подрела новых, заставляя новичков ис- держка многопользовательской игры
№2, февраль 2007
и относительно небольшой масштаб. Игроки желали большего, и энтузиасты OpenSource-сообщества откликнулись на их просьбы. В 2004 году вышли первые релизы OpenTTD. Постепенно игра приобретала новые функции, откликаясь на пожелания пользователей. Карты были увеличены в четыре раза (с 256х256 до 2048х2048 клеток), были сняты ограничения на длину железнодорожных составов (и платформ), добавлены морские каналы, новые текстуры,
75
хобби DarkOberon DarkOberon (http://dark-oberon.sourceforge. net) – стратегия в режиме реального времени, созданная по мотивам WarCraft 2. Графически игра, на первый взгляд, напоминает первую часть WarCraft, но при ближайшем рассмотрении можно увидеть, что все объекты – «пластилиновые». Оригинальная идея дизайна игры способствовала ее распространению по Интернету. К сожалению, в настоящий момент DarkOberon ещё не завершена. Доступны всего четыре типа юнитов: солдат, рабочий, ката-
создан игровой портал и многое другое (рис. 4). Итак, кроме движка игры, который можно скачать с официального сайта [7], нам понадобится оригинальная версия Transport Tycoon Delux. Желающие также могут установить новые текстуры. Игру можно проходить в одиночку, соревнуясь с искусственным интеллектом компьютера, но намного интереснее играть по сети. Портал OpenTTD никогда не пустует, всегда можно присоединиться к группе игроков и попытаться завоевать виртуальный рынок. Игровой процесс усложнятся тем, что в игре можно покупать другие компании, поэтому вполне вероятно, что, когда вы присоединитесь к другим игрокам, вашу компанию купят «с молотка». В 2004 году было выпущено идейное продолжение TTD – Chris Sawyer’s Locomotion (так называемый TTD2), являющееся вполне достойным продолжение оригинала. Чем же привлекает новых фанатов именно OpenTTD? Ответ на вопрос можно найти на многих форумах поклонников этой игры. Это простота в освоении, масштаб, небольшой размер дистрибутива и свободное распространение. Как и большинство коммерческих проектов, в Locomotion «поиграли и забыли», тогда как OpenTTD развивается по сей день и продолжает дальше радовать своих пользователей.
UFO (UFO: Alien Invasion) UFO представляет собой комбинацию стратегий сразу двух режимов – пошаговой и реального времени. В ней игроку предстоит отразить нападения инопланетян на родную планету Земля. Первая часть UFO, Enemy
76
пульта и дирижабль (если не считать нейтральных: поросенка и лодочку). Основной режим игры – многопользовательский, но, возможно, в будущем мы увидим и одиночный режим. Также на сайте проекта можно посмотреть фотографии процесса изготовления всех объектов игры (золотые шахты, леса), что дополнительно украшает проект. Несмотря на недостатки, DarkOberon смотрится очень симпатично и весело. Остается надеяться, что проект не забросят и он будет доведен до конца.
Unknown (она же X-COM: UFO Defence), вышла в 1993 году, моментально завоевав множество поклонников. Поэтому на волне популярности оригинала в 1995 году вышло продолжение под названием X-СОМ UFO 2: Terror From The Deep, в котором игроку предстояло сразиться с инопланетянами в океанских водах. Как уже говорилось выше, игровой процесс разделен на игру в реальном времени, где нам предстоит строить базы, закупать оборудование и вооружение, исследовать инопланетные артефакты для их последующего использования и перехватывать неопознанные летающие объекты. После крушения НЛО и десантирования в район спецназа игра переходит в пошаговый режим, в котором нам предстоит захватить или уничтожить врагов. Именно из-за многообразия процесса игры UFO завоевала популярность. В дальнейшем было выпущено немало продолжений и римейков оригинала, однако очень часто можно было услышать от игроков одно и то же мнение: «Это не та UFO, которую мы любим и помним». В действительности все было именно так: после выхода UFO: Aftermath (2004 год) многие фанаты потеряли всякую надежду на качественное продолжение саги. Приблизительно в это время (2003 год) и была создана команда UFOAI Team, занявшаяся проектом UFO: Alien Invasion. Игра создана на базе движка 3D‑шутера Quake II (исходные коды которого были открыты компанией idSoftware 22 декабря 2001 года), казалось бы, не созданного для данного жанра. На практике все вышло подругому.
Итак, скачав архив с официального сайта проекта [8], запустим UFOAI. Несмотря на то что в списке поддерживаемых языков нет русского, игра все же переведена процентов на 70 (подобный неполный перевод вносит как дополнительное удобство, так и путаницу). Игровой процесс похож на оригинал. Всюду прослеживаются идеи первого UFO: постройка базы (радары, жилые помещения, лаборатории), исследования (технологии плазмы, лазера и т. д.), захват инопланетян, защита граждан, производство оборудования. Единственные отличия состоят в графике и интерфейсе игры. Старых фанатов может смутить отсутствие трехмерной карты планеты в главном окне игры, она заменена на свой плоский развернутый аналог. Игра в пошаговом режиме полностью трехмерная, можно смело приближать камеру к объектам, не боясь увидеть «квадратные» пиксели. В то же время, если игроку хочется побывать «в шкуре» спецназовца, достаточно нажать клавишу «V», и он получит пошаговый 3D-шутер. К сожалению, игра еще незавершена. Например, на данный момент отсутствуют воздушные бои, хотя перехватчики и вооружение для них на базе уже есть. Проект быстро развивается. Год назад были доступны всего три миссии и небольшой список исследований. К тому же игра часто зависала. Сегодня же игровым процессом в UFO: Alien Invasion можно наслаждаться: великолепная графика, новый сюжет, стабильная работа программы… При этом игра остается все тем же классическим UFO. Нужно признать, что энтузиасты сдержали свое слово. Проект продолжает классическое начало оригинала и может смело называться «настоящим» UFO 3 (рис. 5).
Warcraft (WarGus) War Craf t п р о и з в о д с т в а B liz z ard Entertainment – фэнтези-стратегия в режиме реального времени, в которой игроку дана возможность управления человеческой расой либо ордой орков. Продуманный сюжет, отличная графика и новаторские идеи позволили игре завоевать сердца многих игроков. Продолжение игры, вышед-
хобби Сводные данные об игровых программах шее в декабре 1995 года, ещё больше закрепило успех оригинала. В даWindows Linux MacOS Размер src Размер win Оригинальные файлы леком прошлом эти игры являлись FreeCiv + + + 14 8 – главными конкурентами сериям Dune FreeCol + + + 8 10 – и Command & Conqueror производсDoomsDay + + + 70 71 + тва Westwood Studios, соревновавOpenTTD + + + 4 2 + шейся с Blizzard за звание «законодаUFO AL + + src 200 216 – тельницы мод» в жанре стратегий в реWarGus + + src 0,5 1,5 + альном времени. Кто победил, мы уже знаем: про Westwood, купленную гигантом игровой индустрии Electronic Arts, Более высокое разрешение позволя- скольких платформ и имеют небольмногие забыли (хотя грядущий C&C: ет видеть лучшую картину боя, вследс- шой объем. Как видно из таблицы, игTiberium Wars – очень «лакомый кусо- твие чего управлять войсками стано- ровые программы перенесены под все чек»), тогда как Blizzard и её детище вится значительно легче. Еще одно но- наиболее распространенные операвовведение коснулось игры по сети, ционные системы. живет и процветает по сей день. Пометка src в столбце MacOS озWarCraft продолжил свое эволюци- введена поддержка протокола TCP/IP онное развитие, и теперь мы можем (в оригинальной версии игра была до- начает, что в проекте нет *.dmg-файнаслаждаться многопользователь- ступна только через IPX-протокол ли- лов, доступны только исходные коды. Размер проектов округлялся в больской игрой в ролевом проекте World бо же NULL-модем). Сама WarCraft 2 не изменилась: шую сторону. of WarCraft. Но многие фанаты не хоНапример, движок DoomsDay «ветят забывать оригинал. WarCraft 2 дав- сюжетная линия та же, новых юнитов но устарела, но в неё до сих пор игра- не замечено, но в игру добавлено все сит» всего 7 Мб, но текстуры ко всем ют как в однопользовательском ре- самое необходимое для удобства иг- играм в проекте занимают около 60 Мб. жиме, так и по сети. Как раз для таких рока. Что и следовало ожидать, пос- В общий объем не включен размер фанатов и было разработано допол- кольку модификацию создавали фа- оригинальных файлов игр. Также стоит отметить, что OpenTTD – единственнаты для фанатов. нение WarGus. WarGus, конечно, не привлечет но- ный проект с поддержкой архитектуКак говорится на официальном сайте проекта, WarGus – это «модифи- вых игроков в мир WarCraft, для этого ры amd64. В Интернете раньше можно было кация Warcraft 2, созданная фанатами больше подходит официальная треWarcraft 2, для себе подобных». Патч тья часть с множеством официальных встретить множество высказываний основан на базе кроссплатформенного и неофициальных дополнений, а так- по поводу того, что хороших свободдвижка Stratagus [9], с помощью кото- же WarCraft 2: Battle.net Edition, пред- но распространяемых игр с открытырого были разработаны такие проекты, назначенная для игры через Интернет. ми исходными кодами не существует, как: Battle of Survival, World Domination, Но игроки, желающие вспомнить бы- но, пожалуй, теперь это мнение можлые времена и увидеть «новое лицо» но опровергнуть. Astroseries и другие. Заканчивая материал, хочется Зай д я н а о ф и ц и а л ьн ы й с ай т любимой игры, должны обязательно напомнить, что мы живем не тольWarGus [10], скачаем архив дополне- воспользоваться дополнением. ко для работы, но и, как сказал Линия. Нам также понадобится оригинус Тольдвальтс, «для развлечений» нальная часть игры. На сайте сказано, Выводы что обязательно необходима CD-вер- Оригинальные версии игр навсегда («Just for fun»). сия Warcraft 2, хотя вполне подойдет вошли в историю как родоначальники обычный минимальный архив без ви- игровых жанров и по праву могут на- 1. T h e L i n u x G a m e To m e – h t t p : / / www.happypenguin.org. деороликов (его легко найти на многих зываться лучшими. Связано это с тем, что все идеи, которые были заложены 2. Производитель настольных игр – http:// фэн-сайтах; объем ~ 30 Мб) (рис. 6). www.eaglegames.net. Запустив игру, можно заметить, в них, используются по сей день, и ночто весь WarCraft 2 стал более инфор- вые жанры придумать трудно. Энтузи- 3. Официальный сайт freeciv – http:// www.freeciv.org. мативен. Проявляется это во всем: асты со всех концов света по разным например, если крестьяне собирают причинам не хотели оставлять эти зна- 4. Официальный сайт freecol – http:// www.freecol.org. дерево, шкала внизу покажет игроку, менитые проекты на пыльных полках. сколько осталось времени до полного Одни улучшали игровой интерфейс, 5. Интерпретатор языка Java от Sun Microsystems – http://www.java.com/en. сбора. Воины также имеют подобную другие создавали полноценные прошкалу, однако относится она к запасу должения с новыми миссиями и сю- 6. Jdoom – http://www.doomsdayhq.com. их жизненных сил. Во время боя на эк- жетными линиями. Находились энту- 7. Официальный сайт игры OpenTTD – http://www.openttd.org. ране отображается урон, наносимый зиасты, не желавшие мириться с тем, 8. Сайт UFOAI Team – http://ufo.myexp.de. существами друг другу («отлетающие» что их любимые проекты исказили 9. Кроссплатформенный движок Stratagus – цифры). Появилась очередь построек до неузнаваемости, и бравшие «все http://stratagus.sourceforge.net. в производственных зданиях. Выделе- в свои руки». Все представленные OpenSource- 10. Сайт проекта WarGus – http://wargus. ние объектов ранее было ограничено sourceforge.net. девятью юнитами, теперь же его нет. проекты существуют в версиях для не-
№2, февраль 2007
77
bugtraq Уязвимость при обработке .rc-файлов в Microsoft Visual Studio Выполнение произвольных команд в TYPO3 Программа: TYPO3 4.0.3 и более ранние версии, rtehtmlarea (расширение к TYPO3) 1.4.2 и более ранние версии. Опасность: Высокая. Описание: Уязвимость существует из-за недостаточной обработки входных данных в параметре userUid в сценарии sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-checklogic.php перед использованием их в команде aspell. Удаленный пользователь может выполнить произвольные команды на системе. Для успешной эксплуатации уязвимости опция safe_mode должна быть отключена в конфигурационном файла PHP. Пример: --- post request --POST /typo3/sysext/rtehtmlarea/htmlarea/plugins/ ↵ SpellChecker/spellcheck-logic.php?id=1 HTTP/1.1 Host: www.typo3host.abc User-Agent: none Content-Type: application/x-www-form-urlencoded Content-Length: 111 psell_mode=fast&to_p_dict=1&cmd=learn&userUid=test; ↵ +echo+'shell'+>+ /tmp/shell.txt+%23&enablePersonalDicts=true --- /post request ---
URL производителя: www.typo3.org. Решение: Установите последнюю версию (4.0.4) с сайта производителя.
Переполнение буфера в Microsoft Help Workshop Программа: Microsoft Help Workshop 4.03.0002, возможно, более ранние версии. Опасность: Средняя. Описание: 1. Уязвимость существует из-за ошибки проверки границ данных при обработке .CNT-файлов. Удаленный пользователь может с помощью специально сформированного .CNT-файла вызвать переполнение буфера и выполнить произвольный код на целевой системе. 2. Уязвимость существует из-за ошибки проверки границ данных при обработке .HPJ-файлов. Удаленный пользователь может с помощью специально сформированного .HPJ-файла, содержащего слишком длинную строку в параметре HLP в секции OPTIONS, вызвать переполнение стека и выполнить произвольный код на целевой системе. URL производителя: www.microsoft.com. Решение: В настоящее время cпособов устранения уязвимости не существует.
78
Программа: Microsoft Visual Studio 6 Professional SP6, Microsoft Visual Studio 6 Enterprise SP6. Опасность: Низкая. Описание: Уязвимость существует из-за ошибки проверки границ данных при обработке .rc-файлов, содержащих слишком длинную строку после текста: «1 TYPELIB MOVEABLE PURE». Удаленный пользователь может с помощью специально сформированного .rc-файла вызвать переполнение стека и выполнить произвольный код на целевой системе. URL производителя: www.microsoft.com. Решение: В настоящее время cпособов устранения уязвимости не существует.
Множественные уязвимости в CA BrightStor ARCserve Backup Программа: BrightStor Enterprise Backup 10.x, BrightStor ARCserve Backup 9.x, BrightStor ARCserve Backup 11.x (for Windows), BrightStor ARCserve Backup 11.x (for Microsoft SQL Server), BrightStor ARCserve Backup 11.x. Опасность: Средняя. Описание: 1. Уязвимость существует из-за ошибки при обработке opnum 0xBF RPC-запросов в службе Tape Engine. Удаленный пользователь может послать службе на порт 6502/TCP специально сформированный RPC-запрос и выполнить произвольный код на целевой системе. 2. Уязвимость существует из-за ошибки проверки границ данных при обработке opnum 0x2F и opnum 0x75 RPC запросов в службе Message Engine RPC. Удаленный пользователь может послать приложению на порты 6503/TCP и 6504/TCP специально сформированный RPC-запрос, вызвать переполнение буфера и выполнить произвольный код на целевой системе. 3. Уязвимость существует из-за ошибки проверки границ данных при обработке 0xCF RPC-запросов в службе Tape Engine RPC. Удаленный пользователь может послать приложению на порт 6503/TCP специально сформированный RPC-запрос, вызвать переполнение буфера и выполнить произвольный код на целевой системе. 4. Две ошибки проверки границ данных при обработке RPC запросов обнаружены в службе Mediasrv.exe. Удаленный пользователь может с помощью специально сформированного RPC-запроса вызвать переполнение стека и выполнить произвольный код на целевой системе. 5. Уязвимость существует из-за ошибки проверки границ данных в ASCORE.dll при обработке opnum 0x2F RPC запросов в службе Message Engine RPC. Удаленный пользователь может послать специально сформированный RPCзапрос на порты приложения 6503/TCP и 6504/TCP, вызвать переполнение стека и выполнить произвольный код на целевой системе. URL производителя: www3.ca.com. Решение: Установите исправление с сайта производителя.
bugtraq
Целочисленное переполнение при обработке UFS-образов в Mac OS X Программа: Apple Macintosh OS X 10.4.8, возможно более ранние версии. Опасность: Высокая. Описание: Целочисленное переполнение обнаружено в функции ffs_mountfs() при обработке UFS-образов. Удаленный пользователь может с помощью специально сформированного UFS DMG-образа вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе. URL производителя: www.apple.com/macosx. Решение: В настоящее время cпособов устранения уязвимости не существует.
Переполнение буфера в Apple Mac OS X slpd Программа: Apple Macintosh OS X 10.4.8 (8L2127) на x86‑платформе. Опасность: Низкая. Описание: Уязвимость существует из-за ошибки проверки границ данных в SLP-демоне (slpd) при обработке поля attr-list в регистрационном запросе. Локальный пользователь может вызвать переполнение буфера и аварийно завершить работу системы или выполнить произвольный код с повышенными привилегиями. URL производителя: www.apple.com/macosx. Решение: В настоящее время cпособов устранения уязвимости не существует.
Уязвимость при обработке HTML-кода в браузере Safari Уязвимость при обработке файловой системы HFS+ в Mac OS X Программа: Apple Macintosh OS X 10.4.8 (x86). Опасность: Низкая. Описание: Уязвимость существует из-за ошибки в функции do_hfs_truncate() в при обработке файловой системы HFS+. Злоумышленник может с помощью специально сформированного DMG-образа, содержащего файловую систему HFS+ вызвать критическую ошибку ядра системы. Уязвимость может эксплуатироваться посредством браузера Safari, если включена опция «Оpening safe files after downloading». URL производителя: www.apple.com/macosx. Решение: В настоящее время cпособов устранения уязвимости не существует.
Программа: Safari 2.0.4, возможно, более ранние версии. Опасность: Низкая. Описание: Уязвимость существует из-за ошибки при обработке комментариев в определенных тегах на HTML-странице. Удаленный пользователь может выполнить произвольный код сценария в браузере жертвы в контексте безопасности целевого сайта, если в комментарии присутствует соответствующий закрывающий тег (например тег title). URL производителя: www.apple.com/macosx/features/ safari. Решение: В настоящее время cпособов устранения уязвимости не существует.
Переполнение буфера при обработке RTSP-ссылок в Apple Quicktime Уязвимость в shared_region_map_file_np() в Apple Mac OS X Программа: Apple Macintosh OS X 10.4.8 (PPC), возможно, более ранние версии. Опасность: Низкая. Описание: Уязвимость существует из-за ошибки в системном вызове shared_region_map_file_np(). Злоумышленник может установить высокое значение для mapping_count и вызвать отказ в обслуживании системы. URL производителя: www.apple.com/macosx. Решение: В настоящее время cпособов устранения уязвимости не существует.
№2, февраль 2007
Программа: Apple Quicktime 7.1.3.100. Опасность: Высокая. Описание: Уязвимость существует из-за ошибки проверки границ данных при обработке RTSP-ссылок. Удаленный пользователь может с помощью специально сформированного QTL-файла, содержащего слишком длинный параметр src (более 256 байт) вызвать переполнение стека и выполнить произвольный код на целевой системе. Пример: "rtsp://[any character]:[>256 bytes]")
URL производителя: www.apple.com/quicktime. Решение: В настоящее время cпособов устранения уязвимости не существует.
Составил Александр Антипов
79
ретроспектива
Глобальная сетевая энциклопедия
Илья Александров Гигабайты информации. Ответ на любой вопрос. Сотни тысяч статей на всевозможные темы. Безусловно, появление подобного ресурса было предрешено. Как вы уже догадались, речь пойдёт о wikipedia.org.
История энциклопедии бирало самую разную информацию, ни для работы с веб-энциклопедией Энциклопедии на правах «кладезя однако сайт был скорее развлечени- не хватало, а обычному человеку назнаний» занимают особое место сре- ем, чем серьезным энциклопедичес- писать туда было непросто. Пользоди других книг. Пятьдесят томов «Боль- ким изданием. ватель Интернета был обязан сначашой советской энциклопедии». Не усПодобный неказистый сайт стал ла отправить текст одному из редактупающая ей по объёму «Британника». вдохновением для Лоурэнса Сэнгера торов, который читал его, и в случае Но время не стоит на месте. В истории (Lawrence «Larry» Sanger) и Джимми одобрения отправлял на утверждечеловечества появляются новые стра- Уэйлса (Jimmy Wales), в то время ра- ние своим коллегам. Когда нескольницы, ученые мужи совершают новые ботавших в американской компании ко человек признавали высокое каоткрытия. В результате составителям Bomis. Занимая пост исполнительно- чество текста, он отсылался редактобумажных энциклопедий приходит- го директора компании, Джимми вы- ру (copyeditor). Тот находил защищенся постоянно перевыпускать свои из- делил деньги на финансирование про- ные авторским правом текст и рисундания, дописывая или переписывая екта по созданию бесплатной онлай- ки и удалял их. И лишь после этого стаих содержимое. новой энциклопедии. Спустя несколь- тья наконец могла быть опубликована Огромное количество занимаемо- ко недель был зарегистрирован домен на Nupedia.com. го пространства и стремительно уста- Nupedia.com. Главным редактором сайВ итоге за месяцы работы было ревающая информация – главные не- та стал Сэнгер. опубликовано всего 20 статей. Еще достатки современных энциклопедий. По плану создателей авторами ста- около шестидесяти находилось в дораИ если первую проблему можно ре- тей в «Нупедию» должны были стать ботке. Восемьдесят статей – маловата шить, купив ту же «БСЭ» на DVD-дис- люди из академической и научной сре- цифра для энциклопедии. Бесперспекке, то с обновлениями ситуация по-пре- ды. То есть те же люди, занимающие- тивность подобного подхода к накоплежнему остается неопределённой. ся написанием статей для обычных бу- нию материалов стала очевидной. Вот здесь и приходит на помощь мажных энциклопедий. Профессорам Уэйлс и Сэнгер уже подумывали Интернет, обла дающий огромны- университетов (в том числе и россий- закрыть «Нупедию», когда на помощь ми объемами хранимой информации, ских) рассылались сообщения с пред- пришел их старый друг – Бен Ковиц а также возможностью мгновенного ложением поучаствовать в проекте. (Ben Kovitz). Бен рассказал Лари о техредактирования материалов в режи- Сначала все шло неплохо – команду нологии Wiki (о которой я расскажу ме «реального времени». Первая элек- добровольцев, желающих поучаство- чуть позже), позволяющей участвовать тронная библиотека, everything2.com, вать в проекте Nupedia, отобрать уда- в обновлении сайта любому желающепоявилась в 1999 году. Небольшое со- лось. Но процесс обновления сайта му, минуя редакторов и администратообщество пользователей портала со- шел очень медленно. Ученым време- ров. Ученых, работавших над Nupedia, 80
ретроспектива подобный подход возмутил – они счиК ноябрю 2006 года английский тали, что наполнение сайта непрофес- раздел «Википедии» мог похвастаться сионалами все испортит. Кроме того, умопомрачительным количеством стапоявлялась угроза вандализма со сто- тей – более полутора миллионов. Росроны недоброжелательных пользова- сийский же сегмент имеет более скромтелей. Посовещавшись, Уэйлс и Сэн- ные показатели – 124 000 статей. гер вернули старый движок на Nupedia. com, а для энциклопедии на базе тех- «Википедия» по-русски нологии Wiki был зарегистрирован Как уже говорилось ранее, русский сайт wikipedia.com, позже переехав- раздел «Википедии» был создан в мае ший на домен в зоне .org. Это собы- 2001 года. Первая статья называлась тие произошло 15 января 2001 года. «Россия», и ее содержание сводилось Эта дата и считается днем создания к фразе «Россия – великая страна». «Википедии». Первыми статьями про- Пару месяцев спустя какой-то остроекта стали материалы, перенесённые умный посетитель исправил содержас nupedia.com. Все остальные статьи ние статьи на предложение «Россия – Джимми Уэйлс – создатель «Википедии» писались уже добровольцами – обыч- родина слонов (ушастых, повышенной ными пользователями Интернета. проходимости – см. мамонт)», причем вой информации. Благодаря подобной В мае 2001 года «Википедия» ста- эта фраза провисела на главной стра- «рекламе» уже к концу года была нала международным порталом – были нице около года и стала объектом шу- писана десятитысячная статья, и наконец началось серьезное развитие русзапущены разделы на русском, немец- ток пользователей Интернета. ком, шведском, французском, испансПервым администратором русско- ского сегмента портала. В 2005 появились рубрики «Знаеком и других языках. го раздела стал Брайан Виббер (Brion В 2002 году основатель wikipedia.org Vibber), русским не владевший совер- те ли вы, что…», «События дня», впервые на русском вышли «Вики-новости». Ларри Сэнгер покинул своё детище. шенно. Ларри критиковал проект за «антиэлиВ 2003 году у энциклопедии нако- Летом того же года в Петербурге протаризм», подразумевая, что авторами нец появились первые активные авто- изошла первая wiki-встреча. Ее оргаявляются неспециалисты; обвинил его ры – Виталий Волков и Владимир Ме- низовали шесть «википедийцев», прив неуважении к экспертам. Примерно дейко (больше известный под ником нимающих активное участие в обновв это же время прекратил свое сущес- Dr Bug). Оба получили статус «бюрок- лении энциклопедии. Наша «Википедия» является лауретвование ресурс Nupedia.com, к тому ратов» (о том, что представляют современи окончательно растерявший бой статусы на «Википедии», мы пого- атом нескольких премий. На фестивасвою популярность. ворим позже), что давало им дополни- ле «Интернить-2005» она была назваКоличество статей в «Википедии» тельные возможности перед остальны- на «Сервисом года». В 2006 она получила премию Рунета в номинации стремительно росло. 20 июня 2003 го- ми пользователями wikipedia.org да Уэйлс создает фонд «Викимедиа», К августу 2003 года суммарное ко- «Наука и образование». И самое главное – летом 2006 гоорганизацию, занимающуюся подде- личество статей в русском сегменте ржкой онлайновой энциклопедии. Фонд «Википедии» достигло пяти тысяч, од- да количество статей в русском разтакже является создателем некоторых нако по сравнению с англоязычным ва- деле «Википедии» достигло ста тысяч, благодаря чему он вошел в спиродственных «Википедии» проектов. риантом эта цифра была смешной. В 2004 году стартовала кампаПримерно в это же время в одном сок самых успешных сегментов энния по сбору средств на развитие популярном компьютерном журнале циклопедии. wikipedia.org. Начало оказалось успеш- была опубликована статья о Wikipedia, ным, в результате чего энциклопедия вызвавшая большой приток новых Технология Wiki по сей день продолжает существовать участников. Статья, написанная од- Говоря о «Википедии», нельзя не расна выручку от пожертвований и гран- ним из администраторов русскоязыч- сказать о технологии, в честь которой, тов. Впрочем, с финансами проблем ного раздела «Википедии», положила собственно, энциклопедия и получиникогда особо не было – в своё вре- начало серии публикаций об энцик- ла своё название. Главное достоинсмя по Сети ходил слух, что Уэйлс пот- лопедии и в других средствах массо- тво Wiki – возможность любого желаюратил на раскрутку портала около пополучать по 50 центов. Кстати, уже сейлумиллиона долларов. Используемое «Википедия» на бумаге ресурсом программное обеспечение, В последнее время стали всё чаще появ- час существует сервис «PediaPress». Люк слову, исключительно свободно-рас- ляться предложения по изданию энцикло- бой желающий может выбрать необхопространяемое: 39 серверов работают педии в бумажном варианте. Первой стра- димые статьи из англоязычной «Википепод управлением дистрибутива RedHat ной, осуществившей подобную задумку, дии», которые затем будут опубликованы Linux, а движок MediaWiki (см. статью станет, скорее всего, Германия. Издатель- в виде единой книги. Печатью занимает«Работаем с MediaWiki» на стр. 84-91) ство «Zenodot» планирует к 2010 году вы- ся фирма «InstaBook». За каждый экземнаписан на PHP и распространяется пустить на рынок сто томов «Википедии». пляр желающему придется выложить поС каждой проданной книги портал будет рядка 80 евро. бесплатно в виде исходных кодов.
№2, февраль 2007
81
ретроспектива дены к двум вариантам: «редактировать» и «сохранить». Wiki допускает возможность работы не только с текстом, но и с мультимедийными материалами: графическими изображениями, звуковыми файлами. Любая статья сайта, базирующегося на Wiki, представляет собой собственно текст в HTML- или Wiki-разметке. Теги Wiki считаются более простыми, чем в HTML. Например, если вы пишете новый материал в Wikipedia и хотите вставить ссылку на статью «Компьютеры», прописывать полный вебадрес статьи нет необходимости. Достаточно просто взять название требуемой статьи в двойные квадратные скобки: [[компьютеры]], и вы получите готовый линк. Причем «битых» ссылок нет по определению – линк на существующую статью будет выделен синим цветом, а если материал еще не написан – красным. Wiki сейчас используется на многих сайтах для увеличения интерактивности, но на Wikipedia.org технология реализована наиболее полно.
Заглавная страница портала
Современные реалии свободной энциклопедии
Cтатья «Компьютер»
щего добавлять свои материалы и редактировать уже имеющиеся. Все изменения страниц постоянно сохраняются, поэтому, если кто-нибудь удалит статью или напишет вместо нее какуюнибудь гадость, вернуть прежнюю копию можно будет моментально. Wiki – это базирующаяся на гипертекстовых ссылках среда, главное назначение которой – хранение и структуризация информации. Первая версия Wiki была разработана еще в 1995 году программистом Уордом Каннингемом (Ward Cunningham). Техноло-
82
гия была создана для нужд его «портлендского хранилища образцов программного кода», в котором находились написанные им программы. Слово Wiki он услышал, когда был на Гавайях. На местном языке его можно перевести как «быстро-быстро». Кстати: этим словом на Гавайях называют автобусы. Технология Wiki изначально разрабатывалась в расчете на коллективное взаимодействие пользователей, вследствие чего работать с движком очень просто. Все функции све-
Идеология wikipedia.org – это прежде всего бесплатность и свобода распространения информации. Основные принципы «Википедии» закреплены в так называемых пяти столпах: 1. «Википедия» – это энциклопедия. Не беспорядочная свалка текстов, не газета, не трибуна агитатора. 2. Авторы статей всегда придерживаются нейтральной точки зрения. Беспристрастность людей, наполняющих содержимым энциклопедию, необходима для того, чтобы прозвучали разные точки зрения, чтобы читатель сам сделал вывод о предмете или событии, обсуждаемом в тексте. 3. Статьи «Википедии» являются свободными для использования и редактирования. Все материалы энциклопедии распространяются по лицензии GNU Free Documentation License. Это означает, что каждый может воспользоваться статьей из энциклопедии и исправить ее при условии, что материалы будут распространяться по той же лицензии и в них будет ссылка на первоисточник.
ретроспектива 4. Каждый участник обязан соблюдать свод правил. Не оскорблять других участников, сохранять нейтральную точку зрения при работе над «острыми» статьями, не править чужую статью, если она уже полностью дописана и не нуждается в дополнении. 5. Помнить о приведенных выше четырех правилах. Получать удовольствие от работы на общее благо и помнить, что все опубликованные статьи сохранятся для потомков. Успех Wikipedia доказал успешность такого подхода. Статистика энциклопедии поражает: 2,5 миллиарда запросов в месяц и 200 языковых разделов. Согласно опросам, «Википедией» ежедневно пользуются 2,5 % от числа всех пользователей Интернета. В 2006 году бюджет wikipedia.org составил порядка 700 тысяч долларов. Источник дохода – фонд «Викимедиа» и пожертвования пользователей. Впрочем, иногда «Wikipedia» всетаки подвергается нападкам со стороны критиков. По их мнению, слабым местом энциклопедии остается угроза со стороны вандалов. Но движок Wiki вместе с лозунгом «чинить легче, чем ломать» себя полностью оправдал. Журналисты «New-York Times» даже провели простой эксперимент: они стерли несколько страниц, а в некоторых статьях просто изменили даты. В течение часа все внесённые ими изменения были исправлены.
Wiki-сообщество «Википедия» – это не только хранилище информации, но и сообщество людей, работающих над энциклопедией. На портале существует своя иерархия. Наивысшую позицию в ней занимают «Бюрократы». Они наделены правами переименовывать участников, делать их администраторами и ботовладельцами. В русской «Википедии» на данный момент существует три бюрократа. Администраторам позволено удалять страницы, временно защищать статьи от изменений, блокировать активность других пользователей, если те нарушают правила.
№2, февраль 2007
Родственные проекты О фонде «Викимедиа», развивающем и спонсирующем свободную энциклопедию, я уже говорил. Также этот фонд поддерживает ряд других сайтов: n «Викитека» (http://ru.wikisource.org/ wiki) – онлайн-библиотека. Книги, руководства. n «Викисловарь» (http://ru.wiktionary.org/ wiki) – собственно словарь. n «Викиновости» (http://ru.wikinews.org/ wiki) – новостной интернет-портал. n «Викицитатник» (http://ru.wikiquote.org/ wiki) – цитаты известных писателей, государственных деятелей, крылатые фразы. n «Викисклад» (http://commons.wikimedia. org/wiki/) – сайт, на котором хранятся мультимедийные файлы, сопровождающие статьи на указанных выше ресурсах. Выше перечислены все проекты, которыми занимается фонд «Викимедиа». Но есть ресурсы, к нему отношения не имеющие, однако созданные под влиянием популярности «Википедии».
Вот лишь некоторые из них:
n «Абсурдопедия» (http://absurdopedia. wikia.com) – шуточная энциклопедия, созданная ради смеха. В ней обсуждается то же, что и в «Википедии», только с саркастической точки зрения. n «Анархопедия» (http://rus.anarchopedia. org) – энциклопедия для анархистов. n «Викизнание» (http://www.wikiznanie. ru) – использует более свободную лицензию BSD. Материалы могут быть свободно использованы в других изданиях, которым в свою очередь позволено изменить лицензию на любую другую, например на GNU FDL. В «Викизнании» допускается отклонение от нейтральной точки зрения, разрешены рассуждения о чем-либо. То есть, если wikipedia.org основывается исключительно на фактах, здесь вы можете прочитать текст вроде «Оружия четвертой мировой войны». n «Открытая энциклопедия» (http:// open-site.org) – контролируется редакторами, самостоятельно решающими, публиковать статьи от авторов или нет.
Что касается ботовладельцев – Впрочем, участники не только это участники, которые имеют воз- выясняют между собой отношения можность использовать специальные (без чего при огромном количестве скрипты для осуществления рутинных «википедистов» не обойтись), но и друопераций. желюбно общаются. Распределение участников по Для этого есть форум и специальиерархии необходимо и для решения ные IRC-каналы. Впрочем, составитеспорных вопросов. Для этого есть не- ли энциклопедии сетевыми разговосколько путей. рами не ограничиваются и регулярно Первый – голосование, которое встречаются в реальном мире. обычно проводится при утверждеЕжегодно проводится междунании стандарта написания. Например, родная встреча участников портала «Фолклендские» или «Мальвинские» под названием «Викимания». На этой острова. Естественно, вариант, на- конференции, кроме неофициального бравший большее количество голосов, общения, обсуждаются текущие пробудет утвержден. блемы портала, а также ведутся разВо время разрешений личных кон- говоры о новых идеях и разработках. фликтов привлекаются администра- В 2005 году местом проведения «Викимании» стала Германия, в 2006 готоры. Например, в случаях, когда воз- ду – США. никает спор авторов статьи на одну Регулярно проходят «Викивстреи ту же тему, посредник выбирает луч- чи» – мероприятия, на которые собираший вариант для публикации. ются участники проекта из близко расИ в совсем уж крайних случаях со- положенных населенных пунктов. зывается арбитражный комитет, состоящий из наиболее опытных и уваПри написании статьи были использожаемых «википедистов». Бюрокра- ваны материалы с портала wikipedia.org. ты и администраторы, совещаясь, Редактор рубрики выносят свое решение по спорному Дмитрий Мороз вопросу.
83
web
Работаем с MediaWiki Посмотрел, Подумал, Поправил. Три Правила при работе с wiki
Евгений Балдин Одно из удивительных свойств жизни – самоорганизация. MediaWiki – это механизм, который превращает старые-добрые статичные тексты в «живые», постоянно развивающиеся хранилища информации. 84
web
П
ожалуй, вряд ли найдётся челоMediaWiki под держивает про век, владеющий информацион- странства имён (namespaces). Наприными технологиями, и в то же мер, все имена пользователей в руссвремя не слышавший о существова- коязычной Википедии регистрируютнии wiki. Wiki – это простая в освоении ся в пространстве имён «Участник:». гипертекстовая среда. Технология поз- MediaWiki поддерживает механизм воляет легко организовывать взаимо- категорий, что позволяет организодействие между людьми путём созда- вывать страницы по темам. А так как ния «живой документации». Наиболее сами категории также являются спеизвестным и масштабным примером циально оформленными страницами, применения wiki-технологий на сегод- то можно создавать сложные иерарня, безусловно, является Википедия, хические структуры. российский сегмент которой доступен Wiki-идею что, «Всё есть статья» по адресу http://ru.wikipedia.org. развивает наличие механизма шабМесто MediaWiki в цепочке Цветок подсолнуха – официаль- лонов (templates). Шаблоны – это бло«информация» ↔ «Весь Мир» ный логотип MediaWiki. Двойные квад- ки текста из специальным образом соратные скобки на заднем плане сим- зданных статей, которые динамичесволизируют синтаксическое выраже- ки подгружаются внутри других стание для создание гиперссылки внут- тей. Шаблоны вызываются с помори Wiki. щью двойных фигурных скобок: {{имя Результат вызова шаблона {{Сторонник Говорить о wiki можно безгранично. шаблона}}. свободного ПО}} в русскоязычной Сегодня речь пойдёт о движке ВикипеMediaWiki позволяет пользоваться Википедии дии – MediaWiki. множеством стандартных HTML-тегов. MediaWiki появился благодаря не- Кроме упомянутого также имеется на- стройки таблицы стилей (stylesheets) мецкому студенту-биохимику Мангу- бор меток для структурной разметки и клиентских JavaScript-скриптов, иссу Манске (Magnus Manske) специаль- текста. За подробностями о правилах полняемых при каждом просмотре. но для замены первоначального perl- вики-разметки лучше всего обратитьдвижка Википедии. В 2002 году Вики- ся к статье из русскоязычной Википе- Системные требования Тра диционно д ля развёртывания педия перешла на новый движок, ко- дии «Википедия:Справка». торый предоставлял дополнительную В MediaWiki встроен механизм за- MediaWiki используется так называефункциональность и лучшую масшта- грузки мультимедийных файлов. С по- мое LAMP-окружение: n L – значит Linux. Несмотря на то, бируемость, что положительно сказа- мощью LaTeX MediaWiki поддерживает что для использования рекомендулось на развитии обоих программных отображение математических формул, ется Debian GNU/Linux, MediaWiki продуктов. В 2003 году появилось на- и многое из того, что может LaTeX, наможно запустить как и на BSD, Sun звание движка MediaWiki и офици- чиная от изображения шахматных парSolaris, Apple MacOS X, так даже и альный логотип. Появление собс- тий и нотных записей, заканчивая хина Microsoft Windows. твенного имени и логотипа означало, мическими формулами и сложными n A – значит Apache. В качестве что MediaWiki стал самостоятельным графами. веб-сервера следует использои независимым от Википедии програмВсе действия с контентом записывать Apache, хотя есть информамным продуктом. ваются и в любой момент возможно ция, что для этой цели можно исБлагодаря свободной лицензии возвращение к любой из предыдущих пользовать и другие веб-серверы, GPL, а так же существованию Ви- версий. Восстановить последнее конв частности IIS 6.0. кипедии, MediaWiki на текущий мо- систентное состояние документа посn M – значит MySQL. Рекомендуемая мент – одно из самых популярных ре- ле намеренной или случайной порчи версия MySQL 4.0, хотя можно рашений для создания гипертекстовых информации много проще, чем осуботать и с 4.1/5.0. Чтобы в качестwiki-сред. ществить эту порчу. ве хранилища данных воспользоMediaWiki поддерживает разграваться возможностями PostgreSQL, Возможности MediaWiki ничение пользователей на группы потребуется установить версию Ссылки внутри гипертекстовой среды и простейшие механизмы ограничеMediaWiki 1.8 – текущая стабильная при использовании MediaWiki созда- ния доступа. Пользовательский интерверсия. Поддерживается версия ются с помощью двойных квадратных фейс можно отредактировать на леPostgreSQL начиная с 8.1, требуетскобок. Например, текст [[Википедия: ту. Это реализовано через редактися предустановка plpgsql и tsearch2. Установка MediaWiki]] внутри русско- рование статей в пространстве имён Следует также учитывать, что подго сегмента Википедии представляет «MediaWiki:». Для этого пользователь держка PostgreSQL добавлена отиз себя ссылку на краткую одноимён- должен обладать необходимыми приносительно недавно и не оттестиную статью по установке MediaWiki. вилегиями. Как правило, таких пользорована, хотя возможность замены В названиях статей разрешены про- вателей называют администраторами. MySQL более продвинутой СУБД белы и различные знаки препинания Обычный же пользователь может довольно заманчива. поменять интерфейс с помощью наза некоторым исключением.
№2, февраль 2007
85
web поэтому самостоятельная установка пакета сводится к копированию исходников, взятых, например на http:// sourceforge.net/projects/wikipedia, в выбранную директорию (в дальнейшем эта директория будет упоминаться как «wikidir»). Последняя стабильная версия MediaWiki на 1 января 2007 года – 1.8.2. # > # > # > # >
Установка PHP - необходима версия не ниже 5-й sudo apt-get install php5 Распаковка tar -xvzf mediawiki-1.8.2.tar.gz Перенос исходников в выбранную директорию mv mediawiki-1.8.2 "wikidir" Выясняем, под каким пользователем выполняется Apache ps aux | grep apache | cut -f1 -d' ' | sort | uniq
root www-data
Заглавная страница при первом обращении к MediaWiki до настройки
n P – значит PHP или Perl, реже Python. Начиная с версии 1.7 MediaWiki требует PHP версии не ниже 5 (рекомендуется 5.1). Если же нет возможности перейти на пятую версию PHP с четвёртой, то придётся воспользоваться более старой версией MediaWiki – 1.6. Для просмотра с пользовательской стороны потребуется более-менее современный веб-браузер. MediaWiki не простая система и вполне может оказаться, что для небольших wiki-сайтов лучше походят другие wiki-решения, например, UseModWiki. Официальный сайт UseModWiki расположен по адресу http://www.usemod.com/ cgi-bin/wiki.pl. Cледует обратить внимание на другие CMS, если больше интересует безопасность и гибкое разграничение полномочий, нежели удобство в создании и наполнении сайта.
Установка В качестве базовой операционной системы рекомендуется дистрибутив Debian GNU/Linux. Установка в среде MS Windows рекомендуется только для очень продвинутых пользователей, пошаговое руководство для которых изложено в статье Newcomers_guide_to_installing_on_Windows на http://meta.wikimedia.org. Для стабильной ветки Sarge (верно на 1 января 2007 года) пакет mediawiki доступен только из сторонних apt-репозиториев, например, с Debian Backports (http://www.backports.org). В пока ещё тестовую ветку Etch пакет mediawiki версии 1.7 включён уже по умолчанию – eго надо только установить. # Установка MediaWiki > sudo apt-get install mediawiki1.7 mediawiki1.7-math
Установка пакета автоматически потребует установки PHP5. В дальнейшем, если это не оговорено особо, предполагается, что в качестве базы выбран дистрибутив Debian GNU/Linux и вся установка идёт на полностью доступном администратору компьютере. Ничего не запрещает установить MediaWiki самостоятельно, например, для того чтобы вместо MySQL в качестве хранилища воспользоваться PostgreSQL. MediaWiki написан на PHP,
86
# Даём возможность Apache управлять директорией > chown -R www_data:www_data "wikidir"
О том, куда были перенесены исходники, следует уведомить Apache. Например, положив в /etc/apache2/conf.d/ файл mediawiki.conf со следующим содержанием: # Сопоставление физической директории и пути в URL Alias /wiki "wikidir" # Доступ по умолчанию <Directory "wikidir"> Options +FollowSymLinks AllowOverride All order allow,deny allow from all </Directory> # доступ к некоторым директориям следует ужесточить <Directory "wikidir"/config> Options -FollowSymLinks AllowOverride None </Directory> <Directory "wikidir"/images> Options -FollowSymLinks AllowOverride None </Directory>
Теперь можно «обратиться» напрямую к MediaWiki. Если всё устанавливается локально, то адрес обращения http://localhost/wiki. Заглавная страница предлагает для начала настроить MediaWiki. После перехода к странице настройки укажите название создаваемой wiki, язык интерфейса (русский язык присутствует), лицензию, под которой по умолчанию будет публиковаться информация (очень важно в случае публично открытых wiki), имя и пароль первого администратора (например, так и назвать wiki), а также политику авторизации. Последним пунктом идёт настройка базы данных. Перед тем как нажать заветную кнопочку «Install MediaWiki!», надо соответствующим образом подготовить хранилище данных. На текущий момент можно выбирать между MySQL и PostgreSQL. В обоих случаях создайте пользователя, под которым будет работать MediaWiki, например, wikiuser и базу данных, куда будут складироваться данные, например, wikidb.
MySQL MySQL было первым и остаётся на текущий момент основным хранилищем для MediaWiki.
web # > # >
Установка MySQL (рекомендуется версия старше 4.0) sudo apt-get install mysql-server Установка phpMyAdmin для администрирования MySQL sudo apt-get install phpmyadmin
При установке MySQL по умолчанию пароль у суперпользователя root отсутствует. Поэтому первое, что сделайте – установите его, например, с помощью программы phpMyAdmin. Если установка локальная, то для этого достаточно обратиться в раздел «Изменить пароль» по адресу http://localhost/phpmyadmin. Заходя без пароля первый раз под пользователем root, выберите язык интерфейса. Далее создайте пользователя wikiuser, базу wikidb и дайте права этому пользователю на create, select, insert, update, delete и lock tables в пределах базы данных wikidb. Те же действия можно проделать с помощью утилит mysqladmin и mysql.
PostgreSQL
Поэтому для увеличения производительности PostgreSQL необходимо соответствующим образом перенастроить. Для возможности полнотекстового поиска (поиск документа на основании содержимого этого документа) по страницам wiki необходимо добавить модуль tsearch2 (http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/): > # # > # >
sudo apt-get install postgresql-contrib-8.1 Инициализация механизма полнотекстового поиска tsearch2 (путь до tsearch2.sql относительно директории PostgreSQL) psql -U "супер"wikidb -f contrib/tsearch2.sql Подсоединяемся к wikidb под суперпользователем psql -U "супер" wikidb
# Смотрим, какие таблицы были созданы wikidb=> \d Список отношений Схема | Имя | Тип | Владелец --------+--------------+---------+---------public | pg_ts_cfg | таблица | "супер" public | pg_ts_cfgmap | таблица | "супер" public | pg_ts_dict | таблица | "супер" public | pg_ts_parser | таблица | "супер" (записей: 4)
Экспериментальная поддержка PostgreSQL появилась в MediaWiki относительно недавно, с версии 1.7 и до сих до# Разрешение на доступ к таблицам для wikiuser wikidb=> GRANT SELECT,UPDATE ON pg_ts_cfg TO wikiuser; статочно не оттестирована. Если MySQL среди свободных wikidb=> GRANT SELECT ON pg_ts_parser, pg_ts_dict, ↵ баз данных считается самой «популярной», то PostgreSQL pg_ts_cfgmap TO wikiuser; по праву носит звание самой «продвинутой». Для нормальной работы требуется установить PostgreSQL версии На момент написания статьи последняя версия MediaWiki не ниже 8.1. При работе с базой данных лучше выполнять 1.8.2 без модификации при работе с PostgreSQL не позволявсе необходимые действия из-под обычного пользователя. ла организовать полнотекстовый поиск по русским словам Для этого проще всего завести в PostgreSQL пользователя (баг № 8470 на http://bugzilla.wikimedia.org). Для исправления с именем, совпадающим с рабочей локальной учётной за- этой ошибки необходимо в файле language/Language.php найти функцию stripForSearch и, например, добавить внаписью. Пусть для определённости это имя будет «супер»: чале простую проверку на базу данных: # > # # # >
Установка базы данных (в разных системах по-разному) sudo apt-get install postgresql-8.1 Создание учётной записи суперпользователя (предварительно настраивается sudo для возможности исполнения команд под пользователем postgres) sudo -u postgres createuser
Enternameofrole to add: "супер" Shall the new role be a superuser? (y/n) y CREATE ROLE
# > # >
Установка PHP-драйвера sudo apt-get install php5-pgsql Создание пользователя для wiki createuser -U "супер"-S -D -R -P -E wikiuser
Enter password for new role: Введите снова: CREATE ROLE
# Создание базы данных > createdb -U "супер"-O wikiuser wikidb CREATE DATABASE # Разрешение на использование процедурного языка plpgsql > createlang -U "супер" plpgsql wikidb
Если имя учётной записи суперпользователя совпадает с именем, под которым вы работаете, то ключ -U и имя после него можно опускать. Кроме упомянутого, при совпадении учётных записей в системе и в базе данных PostgreSQL по умолчанию для локальных подсоединений работает доступ без пароля (механизм ident sameuser в pg_hba.conf). Следует учитывать, что PostgreSQL сконфигурирован так, чтобы можно было работать в условиях жёсткой нехватки ресурсов.
№2, февраль 2007
function stripForSearch( $string ) { global $wgDBtype; if ( $wgDBtype != 'mysql' ) { return $string; } …
Это уже поправлено в SVN-версии. PostgreSQL следует ставить пока только как экспериментальное хранилище, так как упомянутая ошибка к сожалению пока не единственная. Замечание: в PostgreSQL версии 8.2 входит модуль tsearch2, который полностью поддерживает UTF-8, поэтому можно инициализировать базу данных командой initdb с ключиком --locale=ru_RU.UTF‑8, что позволяет прозрачно работать с unicode-данными. В с ё, те п е р ь PostgreSQ L го то в д л я ус т а н о в к и MediaWiki. Возможно, придётся подправить специфичные для PostgreSQL параметры, которые по умолчанию соответствуют стандартным установкам.
Настройка После того, как выбрано хранилище, указана база данных wikidb, пользователь wikiuser и пароль, можно нажать заветную кнопочку «Install MediaWiki!». Если всё пройдёт нормально, то в директории «wikidir»/ config будет создан файл настройки LocalSettings.php, который следует переместить в родительскую директорию, то есть в «wikidir».
87
web n $wgLogo – помещает в левом верхнем углу личный логотип вместо стандартного, который сам же себя и предлагает заменить. Следует разместить в доступном месте или загрузить (после разрешения загрузки) картинку размером 135x135 пикселей. Переменная $wgFavicon позволяет аналогичным образом настроить иконку в адресной строке браузера. n $wgEnableUploads – разрешает (true)/запрещает (false) загружать файлы на wiki. Если на сайте кроме текста надо хранить картинки, звуковые файлы, презентации, pdf‑тексты и тому подобное, то загрузку следует разрешить.
Cтраница настройки
При загрузке контролируется формат файла, в частности по расширению. Чтобы отменить контроль по расширению, приравняйте переменную $wgCheckFileExtensions значению false. Можно пойти по пути разрешения каких-то определённых расширений. Список разрешённых форматов хранится в массиве $wgFileExtensions. По умолчанию массив инициализируется следующим образом: $wgFileExtensions = array('png', ↵ 'gif', 'jpg', 'jpeg');
Окно phpMyAdmin
Для пущей безопасности настоятельно рекомендуется удалить директорию config сразу после установки Wiki. Дальнейшая настройка будет частично состоять из правки файла
88
В противоположность списку разрешённых расширений есть список запрещённых, который хранится в $wgFileBlacklist. Значение по умолчанию можно посмотреть в файле includes/DefaultSettings.php. Переменная $wgMaxUploadSize ограничивает размер загружаемого файла. По умолчанию она равна 100 Мб, что обеспечивает все разумные потребности, если бы PHP само по себе также не имело бы переменную, ограничивающую объём загрузки. Найдите файл настройки php.ini и исправьте upload_max_filesize} до разумного предела (значение по умолчанию 2 Мб). Учитывайте, что файлов может быть несколько. В Debian искомый файл для Apache2 находится в директории /etc/php5/ LocalSettings.php, который представ- apache2/. ляет собой набор инициализируемых Переменная $wgUploadSizeWarning переменных. устанавливает предел на размер файОсобый интерес заслуживают сле- ла, после которого при «закачке» выдующие настройки: даётся предупреждение.
web n $wgDefaultSkin – выбор «декорации». Так как MediaWiki предоставляет пользователю графический интерфейс к редактированию и управлению содержимого сайта, то очень много внимания, можно сказать даже излишне много, уделено художественной «отделке» этого интерфейса. По умолчанию доступны четыре стандартных варианта: «standard», «nostalgia», «cologneblue» и «monobook». Если этого мало, то можно выбрать любую представленную в специальной галерее http://meta.wikimedia.org/ wiki/Gallery_of_user_styles. Вариантов настройки интерфейса столько, что по этому вопросу можно написать отдельную книгу. Лёгкость изменения внешнего вида привела к тому, что фактически всё, что можно было в рамках этого механизма настроить, уже реализовано в виде готовых стилей и расширений. Надо только найти и выбрать подходящие. При смене «декорации» по умолчанию очистите кэш, иначе страничка при повторном отображении будет выглядеть неправильно. Это можно сделать с помощью добавления в конце адресной строки пары параметр-значение [?|&]action=purge. Знак вопроса или логическое «И» добавляется в зависимости от того, единственная ли эта в адресной строке пара параметрзначение или нет. n $wgUseTeX – по умолчанию эта возможность отключена. Есть мнение, что большинству она не нужна. Но если общение идёт не только на русском, но и на языке математики и логики, то установка этой переменной в состояние true – это решение. Удивительно, как много можно объяснить с помощью формул и насколько они компактнее естественного языка. Чтобы эта возможность заработала, необходим дистрибутив LaTeX (исполняемые файлы latex, dvipng) для трансляции формул в TeX-нотации. Так же, если MediaWiki устанавливается из исходников, необходимо собрать исполняемый файл texvc. Для этого зайдите в директорию «wikidir»/math и выполните команду «make». Для сборки требуется OCaml более поздней вер-
№2, февраль 2007
Wiki сразу после установки
Различие возможностей у администратора и пользователя. Оба могут редактировать статью, обсуждать её, посмотреть историю изменений, переименовать и установить «сторожок» на случай изменения страницы, но только администратор может удалить и заморозить страницу
П о д р о б н е е о т о м , с ч е г о н а сии, чем 3.06 (http://caml.inria.fr), и, есчать, рассказано на сайте WikiMedia тественно, GNU make. Texvc – работает только с формула- ht tp://meta.wikimedia.org в с татье ми. Тот же автор (Tomasz Wegrzanowski) «MediaWiki_extensions». создал более общий продукт WikiTeX Для бэкапа необходимо сохранять (http://www.wikisophia.org), который дамп базы данных и «wikidir», в котос помощью LaTeX дополнительно к ма- рой помимо исходников MediaWiki хратематике позволяет отображать гра- нятся загружаемые файлы. Не совфы различной сложности, химические сем понятна такая логика в свете того, формулы, ноты, шахматные диаграм- что файлы, так же как и тексты, можно хранить в базе данных. Для бэкапа мы и многое другое. Перечислена только малая часть базы в случае MySQL можно воспольиз имеющихся настроек и возмож- зоваться утилитой mysqldump, которая ностей. подобна давно входящей в поставку Вы можете сами создать нехвата- PostgreSQL программе pg_dump. ющий элемент разметки, графические Если по какой-то причине необхоэлементы или более глобальное рас- димо удалить MediaWiki, то для этоширение наподобие WikiTeX. го надо удалить саму директорию
89
web «wikidir» и базу данных. Удалить базу в случае MySQL можно через phpMyAdmin, а в случае PostgreSQL проще всего воспользоваться командой dropdb.
Использование MediaWiki
Тестовая Wiki-страничка. Так выглядит результирующая страничка
Всё, теперь можно набирать гипертекст. При использовании MedaWiki настоятельно рекомендуется регистрироваться (ссылка «Представиться системе» в правом верхнем углу). В этом случае появляется доступ к обширным индивидуальным настройкам и возможностям. Администраторы (как минимум один администратор создаётся в процессе настройки MediaWiki) отличаются от обычных зарегистрированных пользователей тем, что они имеют право удалять и «замораживать» (запрет на изменение) уже имеющиеся статьи. Вместе с возможностью блокировать пользователей это позволяет эффективно управлять рукотворным хранилищем знаний. Базовые правила разметки подробно изложены в статье «Википедия: Как править статьи», представленной на российском сегменте Википедии (http://ru.wikipedia.org). Исчерпывающее руководс тво пользователя можно найти в статье «Help:Editor» на сайте WikiMedia (http://meta.wikimedia.org). Выбрали для себя подходящие настройки (ссылка «Мои настройки» сверху)? Теперь можно набирать гипертекст. Для начала следует поискать, а не было ли уже набрано чего-то подобного – строка «Поиск» в панели навигации слева. При выборе кнопки «Перейти» MediaWiki пытается перенаправить на статью с набранным в строке поиска именем. Если этого сделать не удаётся, то статью предлагается создать. Простая структурная разметка позволяет разбивать текст на разделы: ==Гиперссылки== * Wiki - это [[гипертекст]]. * А это [http://www.samag.ru внешняя ссылка]
Тестовая Wiki-страничка. Так она выглядит в процессе редактирования
90
Гиперссылки – это конёк wiki. Они позволяют легко набирать документы, вкрапляя в них нестандартные термины без объяснений по ходу текста. Если статья с названием, определённым
web в гиперссылке, отсутствует (ссылка в никуда), то при переходе по ней пользователю автоматически предлагается создать эту страницу. MediaWiki позволяет ссылаться на загруженные ранее (ссылка «Загрузить файл» в панели навигации слева) картинки (страницы в пространстве имён «Изображения») или медиафайлы (пространство имён «Медиа»): ==Тестирование медиа-файла== [[Медиа:mediawiki.ps|mediawiki.ps]] - PostScript file ==Тестирование картинок== [[Изображение:turtle.png]]
Каждому загруженному файлу соответствует собственная статья, которая кроме ссылки может содержать описание файла и лицензию, под которой этот файл распространяется. MediaWiki поддерживает html-подобные теги. Некоторые из тегов повторяют стандартные теги html-разметки, но есть и свои:
Так примерно выглядит «Категория»
==Экранирование Wiki-разметки== <nowiki>[[привет]] </nowiki> ==Тестирование математики== Решение квадратного уравнение <math>ax^2+bx+c=0</math>: <math> x_{1,2}=\frac{-b\pm\sqrt{b^24ac}}{2a}</math>
Ссылки на страницы, находящиеся в пространстве имён «Категория», ведут себя он так как обычные ссылки: [[Категория:Тестовые страницы]]
Ссылки на страницы «Категорий» отображаются в самом конце статьи. Это пространство имён предназначено для создания иерархических указателей. Это специальные страницы, которые кроме своего текста отображают алфавитные списки всех статей, которые ссылаются на них. Так как «Категории» тоже статьи, хоть и специальные, то они могут входить в/включать другие «Категории». Удобен механизм шаблонов: Проверка возможностей {{Поправляйте}}
Двойные фигурные скобки указывают MediaWiki не необходимость загрузить код страницы «Поправляйте»
№2, февраль 2007
Код шаблона {{Поправляйте}} - использует другой шаблон {{Userbox}}
из пространства имён «Шаблон». Шаблоны позволяют упростить набор сложных конструкций – что то вроде функций. Шаблонам также можно передавать внешние параметры.
Послесловие MediaWiki является свободным программным обеспечением. Благодаря этому, а также из-за неразрывной
связи с Википедией недостатка в технической информации по этому вопросу не наблюдается. Официальный сайт http://www.mediawiki.org, посвящённый «движку» MediaWiki, управляется им же. Здесь можно получить подробную информацию об устройстве и особенностях MediaWiki и задать вопрос (Support Desk). Помните, что «Всё есть статья!».
91
книжная полка
QNX/UNIX: анатомия параллелизма Олег Цилюрик, Егор Горошко
Книга от авторов, известных среди русскоязычных пользователей и любителей QNX, посвящена тонкостям создания программ, использующих параллельные вычисления. Авторы, ссылаясь на небезызвестные труды У. Стивенса и Р. Кертена, заранее предупреждают всех читателей, что не пытались пересказать на новый лад ве-
щи, прекрасно описанные до них (IPC, таймеры). В основе книги – стремление уделять минимум внимания тому, о чем уже и так есть исчерпывающая литература, и принцип «черного ящика», когда приводятся примеры того, как «есть на самом деле», а не того, как «должно быть». Последнее особенно актуально из-за специфики официальной технической документации по QNX, которая не всегда однозначно трактует доступность тех или иных возможностей. При этом авторы стараются по возможности избегать привязанности к QNX и обобщить приводимые примеры на другие UNIX-системы (FreeBSD, NetBSD и UNIX-подобная ОС Linux). QNX же была взята за основу, т.к. служит в некотором смысле эталоном в отношении реализованности стандарта POSIX. В книге рассмотрены процессы вообще и, естественно, более подробно – потоки, различные аспекты ра-
боты с сигналами, вопросы синхронизации (приведено и сравнение наиболее применяемых примитивов синхронизации: семафора и мьютекса), а также организация обмена сообщениями. Некоторые особые возможности QNX (связанные с микроядром, управлением ресурсами и т. п.) вынесены отдельно. Очевидно, издание ориентировано на высокий уровень подготовки читателей, что подразумевает их близкое знакомство с классикой, на которую ссылаются авторы. «Официально» книга предназначена в первую очередь для «разработчиков программных приложений» и лишь потом – для «программистов».
n Издательство: n Год издания: n Количество страниц: n ISBN: n Цена:
«Символ-Плюс» 2006 288 5-93286-088-X ≈ 150 руб. Книга предоставлена интернет-магазином books.ru.
Oracle. Оптимизация производительности Кэри Миллсап, Джефф Хольт (перевод П. Шера)
Авторов книги все без сомнений относят к ведущим специалистам мирового уровня в области оптимизации производительности баз данных Oracle. Достаточно лишь сказать, что один из них в свое время стал инициатором появления System Performance Group в Oracle, а позже они вместе создали самостоятельную компанию, за-
92
нимающуюся этими вопросами, а также проводили обучающие курсы. Теперь их бесценный опыт в области оптимизации производительности доступен в виде практического руководства, которое может стать бесценным пособием для многочисленных администраторов БД, уставших от бесчисленных попыток понять, как выжать максимум из очередного набора запросов. Руководство фактически призывает забыть об используемых ранее методах оптимизации и призвано «перевернуть привычные представления» о том, как добиваться лучших результатов. Что характерно, судя, например, по отзывам покупателей Amazon, ему это блестяще удается. Особая ценность заключается в том, что руководство не ограничивается описанием разработанного алгоритма оптимизации, примером решения конкретных проблем в производительности. Оно служит и мощной основой для оптимизации любых систем путем
анализирования причин возникновения задержек. Книга разделена на несколько частей, написанных разным языком: часть ее предназначена для руководителей, которым доступно объясняются преимущества выбранного метода, а часть – для аналитиков по производительности, нуждающихся в технических деталях. Для тех, кто усвоит всю теоретическую часть, предусмотрено и несколько практических примеров. Они взяты из реальной практики, достаточно типичны и интересны. Каждый условно разбит на 5 частей: введение в проблему, определение цели, диагностика и лечение, результаты, мораль.
n Издательство: n Год издания: n Количество страниц: n ISBN: n Цена:
«Символ-Плюс» 2006 464 5-93286-078-2 ≈ 390 руб. Книга предоставлена интернет-магазином books.ru.
книжная полка
Архитектура компьютера. 5-е издание Эндрю Таненбаум
Труд Таненбаума можно отнести к классической компьютерной литературе. Он знаком многим специалистам по вычислительной технике вне зависимости от того, какой более узкой области они отдают предпочтение. И не случайно он снискал славу достойной базы для учебных курсов у преподавателей из разных стран мира.
В основе книги – многоуровневое описание организации компьютера. Для начала приводятся общие сведения об организации компьютерных систем, истории развития архитектуры, типах и семействах компьютеров. Затем следует подробное описание всех выделенных Таненбаумом уровней: цифровой логический (булева алгебра, основные цифровые логические схемы, шины и процессоры), микроархитектуры (с примерами реализации, анализом производительности), архитектуры набор команд (типы данных и команд, форматы команд, адресация), операционной системы (виртуальная память, команды ввода-вывода, примеры ОС), ассемблера. Отдельно вынесены параллельные компьютерные архитектуры, представлен как параллелизм внутри процессора, так и сопроцессоры, мультипроцессоры (UMA, NUMA, COMA), мультикомпьютеры. В отдельной главе собран обширный список дополнитель-
ной литературы по всем рассмотренным вопросам. Если говорить о главных изменениях в пятом издании по сравнению с его предшественником, то стоит отметить появление описания процессоров Intel Pentium 4 и Sun UltraSPARC III, детали которых анализируются во многих главах. Кроме того, появилось и описание микросхемы Intel 8051, распространенной в промышленности. Еще одним важным дополнением стало приложение по программированию на ассемблере, что стало ответом на многочисленные просьбы преподавателей подробнее осветить эту тему.
n Издательство: n Год издания: n Количество страниц: n ISBN: n Цена:
«Питер Пресс» 2007 844 5-469-01274-3 ≈ 703 руб. Книга предоставлена издательством «Питер».
Мифический человеко-месяц, или Как создаются программные системы Фредерик Брукс (перевод С. Маккавеева)
Несмотря на то что впервые эта книга была издана более 30 лет назад, ее содержимое не теряет актуальности и по сей день. Она уже оказала определенное влияние на компьютерную индустрию и все еще популярна, а это редкое явление для столь бурно растущей растущей отрасли, как IT. Автор, Фредерик Брукс, руководил проектом по созданию легендарного семейства компьютеров IBM
№2, февраль 2007
System/360 и сопутствующей операционной системы OS/360. Тогда он заметил, что в мире много программистов и менеджеров, но управляющие крупными проектами по разработке программного обеспечения зачастую не учитывают всех особенностей обеих профессий. Кроме того, в масштабных проектах могут возникать новые проблемы, связанные с разделением труда. Книга – это сборник очерков, в которых Брукс рассказывает о своей практике, в ходе которой ему пришлось столкнуться с рядом таких трудностей и как-то их решить. Стиль изложения необычен – это смесь мыслей и свободных рассуждений автора, анализа предложений других специалистов, описания самого процесса работы над проектом. Благодаря этому, читается
все гораздо проще традиционной технической литературы. Но стоит отметить, что материал хорошо структурирован и чётко изложен. В данном издании (оно было дополнено через 20 лет после публикации оригинального) отдельно представлены все важнейшие утверждения из первоначального труда в сжатой форме (со свежими комментариями), а также добавлена глава с развернутыми ответами на появившуюся за это время критику.
n Издательство: n Год издания: n Количество страниц: n ISBN: n Цена:
«Символ-Плюс» 2006 304 5-93286-005-7 ≈ 250 руб. Книга предоставлена интернет-магазином books.ru.
Обзор книжных новинок подготовил Дмитрий Шурупов
93
подписка на 2007 год
Редакционная подписка для физических лиц n Вы можете оформить подписку
n Вы можете оформить подписку
n Журнал высылается почтой прос-
на любой российский адрес. n При заполнении квитанции обя‑ зательно РАЗБОРЧИВО укажи‑ те фамилию, имя, отчество пол‑ ностью, почтовый индекс и ад‑ рес получателя (область, город, улица, номер дома, номер квар‑ тиры), контактный телефон.
с любого месяца на любой срок. n В графе «Сумма» проставьте сумму за выбранное количество номеров. Стоимость одного номера журнала 150 руб. За 11 месяцев (с февраля по декабрь) – 1650 руб. НДС и почтовые расходы включены в стоимость.
той бандеролью только после поступления денег на расчетный счет и копии заполненного и оплачен‑ ного бланка, отправленной в ре‑ дакцию по факсу: (495) 628‑82‑53 или на элек тронный а д рес: info@samag.ru.
94
подписка на 2007 год Российская Федерация
n Подписной индекс: годовой – 20780, полугодовой – 81655
Каталог агентства «Роспечать» n Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» n Альтернативные подписные агентства: Агентство «Интер-Почта» (495) 500-00-60, курьерская доставка по Москве Агентство «Вся Пресса» (495) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74 ЛинуксЦентр www.linuxcenter.ru n Подписка On-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru
СНГ В странах СНГ подписка принимается в почтовых отделениях по национальным каталогам или по списку номенклатуры «АРЗИ»: n Азербайджан – по объединенному каталогу российских изданий через предприятие по распространению
печати «Гасид» (370102, г. Баку, ул. Джавадхана, 21)
n Казахстан – по каталогу «Российская Пресса» через ОАО «Казпочта» и ЗАО «Евразия пресс»
n Беларусь – по каталогу изданий стран СНГ через РГО «Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10)
n Узбекистан – по каталогу «Davriy nashrlar» российские издания через агентство по распространению печати «Davriy nashrlar» (7000029, г. Ташкент, пл. Мустакиллик, 5/3, офис 33) n Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г. Ереван, пл. Сасунци Давида, д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Сарьяна, 22) n Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29) и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42) n Молдавия – по каталогу через ГП «Пошта Молдовей» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) по списку через ГУП «Почта Приднестровья» (МD-3300, г. Тирасполь, ул. Ленина, 17) по прайс-листу через ООО Агентство «Editil Periodice» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134) n Подписка для Украины: Киевский главпочтамт Подписное агентство «KSS», тел./факс (044)464-0220
Подписные индексы:
20780* 81655** по каталогу агентства «Роспечать»
87836 по каталогу агентства «Пресса России» *
годовой полугодовой
**
№2 февраль 2007
95
СИСТЕМНЫЙ АДМИНИСТРАТОР №2(51), Февраль, 2007 год УЧРЕДИТЕЛИ Владимир Положевец Александр Михалев РУКОВОДИТЕЛЬ ПРОЕКТА Петр Положевец РЕДАКЦИЯ Исполнительный директор Владимир Положевец Ответственный секретарь Наталья Хвостова sekretar@samag.ru Технический редактор Владимир Лукин Главный редактор электронного приложения «Open Source» Дмитрий Шурупов Внештатные редакторы Алексей Барабанов Сергей Супрунов Дмитрий Мороз Аркадий Шаныгин Андрей Шетухин Андрей Гуле РЕКЛАМНАЯ СЛУЖБА тел./факс: (495) 628-8253 Евгения Тарабрина reсlama@samag.ru Верстка и оформление maker_up@samag.ru Дизайн обложки Николай Петрочук По вопросам распространения обращайтесь по телефону: (495) 628-8253 (доб. 120) 107045, г. Москва, Ананьевский переулок, дом 4/2, стр. 1 тел./факс: (495) 628-8253 Сайт журнала: www.samag.ru ИЗДАТЕЛЬ ЗАО «Издательский дом «Учительская газета» Отпечатано типографией ГП «Московская Типография №13» Тираж 15000 экз. Журнал зарегистрирован в Министерстве РФ по делам печати, телерадиовещания и средств массовых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.). За содержание статьи ответственность несет автор. За содержание рекламных материалов ответственность несет рекламодатель. Все права на опубликованные материалы защищены.
96
Как стать обладателем диска, если вы не оформили годовую подписку Что на диске? Архив номеров журнала «Системный администратор» с 2002 по 2006 год, архив электронного приложения «Open Source», дистрибутивы от партнёров.
Как приобрести? 1. В редакции журнала «Системный администратор» по адресу: Москва, метро «Сухаревская», Ананьевский переулок 4/2, стр. 1, в приёмной или в офисе 13. 2. На сайте on-line магазина Linuxcenter.ru.
Сколько стоит? Цена в редакции – 150 рублей. Цена с доставкой по России простой бандеролью – 180 рублей.
Клиенты компании SecurIT получат диск в подарок Компания SecurIT проводит акцию, в рамках которой клиенты, заказавшие Zserver в любой комплектации или более 50 лицензий Zlock, получат диск в подарок в первом квартале 2007 года. Спешите, количество подарков ограничено!
Уважаемые читатели! Обратите внимание, что теперь оформить подписку вы можете не только на полугодие, но и сразу на весь год. Годовой индекс по каталогу «Роспечать» – 20780. Интер-почта – заказ журналов по тел.(495) 500-00-60. Подписка on-line – SetBook.ru. Приобрести новые и старые номера журнала вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
Доставка почтой в любую точку России.