98
Роспечать – 20780, 81655 Пресса России – 87836 Интер-почта – тел. (495) 500-00-60 Так видит журнал читатель, который забыл оформить подписку: ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Так видит журнал читатель, оформивший подписку: НОВОГОДНИЕ КАНИКУЛЫ ЗАТЯНУЛИСЬ БЫСТРО РАСКУПИЛИ ТИРАЖ НЕОЖИДАННО ЗАКОНЧИЛИСЬ ДЕНЬГИ УЕХАЛ В ОТПУСК ПОСЛЕ ОТПУСКА АВРАЛ НА РАБОТЕ №5(30) май 2005 подписной индекс 81655 www.samag.ru Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM Интервью с Ларри Уоллом – создателем языка Perl №5(30) май 2005 подписной индекс 81655 www.samag.ru Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM Интервью с Ларри Уоллом – создателем языка Perl №2(51) февраль 2007 №2(51) февраль 2007 подписной индекс 20780 www.samag.ru Как навести порядок в стойке (из личного опыта) Два канала – роскошь? Резервирование и балансировка трафика во FreeBSD Принципы построения доменов Active Directory Нововведения в Solaris 10: на что обратить внимание админу Как «подружить» сети с пересекающейся адресацией Настраиваем DNS и DHCP с хранением информации в LDAP Создаем интегрированный в AD файл-сервер на базе Samba и FreeBSD Open Source и Classic Games

051 Системный Администратор 02 2007

Embed Size (px)

DESCRIPTION

НОВОГОДНИЕ №2(51) февраль 2007 подписной индекс 20780 www.samag.ru ЗАТЯНУЛИСЬ КАНИКУЛЫ ИДАННО ОТПУСКА ДЕНЬГИ РАБОТЕ НЕОЖ АВРАЛ №2(51) февраль 2007 НА №5(30) май 2005 №5(30) май 2005 подписной индекс 81655 www.samag.ru подписной индекс 81655 www.samag.ru

Citation preview

Page 1: 051 Системный Администратор 02 2007

Роспечать – 20780, 81655Пресса России – 87836Интер-почта – тел. (495) 500-00-60

Так видит журнал читатель, который забыл оформить подписку:

ПОДПИШИТЕСЬ И ЧИТАЙТЕ!

Так видит журнал читатель, оформивший подписку:

НОВОГОДНИЕ

КАНИКУЛЫ ЗА

ТЯНУЛ

ИСЬ

БЫСТРО РА

СКУПИЛИ

ТИРА

Ж

НЕОЖ

ИДАННО

ЗАКОНЧИЛИСЬ Д

ЕНЬГИ

УЕХАЛ В О

ТПУСК

ПОСЛЕ ОТП

УСКА

АВРАЛ Н

А РАБОТЕ

№5(30) май 2005подписной индекс 81655www.samag.ru

Почему MS SQL медленно работает?Ищем причины

Строим защищенную беспроводную сеть:WPA-Enterprise, 802.1x EAP-TLS

Настраиваем UPS под Linux

Как восстановить удаленные файлы под BSD

Что важно знать об IP-телефонии

танавливаем Symantec Antivirus 9.0в корпоративной сети

Эффективно управляем полями пользователей в AD

Контролируем безопасность сетис помощью OSSIM

Интервью с Ларри Уоллом –создателем языка Perl

№5(30) май 2005подписной индекс 81655www.samag.ru

Почему MS SQL медленно работает?Ищем причины

Строим защищенную беспроводную сеть:WPA-Enterprise, 802.1x EAP-TLS

Настраиваем UPS под Linux

Как восстановить удаленные файлы под BSD

Что важно знать об IP-телефонии

танавливаем Symantec Antivirus 9.0в корпоративной сети

Эффективно управляем полями пользователей в AD

Контролируем безопасность сетис помощью OSSIM

Интервью с Ларри Уоллом –создателем языка Perl

№2(

51)

фев

раль

200

7

№2(51) февраль 2007подписной индекс 20780www.samag.ru

Как навести порядок в стойке(из личного опыта)

Два канала – роскошь? Резервирование и балансировка трафика во FreeBSD

Принципы построениядоменов Active Directory

Нововведения в Solaris 10: на что обратить внимание админу

Как «подружить» сетис пересекающейся адресацией

Настраиваем DNS и DHCP с хранением информации в LDAP

Создаем интегрированный в AD файл-сервер на базе Samba и FreeBSD

Open Source и Classic Games

Page 2: 051 Системный Администратор 02 2007
Page 3: 051 Системный Администратор 02 2007

�№2, февраль 2007

в номере

ТЕНДЕНЦИИ

АДМИНИСТРИРОВАНИЕ

Два канала – роскошь? Резервирование и балансировка трафика во FreeBSD

6

Как обеспечить резервирование или распределение трафика при наличии двух каналов в Интернет.

Сергей Супрунов[email protected]

Создаём интегрированный в Active Directory файл-сервер на базе Samba во FreeBSD

�2

На базе сервера, давно устаревшего по критериям Microsoft, вы можете сделать файл-сервер и сервер пе-чати, используя пакет Samba 3.x и операционную сис-тему FreeBSD 6.x. Алексей Бережной

[email protected]

Полезные советы. Утилита find.2�Сергей Супрунов[email protected]

Подключаем несколько локальных сетейс пересекающейся адресацией к одному компьютеру

22

Сети можно «подружить», если вы используете ОС Linux. Андрей Кишкин

[email protected]

Настраиваем DNS и DHCP с хранением информации в LDAP

26

Стоит посвятить достаточное количество времени на изучение принципов работы системы DNS и на на-стройку сервера имен. Сегодня речь пойдет о настрой-ке bind для хранения информации о зонах в базе дан-ных LDAP.

Алексей Барабанов[email protected]

Размещаем пользовательские бюджеты в LDAP. Часть 2

32

Настроив подсистему аутентификации и авторизации на использование LDAP, попробуем работать с ней про-зрачным образом, так же как с файловой базой учет-ных записей.

Василий Озеров[email protected]

Принципы построения доменов Active Directory

38

От понимания сущности AD до создания собственно-го домена. Александр Емельянов

[email protected]

Тонкая настройка Microsoft ISA 200444Известно, что настройки, используемые по умолчанию при установке программного обеспечения, не являют-ся оптимальными. Как можно настроить межсетевой экран ISA 2004, чтобы оптимизировать работу сети?

Андрей Бирюков[email protected]

Проводим мониторинг нагрузки операционной системы Solaris

48

Выявляем «узкие места», препятствующие производи-тельной работе системы. Сергей Косько

[email protected]

Нововведения в Solaris �0: на что обратить внимание админу?

54

Современная версия Solaris 10 содержит большое ко-личество нововведений, что даже бывалые админис-траторы не успевают уследить за всеми появившими-ся возможностями. Алексей Коробкин

[email protected]

Обзор серверного дистрибутива tinysofa60Установить и настроить надежную систему на сервер не такая уж и легкая задача. Упростить ее можно, пра-вильно подобрав дистрибутив и компоненты будущей системы. Сергей Яремчук

[email protected]

Как навести порядок в стойке62Кто из вас, имея в распоряжении серверную, не сталки-вался с проблемой «бороды» из проводов на лицевой стороне стойки? С чего начать наводить порядок?

Даниил Никифоров[email protected]

Боремся с вирусами и спамом с помощью MPP

66

Как с минимальными затратами настроить эффектив-ную систему борьбы со спамом и вирусами, рассылае-мыми по электронной почте? Сергей Яремчук

[email protected]

Open Source и Classic Games72Благодаря энтузиастам сообщества Open Source мно-гие культовые игры получили «вторую жизнь».

Иван Максимов[email protected]

Глобальная сетевая энциклопедия80Гигабайты информации. Ответ на любой вопрос. Сотни тысяч статей на всевозможные темы. Как вы уже дога-дались, речь пойдёт о wikipedia.org.

Илья Александров [email protected]

Работаем с MediaWiki84MediaWiki – механизм, который превращает старые-добрые статичные тексты в «живые», постоянно раз-вивающиеся хранилища информации.

Евгений Балдин [email protected]

70, 7�, 78, 79 BUGTRAQ

СЕРВЕРНАЯ

БЕЗОПАСНОСТЬ

ХОББИ

РЕТРОСПЕКТИВА

WEB

КНИЖНАЯ ПОЛКА92

LiMo Foundation: мобильное будущее с Linux открыто

4

Гиганты мобильной индустрии создали Linux-органи-зацию. Дмитрий Шурупов

[email protected]

Page 4: 051 Системный Администратор 02 2007
Page 5: 051 Системный Администратор 02 2007

�№2, февраль 2007

тенденции

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.

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 года.

Основная причина преобразования ныне функциони-рующей платежной системы – тот факт, что она была со-здана в 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

Page 6: 051 Системный Администратор 02 2007

тенденции

Первая информация об этом союзе появилась еще летом 2006 года, однако только теперь

он принял официальный статус, обрел ясность в своих целях, вопросах, об-щей структуры и ближайших планов.

Цели LiMo FoundationГлавная заявленная цель международ-ного союза – разработка так называе-мой «Foundation Platform», т.е. основан-ной на Linux программной платфор-мы с открытым кодом, предназначен-ной для коммуникационных мобиль-ных устройств.

Чего хотят добиться участники про-екта путем создания «новой, открытой и экономически выгодной платформы на базе Linux»? Об этом они говорят сами в «User Guide to the Foundation» (этот материал, как и другие офици-альные документы LiMo Foundation, доступен в формате PDF на сайте ор-ганизации):n снизить расходы на разработку мо-

бильных устройств;n уменьшить время, необходимое

для выхода на рынок новых мо-бильных устройств;

n минимизировать фрагментацию мобильных Linux-реализаций, ус-корить процессы разработки, ин-теграции и тестирования для но-вых продуктов и услуг;

n создать благоприятный рынок для разработчиков с целью ускорения инноваций;

n обеспечить возможность разграни-чения дизайна, приложений и ус-луг для изготовителей оборудова-ния (OEM), операторов беспровод-ных сетей и независимых продав-цов ПО (ISV);

n предоставить возможность влиять на эволюцию и разработку индуст-риальной платформы.

Внутренняя структура организацииГлавная управляющая роль отводит-ся совету директоров, 13 членов ко-торого выбираются ежегодно. Сове-щания проводятся 4 раза в год. Сле-дующий звеном предстает исполни-тельный совет, ответственный за опе-рационные и стратегические вопро-сы и управляющий тремя последую-щими руководящими элементами, на-

ходящимися на одном уровне. Это со-вет по архитектуре (занимается техни-ческими проблемами, управляет ра-бочими группами), совет по требова-ниям, управление программой орга-низации (возглавляется исполнитель-ным директором).

В LiMo Foundation уповают на сто-ронних разработчиков, которые, вос-пользовавшись SDK, примут актив-ное участие в проекте путем созда-ния различных приложений для новой платформы.

Что будет сделаноПланы у организации наполеоновс-кие, но как все это будет достигнуто? Общее представление об этом имеет-ся уже сейчас.

Весь код, который будет создан LiMo Foundation, формально разделен на 4 категории:n Framework – абстрактный слой,

который предоставит набор про-граммных интерфейсов приложе-ния (API), необходимых для взаи-модействия со всеми функциями ядра (которые не должны зависеть от железа).

LiMo Foundation: мобильное будущее с Linux открыто

Дмитрий Шурупов

25 января 2007 года компании Motorola, NEC, NTT DoCoMo, Panasonic Mobile Communications, Samsung Electronics и Vodafone объявили о формировании организации LiMo Foundation, созданной для поддержки первой в мире глобальной инициативы по созданию платформы с открытым кодом на базе Linux для мобильных устройств.

Page 7: 051 Системный Администратор 02 2007

�№2, февраль 2007

тенденции

Capable) с правом на требование де-нежных отчислений за патенты.

ДиагнозПоявление LiMo Foundation вряд ли можно назвать сенсационным – ско-рее, долгожданным. Новейшая ис-тория знает не один пример попы-ток крупных компаний объединиться на почве бурно процветающей экосис-темы GNU/Linux и Open Source, в том числе и в мобильном мире. Однако, несомненно, в этой области до сих пор еще не возникало сопоставимых по размаху инициатив, и уже хотя бы поэтому данный шаг достоин внима-ния, уважения и поддержки.

Что из всего этого выйдет, покажет время, но я, учитывая очевидность вос-требования (полноценных, унифициро-ванных, готовых к работе, инновацион-ных и тем более поддерживаемых гига-нтами индустрии) решений с открытым кодом на рынке мобильных устройств, склонен считать, что LiMo Foundation сможет со временем внести сущес-твенный вклад в эту отрасль. Может быть, даже произвести в некотором ро-де революцию. Но все это – лишь в пер-спективе... Поживем – увидим.

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.3. http://news.com.com/Mobile+phone+

companies+join+forces+on+Linux/2100-1039_3-6083883.html.

n Plug-in – «подключаемые» к базо-вой структуре дополнительные ме-ханизмы, расширяющие ее функ-циональность (может быть несколь-ко различных механизмов, реали-зующих одну и ту же функцию).

n Общий код, соответствующий за-данной спецификации и реализу-ющий все необходимые для этого функции. Именно его и будут рас-пространять привилегированные члены LiMo.

n Не общий код, состоящий из до-полнительных модулей, в которых может присутствовать реализация каких-то специфичных (например, для данного железа) функций.

Базовый пользовательский интер-фейс приложений будет использовать свободно распространяемые разработ-ки GTK+ (на его основе построена по-пулярная графическая среда для UNIX- и GNU/Linux-систем GNOME).

Среди промежуточного ПО (middle-ware), что будет подготовлено, выделя-ются элементы:n реестр (с набором записей вида

ключ и его значение);n обработка конфликтов (при запро-

сах к разделяемым ресурсам);n обработка событий;n структура безопасности;n телефонная структура;n сетевая структура;n структура обмена сообщениями;n структура мультимедиа;n структура управления цифровыми

подписями (DRM);n база данных (управление данными

по принципу ACID).

Список этот пока не полон и вклю-чает в себя лишь основные компо-ненты.

Правовые аспектыLiMo Foundation пошла по единствен-но верному пути «mixed source» и ре-шила допускать наличие программно-го обеспечения с идеологически проти-воречивыми типами лицензий.

Во-первых, организация по по-нятным причинам постарается «взять максимум» из того, что уже имеется и что адекватно отвечает требовани-ям к итоговому продукту. Соответс-твенно, будет использоваться код из-вестных проектов мира Open Source

(таких, как ядро Linux и библиотека GTK+). Здесь все просто: лицензии ти-па GPL, LGPL и т. п. останутся нетро-нутыми, а лицензированное по ним ПО возьмут для своих целей.

Но ведь проект не обойдется и без написания собственного кода, реали-зующего все то, что FOSS-сообщество либо не сделало вообще, либо созда-ло в виде, не удовлетворяющем спе-цификациям LiMo.

Для лицензирования такого кода будет использоваться новая лицензия, получившая название FPL (Foundation Public License). FPL не требует денеж-ных отчислений за использование ли-цензированного по ней ПО и следу-ет принципу свободы в духе GPL, обя-зывая в случае внесения в код попра-вок возвращать модифицированные исходники. Однако FPL накладыва-ет и сильное (впрочем, логичное) ог-раничение: запрещено в любом виде распространять код тем, кто не состо-ит в LiMo Foundation.

У FPL есть две разновидности, од-на из которых предназначена для об-щего кода (Common Capable), а дру-гая – для не общего (Non-Common Capable).

Кроме того, предусмотрена «под-держка» проприетарных лицензий, что актуально для мобильных уст-ройств. Эта возможность подразу-мевает обязательное представление равных условий для всех членов LiMo Foundation и дальнейшую трансфор-мацию лицензии в FPL (Non-Common

OpenMoko готовит к продаже открытый Linux-смартфонТем временем, начинающая компания из Тайваня OpenMoko планирует в ближай-шее время начать продажи первого Linux-смартфона, созданного исключительно на открытых стандартах.

Смартфон, получивший название Neo1973, был представлен еще в ноябре прошлого года, а начало его продаж за-планировано на февраль.

Ключевая особенность продукта – вся его начинка является программным обес-печением с открытым кодом (Open Source). Устройство было создано при содействии компании FIC (First International Computer), специализирующейся на производстве ма-теринских плат и периферии для ноутбу-ков, ПК и КПК.

«В мире Linux до сих пор никто еще не создавал интегрированного набора программного обеспечения для мобиль-ных телефонов, но теперь мы сделали это», – заявил Шон Мосс-Пультц (Sean Moss-Pultz), менеджер по разработке про-дуктов в FIC.

Открытый Linux-смартфон взаимо-действует с персональным компьютером посредством USB и поддерживает USB-эмуляцию сети для подключения ПК к Ин-тернету через сеть сотового оператора. Ус-тройство оснащено 128 Мб оперативной па-мяти, MicroSD-картой на 64 Мб, 2,8-дюй-мовым сенсорным экраном, возможнос-тью GPS; требует наличия GSM/GPRS-сети для функционирования. Первые 6 месяцев Linux-смартфон Neo1973 будет продавать-ся напрямую FIC по цене в 350 USD.

Page 8: 051 Системный Администратор 02 2007

администрирование

Итак, вы «раскрутили» своего шефа на подключение локаль-ной сети компании ещё к одно-

му провайдеру. Со временем возника-ет желание распорядиться этим «бо-гатством» более рационально, неже-ли определять факт пропадания кана-ла по начинающейся в бухгалтерии па-нике и вручную переопределять шлюз по умолчанию.

Конечно, «академически» правиль-ным решением была бы настройка пол-ноценного маршрутизатора (возможно, даже программно-аппаратного ком-плекса типа Cisco), обеспечивающе-го динамическое регулирование тра-фика на основании такой информа-ции, как доступность того или иного узла, «стоимость» маршрута, требо-вания к качеству обслуживания (се-тевики этот QoS уже в ночных кошма-рах видят). Однако это зачастую свя-зано с необходимостью регистриро-вать собственную автономную систему (AS), настраивать один из протоколов маршрутизации (например, BGP) и т. д. Для небольших компаний такие реше-ния обычно оказываются неоправдан-но дорогими и сложными, да и не каж-

дый провайдер захочет с этим возить-ся, если вы для него – лишь один из ты-сяч клиентов, подключённых по обыч-ному ADSL. Поэтому мы рассмотрим, что можно сделать без взаимодейс-твия с провайдером, имея в своём рас-поряжении лишь машину с установлен-ной FreeBSD, выполняющей роль шлю-за для локальной сети.

Анализ проблемыИтак, в общих чертах задача ясна – нужно обеспечить рациональное ис-пользование двух каналов в сеть Ин-тернет и позаботиться об автомати-ческом резервировании, чтобы рабо-тоспособность сети быстро восста-навливалась при проблемах на одном из каналов.

Чтобы не потерять за деревьями леса, будем считать, что оба канала «приходят» к нашему серверу в виде Ethernet, т.е. подключаются на обычные сетевые карты и настраиваются путём указания IP-адреса самого интерфей-са, адреса шлюза по умолчанию и мас-ки подсети (т.е. как статические мар-шруты). Через третью сетевую кар-ту подключается локальная сеть. Для

определённости в дальнейших приме-рах будем считать, что внешними ин-терфейсами являются rl0 и rl1, а ed0 – внутренний. В зависимости от условий договоров с провайдерами могут воз-никнуть следующие подзадачи:n переключение на более дорогой ка-

нал только на время проблем с де-шёвым;

n направление трафика, чувствитель-ного к задержкам, в более «быст-рый» канал, в то время как весь не критичный к скорости достав-ки пакетов трафик (например, FTP-закачки) заворачивать в «медлен-ный», но более дешёвый канал;

n пропорциональная балансировка нагрузки между каналами, имею-щими сопоставимые по качеству и стоимости характеристики.

Думаю, и без длительных объяс-нений понятно, что как-то влиять мы сможем лишь на тот трафик, который инициируется хостами локальной сети, получающими доступ в Интернет че-рез данный сервер, либо самим сер-вером. То есть мы сможем управлять тем, через какой из каналов будет за-

Два канала – роскошь?Резервирование и балансировка трафика во FreeBSD

На форумах, посвящённых системному администрированию, с завидной регулярностью появляются вопросы о том, как обеспечить резервирование или распределение трафика при наличии двух каналов в Интернете. Ввиду отсутствия однозначного ответа проведём собственное исследование.

Сергей Супрунов

Page 9: 051 Системный Администратор 02 2007

�№2, февраль 2007

администрирование

гружаться запрошенная пользователем страница или «за-ливаться» на удалённый FTP-сервер какой-то файл. А вот трафик, инициированный «снаружи» (например, почтовый или запросы на веб-сервер компании), придётся обслужи-вать на том канале, куда он придёт.

Конечно, используя некоторые приёмы при настройке DNS-зон, например, MX-записи с одинаковым приорите-том, можно в определённой степени влиять и на входящий трафик, но сегодня мы не будем останавливаться на этом вопросе.

Простая маршрутизацияНачнём с простейшей задачи. Допустим, мы подключены к двум провайдерам – «Мегаполис» и «Интерком» (все на-звания здесь и далее вымышлены; любое совпадение с на-именованиями и торговыми марками реально существую-щих компаний случайно). Причём «Мегаполис» предостав-ляет дешёвый трафик внутри сети, но довольно дорогой внешний, в то время как «Интерком» продаёт весь трафик по единой, «средней», цене. Возникает желание весь внут-рисетевой трафик направлять через канал «Мегаполиса», в то время как остальной – через «Интерком».

В этом случае логично в качестве маршрута по умол-чанию (параметр defaultrouter в файле /etc/rc.conf) задать шлюз «Интеркома» (пусть это будет 10.1.1.1; на интерфей-се rl1 будем полагать адрес 10.1.1.2). А задачу выделения трафика на внутренние сети «Мегаполиса» можно решить путём настройки статических маршрутов (при некоторых условиях, о которых читайте дальше):

Постоянная «прописка» маршрута делается в /etc/rc.conf:

Здесь 8x.25y.0.0 – внутренняя подсеть провайдера «Мега-полис». То есть мы прописываем для этих адресов явный маршрут через интерфейс rl0 (для определённости его IP будет 10.0.1.2 со шлюзом 10.0.1.1), подключённый к каналу «Мегаполиса», в то время как для остального трафика ис-пользуется маршрут по умолчанию.

Аналогичного результата можно достичь, используя функцию «форвардинга» файервола ipfw:

Благодаря использованию файервола можно более гиб-ко управлять трафиком, определяя его в тот или иной ка-нал не просто по IP-адресу назначения, но и по целому ряду

других критериев (про-токол, порты источника и назначения, IP-адрес источника, и т. д.). Впро-чем, об этом мы ещё по-говорим.

Особо хочу обратить ваше внимание, что этот метод будет работать только при наличии в со-ответствующем направ-лении (то есть уже за ин-терфейсом) NAT-серве-ра, например, реализо-ванного в ADSL-модеме, – это то самое «особое условие», на которое я ссылался выше. В противном случае провай-дер наверняка будет «рубить» у себя на шлюзе пакеты с IP-адресами, не принадлежащими ему. И уж тем более нет никаких оснований полагать, что схема будет работать при непосредственном использовании «серых» адресов, вроде показанных в примере 192.168.0.0/24 (см. рис. 1).

Да и даже в том случае, если вы – счастливый облада-тель достаточно большого массива реальных адресов, ко-торые без проблем пропускают через себя все ваши про-вайдеры, поставленная задача без NAT-серверов реше-на не будет. Поскольку ответные пакеты будут приходить к вашему серверу в соответствии с правилами маршрути-зации внешних узлов, на которые вы вряд ли сможете ока-зать какое-то влияние. То есть входящий трафик в любом случае будет идти так, как прописано на маршрутизаторах провайдера и выше, а не так, как захочется нам. (Позже бу-дет показано, как можно использовать NAT непосредствен-но на настраиваемой машине, чтобы «форсировать» реше-ние данной проблемы).

Ещё один пример маршрутизацииБолее общий случай рассмотренного примера может ис-пользоваться для балансировки нагрузки на каналы – это заворачивание «половины Интернета» по альтерна-тивному маршруту (с учётом всего сказанного касатель-но NAT-серверов):

Способ довольно грубый, но как аварийное решение вполне годится. Очевидно, варьируя маску «заворачивае-мой» сети и контролируя получающийся результат на бо-лее-менее длительном временном интервале (например, по счётчикам того же ipfw), можно добиться близкого к же-лаемому соотношения трафика в обоих каналах.

Условное перенаправление трафикаЧуть усложним предыдущую задачу. Допустим, что «Интер-ком» предоставляет «внешний» трафик хоть и дешевле, но худшего качества. То есть работать через «Интерком» не совсем комфортно, особенно в часы пик, и это вызы-вает вполне законное возмущение руководящих лиц ком-пании («Мы за Интернет такие деньги платим, а страницы по полчаса открываются»)...

# route add 8x.25y.0.0/16 10.0.1.1

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 Flags Refs Use Netif Expire8x.25y/16 10.0.1.1 UGS 0 2 rl0

static_routes="meganet"route_meganet="-net 8x.25y 10.0.1.1"

# 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)'

# route add 0.0.0.0/1 10.0.1.1

Рисунок 1. Схема с «внешними» NAT-серверами

Page 10: 051 Системный Администратор 02 2007

администрирование

В этом случае можно дополнить показанные в преды-дущем разделе правила форвардинга записями для «осо-бо важных персон»:

В этом примере показано перенаправление на ка-нал «Мегаполиса» всего директорского трафика с адре-са 192.168.0.100 и http-трафика, идущего из бухгалтерии с адресов 192.168.0.128/29. Остальным придётся терпеть, как и раньше, ради процветания родной компании.

Распределение трафика по типуМеханизм форвардинга позволяет делить трафик и по ти-пу. Например, один канал можно использовать для работы с электронной почтой и интернет-страницами, а весь ftp-тра-фик направить во второй канал. В зависимости от режима использования интернет-доступа компанией есть некото-рая надежда добиться таким образом равномерного балан-са нагрузки на каналы и при этом учесть требования отде-льных видов трафика к качеству соединения (процент по-терь, величина задержек и т. д.). Пример приводить не бу-ду – всё и так очевидно.

Помимо форвардинга здесь можно использовать и не-которые «узкоспециализированные» решения. Например, если объём http-трафика достаточно высок, чтобы полно-стью задействовать один из каналов, то можно настроить прокси-сервер таким образом, чтобы он для своей рабо-ты использовал именно этот канал, а второй оставался бы для всего остального. Например, для Squid можно исполь-зовать параметры:

Здесь 10.0.1.2 – IP-адрес на rl0; напомню, что шлюзом по умолчанию у нас является 10.1.1.1. Для полного счастья этого ещё недостаточно (поскольку трафик к «чужим» IP-адресам по-прежнему будет стремиться уйти через шлюз по умол-чанию), поэтому заключительным штрихом будет перена-правление трафика с адреса, к которому мы таким обра-зом привязали Squid, в наш второй канал, скажем, тем же fwd-правилом:

Эта схема будет работать и без последующего NAT-пре-образования, но при условии, что IP-адрес, заданный на rl0 (и к которому мы привязываем Squid) будет из диапазона, выданного нам провайдером, предоставляющим подключе-ние на данном канале. Это даст гарантию, что и входящий трафик будет маршрутизирован должным образом.

Ещё один пример: если один из каналов можно полно-стью выделить под электронную почту, то и почтовый сервер можно заставить работать через «альтернативный» канал, а не руководствоваться установленным шлюзом по умол-чанию. Конфигурация для Sendmail:

Теперь вся исходящая почта будет уходить с указанного адреса – остаётся только пакеты перенаправить в нужный шлюз. (Думаю, не нужно пояснять, что на маршрут входя-щей почты мы можем влиять лишь соответствующей MX-за-писью для нашего домена).

Распределение нагрузки по подсетямЕсли равномерно распределить трафик по типу не удаётся (допустим, 99% всей нагрузки приходится на http-соедине-ния), то можно попытаться «раскидать» трафик внутренних подсетей по разным каналам.

Использование для этой цели fwd-правил очевидно (с той же поправкой на дальнейшую NAT-трансляцию):

Но в данном случае можно использовать распределе-ние нагрузки и на базе NAT, запущенного на данном ком-пьютере (рис. 2).

Например, так это можно осуществить, используя ipfw и два экземпляра natd:

Назначение fwd-правил, думаю, уже пояснять не требу-ется. Решение той же задачи с помощью фильтра pf:

Squid, кстати, тоже умеет использовать отдельные ис-ходящие каналы для конкретных подсетей:

Ну и нужно не забыть про уже набивший оскомину фор-вардинг с соответствующего адреса в альтернативный шлюз. В некоторых экзотических случаях можно попробо-вать запустить два экземпляра прокси-сервера для обслу-живания своих подсетей, но в большинстве случаев это мо-жет оказаться нерационально.

Пропорциональная балансировкаОписанные примеры сравнительно просты и зачастую позволяют «малой кровью» достичь желаемого эффекта. Но когда трафик носит слишком нерегулярный характер (с утра бухгалтерия какие-то отчёты по электронке шлёт, забывая, как обычно, предварительно сжимать свои фай-лы Excel; под вечер сисадмин начинает качать очередной сервис-пак; в обеденный перерыв со всех отделов подска-

tcp_outgoing_address 10.0.1.2udp_incoming_address 10.0.1.2udp_outgoing_address 10.0.1.2

# ipfw add fwd 10.0.1.1 ip from 10.0.1.2 ↵ to not 192.168.0.0/24 out

CLIENT_OPTIONS(`Addr=10.0.1.2')dnl

ipfw add 4900 fwd 10.0.1.1 ip from 192.168.0.0/25 to any

# natd -n rl0 -p 8668# natd -n rl1 -p 8669# ipfw add divert 8668 ip from 192.168.0.0/25 to any# ipfw add divert 8669 ip from 192.168.0.128/25 to any# ipfw add fwd 10.0.1.1 ip from 10.0.1.2 to any# ipfw add fwd 10.1.1.1 ip from 10.1.1.2 to any# ipfw add divert 8668 ip from any to 10.0.1.2# ipfw add divert 8669 ip from any to 10.1.1.2

nat on rl0 from 192.168.0.0/25 to any -> 10.0.1.2nat on rl1 from 192.168.0.128/25 to any -> 10.1.1.2pass out route-to (rl0 10.0.1.1) from 10.0.1.2 to anypass out route-to (rl1 10.1.1.1) from 10.1.1.2 to any

acl subnet1 src 192.168.0.0/255.255.255.240acl subnet2 stc 192.168.0.128/255.255.255.240tcp_outgoing_address 10.0.1.2 subnet1tcp_outgoing_address 10.1.1.2 subnet2

# 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)'

Page 11: 051 Системный Администратор 02 2007

�№2, февраль 2007

администрирование

кивает http-трафик), то возникает желание поделить всю нагрузку «пополам». Пакетные фильтры pf и ipf предостав-ляют в ваше распоряжение средство балансировки трафи-ка между несколькими внешними интерфейсами: алгоритм round-robin. Рассмотрим пример для pf:

Этим правилом входящий трафик на внутреннем интер-фейсе (т.е. исходящий для пользователей) будет распреде-ляться между интерфейсами rl0 и rl1 с соответствующими шлюзами по алгоритму round-robin (т.е. внешний интерфейс будет меняться циклически – первое соединение будет ис-пользовать rl0, второе – rl1, третье – снова rl0 и так далее). Опция keep state сохраняет состояние, благодаря чему все пакеты в рамках одного соединения будут использовать один и тот же шлюз. В итоге нагрузка будет распределять-ся между двумя каналами – нельзя сказать, что трафик по-делится абсолютно поровну, но при рассмотрении за боль-шой период времени можно считать, что балансировка бу-дет приближаться к этому.

Правда, в данном случае могут возникнуть некоторые проблемы. Например, если некий веб-сервер отслеживает сессию по исходящему IP-адресу, то такая смена шлюза мо-жет привести к тому, что уже после ввода логина/пароля при запросе другой страницы веб-сервер не «узнает» вас и потребует повторной аутентификации. Конечно, привяз-ка сессии к IP-адресу в нынешних условиях широкой рас-

пространённости NAT-трансляции – реше-ние довольно стран-ное, но всё ещё может встречаться (напри-мер, как «второй эше-лон безопасности» в дополнение к ис-пользованию cookies). В pf для решения этой проблемы можно ис-пользовать опцию sticky-address – при её наличии в правиле nat или route-to с опцией

round-robin или random, фильтр будет следить за тем, чтобы все соединения с конкретного IP-адреса попадали на одно и то же правило трансляции или перенаправления.

В ipfw тоже есть возможность реализовать нечто подоб-ное, но на другом принципе. Здесь в правило можно вклю-чить опцию prob N, где N – число от 0 до 1, указывающее ве-роятность, с которой правило будет применяться к пакетам, подходящим по остальным критериям. В паре с действием skipto можно попробовать реализовать нечто подобное:

Правило 1000, имея в своём составе опцию prob 0.4, бу-дет выполняться для всех исходящих пакетов (с точки зре-ния пользователей; для FreeBSD-шлюза это будут входящие пакеты на внутреннем интерфейсе, что и отражается опци-ями in via ed0) с вероятностью 40%. Эти 40% «счастливчи-ков» будут перебрасываться на правило 2000, которым бу-дут отправляться в шлюз интерфейса rl1 (хотя, поскольку это шлюз по умолчанию, можно было бы ограничиться дейс-твием allow). Оставшиеся 60% пакетов продолжат свой путь и правилом 1500 будут переброшены на шлюз интерфей-са rl0. Важной особенностью здесь является наличие оп-ций keep-state – благодаря им под «пробу» будет попадать только первый пакет устанавливаемого соединения, а все остальные пакеты подпадут под действие правила check-state, которое должно быть указано до правила skipto, что-бы избежать «разрыва» уже установленной сессии. Пос-кольку динамические правила сохраняют первоначальное действие (в данном случае forward), то все пакеты соеди-нения будут отправляться через указанный шлюз.

В отличие от балансировки по методу round-robin, здесь есть возможность распределять трафик между интерфей-сами в любой пропорции. Кстати, такой механизм можно реализовать и в pf – используя опцию probability, работаю-щую аналогично опции prob в ipfw.

Проблема резервированияНесмотря на то что резервирование сетевых каналов – од-на из основных задач, ради которых заключаются догово-

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

ipfw add 500 check-stateipfw add 1000 prob 0.4 skipto 2000 ip from any ↵ to any in via ed0ipfw add 1500 fwd 10.0.1.1 ip from 192.168.0.0/24 ↵ to any out keep-stateipfw add 2000 fwd 10.1.1.1 ip from 192.168.0.0/24 ↵ to any out keep-state

Использование мультиплексора ng_one2manyВ качестве особого случая обсуждаемого здесь вопроса можно рассматривать ситу-ацию, когда необходимо (или желательно) соединить несколько машин, входящих в вашу зону ответственности, используя од-новременно несколько сетей разных про-вайдеров. Помимо того, что в каждой точке можно решать задачу автономно, FreeBSD предоставляет ещё одну возможность – использование узла ng_one2many. Этот netgraph-узел позволяет объединить не-

сколько интерфейсов по принципу «один ко многим», когда пакеты с интерфейса, объявленного как «one», по очереди пере-направляются в интерфейсы «many*» (под-держивается также возможность дублиро-вания one-пакетов во все many-интерфей-сы, но сейчас это нам неинтересно). Вхо-дящие пакеты со всех many-интерфейсов собираются в one-интерфейс. Подробнос-ти можно узнать на странице справки man ng_one2many(4), там же приведён пример конфигурации. Таким образом, если на обе-их машинах настроить несколько туннелей

через разные каналы и затем объединить их в ng-узел, то можно удвоить пропускную способность соединения.

К сожалению, сейчас ng_one2many не поддерживает алгоритмы распределе-ния пакетов кроме round-robin («по очере-ди»), так что для настоящего удвоения не-обходимы каналы с одинаковой пропускной способностью. Существуют также пробле-мы с определением работоспособности кон-кретного канала, так что этот метод пока не слишком пригоден как средство обеспече-ния надёжности.

Рисунок 2. Схема с «внутренними» NAT-серверами

Page 12: 051 Системный Администратор 02 2007

10

администрирование

ры сразу с несколькими провайдерами, FreeBSD не предо-ставляет штатных средств решения этой задачи в автома-тическом режиме (по крайней мере, мне их найти не уда-лось). Приходится искать обходные пути.

Например, можно разработать небольшой скрипт, кото-рым будет контролироваться работоспособность канала:

То есть мы просто «пингуем» шлюз на стороне основного провайдера, и если он оказывается недоступен, то:n проверяем работоспособность резервного канала;n перенастраиваем маршрут по умолчанию на шлюз ре-

зервного канала;n оставляем «метку» /tmp/gw.changed, сигнализирующую

о смене шлюза.

При следующем выполнении (например, скрипт можно запускать по cron раз в минуту), если GW1 в норме и есть «метка», то возвращаем основной шлюз на место. Если оба шлюза недоступны, текущее состояние не меняем. Пока-занный пример упрощён (в частности, могут потребоваться перенастройка NAT-сервера и правил файерволов для ра-боты с новым шлюзом), но для понимания принципа рабо-ты достаточен.

Основным (и, видимо, единственным) достоинством этого метода можно назвать прозрачность и сравнитель-ную простоту. Недостатки – определённая инерционность, хоть и небольшие, но всё же непроизводственные затра-ты трафика, ненулевая вероятность ложных срабатываний, особенно при высокой загрузке канала.

Более серьёзной проблемой, чем может показаться на первый взгляд, является выбор ресурса, доступ к ко-

торому будет проверяться. Например, если выбрать в ка-честве такового шлюз или DNS-сервер провайдера, то в случае аварии на внешнем канале провайдера эти ресур-сы будут доступны, и переключение на резервный канал не произойдёт.

Можно пытаться определять доступность некоторого удалённого ресурса (скажем, сервера yandex.ru), указывая с помощью ключа -S команды ping конкретный IP-адрес ис-точника для отправляемых пакетов (понятно, что этот адрес должен «заворачиваться» в нужный интерфейс):

Но и в этом случае могут быть разные «казусы», напри-мер, временная недоступность самого ресурса при нор-мальной работе обоих каналов. Хотя если проверять до-ступность одного и того же ресурса приведённым выше сценарием, то переключения на резервный канал не про-изойдёт, поскольку его работоспособность также не будет подтверждена.

ЗаключениеКак видите, при желании можно решить почти любую задачу. Хотя приходится констатировать, что системе 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.

Отступление про шейперыВопросы регулирования трафика с помо-щью так называемого шейпинга (shaping) не относятся напрямую к теме данной ста-тьи, но всё же о них следует упомянуть.

Шейпинг позволяет распределять тра-фик по различным очередям с различными параметрами (такими как пропускная спо-собность) и приоритетами, позволяя тем самым реализовывать различные полити-ки качества обслуживания. Например, с по-мощью шейпинга можно выделить для кон-

кретной машины внутри сети гарантирован-ную полосу пропускания, повысить приори-тет http-трафика перед ftp-трафиком и т. д.

Реализуется шейпинг, как правило, с помощью файервола. Во FreeBSD это можно сделать либо связкой ipfw/dummynet, либо PF/ALTQ. Зачастую грамотное распре-деление разных типов трафика по разным очередям позволяет заметно повысить ка-чество работы интернет-соединения, при-ближающегося к пределу своих пропуск-ных возможностей.

Multipath в LinuxВ Linux, в отличие от FreeBSD, всё замет-но проще благодаря имеющемуся пакету iproute2. Он предоставляет возможность задавать несколько шлюзов по умолчанию с различным весом, за счёт чего баланси-ровка трафика в любых пропорциях реа-лизуется просто и прозрачно. Более под-робные сведения вы найдёте на страни-цах справки и в дополнительной литерату-ре (ссылки на некоторые материалы смот-рите в конце статьи).

#!/bin/sh

GW1=10.161.193.1GW2=83.221.201.197/sbin/ping -q -c 1 $GW1 > /dev/null 2>&1if [ $? != 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 fielse if [ -f /tmp/gw.changed ]; then /sbin/route change default $GW1 \ && rm /tmp/gw.changed fifi

ping -S 10.0.1.2 yandex.ru

Page 13: 051 Системный Администратор 02 2007
Page 14: 051 Системный Администратор 02 2007

12

администрирование

Лежал без дела в серверной ста-рый сервер с двухпроцессор-ной материнской платой, дву-

мя процессорами Pentium III 450 МГц «на борту» и SCSI-адаптером (80 Мб/с, но все же «скайзи»!), правда, без под-держки функций RAID-контроллера. К моей радости, к материнской плате подошли обычные Non-ECC (то есть без контроля четности) SDRAM-моду-

ли памяти: 4 слота по 256 Мб – всего 1 Гб ОЗУ. А это уже не так плохо. К то-му же после апгрейда других серве-ров у меня скопилось некоторое ко-личество SCSI-винчестеров: шесть дисков (три пары по два одинаковых) размером 18 Гб и два диска разме-ром по 9 Гб.

А тут на основном файловом сер-вере стало заканчиваться свободное

место. Возникло решение: не так час-то используемые файлы, такие как юридическая справочная база данных, коллекцию драйверов и другие подоб-ные «пожиратели пространства», пере-нести на отдельный файл-сервер.

Другая проблема возникла с не-обходимостью использования ста-ринных программ, написанных для DOS-совместимых операционных сис-

Создаём интегрированный в Active Directory файл-сервер на базе Samba во FreeBSD

«Как поступить со старой серверной техникой?» – такой вопрос возникает во многих организациях. На базе сервера, давно устаревшего по критериям Microsoft, вы можете сделать вполне приличный файл-сервер и сервер печати, используя пакет Samba3.x и операционную систему FreeBSD 6.x.

Алексей Бережной

Page 15: 051 Системный Администратор 02 2007

13№2, февраль 2007

администрирование

тем. Как известно, многие из них не работают с сетевыми печатающими устройствами. В лучшем случае от них мож-но добиться корректного вывода на LPT-порт из Windows 2000/XP. А посему просто необходим сервер печати, поз-воляющий подключать сетевые принтеры на порт LPT ко-мандой «net use».

Готовим к инсталляции SambaВыбор операционной системы и планирование конфигу-рации сервера.

В качестве операционной системы я выбрал FreeBSD. Подкупила низкая требовательность к ресурсам вкупе с высокой стабильностью и хорошо продуманной системой инсталляции ПО через коллекцию портов. К тому же она бесплатна, а покупку дополнительной лицензии, скажем, Microsoft Windows 2003 Server для «файлопомойки» вряд ли кто-то одобрит. Версия OS также определилась сразу – 6.1, как самая свежая на тот момент. Ну а раз решено ставить UNIX-систему в качестве файлового сервера для клиентов сети Microsoft Windows, да еще интегрированного в струк-туру каталога Active Directory, то ясно, что без пакета про-грамм Samba не обойтись.

Поскольку винчестеры, которые предполагалось ис-пользовать, были, что называется, «видавшие виды», нуж-но было задуматься о структуре дискового массива. При-няв во внимание тот факт, что купить аналогичные 18 Гб SCSI-винчестеры на замену вышедшим из строя не пред-ставляется возможным, я решил организовать три неболь-ших массива RAID1 (прямое зеркалирование) по 18 Гб каж-дый для хранения данных. В случае выхода одного из зер-кальных дисков из строя это позволит сделать резервную копию данных. А заменять в этом случае лучше сразу оба зеркальных диска, не дожидаясь выхода из строя второго накопителя. Поскольку встроенной аппаратной поддержки RAID в данной материнской плате не наблюдалось, требо-валось сделать программный RAID средствами, доступны-ми в ОС FreeBSD 6.1

Также, несмотря на отсутствие на данный момент необ-ходимости, решил зарезервировать возможность примене-ния дисковых квот на будущее.

Систему установил на первый 9-гигабайтный диск, а файл подкачки размером 2 Гб создал на другом 9-гига-байтном диске, чтобы тем самым повысить быстродействие системы. Остаток пространства на втором 9-гигабайтном диске решил зарезервировать для резервного копирова-ния конфигурационных файлов.

Таким образом, была запланирована следующая орга-низация дискового пространства (см. таблицу).

Начало установкиНаверное, не имеет смысла подробно рассказывать, как ус-танавливать саму операционную систему и как размечать первые два диска. Со всем этим прекрасно справляется программа /usr/sbin/sysinstall. Отмечу только, что, так как мы будем строить на базе оставшихся дисков RAID-мас-сивы, нет смысла выполнять их разметку на этапе уста-новки системы.

После установки операционной системы необходимо сконфигурировать сетевые интерфейсы. Этот процесс на-

стройки был описан в моей статье: «Настраиваем шлюз в Интернет на базе FreeBSD», вышедшей в №12 за 2006 г. Кроме того, с этой задачей прекрасно справится все та же программа sysinstall. После всех настроек наш сервер имеет имя fs, сетевой адрес 192.168.1.3, маску подсети 255.255.255.0. Имя домена: mydomain.ru.

Так как создается дополнительный файл-сервер для хра-нения некритичных файлов, который будет располагаться внутри периметра локальной сети, требования к безопас-ности в данном случае не слишком высокие. Поэтому я не стал устанавливать на эту машину файервол. В то же время хотелось бы иметь возможность назначать права на тот или иной ресурс для каждого пользователя.

Сборка ядра с поддержкой двухпроцессорной конфигурации и дисковых квотПоскольку у нас двухпроцессорный сервер, то для вклю-чения двухпроцессорной поддержки необходимо пересоб-рать ядро с опциями поддержки SMP. Кроме того, я решил включить в ядре заодно и опцию поддержки дисковых квот (на будущее, как я уже писал выше).

Переходим в каталог с конфигурационными файлами для процессоров с архитектурой i386:

Делаем копию файла GENERIC:

открываем файл на редактирование и добавляем следу-ющие строки:

Опцию поддержки двухпроцессорной архитектуры:

Опцию поддержки дисковых квот:

Изменяем параметр ident (это поможет в дальнейшем использовать команду «uname -i» для в качестве «шпар-

Объем Обозначение устройства во FreeBSD Примечание

9 Гб da0 Диск с установленной системой

9 Гб da1Файл подкачки + место для хранения резервной копии конфигурационных файлов

18 Гб da2 Первый дисковый массив RAID1

18 Гб da3

18 Гб da4 Второй дисковый массив RAID1

18 Гб da5

18 Гб da6 Третий дисковый массив RAID1

18 Гб da7

Организация дискового пространства

fs# cd /sys/i386/conf

fs# cp GENERIC fs

fs# vi fs

options SMP

options QUOTA

Page 16: 051 Системный Администратор 02 2007

14

администрирование

галки» при определение наличия мультипроцессорной под-держки в ядре):

Создаем компиляционный каталог:

Эта команда создаст директорию /usr/src/sys/compile/fs и по-местит туда файлы, необходимые для компиляции ядра.

Сохраняем изменения, закрываем файл, переходим в нужный каталог:

и запускаем компиляцию ядра:

(последовательность && означает, что следующая коман-да будет выполняться только после успешного завершения предыдущей), после чего можно идти пить кофе, потому что процесс сборки ядра на подобной конфигурации выполня-ется далеко не так быстро, как хотелось бы.

Вернувшись, перезагружаем систему и смотрим, нор-мально ли работает только что собранное ядро:

Перезагрузку на данном этапе можно было бы и не вы-полнять, поскольку все равно придется перезагружаться после объединения винчестеров в дисковые массивы, но я предпочитаю лишний раз убедиться, что все идет по плану. Кроме того, после перезагрузки будут работать оба процес-сора, что немаловажно для нашего не слишком производи-тельного железа. Обновляем коллекцию портов:

Создание дисковых массивовВ современных версиях FreeBSD есть три способа созда-ния RAID1-массивов:n Старый добрый ccd, издавна присутствовавший

во FreeBSD, но показавшийся, на мой взгляд, доволь-но сложным для решения простейших задач.

n Неплохо отработавший во FreeBSD 4-й ветки vinum. Сов-ременная интерпретация vinum носит название gvinum, чтобы подчеркнуть, что работа современного vinum строится на базе другого продукта: GEOM. Кроме того, сам vinum имеет непрозрачный для понимания конфи-гурационный файл.

n И наконец, сам GEOM – новый программный продукт, имеющий хорошую репутацию и прекрасно работаю-щий в 5-й и 6-й ветках FreeBSD.

Я выбрал GEOM за его простоту и стабильность. Мы бу-дем использовать утилиту gmirror из пакета GEOM для соз-

дания зеркальных массивов. У нас самый простой случай, так как мы объединяем свободные от данных, идентичные винчестеры в простой RAID1:

Итак, у нас созданы на дисках da2, da3, da4, da5, da6, da7 соответствующие метки, указывающие на их прина-длежность к тому или иному дисковому массиву.

Необходимо включить поддержку gmirror. Добавляем в /boot/loader.conf функцию geom_mirror_load=YES и пере-загружаемся.

После перезагрузки проверяем наличие вновь создан-ных псевдоустройств, представляющих собой дисковые массивы:

Теперь можно создать файловые системы на этих раз-делах:

Поддержка ACLТеперь еще одна интересная деталь. FreeBSD, как и все стандартные UNIX-системы, имеет стандартную структуру атрибутов. Что это означает? Это значит, что для одного файла, каталога или другого ресурса можно задать следу-ющие права: права для владельца, права для группы (при-чем владелец файла необязательно должен принадлежать этой группе) и права для всех остальных. Но представьте себе ситуацию, когда над одним файлом работают сразу несколько пользователей, к тому же совершенно из разных групп. Как поступить в этом случае? Выход есть – создать еще одну дополнительную группу, в которую бы входили все данные пользователи, и разрешить этой группе доступ к ресурсу. Вроде бы все ничего, только в стандартных слу-чаях в UNIX существует еще одно ограничение: пользова-тель может входить не более чем в 16 групп (включая груп-пу по умолчанию). А если пользователю необходимо перио-дически работать над 17 аналогичными ресурсами? Вот тут на помощь приходит поддержка Access Control Lists (сокра-щенно ACL), проще говоря, – списков доступа. Это позво-ляет разрешить доступ пользователям из различных групп к одному ресурсу, не включая этих пользователей в допол-нительную группу, так, как это реализовано в операцион-ных системах Microsoft Windows и Novell Netware.

Помимо указанной проблемы, существует и другая причина применения ACL. Это делегирование полномо-чий. В нашем случае сотрудник, ответственный за подде-ржание системы в отсутствие системного администрато-ра, даже не обладая знаниями по операционным системам

fs# gmirror label -v gm0 da2 da3fs# gmirror label -v gm1 da4 da5fs# gmirror label -v gm2 da6 da7

fs# echo geom_mirror_load="YES" >> /boot/loader.conf

fs# ls /dev/mirror

gm0 gm1 gm2

fs# newfs /dev/mirror/gm0fs# newfs /dev/mirror/gm1fs# newfs /dev/mirror/gm2

ident SMP-GENERIC

fs# config fs

fs# cd ../compile/fs

fs# make depend && make && make install

fs# reboot

fs# portsnap fetch && portsnap extract && portsnap update

Page 17: 051 Системный Администратор 02 2007

15№2, февраль 2007

администрирование

семейства UNIX, сможет сам назначать права, используя обычный инструментарий (в данном случае – Проводник Microsoft Windows).

Поддержка ACL по умолчанию включена в ядро GENERIC FreeBSD 6.1. Поскольку при построении наше-го ядра мы ориентировались на ядро GENERIC, нам нужно только включить поддержку ACL для выбранных файловых систем. У нас самый простой случай, потому что мы вклю-чаем поддержку ACL для несмонтированных файловых сис-тем, на которых нет данных. Итак, приступим.

Вводим команду:

На что система нам выдаст ответ:

Аналогично:

Все, теперь можно смело монтировать наши созданные файловые системы.

Монтирование и проверка созданных разделовСоздаем каталоги для монтирования новых файловых сис-тем (в моем случае это были каталоги: /vol0, /vol1, /vol2):

И монтируем файловые системы наших RAID-массивов:

Проверяем:

Запись «acls» показывает, что для указанных файло-вых систем включена поддержка ACL.

Добавляем нужные записи в /etc/fstab:

Установка Kerberos, интеграция с Active DirectoryВ Active Directory для обеспечения единой системы безопас-ности используется протокол Kerberos. Во FreeBSD для его поддержки нужно установить программу heimdal:

Создаем файл /etc/krb5.conf:

И вносим туда следующие строки:

Стоит обратить особое внимание на строки: default_realm = MYDOMAIN.RU и default_domain = mydomain.ru. Они необхо-димы для описания домена, который подразумевается по умолчанию, когда пользователь не указывает его имя в яв-ном виде. Синхронизируем время с контроллером домена:

Я предпочитаю, чтобы время синхронизировалось при каждом старте системы (мало ли из-за чего мог пере-загрузиться сервер, например, из-за длительного отключе-ния питания), для этого добавляем в файл /etc/rc.local строку с командой синхронизации. Следующая команда добавляет команду ntpdate в стартовый файл запуска /etc/rc.local:

Пробуем получить билетик от Kerberos:

fs# /sbin/tunefs -a enable /dev/mirror/gm0

tunefs: ACLs set

fs# /sbin/tunefs -a enable /dev/mirror/gm1

tunefs: ACLs set

fs# /sbin/tunefs -a enable /dev/mirror/gm2

tunefs: ACLs set

fs# mkdir /vol0fs# mkdir /vol1fs# mkdir /vol2

fs# mount /dev/mirror/gm0 /vol0fs# mount /dev/mirror/gm1 /vol1fs# mount /dev/mirror/gm2 /vol2

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# vi /etc/fstab

# Device Mountpoint FStype Options Dump Pass#/dev/da1s1b none swap sw 0 0/dev/da0s1a / ufs rw 1 1/dev/da1s1d /add ufs rw 2 2/dev/acd0 /cdrom cd9660 ro,noauto 0 0

fs# cd /usr/ports/security/heimdalfs# make install clean

fs# vi /etc/krb5.conf

[libdefaults] default_realm = MYDOMAIN.RU clockskew = 300 v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } }

[realms] 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

fs# ntpdate 192.168.1.6

fs# echo ntpdate 192.168.1.6 >> /etc/rc.local

# GMIRROR volume/dev/mirror/gm0 /vol0 ufs rw 1 2/dev/mirror/gm1 /vol1 ufs rw 1 2/dev/mirror/gm2 /vol2 ufs rw 1 2

fs# kinit -p Administrator

Page 18: 051 Системный Администратор 02 2007

16

администрирование

Ответ системы в положительном случае:

После ввода правильного пароля система выдаст ответ:

Если введен неверный пароль, система выдаст сооб-щение:

Если возникли какие-либо дополнительные пробле-мы, нужно более тщательно проверить конфигурацион-ный файл /etc/krb5.conf. С приведенными здесь настрой-ками у меня в сети данная схема работает. Если возник-ли дополнительные трудности, рекомендую книгу «Active Directory для Windows Server 2003. Справочник админис-тратора», авторы Стен Реймер и Майк Малкер, СП ЭКОМ. Москва, 2004 г.

Проверим состояние соединения;

Все. Поддержка Kerberos включена.

Настройка файла переключения служб /etc/nsswitch.confЯ не буду подробно описывать для чего нужен файл nsswitch.conf и какие опции он содержит. Обо всем этом подробнейшим образом можно узнать посредством man nsswitch.conf. Из файла /etc/nsswitch.conf удаляем все, оставим только следующие строки:

Теперь, когда выполнены все необходимые подготови-тельные этапы, можно приступать к установке и настрой-ке Samba-сервера.

Установка SambaИ теперь нам осталось последнее и самое важное: уста-новить пакет программ Samba (вместе с системой печа-ти CUPS) и настроить его. Так как необходима интеграция с Active Directory, мы используем Samba версии 3x (в на-шем случае 3.0.23d).

Устанавливаем Samba из портов:

Появится окно с предложением выбрать нужные опции, которые будет поддерживать наш Samba-сервер.

Я отметил следующие опции (некоторые модули, приве-денные без комментариев, включены с расчетом «на буду-щее», чтобы не пересобирать каждый раз Samba):

После некоторого этапа компиляции появится окно с вы-бором опций для сборки CUPS. Опять же с тем же расче-том «на будущее» я отметил все опции.

После сборки необходимо отредактировать файл /etc/rc.conf на предмет запуска необходимых «демонов» – резидентных программ.

Открываем файл /etc/rc.conf:

И вносим туда необходимые строки:

После чего перезагружаемся и проверяем запущен-ные сервисы:

Настройка системы печати CUPSВесь этап настройки CUPS сводится к редактированию фай-ла /usr/local/etc/cupsd.conf:

Привожу пример своего файла cupsd.conf. Красным цве-том выделены необходимые изменения:

fs# cd /usr/ports/net/samba3fs# make install clean

[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

fs# vi /etc/rc.conf

cupsd_enable="YES" # Unix Pint Systeminetd_enable="YES" # Super Daemon for call some services nmbd_enable="YES" # SMB client for Unix (need for WINS)smbd_enable="YES" # SMB server for Unix winbindd_enable="YES" # WinBIND for Windows autorization

fs# ps aux | grep inetd

fs# ps aux | grep cupsd

root 533 0.0 0.1 1428 952 ?? Is Fri04PM 0:00.06 /usr/sbin/inetd -wW -C 60

root 418 0.0 0.2 4184 2168 ?? Is Fri04PM 0:04.75 /usr/local/sbin/cupsd

fs# ps aux | grep nmbd

root 437 0.0 0.2 5544 2128 ?? Ss Fri04PM 0:30.16 /usr/local/sbin/nmbd -D -s /usr/local/etc/smb.conf

fs# ps aux | grep smbd

root 441 0.0 0.4 9588 4120 ?? Is Fri04PM 0:01.19 /usr/local/sbin/smbd -D -s /usr/local/etc/smb.conf

fs# ps aux | grep winbindd

root 446 0.0 0.3 7036 2788 ?? Ss Fri04PM 0:11.49 /usr/local/sbin/winbindd -s /usr/local/etc/smb.conf

fs# vi /usr/local/etc/cupsd.conf

[email protected]'s password:

kinit: NOTICE: ticket renewable lifetime is 1 week

kinit: krb5_get_init_creds: Preauthentication failed

fs# klist

Credentials cache: FILE:/tmp/krb5cc_0 Principal: [email protected]

Issued Expires PrincipalJan 11 17:03:04 Jan 12 03:03:04 krbtgt/[email protected]

passwd: files winbindgroup: files winbindhosts: files dns

Page 19: 051 Системный Администратор 02 2007

17№2, февраль 2007

администрирование

Коротко прокомментируем:Строка:

указывает, на каком интерфейсе и порту сервер CUPS бу-дет ожидать соединения с интернет-браузером для настрой-ки параметров.

Строки:

разрешают доступ к серверу для настройки только с внут-ренней подсети 192.168.1.*.

Строка:

указывает, что для доступа к веб-интерфейсу управле-ния CUPS будет использоваться шифрованный протокол https.

Перезапускаем CUPS:

Для того чтобы CUPS стартовал автоматически при каждом запуске системы, мы уже добавили строку «inetd_enable=”YES”» в файл /etc/rc.conf.

Далее посредством интернет-браузера подключаемся к адресу: https://192.168.1.3:631. Система предложит при-нять сертификат. Соглашаемся.

В разделе «Администрирование» сервер будет запра-шивать пароль. Вводим логин root и соответствующий па-роль. Все, можно подключать и настраивать принтеры (см. рис. 1, 2).

Возможные проблемы и пути их разрешения:1. На файерволе (если вы все же решите использовать

файервол на этом серврере и/или на рабочей станции) закрыт TCP-порт 631. Соответственно нужно или от-крыть этот порт или использовать другой.

2. Используется прокси-сервер, который не позволяет ин-тернет-браузеру нормально работать c веб-интерфей-сом CUPS. Нужно или отключать прокси или указать в настройках интернет-браузера – не использовать прок-си-сервер для соединения с данным сервером.

3. Не запущен «демон» cupsd. Проверить это можно ко-мандой:

## "$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 for connections from the local machine.Listen localhost:631Listen 192.168.1.3:631Listen /var/run/cups.sock

# Show shared printers on the local network.Browsing OnBrowseOrder allow,denyBrowseAllow @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 Restart-

Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription

Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-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-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUP

S-Add-Class CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>

AuthType Basic Require user @SYSTEM Order deny,allow </Limit>

# Only the owner or an administrator can cancel # or authenticate a job...

<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

Order deny,allow Deny From All Allow localhost Allow 192.168.1.*

Encryption Required

fs# /usr/local/etc/rc.d/cupsd restart

Page 20: 051 Системный Администратор 02 2007

18

администрирование

В ответ вы увидите сообщение:

Если «демон» не запущен, сообщение выведено не бу-дет. Запустить cupsd можно следующим образом:

после чего нужно проверить наличие строчки «cupsd_enable= ”YES”» в файле /etc/rc.conf.

Настройка файлового сервераИтак, наступил решающий момент. Мы настраиваем наш конфигурационный файл Samba – smb.conf.

«Классический» метод настройки данного сервиса за-ключается в копировании файла /usr/local/etc/smb.conf.sample в /usr/local/etc/smb.conf с последующим редактиро-ванием smb.conf в текстовом редакторе:

Но поскольку мы решили идти по пу-ти делегирования полномочий, то все на-стройки будем выполнять через веб-кон-соль настройки Samba – SWAT. Допол-нительный бонус, который мы получа-ем в этом случае, – наличие прекрасной системы помощи при конфигурировании Samba-сервера.

Программа SWAT вызывается посредс-твом супердемона inetd. Мы уже добави-ли строку «inetd_enable=”YES”» в файл /etc/rc.conf для его автоматического за-пуска.

Поэтому всего лишь остается открыть для редактирования конфигурационный файл /etc/inetd.conf:

и раскомментировать в нем следующую строку:

после чего перезапустить «демон» inetd:

Проверяем доступность веб-консоли по 901 порту:

После чего вводим в строке интернет-браузера адрес http://192.168.1.3:901, в ответ на запрос пароля вводим ло-гин и пароль root. Все, мы подключились к серверу Samba через веб-консоль программы SWAT.

Нас интересуют в первую очередь вкладки «GLOBALS» и «WIZARD». Управляя параметрами, приведенными в них, необходимо создать соответствующий конфигурацион-ный файл. Изменения сохраняются при нажатии кноп-ки «Commit». Проконтролировать его содержание можно во вкладке «VIEW» (см. рис. 3, 4, 5).

Приведу пример основной части моего конфигураци-онного файла:

Рисунок 1. Так выглядит раздел «Администрирование» в веб-консоли для настройки сервера CUPS

Рисунок 2. Консоль управления подключенным принтером

fs# killall -1 inetd

fs# sockstat | grep 901

root inetd 533 5 tcp4 *:901 *:*

# 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

fs# ps aux | grep cupsd

root 418 0.0 0.3 4120 2616 ?? Ss Fri01AM 0:06.13 /usr/local/sbin/cupsd

fs# /usr/local/etc/rc.d/cupsd start

fs# cp usr/local/etc/smb.conf.sample ↵ usr/local/etc/smb.conffs# vi usr/local/etc/smb.conf

fs# vi /etc/inetd.conf

swat stream tcp nowait/400 ↵ root /usr/local/sbin/swat ↵ swat

Page 21: 051 Системный Администратор 02 2007

19№2, февраль 2007

администрирование

Процесс создания конфигурационного файла при по-мощи SWAT несколько необычен, но несложен.

В случае возникновения проблем с подключением к SWAT, как и в случае с CUPS, нужно проверить доступ-ность сервера по соответствующему порту (port 901), воз-можно, настроить браузер, чтобы тот не использовал прок-си для адреса файл-сервера, проверить запуск суперде-мона inetd.

После создания нужной конфигурации переходим на вкладку «STATUS» и при помощи кнопки «Restart All» пе-резапускаем «демоны», входящие в пакет Samba 3x (см. рис. 5).

Включаем наш сервер в домен:

Проверим правильность работы WinBIND:

Система должна ответить:

Если мы получили данное сообщение, это означает, что учетная запись компьютера в Active Directory созда-на успешно.

Просмотрим список пользователей и компьютеров Active Directory при помощи команды:

и список групп командой:

Последнее, что мы должны посмотреть, – это аутенти-фикацию в домене:

При ответе:

можно быть уверенным – аутентификация в Active Directory выполнена успешно.

Создание общих ресурсовПоскольку сервер находится внутри периметра локальной офисной сети, куда закрыт доступ всем, кроме пользова-

Рисунок 3. Так выглядит вкладка «GLOBALS» для задания общих параметров

Рисунок 4. Так выглядит вкладка «SHARES», служащая для конфигурации общих папок

fs# net ads join -U ↵ _Domain_Administrator_%_password_of_domain_admin_

Joined 'FS' to realm 'MYDOMAIN.RU'

fs# wbinfo -t

checking the trust secret via RPC calls succeeded

fs# wbinfo -u

fs# wbinfo -g

fs# wbinfo -a _имя_юзера_%_пароль_юзера_

plaintext password authentification succeededchallenge/response password authentification succeeded

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

Page 22: 051 Системный Администратор 02 2007

20

администрирование

телей, находящихся внутри офиса, я решил организовать общие ресурсы следующим образом: создать общие папки \\fs\vol0, \\fs\vol1, \\fs\vol2, сделать их скрытыми, разрешив при этом гостевой доступ. Внутри этих папок создать под-каталоги, а уже на них средствами Windows установить ог-раниченные права. А пользователям подключать сетевые диски командой net use, например:

Что же касается общих принтеров, то с ними вообще не должно возникнуть проблем при подключении коман-дой типа:

Используя вкладки «SHARES» и «PRINTERS» управ-ляющей веб-консоли SWAT, добавляем к своему конфигу-рационному файлу следующие опции:

И снова перезапускаем «демоны» из вкладки «STATUS». Где vol0, vol1, vol2 – необходимые общие ресурсы, а hp_LaserJet_1320_series_192.168.1.15 – общий принтер, созданный для примера.

Все, теперь можно вводить в адресной строке Провод-ника Windows необходимое значение, скажем, \\fs\vol0\, со-здавать каталоги, назначать права и подключать их как се-тевые диски (см. рис. 6).

ЗаключениеИдея использования операционных систем семейства UNIX в сети Microsoft Windows, пусть даже на вспомогательных ролях, всегда вызывала некоторое недоверие скептиков. Однако простота реализации и, главное, возможность де-легирования полномочий, описанные в данной статье, спо-собны пошатнуть устоявшееся мнение о трудности совмес-тного использования UNIX- и Windows-платформ. Наличие таких удобных инструментов управления, как веб-консоли CUPS и SWAT, ACL и возможность управлять правами досту-па из обычного Проводника Windows делают реальным ад-министрирование сервера, даже не имея серьезного опыта работы с UNIX-подобными операционными системами.

1. «Using Samba» By Jay Ts, Robert Eckstein, David Collier-Brown 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.

Рисунок 5. Вкладка «STATUS», где нужно перезапустить «демоны» пакета Samba

Рисунок 6. Создаем каталоги и назначаем права обычными средствами Windows

c:\> net use h: \\fs\vol0\_имя_каталога_

c:\> net use lpt2: \\fs\_printer_name_

[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

[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

Page 23: 051 Системный Администратор 02 2007

21№2, февраль 2007

полезные советыУтилита find

Не стесняйтесь искатьПоиск файлов – частая операция, если только вы не об-ладаете феноменальной памятью или не поддерживаете все вверенные вам файлы в строгом порядке. Да и вряд ли память вам поможет, если нужно будет найти систем-ный файл, фигурирующий в сообщении об ошибке какой-нибудь службы.

Эта небольшая подборка советов посвящена утилите find – наиболее эффективному (но почему-то пугающему новичков) средству поиска и «массовой обработки» фай-лов. Начну с нескольких простых примеров.

Эта команда выведет список файлов, имена которых соответствуют указанному шаблону, размещённых начи-ная с текущего каталога и вглубь до победного конца. Об-ратите внимание на несколько нестандартный порядок па-раметров вызова – сначала указывается начальный ката-лог поиска, а затем – опции.

Если вы запустите эту команду от имени непривилеги-рованного пользователя в системном каталоге, то навер-няка получите массу сообщений типа:

Избавиться от них поможет следующий приём:

То есть сообщения об ошибках (2 – это дескриптор потока STDERR) мы просто выкидываем, оставляя лишь нормаль-ный вывод STDOUT.

А это будет список всех файлов, находящихся в указанном каталоге непосредственно в его подкаталогах первого уров-ня. То есть будут найдены файлы samag/jail/jail-wu и samag/python/test-map.py, но не samag/meta.tgz (т.к. не в подката-логе) и не samag/sendmailx/bin/smx (т.к. в подкаталоге вто-рого уровня вложенности). Зачем это может понадобиться практически – затрудняюсь сказать, но, как видите, можно делать и такое.

find ./ -name "milter-spa*"

find: ./backup/pgsql: Permission denied

find ./ -name "milter-spa*" 2>/dev/null

find /home/serg/samag -mindepth 2 -maxdepth 2

Приводите в исполнение немедленноFind – это не столько средство поиска, сколько инс-трумент для обхода файловой иерархии. Вывод на эк-ран имён найденных файлов – лишь частный случай (это действие можно указать и явно с помощью опции -print). В целом же вы можете также удалять файлы, со-ответствующие критериям поиска или даже применять к ним любую произвольную команду. В этом и заключа-ется мощь утилиты find.

Этой командой мы одним махом удалим все файлы в ка-талоге test, не имеющие владельца (т.е. UID которых не фи-гурируют в базе учётных записей). Понятно, что таким об-разом можно удалить и всё, найденное по критерию -name или любому другому. Будьте осторожны!

find test -nouser -delete

А так можно вывести на экран содержимое всех скрип-тов на Python (если точнее, то файлов, имеющих расшире-ние .py). Обратите внимание на непонятную конструкцию «{}» – в процессе выполнения она будет заменена резуль-татом поиска, т.е. cat получит в качестве параметров спи-сок соответствующих файлов. Точка с запятой в конце то-же обязательна – это указание для find, что опция exec за-кончилась. Чтобы «;» не интерпретировалась оболочкой, не забывайте его экранировать.

find ./ -name "*.py" -exec cat {} \;

Не забывайте о времениПри необходимости всегда можно воспользоваться богатым набором опций для поиска файлов на основании их времен-ных атрибутов (времени модификации, доступа и т. д.).

Этой страшной конструкцией мы упакуем в архив все файлы больше 10 килобайт (20 блоков по 512 байт; в GNU-версии утилиты можно указывать размер и непосредствен-но в кило/мега/гигабайтах), к которым никто не обращал-ся более трёх месяцев.

Будет выведен список регулярных файлов, обращение к которым выполнялось позже того, как был модифициро-ван файл Qwert (подробности по -newerXY см. на страни-це справки). Одним из применений этого может быть по-иск файлов, которые используются некоторой программой – создаём (скажем, по команде touch) файл-метку, запуска-ем программу и смотрим, к каким файлам было обраще-ние после создания метки.

find ./ -atime +90d -size +20 -exec tar cjf old.tbz2 {} \;

find . -type f -newerac Qwert

Ищите и найдётеКритерии поиска могут быть самыми разнообразными – по типу файла (каталог, символическая ссылка, регу-лярный файл и т. д.), по владельцу и группе (опции -user и -group), по выставленным на файле флагам и правам до-ступа (-flags и -perm соответственно). Для поиска без учё-та регистра символов используйте -iname, в более слож-ных случаях к вашим услугам опция -regex. Можно даже учитывать тип файловой системы (например, при выпол-нении какого-то действия не принимать во внимание фай-лы, доступные через NFS).

Утилита find обладает развитым языком составления выражений, когда различные критерии поиска можно груп-пировать с использованием логических операций (разбор оставлю вам в качестве упражнения):

Показанным выше возможности find не исчерпываются – это всего лишь несколько примеров из возможных. Не поле-нитесь прочитать справку (man find), особенно обращая вни-мания на приведённые там примеры. И жить в консоли сразу станет проще, жить станет веселей.

Сергей Супрунов

find ./ -iname 'qwe*' -and -size +20 -or -name 'Qwert'

Page 24: 051 Системный Администратор 02 2007

22

администрирование

Подключаем несколько локальных сетей с пересекающейся адресацией к одному компьютеру

Андрей Кишкин

В вашу квартиру или офис проведено несколько локальных сетей, но их одновременному подключению к компьютеру мешают пересекающиеся адресные пространства. Сети можно «подружить», если вы используете ОС Linux.

Page 25: 051 Системный Администратор 02 2007

23№2, февраль 2007

администрирование

Локальные пользовательские сети стихийно появляют-ся и исчезают повсюду, они могут охватывать как це-лые городские районы, так и соединять лишь пару

компьютеров в квартире.Ситуация, когда компьютер подключен одновремен-

но к нескольким сетям, нередка. Но часто одновременной работе во всех этих сетях препятствует объективная при-чина – пересекающаяся, а чаще всего и вовсе одинаковая адресация. Что же делать?

Одни эту проблему решают физическим подключе-нием только одной из «проблемных» сетей к компьютеру и «перетыкая» кабели по мере необходимости.

Другие устанавливают для каждой сети отдельную пла-ту в системный блок и «переключают» сети на уровне опе-рационной системы, активизируя нужный сетевой интер-фейс и выключая все ненужные.

Третьи используют для управления сетевым «зоопар-ком» дополнительное оборудование, благо простенький маршрутизатор стоит сейчас совсем недорого, кроме то-го, в его роли можно использовать старый никому не нуж-ный компьютер.

Последний подход универсален, но при всех своих плю-сах требует, во-первых, дополнительное «железо», а во вто-рых – умения это «железо» настраивать.

Я расскажу о том, как к своему компьютеру с операци-онной системой Linux подключить несколько локальных сетей с произвольной адресацией, и о том, как работать со всеми подключенными сетями одновременно, не испы-тывая при этом почти никаких проблем.

Для начала рекомендую ознакомиться с материала-ми [1, 2].

Эти материалы можно найти и на русском языке, но най-денные мной переводы несколько устарели.

Требования к системе:n Ядро Linux 2.6 (я использовал 2.6.17.9), собранное с под-

держкой следующих опций netfilter:

В большинстве ядер из дистрибутивов нужные опции уже включены, но для их работы требуется подгрузить нужные модули ядра.

n IPTables 1.2.9 и выше (я использовал 1.3.3).

При тестировании работы схемы использовался дист-рибутив Slackware Linux 10.2, но вы можете работать с дру-гими дистрибутивами, так как схема универсальна.

Команды, приведенные в статье, можно просто наби-рать с консоли, но лучше оформить их в качестве команд-ного файла, запускаемого при старте системы, я для этих целей использую /etc/rc.local.

Итак, мы решили подключить компьютер к двум локаль-ным сетям с пересекающейся адресацией. Исходные дан-ные для подключений смотрите в таблице.

Схематично это они представлены на рисунке.Алгоритм решения поставленной задачи состоит в за-

мене неуникальных адресов на уникальные, таким обра-

зом можно «обмануть» систему маршрутизации, заставив ее «плясать под нашу дудку».

О том, какими критериями нужно пользоваться при выборе сети, адреса которой мы будем подменять, чи-тайте в конце статьи, пока же для простоты выберем в качестве «подопытной» сеть, подключенную к интер-фейсу Eth1.

Задачу конфигурирования системы можно разбить на три, более мелкие:1. Идентификация и инициализация входящего трафи-

ка.2. Инициализация и маршрутизация ответного трафи-

ка.3. Инициализация и маршрутизация собственного тра-

фика системы.

Под идентификацией трафика подразумевается опре-деление сети источника, а под инициализацией – прида-ние идентифицированным пакетам неких специфических черт, разговор о которых пойдет дальше.

Идентификация и инициализация входящего трафикаИнициализацию будем производить в зависимости от интерфейса, с которого трафик пришел. Неуникальный адрес хоста назначения (нашего компьютера) (в общем случае не уникальна адресация сетевых сегментов, под-ключенных к компьютеру, но так как из каждого сегмен-та нашей системе принадлежит только один адрес, будем именно его называть неуникальным, хотя это может быть и не так, т.е. адреса разные, но принадлежат одному сете-вому пространству) будем заменять уникальным. Это по-может нам решить и еще одну задачу – задачу маршрути-зации обратного трафика, но об этом позже.

Мы выбрали в качестве «подопытной» сеть, подключен-ную к интерфейсу eth1, поэтому назначаем дополнительный уникальный адрес на этом интерфейсе:

Адрес можно выбирать любой удобный, особой роли он не играет, важно, чтобы он не входил в сети, подклю-ченные к другим сетевым интерфейсам.

Обратите внимание на маску сети, в общем случае она может быть любой, но так как адрес не участвует в реаль-

CONFIG_NETFILTERCONFIG_IP_NF_CONNTRACKCONFIG_IP_NF_IPTABLESCONFIG_IP_NF_MATCH_MARKCONFIG_IP_NF_NAT

Интерфейс Адрес Маска Шлюз DNS-сервер

Сеть 1 Eth0 192.168.0.10 255.255.255.0 192.168.0.1 192.168.0.2

Сеть 2 Eth1 192.168.0.10 255.255.255.0 192.168.0.1 192.168.0.2

Исходные данные для подключений

192.168.0.10/24

192.168.0.0/24192.168.0.0/24

Схема соединения

ip address add 192.168.1.10/32 dev eth1

Page 26: 051 Системный Администратор 02 2007

24

администрирование

ном сетевом взаимодействии, то лучше ее сделать как в на-шем примере.

Далее заменяем адрес хоста назначения в пакетах, при-ходящих с интерфейса eth1:

Инициализация и маршрутизация ответного трафикаМаршрутизацию обратного трафика будем производить «от источника», т.е. в зависимости от адреса отправителя, т.к. он уникальный.

Создадим в системе дополнительную таблицу марш-рутизации для каждой сети. Из консоли дайте следующие команды:

или добавьте в файл /etc/iproute2/rt_tables строки соответс-твующие «10 TO_ETH0», «20 TO_ETH1» вручную. В скрипт эти команды добавлять не нужно, достаточно запустить их один раз.

Добавляем маршрут по умолчанию в эти таблицы:

А теперь создаем правила, в соответствии с которыми все пакеты, у которых в поле «От» указан адрес 192.168.1.10, нужно маршрутизировать в соответствии с таблицей TO_ETH1, т.е. передавать через интерфейс eth1, а все па-кеты у которых в поле «От» указан адрес 192.168.0.10, пе-редавать через интерфейс eth0.

Маркируем пакеты:

Маршрутизируем в зависимости от метки:

Теперь осталось заменить адрес, и пакет может отправ-ляться в путешествие по сети:

Теперь наш компьютер может отвечать на запросы (на-пример, DNS или ICMP) из обеих подключенных сетей. Мож-но попробовать его «попинговать» и насладиться получен-ным эффектом.

Инициализация и маршрутизация собственного трафика системыОписанных действий достаточно для организации рабо-ты сервера в двух сетях, отвечающего на запросы, прихо-дящие из обеих сетей, но не генерирующего собственно-го трафика.

В реальности такую ситуацию представить сложно, поэ-тому займемся трафиком, который генерирует сам хост.

Логика работы такова: при обращении к хосту из сети, подключенной к интерфейсу eth1, заменяем адрес сети хос-та с 192.168.0.0 на 192.168.1.0, например, пишем не:

а

При обращении к сети, подключенной к интерфейсу eth0 все остается по-старому.

Существует один не очень приятный момент: невозмож-ность работы с DNS-сервером сети, подключенной к интер-фейсу eth1 (распространяется только на подменяемые на-ми адреса, т.е. все нелокальные для этой сети имена (на-пример, интернет-имена) будут разрешаться корректно). То есть посылать DNS-запросы вы, конечно, можете, но от-веты сервера теперь будут «некорректными», эта проблема решается занесением нужных, но уже откорректированных записей в файл /etc/hosts. То есть если в сети, подключен-ной к интерфейсу eth1, имеется хост с именем server.local и адресом 192.168.0.1, то файл /etc/hosts следует прописать server.local 192.168.1.1.

Для реализации схемы, описанной выше, нам требует-ся только заменить адрес сети на выходе:

И все. Пакеты будут корректно отмаршрутизированы при помощи правил, созданных нами выше.

Теперь несколько слов о том, как следует подходить к выбору сети, в которой будем «подменять» адреса.

Во-первых, подменять адреса нужно в более «простой» сети, т.е. в той, где меньше сервисов (выделенные серве-ры и т. д.).

Во-вторых, не стоит выбирать сеть, адреса в которой выдаются по DHCP. Для гарантированной работы конфи-гурации следует в стартовом скрипте каждый раз выяснять свой адрес, например, через «ip link sh».

Будьте предельно внимательны при наборе правил, т.к. даже малейшие ошибки могут привести к серьезным проблемам, поэтому перед подключением к реальным се-тям работоспособность конфигурации настоятельно реко-мендую проверить на «испытательном стенде»: вашем ПК и нескольких подключенных к нему.

1. Advanced Linux Routing – http://lartc.org/howto.2. IPTables 1.2.2 Tutorial – http://iptables-tutorial.frozentux.net/

iptables-tutorial.html.

iptables –t mangle –A OUTPUT –s 192.168.0.10/24 ↵ –j MARK -–set-mark 0iptables –t mangle –A OUTPUT –s 192.168.1.10/24 ↵ –j MARK -–set-mark 1

ip rule add fwmark 1 table TO_ETH1 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

ping 192.168.0.5

ping 192.168.1.5

iptables –t nat –A POSTROUTING –d 192.168.1.0/24 ↵ –j NETMAP –to 192.168.0.0

iptables –t NAT –A PREROUTING –i eth1 –s 192.168.0.0/24 ↵ –j DNAT -–to-destination 192.168.1.10

echo /etc/iproute2/rt_tables >> 10 TO_ETH0echo /etc/iproute2/rt_tables >> 20 TO_ETH1

ip route add default dev eth1 table TO_ETH1ip route add default dev eth0 table TO_ETH0

Page 27: 051 Системный Администратор 02 2007
Page 28: 051 Системный Администратор 02 2007

26

администрирование

Очень часто в локальных сетях, будь то большие сети крупных организаций или же небольшие

«домашние» сети, устанавливается и настраивается локальный DNS-сер-вер. Ставят его для удобства работы или для кэширования запросов к DNS-серверам провайдера. Для UNIX-сис-тем стандартом среди DNS-серверов является bind. По умолчанию bind хра-нит все записи о зонах в простых тек-стовых файлах, с которыми не всег-да удобно работать. Например, если у вас есть несколько DNS-серверов на разных машинах, то править фай-лы зон через шелл не очень удобно, так как придется выполнить большое чис-ло однообразных действий, начиная от ввода логина, заканчивая перезаг-рузкой DNS-сервера. Если у вас в се-ти настроен LDAP-сервер, то разумнее

всего хранить прямые и обратные зо-ны DNS-сервера в LDAP. Разумнее, по-тому что тогда получается централизо-ванное хранилище данных, с которым легко можно работать из различных ОС, да и программ для работы с LDAP-сервером очень много, как для UNIX, так и для Windows. Еще один довод для хранения информации в LDAP – динамическое обновление зон. DHCP может не посылать запросы DNS-сер-веру на обновление зоны, тем самым нагружая DNS-сервер, а может сам об-новить запись на LDAP-сервере. Наде-юсь, вы задумались о LDAP как о хра-нилище данных DNS-сервера. Теперь приступим к практической реализации. Сразу хочу описать сеть, для которой мы будем настраивать DNS-сервер:n Адрес сети: 192.168.1.0/24.n Домен: teachers.

n I P - а д р е с D N S - с е р в е р а : 192.168.1.254 (hostname: dns).

n I P - а д р е с L D A P - с е р в е р а : 192.168.1.250 (hostname: spider).Итак, приступаем к настройке:

n Система: FreeBSD-6.1-p6 (и на LDAP- и на DNS-сервере).

n К о р е н ь L D A P - с е р в е р а : dc=l1523,dc=ru.

Если у вас не настроен LDAP-сер-вер, то можете почитать о его настрой-ке на сайте: http://www.fr33man.ru/index.php?newsid=5б.

Настройка LDAPС н ач а л а н е о бхо д и м о п о д к л ю -чить две схемы к нашему серверу: dnsZone.schema и dhcp.schema. Схе-ма dnsZone поставляется по умолча-нию с сервером slapd, а вот схема dhcp

Настраиваем DNS и DHCP с хранением информации в LDAP

Система DNS очень важна для работы Интернета в целом, поэтому стоит посвятить достаточное количество времени на изучение принципов работы системы и на настройку сервера имен. Сегодня я расскажу о настройке bind для хранения информации о зонах в базе данных LDAP.

Василий Озеров

Page 29: 051 Системный Администратор 02 2007

27№2, февраль 2007

администрирование

появляется после установки DHCP-сервера. Забирайте dhcp.schema отсюда: http://fr33man.ru/files/dhcp.schema.

Редактируем slapd.conf, добавляем:

После этого перезапускаем slapd:

Все, теперь можно добавить необходимые записи в LDAP. Я предоставляю ldif-файл с комментариями:

Может показаться, что добавлять записи в файлы зон намного удобнее, чем в LDAP-сервер, но кто вас заставля-ет составлять ldif-файлы и добавлять их через shell? Мо-жете использовать программы для работы с LDAP-серве-ром, например ldapadmin: http://ldapadmin.sourceforge.net. Я давно пользуюсь этой программой и ни разу не испыты-вал неудобств.

Вернемся к добавлению записей в LDAP. Составленный нами ldif-файл нужно добавить в директории LDAP:

Первоначальная настройка LDAP-сервера закончена.

Настройка DNS-сервераПервым делом необходимо установить bind. По умолча-нию bind уже установлен во FreeBSD, но он не поддержи-вает работу с LDAP-сервером, поэтому необходимо уста-новить другую версию bind, которая поддерживает работу с LDAP (bind9-sdb-ldap):

Проверим, что установился нужный нам bind.

Bind-sdb-ldap установился. Теперь создадим конфигураци-онный файл named.conf и подготовим сервис к запуску:

include /usr/local/etc/openldap/schema/dnszone.schemainclude /usr/local/etc/openldap/schema/dhcp.schema

spider@/root/> /usr/local/etc/rc.d/slapd.sh restart

Stopping slapd.Starting slapd.

Dns.ldif

# Добавляем контейнер, где будут храниться все зоны# нашего DNS-севераdn: ou=dns,dc=l1523,dc=ru

objectClass: topobjectClass: organizationalUnitou: dnsdescription: domain zones# Добавляем прямую зону teachersdn: zoneName=teachers,ou=dns,dc=l1523,dc=ruobjectClass: topobjectClass: dNSZonezoneName: teachersrelativeDomainName: teachers

# SOA-запись для зоны teachersdn: relativeDomainName=@,zoneName=teachers,ou=dns, ↵ dc=l1523,dc=ruobjectClass: topobjectClass: dNSZonezoneName: teachersrelativeDomainName: @nSRecord: ns.teachers.sOARecord: ns.teachers. root.ns.teachers. 1 8H 2H 1W 1D

# Добавляем запись вида:# ns IN A 192.168.1.254dn: relativeDomainName=ns,zoneName=teachers,ou=dns, ↵ dc=l1523,dc=ruobjectClass: topobjectClass: dNSZonezoneName: teachersrelativeDomainName: nsdNSClass: INaRecord: 192.168.1.254

# Добавляем запись вида:# spider IN A 192.168.1.250dn: relativeDomainName=spider,zoneName=teachers,ou=dns, ↵ dc=l1523,dc=ruobjectClass: topobjectClass: dNSZonezoneName: teachersrelativeDomainName: spiderdNSClass: INaRecord: 192.168.1.250

# Добавляем новую обратную зону 1.168.192.in-addr.arpadn: zoneName=1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ruobjectClass: topobjectClass: dNSZonezoneName: 1.168.192.in-addr.arparelativeDomainName: 1.168.192.in-addr.arpa

# SOA-запись для зоны 1.168.192.in-addr.arpadn: relativeDomainName=@,zoneName= ↵ 1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ruobjectClass: topobjectClass: dNSZonerelativeDomainName: @nSRecord: ns.teachers.sOARecord: ns.teachers. root.ns.teachers. 1 8H 2H 1W 1DzoneName: 1.168.192.in-addr.arpa

# Добавляем запись вида:# 254 PTR ns.teachers.dn: relativeDomainName=254,zoneName= ↵ 1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ruobjectClass: topobjectClass: dNSZonezoneName: 1.168.192.in-addr.arparelativeDomainName: 254pTRRecord: ns.teachers.

# Добавляем запись вида:# 250 PTR spider.teachers.dn: relativeDomainName=250,zoneName= ↵ 1.168.192.in-addr.arpa,ou=dns,dc=l1523,dc=ruobjectClass: topobjectClass: dNSZonezoneName: 1.168.192.in-addr.arparelativeDomainName: 250pTRRecord: spider.teachers.

spider@/root/> ldapadd -x -D "cn=root,dc=l1523,dc=ru" ↵ -W -f dns.ldif

Enter password:

dns@/root> cd /usr/ports/dns/bind9-sdb-ldap/dns@/usr/ports/dns/bind9-sdb-ldap> make install clean

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

Named.conf

# Описание списков доступа к bindacl lan { 192.168.1.0/24; };acl transfers { 127.0.0.1; };

# Конфигурация rndc-ключа. Сгенерировать ключ можно командой# rndc-confgen, вывод которой нужно вставить в named.confkey "rndc-key" { algorithm hmac-md5; secret "V0spN5Z3OWgkGG2Bt0SdKQ==";};

Page 30: 051 Системный Администратор 02 2007

28

администрирование

Все, конфигурационный файл составлен, подготавли-ваем named к запуску. Разрешаем запуск named:

Меняем путь к программе DNS-сервера. Это нужно для то-го, чтобы не запустился стандартный bind, который не умеет работать с LDAP. Стандартный bind лежит в /usr/sbin/named:

Теперь выставляем необходимые права на /var/named:

Теперь можно запускать DNS-сервер:

Bind запустился. Давайте проверим его на работоспо-собность. Проверяем работу утилитой rndc:

Как видите, все работает. Единственное замечание: я за-прашивал полный трансфер зоны с DNS-сервера, в моем конфигурационном файле выставлены права доступа, ко-торые разрешают трансфер зон только IP-адресу 127.0.0.1, поэтому не пытайтесь скачать зону с другого компьютера. Все, теперь можно переходить к настройке DHCP-сервера.

Настройка DHCP-сервераСначала необходимо установить DHCP-сервер:

Сервер установлен. Теперь переходим к его настройке:

Вот такой конфигурационный файл получился. Те-перь его необходимо перевести в ldif-формат и доба-вить в LDAP. В поставку isc-dhcp-server входит perl-скрипт

controls {inet 127.0.0.1 port 953allow { 127.0.0.1; } keys { "rndc-key"; };};

# Опции демона namedoptions {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; };};

# Описание зоны teacherszone "teachers." {# Наш сервер является первичным для этой зоныtype master;# Где располагается зона.# Формат записи: database «ldap протокол:# //IP_адрес_LDAP_сервер/_путь_к_нужной_зоне_ ttl»# Указанный ttl будет использован по умолчанию,# если не будет указан другой ttldatabase "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.arpazone "1.168.192.IN-ADDR.ARPA." {# Наш сервер primarytype 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; };};

dns@/root/> echo named_enable=\"YES\" >> /etc/rc.conf

dns@/root/> echo named_program= ↵ \"/usr/local/sbin/named\" >> /etc/rc.conf

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@/root/> /etc/rc.d/named start

Stating named.

dns@/root/> ps ax | grep named

275 ?? Ss 0:01,64 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/r464 ?? Is 0:31,00 /usr/local/sbin/named -u bind -t /var/named

dns@/root> rndc status

number of zones: 2debug level: 0xfers running: 0xfers deferred: 0soa queries in progress: 0query logging is OFFrecursive clients: 0/1000tcp clients: 0/100server 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: printcmdteachers. 178600 IN SOA ns.teachers. root.ns.teachers. 1 28800 7200 604800 86400teachers. 178600 IN NS ns.teachers.spider.teachers. 178600 IN A 192.168.1.250ns.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: printcmd1.168.192.in-addr.arpa. 178600 IN SOA ns.teachers. root.ns.teachers. 1 28800 7200 604800 864001.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)

spider@/root> cd /usr/ports/net/isc-dhcp3-server/spider@/usr/ports/net/isc-dhcp3-server> make install clean

/root/dhcpd.conf

# Время, на которое выдается IPdefault-lease-time 14400;# Время, через которое клиент обязан вернуть IPmax-lease-time 28800;log-facility local7;authoritative;# Не проводить обновление зонddns-update-style none; # Описание сети 192.168.1.0/24subnet 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;}

Page 31: 051 Системный Администратор 02 2007

29№2, февраль 2007

администрирование

dhcpd-conf-to-ldap.pl. Давайте откроем его и отредактиру-ем параметры в самом начале:

Все, теперь можно запускать:

Скопируем вывод скрипта в файл dhcp.ldif и добавим его командой:

Теперь составим конфигурационный файл DHCP-сервера, в котором укажем параметры подключения к LDAP-серверу.

Теперь запускаем DHCP-сервер:

Отлично! Сервер запустился. Осталось настроить ди-намическое обновление DNS-зон. К сожалению, пакет bind-sdb-ldap не умеет сам обновлять записи в LDAP, так же как и DHCP. Поэтому придется использовать скрипт, напи-санный Travis Groth. Подробнее об этом можете почитать на странице: http://www.venaas.no/ldap/bind-sdb. Давайте скачаем и настроим скрипт:

Теперь отредактируем скрипт. В самом начале:

# Этот параметр можно не менять, будет использован # результат, который вернет функция hostdomain()my $domain = hostdomain();# Корень сервера ldapmy $basedn = "dc=l1523,dc=ru"; # В этой строке скрипт заменяет все «.», указанные # в $basedn на «,dc=» $basedn =~ s/\./,dc=/g;# Параметр можно не изменять, будет использован результат# вызова функции hostname(), где будут храниться# настройки DHCPmy $server = hostname();my $dhcpcn = 'dhcp'; # CN of DHCP config treemy $dhcpdn = "cn=$dhcpcn, $basedn"; # DHCP config tree DNmy $second = ''; # secondary server DN / hostnamemy $i_conf = ''; # dhcp.conf file to read or stdinmy $o_ldif = ''; # output ldif file name or stdoutmy @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=rucn: spiderobjectClass: topobjectClass: dhcpServerdhcpServiceDN: cn=dhcp, dc=l1523,dc=ru

dn: cn=dhcp, dc=l1523,dc=rucn: dhcpobjectClass: topobjectClass: dhcpServicedhcpPrimaryDN: cn=spider, dc=l1523,dc=rudhcpStatements: default-lease-time 14400dhcpStatements: max-lease-time 28800dhcpStatements: log-facility local7dhcpStatements: authoritativedhcpStatements: ddns-update-style none

dn: cn=192.168.1.0, cn=dhcp, dc=l1523,dc=rucn: 192.168.1.0objectClass: topobjectClass: dhcpSubnetobjectClass: dhcpOptionsdhcpNetMask: 24dhcpRange: 192.168.1.10 192.168.1.200dhcpStatements: ignore client-updatesdhcpOption: domain-name "teachers"dhcpOption: domain-name-servers 192.168.1.254dhcpOption: routers 192.168.1.254dhcpOption: default-ip-ttl 64dhcpOption: default-tcp-ttl 64

Done.

spider@/root/> ldapadd –x –D "cn=root,dc=l1523,dc=ru" ↵ –W –f dhcp.ldif

/usr/local/etc/dhcpd.conf

# IP-адрес или hostname LDAP-сервераldap-server "spider.teachers";# Порт, который слушает LDAPldap-port 389;

spider@/root/> echo dhcpd_enable=\"YES\" >> /etc/rc.confspider@/root/> /usr/local/etc/rc.d/isc-dhcpd.sh start

Starting dhcpd.Internet Systems Consortium DHCP Server V3.0.5rc2Copyright 2004-2006 Internet Systems Consortium.All rights reserved.For info, please visit http://www.isc.org/sw/dhcp/TLS session successfully started to spider.teachersWrote 17 leases to leases file.Listening on BPF/xl0/00:0a:5e:42:b8:01/192.168.1/24Sending on BPF/xl0/00:0a:5e:42:b8:01/192.168.1/24Sending on Socket/fallback/fallback-net

# Учетная запись, под которой будет происходить подключение# к LDAP-серверу.ldap-username "cn=root,dc=l1523,dc=ru";# Пароль учетной записиldap-password "123456";# Корень LDAP-сервераldap-base-dn "dc=l1523,dc=ru";ldap-method dynamic;

spider@/root/> mkdir dhcpspider@/root/> cd dhcpspider@/root/dhcp/> fetch http://www.venaas.no/ldap/ ↵ bind-sdb/dhcp2ldapd-1.1.gz

dhcp2ldapd-1.1.gz 100% of 2185 B 1279 Bpsspider@/root/dhcp/> gunzip dhcp2ldapd-1.1.gzspider@/root/dhcp/> lltotal 10drwxr-xr-x 2 root wheel 512B 11 янв 23:18 .drwxr-xr-x 8 root wheel 1,5K 11 янв 23:18 ..-rw-r--r-- 1 root wheel 5,3K 3 май 2005 dhcp2ldapd-1.1

Dhcp2ldapd-1.1

#!/usr/bin/perl

# Файл, где хранится информация о выданных адресах# DHCP-сервером$LEASES = "/var/db/dhcpd/dhcpd.leases";

# Домен$DOMAIN = "teachers";# Обратная зона$REVERSE = "1.168.192.in-addr.arpa";

# Где в 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";

# Пользователь для подключения к LDAP-серверу$USER = 'cn=root,dc=l1523,dc=ru';# Пароль пользователя$PASSWORD = "9vpIj9";

# Хост, на котором работает LDAP-сервер$LDAP_HOST = 'localhost'

# Время проверки файла в секундах$UPDATE_TIME = 30;

# Автопроверка$AUTO_VERIFY = 0;

Page 32: 051 Системный Администратор 02 2007

30

администрирование

Еще необходимо подправить две строчки в скрипте, по-тому что у меня сеть с маской 24, а скрипт добавляет запи-си для маски 16. Поэтому правим строку 172 и 174, меняем там $fourth.$third на $fourth. Все, после этого можно запус-кать наш скрипт, но сначала составим скрипт запуска:

Такой скрипт кладем в /usr/local/etc/rc.d/ и выставляем нормальные права:

Теперь пробуем запустить:

Как видите, скрипт запустился успешно. Переходим к тестированию нашей связки.

ТестированиеДавайте для начала посмотрим pid DNS-сервера, для того чтобы далее можно было проконтролировать, что named не перезапускался:

Pid named – 448. Теперь проверим, резолвится ли ад-рес машины, которую мы вскоре добавим в нашу сеть. Имя машины – fr33man:

Адрес не резолвится, в LDAP также нет записей об этом адресе. Теперь подключим машину к сети и настроим на по-лучение IP-адреса от DHCP-сервера. После этого проверим, резолвится ли адрес:

Как видите, адрес резолвится, и в LDAP появились за-писи о нашем адресе. И под конец проверим pid named:

Pid не изменился, следовательно, DNS-сервер не пере-запускался и изменения «подхватились» автоматически.

За и противМы получили работающую связку, удобную в управлении. Для того чтобы обновить зоны или конфигурацию DHCP, достаточно изменить записи в LDAP, а для этого можно ис-пользовать программы для работы с LDAP-сервером. Еще одним плюсом является то, что при изменении информации на LDAP-сервере изменения вступят в силу без перезагруз-ки зоны. Централизованное хранение данных для крупных компаний выгоднее по нескольким причинам:n Все данные хранятся в одной базе. Если с этой базой

что-то случится, то восстанавливать придется только ее, а не бегать по всем серверам и восстанавливать по от-дельности каждый сервис.

n Управлять базой можно из любой ОС, так как стандарт работы LDAP один.

Из минусов можно отметить, что управление немного усложняется, но результат того стоит. Использовать цент-рализованную базу лучше только в сетях со сложной струк-турой, а для маленьких сетей централизованное хранение данных не так выгодно.

#!/bin/shcase "$1" instart) 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

spider@/usr/local/etc/rc.d/> chmod 0755 dhcpd2ldap.shspider@/usr/local/etc/rc.d/> chown root:wheel dhcpd2ldap.shspider@/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 0:01,56 /usr/local/sbin/dhcpd -cf /usr/local/etc/dhcpd.conf -54964 p0 R+ 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 0:01,56 /usr/local/sbin/dhcpd -cf /usr/local/etc/dhcpd.conf -54967 ?? Ss 0:00,40 /usr/bin/perl /root/dhcp2ldapd-1.1 (perl5.8.8)54969 p0 R+ 0:00,00 grep dhcp

shield@/root> ps ax | grep named

264 ?? Ss 0:00,50 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/r 448 ?? Ss 1:17,13 /usr/local/sbin/named -u bind -t /var/named22315 p0 R+ 0:00,00 grep named

shield@/root> host fr33man

Host fr33man not found: 3(NXDOMAIN)shield@/root> ldapsearch -LLL -x -b 'dc=l1523,dc=ru' -H ldap://spider/ 'relativeDomainName=fr33man'

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=rurelativeDomainName: fr33manobjectClass: topobjectClass: dNSZonedNSTTL: 7200zoneName: teachersaRecord: 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=rurelativeDomainName: 199objectClass: topobjectClass: dNSZonedNSTTL: 7200zoneName: 1.168.192.in-addr.arpapTRRecord: fr33man.teachers.

shield@/root> ps ax| grep named

264 ?? Ss 0:00,50 /usr/sbin/syslogd -l /var/run/log -l /var/named/var/r 448 ?? Is 1:17,41 /usr/local/sbin/named -u bind -t /var/named

Page 33: 051 Системный Администратор 02 2007
Page 34: 051 Системный Администратор 02 2007

32

администрирование

Алексей Барабанов

Размещаем пользовательские бюджеты в LDAPЧасть 2

Настроив подсистему аутентификации и авторизации на использование LDAP, попробуем работать с ней прозрачным образом, так же как с файловой базой учетных записей. Проверим, насколько код стандартных утилит приспособлен для взаимодействия с LDAP.

Page 35: 051 Системный Администратор 02 2007

33№2, февраль 2007

администрирование

В первой части статьи [1] вы можете найти всё необ-ходимое для настройки сервера OpenLDAP, указа-ния его в качестве хранилища информации о поль-

зовательских бюджетах и соответствующей инициализа-ции. Быть может, кто-то из вас даже попробовал предло-женное в действии и «открыл» свой счет удобств и потерь от такого усовершенствования. Если же нет, то предлагаю поверить «на слово» и продолжить рассмотрение вопро-са так, будто бы система аутентификации и авторизации с LDAP построена в среде openSUSE версии 10.1 или 10.2 (кому что удобнее) в полном соответствии с рекомендаци-ями из части 1.

Использование LDAPПопробуем создать пользовательский бюджет так, что-бы запись о нем была произведена в LDAP. Воспользуем-ся стандартным системным средством useradd. Для срав-нения создадим обычный бюджет, зарегистрированный в passwd и shadow:

Установим для него некоторый пароль (здесь и далее пароль совпадает с именем пользователя):

Также проверим, как работает авторизация такого бюджета:

А теперь попробуем проделать то же самое, но для бюд-жета, регистрируемого в LDAP:

Хотя пользователь был зарегистрирован, но не уда-лось сделать записи о его членстве в дополнительных группах:

И, увы, эта проблема не поддается простому «лечению». Секрет в том, что исходные тексты pwdutils, куда входит ути-лита useradd, модифицированы для использования схемы rfc2307bis, которая заменила схему nis и по идее должна обеспечить POSIX-совместимые атрибуты пользователь-ских бюджетов. Но вот вместо применяемых в файловых базах индексов в виде номеров GID/UID, автор модифика-ций, все тот же неутомимый Thorsten Kukuk, решил заме-нить их на отличительные имена LDAP (то есть поменять индексы на LDAP-ссылки), что делает такую схему несов-местимой с ранее принятыми алгоритмами работы с учет-ными данными пользователей. Можно, конечно, подож-дать, пока все участники процесса разработки договорят-ся и придут к выводу о том, что каждая схема регистра-ции должна пользоваться собственными атрибутами, под-держивая определенный уровень совместимости. Но они не договорились ни к выходу openSUSE 10.1, ни к выходу openSUSE 10.2, и я делаю вывод, что рациональнее пере-собрать пакет pwdutils, применяя регрессивную заплатку следующего содержания:

# 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 simpleReenter 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)

# 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 violationuseradd: User not added to LDAP group `video'.LDAP information update failed: Object class violationuseradd: User not added to LDAP group `dialout'.

# getent passwd | grep luser

luser1:x:1002:100:ldap user:/home/luser1:/bin/bash

# getent group | grep "^\(video\|dialout\)"

dialout:x:16:alekseybb,suser1video:x:33:alekseybb,suser1dialout:*:16:video:*:33:

# 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;

Page 36: 051 Системный Администратор 02 2007

34

администрирование

Этот патч предназначен для исходных текстов к openSUSE 10.2, но должен подойти и к pwdutils-3.0.7.1-17 из openSUSE 10.1, хотя там проще изменить патч, наклады-вающий модификацию согласно rfc2703bis. Бинарные сбор-ки модифицированных pwdutils соответствующих версий до-ступны в [2]. Итак, исправим и пробуем снова:

Все хорошо. Но не совсем. Возникают трудности с на-значением пароля. Поскольку в утилите passwd нет воз-можности указать, с каким отличительным именем обра-щаться к LDAP (кстати, вероятно, это временное упуще-ние), а в настройках клиента /etc/ldap.conf не заданы па-раметры принудительной линковки к LDAP, то если пароль не инициализирован, установить его от суперпользовате-ля никак не получится. Обойти проблему можно нескольки-ми путями. Во-первых, у нас в запасе есть smbldap-passwd, и если /etc/smbldap-tools/smbldap_bind.conf настроен пра-вильно, то с помощью этой утилиты можно установить па-роль любого пользователя, смирившись с тем, что в кон-фигурационном файле хранится в открытом виде пароль администратора LDAP. Поэтому так делать не будем. Во-вторых, можно установить пароль-заглушку сразу при со-здании бюджета:

И в третьих, можно вспомнить про утилиту usermod (кстати, авторы [1] об этом не упоминают, потому что в ALT Linux используется иная версия управляющих ути-лит), которая позволяет указывать отличительное имя для связи с LDAP:

Проверяем, что получилось, и обнаруживаем, что бюд-жет, где пароль установлен через usermod, недоступен:

А вот тот, что получил пароль при инициализации, пре-красно работает:

Причина скрывается в формате парольных хешей:

Здесь и «простым глазом» видно, что с хешами что-то не так, а приглядевшись внимательнее, понимаем, что хеш из бюджета luser1 имеет неверный формат.

Таким образом, обнаруживается вторая ошибка, исправ-ляемая следующим патчем:

Видно, что в оригинальном коде полученная строка об-рабатывалась не как хеш, а как текстовый пароль. Это про-тиворечит документации на утилиту usermod, и вообще не-понятно, как попало в код. В архиве [2] содержатся полно-стью исправленные версии pwdutils.

# 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".

# getent group | grep "^\(video\|dialout\)"

dialout:x:16:alekseybb,suser1video:x:33:alekseybb,suser1dialout:*:16:luser1video:*:33:luser1

# 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 -D cn=ldapadmin,dc=office,dc=localnet ↵ --service ldap -p $(slappasswd -s luser1 -h {SSHA} ) ↵ luser1

Enter LDAP Password:*****

alekseybb@suse102:~> su - luser1 -c "LC_ALL=C id"

Password:*****Пароль:*****Права доступа на базу данных паролей может быть слишком ограниченная.su: неправильный пароль

alekseybb@suse102:~> su - luser2 -c "LC_ALL=C id"

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=localnetuserPassword:: e2NyeXB0fXtTU0hBfS96d0tsREFDak8xa1MxMktrNENKSCsvSTNURVFTSkhZdn: uid=luser2,ou=People,dc=office,dc=localnetuserPassword:: e1NTSEF9eGNtSFRNZC9zTS9WRDd2V2JqWk1tL2phd0lEdFJPc1k=

# 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,

# userdel -D cn=ldapadmin,dc=office,dc=localnet ↵ --service ldap -r luser1

Enter LDAP Password:*****no crontab for luser1

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;#

Page 37: 051 Системный Администратор 02 2007

35№2, февраль 2007

администрирование

После их установки получаем адекватные записи в LDAP:

И, естественно, удачную проверку авторизации:

Тем самым ранее поставленную цель – создать пол-ностью совместимую с традиционной схему размещения пользователей в LDAP – можно считать достигнутой. В за-вершение можно порекомендовать сменить ранее уста-новленный простенький пароль для ldapadmin на что-ни-будь более существенное, например, так можно поменять его на my.new.pass:

Кстати, после этого smbldap-tools перестанут работать, то есть станут не опасными.

Штатный способ настройки в openSUSEМожно задаться вопросом, зачем там много настраивать и «подкручивать», есть же штатные для openSUSE инстру-менты, составляющие YaST и позволяющие выполнить все те задачи, что выше были перечислены. Попробуем! Рабо-тать будем в openSUSE 10.2, чтобы не натыкаться на дав-но исправленные ошибки. Запущенное после уже сделан-ных настроек средство для установки LDAP-сервера при-няло установленную конфигурацию, но потребовало вер-нуть суперпользователя rootdn (см. рис. 1).

Здесь важно отметить, что никакой другой уровень до-ступа, кроме rootdn, автоматического настройщика не уст-раивает! Предполагаю, что разработчики openSUSE очень не уверены в том, что без rootdn их системы будут рабо-тать. Остается лишь гадать, в какой степени это относится к SLES. Кроме того, обратите внимание, что система пра-вильно восприняла тип парольных хешей – SSHA.

После завершения в конфигурационных файлах LDAP ничего не изменилось, кроме того, что был добавлен rootdn:

В процессе настройки клиента совсем не удивило, что снова было указано на невозможность работы без за-дания суперпользователя LDAP (см. рис. 2).

Дальнейшая настройка выполняется если не прос-то, то очень просто. Не буду ее даже и комментировать. Уже здесь можно отметить, насколько все легко. Хотя, как я уже писал, все перечисленные в статье команды лег-ко связываются в единый скрипт и выполняются вообще без каких-либо дополнительных манипуляций.

Будем считать, что все уже настроено. Через средство управления пользовательскими учетными записями созда-дим дополнительного пользователя luser3, зарегистриро-ванного в LDAP. И проверим, как все работает.

Сначала проверим, что не «сломался» старый бюджет:

Да, все работает, но забавно. Если интересно, може-те взглянуть, как нелепо расписаны приоритеты поиска для pam в /etc/pam.d. Но раз работает, то и не будем при-дираться.

Хуже то, что проверка «свеженького» бюджета не про-ходит:

Не верим своим глазам, проверяем внимательнее:

# 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=localnetuserPassword:: e1NTSEF9bTY3cGNYYnR3N0xRdEhZNjNlMWpRQmZZakZNSXBNSUQ=dn: uid=luser2,ou=People,dc=office,dc=localnetuserPassword:: e1NTSEF9eGNtSFRNZC9zTS9WRDd2V2JqWk1tL2phd0lEdFJPc1k=

alekseybb@suse102:~> su - luser1 -c "LC_ALL=C id"

Password:*****uid=1002(luser1) gid=100(users) groups=16(dialout),33(video),100(users)

# cat <<EOT | ldapmodify -v -a -D ↵ "cn=ldapadmin,dc=office,dc=localnet" ↵ -H ldap://localhost -x -w admin

Рисунок 1. Настройка сервера LDAP

# grep ^root /etc/openldap/slapd.confrootdn "cn=ldaproot,dc=office,dc=localnet"rootpw "{ssha}DHToDgxUuvxDwua/SB5Em5zzlABQWVpGVA=="

alekseybb@suse102:~> su - luser1 -c "LC_ALL=C id"

Пароль:Права доступа на базу данных паролей может быть слишком ограниченная.uid=1002(luser1) gid=100(users) groups=16(dialout),33(video),100(users)

alekseybb@suse102:~> su - luser3 -c "LC_ALL=C id"

su: пользователь luser3 не существует

# getent passwd | tail -n 2

dn: cn=ldapadmin,dc=office,dc=localnetchangetype: modifyreplace: userPassworduserPassword: $(slappasswd -s my.new.pass -h {SSHA})EOTldap_initialize( ldap://localhost )replace userPassword: {SSHA}lZyR2iLrXzijblIE5gBF5UEMMlzMQabkmodifying entry "cn=ldapadmin,dc=office,dc=localnet"modify complete

Page 38: 051 Системный Администратор 02 2007

36

администрирование

Точно, нет такого пользователя!Может быть в shadow:

А там вообще какой-то неадекватный мусор. Хотя в кон-фигурации nss, как и прежде:

Посмотрим, что в самой базе LDAP:

Нет слов! Смех переходит в гомерический. Кроме то-го, что учетная запись luser3 не размещена в нужном кон-тейнере, так у нее еще и какой-то странный хеш. Смотрим, что внутри:

Ну что тут сказать? Создается впечатление, что раз-работчики OpenLDAP и YaST проживают на разных плане-

тах, и им, как «лунатикам» с «марсианами», никак не до-говориться. Хотя, быть может, это моя вина, и я что-то про-пустил в настройке? Снова вернемся к настройке клиен-та (см. рис. 3).

Видим, что контейнер, в котором ищутся, а значит, и раз-мещаются учетные записи пользователей YaST, понят пра-вильно. Даже exop правильно интерпретирован. Но в ре-зультате получаем нелепицу. Попробуем починить, испра-вим путь поиска в nss:

И сразу же начинаем «видеть» новичка:

Пробуем авторизоваться:

Опять те же «грабли»! Здесь лично я делаю вывод, что в команде openSUSE не только Thorsten Kukuk любит пошутить. Юмористов там очень много, и шутки их с уве-личением индекса дистрибутива становятся все разнооб-разнее.

ВыводыСтатья может быть использована как практическое ру-ководство в настройке общего пользовательского LDAP-каталога. Но описанное здесь позволяет сделать выво-

ды как насчет надежности использу-емых в Linux настроек общесетевых каталогов LDAP, понять, чем озабо-чены разработчики подобных сис-тем или, напротив, чем они пренеб-регают, так и установить недостатки предложенного в силу свойств, при-сущих LDAP.

Во-первых, описанная схема ра-ботает только в pwdutils, использу-емых в openSUSE и еще в PLD. Во многих других, например RHEL, FC, Mandriva, ALT Linux, применяются shadow-utils и их модификации. От-личие в том, что pwdutils, которые со-здал Thorsten Kukuk, позволяют ука-зывать отличительное имя админис-тратора в командной строке, то есть дают работать с административны-ми правами даже в отсутствие па-раметра rootbinddn в конфигурации клиента LDAP. Это позволяет избе-жать столь уязвимого указания паро-

# slapcat | grep "^userP" | tail -n 1 | ↵ awk '{print $2}' | mimencode -b -u

{exop}luser3

Рисунок 2. Настройка клиента LDAP

# 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/bashluser2:x:1003:100:ldap user:/home/luser2:/bin/bashluser3:x:1004:100:Yast ldap user:/home/luser3:/bin/bash

alekseybb@suse102:~> su - luser3 -c "LC_ALL=C id"

Пароль:Права доступа на базу данных паролей может быть слишком ограниченная.su: неправильный пароль

luser1:x:1002:100:ldap user:/home/luser1:/bin/bashluser2:x:1003:100:ldap user:/home/luser2:/bin/bash

# getent shadow | tail -n 2

suser1:$2a$10$1qqIvf4KcxLU/1RzxYPIiuKhjnohIlZa68fSHGjwiShgcvheuNFli:13495:0:99999:7:::+::0:0:0::::

# grep shadow /etc/nsswitch.conf

shadow: files

# slapcat | grep "^\(dn: u\|userP\)" | tail -n 6

dn: uid=luser1,ou=People,dc=office,dc=localnetuserPassword:: e1NTSEF9bTY3cGNYYnR3N0xRdEhZNjNlMWpRQmZZakZNSXBNSUQ=dn: uid=luser2,ou=People,dc=office,dc=localnetuserPassword:: e1NTSEF9eGNtSFRNZC9zTS9WRDd2V2JqWk1tL2phd0lEdFJPc1k=dn: uid=luser3,dc=office,dc=localnetuserPassword:: e2V4b3B9bHVzZXIz

Page 39: 051 Системный Администратор 02 2007

37№2, февраль 2007

администрирование

ля администратора в текстовой фор-ме в openSUSE и PLD и приводит к то-му, что все остальные дистрибутив-ные ветки при настройке общесете-вого репозитория LDAP вынуждены хранить пароль администратора сис-темы в открытом виде, как минимум, на тех станциях, с которых допускает-ся административное управление ка-талогом. Что делает использование LDAP менее надежным, чем традици-онная схема размещения бюджетных данных, обходящаяся хранением па-рольных хешей в файлах.

Во-вторых, тот факт, что данная схема реализуется лишь с помощью заплаток, отсутствующих в дистрибу-тивных версиях pwdutils, свидетельс-твует о том, что никто и в openSUSE не смущается данными проблема-ми и, как и ранее, работает через rootbinddn, и даже более, исполь-зуя в качестве оного rootdn, как, на-пример в [3]. Другими словами, хра-нение пароля администратора в не-шифрованном виде является повсе-местной практикой в Linux. Для срав-нения попробуйте найти нешифро-ванный пароль администратора на сервере или на рабочей станции MS Windows. И опять приходится при-знать, что Linux-каталог LDAP сущес-твенно менее безопасен, чем анало-гичный в MS Windows.

В-третьих, даже использование pwdutils не является практичным ре-шением, так как требует введения па-роля администратора для каждой опе-рации, что не всегда возможно в слу-чае, если эти утилиты используются как основа в обертывающих скриптах. То есть это проблема «by design». Ана-логичная проблема возникает при ис-пользовании smbldap-tools. Этот инс-трументарий предназначен для под-ключения его в качестве внутренних утилит в samba3. И такое их использо-вание исключает интерактивную фа-зу, в ходе которой можно задать воп-рос администратору о парольной фра-зе. Что естественным образом приво-дит к необходимости хранить пароль в месте, доступном для автоматичес-кого считывания (в данном конкретном случае пароль записан в конфигура-ционный файл). То есть снова прихо-дим к выводу о слабой защищеннос-ти практических решений на основе LDAP в Linux.

Итак, LDAP обречен на взаимо-действие с Kerberos. Именно по это-му пути пошли разработчики Microsoft и точно также поступили в Samba Team. Точно так же надо делать и в слу-чае любого применения LDAP как хра-нилища учетных данных.

Большинство схем, описываю-щих иную настройку (источники [3] и [4] не исключение), можно приме-нять лишь в локальных вариантах, и то, закрывая глаза на вопросы бе-зопасности. Но симбиоз OpenLDAP и Kerberos заслуживает отдельного рассмотрения. Это значит, продолже-ние следует...

1. Барабанов А. Размещение пользова-тельских бюджетов в LDAP. Часть 1. //«Системный администратор», №1, 2007 г. – C. 36-43.

2. Исходные тексты и собранные паке-ты для настоящей статьи – http://www.barabanov.ru/arts/ldap-start.

3. Как настроить SAMBA в SUSE как PDC с OpenLDAP, DYNDNS и CLAM – http://ru.opensuse.org/Howto_setup_SUSE_as_SAMBA_PDC_with_OpenLDAP,_DYNDNS_and_CLAM.

4. Настройка OpenLDAP и его к ли-ентов – ht tp://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.

Рисунок 3. Параметры клиента LDAP

И вот теперь сделаем самый глав-ный вывод о том, как можно испра-вить ситуацию. Фактически вся сла-бость использования LDAP по сравне-нию с традиционной формой хранения учетных данных следует из-за невоз-можности аутентифицировать удален-ного привилегированного пользова-теля на основе сеансовых данных его локальной регистрации. При исполь-зовании локального доступа к учет-ным данным UID легко проверяется и является надежным критерием для оценки прав доступа. Так как взаимо-действие с LDAP происходит по кли-ент-серверной схеме, то удаленная сторона обязана потребовать аутен-тификации клиентской части прежде, чем разрешить нужный уровень до-ступа. И единственное, на мой взгляд, средство, которое позволяет избежать постоянного интерактивного взаимо-действия с механизмами аутентифи-кации, это Kerberos. Лишь в случае построения аутентификации на осно-ве Kerberos можно заранее и на опре-деленный срок получить для некото-рого локального администратора до-статочный уровень прав на удален-ный каталог LDAP и использовать дан-ную возможность в неинтерактивных скриптах, запускаемых от упомянуто-го пользователя.

Page 40: 051 Системный Администратор 02 2007

38

администрирование

Принципы построения доменов Active Directory

Александр Емельянов

Page 41: 051 Системный Администратор 02 2007

39№2, февраль 2007

администрирование

Active 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 на сегодняшний день научились ис-пользовать доменную аутентифи-кацию, таким образом, вам не при-дется создавать еще одну базу дан-ных пользователей, а можно будет использовать уже существующую;

Принципы построения доменов Active Directory

Active Directory уже давно вошла в разряд консервативных принципов логического построения сетевой инфраструктуры. Но многие администраторы продолжают использовать рабочие группы и домены Windows NT в своей работе. Внедрение службы каталогов будет интересно и полезно как начинающим, так и опытным администраторам для централизации управления сетью и обеспечения должного уровня безопасности.

Page 42: 051 Системный Администратор 02 2007

40

администрирование

n использование Remote Installation Services облегчает установку сис-тем на рабочие места, но, в свою очередь, работает только при внед-ренной службе каталогов.

Отрицательные стороны этой тех-нологии появляются в процессе рабо-ты либо от незнания основ, либо от не-желания вдаваться в тонкости компо-нентов AD. Научитесь правильно ре-шать возникающие задачи, и весь не-гатив исчезнет.

Я лишь заострю внимание на том факте, что все вышеперечислен-ное будет иметь силу при наличии гомогенной сети на базе семейства ОС Windows 2000 и выше.

Логика построенияРассмотрим основные составляющие службы каталогов.

ДоменыЭто основная логическая единица пос-троения. В сравнении с рабочими груп-пами домены AD – это группы безопас-ности, имеющие единую базу регист-рации, тогда как рабочие группы – это всего лишь логическое объединение машин. AD использует для именова-ния и службы поиска DNS (Domain

Name Server – сервер имен доме-на), а не WINS (Windows Internet Name Service – сервис имен Internet), как это было в ранних версиях NT. Таким об-разом, имена компьютеров в домене имеют вид, например, buh.work.com, где buh – имя компьютера в доме-не work.com (хотя это не всегда так, об этом читайте далее).

В рабочих группах используются NetBIOS-имена. Для размещения до-менной структуры AD возможно ис-пользование DNS-сервера не компа-нии Microsoft. Но он должен быть сов-местим с BIND 8.1.2 или выше и подде-рживать записи SRV (RFC 2052), а так-же протокол динамической регистра-ции (RFC 2136). Каждый домен име-ет хотя бы один контроллер домена, на котором располагается централь-ная база данных.

ДеревьяЭто многодоменные структуры. Кор-нем такой структуры является глав-ный домен, для которого вы создаете дочерние. Фактически Active Directory использует иерархическую систему построения, аналогичную структуре доменов в DNS.

Например, если мы имеем до-мен work.com (домен первого уровня) и создаем для него два дочерних до-мена first.work.com и second.work.com (здесь first и second – это домены вто-рого уровня, а не компьютер в доме-не, как в случае, описанном выше), то в итоге получим дерево доменов (см. рис. 1).

Деревья как логическое постро-ение используются, когда вам нуж-но разделить филиалы компании, на-пример, по географическим призна-кам, либо из каких-то других органи-зационных соображений.

AD помогает автоматически созда-вать доверительные отношения меж-ду каждым доменом и его дочерними доменами.

Таким образом, создание домена first.work.com ведет к автоматической организации двухсторонних довери-тельных отношений между родитель-ским work.com и дочерним first.work.com (аналогично и для second.work.com). Поэтому с родительского домена мо-гут применяться разрешения для до-чернего, и наоборот. Нетрудно пред-положить, что и для дочерних доме-

нов будут существовать доверитель-ные отношения.

Еще одно свойство доверитель-ных отношений – транзитивность. По-лучаем – для домена net.first.work.com создаются доверительные отношения с доменом work.com.

ЛесаТакже как и деревья это многодомен-ные структуры. Но лес – это объедине-ние деревьев, имеющих разные корне-вые домены.

Предположим, вы решили иметь не-сколько доменов с именами work.com и home.net и создать для них дочер-ние домены, но из-за того, что tld (top level domain) не в вашем управлении, в этом случае вы можете организовать лес (см. рис. 2), выбрав один из доме-нов первого уровня корневым. Вся пре-лесть создания леса в этом случае – двухсторонние доверительные отно-шения между двумя этими доменами и их дочерними доменами.

Однако при работе с лесами и де-ревьями необходимо помнить следу-ющее:n нельзя добавить в дерево уже су-

ществующий домен;n нельзя включить в лес уже сущес-

твующее дерево;n если домены помещены в лес,

их невозможно переместить в дру-гой лес;

n нельзя удалить домен, имеющий дочерние домены.

Для получения более глубокой ин-формации по тонкостям использо-вания и конфигурирования деревь-ев и лесов вы можете посетить базу знаний Microsoft TechNet, а мы пой-дем дальше.

Организационные единицы (OU)Их можно назвать субдоменами. OU позволяют группировать в домене учетные записи пользователей, груп-пы пользователей, компьютеры, раз-деляемые ресурсы, принтеры и другие OU. Практическая польза от их приме-нения состоит в возможности делеги-рования прав для администрирования этих единиц.

Попросту говоря, можно назна-чить администратора в домене, ко-торый сможет управлять OU, но не

Рисунок 1. Дерево доменов

Рисунок 2. Лес доменов с корнем Work.com

Page 43: 051 Системный Администратор 02 2007

41№2, февраль 2007

администрирование

иметь прав для администрирования всего домена.

Важной особенностью OU в отли-чие от групп (немного забегаем впе-ред) является возможность примене-ния к ним групповых политик. «А поче-му нельзя разбить исходный домен на несколько доменов вместо использо-вания OU?» – спросите вы.

Многие специалисты советуют иметь по возможности один домен. Причина этому – децентрализация ад-министрирования при создании допол-нительного домена, так как админист-раторы каждого такого домена получа-ют неограниченный контроль (напом-ню, что при делегировании прав адми-нистраторам OU можно ограничивать их функционал).

В дополнение к этому для создания нового домена (даже дочернего) нужен будет еще один контроллер. Если же у вас есть два обособленных подраз-деления, соединенных медленным ка-налом связи, могут возникнуть пробле-мы с репликацией. В этом случае более уместным будет иметь два домена.

Также существует еще один нюанс применения групповых политик: поли-тики, в которых определены настройки паролей и блокировки учетных запи-сей могут применяться только для до-менов. Для OU эти настройки политик игнорируются.

Группы пользователей и компьютеровОни используются для администра-тивных целей и имеют такой же смысл, как и при использовании на локаль-ных машинах в сети. В отличие от OU, к группам нельзя применять группо-вые политики, но для них можно деле-гировать управление. В рамках схе-мы Active Directory выделяют два ви-да групп: группы безопасности (при-меняются для разграничения прав до-ступа к объектам сети) и группы рас-пространения (применяются в основ-ном для рассылки почтовых сообще-ний, например, в сервере Microsoft Exchange Server).

Они подразделяются по области действия:n универсальные группы могут

включать в себя пользователей в рамках леса, а также другие уни-версальные группы или глобаль-ные группы любого домена в лесу;

n глобальные группы домена могут включать в себя пользователей до-мена и другие глобальные группы этого же домена;

n локальные группы домена ис-пользуются для разграничения прав доступа, могут включать в се-бя пользователей домена, а также универсальные группы и глобаль-ные группы любого домена в лесу;

n локальные группы компьюте-ров – группы, которые содержит SAM (security account manager) ло-кальной машины. Область их рас-пространения ограничивается только данной машиной, но они могут включать в себя локальные группы домена, в котором находит-ся компьютер, а также универсаль-ные и глобальные группы своего домена или другого, которому они доверяют. Например, вы можете включить пользователя из домен-ной локальной группы Users в груп-пу Administrators локальной маши-ны, тем самым дав ему права ад-министратора, но только для этого компьютера.

СайтыЭто способ физического разделения службы каталогов. По определению сайт – это группа компьютеров, со-единенных быстрыми каналами пере-дачи данных.

Например, если вы имеете несколь-ко филиалов в разных концах страны, соединенных низкоскоростными ли-ниями связи, то для каждого филиа-ла вы можете создать свой сайт. Де-лается это для повышения надежнос-ти репликации каталога.

Такое разбиение AD не влияет на принципы логического построе-ния, поэтому как сайт может содер-жать в себе несколько доменов, так и наоборот, домен может содержать не-сколько сайтов. Но такая топология службы каталогов таит в себе подвох. Как правило, для связи с филиалами используется Интернет – очень небе-зопасная среда. Многие компании ис-пользуют средства защиты, напри-мер, брандмауэры. Служба каталогов в своей работе использует около полу-тора десятков портов и служб, откры-тие которых для прохождения трафи-ка AD через брандмауэр, фактически выставит ее «наружу». Решением про-блемы является использование техно-логии туннелирования, а также нали-чие в каждом сайте контроллера до-мена для ускорения обработки запро-сов клиентов AD.

На рис. 3 представлена логика вло-женности составляющих службы ката-логов. Видно, что лес содержит два де-рева доменов, в которых корневой до-мен дерева, в свою очередь, может со-

Рисунок 3. Пример логики вложенности объектов Active Directory

Page 44: 051 Системный Администратор 02 2007

42

администрирование

держать OU и группы объектов, а так-же иметь дочерние домены (в данном случае их по одному у каждого). До-черние домены также могут содер-жать группы объектов и OU и иметь дочерние домены (на рисунке их нет). И так далее. Напомню, что OU могут содержать OU, объекты и группы объ-ектов, а группы могут содержать дру-гие группы. Более подробно о вложен-ности групп и их составляющих читай-те в следующей статье.

Сущность службы каталоговЧтобы обеспечить некоторый уровень безопасности, любая операционная система должна иметь файлы, содер-жащие базу данных пользователей. В ранних версиях Windows NT для это-го использовался файл SAM (Security Accounts Manager – менеджер учетных записей). Он содержал учетные дан-

ные пользователей и был зашифро-ван. Сегодня SAM также использует-ся в операционных системах семейс-тва NT 5 (Windows 2000 и выше).

Когда вы повышаете роль рядового сервера до контроллера домена с по-мощью команды DCPROMO (факти-чески она запускает мастер установ-ки службы каталогов), подсистема бе-зопасности Windows Server 2000/2003 начинает использовать централизо-ванную базу данных AD. Это можно легко проверить – попробуйте после создания домена открыть на контрол-лере оснастку Computer Management и найти там «Локальные пользовате-ли и группы». Более того, попробуй-те войти на этот сервер под локаль-ной учетной записью. Вряд ли у вас получится.

Большинство данных пользова-телей сохраняются в файле NTDS.DIT (Directory Information Tree – дере-

во информации каталога). 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, что помогает ускорять поиск объектов. Владельцем глобального каталога мо-гут выступать специально назначен-ные для этого контроллеры домена.

Роли FSMOВ AD существует определенный пере-чень операций, выполнение которых можно возложить только на один конт-роллер. Они называются ролями FSMO (Flexible Single-Master Operations – опе-рации с одним хозяином). Всего в AD 5 ролей FSMO. Рассмотрим их более подробно.

В рамках леса обязательно долж-на существовать гарантия уникальнос-ти доменных имен при добавлении но-вого домена к лесу доменов. Такая га-

Новшества 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.

Стоит заметить, что изменение функ-ционального уровня домена и леса являет-ся операцией необратимой. То есть отсутс-твует обратная совместимость.

Page 45: 051 Системный Администратор 02 2007

43№2, февраль 2007

администрирование

жем, по четыре-пять в день. Пос-кольку если у вас в сети большое количество машин (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).

рантия осуществляется исполнителем роли владельца операции именова-ния доменов (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 (о ее использовании мы по-говорим в следующих статьях). Но сто-ит быть осторожным, так как при за-

хвате роли служба каталогов полага-ет, что предыдущего владельца нет, и не обращается к нему вовсе. Воз-вращение в сеть прежнего исполни-теля роли может привести к наруше-нию ее функционирования. Особен-но это критично для владельца схемы, владельца доменных имен и владель-ца идентификаторов.

Что касается производительности: наиболее требовательна к запасу ре-сурсов компьютера роль эмулятора ос-новного контроллера домена, поэтому ее можно возложить на другой конт-роллер. Остальные роли не столь тре-бовательны, поэтому при их распре-делении вы можете руководствовать-ся нюансами логического построения схемы вашей AD.

Последний шаг теоретикаПрочтение статьи вовсе не должно пе-ревести вас из теоретиков в практики. Потому что, пока вы не учли все факто-ры от физического размещения узлов сети до логического построения все-го каталога, не стоит браться за дело и воздвигать домен простыми ответа-ми на вопросы мастера установки AD. Подумайте, как будет называться ваш домен и, если вы собираетесь создать дочерние для него, по каким призна-кам они будут именоваться. При на-личии в сети нескольких сегментов, соединенных ненадежными каналами связи, рассмотрите возможность ис-пользования сайтов.

Как руководство по установке AD могу посоветовать использовать статьи [2] и [3], а также базу знаний Microsoft.

Напоследок несколько советов:n Постарайтесь по возможности

не совмещать роли PDC Emulator и прокси-сервера на одной маши-не. Во-первых, при большом коли-честве машин в сети и пользовате-лей Интернет возрастает нагрузка на сервер, а во-вторых, при удач-ной атаке на ваш прокси «упадет» не только Интернет, но и основной контроллер домена, а это чревато некорректной работой всей сети.

n Если вы постоянно администриру-ете локальную сеть, а не собирае-тесь заняться внедрением Active Directory для заказчиков, вносите машины в домен постепенно, ска-

Page 46: 051 Системный Администратор 02 2007

44

администрирование

Межсетевой экран Microsof t ISA 2004 содержит множест-во функций, необходимых для

организации полноценной работы кор-поративной сети. В предыдущих стать-ях [1, 2] я рассмотрел вопросы, связан-ные с подключением пользователей к Интернету и организацией удаленно-го доступа к корпоративным ресурсам. Теперь наша географически распреде-ленная корпоративная сеть может пол-ноценно функционировать, обеспечи-вая как доступ локальным пользова-телям к ресурсам Интернета, так и до-ступ сотрудникам, работающим уда-ленно в филиалах, к ресурсам основ-ной сети. Поскольку с течением вре-мени численность сотрудников компа-нии может увеличиваться, также могут

расширяться филиалы, в связи с этим возрастает нагрузка на каналы связи. Увеличение пропускной способности каналов, как правило, требует допол-нительных финансовых затрат, к тому же не всегда возможно. Но снизить на-грузку можно, не прибегая к каким-ли-бо затратам, используя возможности ISA Server. Для этого имеются возмож-ности управления трафиком, кэширо-вание, сжатие данных и т. д.

Предыстория, исправление ошибокИзначально в ISA 2004 некоторые из вышеперечисленных функций за-ложены не были. Например, отсутс-твовали средства управления трафи-ком и активное кэширование. В пре-

дыдущей версии межсетевого экрана ISA 2000 эти функции были реализо-ваны, однако, по заверениям Microsoft, не пользовались популярностью, поэ-тому в первом релизе 2004 средства управления трафиком отсутствовали. Но вскоре в Microsoft осознали оши-бочность такого подхода, и реализация данных средств была включена в па-кет обновлений Service Pack 2.

Перехожу непосредственно к опи-санию тех компонентов, с помощью которых можно повысить эффектив-ность сети.

Начну с фоновой интеллектуаль-ной службы передачи (Background Intelligent Transfer Service – BITS), ко-торая помогает передавать большие объемы информации без уменьше-

Тонкая настройка Microsoft ISA 2004

Известно, что настройки, используемые по умолчанию при установке программного обеспечения, не являются оптимальными. Как можно настроить межсетевой экран ISA 2004, чтобы оптимизировать работу сети?

Андрей Бирюков

Page 47: 051 Системный Администратор 02 2007

45№2, февраль 2007

администрирование

ния производительности сети. До-стигается это за счет передачи дан-ных небольшими порциями, исполь-зуя невостребованную доступную про-пускную способность, и соединения порций данных в месте назначения. В ISA Server 2004 SP2 встроен меха-низм кэширования данных, получен-ных из центра Microsoft Update с по-мощью BITS. Обновление операцион-ных систем Microsoft Windows и других продуктов компании Microsoft на ком-пьютерах компании может использо-вать большую часть доступной про-пускной способности сети. Это может создать особые сложности, если для подключения к Интернету использует-ся канал с низкой пропускной способ-ностью. Но своевременное выполне-ние обновлений необходимо для ста-бильной работы Windows-приложе-ний. ISA предоставляет возможность для кэширования данных Microsoft Update с помощью BITS для хранения обновлений так, чтобы кэш ISA-сер-вера сам отвечал на запросы. Обнов-ления могут быть получены через Ин-тернет один раз, а затем применяться по всей корпоративной сети. Для кэ-ширования данных Microsoft Update использует запросы HTTP по диапазо-ну (HTTP Range Requests). За счет то-го, что ISA-сервер может кэшировать такие запросы, достигается дополни-тельная эффективность. Это увеличи-вает скорость обновления при низкой пропускной способности сети и безо-пасность сетевого окружения, так как быстрая и своевременная установка обновлений позволяет повысить ус-тойчивость к сбоям.

Для того чтобы настроить кэширо-вание на ISA Server, нужно проделать следующие действия:

В консоли управления ISA-сервера откройте пункт «Cache», затем опре-делитесь с правилами «Cache Rules». В панели задач создайте правило кэ-ширования данных для обновлений: «Create the Microsoft Update Cache Rule». На последней странице про-смотрите информацию о настройке и нажмите «Finish», затем «Apply», что-бы изменения вступили в силу.

Сжимаем трафикДругим средством, позволяющим сни-зить загруженность каналов доступа в Интернет, является HTTP-компрес-

сия, которая уменьшает размер фай-ла, используя алгоритмы для снижения избыточности передаваемых данных. Таким образом, могут быть безопас-но сжаты файлы большинства типов. HTTP-компрессия использует стан-дартные алгоритмы GZIP и Deflate, ко-торые встроены в Windows 2000, 2003 и новые операционные системы, а так-же в Internet Explorer версии 4 и выше. Эти же алгоритмы используются для декомпрессии статических файлов и динамических ответов на стороне клиента, поддерживающего протокол HTTP 1.1. Клиент, настроенный на ис-пользование протокола HTTP 1.1, за-прашивает сжатую информацию у веб-сервера. Веб-сервер в ответе указы-вает, поддерживает ли он компрес-сию или нет.

В ISA-сервере HTTP-компрес-сия является глобальной установкой для всего трафика данного протокола. Она применяется ко всему HTTP-тра-фику, проходящему через ISA-сервер «к» или «от» отдельной сети или сете-вого объекта, а не только для трафи-ка, управляемого отдельным прави-лом. HTTP-компрессия представлена двумя веб-фильтрами:n Фильтр сжатия. Отвечает за ком-

прессию и декомпрессию запро-сов и откликов HTTP. Обладает высоким приоритетом и находится на вершине списка веб-фильтров, поскольку он отвечает за декомп-рессию, без чего остальные филь-тры не смогут получить доступ к со-держимому потока. В случае выбо-ра проверки сжатого содержимого декомпрессия должна проходить до того, как другие веб-фильтры будут проверять содержимое.

n Фильтр кэширования сжатого со-держимого. Отвечает за кэширо-вание сжатого содержимого и об-служивает запросы на сжатое со-держимое из кэша. У него самый низкий приоритет, и он расположен в конце списка веб-фильтров, пос-кольку кэширование происходит после того, как все фильтры про-верят содержимое.

Не рекомендуется изменять при-оритеты по умолчанию для этих фильт-ров. HTTP-компрессия также дает возможность установки компрессии по диапазону.

Компрессия по диапазону – это сжа-тие отдельного HTTP-запроса. Комп-рессия по диапазону может исполь-зоваться для несжатых файлов типа PDF (Portable Document Format – фор-мат портативных документов).

Однако, если в вашей сети ис-пользуется веб-сервер от Microsoft I IS (Internet Information Services), то не включайте эту функцию, так как он не поддерживает компрессию.

Применительно к инфраструкту-ре ISA, которую мы развернули в пре-дыдущих статьях [1, 2], и в частнос-ти к связи центрального и удаленного офисов, можно развернуть компрес-сию по диапазону между двумя ISA-серверами. К примеру, если в глав-ном офисе стоит веб-сервер, можно отключить компрессию по диапазо-

Рисунок 1. Взаимодействие между основным и удаленным офисами

Рисунок 2. Выбираем типы контента

Page 48: 051 Системный Администратор 02 2007

46

администрирование

ну во внутренней сети главного офиса, но включить ее во внешней сети между главным офисом и филиалами. Та-ким образом, компрессия по диапазону будет использо-ваться между офисами.

Прежде чем описать практическую реализацию, рас-смотрим процесс сжатия в ISA Server 2004 SP2:n Браузер клиента запрашивает контент.n Настройки в филиале не разрешают клиенту исполь-

зование режима сжатия контента. Однако ISA-сервер в филиале настроен на данный режим и поэтому посы-лает в главный офис уже сжатый запрос.

n ISA-сервер главного офиса получает запрос. Посколь-ку клиенту (ISA-сервер филиала) разрешен сжатый кон-тент, ISA-сервер посылает запрос на веб-сервер. Одна-ко ISA-сервер в главном офисе настроен на запрет за-просов с компрессией, ответ веб-сервера содержит не-сжатый контент.

n Когда ISA-сервер главного офиса получает запрос, он возвращает его ISA-серверу филиала. Поскольку за-прос от ISA-сервера филиала запрашивал сжатие, ISA-сервер главного офиса сжимает данные перед отправ-кой.

n ISA-сервер филиала получает ответ, сжатый контент. ISA-сервер делает декомпрессию и передает несжатые данные клиенту в филиале.

Графически алгоритм изображен на рис. 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-сервер запрашивает сжатое содер-жимое от сетевых элементов.

После настройки компрессии для сетевых элемен-тов в диалоговом окне «Set Compression» нажмите «OK» для его закрытия.

Особенности настройки компрессии по диапазонуКомпрессия по диапазону не устанавливается через кон-соль управления ISA-сервера. Поэтому администратор дол-жен редактировать xml-файл вручную и установить флажок CompressRange. Итак, выполните следующие действия:

1. Создайте xml-файл следующей структуры:

2. Вы можете создать xml-файл при настройке HTTP-ком-прессии в консоли управления ISA-сервера, а затем экспор-тировать настройки с помощью файла SetCompConfig.vbs. Синтаксис строки запуска:

3. Отредактируйте xml-файл для изменения настро-ек и снова запустите скрипт для измененного файла. За-пустите файл SetCompConfig.vbs с именем вашего фай-ла в качестве параметра. Так вы поместите файл в хра-нилище 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 не сжимается.

Организовываем очередностьСжатие HTTP-контента позволяет существенно сэконо-мить пропускную способность канала. Однако пропускной

Листинг 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

SetCompConfig.vbs export имя_файла

SetCompConfig.vbs import имя_файла

Page 49: 051 Системный Администратор 02 2007

47№2, февраль 2007

администрирование

способности на всех не хватает, в ре-зультате может возникнуть весьма не-приятная ситуация, когда пользовате-ли заполняют канал, скачивая мульти-медийный контент, зачастую не имею-щий никакого отношения к бизнес-про-цессам (но разрешенный политика-ми безопасности). А в это время кри-тически важные для бизнеса прило-жения не могут установить соедине-ние или работают слишком медленно. Для борьбы с этим можно воспользо-ваться встроенным в ISA Server 2004 SP2 механизмом приоритезации па-кетов.

Конечно, следует сразу отметить, что этот механизм несколько уступает службе QoS (Quality of Service), в час-тности, ее реализации на активном се-тевом оборудовании. Приоритет паке-тов – это установка глобальной поли-тики HTTP. Приоритет применяется ко всему трафику, проходящему через ISA-сервер, а не только к тому, кото-рый управляется специальным прави-лом. Приоритет пакетов устанавлива-ется с помощью веб-фильтра DiffServ, который проверяет URL или домен и назначает пакетам приоритет с помо-щью битов данных DiffServ. В ISA-сер-вере можно создать приоритеты, биты DiffServ которых совпадают с приори-тетами на корпоративных маршрутиза-торах. Таким образом, можно настро-ить корпоративные маршрутизаторы на передачу пакетов соответственно их приоритету (см. рис. 3).

Фильтр обладает высоким приори-тетом и находится в вершине списка веб-фильтров, поскольку этот фильтр должен знать реальный размер пос-ланного запроса или ответа и должен проверить данные, получаемые или пе-редаваемые ISA-сервером.

Не изменяйте приоритет по умолча-нию и порядок настроек фильтра.

Замечание 1ISA-сервер не добавляет биты DiffServ в заголовки, отличные от HTTP или HTTPS. ISA-сервер не может пере-давать существующие биты DiffServ на трафик других протоколов. (Дан-ная информация может быть удалена из заголовка сессии.)

Для ответов из кэша приоритет первого пакета не устанавливается.

Установка приоритета пакета не учитывает размер первой порции

n audion application/x-tarn x-world/x-vrmln application/zipn application/x-gzipn application/x-zip-compressedn application/x-compressn application/x-compressedn 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.

данных при назначении приоритета первому пакету. Поэтому приоритет первого пакета выставляется для боль-шой порции данных.

На вкладке «Content Types» (типы содержимого) вы можете указать, ка-кой тип содержимого требует сжатия. У вас есть возможность указать, ка-кой тип будет исключен (остальные включены) или какой тип включен (ос-тальные исключены). Далее выбери-те включаемые или исключаемые ти-пы содержимого. Рис. 3 является при-мером настройки, при которой HTML-документы будут сжиматься. Вы мо-жете создать новый тип в панели за-дач политик брандмауэра на вкладке «Toolbox» (средства), как описано в по-мощи ISA-сервера.

Замечание 2Далее перечислены типы данных, ко-торые не могут быть эффективно сжа-ты, поскольку они уже представлены с компрессией:n video

Рисунок 3. Устанавливаем очередность

Смотрим в будущееВ 2006 году вышла новая версия межсе-тевого экрана ISA 2006. Внешне она ма-ло отличается от предыдущей. Однако официальное описание продукта на сайте Microsoft сообщает о следующих измене-ниях и улучшениях:n улучшена возможность публикации

Outlook Web Access;n д о б а в л е н м а с т е р п у б л и к а ц и и

Sahrepoint;n добавлена поддержка Exchange 2007;n добавлен мастер подключения удален-

ных офисов по VPN;

n добавлена защита от атак типа flooding.

Также, по заявлению создателей, те-перь межсетевой экран Microsoft ISA Server 2006 Standard и Enterprise Edition доступен в виде appliance (программно-аппаратных решений).

Продукт уже продается, к тому же лю-бой желающий может загрузить испыта-тельную версию с сайта Microsoft [4] и свои-ми глазами убедиться в том, насколько хо-роша или плоха новая версия межсетевого экрана ISA 2006.

Page 50: 051 Системный Администратор 02 2007

48

администрирование

Сразу после развёртывания при-ложения, как правило, прово-дятся измерения исходной ра-

бочей нагрузки. Впоследствии необ-ходимо вести периодические измере-ния использования ресурсов системы: оперативной памяти, подсистемы дис-кового ввода-вывода, сети и централь-ного процессора, чтобы выявлять «уз-кие места», препятствующие произво-дительной работе системы.

Предлагаемая методика известна давно (её подробное описание приве-дено, например, в [1]) и в целом при-менима к любому компьютеру, под уп-равлением любой универсальной опе-рационной системы. Тут мы рассмот-рим её упрощённый вариант для пред-варительной оценки загрузки серве-ров под управлением операционной системы Solaris, с использованием ко-манд и скриптов, которые пришлись

мне по душе больше, чем стандарт-ные команды UNIX. Будем рассмат-ривать по порядку сначала загруз-ку оперативной памяти, потом дис-ков, сети и, наконец, процессоров. Та-кой порядок объясняется тем, что не-хватка памяти может внести погреш-ность в определение нагрузки на дис-ки, а загрузка дисков или сети – в оп-ределение загрузки процессора. В ка-честве тестового сервера использу-

Проводим мониторинг нагрузки операционной системы Solaris

Вы установили своё новое приложение (например, СУБД) на сервере с операционной системой Solaris. Сначала всё шло хорошо, пользователи были довольны, но со временем появились жалобы, производительность работы значительно снизилась, и вы задумались о модернизации оборудования. Не стоит этого делать наугад. Прежде чем принимать решение о замене сервера, определите, каких именно ресурсов не хватает.

Сергей Косько

Page 51: 051 Системный Администратор 02 2007

49№2, февраль 2007

администрирование

ются SUN Fire v440 (4X1593МГцX8Гб) и операционная сис-тема Solaris 8.

Мониторинг памятиПри настройке оперативной памяти главная цель – избе-жать её дефицита. Если запросы приложений к памяти пре-вышают имеющиеся ресурсы, «рабочие наборы» (working sets) выполняющихся процессов станут существенно мень-ше, чем необходимо для комфортной работы, возникнет из-быточная подкачка страниц оперативной памяти. По интен-сивности подкачки страниц судят о потребности в памяти. Традиционно наличие подкачки страниц определяют с по-мощью команды vmstat. Например, вывод команды vmstat при малой загрузке ОЗУ:

Анализируя колонки sr (scan rate) и po (page out), пыта-ются оценить интенсивность подкачки. Если значения в этих колонках не сильно отклоняются от среднестатистических, взятых за эталон благополучия значений (допустим, пускай эталоном будет полное отсутствие подкачки: sr=0 и po=0), можно считать, что проблемы подкачки нет. Еще одна ко-манда – sar. Вывод команды sar при малой загрузке ОЗУ:

Сплошные нули в колонках не являются самоцелью, это скорее показатель избытка оперативной памяти. В нормаль-но работающей системе всегда кто-то запрашивает допол-нительную память, кто-то её освобождает, пишет или чи-тает, но если обычная нагрузка была 100, а стало 100 000, это плохой знак. В операционной системе Solaris систе-ма виртуальной памяти, кеш файловой системы и каталог /tmp используют общий пул свободной оперативной памя-ти, распределяемый динамически, вследствие чего колон-ка free в выводе команды vmstat малоинформативна. Про-верим, что происходит с файлом подкачки:

Вывод команды iostat при низких объёмах подкачки:

Мы видим, что подкачки практически нет. И на после-док, в ОС Solaris (начиная с версии 8) есть чудесная ко-

манда «vmstat -p». Для версии 7 можно скачать команду «memstat» [2]. Вывод команды vmstat с опцией -p:

Её достоинство в том, что кроме scan rate, мы можем ви-деть показатели page-in/page-out/page-frees по отдельнос-ти для executable/anonymous/filesystem страниц памяти. Рас-смотрим пример:

Вывод команды vmstat, демонстрирующий активность кеша файловой системы:

До версии 7 операционной системы Solaris страни-цы файлового кеша и страницы памяти, отображаемые на swap, имели одинаковый приоритет, вследствие чего ак-тивность дискового кеша вносила путаницу в потребности в памяти. В версии 8 и выше эта проблема устранена. Ес-ли в последних трёх колонках мы видим большие цифры, то, возможно, пора переходить к проверке дисков (в дан-ном случае работает команда find). А вот если присутству-ют большие значения в колонке api, apo, apf, то необходи-мо проверить запросы процессов к памяти системы. Вы-полним команду prstat с сортировкой по объёму виртуаль-ной памяти:

Вывод этой команды показывает процессы, отсорти-рованные по размеру используемой виртуальной памяти

# vmstat 3

# sar -g 5 5

# /usr/sbin/swap -l

swapfile dev swaplo blocks free/dev/dsk/c1t0d0s1 118,1 16 8389632 6532608

# iostat -zxnp 1

# vmstat -p 2 5

$ find / -name sdfsdfsd -print &

13552

$ vmstat -p 1

$ prstat -a -s size

Page 52: 051 Системный Администратор 02 2007

50

администрирование

(а с ключем -s rss резидентной памяти), и суммарные пока-затели по имени пользователя. Это даёт возможность оп-ределиться с дальнейшими поисками «виновного».

Мониторинг дискового ввода-выводаСледить за загрузкой дисков существенно проще. Про-ведём несколько тестов. Например, с помощью пакета iozone [3]. Откроем несколько терминальных сессий и за-пустим команды.

В первой сессии:

Как видно, большая часть времени в приложении рас-ходуется на ожидание, а время, затраченное процессором, тратится большей частью в режиме sys, а не user.

Во второй сессии выполним следующую команду – iostat, получим вывод команды при большой нагрузке на файло-вую систему:

Команда показывает ввод-вывод по разделам дисков. Если добавить к этой команде ключ -C – «iostat -zxnpC 1», к пока-занной статистике прибавятся агрегированные показатели по контроллерам. Конкретные цифры, конечно же, строго индивидуальны, но если объёмы (kr/s, kw/s) или время опе-рации ввода-вывода (asvc_t/actv) значительно выше обыч-ного, это говорит о повышенной нагрузке на систему диско-вого ввода-вывода. Ещё один важный параметр %b – сте-пень загруженности диска (в процентах от времени интер-вала измерения). Часто он даже важнее, чем значения объ-ёмов передаваемых данных kr/s и kw/s, поскольку дисковые операции могут отличаться по размеру фрагмента (боль-шие и маленькие), кратности (кратные размеру блока и про-извольной величины) и способу доступа (с последователь-ным и произвольным доступом). В отдельной сессии рас-смотрим, как работает во время теста процессор системы. Запустим команду «sar -u 1 5». Мы можем наблюдать по-вышенное значение в колонках %sys и %wio, которое слу-жит одним из признаков присутствия нагрузки ввода-вы-вода и иллюстрирует возможную погрешность, которая мо-жет возникнуть, если мы начнём анализ нагрузки с наблю-дения за процессором.

Вывод команды sar во время операций ввода-вывода:

Проведём аналогичный тест для накопителей на гибких магнитных лентах. Получаются аналогичные результаты.

Вывод команды iostat во время записи на магнитную ленту:

Вывод команды sar во время записи на магнитную ленту:

Если с точки зрения памяти или процессоров у нас всё в порядке, тогда нам осталось рассмотреть сеть и про-цессор.

Мониторинг сетиНачнём, как всегда, с теста. Снова создадим несколько сессий: в одной запускаем тест сети. В другой – команду «sar -u 1 5», в третьей – команду «netstat».

Вывод команды sar при работе приложения, нагружаю-щего сеть:

Вывод команды netstat – количество пакетов, переда-ваемых по сети:

Команда netstat показывает количество пакетов, прини-маемых и передаваемых сетевым интерфейсом. По результа-там вывода команды «sar -u» мы видим, что при данном тесте создаётся нагрузка на процессор (колонки %usr и %sys).

$ iostat -zxnp 1

$ sar -u 1 5

$ dd if=/dev/zero of=/dev/rmt/0 bs=1024k count=200000…

$ iostat -zxnp 1

$ sar -u 1 5

$ /usr/sbin/spray datatarget -c 100000000…

$ sar -u 1 5

$ netstat -I ce0 1

$ time iozone -Ra

…real 30:29.2user 50.9sys 6:40.9

Page 53: 051 Системный Администратор 02 2007

51№2, февраль 2007

администрирование

Современные Ethernet-адаптеры подключаются к ком-мутаторам в режиме full-duplex, по этой причине воз-никновение ошибок и коллизий маловероятно и являет-ся не столько индикатором избыточной нагрузки на сеть, сколько показателем аппаратных проблем. Поэтому более интересен объём трафика в килобайтах в секунду. Можно воспользоваться утилитой ifstat [4].

Вывод команды ifstat – количество килобайт, переда-ваемых по сети:

Если сетевая подсистема не является «бутылочным гор-лышком», перейдём к проверке загрузки процессора.

Мониторинг загрузки процессораМониторинг центрального процессора является последним этапом. Запустим какое-нибудь «CPU-bound»-приложение и команду «sar -u 1 5».

Вывод команды sar при работе приложения, нагружаю-щего процессор:

Колонки %usr и %sys показывают в сумме процент времени, в течение которого процессор был занят. Ко-лонки %wio и %idle показывают в сумме процент вре-мени, в течение которого процессор простаивал. Час-то ошибочно к суммарной загрузке процессора прибав-ляют %wio, это неправильно. В случае большого процен-та %wio при запуске ресурсоёмкого приложения с точки зрения процессора эти такты будут отдаваться ему. Рас-смотрим случай, когда присутствуют два вида нагрузки: на диск и на процессор.

Воспользуемся командой vmstat, приложение исполь-зует диск и процессор:

Последние три колонки показывают нагрузку на про-цессор usr, sys, idl (%wio + %idle). Вот что показывает одно-временно запущенная команда «sar -u», нагрузка на диск и процессор:

Еще одним интересным показателем в листинге выво-да команды vmstat является первая колонка – r под заго-ловком procs, которая показывает количество процессов, готовых к выполнению и ожидающих, когда для них ос-вободится процессор. Если при значении idl=0 это число значительно больше, чем число процессоров, то это гово-рит о нехватке ресурсов процессора, особенно если оче-редь ещё и растёт.

Если в системе несколько процесоров, посмотреть на-грузку по процессорам поможет команда mpstat, посмот-рим некоторую произвольную нагрузку:

Значение %ildle во всех приведенных листингах говорит только о том, что процессоры системы простаивают. А вот значение этого параметра близкое к нулю – не обязательно катастрофа. Возможно, ваш сервер – это файловый сервер, и, несмотря на то что значение %wio большое, вы довольны скоростью файловых операций, или ваше приложение, пос-лав запрос по сети, находится в состоянии бесконечного цик-ла ожидания ответа удалённой системы, и вас это устраива-ет. Желательно иметь некоторый запас (но и не слишком из-быточный), например 20%, на случай пиковых нагрузок.

Теперь найдём самые затратные с точки зрения процес-сора приложения. Сделать это можно командой prstat, пос-мотрим сортировку по времени CPU:

В команде prstat существуют также опции «-v» или «-m» для более подробного вывода (см. рис. 1).

Можно, конечно, воспользоваться и стандартной коман-дой ps (SunOS/BSD compatibility command):

$ ifstat -t 1

$ sar -u 1 5

$ vmstat 1

$ sar –u 1 5

$ mpstat 1

$ prstat

$ /usr/ucb/ps -aux|head -5

Page 54: 051 Системный Администратор 02 2007

52

администрирование

Сделаем работу удобнееЧтобы не набирать слишком большое количество команд, воспользуемся некоторыми свободно распространяемыми утилитами. Вместо команды prstat можно запустить коман-ду top [5]. Использование top позволяет на одном экране ви-деть как общую загрузку процессора %usr, %sys, %wio, %idle, так и периодически обновляющийся список процессов, от-сортированных по различным критериям, например, по на-грузке на процессор. Если имеется Х-сервер, можно восполь-зоваться утилитой xcpustate [6], которая отображает инфор-мацию по загрузке процессора и дисковых накопителей.

Вывод этих команд приведен на рис. 2. Дополнительные сведения о системе Solaris вы можете найти на сайте [2], кро-ме того, в разделе сайта «Download» вы найдёте много по-лезных программ, которые помогут получить более подроб-ную информацию о процессах, которые происходят в систе-ме, и позволят детальнее определить источник проблем.

Автоматизируем процессНаконец, чтобы осуществлять постоянный мониторинг, вос-пользуемся помощью скриптов sa1 и sa2 из пакета «system activity report package», которые предназначены для запус-ка в качестве заданий для демона cron.

Внесём сбор статистики в таблицу crontab.

Раскомментируйте и при необходимости отредактируй-те две последние строки. Например: «Собирать статисти-ку круглосуточно с интервалом в 20 минут и формировать текстовый отчёт перед полуночью».

Эти скрипты создают двоичные файлы статистики и текстовые фай-лы отчётов, которые хранятся в ката-логе /var/adm/sa в течение недели (по умолчанию). В дальнейшем их можно будет использовать для поиска перио-дов максимальной и минимальной за-грузки и как отправную точку для бо-лее подробного анализа.

1. ht tp: //www.sun.com/blueprints/0602/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.

# !/bin/sh

if [ -z "$DISPLAY" ]thenwho_host=`who am i |awk ' { print $6 }' | sed 's/[(|)]//g'`DISPLAY=$who_host:0.0 ;export DISPLAYfi/usr/local/bin/xcpustate -wait -disk ↵ -display $DISPLAY -geometry 200x760

Рисунок 2. Рабочий стол CDE, команды top и xcpustate

$ su – sys$ EDITOR=vi;export EDITOR$ crontab –e#ident "@(#)sys 1.5 92/07/14 SMI" /* SVr4.0 1.2 */## The sys crontab should be used to do performance# collection. See cron and performance manual pages# 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 -e 18:01 -i 1200 –A

0,20,40 * * * * /usr/lib/sa/sa155 23 * * * /usr/lib/sa/sa2 -s 00:00 -e 23:59 -i 1200 –A

Рисунок 1. Команда prstat, детальный вывод

Page 55: 051 Системный Администратор 02 2007
Page 56: 051 Системный Администратор 02 2007

54

администрирование

Полный список нововведений вы можете посмотреть по ссыл-ке [4], а я попытаюсь нагляд-

но показать основные преимущества Solaris нового поколения.

ЗоныКлассическое IT-правило «один сер-вис – один сервер» практически ни-когда не удается реализовать из-за не-хватки средств и ресурсов. «Железо»

слишком дорогое, поддержка мно-жества серверов тоже недешевая, да и чересчур много систем прихо-дится администрировать сразу – не-возможно уследить ни за обновлени-

Нововведения в Solaris 10:

Алексей Коробкин

Современная версия ОС Solaris 10 содержит в себе большое количество нововведений и уникальных технологий, что даже бывалые администраторы не успевают уследить за всеми появившимися возможностями.

на что обратить внимание админу?

Page 57: 051 Системный Администратор 02 2007

55№2, февраль 2007

администрирование

ями, ни за пользователями. Стоимость IT-инфраструктуры с каждым новым сервером возрастает в геометрической прогрессии. Чтобы всё-таки приблизиться к идеалу и уп-ростить работу администраторов, в Solaris была реализо-вана концепция контейнеров (containers), иначе называе-мых зонами (zones).

Зона похожа на Jail во FreeBSD, но имеет больше сте-пеней свободы. Приложения, помещенные в различные зо-ны, полностью изолированы друг от друга и практически независимы от аппаратного обеспечения. У каждой зоны может быть свой набор установленных программ, свои се-тевые адреса, свои объекты файловой системы, свой спи-сок пользователей, и в том числе свой суперпользователь – root. Ядро системы – единственное, что есть неизменно общего у всех установленных зон. Таким образом, каж-дая зона работает как независимая операционная систе-ма, что дает нам возможность просто и безопасно созда-вать виртуальные серверы, помещая приложения в соот-ветствующие зоны.

Есть много способов практического применения зон. Можно использовать зоны для изоляции приложений, риск атаки которых достаточно велик – в таком случае взломщик будет ограничен пределами зоны и не сможет нанести боль-шого вреда. Или, к примеру, если вы поддерживаете серь-езный веб-сервер, над различными сайтами которого тру-дятся разные группы дизайнеров, вы можете каждой груп-пе предоставить свою среду, свои приложения и даже дать им полный контроль над локальным веб-сервером или са-мой зоной. Если же с вашим сервером работают програм-мисты, то можно сгенерировать зону, максимально подоб-ную production-окружению, и дать им возможность как сле-дует протестировать свои приложения. Некоторые веб-ад-министраторы в зону помещают honeypot-ловушки и конт-ролируют их активность снаружи – зона изнутри не может узнать, кто и как за ней наблюдает.

Хорошее решениее – разнести основные службы сер-вера по различным зонам. Можно будет перезагружать зо-ны сервера по отдельности, не мешая остальным прило-жениям, и обеспечить их раздельное резервное копирова-ние – в таком случае вы сможете быстро восстановить зо-ну на ближайшем доступном сервере, если основной вый-дет из строя. Кроме того, упрощаются миграция и обновле-ние приложений в зонах. Кластерный комплекс Sun Cluster, доступный бесплатно на sun.com, позволяет организовать и зоны высокой доступности – резервная зона поднимет-ся мгновенно (загрузка зоны занимает секунды), если про-изойдёт сбой основной зоны. Впрочем, благодаря просто-те настройки такую отказоустойчивость можно реализо-вать и самостоятельно с помощью скриптов. Давайте луч-ше поближе взглянем на сами зоны.

Рассмотрим простую схему: операционная система плюс одна зона. Считается, что сама операционная систе-ма тоже находится в зоне, и эта зона называется глобаль-ной (global zone). Все остальные зоны назовем локальны-ми, хотя в английской терминологии они называются «не-глобальные» (non-global).

Пусть наша глобальная зона имеет адрес 10.0.0.1. Внут-ри у неё находится локальная зона «web» с веб-сервером внутри и адресом 10.0.0.101.

Попробуем самостоятельно создать такую конфигу-рацию:

По шагам: мы создали зону, путь к её файлам указали как /z/web, включили автозагрузку зоны при старте серве-ра и назначили ей IP-адрес 10.0.0.101. Этот IP-адрес в даль-нейшем автоматически появится как дополнительный логи-ческий интерфейс физического сетевого интерфейса pcn0, нам ничего настраивать не надо.

Посмотрим весь список настроек зоны:

Кроме той информации, что мы ввели вручную, в экс-порте настроек присутствуют блоки:

Так обозначается подключение каталогов /lib, /platform, /sbin, /usr глобальной зоны внутрь локальной – они будут подмон-тированы при помощи loopback file system только для чтения. Благодаря этому большинство системных файлов не пот-ребуется устанавливать еще раз, так что установка зоны не займёт много места.

При желании мы можем отказаться от этих каталогов, примонтировать другие или не монтировать вообще ниче-го. Тогда файловая структура локальной зоны будет пол-ностью отличаться от глобальной. Кроме того, мы можем примонтировать какую-то файловую систему в режиме записи и обращаться к ней из других зон в режиме чте-ния. Это поможет организовать, например, обмен данны-ми между зонами, но мы рискуем ухудшить безопасность системы. По умолчанию между зонами нет никаких свя-зей, кроме возможности связаться по сети. Глобальная зона, как исключение, может обращаться ко всем файло-вым системам всех зон, что позволяет незаметно прово-дить аудит файлов локальных зон, выполнять резервное копирование, использовать системы обнаружения втор-жения (IDS), и многое другое.

# zonecfg -z web

web: No such zone configuredUse 'create' to begin configuring a new zone.

zonecfg:web> createzonecfg:web> set zonepath=/z/webzonecfg:web> set autoboot=truezonecfg:web> add netzonecfg:web:net> set physical=pcn0zonecfg:web:net> set address=10.0.0.101zonecfg:web:net> endzonecfg:web> exit

# zonecfg -z web info

zonepath: /z/webautoboot: truepool:inherit-pkg-dir: dir: /libinherit-pkg-dir: dir: /platforminherit-pkg-dir: dir: /sbininherit-pkg-dir: dir: /usrnet: address: 10.0.0.101 physical: pcn0

inherit-pkg-dir:dir: /путь/к/каталогу

Page 58: 051 Системный Администратор 02 2007

56

администрирование

Посмотрим, в каком состоянии наша зона.

Зона «сконфигурирована», но операционная система туда не установлена. Выполним установку:

Ошибка. По требованию Solaris, путь к корню зоны дол-жен иметь атрибуты доступа 0700 и владельца root. Испра-вим ошибку и продолжим:

Solaris начинает копировать файлы внутрь зоны. Он ин-сталлирует все пакеты, которые установлены в глобальной зоне, и настраивает конфигурационные файлы в каталоге /etc локальной зоны. Локальная зона никак не привязана к настройкам глобальной зоны, в том числе к сервису разре-шения имен, поэтому она может иметь совершенно произ-вольную конфигурацию. Например, глобальная зона может пользоваться DNS и хранить пользователей в /etc/passwd, а локальная – обращаться только в LDAP или NIS+ за поль-зователями и именами компьютеров.

Тем временем копирование и установка пакетов закон-чились.

На самом деле копировались только вспомогательные файлы в каталоги /etc и /var. Дерево каталогов /usr, как мы знаем, подключено из глобальной зоны, и ничего туда ко-пировать не надо. Так мы, во-первых, экономим место, а во-вторых, при установке обновлений к пакетам ОС мы обнов-ляем все зоны сразу.

Посмотрим состояние зоны:

Теперь зона в состоянии installed. Попробуем её запус-тить:

Если ошибок нет, то зона запустится. Посмотрим со-стояние:

Запустилась? Попингуем:

Попробуем зайти на её консоль (для выхода из консо-ли нажмите тильду и точку (~.)):

Мы сейчас в зоне web. Посмотрим:

Изучим список процессов зоны:

Интересно, что родительским у большинства процессов является процесс zsched c PID=4122, а PID процесса init вов-се не равен 1. Это значит, что зона действительно запуще-на, и мы находимся в её изолированной виртуальной сре-де. Ура, вот настоящее сисадминское удовольствие: родил-ся новый сервер, пусть даже виртуальный. Посчитайте-ка, нам на это потребовалось меньше десяти команд, включая

# zoneadm list -cv

ID NAME STATUS PATH 0 global running / - web installed /z/web

# zoneadm -z web boot

# zoneadm list -cv

ID NAME STATUS PATH 0 global running / 1 web running /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 Generic January 2005

# 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 22:39:19 on-line since 12/26/2006 05:53:50. The i386 processor operates at 3000 MHz, and has an i387 compatible floating point processor.Status of virtual processor 1 as of: 12/26/2006 22:39:19 on-line since 12/26/2006 05:53:57. The i386 processor operates at 3000 MHz, and has an i387 compatible floating point processor.

# ps -e -o user,pid,ppid,time,fname

UID PID PPID TIME CMDroot 4122 4122 0:00 zschedroot 4135 4122 0:26 svc.startdroot 4133 4122 0:01 initroot 4774 4122 0:00 shroot 4137 4122 2:01 svc.configdroot 4779 4774 0:00 psdaemon 4564 4122 0:00 kcfdroot 4565 4122 0:00 nscdroot 4691 4686 0:00 sysidnetroot 4582 4122 0:02 snmpdroot 4685 4122 0:00 cronroot 4720 4691 0:00 sysidnet

# zoneadm list -cv

ID NAME STATUS PATH 0 global running / - web configured /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

inherit-pkg-dir:dir: /путь/к/каталогу

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%...

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.

Page 59: 051 Системный Администратор 02 2007

57№2, февраль 2007

администрирование

настройку зоны в zonecfg. А чем меньше команд, тем мень-ше вероятность ошибиться.

Посмотрим, какие файловые системы у нас подклю-чены:

Про удивительную новую файловую систему ZFS я расскажу в следующей статье, а пока обратите внима-ние на файловые системы, которые значатся как lofs. Это файловые системы глобальной зоны, доступные толь-ко для чтения.

Как видим, достаточно безопасная конфигурация. Да-вайте попробуем запустить веб-сервер Apache внутри зо-ны. Я пропущу настройки сетевого интерфейса и DNS – здесь всё делается так же, как если бы это был свежеуста-новленный Solaris.

SMF и частичные привилегииКоманда, которую мы сейчас выполнили, – еще одно нов-шество Solaris. Все службы, которые запускаются в систе-ме и призваны работать постоянно, теперь управляются при помощи Service Management Facility (SMF). SMF поз-воляет указывать зависимости между службами, ускорять загрузку системы за счёт параллельного запуска незави-симых друг от друга служб, автоматически перезапускать службы в процессе работы сервера вместе с зависимостя-ми и сильно упрощает управление службами с точки зре-ния администратора.

Например, мы хотим узнать, все ли службы нормально запустились после старта сервера. Смотрим:

Мы видим, что принт-сервер не запустился, и из-за это-го не запустились подсистемы печати BSD и IPP.

Вернемся к Apache и разрешим ему работать. Сна-чала дадим ему какой-нибудь файл конфигурации, а по-том включим службу. Название службы, кстати, мож-но указывать и целиком, как svc:/network/http:apache2, и частями.

Нет необходимости перебирать ссылки в /etc/rc?.d, как это приходилось делать раньше – сервис просто за-пустился и работает. И будет впредь запускаться автома-тически при загрузке зоны.

А теперь посмотрим сразу две интересные особеннос-ти 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 с ограни-ченными привилегиями. Посмотрим базовые права про-цесса:

# df -n

/ : zfs/dev : lofs/lib : lofs/platform : lofs/sbin : lofs/usr : lofs/proc : proc...

# touch /usr/test

touch: /usr/test cannot create

# mount | grep /usr

/usr on /usr read only/setuid/nodevices/nosub/dev=840000

# svcs http

# svcs -xv

STATE STIME FMRIdisabled 22:38:28 svc:/network/http:apache2

svc:/application/print/server:default (LP print server) State: disabled since Tue Dec 26 16:55:08 2006Reason: Disabled by an administrator. See: http://sun.com/msg/SMF-8000-05 See: man -M /usr/share/man -s 1M lpschedImpact: 2 dependent services are not running: svc:/application/print/rfc1179:default svc:/application/print/ipp-listener:default

# cp /etc/apache2/httpd.conf-example ↵ /etc/apache2/httpd.conf# svcadm enable http

# pgrep -fl http

7797 /usr/apache2/bin/httpd -k start7801 /usr/apache2/bin/httpd -k start7799 /usr/apache2/bin/httpd -k start7800 /usr/apache2/bin/httpd -k start7795 /usr/apache2/bin/httpd -k start7798 /usr/apache2/bin/httpd -k start

# ppriv -S `pgrep -o http`

27400: /usr/apache2/bin/httpd -k startflags = <none> E: net_privaddr,proc_exec,proc_fork

Page 60: 051 Системный Администратор 02 2007

58

администрирование

Буква E отображает список действующих (effective) ба-зовых прав процесса. Кроме права net_privaddr, нужного для открытия порта, у сервера есть права запускать дру-гие процессы и потоки. Такие права, кстати, целесообраз-но отбирать у процессов, которые рискуют быть взломан-ными, чтобы злоумышленник не смог ничего лишнего за-пустить.

Итого, мы не только изолировали приложение, мы ещё и защитили его дополнительно. Посмотрим теперь на про-изводительность. Как узнать, насколько наша зона на-гружает сервер? Команда prstat с новым ключом -Z пока-жет, кроме обычного списка процессов, табличку актив-ности зон:

Предположим, что у нас есть нестабильное приложение на отдельном сервере, которое иногда начинает загружать CPU на все 100%. Неужели мы просто перенесем это при-ложение в зону и дадим ему время от времени валить наш сервер своей неконтролируемой активностью? А вот и нет. Кроме обычного распределения ресурсов по проектам, ко-торое всегда было в Solaris, теперь есть дополнительные средства ограничения и резервации ресурсов специально для зон. Например, можно выделить зоне только несколь-ко процессоров системы. Если, скажем, у вас сервер T2000 с 32-разрядными ядрами и вы хотите запустить шесть ак-тивных приложений в шести зонах, то целесообразно выде-лить им по 4 ядра на зону и оставить 8 ядер основной сис-теме. Как можно эффективно распределять ресурсы, пос-мотрите на BigAdmin, [2], или в BluePrints, [3].

Если у вас не так много свободы в манипулировании ре-сурсами, то при консолидации серверов и переносе прило-жений в зоны важно заранее представлять себе планируе-мую нагрузку и не помещать на один сервер два приложе-ния, требовательные к одному и тому же ресурсу. Желатель-но брать такие пары, в которых, например, одно приложе-ние активно использует CPU и не использует ввод-вывод, а второе – наоборот. Тогда выигрыш в производительнос-ти и стоимости будет существенно больше.

IP MultipathingХорошо, скажете вы, вот мои сервисы теперь собраны в зо-ны, защищены, наделены нужными ресурсами. И что же, теперь у меня образовалась единая точка отказа – сете-вое подключение? Действительно, это важная проблема. К счастью, в современных серверах редко бывает всего один сетевой интерфейс. Если у вас их несколько, вы мо-жете воспользоваться еще одной особенностью Solaris – IP Multipathing (IPMP). IPMP появился еще в 8-й версии, к 10-й его возможности сильно возросли, но тем не менее я не видел, чтобы его активно использовали.

Если у нас есть несколько сетевых интерфейсов, под-ключенных к одной сети, мы можем объединить их в груп-пу и указать, что каждый является резервным для осталь-ных. Таким образом, если Solaris определяет отказ одного из сетевых соединений, он переносит все адреса с интер-фейса, на котором определен отказ, на другой интерфейс группы. При этом установленные сетевые подключения от клиентов сервера тоже переносятся, то есть Solaris пыта-ется их сохранить.

Как это работает? Через определенные промежутки времени каждый интерфейс рассылает мультикастовые за-просы, проверяя, работает ли сетевое подключение. Под-разумевается, что в одной с сервером сети есть еще кто-нибудь, кто на эти запросы ответит. Если на одном из ин-терфейсов ответов нет уже 10 секунд (значение по умол-чанию для IPMP), сервер создает логические интерфейсы с адресами отказавшего интерфейса на работающем ин-терфейсе. Если отключившийся интерфейс оживает, сер-вер через 10 секунд переносит адреса обратно.

При планировании включения новых зон принимайте во внимание нагрузку на сетевые интерфейсы и распреде-ляйте трафик между ними. Кроме того, поскольку в совре-менном Solaris TCP/IP-стек был полностью переписан, те-перь низкоуровневая обработка сетевой нагрузки – преры-ваний от сетевой карты в том числе – распределяется меж-ду всеми процессорами, а не отдается нулевому процессо-ру, как это сделано в большинстве ОС. Если ваш сервер об-рабатывает огромное количество пакетов в секунду, имеет смысл изменить это поведение. Например, можно убрать обработку прерываний с первых пяти процессоров:

Теперь эти процессоры заняты только исполнением приложений.

ЗаключениеМы вкратце посмотрели на зоны, привилегии процессов и управление службами. За кадром остались файловая система 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.

# psradm -i 0 1 2 3 4

I: net_privaddr,proc_exec,proc_fork P: net_privaddr,proc_exec,proc_fork L: zone

ZONEID NPROC SIZE RSS MEMORY TIME CPU ZONE 0 44 322M 178M 37% 0:10:32 0.5% global 4 42 317M 154M 32% 0:08:34 0.5% web 2 23 237M 157M 15% 0:28:34 0.0% jabber 1 24 318M 156M 15% 0:23:12 0.0% mysql 3 24 84M 53M 5.2% 0:05:43 0.0% dspam

Page 61: 051 Системный Администратор 02 2007
Page 62: 051 Системный Администратор 02 2007

60

администрирование

Дистрибутив tinysofaЦел ь а в с т р а л и й с ко го п р о е к та tinysofa (http://www.tinysofa.org) – со-здание быстрой, надежной, стабиль-ной и безопасной операционной систе-мы, которую можно применять на сер-верах уровня предприятия, которая ос-тавалась бы в течение своего жизнен-ного цикла свободной (As in beer). При-чем цели проекта, можно сказать, гло-бальные – стать де-факто серверным дистрибутивом Linux, заполнив нишу свободных решений, предназначен-ных для этой цели.

Основой первых версий этого дис-трибутива служил коммерческий дис-трибутив Trustix Secure Linux, кото-рый, в свою очередь, базировался на Red Hat. В середине октября вы-шел релиз tinysofa classic server 2.0 Update 6 (Ceara), о котором и будет идти речь далее. Второй релиз также основан на Trustix 2.1 и Fedora Core. В частности, набор пакетов аналоги-чен Trustix. Хотя есть и изменения, так как некоторые идеи взяты с дистри-бутивов SUSE и Conectiva. Дистрибу-тив полностью совместим с Red Hat

Enterprise Linux (включая ядро и ра-бочее пространство), поэтому при от-сутствии в репозитарии tinysofa необ-ходимых пакетов их всегда можно бу-дет взять с RHEL. Проблем с их уста-новкой не будет. Все пакеты, входящие в состав дистрибутива, собраны с i586 оптимизацией, доступна и x86_64-вер-сия. Для работы с пакетами использу-ется APT, с помощью которого можно легко и просто устанавливать прило-жения и исправления в безопасности. Начиная со второй версии в дистри-бутиве дополнительно к APT для ра-

Обзор серверного дистрибутива tinysofa

Установить и настроить надежную, всесторонне защищенную систему на сервер не такая уж и легкая задача. Упростить ее можно, только правильно подобрав дистрибутив и компоненты будущей системы.

Сергей Яремчук

Page 63: 051 Системный Администратор 02 2007

61№2, февраль 2007

администрирование

боты с пакетами также используется и SmartPM. Вокруг дистрибутива об-разовалось большое комьюнити, чле-ны которого составляют группу под-держки пользователей tinysofa и дист-рибьюторов пакетов.

Безопасность является для tinysofa приоритетом номер один. Перед выхо-дом дистрибутив тщательно тестирует-ся на огромном количестве критичес-ких задач. В конфигурации по умолча-нию стартует всего один сетевой сер-вис – Postfix, привязанный к интерфей-су 127.0.0.1. Решение о запуске осталь-ных администратор принимает само-стоятельно после их настройки, на-чальные значения в конфигурацион-ных файлах этих сервисов также вы-браны с учетом максимальной защи-щенности.

В текущем релизе использова-но ядро 2.6.16 с поддержкой SELinux и grsecurity, переработанная PAM-ау-тентификация, допускающая настрой-ку контроля доступа в рамках всей системы. В компиляторе gcc 3.4.3 ис-пользована система защиты от «сры-ва» стека («stack smashing»), разрабо-танная в корпорации IBM.

Установка сервера tinysofaДистрибутив прост в установке. Если вы сталкивались с ранними версиями Red Hat или Trustix, то не найдете ниче-го нового. Образ диска, который мож-но получить на сайте проекта, по раз-меру небольшой – 350 Мб.

Весь процесс установки прохо-дит в псевдографической среде. Хотя здесь нет красоты, какой могут пох-вастаться современные дистрибути-вы вроде SUSE и Mandriva, зато с фун-кциональностью все в порядке. Интер-фейс англоязычный, других вариантов не предусмотрено. Пользователь, ус-танавливающий tinysofa, будет после-довательно проведен по всем этапам, зная необходимые параметры, преодо-леть их можно будет минут за пять.

Помимо CD-ROM поддерживает-ся установка с раздела жесткого дис-ка, NFS, FTP и HTTP. Можно прове-рить установочный диск на наличие ошибок.

На этапе создания разделов мож-но выбрать автоматическое разби-ение диска, использовать Disk Druid или ручной (fdisk) вариант. Несмот-

ря на то, что на сайте DistroWatch.com в списке поддерживаемых файло-вых систем были указаны только ext2 и ext3, при форматировании можно также указать ReiserFS, VFAT, а также Soft-RAID. Путаница может возникнуть только при указании размера разде-ла. Доступны три варианта: Fixed size, Fill maximum size on MB и Fill all aval table space.

После создания и форматирова-ния разделов – установка загрузчика на выбор – GRUB или LILO.

Этап настройки сети стандартен. Выбираем сетевой интерфейс, указы-ваем IP-адрес, сетевую маску, адреса DNS-серверов и автоматическую ак-тивацию при загрузке.

Далее – настройка поддержи-ваемых вариантов аутентифика-ции. По умолчанию включены толь-ко Use Shadow Password и Enable MD5 password. Здесь же можно добавить поддержку NIS, LDAP и Kerberos, ак-тивировав опцию и заполнив предла-гаемые параметры.

В небольшом по размеру дистри-бутиве выбирать пакеты легко, тем более здесь нет групп и подгрупп, в которых можно запутаться. Есть несколько базовых групп пакетов, предлагаемые к установке серверы (AppleTalk, IMAP Server (Cyrus, dovecot), OpenSSH, OpenLDAP, Apache, Samba, DHCP, vsftpd, tftp и другие) представ-лены отдельными позициями. Выбор Developers позволит включить весь представленный набор средств раз-работки (PHP 5.0.4, Python 2.4.2, GCC 3.4.3, Ruby 1.8.2, subversion 1.1.3, nasm 0.98.39 и другие).

По умолчанию устанавливает-ся и драйвер экспорта блочных уст-ройств DRBD 0.7.14. И пакет UCARP 1.1 (Common Address Redundancy Protocol), использование которого позволяет ор-ганизовать совместное использова-ние IP между несколькими сервера-ми в локальной сети, что может при-годиться для балансировки нагруз-ки (IP одновременно используют все сервера) или для создания отказоус-тойчивых систем.

Есть и wireless-tools, Squid, базы данных MySQL 4.1.21 и PostgreSQL 7.4.13. Для настройки PPPoE-соеди-нения в комплект включен RP-PPPoE, с помощью которого это можно проде-лать за пару минут. Достаточно ввес-ти adsl-setup (в новых версиях паке-та pppoe-setup) и ответить на все воп-росы. Всего в дистрибутиве доступно 604 пакета.

Как говорилось, по умолчанию за-пускается только один сервер Postfix, после установки пакетов администра-тору предлагается активировать еще и сервер SSH. Все остальное доводит-ся на уже рабочей системе.

Без сомнения, дистрибутивы вро-де tinysofa classic server ориентирова-ны на опытных администраторов, ко-торые хотят полностью контролиро-вать процесс установки и настройки системных сервисов, знакомы с осо-бенностями работы входящих в его состав приложений и имеющие неко-торое время на его доводку. Но зато в свои руки вы получите стабильную, безопасную и предсказуемую систему, которую просто поддерживать в акту-альном состоянии.

Преимущества и недостатки в использовании «обычного» дистрибутива для сервераПервый вариант, который приходит в го-лову при попытке выбрать систему для ус-тановки на сервер, – использовать обыч-ный дистрибутив вроде ALTLinux, ASP Linux, SUSE или что-то из RedHat/Fedora, в ко-тором оставить только самые необходи-мые пакеты.

Преимущества: использование одного дистрибутива для сервера и клиентов зна-чительно упрощает поддержку. В репози-тариях многих популярных решений можно найти готовые пакеты на все случаи жиз-ни, которые легко устанавливаются. Спе-

циальные группы выпускают критические обновления, упрощая поддержку систе-мы в самом актуальном состоянии. Неко-торые коммерческие приложения доступ-ны в скомпилированном виде, для наибо-лее популярных дистрибутивов.

В то же время есть и минусы. Дистри-бутивы широкого применения собирают-ся не с самыми оптимальными для серве-ра параметрами. И, как правило, после ус-тановки, даже в самой минимальной кон-фигурации, содержат большое количество лишних пакетов. Кроме того, в таких дис-трибутивах установленные сервисы стар-туют сразу же после инсталляции, с пара-метрами по умолчанию.

Page 64: 051 Системный Администратор 02 2007

62

серверная

Как навести порядок в стойке

Даниил Никифоров

Кто из вас, имеющих в распоряжении серверную, не сталкивался с проблемой «бороды» из проводов на лицевой стороне стойки? Раздражает, не даёт спокойно спать. Хочется навести порядок, чтобы не было ни одного лишнего проводочка. С чего начать?

Page 65: 051 Системный Администратор 02 2007

63№2, февраль 2007

серверная

Поводом написания статьи стала долгая дискуссия о том, как же этот порядок навести. Не полу-

чив конкретных советов и не найдя ни-чего стоящего в Интернете, я пошёл в серверную и начал творить.

Коротко обрисую проблему. Eсть стойка, в которой собрано актив-ное оборудование и кроссовые бло-ки (далее всё будем называть блока-ми). Каждый блок имеет хотя бы один порт (за исключением системы охлаж-дения и т. п.) для соединения с дру-гим блоком. Если у вас много блоков и у каждого много портов, то огром-ное количество соединительных про-водов со временем закрывают всё в стойке, и уже непонятно, что с чем соединено.

Для успешного решения этой про-блемы необходимы две составляю-щие:n аккуратная укладка проводов;n документирование всех соедине-

ний (см. рис. 1).

Начну с некоторых пояснений при-нятой у нас маркировки, которая идёт на рисунках.

Приняты следующие типы соеди-нений:n сетевые каналы – это для компью-

теров;n телефоны – соответственно линии

для телефонов;n внешние каналы – модемы, спут-

ники и прочее оборудование за пре-делами стойки (кроме рабочих мест).

Вся маркировка выполняется в пре-делах одной стойки. Не спорю, можно ввести единую нумерацию для всего кампуса, но обильное количество лиш-них символов в маркировке каждого порта вызывают сложности при даль-нейшей работе.

Все блоки в стойке помечены «KN», где N – порядковый номер блока, начи-ная сверху. В каждом блоке порты по-мечены цифрой по порядку. В резуль-тате каждый порт в стойке имеет но-мер вида «KN.M» (N – блок, M – порт). Так как порты телефонной станции разведены на панель в эту же стойку, то правила маркировки для телефон-ных линий те же.

Внешние каналы помечаются «ВN.M». Номера блока и порта такие,

как и у порта, куда этот канал подходит. А вот куда ведёт этот канал из стойки, записано на отдельном листе (на рис. 1 закладка «Внешние каналы»), состо-ящем из двух колонок: номер порта и куда ведёт. Кстати, благодаря этому и не требуются дополнительные уров-ни в номерах.

Исключение составляют магистра-ли, соединяющие стойки. Здесь номер состоит из номеров стоек, между кото-рыми она проброшена, и номера жилы в этой магистрали.

Маркировка рабочих мест состо-ит из номера места по плану здания

и буквы розетки на месте (1А – пер-вое место, первая розетка). Отмечу, что здесь упрощённая маркировка, не включающая аббревиатур объек-та и номера этажа из плана розеток в здании.

Теперь о цветах. Принципиально важно выделять разными цветами эле-менты таблицы, т.к. это позволяет од-ним взглядом оценить что где находит-ся. Выбор цветов на ваше усмотрение. Главное, чтобы вы и ваши коллеги не запутались.

В нашем примере цвета следую-щие:

Рисунок 1. Пример документирования имеющихся блоков и соединений

Рисунок 2. Планирование «идеального» варианта

Page 66: 051 Системный Администратор 02 2007

64

серверная

n оранжевый – сетевые каналы;n бледно-зелёный – телефоны;n жёлтый – внешние каналы и ма-

гистрали;n бледно-жёлтый – номера портов

(в пределах панели);n белый – свободный порт.

На рис. 1 показан пример доку-ментирования содержимого стой-ки. В начале указано наименование стойки. В зависимости от размера се-ти, можно указывать дополнительную градацию (страна, город, объект, ком-ната). Затем идут блоки. Если это ка-кое-то оборудование, то обозначает-ся двумя строками (номер порта и что подключено). Если это коммутацион-

ный разъём (магистрали и рабочие станции), то тремя строками (номер порта на панели, что подходит сзади, что подключено). К примеру, второ-му порту на концентраторе К3 соот-ветствует запись «К4.1». Это значит, что сюда подключен провод с первого порта панели «К4». Ниже идёт эта са-мая панель. Первому порту соответс-твуют две записи «1А» и «К3.2». Пер-вая говорит о том, что сюда подве-дено рабочее место «1А» (так оно от-мечено на плане здания). Вторая за-пись, как и на К3, говорит о том, где находится второй конец кроссового провода. Как видно, записи о крос-сировании дублируются, будьте вни-мательны.

ПерекоммутацияСложность заключается в том, что хо-чется перекинуть провода как-то по-удобнее, но всё снимать и потом за-ново подключать долго, тяжело, да и руководство такого простоя не потер-пит. Чтобы этого избежать, нужно со-ставить план перекоммутации.

Смотрим рис. 2. Стоит задача сделать перекоммутацию К3, что-бы было наименьшее расстояние до подключенных портов на К4. Пер-вым действием мы под К3 делаем ещё одну строчку, где расположим подключения в той последователь-ности, которая нам нужна (не объяс-няю, смотрите по номерам портов). Во время составления «идеального» варианта, помечайте в исходном ви-де те порты, которые вы уже перенес-ли на идеальный вариант. Не удаляй-те их, а только смените цвет, т.к. они нам ещё понадобятся. В нашем слу-чае мы меняли с оранжевого на блед-но-жёлтый. Когда все порты станут бледно-жёлтыми, значит, их все пе-ренесли. Теперь приступаем к со-ставлению плана.

Смотрите рис. 3. Начнём с то-го, что доводить до полного отсутс-твия свободных портов, не следу-ет. В нашем случае их было целых 5. Итак, сверху – то, что есть, снизу – то, что нужно получить. Вопрос в том, в какой последовательности пере-ключать?

Для этого:1. Берём порт, который исходно сво-

боден, а потом занят. У нас это 7, 11, 17 и 21.

Рисунок 3. Составляем план переключений

Рисунок 4. Как убирать небольшие излишки Рисунок 5. Получившийся шлейф размещайте между двумя блоками

Page 67: 051 Системный Администратор 02 2007

65№2, февраль 2007

серверная

2. Смотрим, откуда нужно произвести переключение на выбранный порт. У нас с 5-го.

3. Записываем в план переключение с пятого на седьмой.

4. Помечаем их цветом, это переме-щение уже в плане.

Далее повторяем эти действия для следующего порта. 5-й становится свободным, и на него можно перемес-тить следующее соединение. Смотрим вниз (К4.4), находим в исходном, запи-сываем, помечаем. И так далее, пока цепочка не прервётся пустым портом в «идеальном» варианте. Тогда берём следующий пустой порт и опять про-делываем то же самое. В результате все порты должны быть закрашены, а на листе по порядку записаны все не-обходимые манипуляции. То же самое при перекоммутациях на нескольких панелях и нескольких шкафах.

Обратите внимание!n Не все порты равноценны (как в на-

шем случае). Для этого как раз и нужен первый шаг, чтобы точно убедиться, что куда можно и нельзя подключать. Не воткните случайно станцию в гигабитный канал, а сер-вер в мегабитный.

n При перекоммутациях через магис-траль не забывайте отмечать со-ответствующие изменения в дру-гой стойке и проверять в принципе возможность этих изменений.

n Опять же при магистралях жела-тельно друг за другом сразу делать переключения в обеих стойках, да-бы избежать того, что оборудова-ние в одной стойке будет подклю-

чено к неверному оборудованию в другой (к примеру, вы считаете, что у вас на магистрали уже висит сервер, а там по-прежнему комму-татор).

n Своевременно вносите сделанные изменения в документацию.

n Предупреждайте пользователей о возможных отключениях.

Как избавиться от «бороды»Итак, план есть. Теперь идём в сер-верную и начинаем наводить поря-док. Во-первых, при монтаже обору-дования в стойку, нужно оставлять просветы (1-2 болта сверху и снизу), куда можно будет убрать небольшие излишки провода. Разводку сзади на коммутационные панели лучше за-крыть крышкой, дабы потом случай-но их не зацепить. Также хорошо бы ставить органайзеры через каждые 2 блока. Всё это незначительно пов-лияет на полезную площадь, но даст больше возможностей для манёвров с проводами.

Рекомендации на основные слу-чаи:n Если провод чуть длиннее своего

пути или вы соединяете близко ле-жащие порты, то поместите коль-цо в зазор между панелями, концы снаружи скрепите стяжкой, чтобы потом не искать, где какой провод входит и выходит. Как ни странно, петли практически не цепляются друг за друга (см. рис. 4).

n Если провод очень длинный, мотай-те кольцом и поместите на боковую сторону или за стойку (см. рис. 5).

n Я предпочитаю важные прово-да (типа связи офисов) пускать за стойкой, дабы что-нибудь с ни-ми случайно не сделать. К портам они выходят через зазоры.

n Старайтесь равномерно распреде-лять провода.

n Часто от одной панели до другой идёт несколько проводов. Скреп-ляйте их стяжками, потом проще будет искать в большом вертикаль-ном пучке (см. рис. 6).

n К одному горизонтальному орга-найзеру провода могут тянуть-ся с 4 сторон (лево-верх, лево-низ, право-верх, право-низ). Чтоб не было путаницы и переплетений в проводах на органайзере, клади-те провода в одной последователь-ности этих сторон. То есть сначала все провода со стороны лево-верх, потом все от лево-низ и т. д. Прово-да одной стороны скрепляйте стяж-ками. Таким образом, потом легко можно будет понять, как протянуть провод по органайзеру (какие про-вода оставить впереди, какие сза-ди), и никакой паутины и распуты-вания впоследствии (см. рис. 7).

Таким образом, мы навели поря-док, аккуратно уложили провода, и ра-ботать с ней теперь одно удовольс-твие. При этом, я думаю, мы сэконо-мили время (по сравнению с полным отключением всех проводов), выпол-няли работу планово в течение дня, а не в авральном режиме, и не вызва-ли длительного отключения всего сег-мента, т.к. одновременно было отклю-чено только одно соединение.

Рисунок 6. Скрепляйте провода стяжками Рисунок 7. Результаты работы

Page 68: 051 Системный Администратор 02 2007

66

безопасность

В Интернете сегодня можно най-ти много описаний построе-ния систем защиты электрон-

ной почты, для реализации некото-рых из них требуется определенный опыт. Администраторы, хорошо зна-ющие Windows, не всегда в состоя-нии быстро разобраться со всеми осо-бенностями UNIX. Проект MPP Free Edition [1] предлагает, можно сказать, идеальный инструмент, позволяющий быстро развернуть систему борьбы со спамом и вирусами, основанную на ClamAV и SpamAssassin, не усту-пающую по эффективности, напри-мер, таким решениям, как MailScanner

или 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 почтовый сервер – Sendmai l , Postfix, CommuniGate, QMail или SurgeMail;

n SpamAssassin от 3.x и ClamAV 0.8 и выше;

n опционально для настройки через веб-интерфейс – Webmin.

Боремся с вирусами и спамом с помощью MPP

Как с минимальными финансовыми и временными затратами настроить эффективную систему борьбы со спамом и вирусами, рассылаемыми посредством электронной почты? Попробуем решить эту проблему с Message Processing Platform (MPP) Free Edition.

Сергей Яремчук

Page 69: 051 Системный Администратор 02 2007

67№2, февраль 2007

безопасность

Фактически 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. Во время его работы возможны ошибки, по окончании дается рекомендация:

Скрипт позволяет указать на используемый почтовый сервер, а также антивирусное и антиспам-приложения, ко-торые будут использованы при обработке электронной поч-ты. Естественно, все это должно быть уже установлено.

Выбираем почтовый сервер:

Выбираем antivirus/antispam-движок, можно использо-вать несколько значений через пробел, демон clamd дол-жен использовать стандартный порт 3310:

Please run /usr/local/MPP/configure.pl to automatically configure mpp and your mail server.

Вот, собственно, и все по установке MPP. В конфигу-рационном файле в /etc/postfix/main.cf почтового сервера Postfix появится следующая запись:

Оригинальный файл будет сохранен в /etc/postfix/main.cf.mbk.

Аналогично и master.cf будет скопирован в master.cf.mbk, и в нем появятся следующие строки:

Все рабочие файлы MPP будут помещены в /usr/local/MPP/, кроме того, в /etc/init.d/ появится скрипт, предназначенный для управления работой демона mppd:

Соответствующие ссылки для его автоматической за-грузки будут помещены в каталоги /etc/rcХ.d. Все, MPP ус-тановлен и работает с настройками по умолчанию, и в прин-ципе можно вообще ничего больше не трогать.

В репозитарии Ubuntu нет пакета Webmin, поэтому его установку необходимо произвести вручную. Пакет, собран-ный для Debian, будет работать и в Ubuntu.

Устанавливаем пакеты, необходимые для удовлетворе-ния зависимостей:

По окончании процесса будет выдано следующее со-общение.

$ sudo /usr/local/MPP/configure.pl

Select mailserver1) Sendmail2) Postfix3) CommuniGate4) QMail5) SurgeMail[default 1]: 2

Select antivirus / antispam engine. Could be one or multiple selections separated with blankExample: for clamav, spamassassin use: 1 31) clamav2) clamd3) spamassassin[default 1]: 2 3

# -- Added for MPP --content_filter = smtp:localhost:10025# -- end --

# -- 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 --

$ sudo /usr/local/MPP/configure.pl

Starting MPP daemon: mppd.

$ 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

[17:23:37] 6 [63168] [Daemon] Masking signals.[17:23:37] 8 [63168] [Config] Start loading config file /usr/local/MPP/mppd.conf[17:23:37] 8 [63168] [Config:InitializeList] [Config] insert suc-cessful ALL DOMAINS[17:23:37] 8 [63168] [Config:InitializeList] [debug] dump list[17:23:37] 8 [63168] [Config:InitializeList] ALL DOMAINS[17:23:37] 6 [63168] [Daemon] Changing user/group.[17:23:37] 6 [63168] [Daemon] Switching to daemon mode. 4289 ? Ss 0:00 /usr/lib/postfix/master

Completed setup.

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.

Page 70: 051 Системный Администратор 02 2007

68

безопасность

Что свидетельствует о том, что Webmin уже настро-ен и править конфигурационные файлы не придет-ся. Поэтому просто вызываем веб-браузер и набираем https://имя_компьютера:10000/.

Работа с Webmin описана в [4], поэтому подробно о нем говорить не будем.

Для установки модуля MPP заходим в «Webmin Configuration» (настройка Webmin) и переходим в «Модули Webmin». Модуль находится в архиве, хотя на сайте проек-та MPP может быть более свежий вариант:

И указываем на него в «Установка модуля». В слу-чае успеха в категории «Службы» (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 указываем имя файла, в который будет заноситься «черный» список адресатов по одному в стро-ке, можно указывать домены. По умолчанию использует-

ся /usr/local/MPP/blacklist, просто снимаем комментарий со строки и идем дальше.

Аналогично параметр:

позволяет занести в файл адреса пользователей, сообще-ния которых на вирусы проверяться не будут. По умолчанию параметр scan_domains установлен в all domains, что озна-чает, что MPP будет проверять почту всех пользователей всех доменов. Домены можно конкретизировать, прописав их через запятую:

Если нужно проверять почту конкретных пользователей указанных доменов, их можно занести в scan_users. Архи-вы во вложениях по умолчанию проверяются:

Что делать в случае обнаружения вируса или спама, определяется значением параметра 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 и дополни-тельный заголовок в письмо, которые также можно изменить по своему ус-мотрению, показав, что администра-тор на месте и все контролирует. За-шифрованное сообщение по умолча-нию проходит без проверки:

Хотя в этом случае разрешено ис-

donot_scan_users = /usr/local/MPP/donotscanlist

scan_domains = mycompany.com, test.com

scan_archives = yes

on_encrypted_message = pass

Рисунок 1. Настройка MPP через Webmin

$ wget -c ftp://ftp.messagepartners.com/pub/mpp/ ↵ webmin/rae-mpp.wbm.gz

Page 71: 051 Системный Администратор 02 2007

69№2, февраль 2007

безопасность

жении спама: marksubject, markheader, forward, quarantine, discard:

И конкретизируем значение по-ля тема:

При необходимости можно указать адрес, на который будет пересылать-ся весь обнаруженный спам, который можно будет использовать, например, при обучении фильтров:

Аналогично ситуации с вирусами, используя инструкцию spam_inbound_whitelist и spam_outbound_whitelist, можно указать белый список адреса-тов, входящие или исходящие сооб-щения которых не будут проверяться на спам. Максимальный размер сооб-щений, проверяемых SpamAssassin, по умолчанию равен 32 Кб, изменить его можно в spam_max_scan_size.

После изменений параметров пе-резапускаем демон mppd. Для про-верки правильности настройки рабо-ты антивируса и антиспам-подсистем в архиве MPP имеются файлы gtube- eicar-test.msg и test.msg. Обновления ClamAV производятся стандартны-ми методами, кроме того, в постав-ке MPP есть скрипт clamavupdate.sh,

пользование тех же значений, что и в 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 опре-деляет форму хранения файлов, со-держащих вирусы или спам, в каран-тине. По умолчанию такие сообщения хранятся в текстовом файле:

Если планируется использование для этих целей MySQL, измените его на sql. Для создания необходимых баз в архиве имеется скрипт spam-mysql.sql. В этом случае активируйте и следую-щие параметры, установив необходи-мые значения:

Далее в файле идут настройки про-верки почты SpamAssassin:

Определяем реакцию при обнару-

с помощью которого новые базы бе-рутся с сайта разработчика MPP (ftp://ftp.raeinternet.com/pub/clamav), запус-кая его через cron (это можно настро-ить прямо из Webmin), так и вручную, воспользовавшись меню «Control» и нажав кнопку «Virus Update».

Не смотря на то что написано мно-го, MPP можно настроить за полчаса, естественно, при условии, что все ос-тальные компоненты уже готовы к ра-боте. После чего она исправно будет отсеивать вирусы и распознавать спам, защищая пользователей.

Успехов.

1. Сайт проекта MPP Free Edit ion – http://messagepartners.com/products/mpp_free_edition.html.

2. С р а в н и т е л ь н а я т а б л и ц а в е р -сий Free Edition и MPP v3 – http://m e s s a g e p a r t n e r s . c o m /p r o d u c t s /compare-mpp.php.

3. G P L в е р с и я Q R e v i e w – f t p : / /f t p . r a e i n t e r n e t . c o m / p u b / m p p /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.

quarantine_method = file

sql_type = mysqlsql_database = spamsql_host = localhostsql_user = usersql_password = password

spam_filter = yes

spam_action = marksubject

spam_marksubject = SPAM-%SUBJECT%

spam_forwardaddr = ↵ %EMAILID%-spam@%DOMAIN%

Рисунок 2 Редактирование шаблона

Page 72: 051 Системный Администратор 02 2007

70

bugtraq

Переполнение буфера в реализации VML в Microsoft WindowsПрограмма: Microsoft Windows 2000, Microsoft Windows XP, Microsoft Windows 2003.Опасность: Критическая.Описание: Целочисленное переполнение существует из-за недостаточной проверки входных данных в библиотеке vgx.dll в реализации Vector Markup Language (VML). Удален-ный пользователь может с помощью специально сформи-рованной веб-страницы или e-mail-сообщения вызвать пе-реполнение динамической памяти и выполнить произволь-ный код на целевой системе.URL производителя: www.microsoft.com.Решение: Установите исправление с сайта производите-ля.

Несколько уязвимостей в Cisco Secure ACSПрограмма: Cisco Secure ACS версии до 4.1.Опасность: Критическая.Описание: 1. Уязвимость существует из-за ошибки в служ-бе CSAdmin при обработке HTTP GET-запросов. Удаленный пользователь может с помощью специально сформирован-ного HTTP GET-запроса вызвать переполнение стека и вы-полнить произвольный код на целевой системе.

2. Уязвимость существует из-за ошибки в службе CSRadius при обработке RADIUS Accounting-Request-паке-тов. Удаленный пользователь может вызвать переполнение стека и выполнить произвольный код на целевой системе.

3. Уязвимость существует из-за ошибки в службе CSRadius при обработке RADIUS Access-Request-пакетов. Удаленный пользователь может с помощью специально сформированного RADIUS Access-Request-пакета аварий-но завершить работу службы.URL производителя: www.cisco.com.Решение: Установите исправление с сайта производите-ля.

Несколько уязвимостей в браузере OperaПрограмма: Opera версии до 9.10.Опасность: Критическая.Описание: 1. Уязвимость существует из-за ошибки при об-работке JPEG-файлов, содержащих специально сформи-рованный DHT-маркер. Удаленный пользователь может вызвать переполнение динамической памяти и выполнить произвольный код на целевой системе.

2. Уязвимость существует в функции createSVGTransformFromMatrix() при обработке объектов. Удаленный пользова-тель может передать некорректный объект уязвимой функ-ции и выполнить произвольный код на целевой системе.URL производителя: www.opera.com.Решение: Установите последнюю версию (9.10) с сайта производителя.

Переполнение буфера при обработке 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.Решение: Установите исправление с сайта производите-ля.

Уязвимость в механизме проверки орфографии в Microsoft OfficeПрограмма: Microsoft Office 2003Опасность: Высокая.Описание: Уязвимость существует из-за ошибки в меха-низме проверки орфографии для бразильского португаль-ского языка. Удаленный пользователь может с помощью специально сформированного документа вызвать пов-реждение памяти и выполнить произвольный код на целе-вой системе.URL производителя: www.microsoft.com.Решение: Установите исправление с сайта производите-ля.

Целочисленное переполнение в OpenOfficeПрограмма: OpenOffice версии до 2.1.Опасность: Высокая.Описание: Целочисленное переполнение обнаружено в об-работчике WMF/EMF-файлов. Удаленный пользователь мо-жет с помощью специально сформированного WMF/EMF-файла вызвать переполнение динамической памяти и вы-полнить произвольный код на целевой системе.URL производителя: www.openoffice.org.Решение: Установите последнюю версию (2.1) с сайта про-изводителя.

Уязвимость форматной строки в VLC Media PlayerПрограмма: VLC Media Player 0.8.6, возможно более ран-ние версии.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки формат-ной строки при обработке URL «udp://» . Удаленный поль-зователь может с помощью специально сформированно-го веб-сайта или M3U-файла выполнить произвольный код на целевой системе.URL производителя: www.videolan.org/vlc.Решение: Установите последнюю версию (0.8.6a) с сайта производителя.

Page 73: 051 Системный Администратор 02 2007

71№2, февраль 2007

bugtraq

Выполнение произвольного кода в Microsoft WordПрограмма: Microsoft Office 2000.Опасность: Критическая.Описание: Уязвимость существует из-за ошибки при об-работке строк. Удаленный пользователь может с помо-щью специально сформированного документа Word вы-звать повреждение памяти и выполнить произвольный код на целевой системе.Примечание: уязвимость активно эксплуатируется в на-стоящее время.URL производителя: www.microsoft.com.Решение: В настоящее время cпособов устранения уязви-мости не существует.

Множественные уязвимости в продуктах OracleПрограмма: Oracle Database 10g, Oracle Application Server 10g, Oracle E-Business Suite 11i, Oracle Enterprise Manager 10.x, Oracle PeopleSoft Enterprise Tools 8.x, Oracle9i Database Enterprise Edition, Oracle9i Database Standard Edition, Oracle Developer Suite 10g, Oracle9i Developer Suite, Oracle9i Application Server.Опасность: Критическая.Описание: 1. Уязвимость существует из-за ошибки провер-ки границ данных в ONS (Oracle Notification Service). Удален-ный пользователь может послать приложению специаль-но сформированный пакет на порт 6200/TCP, вызвать пе-реполнение буфера и выполнить произвольный код на це-левой системе.

2. Уязвимость существует из-за недостаточной обра-ботки входных данных в Oracle XML DB. Удаленный поль-зователь может с помощью специально сформированного запроса выполнить произвольный код сценария в браузере жертвы в контексте безопасности уязвимого сайта.

3. Уязвимость существует из-за недостаточной обра-ботки входных данных в пакете DBMS_AQ_INV. Удаленный пользователь может с помощью специально сформирован-ного запроса выполнить произвольные SQL-команды в ба-зе данных приложения.

4. Уязвимость существует из-за недостаточной обра-ботки входных данных в EmChartBean. Удаленный пользо-ватель может с помощью символов обхода каталога полу-чить доступ к произвольным файлам на системе.URL производителя: www.oracle.com.Решение: Установите исправление с сайта производите-ля.

Составил Александр Антипов

Уязвимость при обработке неинициализированных указателей в Kerberos kadmindПрограмма: 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, Microsoft Office 2003.Опасность: Критическая.Описание: 1. Уязвимость существует из-за ошибки при об-работке IMDATA-записей. Удаленный пользователь может с помощью специально сформированного файла вызвать повреждение памяти и выполнить произвольный код на це-левой системе.

2. Уязвимость существует из-за ошибки при обработ-ке определенных записей. Удаленный пользователь мо-жет с помощью файла, содержащего специально сформи-рованную запись, вызвать повреждение памяти и выпол-нить произвольный код на целевой системе.

3. Уязвимость существует из-за ошибки при обработ-ке строк. Удаленный пользователь может с помощью фай-ла, содержащего специально сформированную строку, вы-звать повреждение памяти и выполнить произвольный код на целевой системе.

4. Уязвимость существует из-за ошибки при обработ-ке Column-записей. Удаленный пользователь может с по-мощью специально сформированного файла вызвать пов-реждение памяти и выполнить произвольный код на целе-вой системе.

5. Уязвимость существует из-за ошибки проверки гра-ниц данных в Palette записей. Удаленный пользователь мо-жет с помощью файла, содержащего большое количест-во элементов в записи Palett, вызвать переполнение ди-намической памяти и выполнить произвольный код на це-левой системе.URL производителя: www.microsoft.comРешение: Установите исправление с сайта производите-ля.

Page 74: 051 Системный Администратор 02 2007

72

хобби

Оpen Source-сообщество зна-ет много историй падения ком-мерческих проектов и зарож-

дения на их основе свободных, в пос-ледствии завоевавших доверие мно-жества пользователей. Так случилось с браузером Netscape Navigator, кото-рый не смог выдержать конкуренции с аналогом от Microsoft. Но после от-крытия исходных кодов проект полу-чил «вторую жизнь», переродившись впоследствии в знаменитый Firefox. Похожая судьба и у системы управле-ния базами данных Interbase компании Borland, которая после прекращениия официальных работ над ней продол-жила своё существование под назва-нием Firebird.

Исследуя успешное развитие сво-бодно распространяемых проектов, среди всего многообразия ПО с от-крытым исходным кодом чаще всего можно встретить: программы для ра-боты с сетью и Интернетом, базы дан-ных, служебные утилиты и др. Сущест-вует еще одна область программного обеспечения, в развитие которой сооб-щество OpenSource внесло большой вклад, достигнув при этом немалых успехов и популярности. Это игровые программы. Зайдя по ссылке [1], можно найти тысячи свободно распространя-емых игр (и закрытых портированных). Прежде чем мы пойдём дальше, вер-нёмся на десяток лет назад.

90-е годы прошлого столетия. Как много было выпущено замечатель-ных игр в то время – период возник-новения новых идей и новых жан-ров! Наверное, сложно найти челове-ка, знакомого с компьютерами не по-наслышке, который бы ни улыбнулся при упоминании таких названий, как: Dune, Doom, Civilization, Kings Bounty, Transport Tycoon, Ufo, Colonization. Без-условно, эти игры устарели по многим параметрам, но их культовый статус не позволит им кануть влету. Поэтому неудивительно, что энтузиасты со всех концов света давно взялись за пере-работку и улучшение классики. Итак, в каком же состоянии эти проекты на-ходятся сейчас?

Civilization (FreeCiv )Игру можно встретить почти в каждом дистрибутиве Linux, в любой системе портов/пакетов. В чем же секрет зна-менитой «Цивилизации»? Конечно же, в масштабе самой игры. Управление целой империей: научной, производс-твенной, военной областями затягива-ет не на шутку.

С чего все начиналось? Как мно-гие думают с «Цивилизации» 1 на PC, но это не совсем так. В конце 70-х – начале 80-х годов появилась настоль-ная игра Civilization. The board game [2]. Получившая большую популярность, эта игра была со временем «перенесе-

на» Сидом Мейром (Sid Meier) на ЭВМ. Через некоторое время состоялся вы-ход продолжения Civilization, породив-шего многочисленные клоны (включая «Колонизацию»), но оригинальной иг-ре не хватало очень многих вещей. С увеличением мощностей ЭВМ графи-ку удалось подтянуть, но не хватало режима многопользовательской игры. Именно по этой причине в 1995 году стартовал проект FreeCiv, являющий-ся, по сути, многопользовательской версией «Цивилизации».

Итак, установив клиент игры, мы увидим непритязательную графику и простой интерфейс, копирующие вторую часть «Цивилизации», но это мнение обманчиво. Искусственный интеллект компьютерных противни-ков очень силен, поэтому рекоменду-ется вначале игры исследовать опции игры (к примеру, лучше ввести запрет на строительство городов на рассто-янии менее пяти клеток). Перед иг-рой на официальных серверах луч-ше потренироваться в однопользо-вательском режиме, так как измене-ний по сравнению с оригиналом в иг-ре достаточно.

Вопрос с устаревшей графикой также решаем. На официальном сай-те FreeCiv [3] можно найти большое количество патчей, один из которых, Freeland, значительно меняет облик игры (см. рис. 1).

Open Source и Classic Games

Начало 90-х годов прошлого века ознаменовалось выпуском игровых программ, в будущем закрепивших за собой звание «культовых». Эти игры к настоящему времени устарели, но энтузиасты сообщества Оpen Source возродили многие из них.

Иван Максимов

Page 75: 051 Системный Администратор 02 2007

73№2, февраль 2007

хобби

Кроме патча на графику, на сайте проекта находится множество других, не менее интересных дополнений: кар-ты островов Великобритании и Японии, новые нации, редакторы карт, звуко-вые эффекты и многое другое. Несмот-ря на выход четвёртой части коммер-ческой, полностью трехмерной «Циви-лизации», FreeCiv выглядит очень до-стойно: развитие игры не останавли-вается (последняя доступная версия – 2.1.0-beta2 от 12 августа 2006 года), постоянно обновляются уже сущест-вующие патчи, появляются новые мо-дули (тот же Freeland – относительно «молодая» разработка).

Существенным плюсом является свободная лицензия игры и, как следс-твие, открытые исходные коды. По-этому любой желающий может вне-сти во FreeCiv свои изменения, благо, на сайте можно найти очень интерес-ные «рецепты». О популярности и ус-пехе открытой «Цивилизации» можно судить не только по количеству пат-чей и многоязыковой поддержке (27 локализаций, включая русскую), но и по количеству серверов поклонников этой игры.

Подводя итоги, можно сказать, что продолжение получилось очень яр-ким. Энтузиастам удалось повторить и расширить вселенную Civilization. Учитывая то, что над FreeCiv офици-ально работают 37 человек, – прекра-щение развития этого Open Source-проекта мы увидим ещё не скоро.

Сolonization (FreeCol)Один из первых клонов «Цивилиза-ции» – «Колонизация», созданная автором «оригинала» Сидом Мейе-ром и выпущенная в 1994 году. Дейс-твие игры происходит в Новом Све-те (XV-XVII века) во времена освое-ния европейскими государствами се-вероамериканского континента. В иг-ре уменьшен масштаб (по сравнению с Civilization), но более проработана экономическая и торговая системы. Игроку доступны: четыре колониаль-ные государства, десятки товаров, два десятка юнитов, неизведанные терри-тории с враждебно настроенными ин-дейцами и не более дружелюбными конкурентами. Проект FreeCol возник по тем же причинам, что и FreeCiv, – от-сутствие у оригинальной версии воз-можности играть по сети.

Для игры обязательно понадобит-ся Java от Sun Microsystems, поэтому зайдя на официальный сайт игры [4], не забудьте пройти по ссылке [5] и ус-тановить интерпретатор языка. Итак, установив игру, первое, что мы уви-дим, неплохую графику. Это, конечно, не трехмерная «Цивилизация», но изо-метрическая карта выглядит достой-но. Учитывая то, что по Интернету од-но время ходили слухи о выходе вто-рой части Сolonization, впоследствии не подтвердившиеся, FreeCol вполне может сойти за «наследника» ориги-нала (рис. 2).

«Колонизация» получилась гораз-до менее популярной, нежели «Циви-

лизация», но за время своего сущес-твования приобрела немалое коли-чество фанатов. В Интернете до сих пор существуют сайты с обновлени-ями в виде карт, дополнений к ориги-нальной версии игры. Фанаты любят именно оригинальную версию, про-должая рисовать карты и выпуская дополнения.

Кроме проекта FreeCol, в сети можно найти еще несколько клонов Сolonization, но, к сожалению, раз-работка многих из них прекращена, а другие слишком отклонились от идей оригинала.

Из минусов FreeCol можно вы-делить лишь один: использование

Рисунок 1. FreeCiv с патчем Freeland

Рисунок 2. FreeCol

Page 76: 051 Системный Администратор 02 2007

74

хобби

Java сильно замедляет работу игры (её запуск на системе с процессором Celeron 1.4 ГГц и 256 Мб ОЗУ длит-ся более 10 секунд). Также к минусам можно отнести графику (все-таки это не FreeCiv). Но эти «недостатки» мерк-нут сразу после начала игры, ориги-нальная концепция которой затягива-ет со страшной силой.

В завершение обзора FreeCol дол-жен заметить, что проект хоть и поте-рял многих поклонников, всё же про-должает развиваться. Судить об этом можно по последнему релизу (0.5.3)

от 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 про-

Рисунок 3. jdoom

Рисунок 4. OpenTTD

Page 77: 051 Системный Администратор 02 2007

75№2, февраль 2007

хобби

рисованы намного лучше, чем в jdoom (объем файла с текстурами в jheretic на 10 Мб больше).

Конечно, всеми нововведениями в jdoom, jheretic и jhexen нельзя удивить современного игромана. В настоящее время 3D-шутеры давно обладают хо-рошей графикой и физической моде-лью. Тем не менее выглядят DoomsDay все же на уверенную четвёрку даже по сегодняшним меркам. Пожалуй, стоит отметить еще одну небольшую, но приятную особенность: для игр не-обходимы *.wad-файлы из оригиналь-ных игр, но подойдут и дополнитель-ные и сетевые карты (также являющие-ся *.wad-файлами), созданные сторон-ними разработчиками.

Итак, небольшой объем игры (не более 100 Мб), новый удобный ин-терфейс и графика, регулярное об-новление (текущий релиз датирован 28 мая 2006 г.) говорят о том, что про-ект удался и в дальнейшем будет поль-зоваться не меньшей популярностью.

Transport Tycoon (OpenTTD)Игра представляет собой транспорт-ную экономическую стратегию (http://open.ttdrussia.net). Первую версию под названием Transport Tycoon Original (последнюю приставку игра приоб-рела позже) компьютерный мир уви-дел в 1994 году. Игроку предстоит за-ниматься перевозкой грузов на че-тырёх видах транспорта: автомобиль-ном, железнодорожном, морском и воздушном. Начиная игру в 1940 го-ду, он должен будет одолеть конку-рентов и справиться со сложностями построек сложных транспортных сис-тем. Именно последний фактор явля-ется наиболее интересной особеннос-тью игры, так как создать эффектив-ную, экономичную и, что не маловаж-но, красивую транспортную линию не-легко. Существуют фанаты игры, ко-торые даже придерживаются реаль-ных правил строения железнодорож-ных линий. Масштаб, большой выбор товаров, постоянное обновление тех-нологий (от паровозов до электрово-зов на монорельсах), гонка с конку-рентами за государственные субси-дии – все это затягивало фанатов иг-ры. Неудивительно, что после появле-ния OpenTTD игра не только вернула себе старых поклонников, но и приоб-рела новых, заставляя новичков ис-

кать ответы на вопросы типа: «Как же наиболее эффективно и экономно пос-троить обычную дорогу, а потом рядом проложить железные пути?»

К сожалению, в оригинальной вер-сии игры было много ограничений, на-пример, на количество вагонов в со-ставе, платформ на вокзале и мно-гое другое. Даже появление Transport Tycoon Delux в 1995 году не особо уве-личило возможности игрока. Оста-лись и другие минусы: плохая под-держка многопользовательской игры

и относительно небольшой масштаб. Игроки желали большего, и энтузиас-ты OpenSource-сообщества откликну-лись на их просьбы.

В 2004 году вышли первые релизы OpenTTD. Постепенно игра приобрета-ла новые функции, откликаясь на по-желания пользователей. Карты были увеличены в четыре раза (с 256х256 до 2048х2048 клеток), были сняты ог-раничения на длину железнодорож-ных составов (и платформ), добавле-ны морские каналы, новые текстуры,

Рисунок 5. UFO: Alien Invasion

Рисунок 6. Wargus

Page 78: 051 Системный Администратор 02 2007

76

хобби

создан игровой портал и многое дру-гое (рис. 4).

Итак, кроме движка игры, который можно скачать с официального сай-та [7], нам понадобится оригиналь-ная версия Transport Tycoon Delux. Же-лающие также могут установить но-вые текстуры. Игру можно проходить в одиночку, соревнуясь с искусствен-ным интеллектом компьютера, но на-много интереснее играть по сети. Пор-тал OpenTTD никогда не пустует, всег-да можно присоединиться к группе иг-роков и попытаться завоевать вирту-альный рынок. Игровой процесс ус-ложнятся тем, что в игре можно поку-пать другие компании, поэтому впол-не вероятно, что, когда вы присоеди-нитесь к другим игрокам, вашу компа-нию купят «с молотка».

В 2004 году было выпущено идей-ное продолжение TTD – Chris Sawyer’s Locomotion (так называемый TTD2), яв-ляющееся вполне достойным продол-жение оригинала. Чем же привлека-ет новых фанатов именно OpenTTD? Ответ на вопрос можно найти на мно-гих форумах поклонников этой иг-ры. Это простота в освоении, масш-таб, небольшой размер дистрибутива и свободное распространение. Как и большинство коммерческих проек-тов, в Locomotion «поиграли и забы-ли», тогда как OpenTTD развивается по сей день и продолжает дальше ра-довать своих пользователей.

UFO (UFO: Alien Invasion)UFO представляет собой комбинацию стратегий сразу двух режимов – по-шаговой и реального времени. В ней игроку предстоит отразить нападе-ния инопланетян на родную плане-ту Земля. Первая часть UFO, Enemy

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)WarCraf t производства B l izzard Entertainment – фэнтези-стратегия в режиме реального времени, в кото-рой игроку дана возможность управ-ления человеческой расой либо ор-дой орков. Продуманный сюжет, отлич-ная графика и новаторские идеи поз-волили игре завоевать сердца многих игроков. Продолжение игры, вышед-

DarkOberonDarkOberon (http://dark-oberon.sourceforge.net) – стратегия в режиме реального време-ни, созданная по мотивам WarCraft 2. Гра-фически игра, на первый взгляд, напоми-нает первую часть WarCraft, но при ближай-шем рассмотрении можно увидеть, что все объекты – «пластилиновые». Оригиналь-ная идея дизайна игры способствовала ее распространению по Интернету. К сожа-лению, в настоящий момент DarkOberon ещё не завершена. Доступны всего че-тыре типа юнитов: солдат, рабочий, ката-

пульта и дирижабль (если не считать ней-тральных: поросенка и лодочку). Основ-ной режим игры – многопользователь-ский, но, возможно, в будущем мы увидим и одиночный режим. Также на сайте про-екта можно посмотреть фотографии про-цесса изготовления всех объектов игры (золотые шахты, леса), что дополнитель-но украшает проект.

Несмотря на недостатки, DarkOberon смотрится очень симпатично и весело. Ос-тается надеяться, что проект не забросят и он будет доведен до конца.

Page 79: 051 Системный Администратор 02 2007

77№2, февраль 2007

хобби

шее в декабре 1995 года, ещё боль-ше закрепило успех оригинала. В да-леком прошлом эти игры являлись главными конкурентами сериям Dune и Command & Conqueror производс-тва Westwood Studios, соревновав-шейся с Blizzard за звание «законода-тельницы мод» в жанре стратегий в ре-альном времени. Кто победил, мы уже знаем: про Westwood, купленную гига-нтом игровой индустрии Electronic Arts, многие забыли (хотя грядущий C&C: Tiberium Wars – очень «лакомый кусо-чек»), тогда как Blizzard и её детище живет и процветает по сей день.

WarCraft продолжил свое эволюци-онное развитие, и теперь мы можем наслаждаться многопользователь-ской игрой в ролевом проекте World of WarCraft. Но многие фанаты не хо-тят забывать оригинал. WarCraft 2 дав-но устарела, но в неё до сих пор игра-ют как в однопользовательском ре-жиме, так и по сети. Как раз для таких фанатов и было разработано допол-нение WarGus.

Как говорится на официальном сайте проекта, WarGus – это «модифи-кация Warcraft 2, созданная фанатами Warcraft 2, для себе подобных». Патч основан на базе кроссплатформенного движка Stratagus [9], с помощью кото-рого были разработаны такие проекты, как: Battle of Survival, World Domination, Astroseries и другие.

Зайдя на официальный сайт WarGus [10], скачаем архив дополне-ния. Нам также понадобится ориги-нальная часть игры. На сайте сказано, что обязательно необходима CD-вер-сия Warcraft 2, хотя вполне подойдет обычный минимальный архив без ви-деороликов (его легко найти на многих фэн-сайтах; объем ~ 30 Мб) (рис. 6).

Запустив игру, можно заметить, что весь WarCraft 2 стал более инфор-мативен. Проявляется это во всем: например, если крестьяне собирают дерево, шкала внизу покажет игроку, сколько осталось времени до полного сбора. Воины также имеют подобную шкалу, однако относится она к запасу их жизненных сил. Во время боя на эк-ране отображается урон, наносимый существами друг другу («отлетающие» цифры). Появилась очередь построек в производственных зданиях. Выделе-ние объектов ранее было ограничено девятью юнитами, теперь же его нет.

Более высокое разрешение позволя-ет видеть лучшую картину боя, вследс-твие чего управлять войсками стано-вится значительно легче. Еще одно но-вовведение коснулось игры по сети, введена поддержка протокола TCP/IP (в оригинальной версии игра была до-ступна только через IPX-протокол ли-бо же NULL-модем).

Сама WarCraft 2 не изменилась: сюжетная линия та же, новых юнитов не замечено, но в игру добавлено все самое необходимое для удобства иг-рока. Что и следовало ожидать, пос-кольку модификацию создавали фа-наты для фанатов.

WarGus, конечно, не привлечет но-вых игроков в мир WarCraft, для этого больше подходит официальная тре-тья часть с множеством официальных и неофициальных дополнений, а так-же WarCraft 2: Battle.net Edition, пред-назначенная для игры через Интернет. Но игроки, желающие вспомнить бы-лые времена и увидеть «новое лицо» любимой игры, должны обязательно воспользоваться дополнением.

ВыводыОригинальные версии игр навсегда вошли в историю как родоначальники игровых жанров и по праву могут на-зываться лучшими. Связано это с тем, что все идеи, которые были заложены в них, используются по сей день, и но-вые жанры придумать трудно. Энтузи-асты со всех концов света по разным причинам не хотели оставлять эти зна-менитые проекты на пыльных полках. Одни улучшали игровой интерфейс, другие создавали полноценные про-должения с новыми миссиями и сю-жетными линиями. Находились энту-зиасты, не желавшие мириться с тем, что их любимые проекты исказили до неузнаваемости, и бравшие «все в свои руки».

Все представленные OpenSource-проекты существуют в версиях для не-

скольких платформ и имеют неболь-шой объем. Как видно из таблицы, иг-ровые программы перенесены под все наиболее распространенные опера-ционные системы.

Пометка src в столбце MacOS оз-начает, что в проекте нет *.dmg-фай-лов, доступны только исходные коды. Размер проектов округлялся в боль-шую сторону.

Например, движок DoomsDay «ве-сит» всего 7 Мб, но текстуры ко всем играм в проекте занимают около 60 Мб. В общий объем не включен размер оригинальных файлов игр. Также сто-ит отметить, что OpenTTD – единствен-ный проект с поддержкой архитекту-ры amd64.

В Интернете раньше можно было встретить множество высказываний по поводу того, что хороших свобод-но распространяемых игр с открыты-ми исходными кодами не существует, но, пожалуй, теперь это мнение мож-но опровергнуть.

Заканчивая материал, хочется напомнить, что мы живем не толь-ко для работы, но и, как сказал Ли-нус Тольдвальтс, «для развлечений» («Just for fun»).

1. T he L i nux G ame Tome – h t t p : / /www.happypenguin.org.

2. Производитель настольных игр – http://www.eaglegames.net.

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.10. Сайт проекта WarGus – http://wargus.

sourceforge.net.

Windows Linux MacOS Размер src Размер win Оригинальные файлы

FreeCiv + + + 14 8 –

FreeCol + + + 8 10 –

DoomsDay + + + 70 71 +

OpenTTD + + + 4 2 +

UFO AL + + src 200 216 –

WarGus + + src 0,5 1,5 +

Сводные данные об игровых программах

Page 80: 051 Системный Администратор 02 2007

78

bugtraq

Выполнение произвольных команд в TYPO3Программа: TYPO3 4.0.3 и более ранние версии, rtehtmlarea (расширение к TYPO3) 1.4.2 и более ранние версии.Опасность: Высокая.Описание: Уязвимость существует из-за недостаточной об-работки входных данных в параметре userUid в сценарии sysext/rtehtmlarea/htmlarea/plugins/SpellChecker/spell-check-logic.php перед использованием их в команде aspell. Уда-ленный пользователь может выполнить произвольные ко-манды на системе. Для успешной эксплуатации уязвимос-ти опция safe_mode должна быть отключена в конфигура-ционном файла PHP. Пример:

URL производителя: www.typo3.org.Решение: Установите последнюю версию (4.0.4) с сайта производителя.

--- post request --- POST /typo3/sysext/rtehtmlarea/htmlarea/plugins/ ↵ SpellChecker/spell- check-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 ---

Уязвимость при обработке .rc-файлов в Microsoft Visual StudioПрограмма: Microsoft Visual Studio 6 Professional SP6, Microsoft Visual Studio 6 Enterprise SP6.Опасность: Низкая.Описание: Уязвимость существует из-за ошибки провер-ки границ данных при обработке .rc-файлов, содержа-щих слишком длинную строку после текста: «1 TYPELIB MOVEABLE PURE». Удаленный пользователь может с по-мощью специально сформированного .rc-файла вызвать переполнение стека и выполнить произвольный код на це-левой системе.URL производителя: www.microsoft.com.Решение: В настоящее время cпособов устранения уязви-мости не существует.

Переполнение буфера в Microsoft Help WorkshopПрограмма: Microsoft Help Workshop 4.03.0002, возможно, более ранние версии.Опасность: Средняя.Описание: 1. Уязвимость существует из-за ошибки провер-ки границ данных при обработке .CNT-файлов. Удаленный пользователь может с помощью специально сформирован-ного .CNT-файла вызвать переполнение буфера и выпол-нить произвольный код на целевой системе.

2. Уязвимость существует из-за ошибки проверки гра-ниц данных при обработке .HPJ-файлов. Удаленный поль-зователь может с помощью специально сформированного .HPJ-файла, содержащего слишком длинную строку в пара-метре HLP в секции OPTIONS, вызвать переполнение стека и выполнить произвольный код на целевой системе.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.Решение: Установите исправление с сайта производите-ля.

Page 81: 051 Системный Администратор 02 2007

79№2, февраль 2007

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пособов устранения уязви-мости не существует.

Уязвимость при обработке файловой системы 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пособов устранения уязви-мости не существует.

Уязвимость в 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пособов устранения уязви-мости не существует.

Уязвимость при обработке HTML-кода в браузере SafariПрограмма: Safari 2.0.4, возможно, более ранние версии.Опасность: Низкая.Описание: Уязвимость существует из-за ошибки при обра-ботке комментариев в определенных тегах на HTML-страни-це. Удаленный пользователь может выполнить произволь-ный код сценария в браузере жертвы в контексте безопас-ности целевого сайта, если в комментарии присутствует со-ответствующий закрывающий тег (например тег title).URL производителя: www.apple.com/macosx/features/safari.Решение: В настоящее время cпособов устранения уязви-мости не существует.

Переполнение буфера при обработке RTSP-ссылок в Apple QuicktimeПрограмма: Apple Quicktime 7.1.3.100.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки провер-ки границ данных при обработке RTSP-ссылок. Удаленный пользователь может с помощью специально сформирован-ного QTL-файла, содержащего слишком длинный параметр src (более 256 байт) вызвать переполнение стека и выпол-нить произвольный код на целевой системе. Пример:

URL производителя: www.apple.com/quicktime.Решение: В настоящее время cпособов устранения уязви-мости не существует.

Составил Александр Антипов

"rtsp://[any character]:[>256 bytes]")

Page 82: 051 Системный Администратор 02 2007

80

ретроспектива

История энциклопедииЭнциклопедии на правах «кладезя знаний» занимают особое место сре-ди других книг. Пятьдесят томов «Боль-шой советской энциклопедии». Не ус-тупающая ей по объёму «Британника». Но время не стоит на месте. В истории человечества появляются новые стра-ницы, ученые мужи совершают новые открытия. В результате составителям бумажных энциклопедий приходит-ся постоянно перевыпускать свои из-дания, дописывая или переписывая их содержимое.

Огромное количество занимаемо-го пространства и стремительно уста-ревающая информация – главные не-достатки современных энциклопедий. И если первую проблему можно ре-шить, купив ту же «БСЭ» на DVD-дис-ке, то с обновлениями ситуация по-пре-жнему остается неопределённой.

Вот здесь и приходит на помощь Интернет, обладающий огромны-ми объемами хранимой информации, а также возможностью мгновенного редактирования материалов в режи-ме «реального времени». Первая элек-тронная библиотека, everything2.com, появилась в 1999 году. Небольшое со-общество пользователей портала со-

бирало самую разную информацию, однако сайт был скорее развлечени-ем, чем серьезным энциклопедичес-ким изданием.

Подобный неказистый сайт стал вдохновением для Лоурэнса Сэнгера (Lawrence «Larry» Sanger) и Джимми Уэйлса (Jimmy Wales), в то время ра-ботавших в американской компании Bomis. Занимая пост исполнительно-го директора компании, Джимми вы-делил деньги на финансирование про-екта по созданию бесплатной онлай-новой энциклопедии. Спустя несколь-ко недель был зарегистрирован домен Nupedia.com. Главным редактором сай-та стал Сэнгер.

По плану создателей авторами ста-тей в «Нупедию» должны были стать люди из академической и научной сре-ды. То есть те же люди, занимающие-ся написанием статей для обычных бу-мажных энциклопедий. Профессорам университетов (в том числе и россий-ских) рассылались сообщения с пред-ложением поучаствовать в проекте. Сначала все шло неплохо – команду добровольцев, желающих поучаство-вать в проекте Nupedia, отобрать уда-лось. Но процесс обновления сайта шел очень медленно. Ученым време-

ни для работы с веб-энциклопедией не хватало, а обычному человеку на-писать туда было непросто. Пользо-ватель Интернета был обязан снача-ла отправить текст одному из редак-торов, который читал его, и в случае одобрения отправлял на утвержде-ние своим коллегам. Когда несколь-ко человек признавали высокое ка-чество текста, он отсылался редакто-ру (copyeditor). Тот находил защищен-ные авторским правом текст и рисун-ки и удалял их. И лишь после этого ста-тья наконец могла быть опубликована на Nupedia.com.

В итоге за месяцы работы было опубликовано всего 20 статей. Еще около шестидесяти находилось в дора-ботке. Восемьдесят статей – маловата цифра для энциклопедии. Бесперспек-тивность подобного подхода к накопле-нию материалов стала очевидной.

Уэйлс и Сэнгер уже подумывали закрыть «Нупедию», когда на помощь пришел их старый друг – Бен Ковиц (Ben Kovitz). Бен рассказал Лари о тех-нологии Wiki (о которой я расскажу чуть позже), позволяющей участвовать в обновлении сайта любому желающе-му, минуя редакторов и администрато-ров. Ученых, работавших над Nupedia,

Глобальная сетевая энциклопедия

Илья Александров

Гигабайты информации. Ответ на любой вопрос. Сотни тысяч статей на всевозможные темы. Безусловно, появление подобного ресурса было предрешено. Как вы уже догадались, речь пойдёт о wikipedia.org.

Page 83: 051 Системный Администратор 02 2007

81№2, февраль 2007

ретроспектива

подобный подход возмутил – они счи-тали, что наполнение сайта непрофес-сионалами все испортит. Кроме того, появлялась угроза вандализма со сто-роны недоброжелательных пользова-телей. Посовещавшись, Уэйлс и Сэн-гер вернули старый движок на Nupedia.com, а для энциклопедии на базе тех-нологии Wiki был зарегистрирован сайт wikipedia.com, позже переехав-ший на домен в зоне .org. Это собы-тие произошло 15 января 2001 года. Эта дата и считается днем создания «Википедии». Первыми статьями про-екта стали материалы, перенесённые с nupedia.com. Все остальные статьи писались уже добровольцами – обыч-ными пользователями Интернета.

В мае 2001 года «Википедия» ста-ла международным порталом – были запущены разделы на русском, немец-ком, шведском, французском, испанс-ком и других языках.

В 2002 году основатель wikipedia.org Ларри Сэнгер покинул своё детище. Ларри критиковал проект за «антиэли-таризм», подразумевая, что авторами являются неспециалисты; обвинил его в неуважении к экспертам. Примерно в это же время прекратил свое сущес-твование ресурс Nupedia.com, к тому времени окончательно растерявший свою популярность.

Количество статей в «Википедии» стремительно росло. 20 июня 2003 го-да Уэйлс создает фонд «Викимедиа», организацию, занимающуюся подде-ржкой онлайновой энциклопедии. Фонд также является создателем некоторых родственных «Википедии» проектов.

В 2004 году стартовала кампа-ния по сбору средств на развитие wikipedia.org. Начало оказалось успеш-ным, в результате чего энциклопедия по сей день продолжает существовать на выручку от пожертвований и гран-тов. Впрочем, с финансами проблем никогда особо не было – в своё вре-мя по Сети ходил слух, что Уэйлс пот-ратил на раскрутку портала около по-лумиллиона долларов. Используемое ресурсом программное обеспечение, к слову, исключительно свободно-рас-пространяемое: 39 серверов работают под управлением дистрибутива RedHat Linux, а движок MediaWiki (см. статью «Работаем с MediaWiki» на стр. 84-91) написан на PHP и распространяется бесплатно в виде исходных кодов.

К ноябрю 2006 года английский раздел «Википедии» мог похвастаться умопомрачительным количеством ста-тей – более полутора миллионов. Рос-сийский же сегмент имеет более скром-ные показатели – 124 000 статей.

«Википедия» по-русскиКак уже говорилось ранее, русский раздел «Википедии» был создан в мае 2001 года. Первая статья называлась «Россия», и ее содержание сводилось к фразе «Россия – великая страна». Пару месяцев спустя какой-то остро-умный посетитель исправил содержа-ние статьи на предложение «Россия – родина слонов (ушастых, повышенной проходимости – см. мамонт)», причем эта фраза провисела на главной стра-нице около года и стала объектом шу-ток пользователей Интернета.

Первым администратором русско-го раздела стал Брайан Виббер (Brion Vibber), русским не владевший совер-шенно.

В 2003 году у энциклопедии нако-нец появились первые активные авто-ры – Виталий Волков и Владимир Ме-дейко (больше известный под ником Dr Bug). Оба получили статус «бюрок-ратов» (о том, что представляют со-бой статусы на «Википедии», мы пого-ворим позже), что давало им дополни-тельные возможности перед остальны-ми пользователями wikipedia.org

К августу 2003 года суммарное ко-личество статей в русском сегменте «Википедии» достигло пяти тысяч, од-нако по сравнению с англоязычным ва-риантом эта цифра была смешной.

Примерно в это же время в одном популярном компьютерном журнале была опубликована статья о Wikipedia, вызвавшая большой приток новых участников. Статья, написанная од-ним из администраторов русскоязыч-ного раздела «Википедии», положила начало серии публикаций об энцик-лопедии и в других средствах массо-

вой информации. Благодаря подобной «рекламе» уже к концу года была на-писана десятитысячная статья, и нако-нец началось серьезное развитие рус-ского сегмента портала.

В 2005 появились рубрики «Знае-те ли вы, что…», «События дня», впер-вые на русском вышли «Вики-новости». Летом того же года в Петербурге про-изошла первая wiki-встреча. Ее орга-низовали шесть «википедийцев», при-нимающих активное участие в обнов-лении энциклопедии.

Наша «Википедия» является лауре-атом нескольких премий. На фестива-ле «Интернить-2005» она была назва-на «Сервисом года». В 2006 она по-лучила премию Рунета в номинации «Наука и образование».

И самое главное – летом 2006 го-да количество статей в русском раз-деле «Википедии» достигло ста ты-сяч, благодаря чему он вошел в спи-сок самых успешных сегментов эн-циклопедии.

Технология WikiГоворя о «Википедии», нельзя не рас-сказать о технологии, в честь которой, собственно, энциклопедия и получи-ла своё название. Главное достоинс-тво Wiki – возможность любого желаю-

Джимми Уэйлс – создатель «Википедии»

«Википедия» на бумагеВ последнее время стали всё чаще появ-ляться предложения по изданию энцикло-педии в бумажном варианте. Первой стра-ной, осуществившей подобную задумку, станет, скорее всего, Германия. Издатель-ство «Zenodot» планирует к 2010 году вы-пустить на рынок сто томов «Википедии». С каждой проданной книги портал будет

получать по 50 центов. Кстати, уже сей-час существует сервис «PediaPress». Лю-бой желающий может выбрать необхо-димые статьи из англоязычной «Википе-дии», которые затем будут опубликованы в виде единой книги. Печатью занимает-ся фирма «InstaBook». За каждый экзем-пляр желающему придется выложить по-рядка 80 евро.

Page 84: 051 Системный Администратор 02 2007

82

ретроспектива

щего добавлять свои материалы и ре-дактировать уже имеющиеся. Все из-менения страниц постоянно сохраня-ются, поэтому, если кто-нибудь удалит статью или напишет вместо нее какую-нибудь гадость, вернуть прежнюю ко-пию можно будет моментально.

Wiki – это базирующаяся на гипер-текстовых ссылках среда, главное на-значение которой – хранение и струк-туризация информации. Первая вер-сия Wiki была разработана еще в 1995 году программистом Уордом Каннин-гемом (Ward Cunningham). Техноло-

гия была создана для нужд его «пор-тлендского хранилища образцов про-граммного кода», в котором находи-лись написанные им программы. Сло-во Wiki он услышал, когда был на Га-вайях. На местном языке его можно перевести как «быстро-быстро». Кста-ти: этим словом на Гавайях называют автобусы.

Технология Wiki изначально раз-рабатывалась в расчете на коллек-тивное взаимодействие пользовате-лей, вследствие чего работать с движ-ком очень просто. Все функции све-

дены к двум вариантам: «редактиро-вать» и «сохранить». Wiki допускает возможность работы не только с текс-том, но и с мультимедийными матери-алами: графическими изображениями, звуковыми файлами.

Любая статья сайта, базирующего-ся на Wiki, представляет собой собс-твенно текст в HTML- или Wiki-размет-ке. Теги Wiki считаются более просты-ми, чем в HTML. Например, если вы пи-шете новый материал в Wikipedia и хо-тите вставить ссылку на статью «Ком-пьютеры», прописывать полный веб-адрес статьи нет необходимости. До-статочно просто взять название тре-буемой статьи в двойные квадратные скобки: [[компьютеры]], и вы получите готовый линк. Причем «битых» ссылок нет по определению – линк на сущест-вующую статью будет выделен синим цветом, а если материал еще не напи-сан – красным.

Wiki сейчас используется на многих сайтах для увеличения интерактивнос-ти, но на Wikipedia.org технология реа-лизована наиболее полно.

Современные реалии свободной энциклопедииИдеология wikipedia.org – это прежде всего бесплатность и свобода рас-пространения информации. Основные принципы «Википедии» закреплены в так называемых пяти столпах:1. «Википедия» – это энциклопедия.

Не беспорядочная свалка текстов, не газета, не трибуна агитатора.

2. Авторы статей всегда придержи-ваются нейтральной точки зрения. Беспристрастность людей, напол-няющих содержимым энциклопе-дию, необходима для того, чтобы прозвучали разные точки зрения, чтобы читатель сам сделал вывод о предмете или событии, обсужда-емом в тексте.

3. Статьи «Википедии» являются сво-бодными для использования и ре-дактирования. Все материалы эн-циклопедии распространяются по лицензии GNU Free Documentation License. Это означает, что каждый может воспользоваться статьей из энциклопедии и исправить ее при условии, что материалы будут распространяться по той же лицен-зии и в них будет ссылка на перво-источник.

Заглавная страница портала

Cтатья «Компьютер»

Page 85: 051 Системный Администратор 02 2007

83№2, февраль 2007

ретроспектива

4. Каждый участник обязан соблю-дать свод правил. Не оскорблять других участников, сохранять ней-тральную точку зрения при работе над «острыми» статьями, не пра-вить чужую статью, если она уже полностью дописана и не нужда-ется в дополнении.

5. Помнить о приведенных выше че-тырех правилах. Получать удо-вольствие от работы на общее благо и помнить, что все опублико-ванные статьи сохранятся для по-томков.

Успех Wikipedia доказал успеш-ность такого подхода. Статистика эн-циклопедии поражает: 2,5 миллиар-да запросов в месяц и 200 языковых разделов. Согласно опросам, «Вики-педией» ежедневно пользуются 2,5 % от числа всех пользователей Интер-нета.

В 2006 году бюджет wikipedia.org составил порядка 700 тысяч долларов. Источник дохода – фонд «Викимедиа» и пожертвования пользователей.

Впрочем, иногда «Wikipedia» все-таки подвергается нападкам со сто-роны критиков. По их мнению, сла-бым местом энциклопедии остается угроза со стороны вандалов. Но дви-жок Wiki вместе с лозунгом «чинить легче, чем ломать» себя полностью оправдал.

Журналисты «New-York Times» да-же провели простой эксперимент: они стерли несколько страниц, а в не-которых статьях просто изменили да-ты. В течение часа все внесённые ими изменения были исправлены.

Wiki-сообщество«Википедия» – это не только храни-лище информации, но и сообщест-во людей, работающих над энцикло-педией. На портале существует своя иерархия. Наивысшую позицию в ней занимают «Бюрократы». Они наделе-ны правами переименовывать участ-ников, делать их администраторами и ботовладельцами. В русской «Вики-педии» на данный момент существует три бюрократа.

Администраторам позволено уда-лять страницы, временно защищать статьи от изменений, блокировать ак-тивность других пользователей, если те нарушают правила.

Что касается ботовладельцев – это участники, которые имеют воз-можность использовать специальные скрипты для осуществления рутинных операций.

Распределение участников по иерархии необходимо и для решения спорных вопросов. Для этого есть не-сколько путей.

Первый – голосование, которое обычно проводится при утвержде-нии стандарта написания. Например, «Фолклендские» или «Мальвинские» острова. Естественно, вариант, на-бравший большее количество голосов, будет утвержден.

Во время разрешений личных кон-фликтов привлекаются администра-торы.

Например, в случаях, когда воз-никает спор авторов статьи на одну и ту же тему, посредник выбирает луч-ший вариант для публикации.

И в совсем уж крайних случаях со-зывается арбитражный комитет, со-стоящий из наиболее опытных и ува-жаемых «википедистов». Бюрокра-ты и администраторы, совещаясь, выносят свое решение по спорному вопросу.

Впрочем, участники не только выясняют между собой отношения (без чего при огромном количестве «википедистов» не обойтись), но и дру-желюбно общаются.

Для этого есть форум и специаль-ные IRC-каналы. Впрочем, составите-ли энциклопедии сетевыми разгово-рами не ограничиваются и регулярно встречаются в реальном мире.

Ежегодно проводится междуна-родная встреча участников портала под названием «Викимания». На этой конференции, кроме неофициального общения, обсуждаются текущие про-блемы портала, а также ведутся раз-говоры о новых идеях и разработках. В 2005 году местом проведения «Ви-кимании» стала Германия, в 2006 го-ду – США.

Регулярно проходят «Викивстре-чи» – мероприятия, на которые собира-ются участники проекта из близко рас-положенных населенных пунктов.

При написании статьи были использо-ваны материалы с портала wikipedia.org.

Редактор рубрики Дмитрий Мороз

Родственные проектыО фонде «Викимедиа», развивающем и спонсирующем свободную энциклопе-дию, я уже говорил. Также этот фонд под-держивает ряд других сайтов: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) – контролируется ре-дакторами, самостоятельно решаю-щими, публиковать статьи от авторов или нет.

Page 86: 051 Системный Администратор 02 2007

84

web

Работаем с MediaWiki

Евгений Балдин

Одно из удивительных свойств жизни – самоорганизация. MediaWiki – это механизм, который превращает старые-добрые статичные тексты в «живые», постоянно развивающиеся хранилища информации.

Посмотрел, Подумал, Поправил.

Три Правила при работе с wiki

Page 87: 051 Системный Администратор 02 2007

85№2, февраль 2007

web

Пожалуй, вряд ли найдётся чело-век, владеющий информацион-ными технологиями, и в то же

время не слышавший о существова-нии wiki. Wiki – это простая в освоении гипертекстовая среда. Технология поз-воляет легко организовывать взаимо-действие между людьми путём созда-ния «живой документации». Наиболее известным и масштабным примером применения wiki-технологий на сегод-ня, безусловно, является Википедия, российский сегмент которой доступен по адресу http://ru.wikipedia.org.

Цветок подсолнуха – официаль-ный логотип MediaWiki. Двойные квад-ратные скобки на заднем плане сим-волизируют синтаксическое выраже-ние для создание гиперссылки внут-ри Wiki.

Говорить о wiki можно безгранично. Сегодня речь пойдёт о движке Википе-дии – MediaWiki.

MediaWiki появился благодаря не-мецкому студенту-биохимику Мангу-су Манске (Magnus Manske) специаль-но для замены первоначального perl-движка Википедии. В 2002 году Вики-педия перешла на новый движок, ко-торый предоставлял дополнительную функциональность и лучшую масшта-бируемость, что положительно сказа-лось на развитии обоих программных продуктов. В 2003 году появилось на-звание движка MediaWiki и офици-альный логотип. Появление собс-твенного имени и логотипа означало, что MediaWiki стал самостоятельным и независимым от Википедии програм-мным продуктом.

Благодаря свободной лицензии GPL, а также существованию Ви-кипедии, MediaWiki на текущий мо-мент – одно из самых популярных ре-шений для создания гипертекстовых wiki-сред.

Возможности MediaWikiСсылки внутри гипертекстовой среды при использовании MediaWiki созда-ются с помощью двойных квадратных скобок. Например, текст [[Википедия:Установка MediaWiki]] внутри русско-го сегмента Википедии представляет из себя ссылку на краткую одноимён-ную статью по установке MediaWiki. В названиях статей разрешены про-белы и различные знаки препинания за некоторым исключением.

стройки таблицы стилей (stylesheets) и клиентских JavaScript-скриптов, ис-полняемых при каждом просмотре.

Системные требованияТрадиционно для развёртывания MediaWiki используется так называе-мое LAMP-окружение:n L – значит Linux. Несмотря на то,

что для использования рекоменду-ется Debian GNU/Linux, MediaWiki можно запустить как и на BSD, Sun Solaris, Apple MacOS X, так даже и на Microsoft Windows.

n A – значит Apache. В качестве веб-сервера следует использо-вать Apache, хотя есть информа-ция, что для этой цели можно ис-пользовать и другие веб-серверы, в частности IIS 6.0.

n M – значит MySQL. Рекомендуемая версия MySQL 4.0, хотя можно ра-ботать и с 4.1/5.0. Чтобы в качест-ве хранилища данных воспользо-ваться возможностями PostgreSQL, потребуется установить версию MediaWiki 1.8 – текущая стабильная версия. Поддерживается версия PostgreSQL начиная с 8.1, требует-ся предустановка plpgsql и tsearch2. Следует также учитывать, что под-держка PostgreSQL добавлена от-носительно недавно и не оттести-рована, хотя возможность замены MySQL более продвинутой СУБД довольно заманчива.

Результат вызова шаблона {{Сторонник свободного ПО}} в русскоязычной Википедии

Место MediaWiki в цепочке «информация» ↔ «Весь Мир»

MediaWiki поддерживает про-странства имён (namespaces). Напри-мер, все имена пользователей в русс-коязычной Википедии регистрируют-ся в пространстве имён «Участник:». MediaWiki поддерживает механизм категорий, что позволяет организо-вывать страницы по темам. А так как сами категории также являются спе-циально оформленными страницами, то можно создавать сложные иерар-хические структуры.

Wiki-идею что, «Всё есть статья» развивает наличие механизма шаб-лонов (templates). Шаблоны – это бло-ки текста из специальным образом со-зданных статей, которые динамичес-ки подгружаются внутри других ста-тей. Шаблоны вызываются с помо-щью двойных фигурных скобок: {{имя шаблона}}.

MediaWiki позволяет пользоваться множеством стандартных HTML-тегов. Кроме упомянутого также имеется на-бор меток для структурной разметки текста. За подробностями о правилах вики-разметки лучше всего обратить-ся к статье из русскоязычной Википе-дии «Википедия:Справка».

В MediaWiki встроен механизм за-грузки мультимедийных файлов. С по-мощью LaTeX MediaWiki поддерживает отображение математических формул, и многое из того, что может LaTeX, на-чиная от изображения шахматных пар-тий и нотных записей, заканчивая хи-мическими формулами и сложными графами.

Все действия с контентом записы-ваются и в любой момент возможно возвращение к любой из предыдущих версий. Восстановить последнее кон-систентное состояние документа пос-ле намеренной или случайной порчи информации много проще, чем осу-ществить эту порчу.

MediaWiki поддерживает разгра-ничение пользователей на группы и простейшие механизмы ограниче-ния доступа. Пользовательский интер-фейс можно отредактировать на ле-ту. Это реализовано через редакти-рование статей в пространстве имён «MediaWiki:». Для этого пользователь должен обладать необходимыми при-вилегиями. Как правило, таких пользо-вателей называют администраторами.

Обычный же пользователь может поменять интерфейс с помощью на-

Page 88: 051 Системный Администратор 02 2007

86

web

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го надо только установить.

Установка пакета автоматически потребует установ-ки PHP5. В дальнейшем, если это не оговорено особо, предполагается, что в качестве базы выбран дистрибу-тив Debian GNU/Linux и вся установка идёт на полностью доступном администратору компьютере. Ничего не за-прещает установить MediaWiki самостоятельно, напри-мер, для того чтобы вместо MySQL в качестве хранилища воспользоваться PostgreSQL. MediaWiki написан на PHP,

поэтому самостоятельная установка пакета сводится к копированию исходников, взятых, например на http://sourceforge.net/projects/wikipedia, в выбранную директо-рию (в дальнейшем эта директория будет упоминаться как «wikidir»). Последняя стабильная версия MediaWiki на 1 января 2007 года – 1.8.2.

О том, куда были перенесены исходники, следует уве-домить Apache. Например, положив в /etc/apache2/conf.d/ файл mediawiki.conf со следующим содержанием:

Теперь можно «обратиться» напрямую к MediaWiki. Ес-ли всё устанавливается локально, то адрес обращения http://localhost/wiki.

Заглавная страница предлагает для начала настроить MediaWiki. После перехода к странице настройки укажи-те название создаваемой wiki, язык интерфейса (русский язык присутствует), лицензию, под которой по умолчанию будет публиковаться информация (очень важно в случае публично открытых wiki), имя и пароль первого админис-тратора (например, так и назвать wiki), а также полити-ку авторизации. Последним пунктом идёт настройка ба-зы данных.

Перед тем как нажать заветную кнопочку «Install MediaWiki!», надо соответствующим образом подготовить хранилище данных.

На текущий момент можно выбирать между MySQL и PostgreSQL. В обоих случаях создайте пользователя, под которым будет работать MediaWiki, например, wikiuser и базу данных, куда будут складироваться данные, напри-мер, wikidb.

MySQLMySQL было первым и остаётся на текущий момент основ-ным хранилищем для MediaWiki.

Заглавная страница при первом обращении к MediaWiki до настройки

# Установка MediaWiki> sudo apt-get install mediawiki1.7 mediawiki1.7-math

# Сопоставление физической директории и пути в URLAlias /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>

# Установка 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

rootwww-data

# Даём возможность Apache управлять директорией> chown -R www_data:www_data "wikidir"

Page 89: 051 Системный Администратор 02 2007

87№2, февраль 2007

web

При установке MySQL по умолчанию пароль у супер-пользователя root отсутствует. Поэтому первое, что сде-лайте – установите его, например, с помощью программы phpMyAdmin.

Если установка локальная, то для этого достаточ-но обратиться в раздел «Изменить пароль» по адресу http://localhost/phpmyadmin. Заходя без пароля первый раз под пользователем root, выберите язык интерфейса. Да-лее создайте пользователя wikiuser, базу wikidb и дайте права этому пользователю на create, select, insert, update, delete и lock tables в пределах базы данных wikidb. Те же действия можно проделать с помощью утилит mysqladmin и mysql.

PostgreSQLЭкспериментальная поддержка PostgreSQL появилась в MediaWiki относительно недавно, с версии 1.7 и до сих до-статочно не оттестирована. Если MySQL среди свободных баз данных считается самой «популярной», то PostgreSQL по праву носит звание самой «продвинутой». Для нор-мальной работы требуется установить PostgreSQL версии не ниже 8.1. При работе с базой данных лучше выполнять все необходимые действия из-под обычного пользователя. Для этого проще всего завести в PostgreSQL пользователя с именем, совпадающим с рабочей локальной учётной за-писью. Пусть для определённости это имя будет «супер»:

Если имя учётной записи суперпользователя совпа-дает с именем, под которым вы работаете, то ключ -U и имя после него можно опускать. Кроме упомянутого, при совпадении учётных записей в системе и в базе дан-ных PostgreSQL по умолчанию для локальных подсоедине-ний работает доступ без пароля (механизм ident sameuser в pg_hba.conf).

Следует учитывать, что PostgreSQL сконфигурирован так, чтобы можно было работать в условиях жёсткой не-хватки ресурсов.

Поэтому для увеличения производительности PostgreSQL необходимо соответствующим образом перенастроить.

Для возможности полнотекстового поиска (поиск до-кумента на основании содержимого этого документа) по страницам wiki необходимо добавить модуль tsearch2 (http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/):

На момент написания статьи последняя версия MediaWiki 1.8.2 без модификации при работе с PostgreSQL не позволя-ла организовать полнотекстовый поиск по русским словам (баг № 8470 на http://bugzilla.wikimedia.org). Для исправления этой ошибки необходимо в файле language/Language.php найти функцию stripForSearch и, например, добавить вна-чале простую проверку на базу данных:

Это уже поправлено в SVN-версии. PostgreSQL следу-ет ставить пока только как экспериментальное хранилище, так как упомянутая ошибка к сожалению пока не единс-твенная.

Замечание: в PostgreSQL версии 8.2 входит модуль tsearch2, который полностью поддерживает UTF-8, поэто-му можно инициализировать базу данных командой initdb с ключиком --locale=ru_RU.UTF-8, что позволяет прозрач-но работать с unicode-данными.

Всё, теперь PostgreSQL готов для установки MediaWiki. Возможно, придётся подправить специфичные для PostgreSQL параметры, которые по умолчанию соот-ветствуют стандартным установкам.

НастройкаПосле того, как выбрано хранилище, указана база данных wikidb, пользователь wikiuser и пароль, можно нажать за-ветную кнопочку «Install MediaWiki!».

Если всё пройдёт нормально, то в директории «wikidir»/config будет создан файл настройки LocalSettings.php, ко-торый следует переместить в родительскую директорию, то есть в «wikidir».

# Установка MySQL (рекомендуется версия старше 4.0)> sudo apt-get install mysql-server# Установка phpMyAdmin для администрирования MySQL> sudo apt-get install phpmyadmin

# Установка базы данных (в разных системах по-разному)> 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) yCREATE 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 wikidbCREATE DATABASE# Разрешение на использование процедурного языка plpgsql> createlang -U "супер" plpgsql wikidb

> 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

# Разрешение на доступ к таблицам для wikiuserwikidb=> GRANT SELECT,UPDATE ON pg_ts_cfg TO wikiuser;wikidb=> GRANT SELECT ON pg_ts_parser, pg_ts_dict, ↵ pg_ts_cfgmap TO wikiuser;

Список отношений Схема | Имя | Тип | Владелец --------+--------------+---------+---------- public | pg_ts_cfg | таблица | "супер" public | pg_ts_cfgmap | таблица | "супер" public | pg_ts_dict | таблица | "супер" public | pg_ts_parser | таблица | "супер" (записей: 4)

function stripForSearch( $string ) { global $wgDBtype; if ( $wgDBtype != 'mysql' ) { return $string; } …

Page 90: 051 Системный Администратор 02 2007

88

web

Для пущей безопасности насто-ятельно рекомендуется удалить ди-ректорию config сразу после установ-ки Wiki. Дальнейшая настройка будет частично состоять из правки файла

n $wgLogo – помещает в левом вер-хнем углу личный логотип вмес-то стандартного, который сам же себя и предлагает заменить. Сле-дует разместить в доступном мес-те или загрузить (после разре-шения загрузки) картинку разме-ром 135x135 пикселей. Перемен-ная $wgFavicon позволяет анало-гичным образом настроить иконку в адресной строке браузера.

n $wgEnableUploads – разрешает (true)/запрещает (false) загружать файлы на wiki. Если на сайте кро-ме текста надо хранить картин-ки, звуковые файлы, презентации, pdf-тексты и тому подобное, то за-грузку следует разрешить.

При загрузке контролируется формат файла, в частности по рас-ширению. Чтобы отменить контроль по расширению, приравняйте пере-менную $wgCheckFileExtensions зна-чению false. Можно пойти по пути раз-решения каких-то определённых рас-ширений.

Список разрешённых форматов хранится в массиве $wgFileExtensions. По умолчанию массив инициализиру-ется следующим образом:

В противоположность списку раз-решённых расширений есть спи-сок запрещённых, который хранится в $wgFileBlacklist. Значение по умол-чанию можно посмотреть в файле includes/DefaultSettings.php.

Переменная $wgMaxUploadSize ог-раничивает размер загружаемого фай-ла. По умолчанию она равна 100 Мб, что обеспечивает все разумные пот-ребности, если бы PHP само по себе также не имело бы переменную, огра-ничивающую объём загрузки. Найди-те файл настройки php.ini и исправь-те upload_max_filesize} до разумно-го предела (значение по умолчанию 2 Мб). Учитывайте, что файлов может быть несколько.

В Debian искомый файл для Apache2 находится в директории /etc/php5/apache2/.

Переменная $wgUploadSizeWarning устанавливает предел на размер фай-ла, после которого при «закачке» вы-даётся предупреждение.

LocalSettings.php, который представ-ляет собой набор инициализируемых переменных.

Особый интерес заслуживают сле-дующие настройки:

Окно phpMyAdmin

Cтраница настройки

$wgFileExtensions = array('png', ↵ 'gif', 'jpg', 'jpeg');

Page 91: 051 Системный Администратор 02 2007

89№2, февраль 2007

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 более поздней вер-

Wiki сразу после установки

Различие возможностей у администратора и пользователя. Оба могут редактировать статью, обсуждать её, посмотреть историю изменений, переименовать и установить «сторожок» на случай изменения страницы, но только администратор может удалить и заморозить страницу

сии, чем 3.06 (http://caml.inria.fr), и, ес-тественно, GNU make.

Texvc – работает только с формула-ми. Тот же автор (Tomasz Wegrzanowski) создал более общий продукт WikiTeX (http://www.wikisophia.org), который с помощью LaTeX дополнительно к ма-тематике позволяет отображать гра-фы различной сложности, химические формулы, ноты, шахматные диаграм-мы и многое другое.

Перечислена только малая часть из имеющихся настроек и возмож-ностей.

Вы можете сами создать нехвата-ющий элемент разметки, графические элементы или более глобальное рас-ширение наподобие WikiTeX.

Под робнее о том, с чего на-чать, рассказано на сайте WikiMedia ht tp: //meta.wikimedia.org в статье «MediaWiki_extensions».

Для бэкапа необходимо сохранять дамп базы данных и «wikidir», в кото-рой помимо исходников MediaWiki хра-нятся загружаемые файлы. Не сов-сем понятна такая логика в свете того, что файлы, так же как и тексты, мож-но хранить в базе данных. Для бэкапа базы в случае MySQL можно восполь-зоваться утилитой mysqldump, которая подобна давно входящей в поставку PostgreSQL программе pg_dump.

Если по какой-то причине необхо-димо удалить MediaWiki, то для это-го надо удалить саму директорию

Page 92: 051 Системный Администратор 02 2007

90

web

«wikidir» и базу данных. Удалить ба-зу в случае MySQL можно через phpMyAdmin, а в случае PostgreSQL проще всего воспользоваться коман-дой dropdb.

Использование MediaWikiВсё, теперь можно набирать гипер-текст. При использовании MedaWiki настоятельно рекомендуется регис-трироваться (ссылка «Представить-ся системе» в правом верхнем углу). В этом случае появляется доступ к об-ширным индивидуальным настройкам и возможностям.

Администраторы (как минимум один администратор создаётся в про-цессе настройки MediaWiki) отличают-ся от обычных зарегистрированных пользователей тем, что они имеют пра-во удалять и «замораживать» (запрет на изменение) уже имеющиеся статьи. Вместе с возможностью блокировать пользователей это позволяет эффек-тивно управлять рукотворным храни-лищем знаний.

Базовые правила разметки под-робно изложены в статье «Википедия:Как править статьи», представленной на российском сегменте Википедии (http://ru.wikipedia.org).

Исчерпывающее руководство пользователя можно найти в ста-тье «Help:Editor» на сайте WikiMedia (http://meta.wikimedia.org).

Выбрали для себя подходящие настройки (ссылка «Мои настройки» сверху)? Теперь можно набирать ги-пертекст. Для начала следует поискать, а не было ли уже набрано чего-то по-добного – строка «Поиск» в панели на-вигации слева.

При выборе кнопки «Перейти» MediaWiki пытается перенаправить на статью с набранным в строке поиска именем. Если этого сделать не удаётся, то статью предлагается создать.

Простая структурная разметка поз-воляет разбивать текст на разделы:

Гиперссылки – это конёк wiki. Они позволяют легко набирать документы, вкрапляя в них нестандартные терми-ны без объяснений по ходу текста. Ес-ли статья с названием, определённым Тестовая Wiki-страничка. Так она выглядит в процессе редактирования

Тестовая Wiki-страничка. Так выглядит результирующая страничка

==Гиперссылки==* Wiki - это [[гипертекст]]. * А это [http://www.samag.ru внешняя

ссылка]

Page 93: 051 Системный Администратор 02 2007

91№2, февраль 2007

web

связи с Википедией недостатка в тех-нической информации по этому воп-росу не наблюдается. Официальный сайт http://www.mediawiki.org, посвя-щённый «движку» MediaWiki, управ-ляется им же. Здесь можно получить подробную информацию об устройстве и особенностях MediaWiki и задать воп-рос (Support Desk). Помните, что «Всё есть статья!».

в гиперссылке, отсутствует (ссылка в никуда), то при переходе по ней поль-зователю автоматически предлагает-ся создать эту страницу.

MediaWiki позволяет ссылаться на загруженные ранее (ссылка «За-грузить файл» в панели навигации слева) картинки (страницы в про-странстве имён «Изображения») или медиафайлы (пространство имён «Медиа»):

Каждому загруженному файлу со-ответствует собственная статья, кото-рая кроме ссылки может содержать описание файла и лицензию, под кото-рой этот файл распространяется.

MediaWiki поддерживает html-по-добные теги. Некоторые из тегов пов-торяют стандартные теги html-размет-ки, но есть и свои:

Ссылки на страницы, находящи-еся в пространстве имён «Катего-рия», ведут себя он так как обычные ссылки:

Ссылки на страницы «Категорий» отображаются в самом конце статьи. Это пространство имён предназначе-но для создания иерархических указа-телей. Это специальные страницы, ко-торые кроме своего текста отображают алфавитные списки всех статей, кото-рые ссылаются на них. Так как «Кате-гории» тоже статьи, хоть и специаль-ные, то они могут входить в/включать другие «Категории».

Удобен механизм шаблонов:

Двойные фигурные скобки указы-вают MediaWiki не необходимость за-грузить код страницы «Поправляйте»

==Экранирование Wiki-разметки==<nowiki>[[привет]] </nowiki>

==Тестирование математики==Решение квадратного уравнение

<math>ax^2+bx+c=0</math>:

<math> x_{1,2}=\frac{-b\pm\sqrt{b^2-4ac}}{2a}</math>

[[Категория:Тестовые страницы]]

Проверка возможностей {{Поправляйте}}

Так примерно выглядит «Категория»

Код шаблона {{Поправляйте}} - использует другой шаблон {{Userbox}}

==Тестирование медиа-файла==[[Медиа:mediawiki.ps|mediawiki.ps]]

- PostScript file

==Тестирование картинок==[[Изображение:turtle.png]]

из пространства имён «Шаблон». Шаб-лоны позволяют упростить набор слож-ных конструкций – что то вроде функ-ций. Шаблонам также можно переда-вать внешние параметры.

ПослесловиеMediaWiki является свободным про-граммным обеспечением. Благода-ря этому, а также из-за неразрывной

Page 94: 051 Системный Администратор 02 2007

92

книжная полка

Книга от авторов, известных среди русскоязычных пользователей и лю-бителей QNX, посвящена тонкостям создания программ, использующих параллельные вычисления. Авторы, ссылаясь на небезызвестные труды У. Стивенса и Р. Кертена, заранее пре-дупреждают всех читателей, что не пы-тались пересказать на новый лад ве-

Авторов книги все без сомнений отно-сят к ведущим специалистам мирово-го уровня в области оптимизации про-изводительности баз данных Oracle. Достаточно лишь сказать, что один из них в свое время стал инициато-ром появления System Performance Group в Oracle, а позже они вместе со-здали самостоятельную компанию, за-

Oracle. Оптимизация производительностиКэри Миллсап, Джефф Хольт (перевод П. Шера)нимающуюся этими вопросами, а так-же проводили обучающие курсы. Те-перь их бесценный опыт в области оп-тимизации производительности досту-пен в виде практического руководства, которое может стать бесценным посо-бием для многочисленных админист-раторов БД, уставших от бесчисленных попыток понять, как выжать максимум из очередного набора запросов.

Руководство фактически призыва-ет забыть об используемых ранее ме-тодах оптимизации и призвано «пере-вернуть привычные представления» о том, как добиваться лучших резуль-татов. Что характерно, судя, напри-мер, по отзывам покупателей Amazon, ему это блестяще удается. Особая ценность заключается в том, что ру-ководство не ограничивается описа-нием разработанного алгоритма оп-тимизации, примером решения кон-кретных проблем в производитель-ности. Оно служит и мощной основой для оптимизации любых систем путем

анализирования причин возникнове-ния задержек.

Книга разделена на несколько час-тей, написанных разным языком: часть ее предназначена для руководителей, которым доступно объясняются преиму-щества выбранного метода, а часть – для аналитиков по производительности, нуждающихся в технических деталях.

Для тех, кто усвоит всю теоретичес-кую часть, предусмотрено и несколь-ко практических примеров. Они взя-ты из реальной практики, достаточно типичны и интересны. Каждый услов-но разбит на 5 частей: введение в про-блему, определение цели, диагностика и лечение, результаты, мораль.

QNX/UNIX: анатомия параллелизмаОлег Цилюрик, Егор Горошкощи, прекрасно описанные до них (IPC, таймеры). В основе книги – стремле-ние уделять минимум внимания тому, о чем уже и так есть исчерпывающая литература, и принцип «черного ящи-ка», когда приводятся примеры того, как «есть на самом деле», а не того, как «должно быть». Последнее особен-но актуально из-за специфики офи-циальной технической документации по QNX, которая не всегда однознач-но трактует доступность тех или иных возможностей.

При этом авторы стараются по воз-можности избегать привязанности к QNX и обобщить приводимые приме-ры на другие UNIX-системы (FreeBSD, NetBSD и UNIX-подобная ОС Linux). QNX же была взята за основу, т.к. слу-жит в некотором смысле эталоном в отношении реализованности стан-дарта POSIX.

В книге рассмотрены процессы во-обще и, естественно, более подроб-но – потоки, различные аспекты ра-

боты с сигналами, вопросы синхрони-зации (приведено и сравнение наибо-лее применяемых примитивов син-хронизации: семафора и мьютекса), а также организация обмена сообще-ниями. Некоторые особые возможнос-ти QNX (связанные с микроядром, уп-равлением ресурсами и т. п.) вынесе-ны отдельно. Очевидно, издание ори-ентировано на высокий уровень под-готовки читателей, что подразумева-ет их близкое знакомство с классикой, на которую ссылаются авторы. «Офи-циально» книга предназначена в пер-вую очередь для «разработчиков про-граммных приложений» и лишь потом – для «программистов».

nИздательство:

nГод издания:

nКоличество страниц:

nISBN:

nЦена:

Книга предоставлена интернет-магазином

books.ru.

«Символ-Плюс»

2006

288

5-93286-088-X

≈ 150 руб.

nИздательство:

nГод издания:

nКоличество страниц:

nISBN:

nЦена:

Книга предоставлена интернет-магазином

books.ru.

«Символ-Плюс»

2006

464

5-93286-078-2

≈ 390 руб.

Page 95: 051 Системный Администратор 02 2007

93№2, февраль 2007

книжная полка

Труд Таненбаума можно отнести к клас-сической компьютерной литерату-ре. Он знаком многим специалистам по вычислительной технике вне зависи-мости от того, какой более узкой облас-ти они отдают предпочтение. И не слу-чайно он снискал славу достойной ба-зы для учебных курсов у преподавате-лей из разных стран мира.

Несмотря на то что впервые эта кни-га была издана более 30 лет назад, ее содержимое не теряет актуальнос-ти и по сей день. Она уже оказала оп-ределенное влияние на компьютерную индустрию и все еще популярна, а это редкое явление для столь бурно расту-щей растущей отрасли, как IT.

Автор, Фредерик Брукс, руково-дил проектом по созданию леген-дарного семейства компьютеров IBM

В основе книги – многоуровневое описание организации компьютера. Для начала приводятся общие све-дения об организации компьютерных систем, истории развития архитекту-ры, типах и семействах компьютеров. Затем следует подробное описание всех выделенных Таненбаумом уров-ней: цифровой логический (булева ал-гебра, основные цифровые логичес-кие схемы, шины и процессоры), мик-роархитектуры (с примерами реализа-ции, анализом производительности), архитектуры набор команд (типы дан-ных и команд, форматы команд, адре-сация), операционной системы (вирту-альная память, команды ввода-выво-да, примеры ОС), ассемблера.

Отдельно вынесены параллельные компьютерные архитектуры, представ-лен как параллелизм внутри процес-сора, так и сопроцессоры, мультипро-цессоры (UMA, NUMA, COMA), мульти-компьютеры. В отдельной главе соб-ран обширный список дополнитель-

Архитектура компьютера. 5-е изданиеЭндрю Таненбаум

ной литературы по всем рассмотрен-ным вопросам.

Если говорить о главных изменени-ях в пятом издании по сравнению с его предшественником, то стоит отметить появление описания процессоров Intel Pentium 4 и Sun UltraSPARC III, детали которых анализируются во многих гла-вах. Кроме того, появилось и описание микросхемы Intel 8051, распространен-ной в промышленности.

Еще одним важным дополнением стало приложение по программиро-ванию на ассемблере, что стало от-ветом на многочисленные просьбы преподавателей подробнее осветить эту тему.

Мифический человеко-месяц, или Как создаются программные системыФредерик Брукс (перевод С. Маккавеева)

System/360 и сопутствующей опера-ционной системы OS/360. Тогда он за-метил, что в мире много программис-тов и менеджеров, но управляющие крупными проектами по разработке программного обеспечения зачастую не учитывают всех особенностей обе-их профессий. Кроме того, в масш-табных проектах могут возникать но-вые проблемы, связанные с разделе-нием труда.

Книга – это сборник очерков, в ко-торых Брукс рассказывает о своей практике, в ходе которой ему пришлось столкнуться с рядом таких трудностей и как-то их решить. Стиль изложения необычен – это смесь мыслей и сво-бодных рассуждений автора, анали-за предложений других специалистов, описания самого процесса работы над проектом. Благодаря этому, читается

Обзор книжных новинок подготовил Дмитрий Шурупов

все гораздо проще традиционной тех-нической литературы. Но стоит отме-тить, что материал хорошо структури-рован и чётко изложен.

В данном издании (оно было до-полнено через 20 лет после публика-ции оригинального) отдельно пред-ставлены все важнейшие утвержде-ния из первоначального труда в сжа-той форме (со свежими комментари-ями), а также добавлена глава с раз-вернутыми ответами на появившуюся за это время критику.

nИздательство:

nГод издания:

nКоличество страниц:

nISBN:

nЦена:

Книга предоставлена интернет-магазином

books.ru.

«Символ-Плюс»

2006

304

5-93286-005-7

≈ 250 руб.

nИздательство:

nГод издания:

nКоличество страниц:

nISBN:

nЦена:

Книга предоставлена издательством «Пи-

тер».

«Питер Пресс»

2007

844

5-469-01274-3

≈ 703 руб.

Page 96: 051 Системный Администратор 02 2007

94

подписка на 2007 год

n Вы можете оформить подпискуналюбойроссийскийадрес.

n При заполнении квитанцииобя‑зательно РАЗБОРЧИВО укажи‑те фамилию, имя, отчество пол‑ностью, почтовый индекс и ад‑рес получателя (область, город, улица, номер дома, номер квар‑тиры), контактный телефон.

Редакционная подписка для физических лиц

n Вы можете оформить подпискуслюбогомесяцаналюбойсрок.

n Вграфе«Сумма»проставьтесуммузавыбранноеколичествономеров.Стоимостьодногономеражурнала150 руб.За11месяцев(сфевраляподекабрь)–1650 руб.НДСипоч-товые расходывключенывстои-мость.

nЖурналвысылаетсяпочтойпрос-тойбандерольютолькопослепос-тупленияденегнарасчетныйсчетикопии заполненного и оплачен‑ного бланка, отправленной в ре‑дакцию по факсу:(495) 628‑82‑53или на электронный адрес: [email protected].

Page 97: 051 Системный Администратор 02 2007

95№2 февраль 2007

подписка на 2007 год

Российская ФедерацияnПодписнойиндекс:годовой–20780,полугодовой–81655 Каталогагентства«Роспечать»nПодписнойиндекс:87836 Объединенныйкаталог«Пресса России» Адресныйкаталог«Подписка за рабочим столом» Адресныйкаталог«Библиотечный каталог»nАльтернативныеподписныеагентства: Агентство«Интер‑Почта»(495)500-00-60,курьерская

доставкапоМоскве Агентство«Вся Пресса»(495)787-34-47 Агентство«Курьер‑Прессервис» Агентство«ООО Урал‑Пресс»(343)375-62-74 ЛинуксЦентрwww.linuxcenter.runПодписка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

по каталогу агентства«ПрессаРоссии»

* годовой** полугодовой

Page 98: 051 Системный Администратор 02 2007

96

СИСТЕМНЫЙ АДМИНИСТРАТОР№2(51), Февраль, 2007 год

УЧРЕДИТЕЛИВладимир ПоложевецАлександр МихалевРУКОВОДИТЕЛЬ ПРОЕКТАПетр Положевец

РЕДАКЦИЯИсполнительный директорВладимир ПоложевецОтветственный секретарьНаталья Хвостова[email protected]Технический редакторВладимир ЛукинГлавный редактор электронного приложения «Open Source»Дмитрий ШуруповВнештатные редакторыАлексей БарабановСергей СупруновДмитрий МорозАркадий ШаныгинАндрей ШетухинАндрей Гуле

РЕКЛАМНАЯ СЛУЖБАтел./факс: (495) 628-8253Евгения Тарабринаreс[email protected]

Верстка и оформление[email protected]Дизайн обложкиНиколай Петрочук

По вопросам распространенияобращайтесь по телефону:(495) 628-8253 (доб. 120)

107045, г. Москва,Ананьевский переулок, дом 4/2, стр. 1тел./факс: (495) 628-8253Сайт журнала: www.samag.ru

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»

Отпечатано типографиейГП «Московская Типография №13»Тираж 15000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати, телерадиовещания и средств массо-вых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.).

За содержание статьи ответственность несет автор. За содержание реклам-ных материалов ответственность не-сет рекламодатель. Все права на опуб-ликованные материалы защищены.

Уважаемые читатели!

Обратите внимание, что теперь оформить подписку вы можете не только на полугодие, но и сразу на весь год.

Годовой индекс по каталогу «Роспечать» – 20780.Интер-почта – заказ журналов по тел.(495) 500-00-60.

Подписка on-line – SetBook.ru.

Приобрести новые и старые номера журналавы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

Доставка почтой в любую точку России.

Как стать обладателем диска, если вы не оформили годовую подписку

Что на диске?Архив номеров журнала «Системный администратор» с 2002 по 2006 год, архив электронного приложения «Open Source», дистрибутивы от партнёров.

Как приобрести?1. В редакции журнала «Системный администратор» по адресу: Москва, мет-

ро «Сухаревская», Ананьевский переулок 4/2, стр. 1, в приёмной или в офи-се 13.

2. На сайте on-line магазина Linuxcenter.ru.

Сколько стоит?Цена в редакции – 150 рублей.Цена с доставкой по России простой бандеролью – 180 рублей.

Клиенты компании SecurIT получат диск в подарокКомпания SecurIT проводит акцию, в рамках которой клиенты, заказавшие Zserver в любой комплектации или более 50 лицензий Zlock, получат диск в подарок в первом квартале 2007 года. Спешите, количество подарков ог-раничено!