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 №6(43) июнь 2006 №6(43) июнь 2006 подписной индекс 20780 www.samag.ru Быть или не быть зарубежному софту в России? Современный Linux-сервер: виртуализируем сеть Создаем зоны DNS Технология AJAX: как насчет безопасности? Переключи драйвер NTFS в режим read-write Настраиваем безопасный роутер на базе FreeBSD Пишем систему динамической защиты ресурсов в сети Первый раз в Linux-класс! Оппонент мистера Гейтса

043 Системный Администратор 06 2006

Embed Size (px)

DESCRIPTION

ЗАКО Н ЧИ Ж И ДАН ДЕН ЬГИ РАБО ТЕ ГО ДН И Е СТРО Н О ВО УЕХА №6(43) июнь 2006 РАЖ Н ЕО БЫ ЛИ ЛИ Н О СЬ СЬ ТИ №5(30) май 2005 №5(30) май 2005 подписной индекс 81655 www.samag.ru подписной индекс 81655 www.samag.ru Как работает Sendmail? Полезные подробности. Часть 2 18 Антон Ананич [email protected] ЧЕЛОВЕК НОМЕРА Оппонент мистера Гейтса34 Централизованно меняем пароли локального системного администратора 30 РЕТРОСПЕКТИВА Надежда умирает последней: история компании SGI. Часть 3 86 оглавление

Citation preview

Page 1: 043 Системный Администратор 06 2006

Роспечать – 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

№6(

43)

июнь

200

6

№6(43) июнь 2006подписной индекс 20780www.samag.ru

Быть или не быть зарубежному софту в России?

Современный Linux-сервер: виртуализируем сеть

Создаем зоны DNS

Технология AJAX: как насчет безопасности?

Переключи драйвер NTFS в режим read-write

Настраиваем безопасный роутер на базе FreeBSD

Пишем систему динамической защиты ресурсов в сети

Первый раз в Linux-класс!

Оппонент мистера Гейтса

Page 2: 043 Системный Администратор 06 2006
Page 3: 043 Системный Администратор 06 2006

1№6, июнь 2006

оглавление

ТЕНДЕНЦИИ3

Переключи драйвер NTFS в режим read-write

26

Антон Ананич[email protected]

С помощью Captive (первой полнофункциональной Open Source-реализации NTFS-драйвера) вы можете монти-ровать Windows-разделы и записывать на них данные без опасения их потерять.

Как работает Sendmail? Полезные подробности. Часть 2

18

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

Одна из сильных сторон Sendmail – функциональная мощь программы. Но запрятана она порой в дальних уголках конфигурационных файлов.

РЕПОРТАЖ

PHP – это мой путь решать возникающие в Web задачи

4

Дмитрий Горяинов[email protected]

Итоги конференции «Современные технологии эф-фективной разработки веб-приложений с использо-ванием PHP».

АНАЛИТИКА

Быть или не быть зарубежному софту в России?

6

Ольга Максимович[email protected]

В июне Госдума поставит точку в нашумевшей истории с запретом импортного программного обеспечения.

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

Современный Linux-сервер: виртуализируем сетевые устройства

10

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

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

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

30

Иван Коробко[email protected]

Автоматизация этого процесса значительно снизит за-траты на администрирование.

Оппонент мистера Гейтса34

Оксана Родионова[email protected]

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

ЧЕЛОВЕК НОМЕРА

СЕТИ

Создаем зоны DNS38

Рашид Ачилов[email protected]

Создать, настроить и запустить DNS-сервер для не-большого предприятия – это не так сложно, как кажется изначально. Достаточно пройти этот путь один раз.

WEB

Технология AJAX: как насчет безопасности?

46

Сергей Яремчук[email protected]

Появление новых технологий почти всегда приводит к снижению уровня безопасности. Как обстоят дела с AJAX?

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

Настраиваем безопасный роутер на базе FreeBSD

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

Как увеличить безопасность FreeBSD, работающей в качестве маршрутизатора между локальной сетью и Интернетом?

50

Пишем систему динамической защиты ресурсов в сети

56

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

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

Техника снятия дампа с защищенных приложений

62

Крис Касперски[email protected]

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

ОБРАЗОВАНИЕ

Первый раз в Linux-класс!

Андрей Маркелов[email protected]

Программы обучения и сертификации.70

Linux в школе?74

Сергей Яремчук[email protected]

Проблемы использования Linux в учебных заведениях.

Дистрибутив Edubuntu: специально для школ

78

Сергей Яремчук[email protected]

Обзор дистрибутива.

HARDWARE

Волшебство с паяльником в руках82

Крис Касперски[email protected]

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

Надежда умирает последней: история компании SGI. Часть 3

86

Дмитрий Мороз[email protected]

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

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

33, 61, 73 BUGTRAQ

92

Page 4: 043 Системный Администратор 06 2006
Page 5: 043 Системный Администратор 06 2006

3№6, июнь 2006

тенденции

вроде Debian и Gentoo. Однако по этому случаю Ричард Столлман (Richard Stallman) тут же высказал свое нега-тивное отношение. Sun, по его мнению, не сделала ниче-го полезного для сообщества Open Source: ведь она ос-тавила Java закрытым продуктом, лишь дав потенциаль-ную возможность для ее распространения в составе дру-гих дистрибутивов.

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

Как сообщается в пресс-релизе, цель нового ресурса, доступного по адресу OpenSource.Motorola.com, – предо-ставление разработчикам простого доступа к различно-му коду, приложениям и интеллектуальной собственнос-ти компании путем создания удобного рабочего канала для Linux-, Java- и мобильного сообществ. «Предоставле-ние кода в среде Open Source не только ускорит разработ-ку ПО на платформе Motorola, но и приведет к инноваци-ям и адаптации новых мобильных услуг и возможностей», полагают в Motorola.

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

Составил Дмитрий Шуруповпо материалам www.nixp.ru

OpenDocument признан стандартом ISO/IECОрганизация международных стандартов (ISO) приня-ла открытый формат OpenDocument (ODF) как всемир-ный стандарт для хранения файлов, создаваемых офис-ным программным обеспечением (для документов тексто-вых процессоров, электронных таблиц, презентаций, ри-сунков и т. п.).

OpenDocument стал стандартом ISO/IEC 26300, и это со-бытие уже с энтузиазмом прокомментировали как предста-витель Sun Саймон Фиппс (Simon Phipps), так и Луис Су-арез-Поттс (Louis Suarez-Potts) из проекта OpenOffice.org. «Время – сейчас, инструменты – здесь, свобода – ва-ша», – написали в рассылке объявлений свободного офи-са OpenOffice.org.

Алан Йейтс из Microsoft не стал скрывать отношения своей компании к OpenDocument и открыто заявил, что по сравнению с их новым (и тоже «открытым») форма-том (Open XML) первый значительно уступает как в ско-рости работы, так и в уровне документированности (чис-ло страниц в документации по Open XML превышает от-метку в 4000).

Энтузиасты OpenOffice.org тоже не стоят на месте и запустили сайт why.openoffice.org для привлечения но-вых пользователей (работающих с нелегальными копия-ми MS Office). На ресурсе «Get Legal – Get OpenOffice.org» подробно рассказывается о преимуществах использова-ния свободного офиса.

Sun DTrace портируют на FreeBSDБрайан Кэнтрилл (Bryan Cantrill) из компании Sun в своем блоге опубликовал сообщение о текущем статусе порти-рования технологии DTrace в среду свободной операцион-ной системы FreeBSD:

«Некоторое время назад я сообщал о возможности со-здания FreeBSD-порта DTrace. Прошедшие несколько меся-цев Джон Биррелл (John Birrell) серьезно работал над этой задачей и недавно объявил о том, что добился функциони-рования базовых возможностей DTrace. ... Хоть Джону еще и нужно постараться для того, чтобы его труд можно было назвать полноценным портом, уже то, что у него есть сей-час, несомненно, само по себе полезно».

Sun все-таки откроет JavaКомпания Sun Microsystems объявила о своем твердом на-мерении сделать Java проектом Open Source, но пока еще не определилась с тем, как и когда это лучше сделать.

На конференции JavaOne Рич Грин (Rich Green) испол-нительный вице-президент компании по ПО подтвердил на-мерение его компании открыть Java, но добавил, что пока этот процесс испытывает некоторые трудности, среди ко-торых обозначил проблему совместимости.

Впрочем, это не помешало Sun сообщить о передаче сообществу Open Source своих других продуктов: Sun Java Studio Creator, Sun Java System Portal Server, ПО для оче-редей сообщений на базе Sun Java Message System и Web Services Interoperability Technology.

Попутно Sun представила лицензию Operating System Distributor’s License for Java, что должно способство-вать появлению JRE в составе GNU/Linux-дистрибутивов

Page 6: 043 Системный Администратор 06 2006

4

репортаж

Впервые Россию посетил основа-тель проекта PHP Расмус Лер-дорф (Rasmus Lerdorf) и один

из активных разработчиков ядра и мо-дулей PHP Андрей Змиевский (Andrei Zmievski).

Собственно, Андрей Змиевский и стал первым докладчиком на конфе-ренции, рассказав о внедрении подде-ржки Unicode в PHP 6. Да-да, вы не ос-лышались. Не так уж и давно у нас по-явилась стабильная «пятерка», до сих пор она еще не стала стандартом де-факто, а уже готовится версия PHP 6. Причина довольно проста: объем внут-ренних переработок, потребовавших-ся для полномаcштабной поддержки Unicode, таков, что провести его в ка-честве очередного релиза версии 5 просто невозможно. Судите сами.

Заявлена поддержка принципиаль-но нового типа – символьной строки Unicode и отделение типа «бинарная строка» (до сих пор все строки в PHP

были именно бинарными или байт-ори-ентированными). Вводится автомати-ческая поддержка Unicode для стро-ковых литералов. Происходит обнов-ление семантики языка. Добавляется поддержка преобразований кодировок в различных потоках данных. При этом предполагается возможность опери-ровать преобразованиями кодировок для процесса выполнения скрипта, не-посредственно самого скрипта; ввода-вывода и файловой системы.

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

работке проектов для «внутреннего употребления» использовать исклю-чительно внутрипонятные (читай – на-писанные иероглифами) названия пе-ременных и т. п. С докладом Андрея Змиевского в виде тезисов можно оз-накомиться на его сайте по адресу: http://www.gravitonic.com/talks.

Старт конференции был дан, нача-ло положено. Но дальше произошло что-то странное. Выступившие вслед за этим докладчики говорили не столь-ко о разработке приложений с исполь-зованием PHP, сколько о чем-то дру-гом. Прозвучавший доклад «Автома-тизация проектных задач и организа-ция цикла Build → Package → Deploy» был, может, и интересен в качестве примера автоматизации сопровожде-ния процесса разработки приложений, но во-первых, докладчик не коснул-ся нескольких действительно важных для этого процесса тем (прежде всего – проблемы получения и сборки патчей),

PHP – это мой путь решать возникающие в Web задачи

25-26 мая в Москве прошла 5-я международная конференция «Современные технологии эффективной разработки веб-приложений с использованием PHP». И на этот раз назвать ее псевдомеждународной уже не получится!

Page 7: 043 Системный Администратор 06 2006

5№6, июнь 2006

репортаж

а во-вторых… Связь с разработкой веб-приложений с использованием PHP постепенно начала тускнеть.

Следующий доклад – «Как зара-ботать деньги на Open Source» – про-шел живее. В большей степени пото-му, что тема довольна близка аудито-рии и животрепещуща. Хотя с тем же успехом этот доклад можно было про-читать и на любой другой IT-конферен-ции. После этого Александр Календа-рев попытался рассказать о методах криптозащиты в b2b веб-приложениях. Почему я написал «попытался»? Ну хо-тя бы потому, что 60% времени Алек-сандр говорил о стандартах и нормо-образующих документах, связанных с этой тематикой. По моим наблюде-ниям, большая часть аудитории, явно не сталкивавшаяся с этой проблемой всерьез, просто потеряла за это время нить, суть и цель повествования.

В завершение первого дня прозву-чали еще два доклада. Первый был посвящен дистрибуции PHP-прило-жений с помощью PEAR Installer. Са-мой интересной, на мой взгляд, в нем была часть, посвященная PEAR-ка-налам и возможности использования специализированного сервера. Кажет-ся, помимо массы догматов, ограниче-ний и всяких других штучек, призван-ных усложнить жизнь всем тем, кто не успел вовремя вскочить на подножку PEAR-экспресса, эта система породи-ла, наконец, и что-то полезное приме-нительно к реальной жизни. Заверша-ющий первый день доклад был истин-ным сыном нашего времени и назы-вался «AJAX и основы Rich Client».

Разумеется, обойти тему техноло-гий динамической подкачки и асинх-ронной загрузки, говоря о разработке веб-приложений, сейчас попросту не-возможно. Другое дело, что в докладе прозвучал скорее верхний слой про-блематики, так сказать «AJAX для са-мых маленьких». Кроме этого был дан некоторый обзор имеющихся в при-роде библиотек, который, уже почти под занавес, свелся к DOJO javascript toolkit. Проект уже в стадии предпро-дакшен, и его можно и нужно смотреть, трогать руками и т. п.

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

думаете Yahoo! – это огромная компа-ния, у которой целое море серверов, которые и решают все наши пробле-мы с нагрузкой? Но это совсем не так!». После чего в живой и активной мане-ре наглядно продемонстрировал ауди-тории подходы к выявлению, анализу и устранению неоптимальных, ресур-соемких мест. Кстати, всем рекомен-дуется смотреть в сторону расширения APC (http://pecl.php.net/package/APC). Следующим пунктом в докладе про-звучала проблема защищенности веб-приложений. В том числе рассмотре-но расширение Filter (http://pecl.php.net/package/filter).

Третьим ключевым моментом до-клада стал разговор о PHP в приме-нении к современным тенденциям в веб-приложениях. Здесь речь пошла об усовершенствованиях по отноше-нию к XML, RSS-потоках и, разумеется, о технологиях асинхронной динамичес-кой подкачки. В последнем случае ав-тор-изобретатель языка остался верен JSON (Java Script Object Notation) и про-пагандируемому им расширению PHP-JSON. В общем, настоятельно реко-мендую всем самостоятельно ознако-миться со слайдами, подготовленными расмусом Лендорфом для этого докла-да (http://talks.php.net/show/phpclub).

Во второй день также прозву-чал доклад о применении процедур в СУБД MySQL, Сергей Павлов из ком-пании РБК поведал об агрегаторах приложений. Большой интерес вы-звал доклад Евгения Климова «Прак-тика использования технологии XSLT в приложениях php5», который сложил-ся не совсем удачно и из-за нехватки времени оказался скомканным и об-резанным.

В целом конференция оставила лично у меня двойственное ощущение. Тематические доклады наших гостей из Yahoo! (и Расмус Лердорф, и Анд-рей Змиевский уже несколько лет ра-ботают именно там), несомненно стали самым главным событием конферен-ции и посвящались именно проблеме разработки веб-приложений с исполь-зованием PHP. В большинстве осталь-ных докладов язык, технология и тен-денции PHP, связь PHP с Web, PHP, как инструмент и платформа разра-ботки веб-приложений, как бы отош-ли на второй план. Докладчики гово-рили об организации процесса разра-

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

Во второй день конференции мне удалось взять интервью у Расму-са Лердорфа и Андрея Змиевского (интервью читайте в июльском номере журнала – примеч. редакции). Я не мог удержаться и спросил г-на Лердор-фа о том, что он сам думает о срав-нениях PHP с другими языками, о ро-ли и применимости PHP? В ответ Рас-мус очень удивился и сказал, что сам он об этом думает довольно мало. «Я смотрю на Web, я думаю именно о Web. Как только возникает новая задача, решить которую имеющими-ся инструментами становится невоз-можно или не удобно – мы что-то до-бавляем и меняем в PHP. Просто пото-му, что PHP – это мой путь решать воз-никающие в Web задачи».

Текст: Дмитрий ГоряиновФото: Антон Довгаль

Выступление Расмуса Лердорфа

Page 8: 043 Системный Администратор 06 2006

6

аналитика

Название проекта федераль-ного закона «Об информации, информационных технологи-

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

ющих стратегические отрасли и особо важные объекты Российской Федера-ции, запрещается использование за-рубежных программно-технических средств. В другой говорится о недо-пустимости наличия в данных средс-твах недокументированных функций. Конкретный список объектов и отрас-лей, где планируется запретить зару-бежный софт, по мысли разработчиков и авторов поправок, должен устанав-ливаться правительством не позднее 12 месяцев с момента вступления зако-на в силу. Однако уже сейчас очевидно, что в список стратегических отраслей

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

Цена вопросаКак известно, безопасность в стране, в том числе и информационную, обес-печивают ФСБ и Федеральная служба по техническому и экспортному конт-ролю. Кстати, в их совместной работе с Минобороны уже есть практика ог-раничения в стратегических отраслях. Например, предприятия могут исполь-зовать только антивирусы, на которые имеются сертификаты этих ведомств. Что же касается инициативы депутатов

Быть или не быть зарубежному софту в России?

Ольга МаксимовичВ июне Госдума поставит точку в нашумевшей истории с запретом импортного программного обеспечения.

Page 9: 043 Системный Администратор 06 2006

7№6, июнь 2006

аналитика

Гудкова и Хинштейна, то ФСБ с уче-том ряда юридических и технических замечаний предложенные поправки поддержала, о чем и сообщил в пись-ме на имя председателя Комитета ГД по информационной политике Валерия Комисарова статс-секретарь замести-теля директора ФСБ России. Однако комитет, дважды рассмотрев поправ-ки без участия, а потом и в присутствии авторов, занял другую позицию.

«На мой взгляд, причины того, что поправки не были поддержаны, впол-не очевидны, – сказал в комментарии «Системному администратору» Дмит-рий Горовцов, помощник депутата Госдумы РФ Геннадия Гудкова. – Се-годня российский рынок информаци-онных технологий более чем на 90 про-центов представлен инструментальны-ми средствами импортного производс-тва. 99 процентов – это импортное про-граммное обеспечение, включающее операционные системы, системы уп-равления базами данных и разработки приложений, системы поддержки сете-вых протоколов и другие универсаль-ные базовые средства. Соответствен-но существует мощное лобби на раз-ных уровнях, отстаивающее интересы западных разработчиков и компаний. И для многих оппонентов включение поправок в законопроект означает по-терю финансовых потоков, которые, по самым скромным подсчетам, оценива-ются в 12 миллиардов долларов в год. Вот цена вопроса. По сути, эти деньги главным образом идут на кредитова-ние частных западных компаний».

Доводы депутатовВ чем же конкретно заключается опас-ность? По мнению авторов попра-вок, ввезенная из-за границы техни-ка на стратегически важных объек-тах вовсе не гарантирует защиту ин-формации, в том числе и секретной, от зарубежного поставщика. «У разра-ботчиков есть возможность заложить «ошибки», которые могут сделать не-действенными военные системы и сис-темы навигации. При необходимос-ти их можно легко вывести из строя. На карте военная безопасность наше-го государства. Если мы не примем за-кон – окажемся безоружными», – счи-тает Геннадий Гудков.

Депутаты приводят в пример опыт Англии, Германии, Франции, где, по их

словам, переходят на собственный софт. «Если есть отечественный ана-лог западного программного обеспе-чения, необходимо отдать приоритет ему, – говорит Александр Хинштейн. – Это особенно касается военных, стра-тегических объектов и сохранения гос-тайны. Если иностранная компания поставляет оборудование, она будет использовать эту возможность для по-лучения секретной информации, раз-ведданных. Это возможно путем внед-рения в технику «посторонних объек-тов», и такие случаи уже были. Те, кто противостоит принятию этого закона, – пособники западных разведорганов».

Русский WindowsНесмотря на то, что, по словам Генна-дия Гудкова, запрет на использова-ние иностранного ПО коснется толь-ко 10 процентов действующих в на-шей стране информационных систем, в российских госкомпаниях пока осто-рожно высказываются о перспективах перехода на отечественные програм-мы. Кроме того, российские предпри-ятия уже сделали огромные инвести-ции в приобретение западных продук-тов. Поэтому есть предложения встра-ивать модули в Windows или другие операционные системы, подстраи-вая их под нужды конкретной отрас-ли, а не изобретать велосипед, при-думывая «русский Windows». Говорят специалисты и о том, что существует программное обеспечение, не имею-щее отечественных аналогов, кото-рое не может быть заменено. Напри-мер, ПО к турбинам импортного про-изводства в РАО ЕЭС, оно поставля-ется с ними в комплекте.

«Абсолютное большинство про-граммных продуктов не разрабаты-ваются в России и являются плодами интеллектуального труда зарубежных разработчиков, – сказал в коммента-рии «Системному администратору» Игорь Динес, член Комитета Госдумы РФ по энергетике, транспорту и свя-зи и председатель подкомитета по ин-формационным технологиям. – Одна-ко, учитывая степень интернационали-зации знаний, сложно говорить, что се-годня можно считать национальным компьютерным продуктом. Например, многие программы компании Microsoft разработаны с участием российских специалистов, уехавших в Соединен-

ные Штаты, либо продолжающих жить в России и сотрудничать с компани-ей как вольнонаемные программисты. С другой стороны, во многих российс-ких компаниях программное обеспе-чение разрабатывают специалисты из стран третьего мира, в частности Индии, которая входит в число лидеров по предоставлению компьютерных ус-луг. Поэтому говорить о каком-то стра-тегическом выборе страны в пользу то-го или иного программного обеспече-ния не очень корректно. Конечно, есть компании, предлагающие наиболее популярный продукт, не только в Рос-сии, такие, например, как Microsoft. Но и в своей стране эта компания пос-тоянно контролируется уполномочен-ными органами государственной влас-ти, проходит различные виды антимо-нопольных расследований. Это связа-но с тем, что компания, занимающая столь большую долю на рынке ком-пьютерных программ, может теорети-чески злоупотребить своими возмож-ностями. Любая погрешность в таком массовом продукте мультиплицирует-ся на миллионы компьютеров и может создать серьезные сбои в работе жиз-ненно важных узлов, таких как управ-ление энергоресурсами, нефте- и га-зопроводами, аэропортами и вокзала-ми. В этих случаях действительно мо-жет существовать проблема».

Код доступаВ Microsoft такой проблемы не видят. О том, что исходные коды Microsoft уже официально переданы России и при необходимости их можно про-верить на так называемые закладки, «Системному администратору» под-твердила Кира Кирюхина, руководи-тель отдела по связям с обществен-ностью корпорации Microsoft. «По-нимая, что каждое государство обя-зано защищать свои националь-ные интересы, в Microsoft в 2002 году разработали программу Government Security Program (GSP) по сотрудни-честву с государствами в области ин-формационной безопасности, – ска-зала она. – В рамках программы GSP мы предоставляем государствам до-ступ к исходным кодам своих продук-тов. Россия была первой страной в ми-ре, подписавшей GSP в 2002 году и по-лучившей доступ к исходным кодам Windows и других программ. Все го-

Page 10: 043 Системный Администратор 06 2006

8

аналитика

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

На основе данного соглашения еще в 2003 году была начата сертификация ряда продуктов. На сегодняшний день

«Предприятие по поставкам продукции Управления делами Президента РФ» уже сертифицировало в ФСТЭК ряд продуктов Microsoft: клиентскую опера-ционную систему Windows XP, сервер-ную операционную систему Windows Server 2003, сервер управления база-ми данных SQL Server 2000 и офисный пакет приложений Office 2003. Прово-дится сертификация наших продук-тов и в ФСБ. Там уже получены по-ложительные заключения по резуль-татам сертификационных испытаний Windows XP и Windows Server 2003. По-лученные сертификаты дают возмож-ность государственным организаци-

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

Отечественные аналогиСерьезные доводы имеются и в пользу перехода на российское ПО. «Есть оте-

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

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

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

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

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

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

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

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

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

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

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

6. В государственных информаци-онных системах, обеспечивающих стра-тегические отрасли и особо опасные (важные) объекты Российской Феде-рации, не допускается использование зарубежных программно-технических средств. Перечень стратегических от-раслей и особо опасных (важных) объ-ектов Российской Федерации устанав-ливается Правительством Российской Федерации не позднее 12 месяцев с мо-

мента вступления в силу настоящего фе-дерального закона.

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

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

Статья 18. Защита информации1. Защита информации заключается в при-нятии правовых, организационных и тех-нических (программно-технических) мер в целях:1) обеспечения целостности и сохраннос-

ти информации, недопущения ее не-санкционированного изменения или уничтожения;

2) соблюдения конфиденциальности ин-формации ограниченного доступа;

3) реализации права на доступ к инфор-мации;

4) недопущения несанкционированного воздействия на средства обработки и передачи информации;

5) недопустимости недокументирован-ных функций программно-техничес-ких средств.

Поправки депутатов Госдумы РФ Геннадия Гудкова и Александра Хинштейна ко второму чтению проекта Федерального закона «Об информации, информационных технологиях и защите информации», принятого в первом чтении 25 ноября 2005 года (текст поправок выделен курсивом)

Page 11: 043 Системный Администратор 06 2006

9№6, июнь 2006

аналитика

чественные разработки, которые впол-не могут составить конкуренцию зару-бежным аналогам, – сказал «Систем-ному администратору» Дмитрий Горов-цов. – Российские разработчики, со-здав программные продукты, не толь-ко не уступающие западным аналогам, но и превосходящие их, не позволили иностранным компаниям окончатель-но завоевать российский рынок. А их успешная эксплуатация подтвердила, что отечественные разработки новых информационных технологий вполне конкурентоспособны и при соответс-твующей поддержке государства мог-ли бы со временем вытеснить запад-ные аналоги с российского информа-ционного рынка. Например, в Институ-те системных исследований РАН, кото-рый возглавляет академик Владимир Борисович Бетелин, создана и успеш-но действует система «Багет». Эта раз-работка позволяет осуществлять кон-троль за функционированием инфор-мационных систем, обеспечением бе-зопасности их работы.

В Фонде социального страхования Российской Федерации внедрена и ус-пешно экcплуатируется система управ-ления базами данных, разработанная академиком РАЕН Сергеем Станис-лавовичем Ковалевским. Кроме того, в настоящее время ФГУП «НИИ авто-матической аппаратуры имени акаде-мика В.С.Семенихина», ведущее в этой области предприятие Роспрома, про-

водит ряд работ, в частности, «Багет-АСУ» и «Каверна-АСУ», цель кото-рых – переход на отечественную эле-ментную базу в системах управления для стратегических отраслей и особо важных объектов России. Предприятия и организации радиоэлектронной про-мышленности Роспрома при выпол-нении работ для специальных заказ-чиков – МО, ФСБ, МЧС – используют программное обеспечение ЗАО «Кон-церн ВНИИНС»: операционную систе-му «ОС МСВС» 3.0, систему управле-ния базами данных «Линтер-ВС» 6.0 и многое другое».

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

«На словах Дмитрий Милован-цев поддержал идею депутатов Гуд-кова и Хинштейна, – прокомментиро-вал позицию зам. министра Дмитрий Горовцов, – однако на деле это, ско-рее всего, означает – отложить про-

блему в долгий ящик, а не решить ее сегодня».

Буква законаТочка в истории с попыткой запрета за-рубежного ПО, скорее всего, будет пос-тавлена уже в самое ближайшее вре-мя. Согласно регламенту, независимо от решения Комитета Госдумы по ин-формационной политике, депутаты имеют право вынести свои поправки на отдельное голосование на пленар-ном заседании Госдумы в день, когда будет рассматриваться данный проект федерального закона во втором чте-нии. Так, собственно, депутаты Гудков и Хинштейн и намерены поступить.

Кроме того, еще до второго чте-ния, они предполагают обсудить поп-равки на президиуме фракции «Еди-ная Россия», чтобы заручиться подде-ржкой парламентского большинства. Так что, по сути, принятие поправок – вопрос политический: либо идею Гуд-кова – Хинштейна поддержат, либо нет. В остальном рассмотрение законопро-екта – технические детали. Третье чте-ние, как правило, – всего лишь линг-вистическая экспертиза. Да и дальше, когда законопроект поступает на рас-смотрение в Совет Федерации и под-пись Президента, текст, как правило, уже остается без изменений. А потому, быть или не быть зарубежному софту в России, окончательно решит второе чтение законопроекта.

Page 12: 043 Системный Администратор 06 2006

10

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

Сетевые интерфейсы в серверах обычно ассоциируются с чем-то неизменным и предопреде-

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

подхода вы можете встретить во мно-гих системах, например, во встроен-ных Linux или при создании виртуаль-ных серверов. Рассмотрим предпо-сылки, идею и реализацию перевода сетевых интерфейсов в виртуальный режим. В качестве платформы будем использовать openSUSE Linux версий 10.0 и 10.1 [1]. Все несоответствия меж-ду ними я отмечу особо. Итак, начнем с перечисления возможных проблем, не решаемых в рамках традиционной настройки сети.

Исходные предпосылкиРассмотрим «редкий» вариант, когда у сервера всего лишь один сетевой ин-терфейс. Что тут сложного, спрашива-

ется, – от «рождения» и до «смерти» бу-дет eth0. А вот и нет, как бы того не хо-телось многим наивным скриптописа-телям, eth0 будет лишь в идеальном случае при установке системы прямо на данный системный блок. Если же, что более реально, сервер не устанав-ливается каждый раз с нуля, а копиру-ется через образ системы или всего жесткого диска, то, скорее всего, даже единственный интерфейс будет иметь иное название. Eth1 и далее, в том слу-чае, если полагаться на автоматичес-кую систему наименования устройств, использованную в udev, что для совре-менных систем является стандартом.

Но в серверах, как правило, более одного интерфейса. И если их назва-

Современный Linux-сервер: виртуализируем сетевые устройства

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

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

Page 13: 043 Системный Администратор 06 2006

11№6, июнь 2006

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

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

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

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

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

Теперь пример из смежной облас-ти. Давайте задумаемся о том, как про-изводится включение сетевого экра-на в процессе старта сервера. Самый грамотный из мною наблюдаемых – это способ, использованный в дис-трибутивах SuSE. Безусловно, в ка-честве серьезного решения это со-вершенно неприемлемо (практически бытовой вариант). Отмечу лишь од-но важное качество: в этом сетевом экране выделена отдельная стадия предварительной настройки – снача-ла срабатывает SuSEfirefall2_init пос-ле старта boot.localnet, а потом уже SuSEfirewall2_setup после $network. Не буду обсуждать, что эти скрип-ты делают конкретно, меня ни один из них не устраивает, но главное – здесь продемонстрирована необхо-димость нулевой фазы настройки се-тевого экрана, которая переводит сер-

вер в защищенное состояние. А вот иная схема, используемая в Fedora Core и RHEL, совершенно неприем-лема. Кстати, как и всякое примене-ние iptables-save/restore. Дело в том, что, как уже указано, вовсе не обяза-тельно сетевые интерфейсы старту-ют нужным образом. Поэтому не факт, что iptables-restore создаст те правила, которые требуются из-за изменившей-ся схемы наименования интерфейсов. В схеме SuSE есть скрипт, который те-оретически может проанализировать реальное состояние сети и адаптиро-вать сетевой экран нужным образом. Минус только в том, что сетевой эк-ран должен подниматься не отдельным скриптом по расписанию SysVinit, а синхронно с интерфейсом, на который он настраивается! Увы, хотя разработ-чики Red Hat, Inc. далеки от этой прос-той мысли, но и в SuSE не лучше. Не может система безопасности старто-вать, во-первых, после поднятия сете-вых интерфейсов (и ведь никто не нор-мирует данное «после») и, во-вторых, вне всякой связи с настройкой дина-мических сетевых интерфейсов (wifi, ppp и прочие ADSL).

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

Рисунок 1. Сравнение традиционного способа настройки с виртуализованным интерфейсом

Page 14: 043 Системный Администратор 06 2006

12

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

пользуемых сейчас 10.х. Аналогично и в отношении применяемого в упо-мянутом дистрибутиве сетевого экра-на. Ведь неспроста в его названии ис-пользован индекс 2. Можно, например, пойти вообще радикальным путем, как это предлагается в ALT Linux, и исполь-зовать иную схему запуска сети [2]. Так что практика размножения сущнос-тей и версий может продолжаться бес-конечно. Для меня выбор способа, ко-торый, как кажется сейчас, может ре-шить все проблемы разом, произошел почти историческим путем.

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

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

Но сейчас появились дополнитель-ные аргументы в пользу использова-ния именно сетевых мостов в качест-ве основы виртуализации. Логика раз-вития серверных систем неизбежно приводит к необходимости внутрен-ней виртуализации ресурсов и ком-понентов. Причин этому очень много. Их рассмотрение заслуживает отде-льной статьи. Как один из последних опубликованных аргументов приведу мнение Эндрю С. Таненбаума (Andrew S. Tanenbaum) о необходимости изо-ляции подсистем для увеличения на-дежности и безопасности [4]. Лучший способ добиться изоляции – помес-тить нужные подсистемы в отдельную виртуальную машину. К слову сказать, статья по ссылке [4] весьма спорная, о чем свидетельствует и сопутство-вавшая ей сетевая дискуссия. Здесь предлагается принять на веру, что ра-но или поздно, но использование вло-женных виртуальных машин внутри серверов станет нормой. Практичес-ки во всех видах подобной виртуали-зации ресурсов внутренний, или зави-симый, уровень получает непосредс-твенный доступ к сети путем присоеди-нения к виртуальному сетевому мосту (bridge) [5, 6], если исключить всякого

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

Технология изнутриИтак, выбор сделан – сетевой мост. Статей, описывающих настройку се-тевых мостов в Linux и сопутствую-щие этому вопросы, огромное чис-ло, например [7]. Не буду дублировать очевидное. Обращаю ваше внима-ние лишь на самое важное в контек-сте предлагаемой идеи. Сам сетевой мост является полностью виртуаль-ным устройством. Реальный трафик принимается только физическими се-тевыми устройствами. Чтобы трафик попал на сетевой мост с некоторого физического устройства или, напро-тив, с сетевого моста поступил в ре-альный интерфейс, нужное сетевое устройство должно быть подключено к мосту командой:

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

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

brctl addif <bridge> <iface>

Рисунок 2. Запрос на перевод интерфейса в режим прослушивания

Page 15: 043 Системный Администратор 06 2006

13№6, июнь 2006

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

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

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

«Физика» работы сетевого моста требует, чтобы исполь-зуемое аппаратное устройство принимало из сети пакеты для адреса сетевого моста, в который это устройство вклю-чено. Такое возможно, если в сетевой карте отключить аппа-ратную фильтрацию пакетов и перевести ее в promiscuous-режим или, как будем называть это далее, перевести в ре-жим прослушивания. Самый простой способ добиться это-го – поднять интерфейс с адресом 0.0.0.0 или, что более вер-но, вовсе без адреса. Собственно, в ином состоянии утилита brctl откажется подключать интерфейс к мосту. И в процессе подключения интерфейс будет переведен в режим прослу-шивания автоматически. Но в этом тезисе ничего не сказа-но про наличие действительного адреса у самого сетевого моста. Он может иметь реальный адрес, может иметь не-сколько адресов как алиасы (синонимы), может иметь ад-рес, немарштуризируемый в используемой сети, или вов-се не иметь адреса. Ну и, наконец, сетевой мост может во-обще не соединяться с физическим интерфейсом. Тогда он образует полностью виртуальный коммутатор внутренней сети, к которому могут подключаться виртуальные маши-ны через виртуальные же интерфейсы, и использовать его как внутреннюю сеть кластера. Рассмотрим эти варианты подробнее и проверим их экспериментально.

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

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

Итак, произведем подобную настройку. Прежде всего отключим имеющийся сетевой интерфейс:

Затем переименуем его, так как «реальное» имя нам понадобится далее для создаваемого виртуального ин-терфейса:

Теперь переименованный интерфейс снова можно вклю-чить. Впредь он будет играть роль простого элемента ком-мутации без собственного IP-адреса:

Создадим сетевой мост с предпочтительным именем, в нашем случае это eth0, так как виртуализацию этого ус-тройства мы и производим:

В приведенном выше протоколе обратите внимание на то, что виртуальный интерфейс eth0 даже после вклю-чения командой ip link set up не имеет канального адреса (MAC). Даже присвоение ему IP-адреса ничего не меняет:

# ifdown eth0

1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:89:80:c2 brd ff:ff:ff:ff:ff:ff3: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0

eth0 device: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)eth0 configuration: eth-id-00:0c:29:89:80:c2

# ip link sh

1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: hweth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:89:80:c2 brd ff:ff:ff:ff:ff:ff3: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0

# ip link set dev eth0 name hweth0# ip link sh

# ip link set dev hweth0 up# ifconfig hweth0

hweth0 Link encap:Ethernet HWaddr 00:0C:29:89:80:C2 inet6 addr: fe80::20c:29ff:fe89:80c2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15 errors:0 dropped:0 overruns:0 frame:0 TX packets:31 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2629 (2.5 Kb) TX bytes:3211 (3.1 Kb) Interrupt:177 Base address:0x1400

# brctl addbr eth0# brctl show

bridge name bridge id STP enabled interfaceseth0 8000.000000000000 no

# ip link set dev eth0 up# ip link sh

1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: hweth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:89:80:c2 brd ff:ff:ff:ff:ff:ff3: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.04: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff

# ip addr add 192.168.0.111/32 dev eth0

Page 16: 043 Системный Администратор 06 2006

14

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

И это объяснимо, так как виртуальный интерфейс пока не скоммутирован ни с одним реальным физическим ин-терфейсом, то есть не подключен ни к одной сети. Прове-рим это:

Как видите, трафик не идет. Точно такая же картина и при попытке «достучаться» до адреса 192.168.0.111 с дру-гих хостов сети. Теперь соединим eth0 с физическим ин-терфейсом:

Разберем описанное в протоколе. Во-первых, в точке, выделенной ремаркой, произошел автоматический перевод физического интерфейса в режим прослушивания. Эмуля-тор это «поймал» и выдал запрос оператору (см. рис. 2).

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

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

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

Как видите, все работает. Собственно, другого и не сто-ило бы ожидать, поскольку уже было сказано, что на подоб-ной технологии давно и устойчиво работают такие способы виртуализации серверов, как UML, XEN и даже VMWare.

Мост, объединяющий виртуальные устройстваНо наиболее интересные способы использования сетевых мостов как основы виртуализации получаются, если в них включать псевдоустройства, которые сами являются вир-

server:~ # ping -c 1 192.168.0.111

PING 192.168.0.111 (192.168.0.111) 56(84) bytes of data.64 bytes from 192.168.0.111: icmp_seq=1 ttl=64 time=0.498 ms

--- 192.168.0.111 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 0.498/0.498/0.498/0.000 ms

# ip addr del 192.168.0.111/32 dev eth0# ifconfig eth0

eth0 Link encap:Ethernet HWaddr 00:0C:29:89:80:C2 inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:41 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:860 (860.0 b) TX bytes:3502 (3.4 Kb)

# brctl show

bridge name bridge id STP enabled interfaceseth0 8000.000000000000 no

# brctl addif eth0 hweth0// здесь происходит автоматический перевод hweth0// в режим прослушивания# ip link sh

1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:002: hweth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:89:80:c2 brd ff:ff:ff:ff:ff:ff3: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.04: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue link/ether 00:0c:29:89:80:c2 brd ff:ff:ff:ff:ff:ff

# brctl show

bridge name bridge id STP enabled interfaceseth0 8000.000c298980c2 no hweth0

# ping -c 1 192.168.0.1

PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=29.9 ms

--- 192.168.0.1 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 29.959/29.959/29.959/0.000 ms

# brctl show

Internet Systems Consortium DHCP Client V3.0.3Copyright 2004-2005 Internet Systems Consortium.All rights reserved.For info, please visit http://www.isc.org/products/DHCP

Listening on LPF/eth0/00:0c:29:89:80:c2Sending on LPF/eth0/00:0c:29:89:80:c2Sending on Socket/fallbackDHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5DHCPOFFER from 192.168.0.1DHCPREQUEST on eth0 to 255.255.255.255 port 67DHCPACK from 192.168.0.1bound to 192.168.0.178 -- renewal in 1429 seconds.

# ifconfig eth0

eth0 Link encap:Ethernet HWaddr 00:0C:29:89:80:C2 inet addr:192.168.0.178 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:25 errors:0 dropped:0 overruns:0 frame:0 TX packets:56 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2651 (2.5 Kb) TX bytes:5370 (5.2 Kb)

# ifconfig eth0

eth0 Link encap:Ethernet HWaddr 00:00:00:00:00:00 inet addr:192.168.0.111 Bcast:0.0.0.0 Mask:255.255.255.255 inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:17 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:1536 (1.5 Kb)

# ip route add 192.168.0.0/24 dev eth0# ping -c 1 192.168.0.1

PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.From 192.168.0.111: icmp_seq=1 Destination Host Unreachable

--- 192.168.0.1 ping statistics ---1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 1ms

Page 17: 043 Системный Администратор 06 2006

15№6, июнь 2006

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

туальными. Например, виртуальные устройства, создава-емые в качестве туннельных. Но ведь самое главное пре-имущество сетевого моста в том, что он позволяет рабо-тать с включенными в него интерфейсами на уровне L2 модели ISO OSI. Поэтому наиболее уместным кандидатом на такую интеграцию можно считать виртуальный интер-фейс гостевого сервера. Итак, рассмотрим, как можно ма-нипулировать сетевыми подключениями вложенного серве-ра UML (user mode linux), подключенного к специально со-зданным сетевым мостам. Этот пример, к сожалению, не-доступен на openSUSE Linux 10.1 из-за прекращения под-держки UML в указанной версии. Утилиты для настройки специальных виртуальных устройств tun/tap можно найти только в версии 10.0 этого дистрибутива. И хотя альтерна-тивный вариант виртуализации Xen, который работает с се-тью точно так же, присутствует и там и там, мы будем де-монстрировать все приемы на UML, поскольку эта техно-логия более «прозрачна» для анализа.

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

Внутри хостовой, той, которая служит основой, машины создан ряд сетевых мостов по схеме, описанной выше:

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

И через него легко идет реальный трафик:

После запуска виртуальной машины в системе созда-ются два псевдоустройства tap0 и tap1. Эти устройства пе-редают трафик, который на них маршрутизируется, об-работчику из пользовательского пространства, в данном случае виртуальной машине UML. Их создание произво-дится командой «tunctl» непосредственно перед запуском UML, которому названия полученных устройств переда-

ются в командной строке. И ОС, запущенная внутри вир-туальной машины (в случае UML, сама модифицирован-ная ОС и является такой виртуальной машиной) использу-ет эти псевдоустройства в качестве эмулятора аппаратных сетевых интерфейсов. На стороне хостовой машины уст-ройства tun/tap подключаются внутрь сетевых мостов, ес-ли предполагается разрешить на них работу на уровне L2. Мы так и поступим:

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

Этот адрес случайным образом был установлен для tap0 при его создании. В процессе дальнейшей работы данный MAC более нигде не будет фигурировать, так как устройс-тво tun/tap представляет собой туннель, в котором реаль-ным является лишь пользовательский конец, находящийся внутри виртуальной машины UML. И если внутри UML «под-нять» интерфейс eth0, который будет привязан к виртуаль-ному устройству tap0, с некоторым адресом, то внутри вир-туальной сети появится новый хост с указанным адресом:

Рисунок 3. Тестовая система с виртуальными интерфейсами и сетями

# ifconfig eth0

bridge name bridge id STP enabled interfaceseth0 8000.000479661b70 no hweth3 hweth5eth1 8000.000000000000 no

server:~ # ifconfig eth1

eth1 Link encap:Ethernet HWaddr 00:00:00:00:00:00 inet addr:192.168.254.1 Bcast:192.168.254.255 Mask:255.255.255.0 inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:28 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:2166 (2.1 Kb)

server:~ # ping -c 1 192.168.254.1

PING 192.168.254.1 (192.168.254.1) 56(84) bytes of data.64 bytes from 192.168.254.1: icmp_seq=1 ttl=64 time=0.049 ms

--- 192.168.254.1 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 0.049/0.049/0.049/0.000 ms

server:~ # brctl show

bridge name bridge id STP enabled interfaceseth0 8000.000479661b70 no hweth3 hweth5 tap1eth1 8000.2e48adefd363 no tap0

server:~ # ifconfig eth1

eth1 Link encap:Ethernet HWaddr 2E:48:AD:EF:D3:63 inet addr:192.168.254.1 Bcast:192.168.254.255 Mask:255.255.255.0 inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:7 errors:0 dropped:0 overruns:0 frame:0 TX packets:44 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:372 (372.0 b) TX bytes:3628 (3.5 Kb)

server:~ # ifconfig tap0

tap0 Link encap:Ethernet HWaddr 2E:48:AD:EF:D3:63 inet6 addr: fe80::2c48:adff:feef:d363/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:13 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:560 (560.0 b) TX bytes:548 (548.0 b)

Page 18: 043 Системный Администратор 06 2006

16

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

Все это в точности совпадает с настройками интерфей-са eth0 в UML:

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

Например, им всем через внутреннюю сеть «раздает-ся» рабочий дистрибутив:

Эта связь может стать особенно важной, если сам сер-вер не будет иметь иного способа подключиться к госте-вой машине. Спросите, как это может быть? Очень прос-то! Для этого рассмотрим второй виртуальный интерфейс на рис. 3, который подключает и сервер, и его гостевую ОС к локальной сети. Для этого используется мост eth0:

Псевдоустройство tap1 точно так же, как и tap0, безад-ресное, а вот сам мост имеет адрес:

Внутри UML интерфейс, соответствующий tap1, настро-ен для работы в локальной сети:

При попытке «пропинговать» адрес UML получаем от-веты:

Может, это вызвано неким локальным феноменом? Про-верим видимость адреса UML с еще двух компьютеров в се-ти. После отправки ICMP-запросов внутри arp-хеша появи-лись новые записи:

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

Все! Теперь тот самый случай – никакая сеть, кроме вир-туальной, хостовому серверу не доступна:

А вот с других хостов сети «пинги» проходят вполне успешно. Адрес внутреннего виртуального UML-сервера присутствует в локальной сети и нормально работает. Ес-ли к данному мосту подключить следующую виртуальную систему с помощью соответствующего tun/tap устройства, на пользовательской стороне которого поднят иной адрес, то и он станет виден со стороны сети, подключенной к фи-зическому интерфейсу сетевого моста. И так далее.

eth0 Link encap:Ethernet HWaddr FE:FD:C0:A8:01:00 inet addr:192.168.254.2 Bcast:192.168.254.255 Mask:255.255.255.0 inet6 addr: fe80::fcfd:c0ff:fea8:100/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:103 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:18261 (17.8 Kb) TX bytes:518 (518.0 b) Interrupt:5

server:~ # showmount -e

Export list for server:/srv/susedvd/SU1000_001 192.168.254.0/255.255.255.0,localhost

server:~ # brctl show

bridge name bridge id STP enabled interfaceseth0 8000.000479661b70 no hweth3 hweth5 tap1eth1 8000.2e48adefd363 no tap0

server:~ # ifconfuigeth0

eth0 Link encap:Ethernet HWaddr 00:04:79:66:1B:70 inet addr:192.168.0.9 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:14968 errors:0 dropped:0 overruns:0 frame:0 TX packets:499 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:792910 (774.3 Kb) TX bytes:77724 (75.9 Kb)

uml:~ # ifconfig eth1

eth1 Link encap:Ethernet HWaddr FE:FD:C0:A8:01:01 inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::fcfd:c0ff:fea8:101/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:92240 errors:0 dropped:0 overruns:0 frame:0 TX packets:314 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4576001 (4.3 Mb) TX bytes:13468 (13.1 Kb) Interrupt:5

server:~ # ping -c 1 192.168.0.2

PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=7.14 ms

--- 192.168.0.2 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 7.142/7.142/7.142/0.000 msserver:~ # arp -nAddress HWtype HWaddress Flags Mask Iface192.168.0.2 ether FE:FD:C0:A8:01:01 C eth0192.168.254.2 ether FE:FD:C0:A8:01:00 C eth1

server:~ # arp -n

Address HWtype HWaddress Flags Mask Iface192.168.0.2 ether FE:FD:C0:A8:01:01 C eth0192.168.0.10 ether 00:05:5D:E7:86:39 C eth0192.168.0.11 ether 00:05:5D:74:DD:5D C eth0

server:~ # ip addr sh dev eth0

7: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue link/ether 00:04:79:66:1b:70 brd ff:ff:ff:ff:ff:ff inet 192.168.0.9/24 brd 192.168.0.255 scope global eth0 inet6 fe80::200:ff:fe00:0/64 scope link valid_lft forever preferred_lft forever

server:~ # ip addr del 192.168.0.9/24 dev eth0server:~ # ip route sh

10.0.0.0/24 dev eth2 proto kernel scope link src 10.0.0.1 192.168.254.0/24 dev eth1 proto kernel scope link src 192.168.254.1 127.0.0.0/8 dev lo scope link

server:~ # ping -c 1 192.168.0.2

connect: Network is unreachable

server:~ # ping -c 1 192.168.254.2

PING 192.168.254.2 (192.168.254.2) 56(84) bytes of data.64 bytes from 192.168.254.2: icmp_seq=1 ttl=64 time=0.125 ms

--- 192.168.254.2 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 0.125/0.125/0.125/0.000 msserver:~ # arp -nAddress HWtype HWaddress Flags Mask Iface192.168.254.2 ether FE:FD:C0:A8:01:00 C eth1

uml:~ # ifconfig eth0

Page 19: 043 Системный Администратор 06 2006

17№6, июнь 2006

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

Получился безадресный сетевой мост, который работает как arp-прокси и транслирует трафик с виртуальных хостов. В чем его ценность? Такая схема позволяет защитить хос-товую ОС от враждебного трафика сети, если вместо при-ватной сети используется, например Интернет. Еще один распространенный случай использования, когда безадрес-ный хостер служит платформой для запуска виртуальных гостевых ОС, каждой со своим собственным адресом. Ну и, наконец, ничего не мешает применять на таком несущем сетевом мосте собственную сетевую разметку, не маршру-тизируемую общим порядком, создавая скрытую служеб-ную сеть. Есть, правда, и тут некоторые «подводные кам-ни». Дело в том, что процедура взаимодействия сетевых узлов на уровне L2 является слабо защищенной. И в неко-торых сетях используются самодельные службы и другие нестандартные настройки, контролирующие канальное вза-имодействие. И хотя описанный выше прием с безадрес-ным мостом прекрасно работает (не говоря уже, что такой классический способ настройки моста описан в докумен-тации), но бывали случаи, когда такая настройка действо-вала как DoS-атака. Точно так же стоит очень вниматель-но отнестись к множеству физических интерфейсов, объ-единенных в мост, – их неверное подключение может со-здать неконтролируемые пути доступа или утечки трафи-ка и тоже стать источником проблем L2.

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

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

Ссылки:1. Сайт проект Open SUSE – http://en.opensuse.org/Welcome_to_

openSUSE.org и область загрузки дистрибутива openSUSE 10.0 – http://ftp.opensuse.org/pub/opensuse/distribution/SL-10.0-OSS.

2. Проект альтернативных сетевых скриптов – http://etcnet.org.3. Страница wiki, на которую переадресует бывший «домаш-

ний» сайт проекта IEEE 802.1d ethernet bridging (http://bridge.sourceforge.net) – http://linux-net.osdl.org/index.php/Bridge.

4. Andrew S. Tanenbaum, Jorrit N. Herden, and Herbert Bos, Vrije Universiteit, Amsterdam, May 2006, «Can We Make Operating System Reliable and Secure?» – http://www.computer.org/portal/site/computer/menuitem.5d61c1d591162e4b0ef1bd108bcd45f3/index.jsp?&pName=computer_level1_article&.

5. User Mode Linux. Set up the network – http://user-mode-linux.sourceforge.net/networking.html.

6. openSUSE. Xen and Virtual Network – http://en.opensuse.org/Xen3_and_a_Virtual_Network.

7. Закляков П. Разводной мост на Linux (bridging firewalls). – Жур-нал «Системный администратор», №4, 2003 г. – 42-55 с. – http://www.samag.ru/cgi-bin/go.pl?q=articles;n=04.2003;a=07.

Page 20: 043 Системный Администратор 06 2006

18

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

Видел я этот сендмайл – конфиги для конфигов, чтобы создать конфиги!

Цитата с http://forum.oszone.net

Как работает Sendmail? Полезные подробностиЧасть 2: Вопросы конфигурации

Одна из самых сильных сторон Sendmail – функциональная мощь этой программы. Но вот только запрятана она порой в дальних уголках конфигурационных файлов.

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

Page 21: 043 Системный Администратор 06 2006

19№6, июнь 2006

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

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

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

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

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

Классы предназначены для описа-ния имён, объединённых одним при-знаком. Сразу после буквы C следует односимвольное или многосимвольное (в фигурных скобках) имя класса.

Нап р и м е р, к л ас с з ап р е щё н -ных для использования в доменном имени символов определяется как «CB! % @ : ^».

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

DZ – этот макрос задаёт версию конфигурации Sendmail, например: DZ8.13.4.

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

к файлу псевдонимов (см. ниже). O MaxMessageSize – максималь-

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

O HoldExpensive – вы можете объявить (с помощью флага «e» в M-строке) агента доставки как «до-

Макрос Значение

$a Содержимое поля Date:

$f Адрес отправителя

$i Идентификатор сообщения в очереди

$h Полное доменное имя хоста получателя

$m Необработанный адрес получателя

$u Имя пользователя из адреса получателя

$w Имя данного хоста

$x Полное имя отправителя

$z Домашний каталог получателя

Код Описание

C Классы

D Макросы

F Файлы с классами

H Поля заголовка

K Базы данных

M Почтовые агенты

O Опции Sendmail

P Приоритеты обработки

R Наборы правил для адресов

S Группы наборов правил

F-строки заносят в определённый класс содержимое указанного фай-ла. Строки типа K задают базы дан-ных, которые в дальнейшем могут использоваться в правилах преобра-зования.

Например, так подключается ба-за mailertable:

Про остальные типы строк у нас будет возможность поговорить чуть позже. Рассмотрим некоторые секции файла sendmail.cf:

Local infoЗдесь определяются общие парамет-ры, влияющие на работу MTA: Cw – класс «w» описывает до-

мены, для которых будет выпол-няться обработка почты. Обычно присутствуют строки Cwlocalhost и Cwdomain.ru (где domain.ru – до-менное имя нашего сервера). Если для указания хостов используется файл local-host-names, он подклю-чается следующей строкой:

Здесь параметр -o говорит о том, что не нужно выдавать сооб-щение об ошибке, если указан-ный файл отсутствует. Имя фай-ла – используемое по умолча-нию, но в принципе может быть произвольным. В старых верси-ях Sendmail использовался файл /etc/sendmail.cw.

DS – имя «умного» (smart) хоста, или почтового релея, который бу-дет использоваться для пересыл-ки почты. Если Smart-host указан, то вся исходящая почта будет на-правляться на него, а он уже зай-мётся определением маршрутов от-дельных сообщений и их дальней-шей отправкой. Подробнее об этом режиме работы мы поговорим чуть позже.

CO @ % ! – символы, которые за-прещены для использования в име-нах пользователей, поскольку яв-ляются разделителями «именной» и доменной частей адреса.

DnMAILER-DAEMON – так наш Sendmail будет представляться в сообщениях об ошибках.

Таблица 1. Коды строк sendmail.cf

Таблица 2. Предопределённые макросы

Kmailertable hash ↵ -o /etc/mail/mailertable

Fw-o /etc/mail/local-host-names

Page 22: 043 Системный Администратор 06 2006

20

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

рогой» (expensive), и в этом случае Sendmail не будет пред-принимать попыток отправить письмо через такого агента сразу же после получения, а будет просто оставлять его в очереди. Эта опция может быть весьма полезна в случае коммутируемого соединения, когда осуществление дозво-на до сервера провайдера при получении каждого пись-ма может оказаться крайне неэффективным. Вместо это-го разумнее дозваниваться, скажем, раз в час, отправляя всё накопленное за это время («оптом – дешевле»).

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

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

O QueueFileMode, O TempFileMode – права доступа, ус-танавливаемые на вновь создаваемые файлы очереди и временные файлы соответственно. По умолчанию – 0600, но в некоторых экзотических (и весьма нежела-тельных с точки зрения безопасности) случаях может потребоваться этот параметр изменить.

O MaxDaemonChildren – максимальное количество од-новременно работающих процессов Sendmail. Позволя-ет более эффективно противостоять DoS-атакам, не до-пуская чрезмерной перегрузки сервера.

O DaemonPortOptions – параметры прослушиваемых портов и интерфейсов, например:

O SmtpGreetingMessage – баннер приветствия. По умол-чанию имеет вид «$j Sendmail $v/$Z; $b», где $j = $w – доменное имя хоста, $v – версия Sendmail, $Z – версия конфигурации, $b – текущая дата. В процессе работы после имени хоста (точнее, на второе место) выводит-ся также поддерживаемый протокол:

O DoubleBounceAddress – указывает адрес, на который следует отправлять уведомления об ошибке доставки уведомления об ошибке. Другими словами, если с адре-са [email protected] пришло сообщение для несуществующе-го пользователя, то Sendmail отошлёт отправителю уве-домление «User unknown». Однако если [email protected] яв-ляется фальшивым, то это уведомление также вернёт-ся с ошибкой. Чтобы разорвать порочный круг, вместо попыток и дальше уведомить несуществующего отпра-вителя, такое сообщение доставляется на указанный ад-рес. По умолчанию крайним оказывается postmaster.

O MaxRecipientsPerMessage – ограничивает число по-лучателей, которые могут быть указаны в заголовке од-ного сообщения. Наивная попытка бороться со спамом. Хотя и помогает несколько снизить нагрузку на сервер и усложнить подбор адресов.

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

Queue Group DefinitionsЭта секция отвечает за параметры работы почтовой очере-ди. Учитывая большое влияние очереди на производитель-ность сервера, мы подробно рассмотрим связанные с ней вопросы в следующей части.

REWRITING RULESПравила преобразования адресов. Sendmail в процессе об-работки сообщения разбирает имеющиеся в нём адреса от-правителя и получателей, выполняя по мере необходимости ряд преобразований. Каждый набор правил начинается ди-рективой Sname[=n], где n – необязательный номер набора, name – его кратное имя. Некоторые номера (0, 3, 4) предна-значены для строго определённых целей. Другие могут за-даваться произвольно (например, SParser1) и служат в ос-новном для дополнения основных наборов правил.

В процессе обработки наборы правил применяют-ся в определённом порядке (см. рис. 1). Любой адрес в первую очередь проходит через набор 3, который от-вечает за канонизацию, т.е. адрес приводится к виду <имя_пользователя>@<доменное_имя>. Затем набор 0 оп-ределяет, какому почтовому агенту это сообщение должно быть передано. От этого зависят конкретные имена наборов правил, которые будут подставлены вместо S (обработка адреса отправителя) и R (обработка адреса получателя) – они определяются в M-строке соответствующего агента. На последнем этапе адрес обрабатывается 4-м набором, который выполняет финальные преобразования.

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

Здесь <шаблоны> задают некоторый формат, на со-ответствие которому проверяется входящая информация. В таблице 3 перечислены значения основных специальных символов. Справа (отделяется от левой части символами та-буляции) задаётся <преобразование> – описание того, что нужно сделать с исходными данными, если они соответству-ют шаблону в левой части. В таблице 4 представлены неко-торые операторы. Очень напоминает регулярные выражения, не правда ли? Например, следу-ющее правило меняет адрес вида domain!user на user@domain при ус-ловии, что часть «user» содержит хотя бы один символ:

serg$ sendmail -bs

220 domain.ru ESMTP Sendmail 8.13.4/8.13.4; Tue, 25 Apr 2006 13:24:11 +0400 (MSD)

O DaemonPortOptions=Port=smtp,Addr=127.0.0.1,Name=MTA

R<шаблоны> <преобразование> <комментарий>

Шаблон Значение

$* Любое количество символов

$+ Один и больше символов

$- Ровно один символ

$@ Ни одного символа

$=<знач> Фрагмент равен значению <знач>

$~<знач> Фрагмент не равен <знач>

Таблица 3. Значения основных специальных символов

Page 23: 043 Системный Администратор 06 2006

21№6, июнь 2006

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

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

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

Тестирование правилКак видите, синтаксис правил обработки довольно сложен (по крайней мере, читать их очень неудобно). Чтобы убе-диться в правильности работы, в Sendmail предусмотрен специальный режим тестирования:

В данном примере мы прогоняем адрес admin@my (пред-полагая, что полное имя нашего домена – my.domain.ru) че-рез правила 3 и 0. В первом столбце указываются имена наборов правил, во втором – тип данных (вход или выход), и после двоеточия – обрабатываемая информация.

Как видите, сначала адрес канонизируется (краткое имя домена дополняется до полного; обратите внима-ние на завершающую точку). Затем Sendmail анализиру-ет полученный адрес (определяется, что он является ло-кальным).

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

Здесь показана канонизация адреса, заданного в фор-мате UUCP с детализацией 5-го уровня (21 – категория от-ладки, отвечающая за трассировку правил обработки ад-ресов). Выводится информация не только о том, через ка-кие наборы правил проходит адрес, но и какие действия выполняются.

Для выхода из режима отладки используйте коман-ду «/quit». Полный список доступных команд можно уви-деть, введя «?».

Знакомьтесь: m4Естественно, долго мириться с произволом формата sendmail.cf мало кто хотел, поэтому со временем задача создания этого файла была возложена на макроязык m4. Этот язык является универсальным и пригоден для реше-ния достаточно широкого круга задач, прежде всего свя-занных с обработкой текста. В частности, он использует-ся в Autoconf. Однако его использование для конфигура-ции Sendmail является, пожалуй, наиболее известным при-менением.

Эпиграф к статье как нельзя лучше отражает поло-жение дел с настройками Sendmail. Сначала вы создаёте конфигурационный файл в формате m4 (так называемый «master config», или mc-файл). Затем макропроцессор m4, руководствуясь этим файлом, генерирует cf-файл из вхо-дящих в поставку Sendmail шаблонов (макросов). Схема-тически этот процесс изображён на рис. 2.

Фактически, m4 собирает воедино элементы шабло-нов согласно опциям, имеющимся в mc-файле. Шаблоны

Рисунок 1. Последовательность применения наборов правил

Оператор Значение

$<n>Ссылка на фрагмент данных, соответствующих шаблону. <n> – порядковый номер шаблона

$: Применить правило один раз

$@ Применить правило и выйти из набора

$> Передать на обработку другому набору правил

$( . . .$) Поиск данных в базе

Таблица 4. Операторы преобразованияR$* ! $+ $2 @ $1

R< $+ > $* $: < $(mailertable $1 $) > $2 lookup

serg$ sendmail -bt

ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)Enter <ruleset> <address>> 3,0 admin@mycanonify input: admin @ myCanonify2 input: admin < @ my >Canonify2 returns: admin < @ my . domain . ru . >canonify returns: admin < @ my . domain . ru . >parse input: admin < @ my . domain . ru . >Parse0 input: admin < @ my . domain . ru . >Parse0 returns: admin < @ my . domain . ru . >ParseLocal input: admin < @ my . domain . ru . >ParseLocal returns: admin < @ my . domain . ru . >Parse1 input: admin < @ my . domain . ru . >Parse1 returns: $# local $: adminparse returns: $# local $: admin

serg$ sendmail -bt -d21.5

ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)Enter <ruleset> <address>> 3 my.uudom.ru!usercanonify input: my . uudom . ru ! userrewritten as: my . uudom . ru ! user < @ >rewritten as: my . uudom . ru ! userrewritten as: < my . uudom . ru ! user >rewritten as: my . uudom . ru ! userCanonify2 input: user < @ my . uudom . ru >rewrite: RHS $&{daemon_flags} => "(NULL)"rewritten as: $| user < @ my . uudom . ru >rewritten as: user < @ my . uudom . ru >Canonify2 returns: user < @ my . uudom . ru >rewritten as: user < @ my . uudom . ru >canonify returns: user < @ my . uudom . ru >

Рисунок 2. Схема работы макропроцессора

Page 24: 043 Системный Администратор 06 2006

22

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

сосредоточены в каталоге /usr/share/sendmail/cf/. В общих чертах синтаксис языка рассматривается во врезке «Вве-дение в m4».

Вносить изменения в шаблоны не рекомендуется (пос-кольку они будут перезаписываться при обновлении опе-рационной системы или почтового сервера). Все необходи-мые корректировки лучше делать в mc-файле. В послед-них версиях FreeBSD по умолчанию используется файл, со-ответствующий доменному имени вашего сервера. Напри-мер, domain.ru.mc. Если у вас такого файла нет, он будет автоматически создан при первом вызове команды make в каталоге /etc/mail, используя при этом как шаблон файл freebsd.mc (при его отсутствии последует ошибка).

Коротко состав mc-файла был рассмотрен в преды-дущей части статьи, сейчас чуть подробнее остановимся на наиболее важных опциях: include – встроенный макрос для подключения других

m4-файлов. define – ещё один встроенный макрос языка m4, позво-

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

Ниже представлен пример, позволяющий объявить smtp-агент как «дорогой»:

FEATURE – одна из самых востребованных директив. Аналогично рассмотренным в первой части статьи ди-рективам OSTYPE и DOMAIN, подключает соответству-ющий шаблон из каталога /usr/share/sendmail/cf/feature. Через FEATURE реализуется подключение баз дан-ных (см. в указанном каталоге файлы access_db.m4, use_cw_file.m4, virtusertable.m4 и т. д.), различные «уп-равляющие» директивы, такие как nocanonify (отклю-чение канонизации адреса, что может быть оправда-но на серверах, работающих исключительно в режиме транзитной передачи), nodns (не использовать DNS-за-просы для разрешения имён) и т. д. Если вам интерес-но, какой код та или иная «фича» добавляет в cf-файл, ознакомьтесь с содержимым шаблона в указанном вы-ше каталоге.

MASQUERADE_AS – если вы хотите, чтобы ваш поч-товый сервер отправлял почту от имени, отличаю-щегося от имени данного хоста, можно использо-вать этот макрос. Дополнительно опции (такие как MASQUERADE_EXCEPTION(`host.domain’), FEATURE (`masquerade_envelope’) и др.) позволяют не маскиро-вать указанные хосты, детализовать, какие именно ад-реса (в заголовке, в конверте или все) должны маски-роваться.

MAILER – подключает шаблон, отвечающий за работу того или иного почтового агента, из каталога cf/mailer. В этих шаблонах определяются имена и флаги соот-ветствующих утилит, наборы правил обработки адре-сов и M-строки конфигурационного файла. Директивы MAILER должны быть указаны после всех остальных, в конце mc-файла.

Введение в m4В далёком 1977 году, когда Sendmail ещё даже не планировался, Брайан Керниган (Brian Kernighan) и Деннис Ритчи (Dennis Ritchie), внёсшие немалый вклад в разви-тие UNIX-систем (достаточно упомянуть язык программирования C), разработали макропроцессор m4.

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

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

Язык m4 отличается довольно-таки своеобразным синтаксисом. Во-первых, в нём различаются открывающая и закры-вающая кавычки. По умолчанию использу-

ются символы «̀ » и «’», которые в случае не-обходимости можно переопределить с по-мощью встроенного макроса changequote. Во-вторых, в качестве признака конца строки используется макрос dnl. (То есть после него вы можете указывать любые комментарии). Для управления потоком служит макрос divert. В частности, divert(0) очищает буфер и направляет вывод в нуле-вой поток (всего существует 10 выходных потоков 0-9, которые на выходе объединя-ются в порядке их нумерации). Конструк-ции $n, где n – некоторое число, являются ссылками на параметры макроса, разме-щённые на соответствующих местах (на-пример, $1 ссылается на первый параметр указанного макроса). Рассмотрим простей-ший пример. Для начала создадим файл макроопределений:

Здесь мы определили три макроса,

причём в header и footer используются ссылки на первый аргумент, т.е. вызов этих макросов подразумевается с одним пара-метром. Этот файл мы подключим как шаб-лон. Далее файл с исходной информацией (обратите внимание на макро-вставки):

Результат работы будет таким:

Фактически, несколько последователь-ных файлов рассматриваются как единый поток. То есть того же эффекта можно до-биться, объединив макроопределения и ис-ходный текст в одном файле.

Чтобы подробнее познакомится с m4, просмотрите страницу справки man m4(1). Также много интересного можно найти в шаблонах Sendmail.

serg$ vi test.m4divert(0)dnldefine(`header', `<H1>$1</H1>')dnldefine(`footer', ↵ `<HR><SMALL>$1</SMALL>')dnldefine(`company', `Наша компания')dnl

serg$ vi test.inheader(`Страница компании')company рада приветствовать Вас ↵ на своём сайте!footer(`Заходите снова!')

serg$ m4 test.m4 test.in<H1>Страница компании</H1>Наша компания рада приветствовать ↵ Вас на своём сайте!<HR><SMALL>Заходите снова!</SMALL>

define(`LOCAL_MAILER_PATH', `/usr/local/bin/dspam')dnl

define(`confCON_EXPENSIVE', `True')define(`SMTP_MAILER_FLAGS', `e')

Page 25: 043 Системный Администратор 06 2006

23№6, июнь 2006

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

Кстати, поскольку mc-файл – это обычный файл в фор-мате m4, то он может содержать помимо макроопределений и собственно входные данные. При необходимости вы мо-жете указать нужные cf-строки прямо здесь (хорошим при-мером является mc-файл основного разработчика Sendmail Эрика Олмана – /usr/share/sendmail/cf/cf/knecht.mc).

Последовательность подключения различных шабло-нов можно найти в самом начале cf-файла – обратите вни-мание на строки, начинающиеся с «#### $Id:». Самым пер-вым подключается cfhead.m4, в котором определены ос-новные макросы.

Если быть точным, то в команде m4 подключается cf.m4 – вручную создание cf-файла обычно запускается такой ко-мандой:

Но одной из первых директив cf.m4 значится следую-щая:

Которая и выполняет подключение cfhead.m4. При жела-нии вы можете включить cf.m4 непосредственно в mc-файл (с помощью макроса include), чтобы не указывать его в ко-мандной строке. Но во FreeBSD это не требуется – make сделает всё, что нужно.

Файлы специального назначенияВ первой части мы бегло окинули взглядом содержимое ка-талога /etc/mail. Настало время познакомиться с располо-женными в нём конфигурационными файлами и их зада-чами более подробно.

Файл aliasesФайл псевдонимов служит для сопоставления адреса электронной почты с конкретным получателем. По умол-чанию, Sendmail работает с системными пользователями. То есть если у вас есть пользователь admin, то автомати-чески для него создаётся одноимённый почтовый ящик. Однако в ряде случаев необходимо (или просто удоб-но) перенаправить входящую почту, направленную на тот или иной адрес, другому пользователю. Например, рабо-та с почтой с правами root – не самая лучшая идея. А как же тогда читать системные сообщения, которые традици-онно отправляются на этот адрес? Ответ можно увидеть в файле aliases:

Формат достаточно прост: слева – почтовый адрес, на который направляется письмо, справа – адрес, куда письмо следует перенаправить.

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

Всё работает правильно благодаря тому, что подстанов-ка псевдонимов выполняется рекурсивно – после первой за-мены осуществляется ещё один «прогон» с новым адресом, и так далее, пока не будет выполнено ни одной подстановки. Кстати, чтобы не допустить бесконечной подстановки в слу-чае ошибки, когда образуется петля псевдонимов, полезно использовать опцию «O MaxAliasRecursion», которая задаёт максимальное число «проходов» по списку (в mc-файле за-даётся как define(`confMAX_ALIAS_RECURSION’)).

В правой части может находиться не только один пользователь. Перенаправление может выполняться для нескольких пользователей (они разделяются запяты-ми), на адрес в другом домене, на список адресов, ука-занный в файле (подключается с помощью конструкции «:include: <имя_файла>»).

Можно отдавать почту на обработку внешней програм-ме, используя операцию конвейера (в данном примере поч-та, пришедшая на адрес spam-me, отдаётся на обработ-ку спам-фильтру dspam для переобучения его байесово-го анализатора):

Помимо системного файла aliases пользователи могут создавать свои файлы перенаправлений – ~/.forward (точ-нее, будут проверяться файлы, указанные в директиве confFORWARD_PATH). Формат ещё проще – в них просто указываются адреса, на которые следует перенаправлять входящие сообщения. Нужно заметить, что когда Sendmail запускается с правами непривилегированного пользовате-ля, этот пользователь должен иметь права на чтение всех .forward-файлов в домашних каталогах.

Файл accessФормат этого файла, отвечающего за доступ к серверу с различных адресов, достаточно прост. Каждая строка со-стоит из разделённых пробелами или табуляцией объекта и действия. В качестве объекта могут выступать: IP-адрес; подсеть, заданная неполным IP-адресом; доменное имя (бу-дет относиться и ко всем поддоменам); адрес электронной почты. Действия: OK (всегда принимать почту, даже если другими директивами это запрещено), RELAY (разрешить транзит), REJECT (отклонить соединение), DISCARD (от-клонить без выдачи сообщения об ошибке). Можно указы-вать и конкретный код ответа (см. пример).

Комментарии, как обычно, предваряются символом «#». Например:

m4 /usr/share/sendmail/cf/m4/cf.m4 domain.ru.mc > ↵ domain.ru.cf

ifdef(`OSTYPE', `dnl',`include(_CF_DIR_`'m4/cfhead.m4)dnl

root: adminbin: rootbind: root

. . . пропущено . . .

uucp: rootabuse: rootsecurity: rootftp: root

spam-me: "| dspam --user me --class=spam ↵ --source=error"

# Блокируем конкретный IP-адрес1.2.3.4 REJECT

# Разрываем соединения из указанного доменаspammers.dom 550 Closed for you.

# Разрешаем транзит из локальной сети192.168 RELAY

Page 26: 043 Системный Администратор 06 2006

24

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

Обратите внимание, что «действия», которые разреша-ют принимать входящие соединения, указываются в cf-фай-ле в классе {Accept}:

В данном примере такое разрешение будет распростра-няться на действия «OK» и «RELAY».

Раньше access-файл широко использовался для борь-бы со спамом, когда в него заносились спамерские адре-са/сети/домены. В наши дни, естественно, это не представ-ляется разумным.

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

Файл relay-domainsЕщё один файл, разрешающий транзитную пересылку – relay-domains. Здесь, в отличие от access, указываются до-мены-получатели, для которых данный сервер может прини-мать сообщения и выполнять их дальнейшую пересылку. На-пример, если вы хотите, чтобы сервер backup.mail.domain.ru работал как резервный для mail.domain.ru, то создайте файл /etc/mail/relay-domains следующего содержания:

И подключите его следующей директивой:

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

Файл virtusertableЗдесь задаётся соответствие между виртуальными адреса-ми обслуживаемых доменов и именами реальных пользо-вателей. Необходимость в нём возникает тогда, когда не-сколько адресов в обслуживаемых доменах имеют одина-ковые имена пользователей (например, [email protected] и [email protected]).

В этом случае вы можете занести в virtusertable следу-ющие строки:

То есть входящая почта будет раскладываться по ящи-кам разных пользователей. Благодаря третьей строке вся почта в domain1.ru для любых пользователей, кроме опи-санных в virtusertable (в нашем примере это admin), бу-

дет отклоняться. Домен domain2.ru будет обслуживать-ся традиционно, то есть при получении письма, например, для [email protected], будет предприниматься попытка до-ставить его реальному пользователю user.

Файл genericstableЭтот файл решает обратную задачу: в условиях виртуаль-ного хостинга ставит в соответствие имени пользователя домен, с которого этот пользователь будет отправлять со-общения.

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

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

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

Пример 2Почтовый сервер в режиме шлюзаПредположим, у вас есть локальная сеть с размещённы-ми в ней двумя почтовыми серверами (inner1.domain.ru и inner2.domain.ru). Вы хотели бы обеспечить возможность полноценной работы этих серверов, но без непосредствен-ного подключения к Интернету. Настроим на машине, вы-полняющей роль шлюза, сервер Sendmail, задачей которо-го – взаимодействовать с внешними smtp-серверами и пе-ресылать полученные от них сообщения на серверы в ло-кальной сети.

1. В mailertable заносим строчки:

Теперь почта на указанные домены будет по smtp пере-сылаться на указанные хосты. Квадратные скобки требуют работать с хостом по его A-записи, а не по MX-записи в базе доменных имен (которая указывает на адрес шлюза).

2. Для отправки почты нужно разрешить пересылку со-общений с внутренних серверов (указав для них в файле access значение RELAY), а внутренние серверы настроить

define(`confCR_FILE', `/etc/mail/relay-domains')

mail.domain.ru

[email protected] [email protected] admin-dom2

@domain1.ru error:nouser User not found

define(`SMART_HOST', `1.2.3.4')

inner1.domain.ru smtp:[inner1.domain.ru]

inner2.domain.ru smtp:[inner2.domain.ru]

C{Accept}OK RELAY

# Разрешаем принимать на ящик [email protected]# любую почту[email protected] OK

Page 27: 043 Системный Администратор 06 2006

25№6, июнь 2006

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

на отправку сообщений вышестоящему серверу (в слу-чае с Sendmail это достигается использованием опции define(`SMART_HOST’, `<ip-адрес>’)).

3. Подключим соответствующие файлы в mc-файле:

После чего нужно пересобрать конфигурационный файл и перезапустить сервер:

Пример 3Виртуальный почтовый серверУ вас есть почтовый сервер с Sendmail. Требуется обес-печить на нём обслуживание двух доменов – вашего (domain.ru) и домена одного из клиентов (client.domain.ru). Предполагается, что принято следующее соглашение об именах пользователей: пользователи domain.ru имеют обычные имена (например, user), а для client.domain.ru ис-пользуются имена вида user-client. Вносим в конфигурацию следующие изменения:

1. В local-host-names заносим обслуживаемые домены:

2. В virtusertable записываем «шаблон» преобразова-ния имён:

Эта строка означает следующее – при получении пись-ма на любой адрес в домене client.domain.ru следует отдать его пользователю, имя которого соответствует указанному в адресе (%1) плюс суффикс «-client». Почта на другие до-мены будет обслуживаться обычным образом.

3. В domain.ru.mc включаем поддержку соответствую-щих файлов:

4. Всё пересобираем и перезапускаем сервер:

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

Продолжение следует…Как видите, Sendmail является очень гибкой программой, способной эффективно решать разнообразные задачи. Сложность формата cf-файла перекладывается на пле-чи макропроцессора m4, оставляя вам возможность за-ниматься настройкой на «верхнем» уровне, не вдава-ясь в детали синтаксиса. Впрочем, при необходимости вы вполне можете вносить изменения и непосредствен-но в sendmail.cf. Но просто настроить сервер недостаточ-но, особенно если речь идёт о высокой нагрузке. Поэтому в следующий раз мы поговорим о вопросах сопровожде-ния сервера и его оптимизации. Также коснёмся и вопро-сов безопасности.

FEATURE(mailertable, `hash -o /etc/mail/mailertable')dnlFEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')dnl

root# make all install restart

domain.ruclient.domain.ru

@client.domain.ru %1-client

FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')dnldefine(`confCW_FILE', `-o /etc/mail/local-host-names')dnl

root# make all install restart

DNS, DNS, DNS…Для нормальной работы любого MTA очень важную роль играет правильная настрой-ка DNS-сервера. Адрес почтового сер-вера, обслуживающего тот или иной до-мен, не обязан совпадать с самим домен-ным именем.

Например, вы можете посчитать це-лесообразным выделить для обслужива-ния почты, адресованной в domain.ru, от-дельный сервер mail.domain.ru. Как же удалённый smtp-сервер поймёт, куда сле-дует отправлять почту?

Для этого в DNS предусмотрен специ-альный тип записи – MX (Mail eXchanger).

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

Эти строки определяют, что почта для

domain и dom2 будет обслуживаться маши-ной mail.domain.ru. Если этот сервер ока-жется недоступен, почта должна будет на-правляться на backup.top.ru. Приоритет ис-пользования MX-записей задаётся числом перед именем хоста – чем это число мень-ше, тем выше приоритет (т.е. сначала бу-дет предприниматься попытка доставить почту на этот хост).

Впрочем, протоколом SMTP предус-мотрено, что если для некоторого доме-на отсутствует MX-запись, то почту сле-дует направлять непосредственно на хост, определяемый по соответствующей A-записи.

domain IN MX 10 ↵ mail.domain.ru. IN MX 20 ↵ backup.top.ru.

dom2 IN MX 10 ↵ mail.domain.ru. IN MX 20 ↵ backup.top.ru.

> 3,0 [email protected] input: serg @ client . domain . ruCanonify2 input: serg < @ client . domain . ru >Canonify2 returns: serg < @ client . domain . ru . >canonify returns: serg < @ client . domain . ru . >parse input: serg < @ client . domain . ru . >Parse0 input: serg < @ client . domain . ru . >Parse0 returns: serg < @ client . domain . ru . >ParseLocal input: serg < @ client . domain . ru . >ParseLocal returns: serg < @ client . domain . ru . >Parse1 input: serg < @ client . domain . ru . >Recurse input: serg-clientcanonify input: serg-clientCanonify2 input: serg-clientCanonify2 returns: serg-clientcanonify returns: serg-clientparse input: serg-clientParse0 input: serg-clientParse0 returns: serg-clientParseLocal input: serg-clientParseLocal returns: serg-clientParse1 input: serg-clientParse1 returns: $# local $: serg-clientparse returns: $# local $: serg-clientRecurse returns: $# local $: serg-clientParse1 returns: $# local $: serg-clientparse returns: $# local $: serg-client

Page 28: 043 Системный Администратор 06 2006

26

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

Переключи драйвер NTFS в режим read-write

Captive – это первая полнофункциональная Open Source-реализация NTFS-драйвера. С помощью Captive вы можете монтировать Windows NT/2k/XP/2k3-разделы и записывать на них данные без опасения потерять их.

Антон Ананич

Page 29: 043 Системный Администратор 06 2006

27№6, июнь 2006

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

FUSE (Filesystem in USErspace) – это драйвер для Linux и FreeBSD, который позволяет непривилегирован-ным пользователям создавать их собственные драй-

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

FUSE может быть особенно полезной для разработ-ки драйверов виртуальных файловых систем (virtual file systems, VFS). Это файловые системы, которые не сериа-лизуют данные непосредственно, а всего лишь выступают прослойкой (abstraction layer) или оберткой (wrapper) над существующими файловыми системами или специальны-ми устройствами.

В нашем журнале уже была статья о FUSE [1]. С тех пор проект развился и сильно возмужал.

FUSE позволяет разрабатывать драйверы файловых систем не только на языке С. Так как эти драйверы вы-полняются в пользовательских процессах, то они могут быть реализованы практически на любом языке програм-мирования. Официально поддерживаются C, C++, Java, C#, Haskell, TCL, Python, Perl, Sh (UNIX shell script), Ocaml, Pliant и Ruby.

Существует несколько десятков файловых систем (на се-годня более 50) на базе FUSE. Рассказать о всех в рам-ках этой статьи просто невозможно. Поэтому я перечис-лю некоторые задачи, которые могут быть решены с по-мощью FUSE: шифрование и сжатие файлов «на лету»; SMB (монтирование при первом обращении, кэширова-

ние); FTP, SSh, WebDAV, Gmail и т. д.; монтирование содержимого архивов (rar, zip, tar, bzip2,

gzip и т. д.); монтирование специфических устройств (iPod, мобиль-

ники Siemens, Apple iPhoto DPAP и т. д.); монтирование NTFS в режиме read&write (полноценная

запись в отличие от той, что содержится в ядре по умол-чанию);

хранение файлов в реляционной БД.

FUSE работает на Linux 2.4, Linux 2.6 и FreeBSD [2]. На-чиная с версии 2.6.14-rc1 FUSE входит в ядро Linux. Изна-чально FUSE была частью проекта AFVS [3], но теперь яв-ляется отдельным проектом на SourceForge [4].

Как работает FUSE?Разработать драйвер файловой системы с использова-нием FUSE очень просто. В качестве доказательства со-здатели FUSE приводят на своем сайте пример драйвера файловой системы Hello world, написанный на языке С, ис-ходный код которого занимает меньше 100 строк. Этот ис-ходный код доступен по адресу: http://fuse.sourceforge.net/helloworld.html.

На рис. 1 показано, как происходит системный вызов (например, stat) в драйвере Hello world.

Драйвер и библиотека FUSE общаются между собой с помощью файлового дескриптора, получаемого при от-крытии /dev/fuse. Этот файл может быть открыт несколько раз. При этом для каждой монтируемой ФС генерируется свой дескриптор.

Сегодня вы узнаете, как можно монтировать разделы NTFS в режиме read+write.

Как работает Captive?Существует два FUSE-драйвера для NTFS: ntfsmount и сaptive. Первый из них использует тот же код, что и kernel-драйвер. По сути это один и тот же драйвер, который выпол-няется по-разному. Этот драйвер написан с нуля. В ходе его разработки проводилась большая работа по реверс-инжи-нирингу. Этот драйвер пока ещё не очень стабилен и пред-назначен в основном для чтения данных. Записывать он то-же может, но единственное, что можно сделать с помощью этого драйвера – это изменить содержимое существующе-го файла, оставляя прежним его размер. Это может быть полезно, если вы хотите использовать некий файл-контей-нер, лежащий на NTFS, например, PGP-диск или виртуаль-ный винчестер для VMWare. Но в этом случае лучше ис-пользовать вариант драйвера, выполняемый в режиме яд-ра, так как он работает гораздо быстрее.

Captive NTFS использует другой подход. Наподобие того, как это делается в Wine, captive подгружает в адрес-ное пространство позаимствованный из Windows драйвер ntfs.sys и использует его код для записи в NTFS. Это дает достаточно высокую гарантию сохранности данных. Ну так давайте же скорее установим его!

Установка и использованиеДля начала вам понадобится FUSE. Если вы приверже-нец FreeBSD, то вам повезло: fuse4freebsd уже есть в пор-тах. Достаточно установить пакеты sysutils/fusefs-kmod и sysutils/fusefs-libs.

Я пользуюсь Gentoo Linux и поэтому все, что будет ска-зано дальше в основном относится к этому дистрибутиву и ядру Linux. Итак, в Gentoo установка проходит так:

Для удобства можно добавить FUSE в автозагрузку:

Рисунок 1. Файловая система Hello world

emerge -av sys-fs/fusemodules-updatemodprobe fusechmod 666 /dev/fusе

Page 30: 043 Системный Администратор 06 2006

28

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

Неудобство этого подхода в том, что каждый раз, когда вы пересобираете ядро, вам необходимо будет пересоби-рать и sys-fs/fuse. Если вы используете ядро 2.6.14 или стар-ше, то вы можете просто включить поддержку FUSE пря-мо в ядре.

Следующий шаг – установка captive. Вы можете ском-пилировать captive из исходников или использовать го-товый rpm, скачав его со страницы проекта: http://www.jankratochvil.net/project/captive/#download. В портах Gentoo captive уже присутствует, так что установка не составля-ет труда.

Если вы используете Debian-based-дистрибутив, то вам придется конвертировать rpm в deb:

Если вы хотите скомпилировать captive из исходников, то это лучше всего сделать так:

Теперь остается переписать файлы ${WINDIR}/system32/ntoskrnl.exe и ${WINDIR}/system32/drivers/ntfs.sys в /var/lib/captive/. Я это сделал с помощью Samba. Если у вас нет доступа к установленной Windows NT/2000/XP/2003Server, то вам, пожалуй, придется качать Service Pack с сай-та Microsoft и извлекать эти файлы оттуда с помощью cabextract. WinXP SP2 доступен по адресу [5].

Вот и всё! Теперь надо не забыть отмонтировать NTFS-раздел:

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

Для удобства можно добавить в /etc/fstab запись, соот-ветствующую NTFS-разделу:

АрхитектураCaptive состоит из двух частей – это собственно сам драй-вер и утилита настройки captive-install-acquire (см. рис. 2). Эта утилита разработана под Gnome очень сильно и тянет за собой много зависимостей. А вот функционал у неё до-вольно скромный: она ищет на NTFS-разделах файлы ntfs.sys, fastfat.sys, ntoskrnl.exe и sdfs.sys и переписывает их в директорию /var/lib/captive. У меня она где-то нашла эти файлы с испанской (!) локалью. Если такие файлы найти не удается, то captive-install-acquire может скачать с сай-та www.microsoft.com service pack и взять их оттуда. И пос-леднее. Эта утилита добавляет в /ets/fstab записи об NTFS-разделах, но без опции --rw, и поэтому всё равно приходит-ся править руками.

К нашей удаче существует возможность установить только драйвер. В Gentoo это делается с помощью USE-фла-га -gtk, а если вы собираете пакет из исходников, то нужно задать опцию -enable-install-pkg=no для скрипта configure. Но даже в этом случае вам придется установить gnome-vfs, libonobo и orbit. Давайте разберемся, для чего это нужно (см. рис. 3).

При монтировании файловой системы FUSE подгружа-ет sandbox master – компонент captive, который постоянно находится в памяти. Sandbox master контролирует рабо-ту sandbox slave. Этот slave выполняется в отдельном про-цессе. В адресное пространство этого процесса подгру-жаются ntosknl.exe и ntfs.sys прямо, как в Wine. Этот про-цесс и называется sandbox – песочница. Внутри песочни-цы captive делает вызовы бинарного кода, предназначен-ного для выполнения в адресном пространстве несколь-ко иной структуры. Кроме того, этот код предназначен для выполнения в более богатом разными компонентами окру-жении. Конечно, этот код должен выполняться на нулевом кольце, а не на третьем. В силу сказанного ассемблерный код из ntoskrnl.exe и *.sys довольно часто приводит к ава-рийному завершению процесса. Segmentation, как говорит-ся, fault. В ходе поставленных мною экспериментов такое падение мне удавалось наблюдать до десяти раз за вре-мя распаковки архива с исходниками captive (2,9 Мб). Ког-да песочница ломается, sandbox master перезапускает пе-сочницу повторно и продолжает выполнение сначала не-удачной транзакции, поэтому для конечного пользовате-ля этот крах остается незамеченным и не приводит к по-тере данных.Рисунок 2. Установка captive с помощью captive-install-acquire

echo "fuse" >> /etc/modules.autoload.d/kernel-2.6

Symbol: FUSE_FS [=m]Prompt: Filesystem in Userspace support Defined at fs/Kconfig:465 Location: -> File systems

echo "sys-fs/captive ~x86" >> /etc/portage/package.keywordsecho "sys-fs/captive -gtk" >> /etc/portage/package.useemerge -av captive

alien captive-static-1.1.7-0.i386.rpmdpkg -i captive-static_1.1.7_1.i386.deb

./configure –enable-install-pkg=nomakemake install

umount /dev/hda1mount -t captive-ntfs /dev/hda1 /mnt/tmp/ -o -–rw

/dev/hda1 /mnt/captive captive-ntfs noauto,--rw 0 0

Page 31: 043 Системный Администратор 06 2006

29№6, июнь 2006

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

Рисунок 3. Принцип работы captive

Также мне хотелось бы отметить, что все компоненты captive реализованы на языке C. Это положительно вли-яет на производительность. IPC при управлении песоч-ницей реализован на основе CORBA (вот для чего нужны libonobo и orbit). А для чего же gnome-vfs? Если взглянуть в ChangeLog, то становится ясно, что изначально captive раз-рабатывался исключительно для gnome-vfs. Проект стар-товал в октябре 2002 года. В августе 2003 была добавлена поддержка LUFS, a в декабре 2005 LUFS была заменена на FUSE. Проекты gnome-vfs, fuse и lufs стартовали соответс-твенно в августе 1999, ноябре 2001 и августе 2002 годов.

Скорее всего разработчики думали, что captive не только никогда не войдет в официальное ядро, но и вообще за пре-делами Gnome использоваться не будет. Как мы увидим да-лее, возможность использования gnome-vfs вместо FUSE следует рассматривать всерьёз, если вы уделяете внима-ние быстродействию файловой системы, так как при ис-пользовании gnome-vfs приходится вместо трех переклю-чений в/из режим(а) ядра делать всего одно.

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

Оба этих теста я проделал на разделах NTFS со сжа-тием и без него и на reiserfs. Результат вы можете увидеть в таблице 1.

Признаться, результат оказался несколько неожидан-ным. Из таблицы видно, что производительность Captive оставляет желать лучшего. ReiserFS работает более чем в 150 раз быстрее. Таким образом, если у вас нет необходи-мости записывать на NTFS-раздел, то крайне целесообраз-ным будет использовать read-only-драйвер, поставляемый с ядром. Если вы хотите использовать VMWare hard drive, BestCrypt диск и т. п., то в этом случае опять же лучше бу-дет использовать драйвер из ядра.

Если вам жизненно необходимо создавать и удалять файлы, менять их размер, то у вас есть два варианта: Captive и VMWare. Captive вполне подойдет, если вам нуж-но отредактировать документ на NTFS-разделе или сбро-сить туда пару файлов. Если этот раздел расположен на USB 1.0, то вы можете даже не заметить разницы в скоро-сти. В случае когда вам необходимо писать на NTFS час-то и много, стоит рассмотреть возможность применения VMWare. Если виртуальная машина использует физичес-кий диск, то запись происходит с такой же скоростью, как и в Windows. Однако в отличие от Captive это коммерчес-кий продукт. Кроме того, на виртуальную машину нужно бу-дет поставить Windows NT/2k/XP/2k3, которые тоже не бес-

Рисунок 4. Captive API

# time cp /usr/portage/distfiles/captive-1.1.7.tar.gz /mnt/tmp/# time tar -xzf captive-1.1.7.tar.gz -C /mnt/tmp

NTFS compressed NTFS ReiserFS

Копирование 0 m 12.159 s 0 m 39.673 s 0 m 0.048 s

Распаковка 3 m 10.333 s 4 m 22.235 s 0 m 1.479 s

Таблица 1. Результаты замера производительности

платны. Кроме того, для установки вам придется пожертво-вать 256 Мб памяти и 2 Гб дискового пространства. К тому же VMWare для работы требуется X Server.

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

Ссылки:1. Яремчук С. Файловые системы пространства пользователей. –

Журнал «Системный администратор», №6, 2006 г. – 40-43 с. – http://www.samag.ru/cgi-bin/go.pl?q=articles;n=06.2005;a=06.

2. http://fuse4bsd.creo.hu.3. http://www.inf.bme.hu/~mszeredi/avfs.4. http://fuse.sourceforge.net.5. http://www.microsoft.com/downloads/details.aspx?FamilyID=

049c9dbe-3b8e-4f30-8245-9e368d3cdb5a.

Page 32: 043 Системный Администратор 06 2006

30

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

Специалисты системной под-держки, как правило, не обла-дают правами системного ад-

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

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

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

Унифицировать имя системного администратора, переименовывая учетную запись, например, из «Ад-министратор» в «Administrator».

По окончанию работы сценария формировать файл отчета.

Мультирежимность скриптаПоддержка нескольких режимов рабо-ты реализована с помощью парамет-ров запуска командной строки. Дого-воримся, что запуск сценария, изменя-ющего имя администратора на указан-ном компьютере, осуществляется с по-мощью параметра «-pc», для компью-теров, перечисленных в группе, храня-щейся в AD, – «-group», а для всех ком-пьютеров в домене – «-domain». При за-пуске скрипта во всех остальных слу-чаях будет выводиться справка.

Чтение аргументов осуществляется с помощью объекта Wscript.Arguments, их количество определяется с помо-щью команды Wscript.Arguments.Count. В зависимости от полученного аргу-

мента запускается тот или иной режим работы сценария (см. таблицу 1):

Вывод справкиЭтот режим, как и все остальные, ре-ализован с помощью инструкции Select… Case и представляет собой вы-вод текстового сообщения на экран:

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

Регулярная смена паролей локальных системных администраторов – необходимое мероприятие, обеспечивающие безопасность хранения данных в сети. Автоматизировав этот процесс, вы значительно снизит затраты на администрирование.

Иван Коробко

Set objArgs=Wscript.Arguments If Wscript.Arguments.Count=1 Then If strcomp(ucase(objArgs(0)), ↵ UCase("-Domain"))=0 Then mode=1 End If If strcomp(ucase(objArgs(0)), ↵ UCase("-Group"))=0 Then mode=2 End If If strcomp(ucase(objArgs(0)), ↵ UCase("-PC"))=0 Then mode=3 End If Else mode=0 End If

Select Case modeCase 0 txt="ТЕКСТ СПРАВКИ"WScript.Echo txt

Case 1

…End Select

Page 33: 043 Системный Администратор 06 2006

31№6, июнь 2006

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

Переименование учетных записейПоскольку речь идет о локальных учетных записях поль-зователя и группы, то использовать для этих целей прото-кол LDAP нельзя. Необходимо применять хорошо извест-ный еще со времен Windows NT 4 протокол WinNT. Все три оставшихся режима выполняют одну и ту же операцию: проверяют на правильность имя группы и пользователя, в случае ошибки переименовывают в правильное и зада-ют новый пароль. Как видно – это общий фрагмент, кото-рый рекомендуется внести в функцию, её входным пара-метром будет имя локального компьютера. Функция со-стоит из 3 частей: верификация и в случае необходимости изменение име-

ни пользователя; верификация и в случае необходимости изменение име-

ни группы; присвоение учетной записи «administrator» нового па-

роля.

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

Переименование группы осуществляется аналогич-ным способом. Полный текст сценария смотрите на сай-те журнала www.samag.ru, в разделе «Исходный код». За-мечание: для успешной работы скрипт должен быть запу-щен от имени администратора сети. Задание нового па-роля локального пользователя реализовано с помощью функции setpassword(), параметром которой является но-вый пароль:

Изменяем пароль на локальном компьютереРанее говорилось, что смена пароля локального системно-го администратора выполняется при запуске скрипта с ар-

гументом «-pc». При этом значение переменной mode – 3. При запуске в этом режиме необходимо задать два пара-метра: имя рабочей станции и новый пароль. Лучше все-го это сделать с помощью диалогового окна, вызываемо-го с помощью InputBox().

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

Изменяем пароль на группе компьютеровДля смены пароля на компьютерах, входящих в группу бе-зопасности, требуется создать группу в Active Directory и включить в нее учетные записи компьютеров, на которых необходимо сменить локальный пароль (см. рис. 1). Доступ к AD в данной ситуации можно осуществлять с помощью провайдеров LDAP и WINNT. Для простоты воспользуемся последним из них.

Запрашиваемые параметры скрипта в данном режиме – имя группы и новый пароль.

Чтобы получить доступ к AD, необходимо знать имя до-мена. Для протокола WINNT имя домена должно быть пред-ставлено в сокращенном варианте, например SPD. Полу-чить имя домена в сокращенном виде можно несколькими способами. Один из них – использование стандартной биб-лиотеки ADSystemInfo:

Таблица 1. Режимы работы сценария

Аргумент Значение переменной MODE Описание режима

– Mode=0 Вывод справки

-рс Mode=3 Изменение на локальном компьютере

-group Mode=2 Изменение у группы компьютеров

-domain Mode=1 Изменение на всех компьютерах домена

' Определение списка локальных пользователей ' на компьютере Set obj_user= getobject("WinNT://" & pcname) obj_user.filter = Array("user") For Each user in obj_user user_name= user_name ↵ +cstr(user.Name) Next

' Переименование русского (*)Администратор(*) ' в латинское

If StrComp (UCase(user_name), ↵ UCase("Администратор"))=0 ThenSet obj_user2= getobject("WinNT://" & ↵ pcname&"/Администратор,User")Set obj_user3= getobject("WinNT://" & pcname)Set q=obj_user3.movehere(obj_user2.adspath, ↵ "Administrator")Set obj_user2 = NothingSet obj_user3 = NothingEnd If

Set obj_user4= getobject("WinNT://" & ↵ pcname&"/Administrator,User")Call obj_user4.setpassword(PWD)Set obj_user4 = Nothing

Dim PWDPWD = "987654321"

Select Case mode

…Case 3

PWD=CStr(inputbox("Введите новый пароль ↵ локального администратора",,PWD))

PCNAME = "1230PC"PCNAME=CStr(inputbox("Введите имя рабочей станции",,PCNAME))

' вызов функции изменения имен и назначения ' нового пароля make pcname End Select

Dim PWDPWD = "987654321"Select Case mode

…Case 2

pwd=CStr(inputbox("Введите новый пароль ↵ локального администратора",,PWD))

Page 34: 043 Системный Администратор 06 2006

32

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

Изменяем пароль на всех компьютерах в доменеДля изменения пароля локального администратора на всех компьютерах домена необходимо определить его корот-кое имя:

Затем получить поочередно доступ ко всем компьюте-рам домена и последовательно вызывать функцию make с изменяющимся значением параметра:

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

те HTML и отображать его после завершения работы про-граммы.

Во время работы скрипта следует накапливать ин-формацию в переменной, затем обрабатывать ее с по-мощью функции, которая выводила бы членов группы «Administrators». Если такой группы нет, то делается соот-ветствующая пометка в файле. Отсутствие группы говорит о том, что компьютер недоступен (см. рис. 2): он выключен или на нем настроен firewall.

Запись данных файл осуществляется с помощью объ-екта FSO:

Когда сценарий завершит работу, отобразите с по-мощью созданной функции на экране созданный HTML-файл. Управление веб-страницами осуществляется с по-мощью объекта InternetExplorer.Application. Доступ к объ-екту из VBScript также осуществляется с помощью функ-ции CreateObject().

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

Надеюсь, что этот простой, но мощный скрипт поможет в вашей работе.

Set objSysInfo = CreateObject("ADSystemInfo")domain=cstr(objSysInfo.DomainShortName)

Case 1

… Set obj_comp = getobject("WinNT://" & domain) obj_comp.filter = Array("Computer") For Each Computer in obj_comp pcname=cstr(Computer.Name) make pcname Next Set obj_comp= Nothing…

Set FSO=CreateObject("Scripting.FileSystemObject") Set MyFile1 = fso.CreateTextFile("c:\"+report+".htm", ↵ True, TRUE)

MyFile1.WriteLine(data) MyFile1.Close

Path=c:\report.htm

set oIE=Wscript.CreateObject("InternetExplorer.Application")With oIE .Left=100 .Top=100 .Height=400 .Width=400 .MenuBar=0 .Toolbar=0 .Statusbar=0 .Resizable=1End WithoIE.Navigate PathoIE.Visible=1

Рисунок 1. Члены группы безопасности, обрабатываемые скриптом Рисунок 2. Пример файла отчета

GROUPNAME = "PC$_group"

GROUPNAME=CStr(inputbox("Введите имя группы, ↵ включая префикс",,GROUPNAME))

Set objSysInfo = CreateObject("ADSystemInfo") domain=cstr(objSysInfo.DomainShortName) Set obj_group= getobject("WinNT://" & ↵ domain &"/"&GROUPNAME) For Each pc in obj_group.members p=cstr(pc.name) pcname=Left(p,Len(p)-1) make pcname Next Set obj_group= Nothing

…End Select

Page 35: 043 Системный Администратор 06 2006

33№6, июнь 2006

bugtraq

Выполнение произвольного кода в Symantec Client Security /AntiVirusПрограмма: Symantec Client Security 3.x, Symantec AntiVirus Corporate Edition 10.x.Опасность: Критическая.Описание: Уязвимость существует из-за ошибки провер-ки границ данных. Удаленный пользователь может выпол-нить произвольный код на целевой системе с привилеги-ями SYSTEM.URL производителя: www.symantec.com.Решение: Установите исправление с сайта производите-ля.

Выполнение произвольного кода в Microsoft ExchangeПрограмма: Microsoft Exchange 2000, Microsoft Exchange 2003.Опасность: Критическая.Описание: Уязвимость существует из-за ошибки Microsoft Exchange Calendar в функционале EXCDO (Exchange Collaboration Data Objects) и CDOEX (Collaboration Data-Objects for Exchange) при обработке iCal- и vCal-свойств e-mail-сообщения. Удаленный пользователь может с помо-щью специально сформированного сообщения выполнить произвольный код на целевой системе.URL производителя: www.microsoft.com.Решение: Установите исправление с сайта производите-ля.

Переполнение буфера в NagiosПрограмма: Nagios 1.x, Nagios 2.x.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки при об-работке HTTP-заголовка «Content-Length» в некоторых CGI-приложениях. Удаленный пользователь может указать от-рицательное значения для заголовка «Content-Length», вы-звать переполнение буфера и выполнить произвольный код на целевой системе.URL производителя: www.nagios.org.Решение: Установите последнюю версию (2.3 или 1.4) с сай-та производителя. Выполнение произвольного кода

в Verisign i-NAv ActiveX-компонентеПрограмма: VeriSign i-Nav Plug-In.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки при обра-ботке входных данных в механизме InstallProduct в ActiveX компоненте VUpdater.Install. Удаленный пользователь мо-жет выполнить произвольные файлы, содержащиеся в .CAB-архиве.URL производителя: www.idnnow.com.Решение: Установите последнюю версию с сайта произ-водителя.

Составил Александр Антипов

Повреждение памяти в Sophos Anti-VirusПрограмма: Sophos PureMessage for UNIX 5.x, Sophos PureMessage for UNIX 4.x, Sophos MailMonitor for SMTP, Sophos MailMonitor for Notes/Domino, Sophos Anti-Virus Small Business Edition, Sophos Anti-Virus 5.x, Sophos Anti-Virus 4.x, Sophos Anti-Virus 3.x, Sophos PureMessage for Windows/Exchange 2.x, Sophos PureMessage Small Business Edition 2.x.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки при об-работке Microsoft Cabinet (.CAB)-файлов. Удаленный поль-зователь может с помощью специально сформированно-го .CAB-файла вызвать повреждение памяти и выполнить произвольный код на целевой системе.

Для успешной эксплуатации уязвимости должен быть включен контроль .CAB-файлов.URL производителя: www.sophos.com.Решение: Установите исправление с сайта производите-ля.

Переполнение буфера в wodSSHServerПрограмма: wodSSHServer 1.2.7 и 1.3.3 DEMO. Возможно, другие версии.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки проверки границ данных при обработке строки алгоритма для обме-на ключом, полученным от SSH-клиента. Удаленный поль-зователь может вызвать переполнение стека и выполнить произвольный код на целевой системе.URL производителя : www.weonlydo.com/index.asp? showform=SSHServer.Решение: В настоящее время способов устранения уязви-мости не существует.

Переполнение буфера в FreeSSHdПрограмма: FreeSSHd 1.0.9, возможно, другие версии.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки проверки границ данных при обработке строки алгоритма для обме-на ключом, полученным от SSH-клиента. Удаленный поль-зователь может вызвать переполнение стека и выполнить произвольный код на целевой системе.URL производителя: www.freesshd.com.Решение: В настоящее время способов устранения уязви-мости не существует.

Обход парольной аутентификации в RealVNCПрограмма: RealVNC 4.1.1, возможно, другие версии.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки при обра-ботке парольной VNC-аутентификации. Удаленный пользо-ватель может получить доступ к удаленной системе.URL производителя: www.realvnc.com.Решение: Установите последнюю версию с сайта произ-водителя.

Page 36: 043 Системный Администратор 06 2006

34

человек номера

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

Института философии РАН, в которых компактно, уютно, в соседстве с мно-гочисленной техникой располагается Общественный институт логики, ког-нитологии и развития личности. Из ок-на был виден Кремль. Алексей Смир-нов немного гордится этой панорамой и вместе с тем находит ее забавной. Уже потом, после беседы с ним, я поня-ла, почему руководитель Обществен-ного института и одновременно гене-ральный директор компании ALT Linux именно так воспринимает многие ве-щи. Легким мировосприятие Алексея Владимировича делает беспредельное чувство свободы. Это чувство, по-мое-му, ведет его по жизни. Да и разве мог бы несвободный человек стать одним из столпов свободного программного обеспечения в России?

Психология, логика, «Ямахи»…А начиналось все с математики. Ма-тематический факультет Московско-го государственного педагогического института им. Ленина ни к чему опре-деленному не привязывал. Наоборот, давал свободу. Алексей интересовал-ся логикой, что вполне понятно – близ-кая к основному образованию тема, да и отец, Владимир Александрович Смирнов, был виднейшим российским философом и логиком, принадлежал к блестящей плеяде выпускников фило-софского факультета Московского уни-верситета середины XX века. На пятом курсе свободный поиск привел Алексея Владимировича к тому, что его пригла-сили на работу в НИИ общей и педаго-гической психологии, где в должности младшего научного сотрудника лабо-ратории математического моделирова-ния психических процессов наш герой

занимался автоматическим распоз-наванием рукописных текстов. Между прочим, чтобы попасть в НИИ, Алек-сей должен был выполнить условие – освоить один из языков программиро-вания. О том, что это был первый шаг в сторону Linux, он, естественно, не до-гадывался. Шел 1979 год.

В 1984 году Смирнов перешел на работу в Вычислительный центр Ми-нистерства просвещения СССР. И ес-ли раньше Алексей Владимирович ос-вобождал тексты от скрытого в них смысла с помощью логики, лингвис-тики, математики и основ программи-рования, то теперь ему предстояло ос-вобождать советскую школу от жал-кого прозябания в бескомпьютерной среде. 1985-1987 годы – время массо-вого внедрения в школы информати-ки. Я помню, что именно тогда, во вто-рой половине 80-х, увидела первые в своей жизни компьютеры в учебном

Оппонент мистера Гейтса

Сообщество разработчиков свободных программ в России возникло во многом благодаря генеральному директору ALT Linux и его коллегам.

Page 37: 043 Системный Администратор 06 2006

35№6, июнь 2006

человек номера

центре моего подмосковного города, а в моем школьном дневнике появи-лась «Информатика». Ну и первая иг-ра в тетрис, как такое забудешь! И вот я сижу рядом с человеком, который разрабатывал программное обеспече-ние для японских «Ямах», которые пос-тавлялись в образовательные учреж-дения СССР, обучал школьников, пре-подавателей, и он мне рассказывает, как это было. Фантастика…

Более того, в это же время Алек-сей Владимирович со товарищи стали создателями чуть ли не первого после принятия Закона «О кооперации» ко-оператива «Сотрудничество» при СП «Диалог».

– Мы делали комплекты программ для «Ямах». Библиотеки выпуска-ли, программно-аппаратные комп-лексы, чтобы это можно было присо-единять к лабораторному школьному оборудованию и проводить экспери-менты. Тогда как раз вышли програм-мы и курсы А.Г. Кушнеренко, связан-ные с виртуальными мирами. Идея бы-ла такая – управление объектами, ко-торые смоделированы на компьюте-ре. Стали развивать мысль – давайте не будем проводить физический экс-перимент, а смоделируем его на ком-пьютере. Нам это очень не понрави-лось. Что такое физический экспери-мент? Существует некая теория, и я хо-чу убедиться, она соответствует тому, что есть на самом деле. Если модели-ровать реальность на компьютере, по-лучается, что я сравниваю математи-ческую модель с компьютерной. А за-чем? В качестве иллюстрации?

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

– Тогда можно кино по телевизору показать. Зачем компьютер? Не стоит его использовать в качестве киноус-тановки. Понятно, что ядерный взрыв, другие опасные эксперименты лучше так и показывать.

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

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

Диагноз ясенОт школьных проблем – к вузовским. Еще в бытность свою ведущим спе-циалистом того же кооператива «Со-трудничество» Алексей Владимиро-вич принял участие в создании учеб-ника по логике «Логика и клиническая диагностика», компьютерного практи-кума для студентов-медиков. Вдохно-вителем и руководителем этого проек-та был Феликс Трофимович Михайлов, российский философ и психолог-тео-ретик, доктор философских наук, про-фессор, действительный член РАО.

О Феликсе Трофимовиче необ-ходимо сказать немного подробнее. Без этого очерк об Алексее Смирнове будет неполным. Ведь человека фор-мируют не только семья, книги, обра-зование, но и встречи с такими удиви-тельными людьми. Феликс Михайлов – автор знаменитых трудов «За порогом сознания. Критический очерк фрейдиз-ма» (в соавторстве), «Загадка челове-ческого Я», «Общественное сознание и самосознание индивида». В лабора-тории теоретических проблем психоло-гии деятельности, созданной руково-дителем Института общей и педагоги-ческой психологии Василием Василь-евичем Давыдовым специально для Михайлова, работали многие ученые с громкими именами. А еще – знамени-тые участники эксперимента, слепоглу-хие выпускники Загорской школы-ин-терната. Один из них, доктор психоло-гических наук Александр Суворов, на-писал в своей статье «Двойная звезда» уже после смерти Феликса Трофимо-вича в феврале этого года: «Мы с рож-дения до смерти – органы друг друга, – настаивает Феликс Трофимович. И этот тезис Феликс Трофимович всё более глубоко и всесторонне обосновывал

в течение всей жизни. Создав, нако-нец, концепцию обращений. Обраще-ния – это тот механизм, который дела-ет каждого из нас органом жизнеде-ятельности человеческого рода и каж-дого его представителя. Обращения – это, во-первых, наше общение. Во-вто-рых, это способ нашего друг с другом действия, то, как мы друг с другом об-ращаемся. Хорошо или плохо. Чело-вечно или бесчеловечно. Нравствен-но или безнравственно. И вот этот спо-соб обращения друг с другом и делает нас личностями, человеческими инди-видуальностями того или иного качес-тва. Ущербного – или всесторонне-гар-монического...»

В 1957-1970-х годах Феликс Михай-лов сначала был доцентом, а потом – заведующим кафедрой философии 2-го Медицинского института. За сво-бодомыслие был изгнан, а вернулся 20 лет спустя, и вот как раз об этих вре-менах рассказывает Алексей Смирнов: «Мы работали с группой врачей из Чет-вертой Градской больницы, с кафед-ры пропедевтики внутренних болез-ней. Они подняли архивы расхождения медицинских диагнозов по вскрытиям с прижизненной диагностикой. То есть архив медицинских ошибок, сущест-вующий в больницах чуть ли не с ека-терининских времен. Они обнаружи-ли интересную вещь. Сейчас сущест-вуют современные методы диагности-ки. Если есть подозрение на инфаркт, назначают кардиограмму. Если надо, делают УЗИ, берут анализы. Но про-цент медицинских ошибок практически не меняется! Они поняли, почему. Ме-диков учат, как собирать данные, как пощупать пульс, расспросить больно-го, на какой анализ направить, как его прочитать. То есть методам обследова-ния. С другой стороны, студенты изуча-ют, как протекают те или иные болезни. А дальше врач оказывается перед кон-кретным больным. Он помнит про все болезни, про все методы исследования больного. А что делать с этим больным, не знает. Выясняется, что методу поста-новки диагноза его не научили! Что де-лать? Смотреть зрачки, есть ли желту-ха, посылать на кардиограмму или сра-зу брать пункцию? Знаний много, а тол-ку от них мало. Необходимо было сде-лать курс, на котором медики-диагнос-ты могли получить азы постановки диа-гноза. Мы работали вместе и сделали

Page 38: 043 Системный Администратор 06 2006

36

человек номера

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

Научная работа Алексея Смирно-ва в области логического программи-рования – это поиск вывода в различ-ных логических системах, паранепро-тиворечивые логики, компьютерные системы поиска вывода. В соавторстве Алексей Владимирович создал про-грамму интерактивного поиска дока-зательств Deductio, распространенную в нашей стране и за рубежом. Интерес-нейшая тема, продолжить изучение ко-торой предлагаю на сайте www.logic.ru. А я возвращаюсь к интервью. Мир сво-бодного человека открыт, а значит, тем для общения огромное множество.

Четыре свободыНаш разговор продолжается. Вокруг тихо – сотрудники института уже дав-но разбрелись по домам – вечер, конец рабочей недели. А у нас беседа в раз-гаре. Мы перешли к самой главной те-ме – свободный софт. К чайному сто-лу, расположенному неподалеку, под-ходит Алексей Евгеньевич Новодвор-ский, друг, соратник, спутник на всем маршруте трудовой биографии Алек-сея Владимировича, наливает себе чай. Смирнов указывает на него и пы-тается объяснить мне, неофиту сво-бодного ПО: «Алексей привел хороший пример. Приходите в магазин, хотите купить бутылку воды. На одной напи-сано: «Берите, пользуйтесь до истече-ния срока годности». А на другой напи-сано: «Вы должны ее лично открыть и выпить, никому не наливать». Вопрос: какую бутылку вы купите? В зависи-

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

ется наливать не только себе. Иначе придется каждому гостю покупать по бутылке. Глядеть на цену, не поглядев на эти условия, нелепо».

Так же нелепо, объясняли в 2003 го-ду Алексей Смирнов и его коллеги со-трудникам Министерства экономичес-кого развития и торговли РФ, покупать программы для госсектора, не указав, какие права при этом вы хотите при-обрести. «Мы создали аналитическую работу. Среди прочего, рекоменда-ции по использованию свободных про-грамм в госсекторе. И заявили: катего-рически не надо при госзакупках какие-либо преференции делать свободному софту. Они на нас удивленно посмотре-ли и спросили: «Вы же представляете свободный софт, почему же не надо де-лать преференции?» Отвечаем: «Воп-рос не в преференциях, а в том, что-бы тендер проводился на равных для всех». Что это значит? Когда вы поку-паете программу, вы покупаете не ко-робочку, а определенные права. Объ-являя тендер, необходимо раскрыть не только технические характеристи-ки программы, но и заявить, какие пра-ва вы хотите купить. Что я имею пра-во сделать с программой? Поставить ее на один компьютер и через два дня стереть? Поставить на все компьютеры на 41 год? Или могу копировать, разда-вать всем желающим? А если мне за-хочется ее исправить? Предположим, программа закупается для школ. Зна-чит, это учебное пособие. Учебное по-собие должно быть свободно, доступ-но всем сотрудникам и учащимся шко-лы. Если я покупаю программу, кото-рую учитель может дать ребенку домой, только нарушая уголовный кодекс, то, наверное, это неправильно. Мы ставим учителя перед выбором между зако-

ном и моралью. Если это программное обеспечение идет в школу, там должна быть хотя бы кампусная лицензия, кото-рая позволяет ученикам и сотрудникам и, наверное, их домашним, поставить его на своих домашних компьютерах и на рабочем месте и беспрепятствен-но пользоваться. А дальше – кто, что и за какие деньги предложит. Тут и на-до сравнивать. Один приходит и гово-рит – берите программу, ставьте на лю-бом количестве компьютеров и исполь-зуйте как хотите, другой – вот програм-ма, можете поставить на 20 компьюте-ров, а дальше придется еще закупать». При таких условиях свободному софту и особого лобби не надо, его преиму-щества видны сразу.

Набрав в любой поисковой системе free software, находим сайт www.gnu.org. И вот они, четыре разновидности сво-боды пользователей программ:1. Свобода запускать программу

в любых целях (свобода 0).2. Свобода изучения работы програм-

мы и адаптация ее к вашим нуждам (свобода 1). Доступ к исходным тек-стам является необходимым усло-вием.

3. Свобода распространять копии, так что вы можете помочь вашему то-варищу (свобода 2).

4. Свобода улучшать программу и публиковать ваши улучшения, так что все общество выиграет от это-го (свобода 3). Доступ к исходным текстам является необходимым ус-ловием.

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

Практически, процитировав эти фрагменты, я применила на практике принципы свободного ПО.

Мне также понравилась идея «ав-торского лева», описанная в книге Ри-чарда Столлмена «Open Sources»: «Центральная идея «авторского лева» в том, что мы даем каждому разреше-ние запускать, копировать, изменять программу и распространять изменен-ные версии, но не разрешаем добав-

Свободнорожденного нельзя лишить свободы!

Page 39: 043 Системный Администратор 06 2006

37№6, июнь 2006

человек номера

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

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

тами: «Open Sources kill jobs», – пыта-ясь защитить низкоквалифицирован-ные кадры, которые, ничуть не сму-щаясь, «рисуют» при помощи мышки одни и те же программы для ста рабо-тодателей. Не боятся, потому что об-ладают замечательной эрудицией, хо-рошо знают все о существующем про-граммном обеспечении, способны ра-зобраться, что и как работает, и приду-мать новое, если это необходимо. Вза-мен этих весьма высоких требований «свободный софт» дает им свободу. И пропуск в особый мир, который Алек-сей Смирнов описывает так: «Кто-то написал программу, другой посмот-рел: «О, здесь можно что-то улучшить, вот тебе изменения для этой програм-мы!». Наверное, он пришлет эти изме-нения не потому, что он такой добрый, а потому, что ему нужна дополнитель-ная функциональность. Если он прос-то сделает изменения для себя и ни-кому не заявит о них, то в следующей версии программы того, что ему нужно, уже не будет. То есть если я что-то сде-лал и открыл, это будет жить дальше, я тоже смогу пользоваться. Причем я мо-гу сделать чуть-чуть, а другие продол-жат. Я обозначил направление».

Мир разработчиков свободных про-грамм возник во многом благодаря Алексею Смирнову и ALT Linux. При-чем народ общается не только в Сети, по e-mail и в «аське». Раз в год прово-дится знаменитый летний «форум» – Linux Fest, а также приуроченная к не-му международная конференция раз-работчиков свободных программ, куда приезжают, кстати, не только «линуксо-иды» и не только из России, но специ-алисты практически со всего СНГ. Со-бирается целая армия – человек четы-реста. Обсуждают технические, поли-тические проблемы. Слабых докладов на конференции не бывает, коммер-ческие делают только фирмы-спонсо-ры, да и те, чтобы не выглядеть глупо, присылают представителей с содержа-тельными сообщениями.

Забавно, но уже в финале наше-го интервью, словно нарочно, раздал-ся звонок – Алексея Владимировича спрашивали именно по поводу июль-ской встречи. Могу совершенно от-ветственно заявить всем, кто интере-суется: в этом году Linux Fest обяза-тельно состоится. В восьмой раз. При-соединяйтесь!

Оксана Родионова

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

Темы для докладов: Проекты разработки свободного программного обеспе-

чения. Научные проекты в различных областях знаний, включа-

ющие разработку продуктов под свободной лицензией. Культурные, философские и правовые особенности сво-

бодного лицензирования. Свободные программы для органов государственной

власти.

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

Когда: 24-26 июля Где: Калужская обл., г. Обнинск, Государственный

Центральный Институт Повышения Квалификации (ГЦИПК), (ул. Курчатова, д. 21)

Подробности: http://conf.altlinux.ru

III Международная конференция разработчиков свободных программ на Протве

стол на тему: свободные программы для электронного го-сударства.

Заявки на проведение круглых столов по другим темам принимаются Оргкомитетом до 1 июля. Для участия в кон-ференции в качестве докладчика необходимо: выслать за-явку до 20 июня, а в качестве слушателя – до 15 июля.

Контакты Оргкомитета Третьей Международной конфе-ренции разработчиков свободных программ на Протве: [email protected] +7 (495) 203-96-98

Организаторы: ALT Linux и Институт Логики.Спонсоры: Naumen.Информационные спонсоры:LinuxRSP.ru;Журнал «Системный администратор».

Алексей Новодворский – Председатель Оргкомитета конференции.

Дмитрий Левин – Председатель Программного коми-тета Конференции.

Подробная информация о месте проведения, услови-ях участия, программе конференции (детальная програм-ма будет размещена после 1 июля) и др. доступна по адре-су: http://conf.altlinux.ru.

Page 40: 043 Системный Администратор 06 2006

38

сети

Структура DNSВ настоящее время Интернет – это ог-ромная сеть, в которую входят мил-лионы узлов, расположенных по все-му миру. Для того чтобы запрос, сде-ланный с одного компьютера, мог до-стичь цели, расположенной на другом компьютере, нужно прежде всего эту цель задать. Можно, конечно, указать IP-адрес напрямую. Если он вам из-вестен, конечно. Но здесь существует возможность очень просто ошибить-

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

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

Создаём зоны DNS

Domain Name System – своеобразная «нервная система» сети Интернет. Именно благодаря ей вы, набирая http://www.samag.ru, попадаете на сайт журнала «Системный администратор», а не куда-нибудь еще. Как создать, настроить и запустить DNS-сервер для небольшого предприятия?

Рашид Ачилов

Page 41: 043 Системный Администратор 06 2006

39№6, июнь 2006

сети

Вся сеть Интернет, которая описы-вается зоной «.» (точка) делится на так называемые TLD (Top Level Domains – домены верхнего уровня), распре-деляемые либо по функционально-му, либо по географическому призна-ку. Существует также термин primary domain – «первичный домен», или «до-мен первого уровня», но этот термин используется значительно реже. Рас-пределение по географическому при-знаку осуществляется в соответствии с ISO 3166, устанавливающему для всех стран мира двух- и трехбуквен-ные коды. Распределение по функцио-нальному признаку осуществляется по мере необходимости создания нового TLD. Здесь следует отметить, что все-ми вопросами по отношению к TLD за-нимается ICANN (Internet Corporation for Assigned Names and Numbers), и имен-но этот орган решает – создавать ли новый TLD.

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

Таким образом, процесс поиска ин-формации, допустим, о веб-сервере www.granch.ru, будет выглядеть сле-дующим образом: Клиент обращается к своему сер-

веру DNS, адрес которого был задан системным администра-тором с запросом «Скажи мне адрес, соответствующий имени www.granch.ru».

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

Корневой сервер присылает ему адрес сервера, отвечающего за зо-ну .ru

Сервер DNS обращается к серверу зоны .ru

Сервер зоны .ru присылает ему адрес сервера, который отвечает за зону granch внутри его зоны.

Сервер DNS обращается к серверу зоны granch.ru.

И наконец, сервер зоны granch.ru сообщает ему адрес, соответству-ющий имени www. В данном случае это будет 81.1.252.58.

Данный процесс проиллюстриро-ван на рис. 1, где цифры обозначают последовательность запросов.

Как встроить свою информацию в структуру DNS?Прежде чем включаться в какую-либо систему, нужно иметь некоторое пред-ставление о том, куда и каким образом включаться.

Куда встраиваем?За различные TLD отвечают различ-ные сервера, и если за географи-ческие домены отвечает, как прави-ло, один сервер (точнее говоря, одна организация), то за домены функцио-нальные может отвечать, вообще гово-ря, неограниченное количество так на-зываемых регистраторов, то есть ком-паний, заключивших специальные до-говоры с ICANN о том, что именно они будут регистрировать имена в некото-рых функциональных доменах. Крат-кое описание функционального до-мена и адрес его регистратора при-ведены в [3].

Если регистраторов несколько, то дается адрес основного (например, VeriSign [4] для домена .com). Домены .gov и .mil зарезервированы исключи-тельно за американским правительс-твом и американскими же военными

организациями, причем резервиро-вание .gov оформлено соответствую-щим RFC – RFC 2146 [5]. Полный спи-сок всех существующих в настоящий момент географических же TLD с ука-занием регистратора домена и необ-ходимой контактной информации мож-но посмотреть в [6]. Хотя если, скажем, в зоне .com можно выбирать из ог-ромного списка, то для зон .ru и .su РУЦЕНТР, [8], без вариантов.

Здесь надо отметить несколько мо-ментов. Фактически зона .su относится к несуществующему государству Со-ветский Союз (Soviet Union), хотя тем не менее продолжает обслуживаться и открыта для регистрации. Регистра-ция там достаточно дорогая – 100 дол-ларов за регистрацию или поддержку в год.

Не существует никакого приори-тета, согласно которому одна органи-зация или человек имеет преимущес-тво при регистрации домена над дру-гим. Один американский бизнесмен, занимавшийся производством плас-тиковых окон, зарегистрировал до-мен windows2000.com. Когда то же са-мое попыталась сделать Microsoft, она с удивлением обнаружила, что это имя уже занято, и за него компании при-шлось выложить крупную сумму. Су-ществует даже понятие «киберсквот-терство» – процесс регистрации до-менов с целью их последующей пере-продажи. РУЦЕНТР тоже решил при-ложить к этому руку, и по новым пра-вилам, которые вводятся с 1 июня 2006 года, освобождающиеся доме-ны выставляются на «аукцион домен-ных имен» и передаются тому, кто даст

Домены верхнего уровняПервоначально, согласно RFC 920, в спис-ке функциональных TLD присутствова-ли только .com, .gov, .mil, .edu, .org [1], ко-торые представляли соответственно ком-мерческие, правительственные, военные организации, образовательные учрежде-ния и некоммерческие организации. Впос-ледствии этот список несколько расширил-ся – в 1985 г. добавился TLD .net, представ-ляющий организации-поставщики сетевых услуг, а в 1988 – TLD .int, представляющий международные организации. В 2001-2002 к этому списку добавились практические неизвестные российскому пользовате-лю TLD .aero, .biz, .cat, .coop, .jobs, .mobi,

.museum, .name, .pro и .travel. Более подроб-ная информация приведена в [2]. Географи-ческие же домены распределены раз и на-всегда. Хотя это не значит, что вы не мо-жете зарегистрировать в нем свой домен. Многие географические домены, случай-но совпавшие с «хорошо известными» со-кращениями, являются чрезвычайно при-влекательными. Например, .md (Молдавия) очень привлекательна для медицинских учреждений и жителей штата Мэриленд, США; .tv (Тувалу) – для сайтов, связанных с телевидением; .tm (Туркменистан) сов-падает с написанием сокращения «Trade Mark», а .nu (Ниуэ – есть такой остров-ко-лония) – для сайтов в стиле «ню».

Page 42: 043 Системный Администратор 06 2006

40

сети

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

При создании TLD, перечисленных выше, планиро-валось также создание TLD .xxx для сайтов с тематикой «для взрослых». ICANN отклонила это предложение. Недав-но оно было вынесено на повторное голосование, и ICANN снова его отклонила [7]. Зато появился TLD .tel [9], рассчи-танный на использование одновременно в компьютерах и мобильных устройствах.

Существует RFC 1480, описывающий правила регистра-ции имен в домене .us. Правила эти чрезвычайно громозд-ки и запутанны и предполагают создание имен из 6-7 уров-ней типа Hamilton.High.LA-Unified.K12.CA.US

Каким образом встраиваем?Раньше все было гораздо сложнее. Для регистрации зоны .com мне пришлось заполнять множество текстовых форм – с данными на организацию, с данными на контактных лиц... Формы эти потом отсылались на специальные адреса, от-куда приходили ответы – приняты или нет. Затем предвари-тельно сформированный файл зоны тестировался, и опять же по почте приходило сообщение о том, успешно завер-шено тестирование или нет.

Сейчас все стало гораздо проще. И Network Solutions, и РУЦЕНТР обзавелись веб-интерфейсами, с помощью ко-торых все вышеперечисленное (за исключением, конечно, составления файла зоны) можно сделать несколькими кли-ками мыши. Все данные можно исправить, дополнить или удалить в любой момент. Ранее с РУЦЕНТРом требовалось заключать договор на обслуживание, но начиная с 1 июня 2006 года в действие вводятся новые правила, согласно ко-торым достаточно зарегистрироваться на их сайте. Зару-бежные регистраторы, как правило, обходятся кредитны-

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

Регистратору потребуется указать IP-адрес и маску под-сети сервера, на котором будет запущена программа DNS-сервера, и который будет содержать основную базу дан-ных, создаваемую и редактируемую вами по мере необхо-димости. Этот сервер будет называться первичным серве-ром (master server). Кроме того, потребуется указать как минимум один IP-адрес сервера, содержащего резервную копию базы на случай отказа первичного сервера. Такие серверы называют вторичными серверами (slave servers). Чтобы долго не размышлять о том, где разместить вторич-ный DNS, РУЦЕНТР предлагает разместить его на их пло-щадке. Стоимость услуг РУЦЕНТРа составляет 15 долла-ров в год за домен в зонах .ru, .net, .com, .org, 50 долларов за домен в зонах .biz, .info, 100 долларов за домен в зоне .su и 5 долларов в год за поддержку вторичного DNS в лю-бой (в том числе и зарегистрированной не у них) зоне.

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

обслуживающих данный домен. Эти сервера должны быть доступны не менее 22 часов

в сутки.

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

www.krokodil.ruИтак, допустим, мы хотим создать сайт www.krokodil.ru (на момент написания статьи это имя было свободно), посвя-щенный разведению крокодилов в домашних условиях. Подключение по выделенной линии есть, сеть класса С, а именно 212.20.5.0 – 212.20.5.255 (этот диапазон в настоя-щее время свободен) провайдером выделена. Этот пример несколько нехарактерен для нынешнего времени с его де-фицитом IP-адресов, но он взят специально для того, что-бы рассмотреть создание обратной зоны. Также будет рас-смотрен вариант с подключением через сеть 212.20.5.0/31. Внутренняя сеть нашей крокодиловодческой конторы со-стоит из шести компьютеров и будет отделена от Интернет firewall-proxy и т. д. под управлением FreeBSD. Что нам по-надобится для осуществления задуманного?

Прежде всего отмечу, что существуют варианты, не предполагающие какого-либо знания DNS – все размеща-ется на площадке провайдера, все обслуживается провай-дером, вам предоставляется только веб-интерфейс. Эта ус-луга чрезвычайно популярна за рубежом, но очень слабо востребована в России. Ее описание выходит за рамки дан-ной статьи, поэтому рассматривать ее я не буду.

Во-первых, нам понадобится программа DNS-серве-ра. На сегодняшний день только одна программа реализу-ет требуемый набор функций. Это DNS-сервер BIND, рас-

Рисунок 1. Процесс поиска информации

Page 43: 043 Системный Администратор 06 2006

41№6, июнь 2006

сети

пространяемый ISC (Internet System Consortium Inc., [10]) – некоммерческой организацией, которая занимается раз-работкой серверов BIND, DHCP, INN и NTP. Если он отсутс-твует в вашей системе, его необходимо скачать и устано-вить. FreeBSD поставляется вместе с BIND 9.3.2, поэтому в данной статье будет рассматриваться именно эта вер-сия. Следует отметить, что для версий BIND 8.x приводи-мое ниже описание конфигурации совершенно неприем-лемо, поскольку формат конфигурационных файлов BIND 8.x коренным образом отличается от формата конфигура-ционных файлов BIND 9.x.

Во-вторых, понадобится распределить выделенные нам IP-адреса и наделить адресами внутренние компьютеры. Здесь все чрезвычайно просто: пусть 212.20.5.1 – шлюз провайдера, 212.20.5.2 – адрес UNIX- сервера, 10.87.1.0/24 – внутренняя подсеть, в которой с 1-й по 6-й – рабочие стан-ции, 254 – адрес внутреннего интерфейса сервера. Осталь-ные адреса будут зарезервированы для будущего расши-рения.

В-третьих, потребуется заранее подготовленный файл описания зоны, который будет определять небольшое коли-чество внешних адресов: krokodil.ru – корневой сервер зоны, www.krokodil.ru, ftp.krokodil.ru, mail.krokodil.ru и ns.krokodil.ru. Имя ns (nameserver) является практически традиционным наименованием компьютеров, на которых работает служ-ба DNS, хотя, конечно, никто не помешает вам назвать его, например jaws.krokodil.ru. Будут определены также имена для компьютеров внутренней сети, доступные только из-нутри: tooth1.krokodil.ru – tooth6.krokodil.ru.

Записи DNSСуществует достаточно большое количество типов разно-образных записей, которые можно помещать в DNS. Обьем данной статьи позволяет рассмотреть лишь наиболее важ-ные из них, для получения полной информации следует об-ратиться к соответствующим RFC: RFC 1033 и RFC 1035 оп-ределяют форматы основных записей, RFC 1122 – формат записи PTR, RFC 2782 – формат записи SRV. Мы рассмот-рим только те записи, которые понадобятся для формирова-ния файлов зон, необходимых для регистрации домена: Запись SOA, задающая начало описания зоны. Запись NS, определяющая сервера имен зоны. Запись A, задающая соответствие между IP-адресом

и именем (прямое преобразование). Запись MX, описывающая настройки доставки почты

для данного компьютера. Запись CNAME, задающая альтернативные имена. Запись PTR, задающая соответствие между именем

и IP-адресом (обратное преобразование), употребля-ется в описании «обратной» зоны.

Формат записей DNS общий для всех типов записей:

где: имя – это имя обьекта, с которым ассоциируются дан-

ные; ttl – время жизни обьекта;

класс – класс записи; тип – тип записи; данные – ассоциируемые с данным обьектом данные.

Имя может принимать любое значение, и в таком слу-чае оно считается именем обьекта. Если имя заканчива-ется на точку, то оно считается полностью определенным, иначе в конец имени подставляется имя зоны, которое мо-жет быть задано двумя способами: Заданием имени зоны в директиве $ORIGIN, например:

Заданием имени зоны в директиве zone конфигураци-онного файла BIND.

Специальный символ «@» обозначает текущее имя зо-ны. Имейте в виду, что директива $ORIGIN отменяет дирек-тиву zone и действует до появления следующей директивы $ORIGIN или до конца файла. До момента появления пер-вой директивы $ORIGIN она считается заданной значению директивы zone конфигурационного файла BIND.

Если имя задано, оно должно начинаться с первой по-зиции строки.

TTL обычно опускается и задается глобально дирек-тивой $TTL. Директива $TTL для BIND 9.x является обя-зательной и, как правило, задается в самом начале фай-ла. В поле данных этой директивы задается время жизни (в секундах) элемента, в течение которого он может нахо-диться в кэше и считаться достоверным. В данном приме-ре это двое суток (48 часов).

Класс записи может принимать одно из следующих значений: IN – запись ресурсов Интернет. CH – запись ресурсов ChaosNet – совершенно незнако-

мой российскому пользователю сети, применявшейся на машинах фирмы Symbolics.

HS – запись ресурсов Hesiod – служебного протокола BIND.

Тип записи – один из типов, перечисленных выше.Следует обратить внимание на то, что поля имя, ttl

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

Кроме записей, в файле зоны могут быть команды. Всего команд четыре – $TTL, $ORIGIN, $INCLUDE и $GENERATE. Описание команды $GENERATE приведено в документации на программу BIND, а также в [13] и [14], команда $INCLUDE работает соответственно своему написанию – включает указанный файл в текущий файл.

[имя] [ttl] [класс] <тип> <данные>

$ORIGIN krokodil.ru

$TTL 172800

$INCLUDE /etc/namedb/krokodil-ru-int.soa

Page 44: 043 Системный Администратор 06 2006

42

сети

Примечание: знак «;» (точка с запятой) является при-знаком комментария.

Запись SOAЭта запись определяет начало зоны. Любая зона должна начинаться с записи SOA. Появление другой записи SOA автоматически заканчивает первую зону и начинает вто-рую. Формат записи SOA приведен ниже. Фактически за-пись SOA именует зону и задает для нее некоторые умол-чания.

Разберем пример. Знак @ в поле имени означает, что необходимо взять имя зоны, заданное ранее директивой $ORIGIN. Класс записи – IN, тип записи – SOA. SOA – это единственная запись, которая имеет такой сложный спи-сок параметров.

Первый параметр – это адрес главного сервера имен зоны. В данном примере это krokodil.ru. Второй параметр – адрес электронной почты лица, ответственного за данную зону. Обратите внимание, что адрес записан как «username.domain», а не «username@domain».

Второй параметр – это список значений, заключенный в скобки. Теоретически возможно его записать в одну стро-ку, но практически я нигде этого не видел, всюду употреб-ляется форма записи, приведенная в примере. Список со-стоит из пяти элементов: Серийный номер зоны. Этот параметр играет чрезвы-

чайно важную роль в распространении обновления, вы-полненного на первичном сервере, по всем его вторич-ным серверам. Необходимо каким-то образом сообщить вторичному серверу о том, что данные на первичном сервере изменились. Если первичный сервер был пе-резапущен, то он отсылает всем вторичным серверам извещение о возможном изменении (DNS NOTIFY). По-лучив это извещение, вторичный сервер запрашивает серийный номер – если на первичном сервере серий-ный номер больше, чем на вторичном, вторичный сер-вер выполняет команду обновления зоны. Кроме того, вторичный сервер выполняет периодические проверки серийного номера с той же целью. Поэтому следует за-помнить одно простое правило: исправил зону – увеличь серийный номер! Среди администраторов DNS распро-странена практика, в соответствии с которой серийный номер формируется следующим образом: YYYYMMDDv, где: YYYY, MM, DD – текущий год (4 цифры), месяц и день

соответственно v – версия зоны за день. Если вносится несколько

изменений в день, это число последовательно уве-личивается на единицу.

Конечно, вас никто не будет обязывать следовать по-добной практике. Например, сервера DNS в Windows ее не придерживаются, а просто нумеруют ее 1, 2, 3 и т. д.

Значение периода обновления, по истечении которого

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

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

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

Время кэширования отрицательных ответов. В данном примере 172800 секунд (2 суток).

Запись NSЭта запись задает имена серверов, поддерживающих зо-ну, т.е. ведущих ее базу. Здесь должны быть перечислены имена первичного и всех вторичных серверов. Обычно эта запись следует непосредственно за записью SOA. В поле данные заносится одно значение – имя или IP-адрес сер-вера DNS-зоны независимо от того, является ли он глав-ным или подчиненным. Все указанные здесь имена долж-ны быть полностью определенными, то есть заканчивать-ся точкой!

В приведенном примере описывается сначала главный сервер нашей зоны ns.krokodil.ru, а потом подчиненный сер-вер – узел РУЦЕНТРа ns4.nic.ru.

Запись AЗапись типа A – это основное содержимое файлов зоны прямого преобразования или же просто «прямой» зоны, то есть выдающей имя компьютера по его адресу. Она со-ставляется для каждого компьютера. Для удобства чтения эти записи обычно группируются в порядке возрастания IP-адресов, а также группируются с записями MX, соответс-твующими данному IP-адресу, хотя это, конечно, не явля-ется обязательным. В поле имя заносится имя, назначае-мое IP-адресу, в поле данные – IP адрес, которому назна-чается имя. При наличии у адреса дополнительных имен, имя, назначенное адресу записью типа A, называют ос-новным именем.

В данном примере описано назначение IP-адресов ком-пьютерам внутренней сети, которая имеет адрес 10.87.1.0/24. Для компьютеров внутренней сети, как правило, нет необ-ходимости формирования каких-либо дополнительных за-писей, за исключением разве что CNAME.

IN NS ns.krokodil.ru.IN NS ns4.nic.ru.

tooth1 IN A 10.87.1.1tooth2 IN A 10.87.1.2tooth3 IN A 10.87.1.3tooth4 IN A 10.87.1.4tooth5 IN A 10.87.1.5tooth6 IN A 10.87.1.6

@ IN SOA krokodil.ru. hostmaster.krokodil.ru. ( 2005122001 ; Serial number 10800 ; Refresh every 3 hours 3600 ; Retry every hour 1728000 ; Expire every 20 days 172800 ) ; Minimum 2 days

Page 45: 043 Системный Администратор 06 2006

43№6, июнь 2006

сети

Запись CNAMEЗапись типа CNAME – это дополнительная возможность DNS. Она позволяет назначить одному IP-адресу более одного имени. В поле имя заносится дополнительное имя, назначаемое IP-адресу, в поле данные – основное имя, на-значенное ранее записью типа A, или другое дополнитель-ное имя, назначенное записью CNAME. При этом имя, стоя-щее в поле данных записи, называют каноническим (отсю-да и название записи – Canonical Name). Одному IP-адресу можно назначить неограниченное количество дополнитель-ных имен посредством записей CNAME, но в записях друго-го типа должно быть указано имя, назначенное записью A, а не записью CNAME. Ниже приводится пример правильно-го и неправильного назначения дополнительных имен.

Правильно:

Неправильно:

Записи CNAME могут указывать одна на другую, но не более семи уровней, восьмой обязательно должна идти запись, указывающая на имя, назначенное записью типа A. В литературе встречается рекомендация исполь-зовать множественные записи типа A вместо назначения адресу множества дополнительных имен. По поводу этого можно сказать, что данный момент упоминается в RFC 2219 в плане «не существует абсолютных рекомендаций по это-му поводу, каждый должен решать для себя, что для него лучше». Множественные CNAME проще для администри-рования, множественные A-записи легче обрабатываются, поскольку происходит меньше перенаправлений.

Запись MXЗапись типа MX – это второй основной элемент файла зо-ны. Эта запись расшифровывается как «Mail eXchanger», и предназначена для указания IP-адресов или имен ком-пьютеров, которые принимают почту для узла, описанного в поле name. В этом поле может быть пусто, а также указа-но полностью или не полностью определенное имя. Если в поле name пусто или указано не полностью определенное имя, то имя дополняется из директивы $ORIGIN. Формиро-вание записей MX в сложных случаях, когда настраивается достаточно большая зона с разветвленной схемой приема почты, – весьма нетривиальная задача, которая тесно пе-реплетается с работой программ, использующих протокол SMTP для доставки почты, поэтому мы рассмотрим толь-ко наиболее простой случай – вся почта принимается сер-вером UNIX. В поле данные заносятся два значения – при-оритет и имя или IP-адрес компьютера, принимающего поч-ту, направляемую на данный компьютер. С одним IP-адре-сом может быть связано, вообще говоря, неограниченное количество записей типа MX, и все они должны иметь раз-ный приоритет. Почта направляется в соответствии с при-оритетом – почтовый агент сортирует записи в порядке на-

растания приоритетов и именно так предпринимает попыт-ки доставить почту. Предположим, мы договорились с ад-мином узла behemot.ru о том, что сможем использовать его сервер как транзитный узел, который будет получать нашу почту с целью последующей доставки ее адресатам, ког-да связь восстановится. Тогда описание сервера krokodil.ru будет выглядеть следующим образом:

Это комплексный пример, он сразу показывает исполь-зование записей MX, А и CNAME. Здесь мы: Назначаем адресу 212.20.5.2 имя krokodil.ru. Указываем, что почту, направляемую по адресам типа

[email protected], будут принимать (в указанном поряд-ке): сервер krokodil.ru; сервер behemot.ru.

Определяем дополнительные имена www.krokodil.ru, mail.krokodil.ru и ftp.krokodil.ru. Обратите внимание, что все имена в правой части полностью определен-ны, то есть заканчиваются на точку. Если этого не сде-лать, то в конец имени будет автоматически подстав-ляться значение текущей директивы $ORIGIN. В дан-ном случае это привело бы к появлению имен типа www.krokodil.ru.krokodil.ru.

Запись PTRЭто совершенно особый тип записей. В нашем примере мы «специально» взяли полную подсеть, чтобы рассмотреть случай «нормальной» работы с записями PTR. Случай с се-тью 212.20.5.0/31 будет рассмотрен чуть позже.

Запись PTR предназначена для осуществления обрат-ного преобразования – имен в IP-адреса. Подобные пре-образования очень широко применяются в различных про-граммах, предоставляющих доступ к некоторым сетевым ресурсам: они проверяют соответствие прямого и обрат-ного преобразования и в случае несовпадения или отсутс-твия записи PTR могут отказать в доступе. Зона, содержа-щая записи PTR, называется зоной обратного преобразо-вания или же просто «обратной» зоной.

Записи PTR не имеют никакого отношения к записям A, MX, CNAME и другим, описывающим прямое преобразова-ние. Сделано это намеренно с целью использовать для обо-их преобразований один и тот же набор программных мо-дулей. Здесь, правда, нас ожидает сложность следующе-го вида – полностью определенное доменное имя вида www.krokodil.ru. «наращивает размерность» слева направо (то есть укрупнение узлов идет по мере продвижения по тек-сту имени слева направо), а IP-адрес 212.20.5.2 – справа налево. Для унификации программных модулей приняли следующую условность: все IP-адреса – это имена, вхо-дящие в специальный TLD in-addr.arpa. «Зонами» в этом домене являются подсети, а имя зоны записывается в ви-де IP-адреса, читаемого наоборот. Таким образом «имя»

ns IN A 10.87.1.1name1 IN CNAME ns IN MX 10 ns

ns IN A 10.87.1.254name1 IN CNAME ns IN MX 10 name1

krokodil.ru. IN A 212.20.5.2 IN MX 10 krokodil.ru. IN MX 50 behemot.ru.

www IN CNAME krokodil.ru.mail IN CNAME krokodil.ru.ftp IN CNAME krokodil.ru.

Page 46: 043 Системный Администратор 06 2006

44

сети

нашей обратной зоны будет 5.20.212.in-addr.arpa для об-ратной зоны, содержащей описание для внешней сети и 1.87.10.in-addr.arpa для обратной зоны, содержащей опи-сание внутренней сети.

Точно так же, как для использования доменного имени необходимо его зарегистрировать, так и для использования обратного преобразования необходимо зарегистрировать обратную «зону» у координатора обратных зон. В отличие от зон прямого преобразования здесь существует только один координатор, и регистрация у него бесплатная. Регист-рацией обратных зон занимается RIPE NCC [11]. Вся инфор-мация о регистрации обратной зоны приведена в [12].

Зачем нужно регистрировать обратную зону? Сервер верхнего уровня зоны in-addr.arpa должен знать, что для выполнения запроса обратного преобразования ему сле-дует обратиться к такому-то серверу, в данном случае к на-шему 212.20.5.2. Разумеется, где-либо регистрировать об-ратную зону внутренней подсети не нужно.

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

В приведенном выше примере мы задали обратное пре-образование для компьютеров внутренней сети. Для сер-вера мы запишем одну строчку (в реальном примере ди-рективы $ORIGIN указывать не надо, они приведены толь-ко, чтобы было понятно, о какой зоне идет речь):

Здесь необходимо отметить, что записи CNAME для за-дания множественного обратного соответствия не использу-ются, поэтому при запросе «какое имя соответствует адре-су 212.20.5.2» результатом всегда будет krokodil.ru незави-симо от количества установленных для него псевдонимов.

Чем будет отличаться случай, когда провайдер выделя-ет блок 212.20.5.0/31 вместо полноценной подсети? С точ-ки зрения формирования всех записей, кроме PTR, ничем. Процедура создания прямой зоны и ее регистрации не за-висит от количества адресов, тем более что для большинс-тва случаев много адресов и не надо. Однако с точки зре-ния записей PTR разница есть. В сторону упрощения. А мо-жет быть, и нет – в зависимости от провайдера. И заклю-чается она в том, что записи:

будут находиться на вашем сервере и управляться вами, но записи:

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

Файловая структураСамому BIND, конечно же, все равно, в каком порядке идут записи и как они отформатированы. Это важно только тем, кто будет сопровождать зону, особенно, если изменения в нее будут вноситься часто. Здесь я опишу распределе-ние зон по файлам так, как это используется в тех зонах, которые я сопровождаю. Разумеется, это не единствен-ный возможный порядок и, возможно, не лучший. Но это работает.

Зоны внешние и внутренниеBIND 8.x имел один чрезвычайно крупный недостаток – он не позволял дифференцировать выдаваемую инфор-мацию в зависимости от каких-либо факторов – приходи-лось либо показывать лишнее, либо скрывать нужное. Вне-шним клиентам совершенно нет никакой необходимости знать о наличии компьютеров внутренней сети, но, пос-кольку разделить информацию не было возможности, лю-бой компьютер мог установить структуру внутренней се-ти посредством запросов DNS. BIND 9.x свободен от это-го недостатка – он позволяет посредством списков управ-ления доступом (Access Control List, АСL) распределить за-просы по «представлениям» (views). Представления могут иметь произвольные имена, обычно создается внутреннее представление «internal», которому удовлетворяют клиенты внутренней подсети, и внешнее представление «extrenal», которому удовлетворяют все остальные. Здесь помните, что это одна и та же зона, просто показывается она по-раз-ному – как правило, в файлах внешних зон присутствует только та информация, которая необходима внешним кли-ентам, – о внешнем сервере, о путях доставки почты и т. д., а в файлах внутренних зон отражается вся сетевая тополо-гия. Кроме того, если сопровождается обратная зона, то не-обходимо точно так же разделить по файлам информацию об адресах обратного преобразования.

Итак, вернемся к нашему примеру.Файловая структура будет следующей. У нас имеется

прямая зона krokodil.ru и обратная зона 5.20.212.in-addr.arpa. Кроме того, обязательно должна присутствовать обрат-ная зона зона 0.0.127.in-addr.arpa для обеспечения коррек-тного обратного преобразования localhost → 127.0.0.1. Зо-на эта нужна для того, чтобы BIND не пытался запраши-вать корневые сервера о самом себе, что происходит, ког-да 127.0.0.1 указывает на «localhost.» Запись прямого пре-образования 127.0.0.1 → localhost.krokodil.ru будет занесена в файл прямого преобразования внутренней зоны. Для то-

$ORIGIN 5.20.212.in-addr.arpa2 IN PTR krokodil.ru

gate.krokodil.ru. IN A 212.20.5.1krokodil.ru. IN A 212.20.5.2

1 IN PTR gate.krokodil.ru.2 IN PTR krokodil.ru.

$ORIGIN 1.87.10.in-addr.arpa1 IN PTR tooth1.krokodil.ru.2 IN PTR tooth2.krokodil.ru.3 IN PTR tooth3.krokodil.ru.4 IN PTR tooth4.krokodil.ru.5 IN PTR tooth5.krokodil.ru.6 IN PTR tooth6.krokodil.ru.

Page 47: 043 Системный Администратор 06 2006

45№6, июнь 2006

сети

го чтобы не загружать сеть передачей бесполезных данных, для внешних и внутренних зон используются разные запи-си SOA – записи во внешних зонах меняются весьма редко, а во внутренних довольно часто. Следовательно, мы име-ем следующие файлы: localhost.rev – файл зоны обратного преобразования

0.0.127.in-addr.arpa. Этот файл существует только для внутреннего представления.

zone212.rev – файл зоны обратного преобразования 5.20.212.in-addr.arpa.

zone10.rev – файл внутренней зоны обратного преоб-разования 1.87.10.in-addr.arpa.

direct-krokodil-ru.int – файл внутренней зоны прямого преобразования krokodil.ru.

direct-krokodil-ru.ext – файл внешней зоны прямого преобразования krokodil.ru.

krokodil-ru-int.soa – файл с записями SOA и NS для внутренних зон.

krokodil-ru-ext.soa – файл с записями SOA и NS для внешних зон.

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

Сделаем одно замечание относительно имени localhost. RFC 1912 специально упоминает настройку файлов c раз-решением имени 127.0.0.1 и localhost. В нашем приме-ре зона localhost соответствует RFC 1912, хотя в жизни вполне можно встретить разрешение имени 127.0.0.1 → localhost.domain.tld и соответствующее ему обратное раз-решение.

Файл localhost.rev. Использует одну запись SOA вместе с внутренней зоной обратного преобразования:

Файл zone212.rev:

Файл zone10.rev:

Файл direct-krokodil-ru.int:

Файл direct-krokodil-ru.ext:

Файл krokodil-ru-int.soa:

Файл krokodil-ru-ext.soa:

ЗаключениеКак создать, настроить и запустить DNS-сервер для неболь-шого предприятия? На самом деле не так сложно, как ка-жется изначально, – достаточно пройти этот путь один раз, дальнейшие действия будут идти «на автомате».

Ссылки и литература:1. ftp://ftp.rfc-editor.org/in-notes/rfc920.txt2. http://www.iana.org/domain-names.htm.3. http://www.iana.org/gtld/gtld.htm.4. http://www.verisign.com/information-services/index.html.5. ftp://ftp.rfc-editor.org/in-notes/rfc2146.txt.6. http://www.iana.org/cctld/cctld-whois.htm.7. http://www.icann.org/announcements/announcement-10may06.htm.8. http://www.nic.ru.9. http://www.icann.org/tlds/agreements/tel.10. http://www.isc.org.

11. http://www.ripe.net.12. http://www.ripe.net/rs/reverse/rdns-project/index.html.13. Немет Э., Снайдер Г., Сибасс С., Хейн Т.Р. UNIX: руководс-

тво системного администратора. Для профессионалов/Пер. с англ. – Спб.:Питер; К.: Издательская группа BHV, 2002 г. – 928 с.: ил.

14. Cricket Liu, Paul Albitz, DNS and BIND, Third Edition, 1998 (изд-во O’Reilly, ISBN 1-56592-512-2).

$INCLUDE /etc/namedb/krokodil-ru-int.soa1 IN PTR localhost.

$INCLUDE /etc/namedb/krokodil-ru-ext.soa1 IN PTR gate.krokodil.ru.2 IN PTR krokodil.ru.

$INCLUDE /etc/namedb/krokodil-ru-int.soa1 IN PTR tooth1.krokodil.ru.2 IN PTR tooth2.krokodil.ru.3 IN PTR tooth3.krokodil.ru.4 IN PTR tooth4.krokodil.ru.5 IN PTR tooth5.krokodil.ru.6 IN PTR tooth6.krokodil.ru.

$INCLUDE /etc/namedb/krokodil-ru-int.soakrokodil.ru. IN A 10.87.1.254 IN MX 10 krokodil.ru.www IN CNAME krokodil.ru.mail IN CNAME krokodil.ru.proxy IN CNAME krokodil.ru.ftp IN CNAME krokodil.ru.ns IN CNAME krokodil.ru.

localhost. IN A 127.0.0.1

tooth1 IN A 10.87.1.1

$INCLUDE /etc/namedb/krokodil-ru-ext.soakrokodil.ru. IN A 212.20.5.2 IN MX 10 krokodil.ru. IN MX 50 behemot.ru.

www IN CNAME krokodil.ru.mail IN CNAME krokodil.ru.ftp IN CNAME krokodil.ru.

gate IN A 212.20.5.1

@ IN SOA krokodil.ru. hostmaster.krokodil.ru. ( 2006051202 ; Serial number 10800 ; Refresh every 3 hours 3600 ; Retry every hour 1728000 ; Expire every 20 days 172800 ); Minimum 2 days; IN NS krokodil.ru.

$TTL 172800@ IN SOA korkodil.ru. hostmaster.krokodil.ru. ( 2005122001 ; Serial number 10800 ; Refresh every 3 hours 3600 ; Retry every hour 1728000 ; Expire every 20 days 172800 ); Minimum 2 days; IN NS krokodil.ru. IN NS ns4.nic.ru.

tooth2 IN A 10.87.1.2tooth3 IN A 10.87.1.3tooth4 IN A 10.87.1.4tooth5 IN A 10.87.1.5tooth6 IN A 10.87.1.6

Page 48: 043 Системный Администратор 06 2006

46

web

Один-единственный объект Java Script XMLHttpRequest изменил порядок взаимодействия поль-

зователей с сервером. Если ранее для того, чтобы отправить данные, необ-ходимо было нажимать кнопку, под-тверждая действие, то теперь это бу-дет сделано автоматически. Стоит за-полнить поле, и браузер уже отправля-ет данные серверу, пользователь при этом не участвует. Удобство налицо, например, если в поисковике по мере ввода параметров поиска будут выво-диться подходящие страницы, то таким образом можно регулировать парамет-ры запроса на лету, добившись резуль-тата в меньшее время. Или, например, как в Gmail, можно на лету проверять правописание. При этом веб-приложе-ние фактически ведет себя аналогич-но настольному.

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

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

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

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

Такой сценарий выполнит JavaScript-код, содержащийся в ответе сервера,

Технология AJAX: как насчет безопасности?

История развития IT-индустрии показывает, что появление новых технологий практически всегда приводит к понижению уровня безопасности. Так было всегда. Когда мэйнфреймы стали объединяться в сеть, началось развитие клиент-серверных приложений – всё это породило специфические проблемы и фактически обесценило старую систему безопасности. И вот сегодня новая ступень – AJAX.

Сергей Яремчук

xmlReq.onreadystatechange = { if ( xmlReq.readyState == 4 ) { eval ( xmlReq.responseText ); } }

Page 49: 043 Системный Администратор 06 2006

47№6, июнь 2006

web

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

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

Ошибки при программированииAJAX-технология относительно моло-дая, и хотя уже сегодня можно най-ти тысячи примеров, разработчикам все равно приходится самостоятель-но писать код как для сервера, так и для клиента практически в каждомом случае, и к тому же на разных языках. Это приводит к многочисленным ошиб-кам в реализации, часть которых об-наруживается только при эксплуата-ции приложения. К тому же не стоит забывать, что эту ситуацию усугубля-ют различия в поведении веб-браузе-ров, наличие плагинов (некоторые от-ладчики, о которых рассказано чуть ниже, перехватывают действие и под-меняют своим) и прочее. Это приводит к увеличению кода, а значит, – к ве-роятному появлению ошибок в конк-ретной реализации. На сегодняшний день стандарт XMLHttpReques еще не принят, 5 апреля 2006 года World Wide Web Consortium опубликовал всего лишь его черновой вариант [13]. К то-му же всегда найдутся особенные бра-узеры, разработчики которых не бу-

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

В некоторых скриптах, встречаю-щихся на форумах, приходящие дан-ные персонализируются на основа-нии некоего идентификатора пользо-вателя (ID) или токена. Токен включен как заголовок в запросах, сделанных объектом XMLHttpRequest. Он должен вести себя аналогично сеансовому то-кену и обеспечивать доступ к защи-щенному ресурсу. Но злоумышленни-

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

А что сервер?По сообщениям специалистов, зани-мающихся безопасностью, сегодня приблизительно 20 процентов уязви-мостей приходятся именно на веб-при-ложения. Отмечается, что очень ред-кое приложение может похвастаться всего одной уязвимостью, большая же часть содержит несколько уязви-мых мест. При этом большая часть уязвимостей (около 95%) приходится на cross-site scripting (XSS), т.е. подста-новка чужого кода в текущий сеанс. Ти-пичные эксплоиты могут включать: мо-дификацию страниц (дефейс), переад-ресацию (например, для форм регис-трации) и взаимодействие с сайтом от имени другого пользователя.

Нас в контексте статьи интересу-ет последний пункт. Хотя стоит отме-тить, что при помощи XSS можно смо-делировать любую ситуацию, кото-рую возможно проделать при помо-щи JavaScript. Теперь представим та-кую ситуацию. Пользователь запол-няет некую форму, AJAX отсылает за-прос, сервер обрабатывает отправ-ленные данные и возвращает ответ. Но что, если злоумышленник имеет возможность перехватить данные се-анса и скорректировать параметры за-

Рисунок 1. При помощи FireBug можно просматривать AJAX-запросы

Page 50: 043 Системный Администратор 06 2006

48

web

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

Самое интересное, что никаких особых инструментов для перехва-та не надо, достаточно иметь под ру-кой веб-браузер. Тот же Firefox позво-ляет просмотреть исходный код доку-мента, а, использовав плагины FireBug (рис. 1) и Greasemonkey, можно не толь-ко просматривать исходный код полу-ченных документов, но и редактиро-вать их, регистрировать AJAX-запросы и проверять ответы сервера. Причем это далеко не единственные плагины к этому веб-браузеру, предназначен-ные для отладки веб-приложений.

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

Например, CPAINT (Cross-Platform Asynchronous INterface Toolkit) [7], ко-торый представляет собой пакет AJAX-разработчика, распространяемый по лицензии GNU GPL и поддержи-вающий работу с несколькими язы-ками. В нем обнаружена уязвимость, позволяющая злоумышленнику вы-полнить произвольные ASP/PHP-ко-манды. Аналогичная уязвимость была найдена и в PAJAX [8], который пред-ставляет собой структуру, облегчаю-щую создание отдаленных PHP-объ-ектов в JavaScript. Для связи между объектами JavaScript, которые выпол-няются в браузере, и реализации их PHP-аналога на сервере использует-ся AJAX. Или, например, AJAX Spell Checker (ajax-spell), в котором обнару-

Проверьте возможность SQL-инъ-екции.

Проверьте возможность JavaScript-инъекции.

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

альный. Проверяйте данные с подтвержде-

нием. Проверьте правильность информа-

ции в заголовке запроса.

И тестирование, тестирование и еще раз тестирование. Успехов.

Ссылки, литература:1. Using the XMLHttpRequest Object and

AJAX to Spy On You – http://www.devx.com/webdev/Article/28861.

2. Security in an AJAX World – http://www.whirlycott.com/phil/2005/04/15/security-in-an-ajax-world.

3. Архив проекта ModSecurity – http://www.modsecurity.org/arhive.

4. «XMLHttpRequest allows dangerous request headers to be set», Bugzilla bug 302263 – https://bugzilla.mozilla.org/show_bug.cgi?id=302263.

5. Описание уязвимости в AJAX Spell Checker – http://www.securityfocus.com/bid/13986/references, http://secunia.com/15737/, http://www.security.nnov.ru/Jdocument503.html?l=RU.

6. Описание уязвимости в CPAINT – http://secunia.com/advisories/16462.

7. Домашняя страница CPAINT – http://sourceforge.net/projects/cpaint.

8. Домашняя страница PAJAX – http://www.auberger.com/pajax.

9. Плагин Greasemonkey – ht tp: / / f tp.mozilla.org/pub/mozilla.org/extensions/greasemonkey/greasemonkey-0.6.4-fx.xpi.

10. Плагин FireBug – http://releases.mozilla.org/pub/mozilla.org/extensions/firebug/firebug-0.3.2-fx+fl.xpi.

11. Proof of Concept : Browser-Based Field Encryption With Blowfish Via Ajax – http://smokey.rhs.com/web/blog/PowerOfTheSchwartz.nsf/plinks/RSCZ-6CATX6.

12. Родионов В. AJAX: заработавший Javascript. – Журнал «Системный ад-министратор», № 12, 2005 г. – 66-69 с.

13. Ч е р н о в о й в а р и а н т к л а с с а XMLHttpRequest, описывающий его интерфейс и поведение, – http://www.w3.org/TR/2006/WD-XMLHttpRequest-20060405.

жена уязвимость, позволяющая про-вести XXS-атаку [5].

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

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

Что имеем?Новая архитектура предполагает и до-селе неизвестные проблемы. Особен-ное беспокойство вызывает возмож-ность нападения на клиентские сис-темы, пользователи которых, как пра-вило, подготовлены хуже и защищен-ность систем ниже. Можно даже пред-положить появление в недалеком буду-щем дополнительных настроек в веб-браузере, при помощи которых пользо-ватель сможет контролировать AJAX-запросы, как это сегодня делается для cookies. Но как бы то ни было, не смот-ря на это, технология AJAX уже приме-няется на тысячах серверов и их коли-чество постоянно растет. Отказаться от нее вероятно уже не нельзя, да и глупо. Один из соавторов книги «Ajax in Action» Эрик Паскарелло (Eric Pascarello) в ин-тервью SearchWebServices.com дал следующие рекомендации для разра-ботчиков AJAX которых и стоит при-держиваться: Если используется аутентификация

пользователя, убедитесь в провер-ке на странице запроса.

Page 51: 043 Системный Администратор 06 2006
Page 52: 043 Системный Администратор 06 2006

50

безопасность

Речь пойдет о том, как увеличить безопасность FreeBSD, работаю-щей в качестве маршрутизатора

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

полагаю, что компьютер имеет доступ в Интернет с внешним IP-адресом.

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

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

Настраиваем безопасный роутер на базе FreeBSD

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

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

Page 53: 043 Системный Администратор 06 2006

51№6, июнь 2006

безопаснсоть

гой человек, который сможет обойти ее защиту, какой бы мощной она ни была.

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

Рассмотрим каждый из этих факторов подробно.

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

Так как для семейства UNIX-систем ядра распространя-ются в открытом исходном коде, то для нахождения уязви-мостей достаточно знать язык C.

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

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

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

Безопасность ПОУязвимости в программном обеспечении находят гораздо чаще, нежели в самой системе. Если программа достаточ-но популярна, то в ней будут стараться найти уязвимости, чтобы получить возможность взломать достаточно большое количество серверов. Человек, который нашел уязвимость, может пойти двумя путями, которые аналогичны описанным ранее. Автор программы рано или поздно узнает об уязви-мости и выпустит обновление к программе. А ваша зада-ча – всего лишь вовремя обновить ПО.

Человеческий факторЭта составляющая является главной для безопасности системы в целом! Ни одна система не может «похвастать-ся» безопасностью без дополнительной настройки. Все ОС придется аккуратно настроить перед тем, как они смогли бы противостоять хакерским атакам.

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

системы. Если у кого-то взломали FreeBSD, то это не гово-рит о том, что вся система FreeBSD уязвима, это говорит только о том, что ее неправильно настроили.

Как настроить FreeBSDИтак, переходим от теории к практике. Настраивать систему мы будем также по трем направлениям, описанным ранее.

ЯдроИтак, у вас установлена FreeBSD со стандартным ядром GENERIC, которое включает в себя поддержку избыточно-го количества устройств и функций. Это достаточно прос-то объяснить: разработчик не знает, какая у вас система, какие устройства и т. д., а стандартное ядро практически всегда позволяет загрузиться на любом компьютере. Кон-фигурирование ядра – задача довольно тривиальная. Тре-буется совсем немного времени, чтобы «выкинуть» из кон-фигурационного файла ядра все, что не нужно, потом, до-бавив дополнительные возможности, перекомпилировать его. Зачем пересобирать ядро: Ядро будет пытаться определить только те устройства,

которые установлены в компьютере, поэтому загрузка системы будет происходить намного быстрее.

Размер ядра уменьшается, и оперативная память осво-бождается.

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

Отключение поддержки ненужных устройств я ос-тавляю на ваше усмотрение, подробности смотрите на официальном сайте FreeBSD (http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/kernelconfig-config.html). Сра-зу добавляем в конфигурационный файл опции для firewall: я предпочитаю использовать в качестве firewall pf, поэто-му речь пойдет о нем. Приступаем к конфигурированию и компиляции ядра (комментарии начинаются с «//», их пи-сать не нужно!):

Конфигурируем ядро:

Компилируем и устанавливаем:

Перезагружаемся:

# cd /usr/src/sys/i386/conf/# cp GENERIC new# cat >> new

// Включаем поддержку firewalldevice pfdevice pflogdevice pfsync

// Запрещает перезагрузку клавишами <ctrl+ alt +del>options SC_DISABLE_REBOOT

// Включаем поддержку ALTQ для шейпинга пакетовoptions ALTQ

# config new

Kernel build directory is ../compile/newDon’t forget to do ``make cleandepend; make depend’’

# cd ../compile/new && make cleandepend && make depend ↵ && make && make install

Page 54: 043 Системный Администратор 06 2006

52

безопасность

Должно быть загружено новое ядро, если этого не про-изошло, то старое лежит в /boot/kernel.old.

У меня после удаления всех ненужных опция ядро умень-шилось более чем в два раза.

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

Это минимум, который необходимо изменить. Чтобы после перезагрузки все настройки остались прежними, вне-сите изменения в /etc/sysctl.conf.

Есть еще одна очень интересная переменная, которую я хотел бы описать, – это kern.securelevel. Securelevel может принимать значения от -1 до 3. Давайте рассмотрим пос-ледние три случая, так как -1 и 0 являются небезопасными режимами работы и ставятся по умолчанию: 1. Безопасный режим. В этом режиме вы не може-

те снимать модификационные флаги с файлов (да-же от имени суперпользователя – root), смонтирован-ные дисковые устройства, а также /dev/mem /dev/kmem не могут быть открыты для записи. Также нельзя под-гружать/выгружать модули ядра.

2. Повышенная безопасность. В дополнение к преды-дущим требованиям запрещена прямая запись на дис-ки, независимо от того, смонтированы они или нет.

3. Режим безопасности сети. Режим повышенной бе-зопасности плюс нельзя изменять правила firewall.

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

Настройка безопасности системыДавайте поменяем хеширование паролей md5, которое стоит по умолчанию, на более стойкое к взломам blowfish.

Для начала нужно отредактировать /etc/login.conf, в кото-ром описываются классы пользователей, заменив:

на

Теперь можно создать базу:

Для того чтобы пароли пользователей теперь хеши-ровались с помощью blowfish, нужно отредактировать /etc/auth.conf, заменив:

на

После этого в /etc/master.passwd все пароли будут начи-наться с $2, что указывает системе на использование хешей по алгоритму blf.

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

Этот шелл дает два преимущества: При попытке регистрации пользователя в системе

/sbin/nologin возращает ответ о том, что регистрация пользователя в системе невозможна.

Попытка входа записывается в логи.

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

Настройка программного обеспеченияДля начала обновим систему. В первую очередь – исход-ники, потом – коллекцию портов. Для обновления системы будем использовать cvsup. Редактируем supfile:

# cap_mkdb /etc/login.conf

:passwd_format=md5:\

:passwd_format=blf:\

crypt_default=md5

crypt_default=blf

shell: /sbin/nologin

# chmod 0600 /etc/login.conf /etc/syslog.conf ↵ /etc/newsyslog.conf /etc/rc.conf /etc/hosts.allow# chmod 0700 /root/

*default host=cvsup5.ru.FreeBSD.org*default base=/usr*default prefix=/usr*default release=cvs tag=RELENG_6_0*default delete use-rel-suffix

*default compress

src-basesrc-binsrc-contribsrc-etcsrc-gnusrc-include

# reboot

// Включаем проброс пакетов через интерфейсы# sysctl net.inet.ip.forwarding=1

// Генерируем случайный идентификатор IP-пакетов# sysctl net.inet.ip.random_id

// Ограничиваем количество ICMP-ответов# sysctl net.inet.icmp.icmplim=10

// Отключаем реагирование на попытку обратиться// к закрытым портам# sysctl net.inet.tcp.blackhole=2# sysctl net.inet.udp.blackhole=1

// Запрещаем пользователям смотреть чужие процессы# sysctl security.bsd.see_other_gids=0# sysctl security.bsd.see_other_uids=0

Page 55: 043 Системный Администратор 06 2006

53№6, июнь 2006

безопаснсоть

Таг RELENG_6_0 используется для исправлений исход-ного кода системы для увеличения безопасности. Теперь непосредственно запускаем cvsup:

Обновления можно взять с cvsup5.ru.FreeBSD.org (па-раметр host в supfile), причем скачиваются только обнов-ленные файлы, а не все целиком, отсюда такое малень-кое потребление трафика. Точно сказать нельзя, сколько придется скачать, все зависит от количества исправлений, но точно менее 10 Mб.

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

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

При первом запуске:

При последующих запусках:

Portsnap только в первый раз скачивает всю коллек-цию портов(~38 Mб), потом же качаются только обновлен-ные файлы.

Настройка pfНа любом компьютере, подключенном к сети, обязательно должен стоять firewall. Причем он должен быть корректно настроен. Я приведу несколько простых правил, которые позволят фильтровать входящие соединения:

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

Теперь переходим к настройке безопасного доступа к серверу OpenSSH. Раньше терминальный доступ к серве-ру обычно был предоставлен только telnet-сервером, но его сменил безопасный ssh-сервер. Но при настройках по умол-чанию – это хорошая мишень для хакера. Итак, при настрой-ке ssh-сервера, мы поступим так: составим два конфигура-ционных файла специально для двух сетей: локальная сеть; Интернет.

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

# cvsup -g -L 2 /usr/local/etc/supfile

# portsnap fetch# portsnap extract# portsnap update

# portsnap fetch# portsnap update

prov_if="sk0"int_if="rl0"internal_net="172.16.0.0/24"me="172.16.0.1"

LAN_to_INT="{ftp,ftp-data,www,https,ssh,smtp,pop3,nntp, ↵ 8080,ntp,411,5190}"

scrub in all

# Транслируем все пакеты к smtp-серверамnat on $prov_if from $internal_net to any port 25 -> $prov_if# Транслируем все пакеты к pop-серверамnat on $prov_if from $internal_net to any port 110 -> $prov_if

# Настраиваем перенаправление всех пакетов, идущих# к www-серверу в DMZrdr on $prov_if proto tcp from any ↵

to $prov_if port www -> 172.16.1.3 port www# Включаем прозрачное проксированиеrdr on $int_if proto tcp from $internal_net ↵ to any port 80 -> 172.16.0.1 port 3128

# in packs on prov_if

# Блокируем все входящие соединенияblock in on $prov_if from any to any# Разрешаем пингиpass in on $prov_if inet proto icmp from any ↵ to $prov_if icmp-type 8 keep state# Разрешаем соединяться с ssh-серверомpass in on $prov_if inet proto tcp from any ↵ to $prov_if port 22 keep state# Доступ к WWWpass in on $prov_if inet proto tcp from any ↵ to $prov_if port www keep state# Разрешаем соединяться с нашим почтовым серверомpass in on $prov_if inet proto tcp from any ↵ to $prov_if port 25 keep state

# out packs on prov_if

# Блокируем все входящие соединенияblock out on $prov_if from $prov_if to any# Разрешаем пинги от насpass out on $prov_if inet proto icmp from ↵ $prov_if to any icmp-type 8 keep state# Разрешаем обращаться на Webpass out on $prov_if inet proto tcp from ↵ $prov_if to any port www keep state# На ftppass out on $prov_if inet proto tcp from ↵ $prov_if to any port ftp keep state# На sshpass out on $prov_if inet proto tcp from ↵ $prov_if to any port ssh keep state# Разрешаем запросы к DNSpass out on $prov_if inet proto udp from ↵ $prov_if to any port 53 keep state

# in packs on int_if

# Блокируем все входящие соединенияblock in on $int_if from $internal_net to $me

pass in on $int_if inet proto tcp from ↵ $internal_net to $me port 22 keep state# Разрешаем локальной сети обращаться к нашему DNS-серверуpass in on $int_if inet proto udp from ↵ $internal_net to $me port 53 keep state

# out packs on $int_if

# Запрещаем все исходящие от нас соединения в локальную сетьblock out on $int_if from $me to $internal_net keep state# Разрешаем пинги от насpass out on $int_if inet proto icmp from ↵ $me to $internal_net icmp-type 8 keep state

src-kerberos5src-kerberosIVsrc-libsrc-libexecsrc-releasesrc-sbinsrc-sharesrc-syssrc-toolssrc-usrbinsrc-usrsbinsrc-cryptosrc-securesrc-sys-crypto

Page 56: 043 Системный Администратор 06 2006

54

безопасность

Это опять же минимальные настройки, об остальных мож-но прочитать, например, в руководстве (man sshd_config). Также изменим /etc/motd:

Так как мы указали, что из Интернета можно аутентифи-цироваться только по ключам, то придется эти самые клю-чики сгенерировать:

Теперь нужно «спрятать» id_rsa в надежное место и мож-но логиниться с помощью этого ключа, предупреждаю, что для putty придется генерировать ключи специальной утилитой – puttygen.

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

Настраивать ее не нужно, для проверки установленных пакетов достаточно выполнить:

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

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

После установки база файлов начнет создаваться ав-томатически, желательно посмотреть, каких файлов она не нашел. После этого редактируем файл политик /usr/local/etc/tripwire/twpol.txt. Изменять нужно две вещи: Так как мы хотим получать отчеты по email, то пос-

ле каждой строки severity нужно дописывать строку: emailto = [email protected].

Нужно закомментировать строки с файлами, которых у вас в системе нет.

После этого нужно создать файл политик:

Теперь осталось инициализировать tripwire:

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

Желательно прописать запуск tripwire в cron.Теперь установим еще одну полезную утилиту chkrootkit,

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

Проверить систему можно так:

Таким образом, отчет о проверке по почте придет к ад-министратору. Также советую прописать эту строку в cron. Единственная проблема, связанная с chkrootkit, заключа-ется в том, что программа написана на sh и как следствие может быть «переписана» взломщиком, поэтому желатель-но добавить проверку chkrootkit в tripwire.

ЗаключениеТаким способом мы улучшили безопасность системы в не-сколько раз: Установлен и настроен firewall. Настроен безопасный доступ к системе (OpenSSH). Увеличено количество информации, поступаемой

от системы.

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

$ ssh-keygen -t rsa -b 4096$ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

# cd /usr/ports/security/portaudit# make install clean

# /usr/local/sbin/portaudit -Fda

# cd /usr/ports/security/tripwire# make install clean

# twadmin --create-polfile twpol.txt

# tripwire --init

# tripwire --check

# cd /usr/ports/security/chkrootkit/# make install clean

# chkrootkit | mail root

# sshd_config_1 (Локальная сеть):

Port 22Protocol 2ListenAddress 172.16.0.1PermitRootLogin noPasswordAuthentication yesMaxStartups 2:90:5AllowGroups sshBanner /etc/motdSubsystem sftp /usr/libexec/sftp-server

# sshd_config_2 (Интернет):

AllowGroups sshBanner /etc/motdListenAddress 213.251.193.69LogLevel VERBOSEMaxStartups 2:90:5PasswordAuthentication noPermitRootLogin noPort 22Protocol 2Subsystem sftp /usr/libexec/sftp-serverSyslogFacility AUTH

*********************************************************

This is a private system!!! All connection attempts arelogged and monitored. All unauthorized connectionattempts will be investigated andhanded over to the proper authorities.

*********************************************************

Page 57: 043 Системный Администратор 06 2006
Page 58: 043 Системный Администратор 06 2006

56

безопасность

Пишем систему динамической защиты ресурсов сети

Аудит журналов безопасности операционной системы – неотъемлемая часть работы системного администратора. Если обнаружены попытки проникновения, на них необходимо немедленно отреагировать. Автоматизируем данный процесс с помощью сценария Perl.

Андрей Бирюков

Page 59: 043 Системный Администратор 06 2006

57№6, июнь 2006

безопасность

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

Однако иногда такая реакция может оказаться запозда-лой, особенно это касается попыток осуществления несан-кционированного входа в систему. Если какие-либо ресур-сы вашей сети (например, электронная почта, веб-сервер или доступ по протоколу SSH) опубликованы в Интернете, то вам наверняка приходилось наблюдать записи в протоко-лах, свидетельствующие о попытке осуществления несанк-ционированного доступа к ресурсам сети. Конечно, это по-пытки взлома с помощью «грубой силы» (brute force, подбор пароля по словарю), такой способ, как правило, не приносит результата. Хотя иногда начинающие хакеры с упорством, достойным лучшего применения, «натравливают» слова-ри на учетную запись root.

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

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

Существует масса решений, как программных, так и ап-паратных, получивших название Intrusion Detection System, IDS, системы обнаружения вторжения, которые позволяют выполнить данную задачу. Но зачастую они либо слишком громоздки в управлении, либо слишком дорого стоят.

Попробуем самостоятельно разработать простейшую IDS. В качестве инструментов будем использовать сцена-рии Perl под ОС Linux.

Как собираемся защищатьВ качестве основы для реализации я использовал сцена-рий, находящийся на cpan.org [1]. Идея довольно проста: че-рез определенные промежутки времени сканируется файл /var/log/messages. В случае обнаружения сообщений, ин-

формирующих о попытках несанкционированного доступа с определенного IP-адреса, по протоколу ssh в iptables до-бавляется строка, блокирующая получение пакетов с дан-ного адреса. Список заблокированных IP-адресов автор предлагает передавать в сообщениях syslog.

Обратите внимание на то, что перед запуском сценария необходимо создать iptables chain Block и поместить теку-щую конфигурацию iptables в файл /etc/sysconfig/iptables. Тут следует сразу отметить, что пример сценария (см. лис-тинг 1) ориентирован на использование в дистрибутивах Fedora/Red Hat. Для применения с другими дистрибути-вами Linux необходимо будет произвести небольшие из-менения.

Листинг 1. Сценарий, блокирующий атаки на ssh

#!/usr/bin/perl -wuse Sys::Syslog; # модуль для работы с syslog$max=10; # максимально разрешенное число попыток

# файл журнала, с которым мы и работаем$watchfile= '/var/log/messages';

# путь к iptables (для разных дистрибутивов Linux# он может различаться)$iptables= '/sbin/iptables';

# тоже iptables, но после сохранения изменений$iptables_save= '/sbin/iptables-save';

# исходные значения iptables$iptables_restore= '/sbin/iptables-restore';

# файл конфигураций iptables$cfgfile= '/etc/sysconfig/iptables';

open(LFILE, "<$watchfile"); # открываем лог на чтение

%tries=(); # количество попыток для IP%blocked=(); # уже заблокированных IP

# восстанавливаем конфигурацию, это нужно для того,# чтобы «устаревшие» IP-адреса не оставались запрещенными`$iptables_restore < $cfgfile`;

# получаем уже заблокированные IP-адреса из iptablesopen(IPTPIPE, "$iptables -L -v -n|");$blockChain=0;while (<IPTPIPE>){ $blockChain=1 if (/^Chain block \(\d+ references\)$/); next unless $blockChain; last if (/^$/ ); $blocked{$1}=1 if (/(\d+\.\d+\.\d+\.\d+)/);}close IPTPIPE;# преобразуем в строку$blk_ips=join(", ",keys(%blocked));# отправляем сообщение syslogsyslog('warning',"sshwatch.pl started. ↵ currently blocked ip's are: $blk_ips");

# просматриваем /var/log/messageswhile (1) { for ($curpos = tell(LFILE); $_ = <LFILE>; ↵ $curpos = tell(LFILE)) { # искомая строка if (/sshd\[\d+\]: Failed password for .+ ↵ from \D+(\d+\.\d+\.\d+\.\d+)/) { $ip=$1; next if defined($blocked{$ip}); $tries{$ip}+=1; #увеличиваем счетчик if ($tries{$ip} eq $max){ # если превышено максимальное значение, # пакеты с данного адреса должны быть заблокированы `$iptables -I block -s $ip -j DROP ; ↵ $iptables_save > $cfgfile`; $blocked{$ip}=1; # снова сообщение syslog syslog('warning', "IP $ip has been blocked !"); } }

Page 60: 043 Системный Администратор 06 2006

58

безопасность

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

Расширяем функциональностьПопробуем расширить функциональность сценария, напи-санного нашим коллегой.

Во-первых, допустим, у нас открыты наружу не только ssh, но и, к примеру, POP3.

И во-вторых, рассмотрим различные варианты пос-троения сети: как с использованием демилитаризован-ной зоны (DMZ), так и без нее. Суть DMZ заключается в том, что она не входит непосредственно ни во внутрен-нюю, ни во внешнюю сеть и доступ к ней может осущест-вляться только по заранее заданным правилам межсете-вого экрана. В DMZ нет пользователей – там располага-ются только серверы. Демилитаризованная зона, как пра-вило, служит для предотвращения доступа из внешней се-ти к хостам внутренней сети за счет выноса из локальной сети в особую зону всех сервисов, требующих доступа из-вне. Фактически получается, что эта зона будет являться отдельной подсетью с публичными адресами, защищен-ной (или отделенной) от публичных и корпоративных се-тей межсетевыми экранами.

При попытке получения доступа к почтовому ящику по протоколу POP3, в случае неверного указания логина/пароля получаем сообщение:

Здесь в качестве POP3-демона использовался qpopper, но и для других серверов вид сообщения будет аналоги-чен.

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

Также сценарий, предназначенный для защиты от подбо-ра протокола POP3, применялся на FreeBSD, поэтому вмес-то iptables воспользуемся утилитой ipfw, с помощью кото-

рой создаются правила фильтрации. Для запрета доступа у ipfw существуют директивы deny и reject.

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

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

Например, команда, добавляющая правило, которое запрещает доступ к нашему серверу 172.29.1.1 для атаку-ющего хоста 172.29.1.19, будет выглядеть следующим об-разом:

В отсутствии явно указанного индекса (положения пра-вила в списке), который присваивается каждому правилу, он будет присвоен автоматически, причем значение этого индекса будет на 100 больше чем номер самого последне-го правила, за исключением правила по умолчанию (име-ет номер 65535).

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

Можно, конечно, ограничиться только запретом tcp, но лучше, чтобы все выглядело, как будто сервер не просто недоступен, а выключен. Такого результата легче добить-ся, запретив любой IP-трафик. Вообще утилита ipfw обла-дает довольно большими возможностями, подробно озна-комиться с которыми можно в справочнике [2].

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

Листинг 2. Сценарий, блокирующий атаки на POP3

#!/usr/bin/perl -wuse Mail::Sendmail;

# максимально разрешенное число попыток$max=10;

# файл журнала, с которым мы и работаем$watchfile= '/var/log/messages';Рисунок 1. Размещение серверов в DMZ

ipfw add deny ip from 172.29.1.19 to 172.29.1.1

Apr 22 21:25:24 MexBSD qpopper[782]: [AUTH] Failed attempted login to admin from host (TestBSD) 172.29.1.19

} sleep 1; seek(LFILE, $curpos, 0);}

Page 61: 043 Системный Администратор 06 2006

59№6, июнь 2006

безопасность

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

Защита по периметруМы рассмотрели упрощенный случай топологии сети, когда у нас имеется сервер, не защищенный какими-либо допол-нительными аппаратными брандмауэрами, и единственной защитой для него являются те средства, которые на нем установлены. Но очень часто сеть имеет более сложную структуру. Ресурсы, доступ к которым необходим как из внутренней сети, так и из Интернета, помещают в демили-таризованную зону. Примерная топология сети на рис. 1. Рассмотрим случай, когда наш почтовый сервер находит-

ся в этой DMZ. Как уже упоминалось, к нему есть доступ из глобальной сети. При такой топологии лучше всего от-секать трафик атакующего еще на брандмауэре.

Будем предполагать, что в качестве межсетевого экра-на у нас используется оборудование Cisco, тогда для осу-ществления блокирования нам необходимо воспользовать-ся командами Cisco IOS.

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

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

В нашем случае необходимо лишь заблокировать тра-фик с конкретного хоста (2.2.2.2). Запись, которая осущест-вляет данные действия, мы разместим в начале нашего нового ACL. Реализовать все эти действия можно следу-ющим образом:

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

Изменения в конфигурацию внесены, остается только сохранить их и отключиться.

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

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

login as: userSent username "user"[email protected]'s password:Secure AccessType help or '?' for a list of available commands.

Password: ********

ipfw add deny ip from 172.29.1.19 to 172.29.1.1

pixfirewall# configure terminal

pixfirewall(config)# no access-list 110pixfirewall(config)# access-list 110 deny ip host 2.2.2.2 ↵ host 1.1.1.254pixfirewall(config)# access-list 110 permit ip 172.16.0.0 ↵ 0.0.255.255 1.1.1.0 0.0.0.255…pixfirewall(config)# end

pixfirewall# write mempixfirewall# logout

$ipfw= '/sbin/ipfw';

# то же ipfw но после сохранения изменений$ipfw_save= '/sbin/ipfw_save';

# исходные значения ipfw$ipfw_restore= '/sbin/ipfw-restore';

# файл конфигураций ipfw$cfgfile= '/etc/sysconfig/ipfw'

# открываем лог на чтениеopen(LFILE, "<$watchfile");

# количество попыток для IP%tries=();

# уже заблокированных IP%blocked=();

# восстанавливаем конфигурацию, это нужно для того,# чтобы «устаревшие» IP-адреса не оставались запрещенными`$ipfw_restore < $cfgfile`;`$ipfw list > out`;

# получаем уже заблокированные IP-адреса из iptablesopen(IPTPIPE, "out");$blockChain=0;while (<IPTPIPE>){ $blockChain=1 if (/^Chain block \(\d+ references\)$/); next unless $blockChain; last if (/^$/ ); $blocked{$1}=1 if (/(\d+\.\d+\.\d+\.\d+)/);}close IPTPIPE;

# просматриваем /var/log/messageswhile (1) { for ($curpos = tell(LFILE); $_ = <LFILE>; ↵ $curpos = tell(LFILE)) { # искомая строка if (/qpopper\[\d+\]: Failed attempted login to .+ ↵ from \D+(\d+\.\d+\.\d+\.\d+)/) { $ip=$1; next if defined($blocked{$ip}); $tries{$ip}+=1; #увеличиваем счетчик if ($tries{$ip} eq $max){ # если превышено максимальное значение, # пакеты с данного адреса должны быть заблокированы `$ipfw deny $ip; $ipfw_save > $cfgfile`; $blocked{$ip}=1; # отправляем письмо %mail = ( To => '[email protected]', From => '[email protected]', Message => "IP $ip has been blocked !", SMTP => 'smtp.mail.ru' );

sendmail(%mail) or die $Mail::Sendmail::error; } } } sleep 1; seek(LFILE, $curpos, 0);}

Page 62: 043 Системный Администратор 06 2006

60

безопасность

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

Автоматизируем запускПосле написания сценария нам необходимо автоматизи-ровать его работу. Сделаем это с помощью cron. По по-воду работы с данной утилитой и ее синтаксиса написа-но уже достаточно, поэтому приведу лишь несколько при-меров. Прежде всего рекомендовую не запускать сцена-рий слишком часто, по крайней мере не каждые пять ми-нут. Это связано с тем, что на активно работающем серве-ре, как правило, файл messages имеет весьма внушитель-ный размер, и поиск текстовых вхождений может сущест-венно нагрузить систему. К тому же слишком частые обра-щения к консоли сетевого оборудования тоже не очень же-лательны. Я бы рекомендовал запуск сценария каждый час. Задать выполнение сценария по такому расписанию мож-но следующим образом:

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

Использованные источники:1. http://cpan.org/authors/id/D/DR/DRAGOS/sshwatch-0.01.pl – ис-

ходный сценарий.2. Родерик Смит. Полный справочник по FreeBSD.3. Основы организации сетей Cisco. Справочное руководство.

@hourly /tmp/pop3watch.pl

use Net::Telnet ();use Mail::Sendmail;#!/usr/bin/perl -wuse Mail::Sendmail;

# максимально разрешенное число попыток$max=10;

# файл журнала, с которым мы и работаем$watchfile= '/var/log/messages';

# открываем лог на чтениеopen(LFILE, "<$watchfile");

# количество попыток для IP%tries=();

# уже заблокированных IP%blocked=();

# получаем доступ к консоли $t = new Net::Telnet ; $hostname="1.1.1.254"; $t->open($hostname); $t->waitfor('/login:.*$/') or die "bad login: ", $t->lastline; $t->print("user"); $t->waitfor('/Password:.*$/') or die "bad password: ", $t->lastline; $t->print("password"); $t->waitfor('/pixfirewall>:.*$/') or die "No user mode: ", $t->lastline; $t->print("enable"); $t->waitfor('/login:.*$/') or die "bad login: ", $t->lastline; $t->print("user"); $t->waitfor('/Password:.*$/') or die "bad password: ", $t->lastline; $t->print("password"); $t->waitfor('/pixfirewall#:.*$/') or die "No router privilege mode: ", $t->lastline; $t->print("configure terminal"); $t->waitfor('/# pixfirewall(config):.*$/') or die "No router configure mode: ", $t->lastline; $t->print("no access list 110");

# просматриваем /var/log/messageswhile (1) { for ($curpos = tell(LFILE); $_ = <LFILE>; ↵ $curpos = tell(LFILE)) { # искомая строка if (/sshd\[\d+\]: Failed password for .+ ↵ from \D+(\d+\.\d+\.\d+\.\d+)/) { $ip=$1; next if defined($blocked{$ip}); $tries{$ip}+=1; # увеличиваем счетчик if ($tries{$ip} eq $max){ # если превышено максимальное значение, # пакеты с данного адреса должны быть заблокированы $blocked{$ip}=1; # добавляем в список доступа запись о запрете # доступа с IP $t->waitfor('/# pixfirewall(config):.*$/') or die "No router configure mode: ", ↵ $t->lastline; $t->print("access list 110 deny ip host ↵ $ip host 1.1.1.254"); # отправляем письмо %mail = ( To => '[email protected]', From => '[email protected]', Message => "IP $ip has been blocked !", SMTP => 'smtp.mail.ru' ); sendmail(%mail) or die $Mail::Sendmail::error; } } } sleep 1; seek(LFILE, $curpos, 0);}$t->waitfor('/# pixfirewall(config):.*$/') or die "No router configure mode: ", $t->lastline; $t->print("access list 110 permit ….");…# здесь добавляем другие записи в список доступа

$t->waitfor('/# pixfirewall(config):.*$/')

or die "No router configure mode: ", $t->lastline; $t->print("end");$t->waitfor('/# pixfirewall#:.*$/') or die "No router configure mode: ", $t->lastline; $t->print("write mem");$t->waitfor('/# pixfirewall#:.*$/') or die "No router configure mode: ", $t->lastline; $t->print("logout"); $result=$t->getline;

Page 63: 043 Системный Администратор 06 2006

61№6, июнь 2006

bugtraq

SQL-инъекция в PostgreSQLПрограмма: PostgreSQL, ветки 7.3, 7.4, 8.0 и 8.1.Опасность: Средняя.Описание: Уязвимость существует при обработке SQL-строк, содержащих мультибайтные символы. Удаленный пользователь может с помощью специально сформирован-ного запроса выполнить произвольные SQL-команды в ба-зе данных приложения.URL производителя: www.postgresql.org.Решение: Установите исправление с сайта производите-ля.

Целочисленное переполнение буфера в FreeTypeПрограмма: FreeType 2.2, возможно, более ранние версии.Опасность: Средняя.Описание: Целочисленное переполнение буфера сущест-вует из-за ошибки в функции read_lwfn() файла src/base/ftmac.c. Удаленный пользователь может вызвать перепол-нение динамической памяти с помощью специально сфор-мированного LWFN-файла и выполнить произвольный код на целевой системе.URL производителя: www.freetype.org.Решение: Установите последнюю версию (2.2.1) с сайта производителя.

Переполнение буфера в Novell eDirectoryПрограмма: Novell eDirectory 8.8.Опасность: Средняя.Описание: Уязвимость существует из-за неизвестной ошибки в iMonitor. Подробности уязвимости неизвестны.URL производителя: www.novell.com/products/edirectory.Решение: Установите исправление с сайта производите-ля.

Обход аутентификации в Sun Java System Directory ServerПрограмма: Sun Java System Directory Server 5.2.Опасность: Средняя.Описание: Уязвимость существует из-за неизвестной ошибки в процессе инсталляции. Удаленный пользователь может получить административный доступ к приложению.URL производителя: www.sun.com.Решение: Следуйте инструкциям производителя.

Составил Александр Антипов

Обход ограничений безопасности в IBM WebSphere Application ServerПрограмма: IBM WebSphere Application Server 6.0.2, вер-сии до Fix Pack 3.Опасность: Средняя.Описание: Уязвимость существует из-за отсутствия необ-ходимого ограничения на доступ к страницам приветствия. Удаленный пользователь может с помощью специально сформированного запроса получить доступ к защищенным страницам приветствия приложения. Пример:1. http://ServerHost/webapp_context/homepage.jsp – будет

запрошен пароль на доступ к странице.2. http://ServerHost/webapp_context/ – удаленный поль-

зователь получит доступ к запрещенной странице homepage.jsp.

URL производителя: www-306.ibm.com/software/webservers/appserv/was.Решение: Установите последнюю версию 6.0.2 Fix pack 3 (6.0.2.3) или выше, с сайта производителя.

Переполнение буфера в DPRPCW32.DLL в клиенте NovellПрограмма: Novell Client 4.83 SP3, 4.90 SP2 и 4.91 SP2 для Windows 2000/XP/2003.Опасность: Средняя.Описание: Уязвимость существует из-за ошибки провер-ки границ буфера в библиотеке DPRPCW32.DLL. Подроб-ности уязвимости не сообщаются.URL производителя: www.novell.com/products/clients.Решение: Установите исправление с сайта производите-ля.

Переполнение буфера и раскрытие данных в MySQLПрограмма: MySQL 4.1.18 и более ранние версии, MySQL 5.0.20.Опасность: Средняя.Описание: 1. Уязвимость существует из-за недостаточной обработки данных в команде COM_TABLE_DUMP. Удален-ный пользователь может с помощью специально сформиро-ванного пакета получить доступ к важным данным на сис-теме (к частям запросов или результатам их выполнения другими пользователями).

2. Переполнение стека обнаружено в команде COM_TABLE_DUMP. Удаленный пользователь может послать сер-веру специально сформированную последовательность COM_TABLE_DUMP-пакетов и вызвать отказ в обслужива-нии или выполнить произвольный код на целевой системе.URL производителя: www.mysql.com.Решение: Установите последнюю версию (4.1.19 или 5.0.21) с сайта производителя.

Отказ в обслуживании в SCTP Netfilter в ядре LinuxПрограмма: Linux kernel, версии до 2.6.16.13.Опасность: Средняя.Описание: Уязвимость существует из-за отсутствия про-верки размера SCTP в коде SCTP-netfilter. Удаленный поль-зователь может вызвать зацикливание приложения и пот-ребить все доступные ресурсы на системе.URL производителя: www.kernel.org.Решение: Установите последнюю версию ядра (2.6.16.13) с сайта производителя.

Page 64: 043 Системный Администратор 06 2006

62

безопасность

Протекторы типа Themida (в «де-вичестве» eXtreme Protector) и Star-Force, которыми защи-

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

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

чем. А ведь приходится! Как странно устроен мир.

Простые случаи дампингаПредставим себе, что распаковщик уже отработал, программа остановле-на в оригинальной точке входа (OEP) и мы готовы сохранить образ файла (file image) на диск, то есть сбросить дамп. Отладчик soft-ice не предостав-ляет такой возможности, поэтому при-ходится действовать обходным путем..

Техника снятия дампа с защищенных приложений

Крис Касперски

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

Page 65: 043 Системный Администратор 06 2006

63№6, июнь 2006

безопасность

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

Базовый адрес загрузки (hMod base) располагает-ся по адресу 400000h. Последняя секция (.data) начина-ется с адреса 406000h и продолжается вплоть до адреса (406000h + 1DE8h) == 407DE8h. Таким образом, нам необхо-димо сохранить 7DE8h байт памяти, начиная с 400000h. Но в soft-ice такой команды нет! Зато есть «история команд». Даем команду «DB 400000 L 7DE8», выходим из отладчи-ка, запускаем symbol loader и «говорим»: «file → save soft-ice history as» (при этом размер самой истории должен быть предварительно увеличен хотя бы до 30 МБ: «edit → soft-ice initialization setting → history buffer size»). В результате обра-зуется текстовый файл (см. листинг 2), который необходи-мо преобразовать в exe, для чего потребуется написать спе-циальную утилиту или поискать уже готовую.

Как вариант, можно воспользоваться бесплатным пла-гином IceExt (http://stenri.pisem.net), значительно расширя-ющим функциональные возможности soft-ice. Если IceExt откажется запускаться, увеличьте размер кучи и стека до 8000h байт, отредактировав следующую ветвь реестра HKLM\SYSTEM\CurrentControlSet\Services\NTice.

Команда !DUMP (см. рис. 2 и листинг 3) позволяет со-хранять блоки памяти на диск в двоичном виде, что очень удобно:

Другой плагин — icedump (programmerstools.org/system/files?file=icedump6.026.zip) тоже умеет дампить память, и так же, как и IceExt, он распространяется на бесплатной основе вместе с исходными текстами.

Полученный дамп можно загрузить в дизассемб-лер типа IDA Pro, но от его запуска лучше воздержать-ся (особенно на соседних компьютерах), поскольку для корректной работы необходимо восстановить табли-цу импорта и ресурсы, но это настолько обширный воп-рос, что здесь мы не будем его касаться, тем более что существуют готовые утилиты: Import Reconstructor (http://www.wasm.ru/baixado.php?mode=tool&id=64) восстановит импорт, а Resource Rebuilder (http://www.wasm.ru/baixado.php?mode=tool&id=156) – ресурсы.

Для отладчика OllyDbg существует плагин OllyDump (http://dd.x-eye.net/file/ollydump300110.zip) со встроенным реконструктором таблицы импорта (см. рис. 3).

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

Листинг 1. Определение дислокации модуля в памяти. Здесь «test_dump» — имя процесса, с которого мы собираемся снять дамп (soft-ice отображает его в правом нижнем углу)

# определяем базовый адрес загрузки модуля в память:MOD test_dump

# смотрим на карту модуля в памяти:MAP32 test_dump

hMod Base PEHeader Module Name File Name00400000 004000D0 test_dum \TEMP\test_dump.exe

Owner Obj Name Obj# Address Size Typetest_dump text 0001 001B:00401000 00003B46 CODE ROtest_dump rdata 0002 0023:00405000 0000080E IDATA ROtest_dump .data 0003 0023:00406000 00001DE8 IDATA RW

Рисунок 1. Определение региона памяти для снятия дампа

Листинг 2. Дамп памяти, снятый через history

:db 400000 L 7DE8

010:00400000 4D 5A 90 00 03 00 00 00-04 00 00 00 FF FF 00 00 MZР.............010:00400010 B8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00 [email protected]:00400040 0E 1F BA 0E 00 B4 09 CD-21 B8 01 4C CD 21 54 68 ........!..L.!Th010:00400050 69 73 20 70 72 6F 67 72-61 6D 20 63 61 6E 6E 6F is program canno010:00400060 74 20 62 65 20 72 75 6E-20 69 6E 20 44 4F 53 20 t be run in DOS010:00400070 6D 6F 64 65 2E 0D 0D 0A-24 00 00 00 00 00 00 00 mode....$....... Рисунок 2. Снятие дампа в soft-ice с помощью плагина IceExt

Листинг 3. Дамп памяти, снятый командой !DUMP плагина IceExt

:!DUMP

Dump memory to disk!dump FileName Addr LenEx: !dump c:\dump.dat 400000 1000 !dump \??\c:\dump.dat 400000 1000 !dump \??\c:\dump.dat edx+ebx ecx

:!DUMP C:\dumped 400000 7DE8

DUMP: \??\C:\dumped 400000 7de8

Page 66: 043 Системный Администратор 06 2006

64

безопасность

затем появился Lord PE, учитывающий горький опыт своего предшественника и способный сохранять дамп даже в тех случаях, когда PE-заголовок умышлен-но искажен защитной, а доступ к некото-рым страницам памяти отсутствует (ат-рибут PAGE_NOACCESS). Венцом эво-люции стал PE-TOOLS (см. рис. 4), с ко-торым мы и будем работать. Базовый комплект поставки можно найти прак-тически на любом хакерском сервере, например, на WASM (http://www.wasm.ru/baixado.php?mode=tool&id=124) или на CrackLab (http://www.cracklab.ru/download.php?action=get&n=MTU1), а свежие обновления лежат на «род-ном» сайте проекта http://neox.iatp.by, кстати говоря, уже несколько раз по-менявшим свой адрес (по непонятым причинам базовый пакет на нем от-сутствует).

Если мы работаем с отладчиком прикладного уровня (типа OllyDbg) и стоим в OEP, то снять дамп с програм-мы очень просто. Достаточно переклю-читься на PE-TOOLS, выбрать нужный процесс в списке и сказать «dump full», однако, с отладчиками уровня ядра (soft-ice, Microsoft Kernel Debugger) этот номер не проходит и тут приходится хитрить. Запоминаем (в голове или на бумажке) первые два байта от начала OEP и записываем сюда EBFEh, что соответствует машинной инструкции JMP short $-2, зацикливающей про-цесс. Теперь можно смело выходить из отладчика, идти в PE-TOOLS, снимать

ные выше, всецело опираются на PE-заголовок и таблицу секций, использу-емую операционной системой практи-чески только на стадии загрузки фай-ла. В частности, нас интересуют по-ля ImageBase (адрес базовой загруз-ки), SizeOfImage (размер образа) и со-держимое таблицы секций. Протекто-ры любят затирать эти поля после за-вершения распаковки или подсовы-вать заведомо некорректные значения. Дамперы первого поколения от этого «сходили с ума», но PE-TOOLS в боль-шинстве случаев восстанавливает не-достающую информацию самостоя-тельно, но иногда он все-таки не сра-батывает. И что тогда?

Самое простое – исследовать карту памяти подопытного процесса, возвра-щаемую API-функциями VirtualQuery/VirtualQueryEx. Регионы, помеченные как MEM_IMAGE, принадлежат испол-няемому файлу или одной из исполь-зуемых им DLL (в PE-TOOLS за пост-роение карты отвечает команда «dump region» (см. рис. 5)).

Активные защиты могут перехваты-вать эти функции, подсовывая подлож-ные данные, и тогда приходится спус-каться на один уровень вглубь, обра-щаясь к функции NtQueryVirtualMemory, которая, как и следует из ее названия, существует только в NT-подобных опе-рационных системах и экспортируется библиотекой NTDLL.DLL, но в некото-рых случаях перехватывается и она, вы-нуждая нас обращаться к функции NtQuerySystemInformation. Долгое время она оставалась совершенно недокументи-рованной и многие протекторы о сущес-твовании подобной лазейки даже и не подозревали. Теперь же ее описание доступно на MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/ntquerysysteminformation.asp, c грозным предупреждением, что поведение функции может изме-ниться в любой новой версии, а потому в долгосрочных продуктах на нее луч-ше не закладываться.

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

дамп и восстанавливать оригинальные байты в любом hex-редакторе.

Обыкновенные упаковщики (типа UPX) не сопротивляются снятию дампа, поскольку борьба с хакерами в их зада-чу не входит. Иное дело – протекторы. Фактически это те же самые упаковщи-ки, но снабженные целым арсеналом систем, противодействующих взло-му. Защитные методики можно разде-лить на активные и пассивные. К пас-сивным относятся все те, что работа-ют только на стадии распаковки и не вмешиваются ни в саму программу, ни в операционную систему. Активные – перехватывают API-функции внутри адресного пространства защищаемо-го процесса или даже устанавливают специальный драйвер, модифицирую-щий ядро операционной системы та-ким образом, что прямое снятие дампа становится невозможным. Очевидным побочным эффектом активных защит ставится их неуживчивость с новыми версиями Windows, зачастую приво-дящая к краху операционной систе-мы. Печальнее всего то, что, запуская setup.exe, мы даже и не подозреваем, что там может оказаться, да и далеко не все протекторы поддерживают кор-ректурную деинсталляцию...

В поисках самого себяСнятие дампа начинается с определе-ния региона памяти, принадлежаще-го исполняемому файлу (или динами-ческой библиотеке). Приемы, описан-

Рисунок 3. Снятие дампа в OllyDbg с помощью плагина OllyDump

Page 67: 043 Системный Администратор 06 2006

65№6, июнь 2006

безопасность

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

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

Дамп извнеПрежде чем читать адресное пространство чужого про-цесса, до него еще предстоит добраться. Windows изоли-рует процессы друг от друга на случай непреднамеренно-го удара по памяти (который сильно досаждал пользовате-лям Windows 3.x), но предоставляет специальный набор API-функций для межпроцессорного взаимодействия. Класси-ческий путь: получаем обработчик процесса, который мы собрались дампить вызовом OpenProcess и передаем его функции ReadProcessMemory вместе с остальными парамет-рами (откуда и сколько байт читать). При этом необходимо учитывать, что некоторые страницы могут быть помечены защитой как недоступные и перед обращением к ним необ-ходимо вызвать функцию VirtualProtectEx, разрешив полный доступ (PAGE_EXECUTE_READWRITE) или, по крайней мере, открыв страницы только на чтение (PAGE_READONLY).

Естественно, функции OpenProcess/ReadProcessMemory/VirtualProtectEx могут быть перехвачены защитой, и тог-да вместо дампа мы получим error, а то и reboot. Низко-уровневые функции NtOpenProcess/NtReadVirtualMemory/NtProtectVirtualMemory перехватываются с той же легко-стью, к тому же некоторые защиты изменяют маркер безо-пасности процесса, запрещая открытие его памяти на чте-ние даже администратору!

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

Чтобы читать память процесса напрямую, драйвер дол-жен к нему подключиться, вызвав функцию KeAttachProcess или ее современный аналог KeStackAttachProcess, поя-вившийся и впервые документированный в Windows 2000. Пользоваться обеими функциями следует с величайшей осторожностью и прежде, чем подключаться к другому процессу, необходимо отсоединиться от текущего, вызвав KeDetachProcess/KeStackDeattachProcess. Однако эти функ-

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

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

Специальный плагин к PE-TOOLS (http://neox.iatp.by/eXtremeDumper.zip, http://www.wasm.ru/pub/21/files/dumping/eXtremeDumper.rar), написанный MS-REM, пробивается к процессу через следующую цепочку сервисных вызовов PsLookupProcessByProcessId → ObOpenObjectByPointer → ObDereferenceObject, которую пока еще никто не перехваты-вает, что позволяет снимать дамп даже с очень сильно защи-щенных программ, однако, сколько этот способ еще продер-жится, сказать невозможно. Создатели протекторов не си-дят сложа руки и на хакерских форумах тоже бывают.

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

Рисунок 4. Внешний вид утилиты PE-TOOLS

Рисунок 5. Просмотр карты памяти в PE-TOOLS

Page 68: 043 Системный Администратор 06 2006

66

безопасность

емых Microsoft. Для работы с ними понадобится библио-тека dbghelp.dll из комплекта Debugging Tools (http://www.microsoft.com/whdc/devtools/debugging/default.mspx) и ути-лита symchk.exe, взятая оттуда же.

Функция KiSwapProcess – это одна из самых низкоуров-невых функций, напрямую работающих с регистром CR3, в который заносится указатель на каталог страниц выбран-ного процесса, после этого его адресное пространство можно читать как свое собственное машинной командой MOVSD, в грубом приближении представляющий собой аналог memcpy. Предвидя такой исход событий, некоторые защиты пошли на отчаянный шаг: перехватив SwapContext и ряд других функций, работающих с CR3, они стали раз-рушать каталог страниц «своего» процесса на время пере-ключения контекстов и вновь восстанавливать его, когда в нем возникает необходимость. Настоящее варварство! Обращение к каталогу страниц происходит из десятков не-документированных функций, которые в каждой версии яд-ра реализованы по своему. А это значит, что такая агрес-сивная защитная политика рискует «свалиться» в сплош-ной BSOD, не оставляющий пользователю никаких шансов для нормальной работы!

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

Механизмы динамической расшифровкиАлгоритм динамической расшифровки, реализованный в протекторе Armadillo и известный под именем CopyMem, в общих чертах выглядит так: защита порождает отла-дочный процесс, передавая функции CreateProcess в ка-честве имени нулевой аргумент командной строки, «бла-годаря» чему в диспетчере задач отображаются две ко-пии запущенной программы. Одна из них – сервер (ус-ловно), другая – клиент. Сервер посредством функции VirtualProtectEx делает все страницы клиента недоступ-ными (атрибут PAGE_NOACCESS) и передает ему управ-ление, ожидая отладочных событий с помощью функции WaitForDebugEvent, а события долго ждать себя не застав-ляют и при первой же попытке выполнения кода в недо-ступной странице возбуждается исключение, передающее серверу бразды правления. Сервер расшифровывает теку-щую страницу, взаимодействуя с клиентом посредством API-функций ReadProcessMemory/WriteProcessMemory, ус-танавливает необходимые атрибуты доступа и возвраща-ет клиенту управление.

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

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

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

реже – прямое воздействие на регистры и память (при этом краденые инструкции трансформируются в псевдокод и в явном виде нигде не сохраняются). Суть в том, что в точке входа распакованного образа ори-гинальных байт уже не оказывается и сня-тый дамп становится неработоспособным. К нашему счастью, подавляющее боль-шинство программ начинается со старто-вого кода, который является частью библи-отеки времени исполнения (RTL), поставля-емой вместе с компиляторами. Используя оставшийся «хвост» стартового кода, мы легко отождествим компилятор и восста-новим краденые байты из его библиотеки. Если же данного компилятора в нашем рас-поряжении не окажется, первые несколь-ко байт стартового кода в 9 из 10 случаев вполне предсказуемы, и зачастую их уда-ется восстановить самостоятельно (естес-твенно, для этого необходимо иметь опыт работы с различными RTL). Кстати, IDA Pro распознает компилятор именно по первым байтам стартового кода, и, если они отсутс-твуют или искажены, механизм FLIRT рабо-тать не будет. Это значит, что мы останем-ся без имен библиотечных функций и про-цесс дизассемблирования займет намно-го больше времени.

Полиморфный мусор в OEP. Вместо того чтобы красть байты с OEP, некоторые протекторы предпочитают модифициро-вать стартовый код, разбавляя значимые инструкции бессмысленным полиморфным мусором. Это никак не влияет на работос-пособность снятого дампа, но ослепляет «FLIRT», вынуждая нас либо вычищать по-лиморфный мусор, либо определять версию компилятора «на глазок», загружая сигна-туры вручную (IDA Pro это позволяет).

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

Page 69: 043 Системный Администратор 06 2006

67№6, июнь 2006

безопасность

Потребность в отладочном процессе-сервере объясня-ется тем, что по другому ловить исключения на прикладном уровне просто не получается. А как же механизм структур-ных исключений или, сокращенно, SEH? Регистрируем свой собственный обработчик и ловим исключения, что называ-ется по месту возникновения. Это избавляет нас от API-вы-зовов, обеспечивающих межпроцессорное взаимодействие, которые элементарно перехватываются хакером. Увы! Ес-ли защищаемое приложение использует SEH (а подавля-ющее большинство приложений его используют), наш об-работчик окажется перекрыт другим. Столкнувшись с «на-шим» исключением, он попросту не будет знать, что с ним делать, и с вероятностью, близкой к единице, просто завер-шит приложение в аварийном режиме.

Теоретически установку нового обработчика легко отсле-дить, установив аппаратную точку останова по доступу к па-мяти на адрес FS:[00000000h]. Операционные системы се-мейства NT позволяют прикладным приложениям манипули-ровать с отладочными регистрами через контекст, причем от-ладочный регистр действует лишь в рамках «своего» процес-са, не мешая работать всем остальным, но 9x «забывает» со-хранять отладочные регистры в контексте «своего» процесса, и они приобретают глобальный характер, воздействующий на все процессы! Так что в ней этот трюк не проходит.

А вот другой способ: устанавливаем драйвер, пере-хватывающий исключения на уровне IDT и взаимодейст-вующий со своим процессом либо через DeviceIoControl, либо через NtReadVirtualMemory/NtWriteVirtualMemory/KeDeattachProcess/KeAttachProcess. Это вполне надежно,

однако написание драйверов – занятие утомительное и сов-сем небезопасное в плане «голубых экранов смерти». К то-му же разработчику защиты придется либо наотрез отказы-ваться от поддержки 9x (которая все еще жива!), либо реали-зовывать сразу два драйвера! Тем не менее защиты такого типа все-таки встречаются. Независимо от того, как проис-ходит обработка исключения, сломать такую защиту очень просто! Читаем первую страницу, дожидаемся завершения расшифровки, сохраняем ее на диск, обращаемся к следу-ющей странице и... действуем так до тех пор, пока в наших руках не окажется весь образ целиком. Стоит только внед-рить код дампера в адресное пространство защищенного процесса… и протектору будет очень сложно отличить об-ращения самой программы от обращений дампера.

Последние версии протектора Armadillo, недавно пере-именованного в Software Passport, реализуют намного более надежный, хотя и чрезвычайно низко производительный ме-ханизм трассирующей расшифровки, при котором весь код программы зашифрован целиком. Сервер трассирует кли-ента, расшифровывая по одной инструкции за раз (преды-дущая инструкция при этом зашифровывается). Снять дамп тупым обращением к памяти уже не получается, поскольку защиту интересуют только исключения, возникающие при исполнении. Все, что мы можем, это «вклиниться» между зашифрованным приложением и расшифровщиком, «кол-лекционируя» расшифрованные инструкции, образующие трассу потока выполнения. Поскольку, достичь 100% пок-рытия кода практически невозможно, полученный дамп бу-дет неполноценным, но тут есть один маленький нюанс. По-

Помимо создания переходников некоторые функции копируются протектором целиком! Подробнее об этом приеме можно прочитать в статье «Точки останова на win32 API и про-тиводействие им» – раздел «Копирование API – функций целиком», которая находит-ся на http://kpnc.opennet.ru/adt.zip.

Замена jx с последующей эмуляци-ей. При «отвязке» программ от протектора Armadillo самое сложное – это восстановле-ние оригинального кода программы. Защи-та дизассемблирует обрабатываемый файл, находит в нем условные и безусловные пе-реходы, записывает поверх них команду INT 03h, а сам переход сохраняется в сво-ей внутренней таблице переходов. Процесс-сервер перехватывает исключение, возбуж-даемое инструкцией INT 03, «смотрит», от-куда оно пришло, извлекает из таблицы со-ответствующий этому адресу переход и эму-лирует его выполнение с помощью арифме-тических манипуляций с регистром флагов (то есть в явном виде переходы нигде не хра-нятся!). Вот три главных минуса такого ре-шения: во-первых, нет никакой гарантии, что защита правильно дизассемблирует об-рабатываемую программу и не спутает пе-реход с другой командой; во-вторых, эмуля-ция требует времени, существенно снижая

производительность и, наконец, в-третьих, от взлома это все равно не спасает! Дизас-семблировав эмулятор переходов (а дизас-семблировать его несложно) и обнаружив таблицу переходов, хакер в считанные мину-ты напишет скрипт для IDA Pro или OllyDbg, удаляющий все INT 03 и восстанавлива-ющий оригинальные переходы. Сущест-вует даже полуавтоматический взломщик Armadillo, написанный двумя богами распа-ковки – infern0 и dragon (http://www.wasm.ru/baixado.php?mode=tool&id=220), в следу-ющих версиях которого обещана полная автоматическая распаковка и дезактива-ция Armadillo.

Преобразование в байт-код. Протек-торы Themida и Start-Force позволяют пре-образовывать часть машинного кода за-щищаемой программы в язык виртуаль-ной машины, то есть в байт-код (также на-зываемый p-кодом). Если виртуальная ма-шина глубоко «вживлена» внутрь протек-тора, то отломать защиту, не «умертвив» при этом приложение, становится прак-тически невозможно, как невозможно не-посредственно дизассемблировать байт-код. По меньшей мере для этого необхо-димо разобраться с алгоритмом работы виртуальной машины и написать специ-

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

Page 70: 043 Системный Администратор 06 2006

68

безопасность

командная расшифровка не может использовать ни блоч-ные, ни контекстно-зависимые криптоалгоритмы, посколь-ку трассирующий расшифровщик никогда не знает наперед, какая инструкция будет выполнена следующей. Остаются только потоковые алгоритмы типа XOR или RC4, которые очень легко расшифровать – стоит только найти гамму, кото-рую протектор, несмотря ни на какие усилия, слишком глубо-ко запрятать все равно не сможет! Естественно, полностью автоматизировать процесс снятия дампа в этом случае уже не удастся и придется прибегнуть к дизассемблированию, а быть может, даже к отладке. К счастью, подобные схемы защиты не получили широкого распространения и навряд ли получат его в обозримом будущем. Трассировка замед-ляет скорость работы приложения в десятки раз, в резуль-тате чего оно становится неконкурентоспособным.

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

Классический способ внедрения кода реализуется так: открываем процесс функцией OpenProcess, выделяем блок памяти вызовом VirtualAllocEx, копируем код дампера через WriteProcessMemory, а затем либо создаем удаленный по-ток функцией CreateRemoteThread (только на NT-подобных системах), либо изменяем регистр EIP в контексте чужого

потока, обращаясь к SetThreadContext (действует на всех системах). Естественно, предыдущий EIP должен быть со-хранен, а сам поток – остановлен.

Постойте! Но ведь это мало чем отличается от обыч-ного межпроцессорного взаимодействия! Функции NtAllocateVirtualMemory/NtSetContextThread/NtCreateThread любая защита перехватит со смаком! (Никакой ошибки тут нет, API-функция CreateRemote Thread в действительнос-ти представляет собой «обертку» вокруг ядерной функ-ции NtCreateThread.)

Хорошо, вот другой классический путь. Помещаем дам-пер в DLL и прописываем ее в HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs, в ре-зультате чего она будет отображаться на все процессы, ка-кие только есть в системе, и перед передачей управления на очередной запускаемый процесс первой получит управ-ление наша DLL! К сожалению, об этой ветке знают не толь-ко протекторы, но и другие программы (антивирусы, персо-нальные брандмауэры) и следят за ней. Наша запись мо-жет быть удалена еще до того, как дампер приступит к ра-боте! Если же ему все-таки удастся получить управление, первое, что он должен сделать, – выделить себе блок па-мяти внутри процесса, скопировать туда весь необходи-мый код и вернуть ветку AppInit_DLLs в исходное состоя-ние. Поскольку дампер получает управление еще до того, как защита начнет работать, она никак не сможет обнару-жить, что здесь кто-то уже побывал.

Исключение составляют активные защиты резидент-ного типа, постоянно присутствующие в системе даже ес-

Page 71: 043 Системный Администратор 06 2006

69№6, июнь 2006

безопасность

ли защищаемый файл не был запущен. Но в этом случае они сталкиваются со следующей проблемой – как отли-чить «свой» процесс от всех остальных? По имени фай-ла? Это не слишком надежно… Лучше использовать «мет-ку» – уникальное сочетание байт по определенному адре-су. С такими защитами справиться очень сложно, но все-таки возможно. Перепробовав несколько вариантов, ав-тор остановился на следующем алгоритме, который об-ходит все существующие на сегодняшний день активные и пассивные защиты: Копируем оригинальный файл (с защитой) в tmp.tmp. Открываем оригинальный файл в hiew, переходим в точ-

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

обычно подгружаемое с диска (динамическую биб-лиотеку лучше не загружать, поскольку некоторые защиты контролируют список DLL и если вызов идет из неизвестной динамической библиотеки, расцени-вают это как вторжение);

устанавливает таймер через API-функцию SetTimer с таким расчетом, чтобы процедура дампера полу-чила управление, когда весь код будет полностью распакован или, в случае с CopyMem, когда защи-та успеет установить отладочный процесс (конечно, снять дамп в OEP в этом случае уже не получится, но даже такой дамп лучше, чем совсем ничего);

переименовывает оригинальный файл (тот, что ис-полняется в данный момент!) в tmp.xxx, а файлу tmp.tmp возвращает оригинальное имя;

вычищает себя из памяти, восстанавливает EP и пе-редает управление защищенной программе;

если активная защита охраняет свой файл, опозна-вая его по сигнатуре, используем какой-нибудь бе-зобидный упаковщик с «нулевым побочным эффек-том» типа UPX, при этом все вышеуказанные дейст-вия следует выполнять на отдельной заведомо «сте-рильной» машине;

Запускаем модифицированный файл на выполнение.

Таким образом, защита не сможет обнаружить измене-ний ни в файле, ни в памяти (при попытке определения име-ни текущего файла операционная система будет возвра-щать то имя файла, какое он имел на момент запуска, иг-норируя факт его «онлайнового» переименования). Но это слишком громоздкий и навороченный алгоритм, к тому же активной защите ничего не стоит перехватить SetTimer и за-претить установку таймера внутри «своего» процесса до за-вершения распаковки/передачи управления на OEP.

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

от дампера. Защита может распознать факт внедрения чужой DLL в адресное пространство охраняемого ее про-цесса, но откуда ей знать, что эта DLL делает?! Можно, ко-нечно, просто выгрузить ее из памяти (или воспрепятство-вать загрузке), но какому пользователю понравится, что ле-гально приобретенная программа конфликтует с его кру-той клавиатурой, мышью или другим устройством? Так что SetWindowsHookEx при всей своей незатейливости – до-вольно неплохой выбор для хакера!

Самый радикальный способ внедрения в чужое адрес-ное пространство – это правка системных библиотек, та-ких как KERNEL32.DLL или USER32.DLL. Править можно как на диске, так и в памяти, однако в последнем случае защита может легко разоблачить факт вторжения прос-тым сравнением системных библиотек с их образом. Внед-рившись в системную библиотеку, не забудьте скорректи-ровать контрольную сумму в PE-заголовке, иначе NT от-кажется ее загружать. Сделать это можно как с помощью PE-TOOLS, так и утилитой rebuild.exe, входящей в состав SDK. Внедряться лучше всего в API-функции, вызываемые стартовым кодом оригинального приложения (GetVersion, GetModuleHandleA и т. д.), определяя «свой» процесс функ-цией GetCurrentProcessId или по содержимому файла (пос-леднее – надежнее, т. к. GetCurrentProcessId может быть пе-рехвачена защитой, которая очень сильно «удивится», если API-функция GetVersion неожиданно заинтересуется иден-тификатором текущего процесса). Во избежание побочных эффектов запускать такой дампер следует на «выделен-ной» операционной системе, специально предназначен-ной для варварских экспериментов и обычно работающей под виртуальной машиной типа BOCHS или VMWare.

ЗаключениеПравильно спроектированная и должным образом реали-зованная защита должна препятствовать нелегальному ис-пользованию программы, но не имеет ни морального, ни юри-дического права мешать честным пользователям и уж тем более вторгаться в операционную систему, производя никем не санкционированные изменения. Последние версии про-текторов Themida и Software Passport вплотную приближа-ются к rootkit. Еще немного и они превратятся в настоящие вирусы, создание которых преследуется по закону.

Полезные ссылки:1. Современные технологии дампинга и защиты от него. От-

личная статья от создателя eXtremeDumper доступно расска-зывающая о том, как протекторы защищаются от снятия дам-па, и объясняющая, как эти защиты обойти (на русском язы-ке): http://www.wasm.ru/article.php?article=dumping.

2. Об упаковщиках в последний раз. Объемный труд, создан-ный коллективом лучших отечественных хакеров во главе с легендарным Володей и охватывающий все аспекты рабо-ты упаковщиков, протекторов и самой операционной систе-мы (на русском языке): http://www.wasm.ru/article.php?article =packlast01 (первая часть); http://www.wasm.ru/article.php? article=packers2 (вторая часть).

3. Касперски К. Генная инженерия на службе распаковки PE-фай-лов. – Журнал «Системный администратор», №5, май 2006 г. – 58-68 с.

Page 72: 043 Системный Администратор 06 2006

70

образование

Любой из вас знает, насколько быстро развивается область ин-формационных технологий. Про-

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

структуру предприятия и постоянно следовать небезызвестному лозунгу «Учиться, учиться и еще раз учиться!» Это прекрасно понимают и производи-тели программного обеспечения.

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

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

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

Первый раз в Linux-класс!

Когда идет речь о повышении квалификации IT-специалистов, в первую очередь вспоминается компания Microsoft с огромным числом учебных курсов. Аналогичные программы обучения есть и для Linux-специалистов.

Андрей Маркелов

Page 73: 043 Системный Администратор 06 2006

71№6, июнь 2006

образование

ющие подтвердить полученные специ-алистом знания.

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

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

Нет нужды говорить о том, что Red Hat Enterprise Linux (RHEL) является одним из самых известных коммер-ческих дистрибутивов. А спонсируе-мый компанией проект Fedora Project выпускает свободный дистрибутив Linux под названием Fedora Core, на-ходящийся в списке самых популяр-ных дистрибутивов (по данным сайта http://distrowatch.com). Делаем ли мы выбор в пользу RHEL и Fedora (кото-рую в принципе можно назвать «бе-та-версией очередной версии RHEL») или выбираем другой не менее достой-ный из дистрибутивов Linux, нельзя не согласиться, что Red Hat – знако-вая компания на корпоративном рын-ке Linux-решений.

Компания Red Hat предлагает не-сколько треков обучения и сертифика-ции IT-специалистов. В России на мо-мент написания статьи были доступны курсы и экзамены на статусы Red Hat Certified Technican (RHCT) – сертифи-цированный техник и Red Hat Certified Engineer (RHCE) – сертифицированный инженер. Если вы знакомы с програм-мами обучения от компании Microsoft, то первую сертификацию можно со-поставить со статусом MCSA, а вто-рую – со статусом MCSE. Сравнивать сертификации можно лишь очень при-близительно, и в первую очередь из-за формата экзамена. Но об этом позже. Начнем с обучения – что оно из себя представляет и как проходит.

Курсы обученияДля начала несколько общих слов. На момент написания статьи курсы и экзамены проводились на осно-ве Red Hat Enterprise Linux 4 update 2. Большинство курсов продолжаются четыре дня. По их окончании слуша-тель получает соответствующий сер-

тификат от компании Red Hat. Также у слушателя остается официальное учебное пособие. К сожалению, поли-тика Red Hat такова, что получить учеб-ник может только слушатель курсов. Впрочем, той же стратегии придержи-ваются и другие производители ПО, та-кие как Oracle и Microsoft. С другой сто-роны, тот же Microsoft выпускает офи-циальные курсы для самостоятельной подготовки, чего нет у Red Hat.

Идя на курсы Red Hat, желательно иметь базовые навыки чтения техни-ческой литературы на английском язы-ке для эффективной работы с учебным пособием. В настоящий момент на рус-ском языке есть только официальная документация, которая свободно до-ступна в Интернете [3].

Чтобы гарантировать качество обу-чения в России и странах СНГ курсы Red Hat имеют право проводить толь-ко сертифицированные инструкторы Red Hat компаний-партнеров.

Самый младший из курсов назы-вается «Основы Red Hat Linux». Собс-твенно говоря, практически все, о чем говорится в этом четырехдневном тре-нинге, относится к любому из дист-рибутивов Linux. Ориентирован курс на специалистов, ранее не работав-ших ни с UNIX, ни с Linux. За время обучения слушатели получат базовые сведения и познакомятся с принципа-ми UNIX-way, научатся работать с ко-мандной строкой, ориентироваться в файловой системе, настраивать сис-

тему X Window, познакомятся с осно-вами написания скриптов. Достаточ-но много времени уделено текстово-му редактору vim, входящему в боль-шинство дистрибутивов Linux. Каждая из рассматриваемых тем, как и на ос-тальных курсах от Red Hat, заверша-ется лабораторной работой под руко-водством преподавателя. Новичкам в мире Linux и UNIX я бы не рекомендо-вал приходить на более старшие кур-сы, не прослушав этот вводный курс или не имея базовых навыков. Подроб-нее с программой обучения как этого, так и остальных курсов, можно позна-комиться на специальном разделе сай-та компании Red Hat [2].

Курс «Основы Red Hat Linux для профессионалов Windows» отличается от вышеописанного лишь наличием до-полнительного дня, в котором Windows-специалисты знакомятся с графичес-кими инструментами system-config-*, позволяющими выполнить основные действия по управлению системой, ис-пользуя графический пользователь-ский интерфейс.

Наиболее популярным можно на-звать базовый курс «Системное ад-министрирование Red Hat Enterprise Linux», который является основой для сертификации RHCT. Курс дает слушателям навыки и знания на уров-не установки и настройки новой рабо-чей станции Red Hat Enterprise Linux и подключения к существующей сети. Рассматриваются установка опера-

Рисунок 1. Программа подготовки Сертифицированного технического специалиста Red Hat (RHCT)

Page 74: 043 Системный Администратор 06 2006

72

образование

ционной системы, в том числе по сети и с использованием kickstart-файлов, управление стандартным оборудова-нием, программными RAID и LVM-то-мами, работа с файловыми системи ext2/ext3. Рассматриваются клиенты NFS и autofs, процесс инициализации системы и загрузчик GRUB, админис-трирование пользователей, групп и уп-равление службами, клиенты NIS, DNS, DHCP, утилиты автоматизации выпол-нения задач, RPM и многое другое. Од-на из самых интересных частей курса – вторая половина последнего дня обу-чения, где используются все получен-ные за предыдущие дни навыки. Слу-шатели в течение нескольких часов тренируются в устранении реальных неисправностей на специально подго-товленных рабочих станциях.

Еще один популярный курс – «Се-тевые службы Red Hat Enterprise Linux и администрирование безопасности». Он закладывает основы, необходимые для успешной сдачи экзамена на ста-тус RHCE. Здесь слушатели знакомят-ся с базовой настройкой и настройкой безопасности таких служб, как DNS, NIS, Apache, Samba, Sendmail, Postfix, FTP, SSH, а также некоторых других служб и настройкой брандмауэра. Кро-ме того, обсуждаются вопросы безо-пасности системы.

Наконец существует «Курс уско-ренной подготовки и сертификации RHCE», который представляет собой «выжимку» из двух предыдущих кур-

сов. Он предназначен в первую оче-редь для опытных Linux/UNIX админис-траторов. В последний, пятый день ин-тенсивного обучения слушатели сдают экзамен на статус RHCE.

Ряд других «продвинутых» курсов, к сожалению, на настоящий момент не-доступен для слушателей на террито-рии России и стран СНГ, так как ком-пания Red Hat пока не делегировала право проведения некоторых курсов своим партнерам. В частности, кур-сы линейки RHCA – подготовки сер-тифицированного архитектора мож-но прослушать только непосредствен-но в Red Hat.

Сертификация для технических специалистовВ рейтинге CertCities сертификация RHCE названа «Hottest Certification for 2006» [4], опередив CCIE, MCA, LPI 2, MCSE и некоторые другие программы сертификации. Основное отличие сер-тификаций компании Red Hat от многих других – это практическая направлен-ность экзаменов. На экзамене, продол-жающемся 3 часа (RHCT) или 5,5 ча-са c перерывом на обед (RHCE), соис-кателю приходится сталкиваться с ре-альными задачами по устранению не-исправностей и настройки Linux-сис-тем, а не с выбором вариантов отве-тов из предложенного списка. Руко-водство по подготовке к экзаменам расположено на сайте [2]. Также до-

ступен перевод на русский язык [5]. Сертификация RHCE включает в се-бя навыки RHCT, но вам необязатель-но быть сертифицированным техни-ком для того, чтобы попытаться сдать экзамен RHCE.

Экзамен состоит из двух частей – «Установка и настройка» и «Диагности-ка и устранение неисправностей». Не-обходимые навыки, знания и проход-ные баллы указаны в руководстве.

Статус сертифицированного техни-ка или инженера действителен до мо-мента выхода версии Red Hat Enterprise Linux, чей номер выше на две едини-цы, чем номер той версии, по которой сдавался экзамен. Например, статус RHCE по Red Hat Enterprise Linux бу-дет действителен до выхода Red Hat Enterprise Linux 6. Компания Red Hat выпускает новые версии своего кор-поративного дистрибутива раз в 12-18 месяцев.

Для обновления статуса необходи-мо заново сдавать экзамен на общих основаниях (хотя и со скидкой). Единс-твенное преимущество у обладате-лей сертификата – доступ к учебнику по обновлению навыков через специ-альный портал RHCT/RHCE.

Также на сайте Red Hat [2] доступ-на online-проверка действительности выданного сертификата.

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

Литература и ссылки:1. Маркелов А. «Три К» сертификации

для IT-специалистов. – Журнал «Ком-пьютерра», №13(537)/2004. Доступ-на по адресу: http://www.markelov.net/articles.php?lng=ru&pg=38.

2. Red Hat Global Learning Services – https://www.redhat.com/training.

3. Переводы официальной документации RHEL на русский язык – http://www.rhd.ru/docs.

4. CertCities.com’s 10 Hottest Certifications for 2006 – http://www.certcities.com/editorial/features/story.asp?EditorialsID=9.

5. Руководство по подготовке к экзаме-нам RHCE и RHCT – http://www.rhd.ru/rhce_prepguide.php.

Рисунок 2. Программа подготовки Сертифицированного инженера Red Hat (RHCE)

Page 75: 043 Системный Администратор 06 2006

73№6, июнь 2006

bugtraq

Переполнение буфера в mpg123Программа: mpg123 0.x.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки провер-ки границ данных в функции III_i_stereo() в layer3.c при об-работке файлов MPEG 2.0 layer 3. Удаленный пользователь может вызвать переполнение буфера и выполнить произ-вольный код на целевой системе.URL производителя: www.mpg123.de.Решение: В настоящее время способов устранения уязви-мости не существует.

Отказ в обслуживании в SCTP в ядре LinuxПрограмма: Linux kernel 2.6.16 и более ранние версии.Опасность: Средняя.Описание: 1. Уязвимость существует из-за некорректно-го использования элементов таблицы состояния в SCTP-коде, когда система получает определенные ECNE-раз-делы в состоянии CLOSED. Удаленный пользователь мо-жет с помощью специально сформированного пакета вы-звать панику ядра.

2. Уязвимость существует при обработке входящих фраг-ментированных SCTP-пакетов. Удаленный пользователь мо-жет с помощью специально сформированных COOKIE_ECHO и HEARTBEAT-пакетов вызвать панику ядра.

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

4. Уязвимость существует из-за ошибки при обработке большого количества маленьких сообщений в SCTP. Уда-ленный пользователь может вызвать отказ в обслужива-нии системы.URL производителя: www.kernel.org.Решение: Установите последнюю версию ядра (2.6.16.15) с сайта производителя.

Отказ в обслуживании в Kerio WinRoute FirewallПрограмма: Kerio WinRoute Firewall версии до 6.2.1.Опасность: Средняя.Описание: Уязвимость существует из-за ошибки в инспек-торах протоколов SMTP и POP3. Удаленный пользователь может с помощью специально сформированного e-mail-со-общения вызвать отказ в обслуживании приложения.URL производителя: www.kerio.com.Решение: Установите последнюю версию (6.2.1) с сайта производителя.

Переполнение буфера в Argosoft FTP ServerПрограмма: Argosoft FTP Server 1.4.3.6, возможно, более ранние версии.Опасность: Средняя.Описание: Уязвимость существует из-за ошибки проверки границ данных при обработке параметров в команде RNTO. Удаленный пользователь может вызвать переполнение ди-намической памяти и выполнить произвольный код на це-левой системе.URL производителя: www.argosoft.com/applications/ftpserver.Решение: В настоящее время способов устранения уязви-мости не существует.

Составил Александр Антипов

Обход ограничений безопасности в Kerio MailServerПрограмма: Kerio MailServer версии до 6.1.4.Опасность: Средняя.Описание: Уязвимость существует из-за неизвестной ошибки при обработке вложений. Удаленный пользователь может обойти фильтрацию вложенных файлов в сообщени-ях. Подробности уязвимости не сообщаются.URL производителя: www.kerio.com/kms_home.html.Решение: Установите последнюю версию (6.1.4) с сайта производителя.

Переполнение буфера в ClamAVПрограмма: Clam AntiVirus (clamav) 0.80 по 0.88.1.Опасность: Средняя.Описание: Уязвимость существует из-за ошибки проверки границ данных в HTTP-клиенте в утилите Freshclam. Уда-ленный пользователь может вызвать переполнение стека, если размер HTTP-заголовков, полученных от веб-серве-ра, превышает 6 Kб. Удачная эксплуатация уязвимости воз-можна, если Freshclam используется для закачки обновле-ния сигнатур вирусов с злонамеренного сервера (напри-мер, посредством отравления DNS-кеша).URL производителя: www.clamav.net.Решение: Установите последнюю версию (0.88.2) с сайта производителя.

SQL-инъекция в Invision Power BoardПрограмма: Invision Power Board 2.1.5, возможно, более ранние версии.Опасность: Средняя.Описание: Уязвимость существует из-за недостаточной об-работки входных данных в параметре selectedtids в функ-ции post_delete() сценария func_mod.php при удалении не-скольких тем в форуме. Удаленный пользователь может с помощью специально сформированного запроса выпол-нить произвольные SQL-команды в базе данных приложе-ния. Пример:

URL производителя: www.invisionboard.com.Решение: В настоящее время способов устранения уязви-мости не существует.

act=mod&auth_key=2b71da21cbacba35ccf6fc04fe807d9a&st= ↵ 0&selectedpids=-1)UNION SELECT 1,3/*&tact=delete

Page 76: 043 Системный Администратор 06 2006

74

образование

А зачем Linux в школе?Как вы думаете, почему компания Microsoft усиленно обращает внима-ние на вузы и школы, проводя раз-личные акции, скидки на ПО. Да и во время кампании по борьбе с пиратс-ким софтом учебные заведения были практически нетронуты, лишь немно-го «припугнули» и практически оста-вили в покое. Все просто до безобра-зия. Человек по природе своей сущес-тво ленивое, и, разобравшись с конк-ретным вопросом один раз, он не захо-чет ничего нового и будет в большинс-тве своем пользоваться старыми зна-ниями, переучиваться никто не любит. А ведь в учебных заведениях ежегод-но проходят обучение тысячи человек,

которые затем станут потенциальны-ми пользователями системы. Попро-буйте в офисе вместо MS Office пос-тавить OpenOffice.org. Внешне и фун-кционально они очень похожи, но пси-хологически человек воспринимает перемены тяжело, и поверьте, поль-зователи будут искать разные причи-ны, чтобы им поставили старый офис-ный пакет. Да, пусть Microsoft при этом понесет некоторые убытки, но они бу-дут несравнимы с теми, которые она понесла бы, усилив борьбу с пиратс-твом и доведя ее до победного кон-ца. Поэтому и пиратство на террито-рии бывшего Союза вопреки подня-тому шуму не только не уходит в под-полье, а, наоборот, процветает. И если

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

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

Сергей Яремчук

Linux в школе?

Из всех сфер применения вычислительной техники один из самых горячо обсуждаемых вопросов – использование GNU/Linux в области образования. Споры спорами, но на сегодняшний день на большинстве компьютеров в учебных заведениях стоит Windows.

Page 77: 043 Системный Администратор 06 2006

75№6, июнь 2006

образование

торые, возможно, просто опасаются, что не смогут самостоятельно разо-браться. В школах ситуация полностью совпадает с описанной. За несколь-ко лет все программы обучения фак-тически были адаптированы только под Windows, учителя тоже привыкли к этой системе, потому что это единс-твенное, что было доступно. С накатан-ного пути уходят только энтузиасты, ко-торым надоели вечные перестановки системы, необходимость обновления версий системы и оборудования пос-ле выхода очередной версии Windows, а также постоянные шалости учени-ков, вирусы и пр. Кстати, парадоксы встречаются и здесь. Так, если почи-тать требования к статьям в научные журналы в различных вузах, то одним из пунктов обязательно стоит MS Word, и именно определенной версии (иног-да вплоть до build). Об этом почему-то мало говорят, но ведь разные версии Microsoft Office тоже не всегда дружат друг с другом. Это, конечно, хорошо, когда диск со всеми версиями офи-са стоит копейки и за его нелегаль-ное использование никто ответствен-ности не несет. А если бы пришлось каждый раз покупать нужную версию по рыночной цене, то мне трудно пред-ставить, как бы велась научная работа в этом случае. Запад эту проблему ре-шил намного проще, там используют-ся только открытые форматы.

Затараты на использованиеВ Интернете периодически появляют-ся цифры сравнения затрат при ис-пользовании Windows и Linux, при этом сходятся в том, что эта сумма пример-но одинакова. Причина такова, что хо-тя софт и бесплатный, но все равно потребуется научить людей им поль-зоваться. То есть с точки зрения фи-нансирования смысла использовать Linux вроде бы и нет. Но это только поверхностный взгляд. Достаточно вспомнить, что в случае с системой Microsoft мы платим за ПО, которое, кстати, через год-два будет устарев-шим и потребует дополнительных вло-жений на обновление и времени на ос-воение. Не говоря уже о том, что кро-ме самой системы, еще нужны другие программы (антивирус, офис, компиля-тор, приложения для работы с графи-кой и пр.), на которые уже не распро-

страняются промоутинговые скидки, а стоят они на порядок дороже. В слу-чае же со свободным ПО деньги вкла-дываются не в конкретную програм-му, а в подготовку человека. Систе-мы и технологии меняются постоянно и будут требовать постоянных обнов-лений (капиталовложений), а знания остаются. В большинстве школ ситу-ация такова, что школьник, имеющий доступ к Интернету и не озабоченный кучей проблем, может дать фору учи-телю информатики по знаниям или взломать систему, потому что учителю не хватает квалификации все профес-сионально настроить. После перепод-готовки технический уровень препода-вателя повысится, и он сам теперь смо-жет поддерживать ПО в современном состоянии, защитить сеть, объяснить не на пальцах, а на реальных приме-рах основы или принципы работы Ин-тернета и пр. Причем это, можно ска-зать, единоразовое вложение, т.к. для работы с любым Linux достаточно по-нять базовый принцип и некоторые принципы работы, далее все идет бо-лее-менее по накатанной. Может, си-туация описана идеально, но, по-мое-му, именно учителя в силу специфики своей профессии склонны к самообра-зованию, повышению своей квалифи-кации, обмену опытом. Хотя, по прав-де, потрясения последних лет породи-ли и здесь массу проблем, в том чис-ле лень, заключающуюся в нежела-нии изучать что-то новое. Вы скажи-те, что человек тоже весьма не наде-жен, он может заболеть, а то и вовсе перейти на другую работу. Так ведь и купленная система не всегда работает так, как требуется. Кроме того, здесь начинает срабатывать принцип, кото-рый биологи называют «коллективным иммунитетом», когда количество при-витых от некоторой болезни не поз-воляет возникнуть эпидемии. Так вот, сейчас все привиты Windows, а Linux смогли заразиться только те, кто смог преодолеть этот барьер.

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

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

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

Еще одно отличие состоит в том, что при изучении/использовании Windows от пользователя не требу-ется глубоких знаний и весь процесс (в том числе и справочная информа-ция системы) подчас сводится к бес-смысленному запоминанию и затем воспроизведению последовательнос-ти действий без понимания происхо-дящего. Да и инструментов для тон-кой настройки некоторых параметров в самой системе просто нет, если толь-ко самому не лезть в реестр, что уже требует определенных знаний. Как вы думаете, тяжело Microsoft создать встроенный графический инструмент для настройки реестра Windows? Нет. Нужен пользователь, бездумно тыкаю-щий в кнопки, которому можно расска-зывать сказки об удобных интерфей-сах и новых возможностях. Это отчас-ти подтверждается и справочной сис-

Page 78: 043 Системный Администратор 06 2006

76

образование

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

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

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

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

зубного врача только теоретическим курсом. Я к такому не пойду), и если есть желание, то и расширить функ-циональность тех или иных инструмен-тальных средств. Ученик не должен быть ограничен в возможности изуче-ния, учеба должна побуждать челове-ка к дальнейшему развитию. Только так появляются будущие Торвальдсы. Кстати, в его книге «JUST FOR FUN» описана ситуация, как студенты со-ревновались с преподавателем в изу-чении UNIX. А в Windows в чем сорев-новаться, кто быстрее кнопки нажмет? Windows как система фактически под-страивает под себя человека, который, не думая, будет чувствовать себя оди-наково во всех условиях, в Linux же, на-оборот, позволено заставить систему делать то, чего хочется мне, а не как задумал разработчик.

Делайте все что хотите, а главное – думайте. Скажите, не лучший ли это инструмент для школы. Как бы то ни было, но в некоторых странах сегодня существует законодательный запрет на использование коммерческого ПО в учебных заведениях во избежание скрытого промоутинга. Да и поговари-вают, что пингвин Тукс может стать та-лисманом общественной системы об-разования Америки, т.к. позволяет пе-рестать тратить сотни тысяч долларов на программное обеспечение.

Что имеем сегодня?Необходимо отметить, процесс раз-работки свободного ПО для образо-вательных целей шел непрерывно и целенаправленно, поэтому, хоро-шо поискав в Интернете, можно най-ти большое количество приложений разного качества исполнения, рабо-тающих как в консоли, так и с графи-ческой оболочкой, практически на все случаи жизни. Некоторые из них уже упоминались на страницах журнала, так как входят в большинство дистри-бутивов (OpenOffice, GIMP, Firefox, Dia и пр.). Практически все возможные ком-бинации слов Linux, education, schools, если набрать их в строке веб-браузе-ра, то наверняка получите отклик сер-вера. Вот только несколько ссылок, где найдете информацию по применению свободного ПО и Linux в учебных за-ведениях: Open Source Education Foundation –

http://www.osef.org;

SEUL (Simple End User Linux)/edu – http://seul.org/edu;

Schoolforge – http://www.schoolforge.net;

K12OS – http://k12os.org; K12Linux – http://k12linux.org; KDE Edutainment Project – http://edu.

kde.org; OFSET (Organizat ion for Free

Software in Education and Teaching) – http://www.ofset.org/freeduc;

O p enSou rc eS c hoo l s – h t t p : / /opensourceschools.org;

портал свободного ПО UNESCO (United Nations Educational, Scientific and Cultural Organization) – http://www.unesco.org/webworld/portal_freesoft/index.shtml;

отдельного упоминания стоят сай-ты проектов LinuxForKids – http://www.linuxforkids.org;

Tux4Kids, представляющие свобод-ное образовательное ПО, ориенти-рованное на детей младше 10 лет (для этой категории труднее все-го найти программы) – http://www.tux4kids.net.

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

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

Page 79: 043 Системный Администратор 06 2006
Page 80: 043 Системный Администратор 06 2006

78

образование

Дистрибутив Edubuntu: специально для школ

В учебных заведениях некоторых западных стран позиции UNIX настолько сильны, что производителям проприетарного софта остается только завидовать этому. Чтобы упростить процесс использования свободного ПО в сфере образования, организациями и энтузиастами были собраны специальные дистрибутивы.

Сергей Яремчук

Page 81: 043 Системный Администратор 06 2006

79№6, июнь 2006

образование

Особенно этот процесс оживил-ся в последнее время в связи с ростом популярности LiveCD-

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

Вот некоторые из них: польский Linux-EduCD (http://

www.simp-st.pl/linux-educd.html); американский Quantian (http://dirk.

eddelbuettel.com/quantian); итальянский eduKnoppix (http://

eduknoppix.dmf.unicatt.it); норвежский Skolelinux (http://www.

skolelinux.no); LiveCD FREEDUC (http://www.ofset.

org/freeduc), разрабатываемые при поддержке OFSET (Organisation for Free Software in Education and Teaching) и UNESCO.

Список дистрибутивов из разных стран можно продолжать.

Дистрибутив EdubuntuEdubuntu представляет собой версию популярного дистрибутива Ubuntu, опти-мизированную для применения в шко-лах. В отличие от остальных дистрибу-тивов его с успехом можно применять и дома. Фактически Edubuntu это и есть, собственно, Ubuntu, но только с другой целевой аудиторией и другими прило-жениями. Создаетсяи поддерживает-ся той же группой разработчиков, что и оригинальный дистрибутив. Центра-лизованное управление конфигураци-ей, учетными записями пользователей и приложениями, плюс комплектование дистрибутива специальными програм-мами для учебных заведений, – на это ориентирован Edubuntu. Edubuntu пост-роен на идеях, записанных в манифес-те Ubuntu, в котором, в частности, го-ворится, что программное обеспече-ние должно быть бесплатным, доступ-ным на любом языке и использоваться всеми, в том числе и людьми с физичес-кими недостатками. Пользователь всег-да должен иметь возможность свобод-но модифицировать используемое про-граммное обеспечение.

Напомню, что Ubuntu построен на базе самого свободного дистрибути-ва GNU/Linux – Debian. Дружелюбность, присущая Ubuntu, позволяет работать с ним пользователям со средними тех-ническими навыками. Linux принято ру-

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

Что внутри?Текущая стабильная верся на мо-мент написания статьи – Edubuntu 5.10 «Breezy Badger», о которой и пойдет речь далее. Уже имеется версия 6.06 beta, предназначенная для разработ-чиков. Учитывая 6-месячный цикл разработки Ubuntu, в ближайшее вре-мя следует ожидать нового релиза, но главное – познакомиться c подобным дистрибутивом в общем. Да и в новой версии состав приложений тот же, что и в «Breezy Badger», единственное отли-чие – это появление LiveCD-версии.

На странице закачки предлагает-ся два образа. Один собран для i386 архитектуры (для всех систем), вто-рой – для 64-битных систем (Athlon64, Opteron, EM64T Xeon). Доступны и DVD-образы.

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

мер, в статье Владимира Якубовского «Ubuntu 5.10 – первый взгляд на «Линукс для людей», в первом номере элект-ронного приложения к журналу «Open Source». Та же программа установки, которая спокойно, без лишних вопросов проведет пользователя по всем этапам установки. Несколько непривычно, что пароля root никто не спрашивает, а сис-тема просто просит создать учетную за-пись обычного пользователя, под ко-торым и будет происходить дальней-шая работа. Созданный при установке пользователь автоматически заносит-ся в группу admin, представителям ко-торой разрешено использовать sudo. Все системные настройки производят-ся исключительно через sudo (или «run as different user» в графической среде), при этом вводится пароль текущего пользователя. Поначалу такая систе-ма безопасности кажется непривычной и неудобной, но быстро осваиваешься, к тому же на некоторые повторяющие-ся операции (например, копирование) пароль запрашивается только первый раз. Но зато забыть оставить активи-рованным терминал с администратор-скими привилегиями при таком подходе просто невозможно, особенно учитывая специфику применения Edubuntu, когда преподаватель может часто отвлекать-ся, для помощи ученикам.

Единственной рабочей средой яв-ляется Gnome (см. рис. 1). Возможно, кому-то покажется, что KDE лучше бы подошел на эту роль, но для неиску-

Рисунок 1. Рабочий стол Edubuntu

Page 82: 043 Системный Администратор 06 2006

80

образование

шенного пользователя, поверьте, это-го будет достаточно. При желании любую другую среду можно устано-вить через систему обновлений apt-get или Synaptic в графическом ва-рианте, где доступно более 16 ты-сяч приложений. Кроме того, в глав-ном меню имеется пункт «Add/Remove Aplications» (/usr/bin/gnome-app-install) (см. рис. 2), являющийся также над-стройкой к apt-get, но в нем собраны только ссылки на основные приложе-ния. Рабочее окружение локализова-но, как говорится, из коробки. Если при установке был выбран соответствую-щий язык, то большая часть сообще-ний, меню Gnome и некоторых прило-жений после регистрации в системе бу-дут также на этом языке.

Еще во время установки система «предупреждает пользователя», что текущий состав приложений не полно-стью соответствует требуемым локаль-ным настройкам и рекомендуется ска-чать и установить необходимые вер-сии самостоятельно. Поэтому о пол-ной локализации говорить не прихо-дится, к тому же и некоторые прило-жения, входящие в состав, не лока-лизованы вообще, либо это сделано лишь частично. OpenOffice.org напри-мер, придется переустановить пол-ностью, взяв локализованную копию с http://www.openoffice.ru.

Раскладка клавиатуры переключа-ется, как это привычно пользователям Windows, по <Alt+Shift>. Запятая и точ-ка размещены нестандартно, по <Shift +

6, 7>. Поэтому в xorg.conf необходимо подправить параметр XkbLayout.

Да и в качестве локали использу-ется UTF-8, что уже, впрочем, стало традицией, сегодня все меньше можно встретить дистрибутивы, в которых ис-пользована традиционная локаль. Од-ним из компонентов Edubuntu является LTSP (Linux Terminal Server Project [3]), при помощи которого можно присо-единить маломощные клиентские тер-миналы к серверу Linux. Кроме того, в комплекте идет утилита tsclient [4], посредством которой можно получить доступ к удаленным сервисам Microsoft Windows NT/2000 Terminal Services и XP Remote Desktop Sharing.

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

В первую очередь хочу отметить на-личие Gcompris, с которым я знаком уже продолжительное время. Правда, рас-положен он во вкладке «Игры», но это и есть набор развивающих игр для детей в возрасте от 2 до 10 лет. Когда я с ним впервые познакомился года два три на-зад, о какой либо локализации говорить не приходилось, и для того чтобы что-то

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

Всего более 20 игр. Кроме набора пасьянсов, некоторых карточных игр, вариантов реверси, головоломок, са-пера, которые также, впрочем, явля-ются логическими играми, есть неко-торые и образовательные.

В первую очередь это три приложе-ния от проекта Tux4kids:

Option "XkbLayout" "us,ru(winkeys)"

Рисунок 2. Установка/удаление программ в Edubuntu

Page 83: 043 Системный Администратор 06 2006

81№6, июнь 2006

образование

в TuxMath («Tux, of Math Command»), чтобы спасти планету, необходимо быстро производить математичес-кие вычисления;

TuxTyping научит быстро печать сло-ва (правда, только английские);

веселая рисовалка TuxPaint, скорее всего, оставит вас без компьютера надолго.

Кроме того, есть Atomix, который даст понятия о молекулах и атомах, и gLIfe, некий автомат искусственной жизни, и некоторые другие.

Пункт «Образовательные» содер-жит еще 14 приложений, большая часть которых из KDE edutainment module [2]: Kalzium – покажет всю информацию

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

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

Keduca – представляет собой сис-тему тестирования, в состав входит и редактор тестов.

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

Kig (kde Interactive Geometry) – инструмент, позволяющий в диа-логовом режиме изучать матема-тические фигуры и понятия, кро-ме того, может использоваться для WYSIWYG создания математи-ческих фигур для включения в дру-гие документы.

Рисунок 3. Gcompris поможет в изучении математики и не только

Рисунок 4. При помощи Kalzium можно изучать периодическую систему элементов

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

KmPlot – математический графо-построитель с мощным синтакси-ческим анализатором.

KPercentage – небольшая матема-тическая программка, которая помо-жет освоить вычисление процентов.

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

KTouch – еще один клавиатурный тренажер, правда, опять же англий-ский.

KTurtle – образовательная програм-мная среда, использующая язык про-граммирования Logo (первоначально, ответвление LISP). Легкость и доступ-ность делает эту программу непло-хим подспорьем при обучении (имен-но обучении, Kturtle не предназначен для программистов) программирова-нию, математике и геометрии.

Kverbos – программа для изучения испанских глаголов.

KVocTrain – еще одна программа, цель которой помочь в изучении иностранного языка.

Кроме этого, если зайти по адре-су http://localhost:7080/, то можно найти еще один сервис SchoolTool [5], пред-

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

Кроме образовательных приложе-ний в дистрибутиве можно найти пол-ный комплект программ для повседнев-ной работы. Офисные Scribus, Evolution, OpenOffice 2.0, Интернет Gaim, Firefox, XCat, GnomeMeeting, клиент сети bittorent, программы для просмотра видео и про-слушивание музыки (mp3 не поддержи-вается). Учитывая направленность дис-трибутива, не мешало бы наличие при-ложения, при помощи которого можно было блокировать доступ к некоторым веб-ресурсам, на которые детям по-падать не желательно, хотя бы при по-мощи одного из плагинов Firefox (http://kb.mozillazine.org/Parental_controls).

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

Cсылки:1. Сайт пректа Edubuntu – http://www.

edubuntu.org.2. KDE edutainment – http://edu.kde.org.3 Linux Terminal Server Project – http://www.

ltsp.org.4. Утилита tsclient – http://www.gnomepro.

com/tsclient.5. SchoolTool – http://www.schooltool.org.

Page 84: 043 Системный Администратор 06 2006

82

hardware

Волшебство с паяльником в руках

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

Крис Касперски

Page 85: 043 Системный Администратор 06 2006

83№6, июнь 2006

hardware

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

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

Один LED на двоихПри подключении дополнительных винчестеров на внешний контроллер (SCSI или IDE) возникают проблемы с индикацией. Светодиод – один, и он уже занят материнской платой с ос-новными IDE-контроллерами. Можно, конечно, просверлить в корпусе дыр-ку и вывести наружу столько светоди-одов, сколько потребуется, но это мо-жет испортить внешний вид компью-тера, к тому же большое количество моргающих светодиодов сильно раз-дражает.

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

Для исключения «выгорания» це-пей индикации контроллеров мы ис-пользуем диоды Шотки типа BAT46 (см. рис. 2), которые можно взять прак-тически с любой материнской платы, оставшейся от апгрейда, или купить в радиомагазине за «копейки». Прове-ряя их целостность омметром, не вол-нуйтесь, если стрелка не захочет от-клоняться. Это свойство диода та-кое – открываться только при дости-жении определенного порогового на-пряжения. Все необходимые вольтам-перные характеристики диода содер-жатся в бесплатно распространяемой документации: http://ronja.twibright.com/datasheets/bat46.pdf.

LDE-моддингДва светодиода на передней панели (один из которых – Power-LED– посто-янно горит, а другой – HDD LED – ожив-ленно мигает) – это традиция, сохра-нившаяся с древнейших времен, ког-да самым престижным компьютером был IBM XT, выполненный в «строгих серых тонах», но в наш век подобный дизайнерский подход выглядит мало-привлекательным и неоправданно ас-кетичным.

Разве не интересно заглянуть во внутренний мир компьютера, при-цепив индикацию буквально на каж-дую шину? Например, подключившись к выводу /RAS модуля памяти (115/154-выводы DIMM-слота на SDR/DDR со-ответственно), мы сможем наблю-дать за переключениями DRAM-стра-ниц оперативной памяти, а 27/63-кон-такты будут мигать светодиодом при переключении микросхемы из режи-ма чтения в режим записи! Достаточ-но взять в руки схему материнской платы (схемы рефересных плат бес-платно раздаются с сайта Intel), и че-рез несколько минут наш PC превра-тится в рождественскую елку! Кста-ти, при выявлении причин сбоев это очень помогает.

Вот только напрямую подсоеди-нить светодиоды ни в коем случае не-льзя! Ну уже хотя бы потому, что шины и так работают на пределе, и при по-пытке их удлинения все падает в тар-тарары. Приходится хитрить, восполь-зовавшись операционным усилите-лем, таким, например, как LM358, ко-торый легко выпаять с любой материн-ской платы, видеокарты или купить на рынке. Вот его техническая докумен-тация: http://www.ensc.sfu.ca/reference/data-sheets/LM358.PDF, а типовая схе-ма подключения на рис 3.

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

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

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

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

Рисунок 1. Подключение нескольких контроллеров к одному светодиоду

Рисунок 2. Внешний вид диодов Шотки

Рисунок 3. Схема подключения дополнительного светодиода

Рисунок 4. Пульсовый генератор на LM358

Page 86: 043 Системный Администратор 06 2006

84

hardware

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

Правильное решение (выдерну-тое из схемы на материнскую плату Intel 100 MHz Pentium(tm) II processor/440BX) выглядит так (см. рис. 5). Про-верено – оно работает и на более высо-ких частотах, вплоть до Pentium-4.

Основной всего служит чип 74ALS08 (вот ссылка на документацию: http://www.standardics.philips.com/products/als/pdf/74als08.pdf). Это так называе-мый «Quad 2-input AND gate» (2-х вход-ной И-вентиль, в количестве 4-х штук в одном корпусе) со свитой резисто-ров и конденсаторов, подавляющих помехи. Как и следует из его назва-ния, он обслуживает две «контроль-ных» точки, выводимые на один-единс-твенный светодиод. Все детали легко взять с любой платы, так что на рынок идти совершенно необязательно.

Главное – запастись светодиодами. Яркими и, желательно, разноцветными (для увеличения яркости в J28 можно «воткнуть» вышеописанный операци-онный усилитель).

Два цвета в одномНа многих материнских платах распо-ложен светодиод, горящий в рабочем режиме одним цветом, а в ждущем – другим. Светодиод, расположенный на лицевой панели некоторых систем-ных блоков, обычно ведет себя точно так же, но... «обычно» это еще не всег-да (у старых системных блоков вооб-ще никогда).

На самом деле этой беде легко по-мочь! В большинстве случаев даже не понадобится трогать паяльник! Рас-

смотрим типовую схему подключения POWER LED (см. рис. 7).

На плате (ON-BOARD) расположен двухцветный (DUAL-COLOR) светоди-од. Это такой специальный светодиод, содержащий два LED в одном флаконе. Выбор нужного цвета осуществляется полярностью. Параллельно ON-BOARD LED расположен CHASSIS POWER LED, что в переводе на русский язык озна-чает «светодиод, выведенный на кор-пус». Итак, все необходимые ингреди-енты у нас уже есть!

Способ номер один – убираем ста-рый светодиод с лицевой панели и ста-вим на его место новый DUAL-COLOR, который можно взять со старой платы или в магазине. Все! Теперь он будет светиться двумя разными цветами!

Способ номер два – подключаем к старому светодиоду еще один све-

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

Когда индикатор лжетНевероятно, но факт, HDD LED на са-мом деле отображает активность ши-ны IDE и подмигивает любому ATA/ATAPI-устройству (например, DVD-приводу или CD-ROM), что вносит ди-кую путаницу в процесс и нервиру-ет начинающих пользователей, иног-да даже сдающих компьютер в ре-монт (см. рис. 6). Против схемотех-ники, конечно, не попрешь, но мы зна-ем как быть!

Разносим HDD и CD-ROM/DVD-ROM по разным шлейфам (если не сде-лали этого сразу), берем в руки лупу и,

Рисунок 5. «Правильная» схема подключения контрольных светодиодов от Intel

Рисунок 7. Типовая схема подключения Power LED

Рисунок 6. HDD-индикатор на самом деле отражает активность всех ATA/ATAPI-устройств

Page 87: 043 Системный Администратор 06 2006

85№6, июнь 2006

hardware

вооружившись омметром, ищем, куда идет питающий вывод IDE-LED (про-тивоположный тому, что подключает-ся к массе). Рано или поздно мы «вре-жемся» в микросхему 74ALS08 или не-что подобное ей (см. рис. 5). Аккурат-но перерезаем 2-й вывод микросхемы (или отпаиваем его, удаляя припой от-сосом или обыкновенной медицинской иглой – иглы для капельниц предпоч-тительнее).

С этого момента HDD LED будет подмигивать только одному IDE-кана-лу, на котором размещен жесткий диск, игнорируя второй с CD-ROM.

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

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

Расследование, проведенное мной, показало, что в подавляющем боль-шинстве случаев «горит» не сам порт, а предусмотренный мудрыми конс-трукторами плавкий предохранитель, который легко найти, если двигаться вдоль печатной магистрали от перво-го вывода USB-разъема (VCC) в глу-бину материнской платы. Предохра-нитель обозначается латинской буко-вой F и по обыкновению соседству-ет с резисторами и конденсаторами (см. рис. 8).

Прозвоните его омметром – если он покажет обрыв, с некоторым рис-ком предохранитель можно просто пе-ремкнуть, хотя правильнее заменить его таким же точно или аналогичным, рассчитанным на ток 1,5-2,0 A. Чаще всего после этой несложной операции USB «оживает».

Аналогичные предохранители за-щищают мышь и клавиатуру от непра-вильного включения и еще кое от че-го (см. рис. 9).

Как-то раз один мой знакомый включил старый-старый джойстик, ос-тавшийся от компьютера ZX-Spectrum, в клавиатурный DIN-разъем. Думал поиграть! Поиграть не получилось, а клавиатура, увы, умерла. К счас-тью, предохранитель принял весь удар на себя (номинальный ток 1,35 A), после замены которого клавиатура ожила, и компьютер заработал, как новый!

ЗаключениеСтрах перед сложной техникой сдер-живает порывы творчества, и боль-

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

Производители ориентируются на массовый рынок, максимально унифицируя настольные компьютеры и сервера.

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

Рисунок 8. Предохранители, охраняющие USB-порты на плате F1 и F2

Рисунок 9. Предохранители, охраняющие клавиатуру и мышь

Page 88: 043 Системный Администратор 06 2006

86

ретроспектива

«Мы сеяли семя инноваций, но потерпели неудачу в сборе урожая» (Боб Бишоп)До получения должности исполнитель-ного директора SGI Боб Бишоп на про-тяжении девяти лет работал в этой компании, занимая пост главы отдела маркетинга, пока в 1995 году не поки-нул его, став членом наблюдательного совета акционеров. После предатель-ского бегства его предшественника, Рика Белуццо, на предложение воз-главить SGI Бишоп с радостью согла-сился. «Принимая непосредственное участие в формировании нашей но-вой стратегии, я окончательно завер-шу процесс трансформации компании для поддержания её роста и прибыль-ности, – говорил тогда Бишоп. – У ме-ня огромная вера в талантливых лю-дей, глубину технологий и лояльность клиентов SGI».

Однако компания, в которой он ра-ботал четыре года назад, в 1999 г. бы-ла уже совсем другой. «SGI продол-жает наращивать скорость, но вмес-те с тем теряет высоту. Компания ра-ботает совсем не так, как должна, тем самым «играя на руку» нам», – гово-рил тогда генеральный директор Sun Microsystems Скот МакНили.

Реструктуризация, о которой как раз перед своим уходом заговорил Бе-луццо, оставила неизгладимый отпеча-ток не только на компании, но и на её служащих. Агонизирующая SGI уже к октябрю 1999 года вынуждена была отрапортовать как о финансовых по-терях, так и о массовых сокращениях персонала. Финансисты «не досчита-лись» 68 млн. долларов, а менеджеры компании – 1100 человек кадрового состава. При подведении финансовых итогов 1999 года стало известно о по-терях 213 млн. долларов. В новое ты-

сячелетие SGI вступала в весьма пла-чевном состоянии.

Планы компании в скором време-ни остановить разработку собствен-ных графических систем для своих ра-бочих станций и серверов визуализа-ции стали более «осязаемыми» в се-редине 1999 года, когда специально по этому поводу SGI подписала соглаше-ние с компанией nVidia. Согласно не-му nVidia получила право лицензиро-вать графические технологии SGI, ко-торая, в свою очередь, имела доступ к самым новым чипам, произведённым nVidia. Кроме того, 50 инженеров SGI перешли к nVidia для работы над про-ектом «Одиссей». Его результатом стало появление последнего поколе-ния собственных графических плат SGI серии VPro (основная их «изюмин-ка» – 48-битное представление цвета RGBA, позволяющее работать с па-литрой, состоящей из 68 миллиардов

Надежда умирает последней: история компании SGIЧасть 3

После череды неудач, постигших SGI в период с 1994 по 1999 годы, многие стали с надеждой смотреть на нового исполнительного директора. Но сможет ли один человек помочь «тонущему кораблю»?

Дмитрий Мороз

Page 89: 043 Системный Администратор 06 2006

87№6, июнь 2006

ретроспектива

цветовых оттенков), устанавливав-шихся в более поздние модели Octane и новые Octane 2, выпущенные вмес-те с O2+ в августе 2001 года. К сожа-лению, кроме более быстрых процес-соров и новых графических опций эти рабочие станции не предлагали ниче-го нового и при своей заоблачной стои-мости практически не приобретались.

Что же касается линейки систем, ра-ботающих на процессорах Intel Pentium, жить ей оставалось недолго. В конце года стало известно, что усилия SGI, направленные на поиски потенциаль-ного покупателя на подразделение, за-нимающееся производством рабочих станций Visual Workstation, оказались безуспешными. Линейка систем на ба-зе процессоров Intel «камнем» висела на «шее» компании, всё дальше затя-гивая её в пучину финансовых убыт-ков. Потери от продаж рабочих стан-ций 320 и 540 стоили SGI 45 млн. дол-ларов. «Урок, полученный нами в ре-зультате запуска Visual Workstation, дал понять, что в мире быстро совершенс-твующихся систем на базе процессо-ров компании Intel попытка продвиже-ния собственных разработок заранее обречена на провал», – говорил тог-да главный бухгалтер компании Боб Солтмарш.

Ну а пока SGI искала покупа-теля, компания решила дать Visual Workstation последний шанс, благо не-обходимость в развитии линейки всё ещё сохранялась. Однако на этот раз разработкой продвинутой архитекту-ры SGI особо не увлекалась. После покупки части компании Integraph, SGI в мае 2000 г. выпустила её графичес-кие рабочие станции под своим име-нем. Новые модели 230, 330 и 550 ни-

чем особым от рабочих станций дру-гих компаний, равно как и от обычных ПК, не отличались, разве что их гра-фический адаптер VR3, был постро-ен на базе профессионального чипа nVidia Quadro, впрочем, являвшегося «сынком» обычного GeForce 256.

По типу «цепной реакции» вскоре после заявления SGI о желании «из-бавиться» от Visual Workstation после-довало сообщение и о продаже Cray Research. Начиная с декабря 1999 го-да в Интернете стали появляться слухи о том, что SGI ищет потенциального по-купателя на это подразделение. К тому времени Cray Research представляла собой довольно жалкое зрелище: 850 сотрудников (против 4500 в 1996 году) и 300 млн. долларов. годового дохода (900 млн. долларов. в 1996 году).

2 марта 2000 года слухи, наконец-то, подтвердились, и SGI продала Cray Research со всеми «потрохами» ком-пании Terra Computer за не оглашён-ную общественности сумму (по словам Wall Street Journal, эта цифра состави-ла около 100 млн. долларов. Сравни-те с суммой покупки в 1996 году, соста-вившей 764 млн. долларов). Новая ро-дительская компания, сама прибываю-щая в не очень «радужном» состоянии (потери Terra Computer во время покуп-ки составляли 7,5 млн. долларов при прибыли в 850 тыс. долларов), не ста-ла диктовать новоиспечённой Cray Inc. свои условия и дала «вольную». Одна-ко, несмотря на выпуск ряда довольно удачных суперкомпьютеров типа SX-1, X1 и XD1, дела у компании шли всё ху-же и хуже. На сегодняшний день ак-ции Cray Inc. практически обесцени-лись. К тому же в ноябре прошлого го-да один из основателей Terra Computer

и главный инженер Cray Бартон Смит ушёл в Microsoft. Аналогия с Белуццо напрашивается сама собой.

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

В июле 2000 года состоялось об-новление линейки Origin. Архитекту-ра новых серверов Origin 3000 (поколе-ние SN-1) под названием NUMAflex со-стояла из так называемых «модулей», каждый из которых отвечал за свою функцию. Так, процессорный модуль содержал: процессоры, контроллер ОЗУ и саму оперативную память. В

Наследник проекта «Реальность»Одной из идей бывшего управляющего Silicon Graphics Джима Кларка являлся «перенос» разработок компании в области создания графических процессоров в но-вые сегменты рынка – мультимедийные приставки, игровые консоли, персональ-ные компьютеры и т. д. Несмотря на то что акционерам эта затея не понрави-лась, часть инженеров тайком (необходи-мо вспомнить о негласном правиле: «либо в одной лодке со всеми, либо – за бор-том») поддержала идею их «духовного лидера». Так, команда под руководством Веи Ена, работавшая над графическим

процессором RCP для Nintendo 64, реши-ла воплотить мечты Кларка в реальность, для чего в сентябре 1997 года ушла из ком-пании и основала свою собственную, на-званную ArtX. Первым клиентом новоис-печённого «стартапа», как не трудно дога-даться, стала компания Nintendo, по зака-зу которой ArtX занялась разработкой гра-фического чипа для следующей консоли японского гиганта под кодовым названи-ем «Dolphin» (Nintendo GameCube). Позд-нее, 1 марта 2000 года, ArtX была приоб-ретена компанией ATI за 400 млн. долл., и продолжила свою работу уже под её «крылом».

Рабочая станция SGI 230

Сервер SGI Origin 3400

Page 90: 043 Системный Администратор 06 2006

88

ретроспектива

системе также присутствовали моду-ли шины NUMAlink, модули ввода/вы-вода, модули шин PCI и XIO, диско-вые модули и т. д. Максимальное ко-личество процессоров в новых серве-рах Origin на первых порах равнялось 128 штукам. Вместе с Origin 3000 бы-ли анонсированы и сервера визуали-зации Onyx3, отличавшиеся лишь на-личием графических модулей на базе плат InfiniteReality3.

По словам Боба Бишопа, денеж-ная сумма заказов на новые сервера за первые два месяца достигла отмет-ки в 100 млн. долл., которых, тем не ме-нее, всё же не хватило для стабили-зации финансового положения ком-пании.

К 2001 году стало окончательно ясно, что тягаться с компаниями Sun, Hewlett-Packard и начинавшей наби-рать в то время популярность Apple в секторе высокопроизводительных рабочих станций SGI уже не может. Конкурентоспособность её продуктов была очень низкой, к тому же, всемир-ная «миграция» на дешёвые ПК, а так-же кластерные системы свели все про-дажи компании практически к нулю. «Я не люблю использовать это слово, однако вынужден: наши амбиции сыг-рали с нами злую шутку», – говорил

вице-президент по корпоративному маркетингу SGI Грэг Истис. «У нас бы-ли, и до сих пор есть, чудесные продук-ты, и мы это знали. К сожалению, ры-нок, для которого мы производили на-шу технику, был очень мал. Мы прос-то не могли быстро повернуть корабль для того, чтобы соревноваться с новым поколением ПК».

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

ной неудовлетворительный финансо-вый квартал стал причиной увольне-ния из SGI 1000 сотрудников. С 1997 по 2001 год персонал компании со-кратился практически вдвое: с 12 ты-сяч до 6 тысяч человек.

Постоянные неудачи вынудили SGI подправить свою философию. Несмот-ря на то что 75% своих доходов компа-ния получает в результате продаж ап-паратного обеспечения, SGI, подоб-но IBM, решила перепрофилировать-ся из продавца «железа» в реализа-тора готовых аппаратно-программных решений. Пример – «системы коллек-тивной визуализации» (Systems for Collaborative Visualization). Суть их со-стоит в том, что над проектом, будь то CAD-моделирование, научно-техни-ческие расчёты, или трёхмерное моде-лирование, могут одновременно рабо-тать множество пользователей в неза-висимости от их местоположения. По-добные системы состоят из всего спек-тра продукции SGI: начиная от рабо-чих станций и заканчивая серверами визуализации Onyx и системами хра-нения данных.

Ещё один пример, так называемые «центры реальности» (Reality Centre), как их называет компания, были раз-работаны SGI ещё в середине 90-х годов прошлого столетия (а точнее – в 1994 году) и использовались NASA, Boeing и другими государственными учреждениями и крупными коммер-ческими компаниями. Эти комплексы позволяют моделировать практически любое окружение, будь то контрольная башня аэропорта или центр управле-ния атомной электростанцией. Несмот-ря на то что в начале своего сущест-вования количество подобных цент-ров можно было сосчитать на пальцах рук, к 2001 году эта цифра возросла до вполне приличных 450 штук. «Мы ста-новимся более известными в этой об-ласти, которая представляет собой оказание услуг по установке высокоп-роизводительных комплексов для сов-местной визуализации, быстродейс-твующей обработки данных и их хра-нения, а также их объединению по все-му миру», – подводил тогда итоги тог-да Боб Бишоп.

Для понимания последней заслу-живающей внимания технологии VAN (Visual Area Networking – «сетевая ви-зуализация») обратимся к словам Эди-

Проигранная процессорная гонкаВ 1997 году SGI убедилась, что более не мо-жет соперничать с Intel и IBM в разработ-ке новых процессоров, поэтому приняла решение о постепенной миграции своей продукции на новую платформу. В то вре-мя наиболее многообещающим процессо-ром должен был стать чип Mersed (будущий Itanium), разрабатывавшийся Intel совмест-но c Hewlett-Packard с 1993 года. В 1998 году SGI официально объявила о том, что посте-пенно прекратит разработку и выпуск про-цессоров семейства MIPS, а также выделит процессорное подразделение в самостоя-тельную компанию (что и случилось в 1998 году, когда на свет появилась MIPS Inc.). Однако постоянные проблемы, возникав-шие по ходу разработки Mersed, а также неугомонный технический прогресс вынуж-дали SGI продолжать поддерживать свою продукцию в конкурентоспособном поло-жении. А для этого, как ни крути, были не-обходимы новые процессоры.

Развитие же этого направления дава-лось Silicon Graphics всё сложнее и слож-

нее. К 2002 году частота наиболее произ-водительного процессора MIPS, R14000А, добралась до смехотворной отметки 600 МГц. При этом стоит учесть, что он, как и R12000, являлся обновлённым R10000, ко-торый был выпущен ещё в 1996 году. Не об-ладая конкурентоспособной производи-тельностью, этот процессор мог похвас-таться лишь малым энергопотреблением – 17 Вт. Тактовая частота следующей вер-сии этого ядра, R16000, достигла 800 МГц. Это был последний барьер, который смог-ла преодолеть MIPS Inc.

В 2004 году SGI планировала присту-пить к выпуску процессоров на основе но-вой архитектуры под кодовым названием N1, которая должна была принести в мир MIPS двуядерные чипы. К 2005 году следу-ющее поколение, N2, должно было, нако-нец, преодолеть гигагерцовый рубеж. Од-нако постоянные финансовые проблемы заставили компанию практически полно-стью отказаться от MIPS-процессоров и пе-рейти на архитектуру Itanium, которая, ещё не выйдя, успела разочаровать весь мир.

Рабочая станция SGI 750

Page 91: 043 Системный Администратор 06 2006

89№6, июнь 2006

ретроспектива

сона Снила, менеджера по производс-твенному маркетингу SGI: «Вспом-ним закон Мура: по прошествии опре-делённого промежутка времени мощ-ность компьютера увеличится в два раза. Вместе с тем, из-за увеличения количества передаваемой информа-ции возникает необходимость в соот-ветствующем увеличении и пропуск-ной способности. 10 лет назад, если вы занимались производством авто-мобилей, вам необходимо было про-считать приблизительно 10 тысяч де-талей, из которых она состояла. Сегод-ня эта цифра возросла до 10 милли-онов. Несмотря на возросшее за пос-ледние 10 лет в десятки и сотни раз быстродействие компьютеров, экран-ное разрешение мониторов хоть и уве-личилось, однако не столь значитель-но. «Сетевая визуализация» позволя-ет вам вместо передачи информации пересылать лишь её изображения, тем самым значительно эффективнее рас-ходуя пропускную способность канала передачи информации. Для примера: геолог в поле может получать данные с суперкомпьютера своей компании на ноутбук или даже карманный ком-пьютер». Как и «центры реальности», системы «сетевой визуализации» ути-лизировали весь спектр аппаратного и программного обеспечения SGI.

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

теры, спрос на которые был более или менее стабильным.

В июне 2001 года компания объ-явила об окончательном прекращении производства Visual Workstation. Это не только ударило по имиджу компа-нии, но и вылилось в 60 млн. долларов убытков, состоявших из отменённых контрактов на производство и нереа-лизованного товара. Ко всему проче-му SGI объявила об очередном уволь-нении 1500 человек.

Спустя полгода после роспуска подразделения, занимавшегося раз-работкой Visual Workstation, состоя-лось долгожданное обновление рабо-чих станций начального уровня, честь которых на протяжении шести лет «от-стаивали» O2 и O2+. Данное событие произошло в январе 2002 года, когда миру была представлена модель Fuel. Основная её особенность, позднее ставшая стандартом для остальных но-винок SGI – архитектура, основанная на базе SN-1. В принципе Fuel пред-ставляла собой одномодульную и од-нопроцессорную вариацию на тему сервера начального уровня Origin 300, дополнительно оснащённую графикой VPro. Однако цена станции, стартовав-шая с 11,5 тыс. долларов, явно не спо-собствовала обретению Fuel статуса «начального уровня».

Анонс новой рабочей станции по-мерк по сравнению с возникшими слу-хами о том, что SGI опять взялась со-трудничать со своим злейшим врагом – Microsoft. В январских новостях, цирку-лировавших в Интернете, говорилось о продаже части патентов на графи-ческие технологии за 62,5 млн. дол-ларов. Несмотря на то что представи-

тели SGI опровергали эти слухи, в ап-реле Патентное Ведомство США под-твердило передачу трёх патентов в ру-ки Microsoft.

Затем SGI впала в «спячку» и лишь в ноябре 2002 года объявила о выходе Origin 3900 – наиболее производитель-ного сервера компании. Новинка под-держивала до 512 процессоров, до 1 Тб оперативной памяти и в максималь-ной конфигурации стоила 3 млн. дол-ларов. Примечательно, что Origin 3900 стал последним сервером SGI, работа-ющим на базе чипов MIPS.

Лето 2003 года ознаменовалось выходом множества новинок, пред-ставленных SGI. В июле семейство ра-бочих станций Octane, которому шёл шестой год, наконец-то «ушло на по-кой», а вместо него появился новый чемпион – Tezro. Новинка была осно-вана на уже ставшей стандартом для всей продукции SGI архитектуре Origin 3000, содержала один, два или четыре процессора MIPS R16000, до 8 Гб ОЗУ, а также самый производительный гра-фический адаптер серии VPro – V12 со 128 Мб видеопамяти. Цена – от 31 тыс. долларов.

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

Первая станция на базе ItaniumНесмотря на то что о появлении первых систем семейства Altix на базе процессо-ров Itanium компания объявила лишь в 2003 году, попытка выпустить рабочую станцию на базе нового чипа от Intel была предпри-нята ещё раньше. В июне 2001 года вмес-те с анонсом о прекращении производс-тва рабочих станций на базе процессоров Pentium SGI объявила о выпуске SGI 750 – единственной модели, построенной на ба-зе Itanium первого поколения. Однако эта рабочая станция не являлась собственной разработкой компании, внутри неё исполь-зовались стандартные компоненты: мате-ринская плата производства Intel, стандарт-

ная оперативная память типа SDRAM, а так-же графический адаптер ATI XPERT 2000 PRO на базе чипа Rage 1999 года выпуска. Последний «штрих» к «портрету» новин-ки – выпуск компанией Dell рабочей стан-ции Precision Workstation 730, являющейся… точной копией SGI 750 как по внутреннему содержанию, так и по внешнему исполне-нию, однако, что интересно, анонсирован-ной на месяц раньше. Из-за «сырости» пер-вого поколения чипов Itanium, малого коли-чества доступного для этой платформы ПО, а также неудачной комплектации SGI 750 и её работы исключительно под Linux, рабо-чая станция популярности не обрела и ско-ропостижно «канула в Лету».

Рабочая станция SGI Fuel

Page 92: 043 Системный Администратор 06 2006

90

ретроспектива

InfiniteReality4, построенными на базе чипов от ATI.

И, наконец, последняя новинка, появления которой компьютерная об-щественность ждала на протяжении пяти лет, – семейство серверов Altix 3000, работающих на основе процес-сора Itanium.

Итаник XXI векаЕщё до своего официального выхо-да новый процессор Itanium компании Intel был окрещён общественностью «Титаником» нового века, или прос-то «Итаником» (Itanic). Первоначаль-но выход процессора должен был со-стояться в 1999 году, однако затем его выпуск был неоднократно перенесён, что стало причиной неудовлетвори-тельных финансовых показателей SGI в 1998-99 гг.

Тем не менее компания возлагала большие надежды на новый чип от Intel, и при проектировании архитектуры SN-1 (Onyx 3000) изначально нацели-вала её как на работу с чипами MIPS, так и с Itanium. Однако, если семейс-тво Onyx 3000, как и его предшествен-ники, работало на базе операционной системы IRIX, то для Altix SGI решила использовать Linux.

Почему именно Linux? Перенос операционной системы IRIX на новую платформу оказался задачей трудно-выполнимой: объём кода, написанного за более чем десяток лет, был слишком велик. Конечно, ходили слухи, что этот проект всё же стартовал в недрах SGI, однако по прошествии короткого про-межутка времени был отменён.

В то же время такие компании как RedHat и SUSE уже располагали дист-

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

Август 2003 года ознаменовался долгожданным выходом первого сер-вера из нового семейства Altix на базе процессоров Itanium 2. Перед анонсом компания объявила об увольнении 600 человек, которое позволило «наскрес-ти» ей дополнительные 20 млн. долла-ров на запуск новой линейки.

Архитектурно сервер Altix является полной копией Origin 3000 с той лишь разницей, что в процессорных модулях вместо чипов MIPS стояли процессоры Intel. На момент выхода новые серве-ра являлись единственными система-ми, способными нести «на борту» 256 процессоров Itanium 2 и 24 Тб ОЗУ. Бла-годаря этому за первые пару месяцев

SGI объявила о 110 клиентах, поже-лавших заполучить новинку. К сожале-нию, за квартал компания смогла реа-лизовать лишь 29 готовых систем, ко-торые, тем не менее, принесли компа-нии 12 млн. долларов прибыли.

На протяжении 2004 года SGI ти-хо «варилась в собственном соку», лишь единожды вынырнув на поверх-ность, чтобы представить Prizm – пер-вую «родную» рабочую станцию ком-пании на базе процессоров Itanium 2, впрочем, основанную, как и большинс-тво продукции компании, на базе сер-верной архитектуры (в данном случае Altix). Два процессора, поддержка до 24 Гб ОЗУ, возможность установки не-скольких графических карт ATI FireGL обойдутся пользователю от 8,5 до 39 тыс. долларов.

Представленная в 2004 году стан-ция Prizm устанавливалась в сервер-ную стойку, тогда как в 2005 году поя-вилась модель в стандартном настоль-ном исполнении.

Объявленный в апреле 2005 г. оче-редной финансовый квартал выдался, как всегда, убыточным для SGI. Потери составили 45 млн. долларов, годовой доход – 240 млн. долларов. Для сравне-ния: четыре года назад эта цифра со-ставляла 500 млн., шесть лет назад – 760 млн. доллвроа.

Эта новость, впрочем, заранее ожидаемая, спровоцировала падение курса акций SGI. Их цена, ранее до-стигавшая почти 50 долл., опустилась ниже долларовой отметки, в резуль-тате чего акции компании были сня-ты с основных торгов фондовой бир-жи New York Stock Exchange. Несмот-ря на то что акции SGI и раньше попа-дали в категорию «ниже одного дол-лара», в течение месяца-двух их цена поднималась на своё прежнее место. Однако теперь компанию ничто не мог-ло спасти от краха – на момент написа-ния статьи стоимость одной акции упа-ла до поистине смешных 6,8 центов!

В поисках средств для существо-вания компания совершала довольно отчаянные поступки. Поскольку коли-чество персонала SGI за последние несколько лет значительно сократи-лось, компания приняла решение пере-ехать на другое место, в здание мень-шей площади. А оставшийся пустым корпус SGI в ноябре 2005 года сдала в аренду компании Google, согласив-

Проект «Колумбия»К 2004 году Национальное аэрокосмичес-кое агентство для проведения своих даль-нейших экспериментов заказало SGI новый суперкомпьютер, который бы увеличил ком-пьютерные мощности NASA в десятки раз. В июле 2004 года был официально запущен проект под названием Project Columbia, ре-зультатом которого должна была стать сис-тема, состоящая из 20 серверов Altix 3700, каждый из которых нёс на борту 512 про-цессоров. На следующий день после запус-ка, состоявшегося 26 октября, новый су-перкомпьютер стал первым в списке Top 500 наиболее производительных систем

мира, достигнув показателя 42,7 Тфлоп/с, или 42,7 триллиона операций с плавающей запятой в секунду. Однако спустя корот-кий промежуток времени, Project Columbia был свергнут новым суперкомпьютером BlueGene/L корпорации IBM, обладаю-щим производительностью 280,6 Тфлоп/с. На сегодняшний день первую тройку мест в списке занимают системы «голубого ги-ганта», тогда как суперкомпьютер SGI опус-тился на четвёртую позицию.

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

Сервер визуализации SGI Onyx4

Page 93: 043 Системный Администратор 06 2006

91№6, июнь 2006

ретроспектива

шейся каждый год выплачивать ей 17 млн. долларов.

Вместе с этим заявлением SGI объ-явила о выпуске сервера Altix 4000, ос-новное отличие которого от её пред-шественников заключается в подде-ржке 128 Тбайт оперативной памяти. На данный момент Altix 4000 являет-ся последним обновлением в линейке серверов компании.

Роковое 8 мая1 февраля 2006 года, после объяв-ления результатов за очередной фи-нансовый квартал, согласно кото-рым компания потеряла очередные 79 млн. долларов, совет акционеров SGI не выдержал и принял решение снять Боба Бишопа с поста исполни-тельного директора. Его место занял Денис МакКинна, ранее исполнявший аналогичные обязанности в компа-нии SCP Global Technologies. «Компа-ния столкнулась с проблемами, одна-ко мы о них знаем», – заявлял тогда МакКинна. «Мои методы правления SGI будут заключаться в продолжении того, что мы делаем, более эффектив-но и продуктивно, именно так мы смо-жем расширяться и рапортовать о по-вышении доходов».

Результат работы нового исполни-тельного директора не заставил себя ждать: через месяц, в марте этого го-да, компания объявила об очередном увольнении 250 человек, в результате

чего на данный момент в компании ра-ботают всего 1800 сотрудников. Кроме того, свои посты покинули: финансо-вый директор Джеф Зельмер и испол-нительный директор Уоррен Пратт. Ту-чи над головой SGI сомкнулись, и гря-нул гром.

Ещё в феврале представители ком-пании «в тихую» предрекали о том, что вполне возможно, в течение года SGI обанкротится. К сожалению, их слова стали правдой.

Во время написания этой статьи 8 мая компания публично объявила о том, что была вынуждена подать за-явление о банкротстве. Теперь в лю-бой момент времени компания может прекратить своё существование. Це-лый штат аналитиков и финансистов пытается хоть немного исправить фи-нансовое положение компании, кото-рое иначе, как плачевным, назвать не-льзя: при 369,4 млн. долларов, которые являются оценочной стоимостью иму-щества SGI, долг компании составля-ет 664,3 млн. долларов. Где взять де-ньги на его погашение, пока, к сожа-лению, не ясно.

Грустная лирическая нотаЧто осталось от прежней SGI, компа-нии, ещё 10 лет назад будоражившей ум каждого техника, художника либо учёного? Совсем немного: несколько первоклассных инженеров, пара-трой-ка технологических ноу-хау и патентов на технологии, созданные компанией за период её существования. Напри-мер, именно патенты на графические технологии, часть из которых ещё на-ходится в закромах SGI, интересуют компанию nVidia, желающую, соглас-но циркулирующим в Интернете слу-хам, заполучить остатки этого бизне-са компании. Скорее всего, компания хочет заполучить в свои владения тор-говую марку OpenGL, всё ещё прина-

длежащую SGI. «Составляющие», пе-речисленные выше, являются целью и других компаний, сумевших выжить в условиях суровой реальности и по-думывающих над покупкой SGI. Ана-литики «бросаются» громкими имена-ми: Sun, Hewlett-Packard, IBM. Некото-рые пророчат в качестве потенциаль-ного покупателя преуспевающую ны-не Apple Computer. В свете столь бур-но и непредсказуемо развивающихся событий нам остаётся лишь пожелать SGI удачи.

Ну а в заключение хотелось бы пе-ресказать слова ещё одного посети-теля сайта Osnews.com: «Мы пользу-емся персональными компьютерами, в которых установлены видеокарты, основанные на технологиях SGI; ком-пьютерами Macintosh, операционная система которого славится своими ви-зуальными эффектами, созданными при помощи OpenGL; рабочими стан-циями на базе Linux, на которых рабо-тает графическое ПО, впервые появив-шееся на платформе SGI. Однако мы больше никогда не увидим уровень ин-новаций, подобный тому, что принес-ла в мир SGI, от других компаний типа Intel, AMD, Dell и иже с ними».

Несмотря на то, что на данный мо-мент SGI «дышит на ладан», пользо-ватели её систем продолжают холить и лелеять свои компьютеры. Их ак-тивность можно проверить, загля-нув по ниже перечисленным адресам: www.nekochan.net, www.siliconbunny.com, www.sgizone.net.

Источники:1. http://www.cnet.com2. http://www.eweek.com3. http://www.osnews.com4. http://www.sgi.com5. http://www.theregister.co.uk6. http://www.wikipedia.com7. http://www.wsj.comСервер SGI Altix 3000

Попытка реабилитацииПоследняя на данный момент новая разра-ботка от SGI – «революционная» техноло-гия RASC (Reconfigurable Application-Specific Computing – вычисления, реконфигурируе-мые под конкретное приложение), реали-зация которой представляет собой blade-модуль, предназначенный для установки в стандартную серверную стойку, и содержа-щий несколько программируемых вентиль-

ных матриц (FPGA). Такой модуль, подклю-чённый при помощи шины NUMAlink к сер-веру Altix, программируется под выполнение конкретной задачи и, по словам компании, ускоряет её выполнение на порядок. На дан-ный момент наиболее производительная мо-дель, RC100, содержит две FPGA-матрицы Xilinx Virtex 4 LX200, 80 Мб сверхбыстрой ста-тичной памяти QDR SRAM, или же до 20 Гб оперативной памяти типа DDR2 SDRAM.

Page 94: 043 Системный Администратор 06 2006

92

книжная полка

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

Вопреки ожиданию в начале книги авторы рассказывают о диаметраль-ной противоположности беспроводных

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

Надо заметить, это издание – единственная книга на русском язы-

сетей, т.е. о сетях, построенных тради-ционным образом.

Из второй главы вы узнаете общие сведения о беспроводных сетях стан-дарта 802.11. Обзор топологий WLAN, механизмы доступа к среде стандар-та 802.11, нестандартные устройства, операции, осуществляемые на уровне MAC-стандарта 802.11. Далее подроб-но описаны стандарты беспроводных сетей, построенных с использованием 802.11 ; 802.11a ; 802.11b ; 802.11g. В гла-ве, посвященной безопасности, авторы рассказывают о различных механиз-мах аутентификации, известных сла-бых местах, и, что немаловажно, да-ют рекомендации по усилению защиты (в частности, описаны алгоритмы ау-тентификации и защиты данных).

Достаточно подробно рассмотрен материал, касающийся вопросов роу-минга в беспроводных сетях, а также механизм QoS (802.11e). Из главы «Ра-

Основы построения беспроводных локальных сетей стандарта 802.11Педжман Рошан, Джонатан Лиэри

диочастотный тракт» вы узнаете о том, как вышеописанные технологии рабо-тают на более низком уровне (основы ради- и антенной техники).

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

В завершении авторы рассказыва-ют о последних технологиях беспро-водной передачи данных (bluetooth, UWB, FSO). Хорошая и полезная книга, с материалом которой должен быть оз-накомлен каждый сетевой инженер и администратор.

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена Издательским домом

«Вильямс».

«Вильямс»

2004

304

5-8459-0701-2

≈ 325 руб.

Виртуальные машины: несколько компьютеров в одномАлексей Гультяев

ке, полностью посвященная виртуаль-ным машинам.

Весь материал книги посвящен тройке наиболее популярных программ в этой отрасли, а именно Microsoft Virtual PC 2004, VMWare Workstation и Parallels Workstation.

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

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

сы сетевого взаимодействия с госте-выми ОС.

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

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

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательством «Питер».

«Питер»

2006

224

5-469-01338-3

≈ 300 руб.

Page 95: 043 Системный Администратор 06 2006

93№6, июнь 2006

книжная полка

Это издание является переводом офи-циального авторизованного издания Oracle press. Сразу стоит отметить, что эта книга подготовлена профессиона-лами и для профессионалов. Традици-онно для администраторов и разра-ботчиков баз данных тема оптимиза-ции является одной из основных сфер деятельности. Весь изложенный мате-риал в книге относится к Oracle 9i/8i.

Материал этой книги написан при учас-тии 12 авторов, каждый из которых яв-ляется специалистом в своей области. Rational Application Developer является одним из самых популярных средств разработки, тестирования и отлад-ки приложений J2EE на платформе WebSphere. Книга построена таким об-разом, чтобы даже при наличии мини-мального опыта работы с IBM Rational

Введение в IBM Rational Application DeveloperДжейн Фанг, Колин Йу, Кристина Лау и др.

Application Developer вы могли сразу приступить к написанию какого-либо проекта. Также следует отметить, что каждая глава является самодостаточ-ной частью материала, т.е. изложение ведется непоследовательно. Весь ма-териал носит сугубо практический ха-рактер – каждый вопрос и тема объ-ясняются на примере какого-либо уп-ражнения. Спектр рассмотренных тем очень широк: разработка Java-прило-жений, Web-разработка, технологии работы с базами данных, XML, ком-поненты Enterprise JavaBeans, Java Messaging Service и компоненты уп-равляемые сообщениями, Web-служ-бы, дополнительные вопросы, связан-ные с J2EE (программирование на ос-нове аннотаций, создание расширен-ных EAR-файлов для WebSphere, бе-зопасность J2EE). Подробно рассмот-рены вопросы создания Java прило-жений с графическим интерфейсом,

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

Oracle 9i. Оптимизация производительностиРичард Дж. Нимик

Несмотря на то что уже давно доступ-на версия 10g, большинство баз дан-ных, находящихся в промышленной эксплуатации, до сих пор использу-ют эти версии. Количество, и что са-мое главное – качество изложенного материала просто поражает. Среди рассмотренных тем: новые свойства Oracle 9i, основные принципы постро-ения индексов, дисковый ввод/вывод и фрагментация, оптимизация базы данных с помощью параметров ини-циализации, Enterprise manager, Oracle SQL Scratchpad и SQL *Plus Worksheet и tuning pack; использование explain, trace, tkprof и stored outlines. Стандар-тный синтаксис инструкций, оптими-зация запросов, объединение таблиц и другие продвинутые методы опти-мизации, применение pl/sql для улуч-шения производительности, использо-

Обзор книжных новинок подготовил Александр Байрак

вание параллелизма, V$-представле-ния, X$-таблицы. Подробно рассмот-рены вопросы использование пакета Statpack для настройки ожиданий и за-щелок, практические рекомендации по быстрому анализу системы, мони-торинг системы с помощью утилит из ОС UNIX. Книга адресована прежде всего профессиональным админист-раторам и разработчикам баз данных Oracle. Отличное и в своем роде уни-кальное издание.

Рекомендую!

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена Издательским домом

«Вильямс».

«Лори»

2006

726

5-85582-250-8

≈ 450 руб.

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательством «Кудиц-

Образ».

«Кудиц-Образ»

2006

592

5-91136-010-1

≈ 511 руб.

Page 96: 043 Системный Администратор 06 2006
Page 97: 043 Системный Администратор 06 2006

95№6, июнь 2006

подписка на 2006 год

Российская Федерация Подписной индекс: годовой – 20780, полугодовой – 81655 Каталог агентства «Роспечать» Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» Альтернативные подписные агентства: Агентство «Интер-Почта» (495) 500-00-60, курьерская

доставка по Москве Агентство «Вся Пресса» (495) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74 ЛинуксЦентр www.linuxcenter.ru Подписка On-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru

СНГ В странах СНГ подписка принимается в почтовых отделе-ниях по национальным каталогам или по списку номенк-латуры «АРЗИ»: Азербайджан – по объединенному каталогу россий-

ских изданий через предприятие по распространению

печати «Гасид» (370102, г. Баку, ул. Джавадхана, 21) Казахстан – по каталогу «Российская Пресса» через

ОАО «Казпочта» и ЗАО «Евразия пресс» Беларусь – по каталогу изданий стран СНГ через РГО

«Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10) Узбекистан – по каталогу «Davriy nashrlar» российс-

кие издания через агентство по распространению пе-чати «Davriy nashrlar» (7000029, г. Ташкент, пл. Муста-киллик, 5/3, офис 33)

Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г. Ереван, пл. Сасунци Да-вида, д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Сарьяна, 22)

Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29) и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42)

Молдавия – по каталогу через ГП «Пошта Молдавей» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134)

по списку через ГУП «Почта Приднестровья» (МD-3300, г. Тирасполь, ул. Ленина, 17)

по прайс-листу через ООО Агентство «Editil Periodice» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134)

Подписка для Украины: Киевский главпочтамт Подписное агентство «KSS», тел./факс (044)464-0220

Подписные индексы:

20780*

81655**

по каталогу агентства «Роспечать»

87836

по каталогу агентства«ПрессаРоссии»

* годовой** полугодовой

Page 98: 043 Системный Администратор 06 2006

96

СИСТЕМНЫЙ АДМИНИСТРАТОР№6(43), Июнь, 2006 год

РЕДАКЦИЯИсполнительный директорВладимир ПоложевецОтветственный секретарьНаталья Хвостова[email protected]Технический редакторВладимир ЛукинРедакторАлексей КоршуновВнештатные редакторыАлексей БарабановСергей Супрунов

РЕКЛАМНАЯ СЛУЖБАтел./факс: (495) 628-8253Евгения Тарабринаreс[email protected]

Верстка и оформление[email protected]Дизайн обложкиНиколай Петрочук

По вопросам распространенияобращайтесь по телефону:(495) 628-8253 (доб. 120)

107045, г. Москва,Ананьевский переулок, дом 4/2, стр. 1тел./факс: (495) 628-8253Сайт журнала: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТАПетр Положевец

УЧРЕДИТЕЛИВладимир ПоложевецАлександр Михалев

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»

Отпечатано типографиейГП «Московская Типография №13»Тираж 11000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати, телерадиовещания и средств массо-вых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.).

За содержание статьи ответственность несет автор. За содержание рекламно-го объявления ответственность несет рекламодатель. Все права на опубли-кованные материалы защищены.

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Уважаемые читатели!

Спешите оформить подпискуна второе полугодие 2006 года!

Приобрести новые и старые номера журналавы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

Доставка почтой в любую точку России.

Возможности технологии MS Windows SharePoint ServicesWSS предоставляют удобный и прос-той интерфейс для создания и изме-нения веб-страниц. Однако, исполь-зуя совместимый с данной технологи-ей редактор, например Microsoft Office FrontPage 2003, можно очень просто повысить функциональность и улуч-шить внешний вид веб-узла.

Настраиваем Dr. Web Enterprise SuiteМало кто ставит под сомнение тот факт, что на рабочем месте современ-ного человека должен стоять антиви-русный пакет. Сегодня вирусы берут не умением, а числом. В основном, они не разрушают информацию – они созда-ют условия для «утечки» коммерчес-кой информации. Что именно выбрать в качестве основы, чтобы имелась воз-можность централизованного обнов-ления антивирусных агентов, имел-ся единый центр управления и велась оперативная статистика? Стоит обра-тить внимание на антивирусные реше-ния масштаба предприятия (Enterprise Solutions).

Боремся со спамомБорьба с непрошенной коммерческой почтой – спамом, как и прочие задачи,

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

Как работает Sendmail? Полезные подробности (Часть 3)В следующем номере поговорим о со-провождении работающего сервера Sendmail. Он должен не просто рабо-тать, а работать эффективно, надёжно и безопасно. И для этого мы подроб-нее остановимся на некоторых вопро-сах мониторинга, оптимизации и повы-шении защищённости сервера.

Устанавливаем Systems Management Server 2003Установка программного обеспече-ния, обновлений, а также проведение инвентаризации, по мере увеличения количества компьютеров в сети, ста-новится постоянной головной болью системного администратора. Мощным средством, способным превратить ру-тинную работу в удовольствие и сэ-кономить массу времени, становится Systems Management Server 2003.