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

Page 1

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

КА

БЫ С

ТР О ТИ РАС РА КУ Ж ПИ

НИ НО К У ВО ЛЫ ГО ЗА ДНИ ТЯ Е НУ ЛИ

ЛИ

СЬ

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

Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии

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

танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM

Так видит журнал читатель, оформивший подписку: №5(30) май 2005 подписной индекс 81655 www.samag.ru

Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD

№6(43) июнь 2006

КО НЕО НЧ ЖИ ИЛ ДА ИС НН ЬД О ЕН ЬГ И ЗА

ПО АВ СЛ РА Е О Л НА ТПУ РА СКА БО ТЕ

УЕ ХА Л

ВО

ТП УС К

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

Быть или не быть зарубежному софту в России? Современный Linux-сервер: виртуализируем сеть Создаем зоны DNS Технология AJAX: как насчет безопасности?

Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM Интервью с Ларри Уоллом – создателем языка Perl

Переключи драйвер NTFS в режим read-write Настраиваем безопасный роутер на базе FreeBSD

ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Роспечать – 20780, 81655 Пресса России – 87836 Интер-почта – тел. (495) 500-00-60

Пишем систему динамической защиты ресурсов в сети Первый раз в Linux-класс! Оппонент мистера Гейтса



оглавление 3 ТЕНДЕНЦИИ РЕПОРТАЖ 4 PHP – это мой путь решать возникающие в Web задачи

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

АНАЛИТИКА 6 Быть или не быть зарубежному софту в России?

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

АДМИНИСТРИРОВАНИЕ 10 Современный Linux-сервер: виртуализируем сетевые устройства

Переведя сетевые подключения в категорию виртуальных, можно значительно упростить их обслуживание и предусмотреть многие внештатные ситуации. Алексей Барабанов alekseybb@mail.ru

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

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

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

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

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

Автоматизация этого процесса значительно снизит затраты на администрирование. Иван Коробко ikorobko@prosv.ru

ЧЕЛОВЕК НОМЕРА 34 Оппонент мистера Гейтса

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

СЕТИ 38 Создаем зоны DNS

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

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

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

БЕЗОПАСНОСТЬ 50 Настраиваем безопасный роутер на базе FreeBSD

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

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

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

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

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

ОБРАЗОВАНИЕ 70 Первый раз в Linux-класс!

Программы обучения и сертификации. Андрей Маркелов andrew@markelov.net

74 Linux в школе?

Проблемы использования Linux в учебных заведениях. Сергей Яремчук grinder@ua.fm

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

Сергей Яремчук grinder@ua.fm

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

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

РЕТРОСПЕКТИВА 86 Надежда умирает последней: история компании SGI. Часть 3 Дмитрий Мороз akuji@list.ru

92 КНИЖНАЯ ПОЛКА 33, 61, 73

№6, июнь 2006

BUGTRAQ 1



тенденции 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. ... Хоть Джону еще и нужно постараться для того, чтобы его труд можно было назвать полноценным портом, уже то, что у него есть сейчас, несомненно, само по себе полезно».

вроде 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

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-дистрибутивов

№6, июнь 2006

3


репортаж

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

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

В

первые Россию посетил основа- были именно бинарными или байт-ори- работке проектов для «внутреннего тель проекта PHP Расмус Лер- ентированными). Вводится автомати- употребления» использовать исклюдорф (Rasmus Lerdorf) и один ческая поддержка Unicode для стро- чительно внутрипонятные (читай – наиз активных разработчиков ядра и мо- ковых литералов. Происходит обнов- писанные иероглифами) названия педулей PHP Андрей Змиевский (Andrei ление семантики языка. Добавляется ременных и т. п. С докладом Андрея Zmievski). поддержка преобразований кодировок Змиевского в виде тезисов можно озСобственно, Андрей Змиевский в различных потоках данных. При этом накомиться на его сайте по адресу: и стал первым докладчиком на конфе- предполагается возможность опери- http://www.gravitonic.com/talks. Старт конференции был дан, начаренции, рассказав о внедрении подде- ровать преобразованиями кодировок ржки Unicode в PHP 6. Да-да, вы не ос- для процесса выполнения скрипта, не- ло положено. Но дальше произошло лышались. Не так уж и давно у нас по- посредственно самого скрипта; ввода- что-то странное. Выступившие вслед за этим докладчики говорили не стольявилась стабильная «пятерка», до сих вывода и файловой системы. Возможность управления коди- ко о разработке приложений с испольпор она еще не стала стандартом дефакто, а уже готовится версия PHP 6. ровкой скрипта (упрощенно это мож- зованием PHP, сколько о чем-то друПричина довольно проста: объем внут- но представить как возможность ис- гом. Прозвучавший доклад «Автомаренних переработок, потребовавших- пользовать национальные символы тизация проектных задач и организася для полномаcштабной поддержки вплоть до иероглифов в названиях пе- ция цикла Build → Package → Deploy» Unicode, таков, что провести его в ка- ременных), вызвало у аудитории впол- был, может, и интересен в качестве честве очередного релиза версии 5 не законный вопрос: а зачем собствен- примера автоматизации сопровождепросто невозможно. Судите сами. но? Немного замявшись, г-н Змиевс- ния процесса разработки приложений, Заявлена поддержка принципиаль- кий ответил, что в основном это но- но во-первых, докладчик не коснулно нового типа – символьной строки вовведение ориентировано на раз- ся нескольких действительно важных Unicode и отделение типа «бинарная работчиков из стран Юго-Восточной для этого процесса тем (прежде всего – строка» (до сих пор все строки в PHP Азии. Там, видите ли, любят при раз- проблемы получения и сборки патчей),

4


репортаж а во-вторых… Связь с разработкой веб- думаете Yahoo! – это огромная компаприложений с использованием PHP ния, у которой целое море серверов, постепенно начала тускнеть. которые и решают все наши проблеСледующий доклад – «Как зара- мы с нагрузкой? Но это совсем не так!». ботать деньги на Open Source» – про- После чего в живой и активной манешел живее. В большей степени пото- ре наглядно продемонстрировал аудиму, что тема довольна близка аудито- тории подходы к выявлению, анализу рии и животрепещуща. Хотя с тем же и устранению неоптимальных, ресуруспехом этот доклад можно было про- соемких мест. Кстати, всем рекоменчитать и на любой другой IT-конферен- дуется смотреть в сторону расширения ции. После этого Александр Календа- APC (http://pecl.php.net/package/APC). рев попытался рассказать о методах Следующим пунктом в докладе прокриптозащиты в b2b веб-приложениях. звучала проблема защищенности вебПочему я написал «попытался»? Ну хо- приложений. В том числе рассмотретя бы потому, что 60% времени Алек- но расширение Filter (http://pecl.php.net/ сандр говорил о стандартах и нормо- package/filter). Третьим ключевым моментом дообразующих документах, связанных с этой тематикой. По моим наблюде- клада стал разговор о PHP в примениям, большая часть аудитории, явно нении к современным тенденциям не сталкивавшаяся с этой проблемой в веб-приложениях. Здесь речь пошла всерьез, просто потеряла за это время об усовершенствованиях по отношенить, суть и цель повествования. нию к XML, RSS-потоках и, разумеется, В завершение первого дня прозву- о технологиях асинхронной динамичесчали еще два доклада. Первый был кой подкачки. В последнем случае авпосвящен дистрибуции PHP-прило- тор-изобретатель языка остался верен жений с помощью PEAR Installer. Са- JSON (Java Script Object Notation) и проВыступление Расмуса Лердорфа мой интересной, на мой взгляд, в нем пагандируемому им расширению PHPбыла часть, посвященная PEAR-ка- JSON. В общем, настоятельно реко- ботки программных продуктов, дистналам и возможности использования мендую всем самостоятельно ознако- рибуции, интеграции с другими проспециализированного сервера. Кажет- миться со слайдами, подготовленными граммными продуктами. И в меньшей ся, помимо массы догматов, ограниче- расмусом Лендорфом для этого докла- степени о PHP и PHP для разработки современных и эффективных веб-приний и всяких других штучек, призван- да (http://talks.php.net/show/phpclub). Во второй день так же прозву- ложений. Язык трансформировался ных усложнить жизнь всем тем, кто не успел вовремя вскочить на подножку чал доклад о применении процедур во что-то другое? Перестал удовлетPEAR-экспресса, эта система породи- в СУБД MySQL, Сергей Павлов из ком- ворять современным тенденциям или ла, наконец, и что-то полезное приме- пании РБК поведал об агрегаторах стал проигрывать на рынке веб-прилонительно к реальной жизни. Заверша- приложений. Большой интерес вы- жений другим платформам? Во второй день конференции мне ющий первый день доклад был истин- звал доклад Евгения Климова «Пракным сыном нашего времени и назы- тика использования технологии XSLT удалось взять интервью у Расмув приложениях php5», который сложил- са Лердорфа и Андрея Змиевского вался «AJAX и основы Rich Client». Разумеется, обойти тему техноло- ся не совсем удачно и из-за нехватки (интервью читайте в июльском номере гий динамической подкачки и асинх- времени оказался скомканным и об- журнала – примеч. редакции). Я не мог удержаться и спросил г-на Лердорронной загрузки, говоря о разработке резанным. веб-приложений, сейчас попросту неВ целом конференция оставила фа о том, что он сам думает о сраввозможно. Другое дело, что в докладе лично у меня двойственное ощущение. нениях PHP с другими языками, о ропрозвучал скорее верхний слой про- Тематические доклады наших гостей ли и применимости PHP? В ответ Расблематики, так сказать «AJAX для са- из Yahoo! (и Расмус Лердорф, и Анд- мус очень удивился и сказал, что сам мых маленьких». Кроме этого был дан рей Змиевский уже несколько лет ра- он об этом думает довольно мало. некоторый обзор имеющихся в при- ботают именно там), несомненно стали «Я смотрю на Web, я думаю именно роде библиотек, который, уже почти самым главным событием конферен- о Web. Как только возникает новая под занавес, свелся к DOJO javascript ции и посвящались именно проблеме задача, решить которую имеющимиtoolkit. Проект уже в стадии предпро- разработки веб-приложений с исполь- ся инструментами становится невоздакшен, и его можно и нужно смотреть, зованием PHP. В большинстве осталь- можно или не удобно – мы что-то дотрогать руками и т. п. ных докладов язык, технология и тен- бавляем и меняем в PHP. Просто потоВторой день конференции начался денции PHP, связь PHP с Web, PHP, му, что PHP – это мой путь решать возс доклада отца-основателя PHP Расму- как инструмент и платформа разра- никающие в Web задачи». са Лердорфа. Прежде всего г-н Лер- ботки веб-приложений, как бы отошТекст: Дмитрий Горяинов дорф заговорил о скорости выполне- ли на второй план. Докладчики говоФото: Антон Довгаль ния веб-приложений: «Вы, наверное, рили об организации процесса разра-

№6, июнь 2006

5


аналитика

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

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

Н

Ольга Максимович

азвание проекта федераль- ющих стратегические отрасли и особо прежде всего попадут военный компного закона «Об информации, важные объекты Российской Федера- лекс, энергетика и транспорт. информационных технологи- ции, запрещается использование заях и защите информации» так и оста- рубежных программно-технических Цена вопроса лось бы не столь узнаваемым для ши- средств. В другой говорится о недо- Как известно, безопасность в стране, рокой публики, если бы не инициати- пустимости наличия в данных средс- в том числе и информационную, обесва депутатов-единороссов. Геннадий твах недокументированных функций. печивают ФСБ и Федеральная служба Гудков, член Комитета безопасности, Конкретный список объектов и отрас- по техническому и экспортному конти Александр Хинштейн, зампредсе- лей, где планируется запретить зару- ролю. Кстати, в их совместной работе дателя Комитета по промышленнос- бежный софт, по мысли разработчиков с Минобороны уже есть практика огти, во втором чтении предлагают до- и авторов поправок, должен устанав- раничения в стратегических отраслях. полнить законопроект двумя поправ- ливаться правительством не позднее Например, предприятия могут испольками. Одна устанавливает норму, со- 12 месяцев с момента вступления зако- зовать только антивирусы, на которые гласно которой в государственных ин- на в силу. Однако уже сейчас очевидно, имеются сертификаты этих ведомств. формационных системах, обеспечива- что в список стратегических отраслей Что же касается инициативы депутатов

6


аналитика Гудкова и Хинштейна, то ФСБ с уче- словам, переходят на собственный ные Штаты, либо продолжающих жить том ряда юридических и технических софт. «Если есть отечественный ана- в России и сотрудничать с компанизамечаний предложенные поправки лог западного программного обеспе- ей как вольнонаемные программисты. поддержала, о чем и сообщил в пись- чения, необходимо отдать приоритет С другой стороны, во многих российсме на имя председателя Комитета ГД ему, – говорит Александр Хинштейн. – ких компаниях программное обеспепо информационной политике Валерия Это особенно касается военных, стра- чение разрабатывают специалисты Комисарова статс-секретарь замести- тегических объектов и сохранения гос- из стран третьего мира, в частности теля директора ФСБ России. Однако тайны. Если иностранная компания Индии, которая входит в число лидеров комитет, дважды рассмотрев поправ- поставляет оборудование, она будет по предоставлению компьютерных уски без участия, а потом и в присутствии использовать эту возможность для по- луг. Поэтому говорить о каком-то страавторов, занял другую позицию. лучения секретной информации, раз- тегическом выборе страны в пользу то«На мой взгляд, причины того, что ведданных. Это возможно путем внед- го или иного программного обеспечепоправки не были поддержаны, впол- рения в технику «посторонних объек- ния не очень корректно. Конечно, есть не очевидны, – сказал в комментарии тов», и такие случаи уже были. Те, кто компании, предлагающие наиболее «Системному администратору» Дмит- противостоит принятию этого закона, – популярный продукт, не только в Росрий Горовцов, помощник депутата пособники западных разведорганов». сии, такие, например, как Microsoft. Госдумы РФ Геннадия Гудкова. – СеНо и в своей стране эта компания посгодня российский рынок информаци- Русский Windows тоянно контролируется уполномоченонных технологий более чем на 90 про- Несмотря на то, что, по словам Генна- ными органами государственной власцентов представлен инструментальны- дия Гудкова, запрет на использова- ти, проходит различные виды антимоми средствами импортного производс- ние иностранного ПО коснется толь- нопольных расследований. Это связатва. 99 процентов – это импортное про- ко 10 процентов действующих в на- но с тем, что компания, занимающая граммное обеспечение, включающее шей стране информационных систем, столь большую долю на рынке комоперационные системы, системы уп- в российских госкомпаниях пока осто- пьютерных программ, может теоретиравления базами данных и разработки рожно высказываются о перспективах чески злоупотребить своими возможприложений, системы поддержки сете- перехода на отечественные програм- ностями. Любая погрешность в таком вых протоколов и другие универсаль- мы. Кроме того, российские предпри- массовом продукте мультиплицируетные базовые средства. Соответствен- ятия уже сделали огромные инвести- ся на миллионы компьютеров и может но существует мощное лобби на раз- ции в приобретение западных продук- создать серьезные сбои в работе жизных уровнях, отстаивающее интересы тов. Поэтому есть предложения встра- ненно важных узлов, таких как управзападных разработчиков и компаний. ивать модули в Windows или другие ление энергоресурсами, нефте- и гаИ для многих оппонентов включение операционные системы, подстраи- зопроводами, аэропортами и вокзалапоправок в законопроект означает по- вая их под нужды конкретной отрас- ми. В этих случаях действительно мотерю финансовых потоков, которые, по ли, а не изобретать велосипед, при- жет существовать проблема». самым скромным подсчетам, оценива- думывая «русский Windows». Говорят ются в 12 миллиардов долларов в год. специалисты и о том, что существует Код доступа Вот цена вопроса. По сути, эти деньги программное обеспечение, не имею- В Microsoft такой проблемы не видят. главным образом идут на кредитова- щее отечественных аналогов, кото- О том, что исходные коды Microsoft ние частных западных компаний». рое не может быть заменено. Напри- уже официально переданы России мер, ПО к турбинам импортного про- и при необходимости их можно производства в РАО ЕЭС, оно поставля- верить на так называемые закладки, Доводы депутатов «Системному администратору» подВ чем же конкретно заключается опас- ется с ними в комплекте. «Абсолютное большинство про- твердила Кира Кирюхина, руководиность? По мнению авторов поправок, ввезенная из-за границы техни- граммных продуктов не разрабаты- тель отдела по связям с общественка на стратегически важных объек- ваются в России и являются плодами ностью корпорации Microsoft. «Потах вовсе не гарантирует защиту ин- интеллектуального труда зарубежных нимая, что каждое государство обяформации, в том числе и секретной, разработчиков, – сказал в коммента- зано защищать свои национа льот зарубежного поставщика. «У разра- рии «Системному администратору» ные интересы, в Microsoft в 2002 году ботчиков есть возможность заложить Игорь Динес, член Комитета Госдумы разработали программу Government «ошибки», которые могут сделать не- РФ по энергетике, транспорту и свя- Security Program (GSP) по сотруднидейственными военные системы и сис- зи и председатель подкомитета по ин- честву с государствами в области интемы навигации. При необходимос- формационным технологиям. – Одна- формационной безопасности, – скати их можно легко вывести из строя. ко, учитывая степень интернационали- зала она. – В рамках программы GSP На карте военная безопасность наше- зации знаний, сложно говорить, что се- мы предоставляем государствам дого государства. Если мы не примем за- годня можно считать национальным ступ к исходным кодам своих продуккон – окажемся безоружными», – счи- компьютерным продуктом. Например, тов. Россия была первой страной в мимногие программы компании Microsoft ре, подписавшей GSP в 2002 году и потает Геннадий Гудков. Депутаты приводят в пример опыт разработаны с участием российских лучившей доступ к исходным кодам Англии, Германии, Франции, где, по их специалистов, уехавших в Соединен- Windows и других программ. Все го-

№6, июнь 2006

7


аналитика Поправки депутатов Госдумы РФ Геннадия Гудкова и Александра Хинштейна ко второму чтению проекта Федерального закона «Об информации, информационных технологиях и защите информации», принятого в первом чтении 25 ноября 2005 года (текст поправок выделен курсивом) Статья 16. Требования к эксплуатации государственных информационных систем 1. Принятие государственной информационной системы в эксплуатацию осуществляется в порядке, устанавливаемом ее заказчиком, если иное не предусматривается в решении о ее создании. Правительство Российской Федерации вправе устанавливать обязательные требования к такому порядку для отдельных категорий государственных информационных систем. 2. Федеральные информационные системы подлежат регистрации в случаях, установленных федеральным законом. Порядок регистрации федеральных информационных систем устанавливается Правительством Российской Федерации. Порядок регистрации региональных информационных систем может быть установлен нормативным правовым актом субъекта Российской Федерации. 3. Обеспечение целостности и сохранности информации, содержащейся в государственных информационных системах, осуществляется путем установления и соблюдения единых требований защиты информации от несанкционированного доступа или изменения, в том числе при осуществлении доступа к информационно-телекоммуникационным сетям. 4. Федеральный орган исполнительной власти в области обеспечения безопасности и федеральный орган исполнительной власти, уполномоченный в области противодействия техническим разведкам и тех-

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

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

8

мента вступления в силу настоящего федерального закона. 7. Не допускается эксплуатация государственных информационных систем без надлежащего оформления прав на использование ее компонентов, охраняемых в соответствии с законодательством Российской Федерации об интеллектуальной собственности. 8. Операторы государственных информационных систем несут ответственность за обеспечение целостности и сохранности содержащейся в них информации и обязаны принимать меры по предотвращению утраты или искажения информации, а при необходимости – меры по восстановлению утраченной информации. Статья 18. Защита информации 1. Защита информации заключается в принятии правовых, организационных и технических (программно-технических) мер в целях: 1) обеспечения целостности и сохранности информации, недопущения ее несанкционированного изменения или уничтожения; 2) соблюдения конфиденциальности информации ограниченного доступа; 3) реализации права на доступ к информации; 4) недопущения несанкционированного воздействия на средства обработки и передачи информации; 5) недопустимости недокументированных функций программно-технических средств.

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

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


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

№6, июнь 2006

9


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

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

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

С

етевые интерфейсы в серверах подхода вы можете встретить во мно- ется, – от «рождения» и до «смерти» буобычно ассоциируются с чем- гих системах, например, во встроен- дет eth0. А вот и нет, как бы того не хото неизменным и предопреде- ных Linux или при создании виртуаль- телось многим наивным скриптописаленным. Их число, топология подклю- ных серверов. Рассмотрим предпо- телям, eth0 будет лишь в идеальном чения и настройки, как правило, зара- сылки, идею и реализацию перевода случае при установке системы прямо нее определяются в проектном зада- сетевых интерфейсов в виртуальный на данный системный блок. Если же, нии и не меняются в процессе штат- режим. В качестве платформы будем что более реально, сервер не устанавной эксплуатации. Но даже в таком использовать openSUSE Linux версий ливается каждый раз с нуля, а копируидеализированном рассуждении ста- 10.0 и 10.1 [1]. Все несоответствия меж- ется через образ системы или всего тичность интерфейсов весьма услов- ду ними я отмечу особо. Итак, начнем жесткого диска, то, скорее всего, даже на. Возможен и иной взгляд на под- с перечисления возможных проблем, единственный интерфейс будет иметь систему, отвечающую за сетевые ин- не решаемых в рамках традиционной иное название. Eth1 и далее, в том слутерфейсы. Безусловно, это всего лишь настройки сети. чае, если полагаться на автоматичеснекий технический прием или рекоменкую систему наименования устройств, использованную в udev, что для совредация, и каждый из вас волен следо- Исходные предпосылки вать ей или предпочесть консерватив- Рассмотрим «редкий» вариант, когда менных систем является стандартом. Но в серверах, как правило, более ный вариант настроек. Более того, и не у сервера всего лишь один сетевой иноткровение, так как элементы такого терфейс. Что тут сложного, спрашива- одного интерфейса. И если их назва-

10


администрирование ния в некоторый момент упорядочены и устраивают системного администратора и используемые им настроечные скрипты, то представим, что может произойти в случае отказа одного из интерфейсов. Например, произошел отказ в процессе старта. В старых системах, без использования udev, происходило смещение нумерации устройств или фактическая перекоммутация соединений. Интерфейсы, предназначенные для внутрисетевых соединений, могли переключиться на внешние линии. Практически это означало крах всей системы защиты. Современные скрипты, ориентированные Рисунок 1. Сравнение традиционного способа настройки с виртуализованным интерфейсом на udev, привязывают имена сетевых интерфейсов к их физическим адре- рез ip link set) может привести к наруше- вер в защищенное состояние. А вот сам или PCI-идентификаторам. Мож- нию работы сетевых служб, использую- иная схема, используемая в Fedora но быть уверенным, что катастрофи- щих (прослушивающих) адрес данного Core и RHEL, совершенно неприемческого «выворачивания» сервера интерфейса. Это в том благоприятном лема. Кстати, как и всякое применевнутренними интерфейсами наружу случае, если вы уверены, что созданная ние iptables-save/restore. Дело в том, не произойдет. Но есть иная беда. Се- «на лету» аварийная схема при следу- что, как уже указано, вовсе не обязательно сетевые интерфейсы стартутевая конфигурация, созданная авто- ющем рестарте не сломается. Еще один редкий сейчас крэш-сце- ют нужным образом. Поэтому не факт, матическим образом, может потерять свое сбалансированное состояние, нарий: сервер или поставляется в ви- что iptables-restore создаст те правила, и очередная перезагрузка может при- де «черного ящика», или обслуживает- которые требуются из-за изменившейвести к новому изменению имен интер- ся на удаленной площадке привлечен- ся схемы наименования интерфейсов. фейсов из-за отказа одной из сетевых ным техником. Здесь возможна ошиб- В схеме SuSE есть скрипт, который текарт. Впрочем, и при добавлении сете- ка кабельной коммутации, что может оретически может проанализировать вой карты в систему с udev такие слу- привести к смене назначений сетевых реальное состояние сети и адаптирочаи нередки. Итогом подобного про- соединений – внутрисетевые на вне- вать сетевой экран нужным образом. цесса может стать частичный или пол- шние и наоборот. При традиционной Минус только в том, что сетевой экный отказ стартовых сетевых скрип- разметке сетевых интерфейсов не су- ран должен подниматься не отдельным тов, то есть изоляция сервера от се- ществует возможности автоматически скриптом по расписанию SysVinit, а ти. Для противодействия этому в сис- исправить ошибку внешнего кабельно- синхронно с интерфейсом, на который он настраивается! Увы, хотя разработтемах с udev рекомендуется приме- го подключения. Теперь пример из смежной облас- чики Red Hat, Inc. далеки от этой проснять постоянные, или персистентные (от persistent – постоянный) сетевые ти. Давайте задумаемся о том, как про- той мысли, но и в SuSE не лучше. Не имена. Увы, в такой схеме главное – изводится включение сетевого экра- может система безопасности стартоисключить столкновение переимено- на в процессе старта сервера. Самый вать, во-первых, после поднятия сетеваний. Другими словами, сетевые ин- грамотный из мною наблюдаемых – вых интерфейсов (и ведь никто не нортерфейсы можно называть как угодно, это способ, использованный в дис- мирует данное «после») и, во-вторых, но только не по схеме ethN, принятой трибутивах SuSE. Безусловно, в ка- вне всякой связи с настройкой диначестве серьезного решения это со- мических сетевых интерфейсов (wifi, по умолчанию. Выход из строя сетевой карты не- вершенно неприемлемо (практически ppp и прочие ADSL). посредственно в ходе эксплуатации бытовой вариант). Отмечу лишь одпотребует замены физического интер- но важное качество: в этом сетевом Возникновение базовой фейса, то есть в процессе очередного экране выделена отдельная стадия идеи старта произойдет добавление следу- предварительной настройки – снача- Причины для определенного рода озающего номера в базу udev при обнару- ла срабатывает SuSEfirefall2_init пос- боченности несовершенством сетевых жении нового устройства, что сведет- ле старта boot.localnet, а потом уже настроек перечислены. Но путей реся к ранее описанной проблеме при- SuSEfirewall2_setup после $network. шения указанных проблем множествязки имен. Но можно и рассмотреть Не буду обсуждать, что эти скрип- во. Например, можно проследить, как существование в серверном блоке се- ты делают конкретно, меня ни один развивались (если не сказать – метевой карты, рассчитанной на горячую из них не устраивает, но главное – тались!) предложения разработчиков замену. Тут мы сталкиваемся с иной здесь продемонстрирована необхо- SUSE по настройке персистентных сесложностью. Простое отключение ин- димость нулевой фазы настройки се- тевых имен от версии дистрибутивов терфейса через ifdown (как вариант че- тевого экрана, которая переводит сер- 9.х, где эта проблема возникла, до ис-

№6, июнь 2006

11


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

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

12

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

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

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


администрирование Итак, произведем подобную настройку. Прежде всего вне зависимости от текущего состояния коммутации между ними. Сама же коммутация из стадии настройки пере- отключим имеющийся сетевой интерфейс: водится в категорию состояния комплексного сетевого со# ifdown eth0 единения, включающего сетевой мост и предназначенные 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:00 2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 веденной кабельной коммутации после проверки трафика link/ether 00:0c:29:89:80:c2 brd ff:ff:ff:ff:ff:ff на данном кабельном подключении. Если нужно отключить 3: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0 сервер временно от некоторой сети, то можно не вынимать кабель из сетевой карты, не останавливать сетевые сервисы, не запирать firewall, а просто отсоединить физический Затем переименуем его, так как «реальное» имя нам интерфейс от используемого моста. Но на этом преиму- понадобится далее для создаваемого виртуального инщества не кончаются. Все почти так же, как и с вытянутым терфейса: носом киплинговского слоненка. # ip link set dev eth0 name 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:00 чено. Такое возможно, если в сетевой карте отключить аппа2: hweth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:0c:29:89:80:c2 brd ff:ff:ff:ff:ff:ff ратную фильтрацию пакетов и перевести ее в promiscuous3: sit0: <NOARP> mtu 1480 qdisc noop режим или, как будем называть это далее, перевести в реlink/sit 0.0.0.0 brd 0.0.0.0 жим прослушивания. Самый простой способ добиться этоТеперь переименованный интерфейс снова можно вклюго – поднять интерфейс с адресом 0.0.0.0 или, что более верно, вовсе без адреса. Собственно, в ином состоянии утилита чить. Впредь он будет играть роль простого элемента комbrctl откажется подключать интерфейс к мосту. И в процессе мутации без собственного IP-адреса: подключения интерфейс будет переведен в режим прослу# 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 образует полностью виртуальный коммутатор внутренней сети, к которому могут подключаться виртуальные машины через виртуальные же интерфейсы, и использовать его Создадим сетевой мост с предпочтительным именем, как внутреннюю сеть кластера. Рассмотрим эти варианты в нашем случае это eth0, так как виртуализацию этого усподробнее и проверим их экспериментально. тройства мы и производим:

Сетевой мост с реальным адресом

# brctl addbr eth0 # brctl show

Эту часть экспериментов проведем в системе, установленbridge name bridge id STP enabled interfaces ной внутрь виртуальной машины с полной и достаточно eth0 8000.000000000000 no тщательной эмуляцией, а именно внутрь VMWare. Но, уве# 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:00 Виртуальный интерфейс с реальным адресом подхо2: 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:ff дит для использования в самом распространенном и од3: sit0: <NOARP> mtu 1480 qdisc noop новременно тривиальном случае. Это фактически эквиlink/sit 0.0.0.0 brd 0.0.0.0 4: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue валентная замена традиционного интерфейса на пару, соlink/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff стоящую из виртуального и реального устройства. К мосВ приведенном выше протоколе обратите внимание ту с актуальным адресом подключается безадресный физический интерфейс, который принимает все пакеты в дан- на то, что виртуальный интерфейс eth0 даже после вклюной сети, а фильтрацию производит IP-стек, работающий чения командой ip link set up не имеет канального адреса поверх сетевого моста. То есть сетевой экран тоже настраи- (MAC). Даже присвоение ему IP-адреса ничего не меняет: вается на сетевом мосту. И все используемые сетевые сер# ip addr add 192.168.0.111/32 dev eth0 висы также «слушают» адрес сетевого моста.

№6, июнь 2006

13


администрирование # 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

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

bridge id 8000.000000000000

STP enabled no

# brctl show STP enabled no

interfaces 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 0ms rtt min/avg/max/mdev = 29.959/29.959/29.959/0.000 ms

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

14

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 0ms rtt min/avg/max/mdev = 0.498/0.498/0.498/0.000 ms

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

1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: 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:ff 3: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0 4: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue link/ether 00:0c:29:89:80:c2 brd ff:ff:ff:ff:ff:ff

bridge id 8000.000c298980c2

server:~ # ping -c 1 192.168.0.111

interfaces

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

bridge name eth0

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

Internet Systems Consortium DHCP Client V3.0.3 Copyright 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:c2 Sending on LPF/eth0/00:0c:29:89:80:c2 Sending on Socket/fallback DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 DHCPOFFER from 192.168.0.1 DHCPREQUEST on eth0 to 255.255.255.255 port 67 DHCPACK from 192.168.0.1 bound 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)

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

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


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

server:~ # brctl show

bridge name eth0

bridge id 8000.000479661b70

STP enabled no

eth1

8000.000000000000

no

interfaces hweth3 hweth5

bridge name eth0

bridge id 8000.000479661b70

STP enabled no

eth1

8000.2e48adefd363

no

interfaces hweth3 hweth5 tap1 tap0

В мосту eth0 два реальных порта, а в мосту eth1 вообще Сразу после подключения к мосту eth1 первого, как ему нет физических интерфейсов, и он поэтому полностью виртуальный. Но даже в том виде, как он существует, без ка- «представляется» реального устройства, мост получает и собственный канальный адрес: нального адреса, мост вполне работоспособен: 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 0ms rtt min/avg/max/mdev = 0.049/0.049/0.049/0.000 ms

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

№6, июнь 2006

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)

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

15


администрирование server:~ # ping -c 1 192.168.254.2

eth1

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 0ms rtt min/avg/max/mdev = 0.125/0.125/0.125/0.000 ms server:~ # arp -n Address HWtype HWaddress Flags Mask 192.168.254.2 ether FE:FD:C0:A8:01:00 C

Iface eth1

Все это в точности совпадает с настройками интерфейса eth0 в UML: uml:~ # ifconfig eth0 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

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

bridge id 8000.000479661b70

STP enabled no

eth1

8000.2e48adefd363

no

interfaces hweth3 hweth5 tap1 tap0

Псевдоустройство tap1 точно так же, как и 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 интерфейс, соответствующий tap1, настроен для работы в локальной сети: uml:~ # ifconfig eth1

16

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

При попытке «пропинговать» адрес UML получаем ответы: 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 0ms rtt min/avg/max/mdev = 7.142/7.142/7.142/0.000 ms server:~ # arp -n Address HWtype HWaddress Flags Mask 192.168.0.2 ether FE:FD:C0:A8:01:01 C 192.168.254.2 ether FE:FD:C0:A8:01:00 C

Iface eth0 eth1

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

HWtype HWaddress

Flags Mask

ether ether ether

C C C

FE:FD:C0:A8:01:01 00:05:5D:E7:86:39 00:05:5D:74:DD:5D

eth0 eth0 eth0

Значит, все произошло успешно. Теперь сбросим адрес у самого сетевого моста. Это приведет к невозможности работы с локальной сетью внутренних процессов сервера. На рисунке 3 красная пунктирная линия обозначает прерванные связи. 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 eth0 server:~ # 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

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


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

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

№6, июнь 2006

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

Ссылки: 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.

17


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

Как работает Sendmail? Полезные подробности Часть 2: Вопросы конфигурации Видел я этот сендмайл – конфиги для конфигов, чтобы создать конфиги! Цитата с http://forum.oszone.net

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

18


администрирование Ужас, летящий на крыльях ночи При первом просмотре основной конфигурационный файл, sendmail.cf, особенно ближе к концу, напоминает скорее двоичный код, чем что-то читаемое, и тем более редактируемое. Но на самом деле всё не так уж и сложно – всему виной перегруженность «знаками пунктуации», сбивающими с толку и не позволяющими без специальной подготовки сложить их во что-то осмысленное. Назначение файла sendmail.cf – определить опции работы Sendmail и правила обработки сообщений. Собственно говоря, включение в него правил и обусловливает его перегруженность и небывалый размер (обычно он составляет несколько тысяч строк). Но зато это значительно повышает гибкость конфигурирования. Несмотря на то что cf-файл, в общем-то, не предусматривает прямого редактирования (для этого служит механизм m4, о котором поговорим в следующем разделе) и генерируется автоматически, он достаточно хорошо прокомментирован. Рассмотрим представленные в нём секции и наиболее характерные параметры. Строки, начинающиеся с «#» – комментарии. Тип параметра задаётся первой буквой строки (см. таблицу 1). Строка, начинающаяся с пробельного символа, – продолжение предыдущей. Пустые строки игнорируются. Классы предназначены для описания имён, объединённых одним признаком. Сразу после буквы C следует односимвольное или многосимвольное (в фигурных скобках) имя класса. Н а п р и м е р, к л а с с з а п р е щ ё н ных для использования в доменном имени символов определяется как «CB! % @ : ^». Макросы представляют собой чтото типа переменных, позволяя в дальнейшем обращаться к единожды определённому макросу по имени (перед которым указывается префикс $). Существует ряд предопределённых макросов (некоторые из них представлены в таблице 2), которые можно использовать по мере необходимости. Для них зарезервированы строчные буквы. Для иного использования предназначены прописные буквы или многосимвольные имена.

№6, июнь 2006

F-строки заносят в определённый класс содержимое указанного файла. Строки типа K задают базы данных, которые в дальнейшем могут использоваться в правилах преобразования. Например, так подключается база mailertable: Kmailertable hash ↵ -o /etc/mail/mailertable

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

Local info Здесь определяются общие параметры, влияющие на работу MTA:  Cw – класс «w» описывает домены, для которых будет выполняться обработка почты. Обычно присутствуют строки Cwlocalhost и Cwdomain.ru (где domain.ru – доменное имя нашего сервера). Если для указания хостов используется файл local-host-names, он подключается следующей строкой: Fw-o /etc/mail/local-host-names

Здесь параметр -o говорит о том, ч то н е ну ж но выд ав ать с о о б щение об ошибке, если указанный файл отсутствует. Имя файла – используемое по умолчанию, но в принципе может быть произвольным. В старых версиях Sendmail использовался файл /etc/sendmail.cw.  DS – имя «умного» (smart) хоста, или почтового релея, который будет использоваться для пересылки почты. Если Smart-host указан, то вся исходящая почта будет направляться на него, а он уже займётся определением маршрутов отдельных сообщений и их дальнейшей отправкой. Подробнее об этом режиме работы мы поговорим чуть позже.  CO @ % ! – символы, которые запрещены для использования в именах пользователей, поскольку являются разделителями «именной» и доменной частей адреса.  DnMAILER-DAEMON – так наш Sendmail будет представляться в сообщениях об ошибках.

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

Описание

C

Классы

D

Макросы

F

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

H

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

K

Базы данных

M

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

O

Опции Sendmail

P

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

R

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

S

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

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

Значение

$a

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

$f

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

$i

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

$h

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

$m

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

$u

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

$w

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

$x

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

$z

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

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

Options Эта достаточно большая секция содержит массу опций, управляющих теми или иными аспектами работы почтового сервера. Ниже приведено несколько примеров (для некоторых опций по старой памяти существуют сокращённые однобуквенные наименования, но рекомендуется использовать новый стиль):  O AliasFile – определяет пу ть к файлу псевдонимов (см. ниже).  O MaxMessageSize – максимальный размер обрабатываемого сообщения. Разумное ограничение данного параметра позволит усложнить реализацию атак, направленных на заполнение всего доступного пространства в почтовых ящиках пользователей. Однако не забывайте, что в наши дни прослеживается тенденция к увеличению среднего объёма вложений, и отправка по почте файла в 20-30 Мб является не такой уж редкостью.  O HoldExpensive – вы можете объявить (с помощью флага «e» в M-строке) агента доставки как «до-

19


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

рогой» (expensive), и в этом случае Sendmail не будет пред-  O MaxRecipientsPerMessage – ограничивает число попринимать попыток отправить письмо через такого агента лучателей, которые могут быть указаны в заголовке одсразу же после получения, а будет просто оставлять его в ного сообщения. Наивная попытка бороться со спамом. очереди. Эта опция может быть весьма полезна в случае Хотя и помогает несколько снизить нагрузку на сервер коммутируемого соединения, когда осуществление дозвои усложнить подбор адресов. на до сервера провайдера при получении каждого письПо мере рассмотрения дальнейших вопросов мы будем ма может оказаться крайне неэффективным. Вместо этого разумнее дозваниваться, скажем, раз в час, отправляя встречаться и с другими опциями. всё накопленное за это время («оптом – дешевле»). O DeliveryMode – устанавливает режим доставки (ин- Queue Group Definitions терактивный, фоновый, отложенная доставка). Подроб- Эта секция отвечает за параметры работы почтовой очеренее о режимах доставки мы поговорим в третьей час- ди. Учитывая большое влияние очереди на производительти статьи, посвященной вопросам администрирования ность сервера, мы подробно рассмотрим связанные с ней и оптимизации. вопросы в следующей части. O SuperSafe – ещё одна связанная с оптимизацией опция. Её наличие требует обязательной записи сообще- REWRITING RULES ния в очередь, даже если оно может быть передано не- Правила преобразования адресов. Sendmail в процессе обмедленно. Помните, что, отключив эту опцию, вы сэко- работки сообщения разбирает имеющиеся в нём адреса отномите немного на операциях записи, но лишитесь пра- правителя и получателей, выполняя по мере необходимости ва именовать свой сервер соответствующим стандар- ряд преобразований. Каждый набор правил начинается диту SMTP, поскольку надёжность передачи – это его ос- рективой Sname[=n], где n – необязательный номер набора, name – его кратное имя. Некоторые номера (0, 3, 4) преднановополагающее требование. O QueueFileMode, O TempFileMode – права доступа, ус- значены для строго определённых целей. Другие могут затанавливаемые на вновь создаваемые файлы очереди даваться произвольно (например, SParser1) и служат в оси временные файлы соответственно. По умолчанию – новном для дополнения основных наборов правил. 0600, но в некоторых экзотических (и весьма нежелаВ процессе обработки наборы правил применяюттельных с точки зрения безопасности) случаях может ся в определённом порядке (см. рис. 1). Любой адрес потребоваться этот параметр изменить. в первую очередь проходит через набор 3, который отO MaxDaemonChildren – максимальное количество од- вечает за канонизацию, т.е. адрес приводится к виду новременно работающих процессов Sendmail. Позволя- <имя_пользователя>@<доменное_имя>. Затем набор 0 опет более эффективно противостоять DoS-атакам, не до- ределяет, какому почтовому агенту это сообщение должно быть передано. От этого зависят конкретные имена наборов пуская чрезмерной перегрузки сервера. O DaemonPortOptions – параметры прослушиваемых правил, которые будут подставлены вместо S (обработка адреса отправителя) и R (обработка адреса получателя) – портов и интерфейсов, например: они определяются в M-строке соответствующего агента. O DaemonPortOptions=Port=smtp,Addr=127.0.0.1,Name=MTA На последнем этапе адрес обрабатывается 4-м набором, который выполняет финальные преобразования. Сами правила внутри набора начинаются с буквы R O SmtpGreetingMessage – баннер приветствия. По умолчанию имеет вид «$j Sendmail $v/$Z; $b», где $j = $w – и имеют следующий формат: доменное имя хоста, $v – версия Sendmail, $Z – версия R<шаблоны> <преобразование> <комментарий> конфигурации, $b – текущая дата. В процессе работы после имени хоста (точнее, на второе место) выводитЗдесь <шаблоны> задают некоторый формат, на сося также поддерживаемый протокол: ответствие которому проверяется входящая информация. serg$ sendmail -bs В таблице 3 перечислены значения основных специальных символов. Справа (отделяется от левой части символами та220 domain.ru ESMTP Sendmail 8.13.4/8.13.4; Tue, 25 Apr 2006 13:24:11 +0400 (MSD) буляции) задаётся <преобразование> – описание того, что нужно сделать с исходными данными, если они соответствуO DoubleBounceAddress – указывает адрес, на который ют шаблону в левой части. В таблице 4 представлены некоследует отправлять уведомления об ошибке доставки торые операторы. Очень Таблица 3. Значения основных уведомления об ошибке. Другими словами, если с адре- напоминает регулярные специальных символов са qwe@rty.ru пришло сообщение для несуществующе- выражения, не правда Шаблон Значение го пользователя, то Sendmail отошлёт отправителю уве- ли? Например, следу- $* Любое количество символов домление «User unknown». Однако если qwe@rty.ru яв- ющее правило меняет $+ Один и больше символов ляется фальшивым, то это уведомление также вернёт- адрес вида domain!user $Ровно один символ ся с ошибкой. Чтобы разорвать порочный круг, вместо на user@domain при ус$@ Ни одного символа попыток и дальше уведомить несуществующего отпра- ловии, что часть «user» вителя, такое сообщение доставляется на указанный ад- содержит хотя бы один $=<знач> Фрагмент равен значению <знач> $~<знач> Фрагмент не равен <знач> символ: рес. По умолчанию крайним оказывается postmaster.

20


администрирование R$* ! $+

$2 @ $1

Таблица 4. Операторы преобразования

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

$: < $(mailertable $1 $) > $2

lookup

Оператор

Значение

$<n>

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

$:

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

$@

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

$>

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

$( . . .$)

Поиск данных в базе

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

Тестирование правил Как видите, синтаксис правил обработки довольно сложен (по крайней мере, читать их очень неудобно). Чтобы убедиться в правильности работы, в Sendmail предусмотрен специальный режим тестирования: serg$ sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 3,0 admin@my canonify input: admin @ my Canonify2 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 $: admin parse returns: $# local $: admin

В данном примере мы прогоняем адрес admin@my (предполагая, что полное имя нашего домена – my.domain.ru) через правила 3 и 0. В первом столбце указываются имена наборов правил, во втором – тип данных (вход или выход), и после двоеточия – обрабатываемая информация. Как видите, сначала адрес канонизируется (краткое имя домена дополняется до полного; обратите внимание на завершающую точку). Затем Sendmail анализирует полученный адрес (определяется, что он является локальным). При необходимости можно повысить детализацию выводимой информации, используя флаг отладки -d: serg$ sendmail -bt -d21.5 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 3 my.uudom.ru!user canonify input: my . uudom . ru ! user rewritten as: my . uudom . ru ! user < @ > rewritten as: my . uudom . ru ! user rewritten as: < my . uudom . ru ! user > rewritten as: my . uudom . ru ! user Canonify2 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 >

№6, июнь 2006

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

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

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

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

21


администрирование Введение в m4 В далёком 1977 году, когда Sendmail ещё даже не планировался, Брайан Керниган (Brian Kernighan) и Деннис Ритчи (Dennis Ritchie), внёсшие немалый вклад в развитие UNIX-систем (достаточно упомянуть язык программирования C), разработали макропроцессор m4. Его основное назначение – «пропускать» через себя поток информации, выполняя макроподстановки по мере их обнаружения. Он с успехом может использоваться для программирования, генерирования документации. Но наиболее популярным применением является генерация конфигурационных файлов и прочие вопросы администрирования. Фундаментом m4 является набор встроенных макросов, которые служат для управления потоком данных, ветвлений, определения пользовательских макросов, некоторых математических операций. Язык m4 отличается довольно-таки своеобразным синтаксисом. Во-первых, в нём различаются открывающая и закрывающая кавычки. По умолчанию использу-

ются символы «`» и «’», которые в случае необходимости можно переопределить с помощью встроенного макроса changequote. Во-вторых, в качестве признака конца строки используется макрос dnl. (То есть после него вы можете указывать любые комментарии). Для управления потоком служит макрос divert. В частности, divert(0) очищает буфер и направляет вывод в нулевой поток (всего существует 10 выходных потоков 0-9, которые на выходе объединяются в порядке их нумерации). Конструкции $n, где n – некоторое число, являются ссылками на параметры макроса, размещённые на соответствующих местах (например, $1 ссылается на первый параметр указанного макроса). Рассмотрим простейший пример. Для начала создадим файл макроопределений: serg$ vi test.m4 divert(0)dnl define(`header', `<H1>$1</H1>')dnl define(`footer', ↵ `<HR><SMALL>$1</SMALL>')dnl define(`company', `Наша компания')dnl

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

сосредоточены в каталоге /usr/share/sendmail/cf/. В общих чертах синтаксис языка рассматривается во врезке «Введение в m4». Вносить изменения в шаблоны не рекомендуется (поскольку они будут перезаписываться при обновлении операционной системы или почтового сервера). Все необходимые корректировки лучше делать в mc-файле. В последних версиях FreeBSD по умолчанию используется файл, соответствующий доменному имени вашего сервера. Например, domain.ru.mc. Если у вас такого файла нет, он будет автоматически создан при первом вызове команды make в каталоге /etc/mail, используя при этом как шаблон файл freebsd.mc (при его отсутствии последует ошибка). Коротко состав mc-файла был рассмотрен в предыдущей части статьи, сейчас чуть подробнее остановимся на наиболее важных опциях:  include – встроенный макрос для подключения других m4-файлов.  define – ещё один встроенный макрос языка m4, позволяющий описывать другие макросы. Например, так можно определить макрос LOCAL_MAILER_PATH со значением, содержащим полное имя локального агента доставки: define(`LOCAL_MAILER_PATH', `/usr/local/bin/dspam')dnl

Ниже представлен пример, позволяющий объявить smtpагент как «дорогой»: define(`confCON_EXPENSIVE', `True') define(`SMTP_MAILER_FLAGS', `e')

22

причём в header и footer используются ссылки на первый аргумент, т.е. вызов этих макросов подразумевается с одним параметром. Этот файл мы подключим как шаблон. Далее файл с исходной информацией (обратите внимание на макро-вставки): serg$ vi test.in header(`Страница компании') company рада приветствовать Вас ↵ на своём сайте! footer(`Заходите снова!')

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

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

 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-файла.


администрирование Приведённый фрагмент показывает, что по умолчанию Кстати, поскольку mc-файл – это обычный файл в формате m4, то он может содержать помимо макроопределений почта «служебных» пользователей будет перенаправлятьи собственно входные данные. При необходимости вы мо- ся пользователю root, в то время как почта пользователя жете указать нужные cf-строки прямо здесь (хорошим при- root уйдёт в ящик администратора admin (это следует замером является mc-файл основного разработчика Sendmail дать вручную). Эрика Олмана – /usr/share/sendmail/cf/cf/knecht.mc). Всё работает правильно благодаря тому, что подстановПоследовательность подключения различных шабло- ка псевдонимов выполняется рекурсивно – после первой занов можно найти в самом начале cf-файла – обратите вни- мены осуществляется ещё один «прогон» с новым адресом, мание на строки, начинающиеся с «#### $Id:». Самым пер- и так далее, пока не будет выполнено ни одной подстановки. вым подключается cfhead.m4, в котором определены ос- Кстати, чтобы не допустить бесконечной подстановки в слуновные макросы. чае ошибки, когда образуется петля псевдонимов, полезно Если быть точным, то в команде m4 подключается cf.m4 – использовать опцию «O MaxAliasRecursion», которая задаёт вручную создание cf-файла обычно запускается такой ко- максимальное число «проходов» по списку (в mc-файле замандой: даётся как define(`confMAX_ALIAS_RECURSION’)). В правой части может находиться не только один m4 /usr/share/sendmail/cf/m4/cf.m4 domain.ru.mc > ↵ пользователь. Перенаправление может выполняться для domain.ru.cf нескольких пользователей (они разделяются запятыНо одной из первых директив cf.m4 значится следую- ми), на адрес в другом домене, на список адресов, укащая: занный в файле (подключается с помощью конструкции «:include: <имя_файла>»). ifdef(`OSTYPE', `dnl',`include(_CF_DIR_`'m4/cfhead.m4)dnl Можно отдавать почту на обработку внешней программе, используя операцию конвейера (в данном примере почКоторая и выполняет подключение cfhead.m4. При жела- та, пришедшая на адрес spam-me, отдаётся на обработнии вы можете включить cf.m4 непосредственно в mc-файл ку спам-фильтру dspam для переобучения его байесово(с помощью макроса include), чтобы не указывать его в ко- го анализатора): мандной строке. Но во FreeBSD это не требуется – make spam-me: "| dspam --user me --class=spam ↵ сделает всё, что нужно. --source=error"

Файлы специального назначения

Помимо системного файла aliases пользователи могут создавать свои файлы перенаправлений – ~/.forward (точнее, будут проверяться файлы, указанные в директиве confFORWARD_PATH). Формат ещё проще – в них просто указываются адреса, на которые следует перенаправлять входящие сообщения. Нужно заметить, что когда Sendmail запускается с правами непривилегированного пользоватеФайл aliases Файл псевдонимов служит для сопоставления адреса ля, этот пользователь должен иметь права на чтение всех электронной почты с конкретным получателем. По умол- .forward-файлов в домашних каталогах. чанию, Sendmail работает с системными пользователями. То есть если у вас есть пользователь admin, то автомати- Файл access чески для него создаётся одноимённый почтовый ящик. Формат этого файла, отвечающего за доступ к серверу Однако в ряде случаев необходимо (или просто удоб- с различных адресов, достаточно прост. Каждая строка соно) перенаправить входящую почту, направленную на тот стоит из разделённых пробелами или табуляцией объекта или иной адрес, другому пользователю. Например, рабо- и действия. В качестве объекта могут выступать: IP-адрес; та с почтой с правами root – не самая лучшая идея. А как подсеть, заданная неполным IP-адресом; доменное имя (буже тогда читать системные сообщения, которые традици- дет относиться и ко всем поддоменам); адрес электронной онно отправляются на этот адрес? Ответ можно увидеть почты. Действия: OK (всегда принимать почту, даже если другими директивами это запрещено), RELAY (разрешить в файле aliases: транзит), REJECT (отклонить соединение), DISCARD (отroot: admin клонить без выдачи сообщения об ошибке). Можно указыbin: root вать и конкретный код ответа (см. пример). bind: root Комментарии, как обычно, предваряются символом . . . пропущено . . . «#». Например: В первой части мы бегло окинули взглядом содержимое каталога /etc/mail. Настало время познакомиться с расположенными в нём конфигурационными файлами и их задачами более подробно.

uucp: abuse: security: ftp:

root root

root root

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

№6, июнь 2006

# Блокируем конкретный IP-адрес 1.2.3.4 REJECT # Разрываем соединения из указанного домена spammers.dom 550 Closed for you. # Разрешаем транзит из локальной сети 192.168 RELAY

23


администрирование # Разрешаем принимать на ящик abuse@domain.ru # любую почту abuse@domain.ru OK

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

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

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

И подключите его следующей директивой: define(`confCR_FILE', `/etc/mail/relay-domains')

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

Файл virtusertable Здесь задаётся соответствие между виртуальными адресами обслуживаемых доменов и именами реальных пользователей. Необходимость в нём возникает тогда, когда несколько адресов в обслуживаемых доменах имеют одинаковые имена пользователей (например, admin@domain1.ru и admin@domain2.ru). В этом случае вы можете занести в virtusertable следующие строки:

@domain1.ru

admin-dom1 admin-dom2 error:nouser User not found

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

24

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

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

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

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

Пример 2 Почтовый сервер в режиме шлюза

Файл mailertable

admin@domain1.ru admin@domain2.ru

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

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

smtp:[inner1.domain.ru]

inner2.domain.ru

smtp:[inner2.domain.ru]

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


администрирование DNS, DNS, DNS… Для нормальной работы любого MTA очень важную роль играет правильная настройка DNS-сервера. Адрес почтового сервера, обслуживающего тот или иной домен, не обязан совпадать с самим доменным именем. Например, вы можете посчитать целесообразным выделить для обслуживания почты, адресованной в domain.ru, отдельный сервер mail.domain.ru. Как же удалённый smtp-сервер поймёт, куда следует отправлять почту? Для этого в DNS предусмотрен специальный тип записи – MX (Mail eXchanger).

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

MX

10 ↵

MX

20 ↵

dom2

MX

10 ↵

MX

20 ↵

IN mail.domain.ru. IN backup.top.ru.

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

на отправку сообщений вышестоящему серверу (в случае с Sendmail это достигается использованием опции define(`SMART_HOST’, `<ip-адрес>’)). 3. Подключим соответствующие файлы в mc-файле: FEATURE(mailertable, `hash -o /etc/mail/mailertable')dnl FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')dnl

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

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

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

%1-client

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

4. Всё пересобираем и перезапускаем сервер: root# make all install restart

Если после этого выполнить тестирование, то можно увидеть, что разрешение имён выполняется должным образом: > 3,0 serg@client.domain.ru canonify input: serg @ client . domain . Canonify2 input: serg < @ client . domain Canonify2 returns: serg < @ client . domain canonify returns: serg < @ client . domain parse input: serg < @ client . domain Parse0 input: serg < @ client . domain Parse0 returns: serg < @ client . domain ParseLocal input: serg < @ client . domain ParseLocal returns: serg < @ client . domain Parse1 input: serg < @ client . domain Recurse input: serg-client canonify input: serg-client Canonify2 input: serg-client Canonify2 returns: serg-client canonify returns: serg-client parse input: serg-client Parse0 input: serg-client Parse0 returns: serg-client ParseLocal input: serg-client ParseLocal returns: serg-client Parse1 input: serg-client Parse1 returns: $# local $: serg-client parse returns: $# local $: serg-client Recurse returns: $# local $: serg-client Parse1 returns: $# local $: serg-client parse returns: $# local $: serg-client

ru . ru . ru . ru . ru . ru . ru . ru . ru . ru

> . . . . . . . .

> > > > > > > >

Продолжение следует…

Как видите, Sendmail является очень гибкой программой, способной эффективно решать разнообразные задачи. Эта строка означает следующее – при получении пись- Сложность формата cf-файла перекладывается на плема на любой адрес в домене client.domain.ru следует отдать чи макропроцессора m4, оставляя вам возможность заего пользователю, имя которого соответствует указанному ниматься настройкой на «верхнем» уровне, не вдавав адресе (%1) плюс суффикс «-client». Почта на другие до- ясь в детали синтаксиса. Впрочем, при необходимости вы вполне можете вносить изменения и непосредственмены будет обслуживаться обычным образом. 3. В domain.ru.mc включаем поддержку соответствую- но в sendmail.cf. Но просто настроить сервер недостаточщих файлов: но, особенно если речь идёт о высокой нагрузке. Поэтому в следующий раз мы поговорим о вопросах сопровождеFEATURE(virtusertable, `hash -o /etc/mail/virtusertable')dnl ния сервера и его оптимизации. Также коснёмся и вопроdefine(`confCW_FILE', `-o /etc/mail/local-host-names')dnl сов безопасности.

№6, июнь 2006

25


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

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

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

26


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

F

USE (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. Этот файл может быть открыт несколько раз. При этом для каждой монтируемой ФС генерируется свой дескриптор.

№6, июнь 2006

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

Сегодня вы узнаете, как можно монтировать разделы 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 установка проходит так: emerge -av sys-fs/fuse modules-update modprobe fuse chmod 666 /dev/fusе

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

27


администрирование echo "fuse" >> /etc/modules.autoload.d/kernel-2.6

Неудобство этого подхода в том, что каждый раз, когда вы пересобираете ядро, вам необходимо будет пересобирать и sys-fs/fuse. Если вы используете ядро 2.6.14 или старше, то вы можете просто включить поддержку FUSE прямо в ядре. Symbol: FUSE_FS [=m] Prompt: Filesystem in Userspace support Defined at fs/Kconfig:465 Location: -> File systems

Следующий шаг – установка captive. Вы можете скомпилировать captive из исходников или использовать готовый rpm, скачав его со страницы проекта: http://www. jankratochvil.net/project/captive/#download. В портах Gentoo captive уже присутствует, так что установка не составляет труда. echo "sys-fs/captive ~x86" >> /etc/portage/package.keywords echo "sys-fs/captive -gtk" >> /etc/portage/package.use emerge -av captive

Если вы используете Debian-based-дистрибутив, то вам придется конвертировать rpm в deb: alien captive-static-1.1.7-0.i386.rpm dpkg -i captive-static_1.1.7_1.i386.deb

Если вы хотите скомпилировать captive из исходников, то это лучше всего сделать так: ./configure –enable-install-pkg=no make make install

Теперь остается переписать файлы ${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].

Рисунок 2. Установка captive с помощью captive-install-acquire

28

Вот и всё! Теперь надо не забыть отмонтировать NTFSраздел: umount /dev/hda1 mount -t captive-ntfs /dev/hda1 /mnt/tmp/ -o -–rw

Обратите внимание, что параметры, которые мы хотим передать captive, должны начинаться с двух тире, а те параметры, которые предназначены для FUSE, передаются обычным образом. Для удобства можно добавить в /etc/fstab запись, соответствующую NTFS-разделу: /dev/hda1 /mnt/captive captive-ntfs noauto,--rw 0 0

Архитектура 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 перезапускает песочницу повторно и продолжает выполнение сначала неудачной транзакции, поэтому для конечного пользователя этот крах остается незамеченным и не приводит к потере данных.


администрирование Таблица 1. Результаты замера производительности 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

Также мне хотелось бы отметить, что все компоненты 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 приходится вместо трех переключений в/из режим(а) ядра делать всего одно.

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

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

№6, июнь 2006

Рисунок 4. Captive API

платны. Кроме того, для установки вам придется пожертвовать 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.

29


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

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

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

С

пециалисты системной под-  Поддерживать работу в нескольдержки, как правило, не облаких режимах: для конкретной мадают правами системного адшины, для членов группы в AD или для всех рабочих станций в сети. министратора. Для установки программного обеспечения они исполь-  Унифицировать имя системного зуют пароль локального системного администратора, переименовывая администратора. Рекомендуется макучетную запись, например, из «Адсимально ограничить права пользоваминистратор» в «Administrator». телям, поскольку установка програм-  По окончанию работы сценария много обеспечения, подключение ноформировать файл отчета. вых физических устройств, например Flash Card, несет в себе потенциаль- Мультирежимность ную опасность: может произойти утеч- скрипта ка важной информации, что не до- Поддержка нескольких режимов рабопустимо. Таким образом, регулярная ты реализована с помощью параметсмена пароля очень важна. Посколь- ров запуска командной строки. Догоку в сети есть русско- и англоязычные воримся, что запуск сценария, изменяверсии операционных систем, то стан- ющего имя администратора на указандартные учетные записи и группы ад- ном компьютере, осуществляется с поминистраторов могут записываться мощью параметра «-pc», для компьюпо-разному, согласитесь, это очень не- теров, перечисленных в группе, храняудобно. Достичь универсальности име- щейся в AD, – «-group», а для всех комни локальной учетной записи адми- пьютеров в домене – «-domain». При занистратора и его пароля можно с по- пуске скрипта во всех остальных слумощью скрипта. Для его создания ис- чаях будет выводиться справка. Чтение аргументов осуществляется пользуем VBScript. с помощью объекта Wscript.Arguments, Режимы работы сценария их количество определяется с помоСоздаваемый сценарий будет обла- щью команды Wscript.Arguments.Count. В зависимости от полученного аргудать следующими возможностями:

30

мента запускается тот или иной режим работы сценария (см. таблицу 1): 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 и представляет собой вывод текстового сообщения на экран: Select Case mode Case 0 txt="ТЕКСТ СПРАВКИ" WScript.Echo txt Case 1 … End Select


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

Верификация и изменение имени пользователя Зная имя компьютера, к сети необходимо подключиться и получить список локальных пользователей на рабочей станции, и проверить существование оговоренных учетных записей. В случае несоответствии имен – переименовать группу. ' Определение списка локальных пользователей ' на компьютере 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 ' Переименование русского (*)Администратор(*) ' в латинское Set Set Set Set Set End

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

Переименование группы осуществляется аналогичным способом. Полный текст сценария смотрите на сайте журнала www.samag.ru, в разделе «Исходный код». Замечание: для успешной работы скрипт должен быть запущен от имени администратора сети. Задание нового пароля локального пользователя реализовано с помощью функции setpassword(), параметром которой является новый пароль: Set obj_user4= getobject("WinNT://" & ↵ pcname&"/Administrator,User") Call obj_user4.setpassword(PWD) Set obj_user4 = Nothing

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

№6, июнь 2006

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

Значение переменной MODE

Описание режима

Mode=0

Вывод справки

-рс

Mode=3

Изменение на локальном компьютере

-group

Mode=2

Изменение у группы компьютеров

-domain

Mode=1

Изменение на всех компьютерах домена

гументом «-pc». При этом значение переменной mode – 3. При запуске в этом режиме необходимо задать два параметра: имя рабочей станции и новый пароль. Лучше всего это сделать с помощью диалогового окна, вызываемого с помощью InputBox(). После того как исходные параметры заданы, необходимо выполнить обращение к функции, которая изменит пароль, передавать ей в качестве параметра имя компьютера. Значение переменной, в которой содержится новый пароль, не имеет смысла передавать как параметр функции. Рекомендуется объявить эту переменную как глобальную: Dim PWD PWD = "987654321" Select Case mode … Case 3 PWD=CStr(inputbox("Введите новый пароль ↵ локального администратора",,PWD)) PCNAME = "1230PC" PCNAME=CStr(inputbox("Введите имя рабочей станции",,PCNAME)) ' вызов функции изменения имен и назначения ' нового пароля make pcname End Select

Изменяем пароль на группе компьютеров Для смены пароля на компьютерах, входящих в группу безопасности, требуется создать группу в Active Directory и включить в нее учетные записи компьютеров, на которых необходимо сменить локальный пароль (см. рис. 1). Доступ к AD в данной ситуации можно осуществлять с помощью провайдеров LDAP и WINNT. Для простоты воспользуемся последним из них. Запрашиваемые параметры скрипта в данном режиме – имя группы и новый пароль. Чтобы получить доступ к AD, необходимо знать имя домена. Для протокола WINNT имя домена должно быть представлено в сокращенном варианте, например SPD. Получить имя домена в сокращенном виде можно несколькими способами. Один из них – использование стандартной библиотеки ADSystemInfo: Dim PWD PWD = "987654321" Select Case mode … Case 2 pwd=CStr(inputbox("Введите новый пароль ↵ локального администратора",,PWD))

31


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

Рисунок 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

Изменяем пароль на всех компьютерах в домене Для изменения пароля локального администратора на всех компьютерах домена необходимо определить его короткое имя: Set objSysInfo = CreateObject("ADSystemInfo") domain=cstr(objSysInfo.DomainShortName)

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

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

32

те HTML и отображать его после завершения работы программы. Во время работы скрипта следует накапливать информацию в переменной, затем обрабатывать ее с помощью функции, которая выводила бы членов группы «Administrators». Если такой группы нет, то делается соответствующая пометка в файле. Отсутствие группы говорит о том, что компьютер недоступен (см. рис. 2): он выключен или на нем настроен firewall. Запись данных файл осуществляется с помощью объекта FSO: Set FSO=CreateObject("Scripting.FileSystemObject") Set MyFile1 = fso.CreateTextFile("c:\"+report+".htm", ↵ True, TRUE) MyFile1.WriteLine(data) MyFile1.Close

Когда сценарий завершит работу, отобразите с помощью созданной функции на экране созданный HTMLфайл. Управление веб-страницами осуществляется с помощью объекта InternetExplorer.Application. Доступ к объекту из VBScript также осуществляется с помощью функции CreateObject(). 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=1 End With oIE.Navigate Path oIE.Visible=1

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


bugtraq Выполнение произвольного кода в Symantec Client Security /AntiVirus

Выполнение произвольного кода в Microsoft Exchange

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

Программа: 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. Решение: Установите исправление с сайта производителя.

Повреждение памяти в 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. Решение: Установите исправление с сайта производителя.

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

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

№6, июнь 2006

Переполнение буфера в 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. Решение: В настоящее время способов устранения уязвимости не существует.

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

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

33


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

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

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

П

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

34

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

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


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

№6, июнь 2006

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

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

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

35


человек номера мости от того, что ном и моралью. Если это программное вам надо. Если му- обеспечение идет в школу, там должна чает жажда, прос- быть хотя бы кампусная лицензия, котото посмотрите, ка- рая позволяет ученикам и сотрудникам кая лучше, какая и, наверное, их домашним, поставить приемлема по це- его на своих домашних компьютерах не, заплатите и тут и на рабочем месте и беспрепятственже выпьете, не гля- но пользоваться. А дальше – кто, что дя на условия по- и за какие деньги предложит. Тут и накупки. А если на- до сравнивать. Один приходит и говодо поставить воду рит – берите программу, ставьте на люна стол гостям, на- бом количестве компьютеров и испольверное, придется зуйте как хотите, другой – вот програмкупить ту бутылку, ма, можете поставить на 20 компьютеСвободнорожденного нельзя лишить свободы! которую разреша- ров, а дальше придется еще закупать». такой курс, тренажер на компьютере. ется наливать не только себе. Иначе При таких условиях свободному софту Можно взять компьютерного больно- придется каждому гостю покупать по и особого лобби не надо, его преимуго, применить к нему те или иные мето- бутылке. Глядеть на цену, не поглядев щества видны сразу. ды обследования и получить результат. на эти условия, нелепо». Набрав в любой поисковой системе Врачи остались довольны. Тренажером Так же нелепо, объясняли в 2003 го- free software, находим сайт www.gnu.org. этим пользуются до сих пор». ду Алексей Смирнов и его коллеги со- И вот они, четыре разновидности своНаучная работа Алексея Смирно- трудникам Министерства экономичес- боды пользователей программ: ва в области логического программи- кого развития и торговли РФ, покупать 1. Свобода запускать программу рования – это поиск вывода в различ- программы для госсектора, не указав, в любых целях (свобода 0). ных логических системах, паранепро- какие права при этом вы хотите при- 2. Свобода изучения работы програмтиворечивые логики, компьютерные обрести. «Мы создали аналитическую мы и адаптация ее к вашим нуждам системы поиска вывода. В соавторстве работу. Среди прочего, рекоменда(свобода 1). Доступ к исходным текАлексей Владимирович создал про- ции по использованию свободных простам является необходимым услограмму интерактивного поиска дока- грамм в госсекторе. И заявили: категовием. зательств Deductio, распространенную рически не надо при госзакупках какие- 3. Свобода распространять копии, так в нашей стране и за рубежом. Интерес- либо преференции делать свободному что вы можете помочь вашему тонейшая тема, продолжить изучение ко- софту. Они на нас удивленно посмотреварищу (свобода 2). торой предлагаю на сайте www.logic.ru. ли и спросили: «Вы же представляете 4. Свобода улучшать программу А я возвращаюсь к интервью. Мир сво- свободный софт, почему же не надо деи публиковать ваши улучшения, так бодного человека открыт, а значит, тем лать преференции?» Отвечаем: «Вопчто все общество выиграет от этодля общения огромное множество. рос не в преференциях, а в том, чтого (свобода 3). Доступ к исходным текстам является необходимым усбы тендер проводился на равных для Четыре свободы всех». Что это значит? Когда вы покуловием. Наш разговор продолжается. Вокруг паете программу, вы покупаете не котихо – сотрудники института уже дав- робочку, а определенные права. ОбъПрограмма считается свободной, но разбрелись по домам – вечер, конец являя тендер, необходимо раскрыть если пользователи располагают всерабочей недели. А у нас беседа в раз- не только технические характеристи- ми четырьмя свободами… С вас могаре. Мы перешли к самой главной те- ки программы, но и заявить, какие пра- гут взять деньги за копирование проме – свободный софт. К чайному сто- ва вы хотите купить. Что я имею пра- грамм GNU, либо вы можете получить лу, расположенному неподалеку, под- во сделать с программой? Поставить их бесплатно. Вне зависимости от того, ходит Алексей Евгеньевич Новодвор- ее на один компьютер и через два дня как вы получили вашу копию, вы всегский, друг, соратник, спутник на всем стереть? Поставить на все компьютеры да свободны в дальнейшем копировамаршруте трудовой биографии Алек- на 41 год? Или могу копировать, разда- нии либо модификации программ». сея Владимировича, наливает себе вать всем желающим? А если мне заПрактически, процитировав эти чай. Смирнов указывает на него и пы- хочется ее исправить? Предположим, фрагменты, я применила на практике тается объяснить мне, неофиту сво- программа закупается для школ. Зна- принципы свободного ПО. бодного ПО: «Алексей привел хороший чит, это учебное пособие. Учебное поМне также понравилась идея «авпример. Приходите в магазин, хотите собие должно быть свободно, доступ- торского лева», описанная в книге Рикупить бутылку воды. На одной напи- но всем сотрудникам и учащимся шко- чарда Столлмена «Open Sources»: сано: «Берите, пользуйтесь до истече- лы. Если я покупаю программу, кото- «Центральная идея «авторского лева» ния срока годности». А на другой напи- рую учитель может дать ребенку домой, в том, что мы даем каждому разрешесано: «Вы должны ее лично открыть и только нарушая уголовный кодекс, то, ние запускать, копировать, изменять выпить, никому не наливать». Вопрос: наверное, это неправильно. Мы ставим программу и распространять измененкакую бутылку вы купите? В зависи- учителя перед выбором между зако- ные версии, но не разрешаем добав-

36


человек номера Мир разработчиков свободных пролять ограничения от себя… Эффек- тами: «Open Sources kill jobs», – пытативность «авторского лева» возможна, ясь защитить низкоквалифицирован- грамм возник во многом благодаря лишь если модифицированные версии ные кадры, которые, ничуть не сму- Алексею Смирнову и ALT Linux. Притакже свободны. Этим обеспечивает- щаясь, «рисуют» при помощи мышки чем народ общается не только в Сети, ся, что производные продукты в слу- одни и те же программы для ста рабо- по e-mail и в «аське». Раз в год провочае их публикации будут доступны на- тодателей. Не боятся, потому что об- дится знаменитый летний «форум» – шему обществу. Когда программисты ладают замечательной эрудицией, хо- Linux Fest, а также приуроченная к недобровольно участвуют в улучшении рошо знают все о существующем про- му международная конференция разпрограмм GNU, «авторское лево» за- граммном обеспечении, способны ра- работчиков свободных программ, куда щищает их от нанимателей, которые зобраться, что и как работает, и приду- приезжают, кстати, не только «линуксомогут сказать: «Вы не можете свобод- мать новое, если это необходимо. Вза- иды» и не только из России, но специно распространять свои модификации, мен этих весьма высоких требований алисты практически со всего СНГ. Сопоскольку мы собираемся сделать их «свободный софт» дает им свободу. И бирается целая армия – человек четынашей собственнической версией про- пропуск в особый мир, который Алек- реста. Обсуждают технические, полиграммы». Отлично! Это то, что Алексей сей Смирнов описывает так: «Кто-то тические проблемы. Слабых докладов Смирнов называет: «Свободнорожден- написал программу, другой посмот- на конференции не бывает, коммерного нельзя лишить свободы». рел: «О, здесь можно что-то улучшить, ческие делают только фирмы-спонсоУф, ну вот, спецы могут вздохнуть вот тебе изменения для этой програм- ры, да и те, чтобы не выглядеть глупо, облегченно, мой ликбез завершен. Од- мы!». Наверное, он пришлет эти изме- присылают представителей с содержанако еще одна восторженная нотка – по нения не потому, что он такой добрый, тельными сообщениями. поводу «мира свободного софта», ко- а потому, что ему нужна дополнительЗабавно, но уже в финале нашеторый уже существует не только в ми- ная функциональность. Если он прос- го интервью, словно нарочно, раздалре, но и в нашей стране. Почему-то в то сделает изменения для себя и ни- ся звонок – Алексея Владимировича моем восприятии это мир легких, ве- кому не заявит о них, то в следующей спрашивали именно по поводу июльселых людей, которые ничего не боят- версии программы того, что ему нужно, ской встречи. Могу совершенно отся – ни пресловутого нарушения авто- уже не будет. То есть если я что-то сде- ветственно заявить всем, кто интерерских прав, ни воровства «чужой ин- лал и открыл, это будет жить дальше, я суется: в этом году Linux Fest обязателлектуальной собственности». Ни за- тоже смогу пользоваться. Причем я мо- тельно состоится. В восьмой раз. Приявления Билла Гейтса, который не так гу сделать чуть-чуть, а другие продол- соединяйтесь! Оксана Родионова давно сказал на встрече с программис- жат. Я обозначил направление».

III Международная конференция разработчиков свободных программ на Протве  Когда: 24-26 июля  Где: Калужская обл., г. Обнинск, Государственный Центральный Институт Повышения Квалификации (ГЦИПК), (ул. Курчатова, д. 21)  Подробности: http://conf.altlinux.ru Конференция, в работе которой примут участие ведущие разработчики свободных программ из России и других стран, представители министерств и других госструктур, а так же крупных фирм, ставит целью наладить личные контакты между специалистами, обсудить перспективы развития свободного программного обеспечения, инициировать новые проекты. Планируется издание сборника тезисов докладов к началу работы конференции. Темы для докладов:  Проекты разработки свободного программного обеспечения.  Научные проекты в различных областях знаний, включающие разработку продуктов под свободной лицензией.  Культурные, философские и правовые особенности свободного лицензирования.  Свободные программы для органов государственной власти. Во время конференции планируется провести круглый

№6, июнь 2006

стол на тему: свободные программы для электронного государства. Заявки на проведение круглых столов по другим темам принимаются Оргкомитетом до 1 июля. Для участия в конференции в качестве докладчика необходимо: выслать заявку до 20 июня, а в качестве слушателя – до 15 июля. Контакты Оргкомитета Третьей Международной конференции разработчиков свободных программ на Протве:  conference@altlinux.ru  +7 (495) 203-96-98 Организаторы: ALT Linux и Институт Логики. Спонсоры: Naumen. Информационные спонсоры: LinuxRSP.ru; Журнал «Системный администратор». Алексей Новодворский – Председатель Оргкомитета конференции. Дмитрий Левин – Председатель Программного комитета Конференции. Подробная информация о месте проведения, условиях участия, программе конференции (детальная программа будет размещена после 1 июля) и др. доступна по адресу: http://conf.altlinux.ru.

37


сети

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

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

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

38

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


сети Вся сеть Интернет, которая описы.museum, .name, .pro и .travel. Более подробвается зоной «.» (точка) делится на так Домены верхнего уровня называемые TLD (Top Level Domains – Первоначально, согласно RFC 920, в спис- ная информация приведена в [2]. Географидомены верхнего уровня), распре- ке функциональных TLD присутствова- ческие же домены распределены раз и наделяемые либо по функционально- ли только .com, .gov, .mil, .edu, .org [1], ко- всегда. Хотя это не значит, что вы не мому, либо по географическому призна- торые представляли соответственно ком- жете зарегистрировать в нем свой домен. ку. Существует также термин primary мерческие, правительственные, военные Многие географические домены, случайdomain – «первичный домен», или «до- организации, образовательные учрежде- но совпавшие с «хорошо известными» сомен первого уровня», но этот термин ния и некоммерческие организации. Впос- кращениями, являются чрезвычайно прииспользуется значительно реже. Рас- ледствии этот список несколько расширил- влекательными. Например, .md (Молдавия) пределение по географическому при- ся – в 1985 г. добавился TLD .net, представ- очень привлекательна для медицинских знаку осуществляется в соответствии ляющий организации-поставщики сетевых учреждений и жителей штата Мэриленд, с ISO 3166, устанавливающему для услуг, а в 1988 – TLD .int, представляющий США; .tv (Тувалу) – для сайтов, связанных всех стран мира двух- и трехбуквен- международные организации. В 2001-2002 с телевидением; .tm (Туркменистан) совные коды. Распределение по функцио- к этому списку добавились практические падает с написанием сокращения «Trade нальному признаку осуществляется по неизвестные российскому пользовате- Mark», а .nu (Ниуэ – есть такой остров-комере необходимости создания нового лю TLD .aero, .biz, .cat, .coop, .jobs, .mobi, лония) – для сайтов в стиле «ню». TLD. Здесь следует отметить, что всеми вопросами по отношению к TLD за-  Сервер DNS обращается к серверу организациями, причем резервирозоны granch.ru. вание .gov оформлено соответствуюнимается ICANN (Internet Corporation for Assigned Names and Numbers), и имен-  И наконец, сервер зоны granch.ru щим RFC – RFC 2146 [5]. Полный списообщает ему адрес, соответству- сок всех существующих в настоящий но этот орган решает – создавать ли ющий имени www. В данном случае момент географических же TLD с укановый TLD. это будет 81.1.252.58. занием регистратора домена и необКорневые сервера сами по себе соходимой контактной информации мождержат только ссылки на сервера, соДанный процесс проиллюстриро- но посмотреть в [6]. Хотя если, скажем, держащие информацию о зонах второго уровня, которые в свою очередь ван на рис. 1, где цифры обозначают в зоне .com можно выбирать из огромного списка, то для зон .ru и .su содержат информацию о серверах, со- последовательность запросов. РУЦЕНТР, [8], без вариантов. держащих информацию о зонах третьЗдесь надо отметить несколько моего уровня и т. д. В большинстве слу- Как встроить свою ментов. Фактически зона .su относится чаев иерархия исчерпывается на тре- информацию в структуру к несуществующему государству Сотьей-четвертой зоне. Но не потому, DNS? что здесь заложено какое-то ограниче- Прежде чем включаться в какую-либо ветский Союз (Soviet Union), хотя тем ние. Просто запоминать сложные име- систему, нужно иметь некоторое пред- не менее продолжает обслуживаться ставление о том, куда и каким образом и открыта для регистрации. Регистрана ничуть не проще IP-адресов. ция там достаточно дорогая – 100 долТаким образом, процесс поиска ин- включаться. ларов за регистрацию или поддержку формации, допустим, о веб-сервере в год. www.granch.ru, будет выглядеть сле- Куда встраиваем? Не существует никакого приориЗа различные TLD отвечают различдующим образом:  Клиент обращается к своему сер- ные сервера, и если за географи- тета, согласно которому одна органиверу DNS, адрес которого был ческие домены отвечает, как прави- зация или человек имеет преимущесзадан системным администра- ло, один сервер (точнее говоря, одна тво при регистрации домена над друтором с запросом «Скажи мне организация), то за домены функцио- гим. Один американский бизнесмен, адрес, соответствующий имени нальные может отвечать, вообще гово- занимавшийся производством пласря, неограниченное количество так на- тиковых окон, зарегистрировал доwww.granch.ru».  Сервер DNS знает адреса серве- зываемых регистраторов, то есть ком- мен windows2000.com. Когда то же саров, с которых ему следует начи- паний, заключивших специальные до- мое попыталась сделать Microsoft, она нать поиск в том случае, если в его говоры с ICANN о том, что именно они с удивлением обнаружила, что это имя кэше не хранится запрошенная ин- будут регистрировать имена в некото- уже занято, и за него компании приформация, поэтому он обращается рых функциональных доменах. Крат- шлось выложить крупную сумму. Сукое описание функционального до- ществует даже понятие «киберсквотк одному из них.  Корневой сервер присылает ему мена и адрес его регистратора при- терство» – процесс регистрации доменов с целью их последующей переадрес сервера, отвечающего за зо- ведены в [3]. Если регистраторов несколько, то продажи. РУЦЕНТР тоже решил прину .ru  Сервер DNS обращается к серверу дается адрес основного (например, ложить к этому руку, и по новым праVeriSign [4] для домена .com). Домены вилам, которые вводятся с 1 июня зоны .ru  Сервер зоны .ru присылает ему .gov и .mil зарезервированы исключи- 2006 года, освобождающиеся домеадрес сервера, который отвечает тельно за американским правительс- ны выставляются на «аукцион доментвом и американскими же военными ных имен» и передаются тому, кто даст за зону granch внутри его зоны.

№6, июнь 2006

39


сети ми картами, но если домен по какой-либо причине не может быть зарегистрирован, деньги будут возвращены не ранее чем через три дня. Регистратору потребуется указать IP-адрес и маску подсети сервера, на котором будет запущена программа DNSсервера, и который будет содержать основную базу данных, создаваемую и редактируемую вами по мере необходимости. Этот сервер будет называться первичным сервером (master server). Кроме того, потребуется указать как минимум один IP-адрес сервера, содержащего резервную копию базы на случай отказа первичного сервера. Такие серверы называют вторичными серверами (slave servers). Чтобы долго не размышлять о том, где разместить вторичный DNS, РУЦЕНТР предлагает разместить его на их площадке. Стоимость услуг РУЦЕНТРа составляет 15 долларов в год за домен в зонах .ru, .net, .com, .org, 50 долларов за домен в зонах .biz, .info, 100 долларов за домен в зоне .su и 5 долларов в год за поддержку вторичного DNS в любой (в том числе и зарегистрированной не у них) зоне. Почему требование к наличию вторичного DNS-сервера является обязательным? Поскольку стабильность работы DNS крайне важна для стабильности работы сети Интернет в целом, то лицо или организация, регистрирующая домен, обязана удовлетворять некоторым условиям, касаРисунок 1. Процесс поиска информации ющимся стабильности работы DNS: больше. Имена удерживаются на «аукционе» в течение го-  Должно быть предусмотрено не менее двух серверов, да, если за этот срок никто на него не претендует, имя выобслуживающих данный домен. водится в свободную регистрацию.  Эти сервера должны быть доступны не менее 22 часов При создании TLD, перечисленных выше, планиров сутки. валось также создание TLD .xxx для сайтов с тематикой «для взрослых». ICANN отклонила это предложение. НедавКаких-либо требований к размещению серверов по ноно оно было вынесено на повторное голосование, и ICANN вым правилам не выдвигается, хотя ранее требовалось наснова его отклонила [7]. Зато появился TLD .tel [9], рассчи- личие их в разных IP-сетях. танный на использование одновременно в компьютерах и мобильных устройствах. www.krokodil.ru Существует RFC 1480, описывающий правила регистра- Итак, допустим, мы хотим создать сайт www.krokodil.ru (на ции имен в домене .us. Правила эти чрезвычайно громозд- момент написания статьи это имя было свободно), посвяки и запутанны и предполагают создание имен из 6-7 уров- щенный разведению крокодилов в домашних условиях. ней типа Hamilton.High.LA-Unified.K12.CA.US Подключение по выделенной линии есть, сеть класса С, а именно 212.20.5.0 – 212.20.5.255 (этот диапазон в настояКаким образом встраиваем? щее время свободен) провайдером выделена. Этот пример Раньше все было гораздо сложнее. Для регистрации зоны несколько нехарактерен для нынешнего времени с его де.com мне пришлось заполнять множество текстовых форм – фицитом IP-адресов, но он взят специально для того, чтос данными на организацию, с данными на контактных лиц... бы рассмотреть создание обратной зоны. Также будет расФормы эти потом отсылались на специальные адреса, от- смотрен вариант с подключением через сеть 212.20.5.0/31. куда приходили ответы – приняты или нет. Затем предвари- Внутренняя сеть нашей крокодиловодческой конторы сотельно сформированный файл зоны тестировался, и опять стоит из шести компьютеров и будет отделена от Интернет же по почте приходило сообщение о том, успешно завер- firewall-proxy и т. д. под управлением FreeBSD. Что нам пошено тестирование или нет. надобится для осуществления задуманного? Сейчас все стало гораздо проще. И Network Solutions, Прежде всего отмечу, что существуют варианты, не и РУЦЕНТР обзавелись веб-интерфейсами, с помощью ко- предполагающие какого-либо знания DNS – все размещаторых все вышеперечисленное (за исключением, конечно, ется на площадке провайдера, все обслуживается провайсоставления файла зоны) можно сделать несколькими кли- дером, вам предоставляется только веб-интерфейс. Эта усками мыши. Все данные можно исправить, дополнить или луга чрезвычайно популярна за рубежом, но очень слабо удалить в любой момент. Ранее с РУЦЕНТРом требовалось востребована в России. Ее описание выходит за рамки данзаключать договор на обслуживание, но начиная с 1 июня ной статьи, поэтому рассматривать ее я не буду. 2006 года в действие вводятся новые правила, согласно коВо-первых, нам понадобится программа DNS-серветорым достаточно зарегистрироваться на их сайте. Зару- ра. На сегодняшний день только одна программа реализубежные регистраторы, как правило, обходятся кредитны- ет требуемый набор функций. Это DNS-сервер BIND, рас-

40


сети пространяемый ISC (Internet System Consortium Inc., [10]) –  класс – класс записи; некоммерческой организацией, которая занимается раз-  тип – тип записи; работкой серверов BIND, DHCP, INN и NTP. Если он отсутс-  данные – ассоциируемые с данным обьектом данные. твует в вашей системе, его необходимо скачать и устаноИмя может принимать любое значение, и в таком слувить. FreeBSD поставляется вместе с BIND 9.3.2, поэтому в данной статье будет рассматриваться именно эта вер- чае оно считается именем обьекта. Если имя заканчивасия. Следует отметить, что для версий BIND 8.x приводи- ется на точку, то оно считается полностью определенным, мое ниже описание конфигурации совершенно неприем- иначе в конец имени подставляется имя зоны, которое молемо, поскольку формат конфигурационных файлов BIND жет быть задано двумя способами: 8.x коренным образом отличается от формата конфигура-  Заданием имени зоны в директиве $ORIGIN, например: ционных файлов BIND 9.x. $ORIGIN krokodil.ru Во-вторых, понадобится распределить выделенные нам IP-адреса и наделить адресами внутренние компьютеры. Здесь все чрезвычайно просто: пусть 212.20.5.1 – шлюз  Заданием имени зоны в директиве zone конфигураципровайдера, 212.20.5.2 – адрес UNIX- сервера, 10.87.1.0/24 – онного файла BIND. внутренняя подсеть, в которой с 1-й по 6-й – рабочие станСпециальный символ «@» обозначает текущее имя зоции, 254 – адрес внутреннего интерфейса сервера. Остальные адреса будут зарезервированы для будущего расши- ны. Имейте в виду, что директива $ORIGIN отменяет дирекрения. тиву zone и действует до появления следующей директивы В-третьих, потребуется заранее подготовленный файл $ORIGIN или до конца файла. До момента появления перописания зоны, который будет определять небольшое коли- вой директивы $ORIGIN она считается заданной значению чество внешних адресов: krokodil.ru – корневой сервер зоны, директивы zone конфигурационного файла BIND. Если имя задано, оно должно начинаться с первой поwww.krokodil.ru, ftp.krokodil.ru, mail.krokodil.ru и ns.krokodil.ru. Имя ns (nameserver) является практически традиционным зиции строки. наименованием компьютеров, на которых работает служTTL обычно опускается и задается глобально дирекба DNS, хотя, конечно, никто не помешает вам назвать его, тивой $TTL. Директива $TTL для BIND 9.x является обянапример jaws.krokodil.ru. Будут определены также имена зательной и, как правило, задается в самом начале файдля компьютеров внутренней сети, доступные только из- ла. В поле данных этой директивы задается время жизни (в секундах) элемента, в течение которого он может нахонутри: tooth1.krokodil.ru – tooth6.krokodil.ru. диться в кэше и считаться достоверным. В данном примере это двое суток (48 часов). Записи DNS Существует достаточно большое количество типов разно$TTL 172800 образных записей, которые можно помещать в DNS. Обьем данной статьи позволяет рассмотреть лишь наиболее важные из них, для получения полной информации следует обКласс записи может принимать одно из следующих ратиться к соответствующим RFC: RFC 1033 и RFC 1035 оп- значений: ределяют форматы основных записей, RFC 1122 – формат  IN – запись ресурсов Интернет. записи PTR, RFC 2782 – формат записи SRV. Мы рассмот-  CH – запись ресурсов ChaosNet – совершенно незнакорим только те записи, которые понадобятся для формировамой российскому пользователю сети, применявшейся на машинах фирмы Symbolics. ния файлов зон, необходимых для регистрации домена:  Запись SOA, задающая начало описания зоны.  HS – запись ресурсов Hesiod – служебного протокола BIND.  Запись NS, определяющая сервера имен зоны.  Запись A, задающая соответствие между IP-адресом Тип записи – один из типов, перечисленных выше. и именем (прямое преобразование). Следует обратить внимание на то, что поля имя, ttl  Запись MX, описывающая настройки доставки почты и класс могут быть опущены. При этом в качестве их знадля данного компьютера. чений принимается последнее определенное значение  Запись CNAME, задающая альтернативные имена.  Запись PTR, задающая соответствие между именем (при этом задание @ будет корректным определением), и IP-адресом (обратное преобразование), употребля- а если значение не было определено нигде, то для поля класс принимается значение по умолчанию «IN», для друется в описании «обратной» зоны. гих полей – приводит к сообщению об ошибке. Формат записей DNS общий для всех типов записей: Кроме записей, в файле зоны могут быть команды. Всего команд четыре – $TTL, $ORIGIN, $INCLUDE и $GENERATE. [имя] [ttl] [класс] <тип> <данные> Описание команды $GENERATE приведено в документации на программу BIND, а также в [13] и [14], команда $INCLUDE работает соответственно своему написанию – включает где:  имя – это имя обьекта, с которым ассоциируются дан- указанный файл в текущий файл. ные; $INCLUDE /etc/namedb/krokodil-ru-int.soa  ttl – время жизни обьекта;

№6, июнь 2006

41


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

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

IN

SOA

krokodil.ru. 2005122001 10800 3600 1728000 172800 )

hostmaster.krokodil.ru. ( ; Serial number ; Refresh every 3 hours ; Retry every hour ; Expire every 20 days ; Minimum 2 days

подчиненный сервер должен связаться с главным и проверить, не изменился ли серийный номер зоны. Если серийный номер изменился, подчиненный сервер загрузит новые данные. В данном примере 10800 секунд (3 часа).  Время, через которое подчиненный сервер будет пытаться обратиться к главному, если попытка получить новый серийный номер закончилась неудачно. В данном примере 3600 секунд (один час).  Время, в течение которого подчиненные сервера будут обслуживать запросы по данной зоне при длительном отсутствии главного сервера. Система должна работать, даже если главный сервер не работает длительный период времени, поэтому в значении данного параметра задано 1728000 секунд (20 суток).  Время кэширования отрицательных ответов. В данном примере 172800 секунд (2 суток).

Разберем пример. Знак @ в поле имени означает, что необходимо взять имя зоны, заданное ранее директивой $ORIGIN. Класс записи – IN, тип записи – SOA. SOA – это Запись NS единственная запись, которая имеет такой сложный спи- Эта запись задает имена серверов, поддерживающих зосок параметров. ну, т.е. ведущих ее базу. Здесь должны быть перечислены Первый параметр – это адрес главного сервера имен имена первичного и всех вторичных серверов. Обычно эта зоны. В данном примере это krokodil.ru. Второй параметр – запись следует непосредственно за записью SOA. В поле адрес электронной почты лица, ответственного за данную данные заносится одно значение – имя или IP-адрес серзону. Обратите внимание, что адрес записан как «username. вера DNS-зоны независимо от того, является ли он главdomain», а не «username@domain». ным или подчиненным. Все указанные здесь имена должВторой параметр – это список значений, заключенный ны быть полностью определенными, то есть заканчиватьв скобки. Теоретически возможно его записать в одну стро- ся точкой! ку, но практически я нигде этого не видел, всюду употребIN NS ns.krokodil.ru. ляется форма записи, приведенная в примере. Список соIN NS ns4.nic.ru. стоит из пяти элементов:  Серийный номер зоны. Этот параметр играет чрезвыВ приведенном примере описывается сначала главный чайно важную роль в распространении обновления, вы- сервер нашей зоны ns.krokodil.ru, а потом подчиненный серполненного на первичном сервере, по всем его вторич- вер – узел РУЦЕНТРа ns4.nic.ru. ным серверам. Необходимо каким-то образом сообщить вторичному серверу о том, что данные на первичном Запись A сервере изменились. Если первичный сервер был пе- Запись типа A – это основное содержимое файлов зоны резапущен, то он отсылает всем вторичным серверам прямого преобразования или же просто «прямой» зоны, извещение о возможном изменении (DNS NOTIFY). По- то есть выдающей имя компьютера по его адресу. Она солучив это извещение, вторичный сервер запрашивает ставляется для каждого компьютера. Для удобства чтения серийный номер – если на первичном сервере серий- эти записи обычно группируются в порядке возрастания ный номер больше, чем на вторичном, вторичный сер- IP-адресов, а также группируются с записями MX, соответсвер выполняет команду обновления зоны. Кроме того, твующими данному IP-адресу, хотя это, конечно, не являвторичный сервер выполняет периодические проверки ется обязательным. В поле имя заносится имя, назначаесерийного номера с той же целью. Поэтому следует за- мое IP-адресу, в поле данные – IP адрес, которому назнапомнить одно простое правило: исправил зону – увеличь чается имя. При наличии у адреса дополнительных имен, серийный номер! Среди администраторов DNS распро- имя, назначенное адресу записью типа A, называют осстранена практика, в соответствии с которой серийный новным именем. номер формируется следующим образом: YYYYMMDDv, tooth1 IN A 10.87.1.1 где: tooth2 IN A 10.87.1.2  YYYY, MM, DD – текущий год (4 цифры), месяц и день tooth3 IN A 10.87.1.3 tooth4 IN A 10.87.1.4 соответственно tooth5 IN A 10.87.1.5  v – версия зоны за день. Если вносится несколько tooth6 IN A 10.87.1.6 изменений в день, это число последовательно увеВ данном примере описано назначение IP-адресов комличивается на единицу. Конечно, вас никто не будет обязывать следовать по- пьютерам внутренней сети, которая имеет адрес 10.87.1.0/24. добной практике. Например, сервера DNS в Windows ее Для компьютеров внутренней сети, как правило, нет необне придерживаются, а просто нумеруют ее 1, 2, 3 и т. д. ходимости формирования каких-либо дополнительных за Значение периода обновления, по истечении которого писей, за исключением разве что CNAME.

42


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

IN IN IN

A CNAME MX

10.87.1.1 ns 10 ns

A CNAME MX

10.87.1.254 ns 10 name1

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

IN IN IN

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

IN IN IN

IN IN IN CNAME CNAME CNAME

A MX MX

212.20.5.2 10 krokodil.ru. 50 behemot.ru.

krokodil.ru. krokodil.ru. krokodil.ru.

Это комплексный пример, он сразу показывает использование записей MX, А и CNAME. Здесь мы:  Назначаем адресу 212.20.5.2 имя krokodil.ru.  Указываем, что почту, направляемую по адресам типа tail@krokodil.ru, будут принимать (в указанном порядке):  сервер krokodil.ru;  сервер behemot.ru.  Определяем дополнительные имена www.krokodil.ru, mail.krokodil.ru и ftp.krokodil.ru. Обратите внимание, что все имена в правой части полностью определенны, то есть заканчиваются на точку. Если этого не сделать, то в конец имени будет автоматически подставляться значение текущей директивы $ORIGIN. В данном случае это привело бы к появлению имен типа www.krokodil.ru.krokodil.ru.

Записи CNAME могут указывать одна на другую, но не более семи уровней, восьмой обязательно должна идти запись, указывающая на имя, назначенное записью типа A. В литературе встречается рекомендация использовать множественные записи типа A вместо назначения адресу множества дополнительных имен. По поводу этого можно сказать, что данный момент упоминается в RFC 2219 в плане «не существует абсолютных рекомендаций по это- Запись PTR му поводу, каждый должен решать для себя, что для него Это совершенно особый тип записей. В нашем примере мы лучше». Множественные CNAME проще для администри- «специально» взяли полную подсеть, чтобы рассмотреть рования, множественные A-записи легче обрабатываются, случай «нормальной» работы с записями PTR. Случай с сепоскольку происходит меньше перенаправлений. тью 212.20.5.0/31 будет рассмотрен чуть позже. Запись PTR предназначена для осуществления обратного преобразования – имен в IP-адреса. Подобные преЗапись MX Запись типа MX – это второй основной элемент файла зо- образования очень широко применяются в различных проны. Эта запись расшифровывается как «Mail eXchanger», граммах, предоставляющих доступ к некоторым сетевым и предназначена для указания IP-адресов или имен ком- ресурсам: они проверяют соответствие прямого и обратпьютеров, которые принимают почту для узла, описанного ного преобразования и в случае несовпадения или отсутсв поле name. В этом поле может быть пусто, а также указа- твия записи PTR могут отказать в доступе. Зона, содержано полностью или не полностью определенное имя. Если щая записи PTR, называется зоной обратного преобразов поле name пусто или указано не полностью определенное вания или же просто «обратной» зоной. имя, то имя дополняется из директивы $ORIGIN. ФормироЗаписи PTR не имеют никакого отношения к записям A, вание записей MX в сложных случаях, когда настраивается MX, CNAME и другим, описывающим прямое преобразовадостаточно большая зона с разветвленной схемой приема ние. Сделано это намеренно с целью использовать для обопочты, – весьма нетривиальная задача, которая тесно пе- их преобразований один и тот же набор программных мореплетается с работой программ, использующих протокол дулей. Здесь, правда, нас ожидает сложность следующеSMTP для доставки почты, поэтому мы рассмотрим толь- го вида – полностью определенное доменное имя вида ко наиболее простой случай – вся почта принимается сер- www.krokodil.ru. «наращивает размерность» слева направо вером UNIX. В поле данные заносятся два значения – при- (то есть укрупнение узлов идет по мере продвижения по текоритет и имя или IP-адрес компьютера, принимающего поч- сту имени слева направо), а IP-адрес 212.20.5.2 – справа ту, направляемую на данный компьютер. С одним IP-адре- налево. Для унификации программных модулей приняли сом может быть связано, вообще говоря, неограниченное следующую условность: все IP-адреса – это имена, вхоколичество записей типа MX, и все они должны иметь раз- дящие в специальный TLD in-addr.arpa. «Зонами» в этом ный приоритет. Почта направляется в соответствии с при- домене являются подсети, а имя зоны записывается в виоритетом – почтовый агент сортирует записи в порядке на- де IP-адреса, читаемого наоборот. Таким образом «имя»

№6, июнь 2006

43


сети нашей обратной зоны будет 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 1.87.10.in-addr.arpa 1 IN PTR 2 IN PTR 3 IN PTR 4 IN PTR 5 IN PTR 6 IN PTR

tooth1.krokodil.ru. tooth2.krokodil.ru. tooth3.krokodil.ru. tooth4.krokodil.ru. tooth5.krokodil.ru. tooth6.krokodil.ru.

В приведенном выше примере мы задали обратное преобразование для компьютеров внутренней сети. Для сервера мы запишем одну строчку (в реальном примере директивы $ORIGIN указывать не надо, они приведены только, чтобы было понятно, о какой зоне идет речь): $ORIGIN 5.20.212.in-addr.arpa 2 IN PTR

krokodil.ru

Здесь необходимо отметить, что записи CNAME для задания множественного обратного соответствия не используются, поэтому при запросе «какое имя соответствует адресу 212.20.5.2» результатом всегда будет krokodil.ru независимо от количества установленных для него псевдонимов. Чем будет отличаться случай, когда провайдер выделяет блок 212.20.5.0/31 вместо полноценной подсети? С точки зрения формирования всех записей, кроме PTR, ничем. Процедура создания прямой зоны и ее регистрации не зависит от количества адресов, тем более что для большинства случаев много адресов и не надо. Однако с точки зрения записей PTR разница есть. В сторону упрощения. А может быть, и нет – в зависимости от провайдера. И заключается она в том, что записи: gate.krokodil.ru. krokodil.ru.

44

IN IN

A A

212.20.5.1 212.20.5.2

будут находиться на вашем сервере и управляться вами, но записи: 1 2

IN IN

PTR PTR

gate.krokodil.ru. krokodil.ru.

должны быть сформированы провайдером, потому что возможность самому регистрировать обратную зону и самому ей управлять предоставляется только при наличии сети класса не менее С. Это, с одной стороны, облегчает работу – не нужно регистрироваться в 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 будет занесена в файл прямого преобразования внутренней зоны. Для то-


сети го чтобы не загружать сеть передачей бесполезных данных, для внешних и внутренних зон используются разные записи 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 вместе с внутренней зоной обратного преобразования: $INCLUDE /etc/namedb/krokodil-ru-int.soa 1 IN PTR localhost.

Файл zone212.rev: $INCLUDE /etc/namedb/krokodil-ru-ext.soa 1 IN PTR gate.krokodil.ru. 2 IN PTR krokodil.ru.

Файл zone10.rev: $INCLUDE /etc/namedb/krokodil-ru-int.soa 1 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.

Файл direct-krokodil-ru.int: $INCLUDE /etc/namedb/krokodil-ru-int.soa krokodil.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

№6, июнь 2006

tooth2 tooth3 tooth4 tooth5 tooth6

IN IN IN IN IN

A A A A A

10.87.1.2 10.87.1.3 10.87.1.4 10.87.1.5 10.87.1.6

Файл direct-krokodil-ru.ext: $INCLUDE /etc/namedb/krokodil-ru-ext.soa krokodil.ru. IN A 212.20.5.2 IN MX 10 krokodil.ru. IN MX 50 behemot.ru. www mail ftp

IN IN IN

CNAME CNAME CNAME

krokodil.ru. krokodil.ru. krokodil.ru.

gate

IN

A

212.20.5.1

Файл krokodil-ru-int.soa: @

IN

;

SOA

IN

NS

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 krokodil.ru.

Файл krokodil-ru-ext.soa: $TTL 172800 @ IN SOA

;

IN IN

NS NS

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 krokodil.ru. ns4.nic.ru.

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

Ссылки и литература: 1. ftp://ftp.rfc-editor.org/in-notes/rfc920.txt 2. 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).

45


web

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

Сергей Яремчук История развития IT-индустрии показывает, что появление новых технологий практически всегда приводит к понижению уровня безопасности. Так было всегда. Когда мэйнфреймы стали объединяться в сеть, началось развитие клиент-серверных приложений – всё это породило специфические проблемы и фактически обесценило старую систему безопасности. И вот сегодня новая ступень – AJAX.

О

дин-единственный объект Java Script XMLHttpRequest изменил порядок взаимодействия пользователей с сервером. Если ранее для того, чтобы отправить данные, необходимо было нажимать кнопку, подтверждая действие, то теперь это будет сделано автоматически. Стоит заполнить поле, и браузер уже отправляет данные серверу, пользователь при этом не участвует. Удобство налицо, например, если в поисковике по мере ввода параметров поиска будут выводиться подходящие страницы, то таким образом можно регулировать параметры запроса на лету, добившись результата в меньшее время. Или, например, как в Gmail, можно на лету проверять правописание. При этом веб-приложение фактически ведет себя аналогично настольному.

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

46

вого адреса другой. В старых системах этом, но и сделать, собственно, ничеу него всегда был бы шанс исправиться, го не сможет. То есть фактически техтеперь его, увы, уже нет. И в итоге про- нология AJAX позволяет контролировайдерский почтовый адрес уже висит вать действия пользователя, а раз тана каком-либо форуме и через некото- кая возможность есть, то я сомневаюсь, рое время попадет в базу данных спа- чтобы ею никто не воспользовался. Но это еще не все. Пользователи меров. Возможно, это не самое страшное, что может произойти, но можно, обычно бывают более внимательнынапример, представить ситуацию и по- ми при первоначальной загрузке страхуже. Зашли на сайт, начали заполнять ницы, когда обычно выполняется код поля, ввели номер кредитной карточки, страницы, контролируются сообщеа затем сам сайт показался подозри- ния межсетевого экрана, подозрительным, а ничего уже не изменишь. тельные системные события и прочее. Или, как вариант, по ошибке был вве- Но теперь ситуация изменяется в корден логин и пароль не к тому сайту, учи- не. Все дело в том, что теперь любой тывая, что большинство пользователей код может быть выполнен и после зане утруждают себя многочисленны- грузки страницы. Например, рассмотми комбинациями логин/пароль, мож- рим такой код: но получить данные для доступа совxmlReq.onreadystatechange = сем к другому ресурсу. При этом вла{ дельцы веб-сайтов могут собирать инif ( xmlReq.readyState == 4 ) { формацию о привычках пользователя. eval ( xmlReq.responseText ); Фактически каждое нажатие клавиши, } } каждое движение мыши, щелчок, пауза при чтении информации могут быть Такой сценарий выполнит JavaScriptперехвачены и отправлены на веб-сервер, и пользователь может и не знать об код, содержащийся в ответе сервера,


web т.е. код, полученный уже после загрузки запрошенного документа. Самое простое, для чего можно использовать такую конструкцию, – это загрузка баннеров, которые можно теперь подгружать постоянно без перезагрузки основной страницы. Кстати, интересная проблема получается: раз в AJAXприложениях нет страниц как таковых, то каким же образом пользователю будут показываться баннеры? Решить ее очень просто, например: менять по таймеру, по щелчкам или движению мыши, нажатию клавиш. Но если попадется недобросовестный веб-мастер, пожелавший накрутить счетчики, то пользователь может заплатить за удобство лишним трафиком. И самое печальное, что теперь, проанализировав исходный код документа, нельзя до конца быть уверенным в лояльности того или иного сервиса. И все это на фоне повышения популярности атак, направленных на уязвимости в клиентских приложениях, в частности в веб-браузерах. Как бы то ни было, именно на безопасность клиентов при использовании технологии AJAX обращают внимание многочисленные эксперты.

Ошибки при программировании AJAX-технология относительно молодая, и хотя уже сегодня можно найти тысячи примеров, разработчикам все равно приходится самостоятельно писать код как для сервера, так и для клиента практически в каждомом случае, и к тому же на разных языках. Это приводит к многочисленным ошибкам в реализации, часть которых обнаруживается только при эксплуатации приложения. К тому же не стоит забывать, что эту ситуацию усугубляют различия в поведении веб-браузеров, наличие плагинов (некоторые отладчики, о которых рассказано чуть ниже, перехватывают действие и подменяют своим) и прочее. Это приводит к увеличению кода, а значит, – к вероятному появлению ошибок в конкретной реализации. На сегодняшний день стандарт XMLHttpReques еще не принят, 5 апреля 2006 года World Wide Web Consortium опубликовал всего лишь его черновой вариант [13]. К тому же всегда найдутся особенные браузеры, разработчики которых не бу-

№6, июнь 2006

Рисунок 1. При помощи FireBug можно просматривать AJAX-запросы

проса либо самому составить запрос, основываясь на анализе исходного кода и ответов сервера. Если во время своей работы сервер не будет дополнительно подстраховываться и контролировать поступающие данные на предмет их принадлежности конкретному пользователю, это может привесА что сервер? По сообщениям специалистов, зани- ти к утечке конфиденциальных данмающихся безопасностью, сегодня ных. Одним из самых простых метоприблизительно 20 процентов уязви- дов управления разрешениями являетмостей приходятся именно на веб-при- ся использование cookies. Когда объложения. Отмечается, что очень ред- ект XMLHttpRequest создает запрос, кое приложение может похвастаться он возвращает все активные в настовсего одной уязвимостью, большая ящее время для этого сайта сеансоже часть содержит несколько уязви- вые cookies. Но это может быть выхомых мест. При этом большая часть дом не для каждой ситуации. Наприуязвимостей (около 95%) приходится мер, запросы могут быть отправлены на cross-site scripting (XSS), т.е. подста- не тому серверу, на котором зарегисновка чужого кода в текущий сеанс. Ти- трировался пользователь, а на другой пичные эксплоиты могут включать: мо- сервер, где привилегии никак не поддификацию страниц (дефейс), переад- тверждены. Если ранее браузер просресацию (например, для форм регис- то отправлял ему форму, то теперь трации) и взаимодействие с сайтом происходит двусторонний обмен данот имени другого пользователя. ными (хотя некоторые браузеры могут Нас в контексте статьи интересу- блокировать такое поведение), и сает последний пункт. Хотя стоит отме- мое главное, что второй ресурс может тить, что при помощи XSS можно смо- не иметь активных cookies. В некоторых скриптах, встречаюделировать любую ситуацию, которую возможно проделать при помо- щихся на форумах, приходящие данщи JavaScript. Теперь представим та- ные персонализируются на основакую ситуацию. Пользователь запол- нии некоего идентификатора пользоняет некую форму, AJAX отсылает за- вателя (ID) или токена. Токен включен прос, сервер обрабатывает отправ- как заголовок в запросах, сделанных ленные данные и возвращает ответ. объектом XMLHttpRequest. Он должен Но что, если злоумышленник имеет вести себя аналогично сеансовому товозможность перехватить данные се- кену и обеспечивать доступ к защианса и скорректировать параметры за- щенному ресурсу. Но злоумышленнидут придерживаться рекомендаций WWWC, и некоторая часть пользователей все равно будет использовать старые версии браузеров, поэтому улучшений здесь в ближайшем будущем не предвидится.

47


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), в котором обнару-

48

жена уязвимость, позволяющая провести XXS-атаку [5]. Небольшой объем данных, обычно пересылаемый при помощи AJAX, часто приводит к тому, что им могут просто не придать значения, забывая о их ценности. И если ранее всю форму полностью направили бы через SSL, то теперь, возможно, с этим возиться никто не будет, особенно на фоне того, что большая часть передаваемых и принимаемых данных действительно не имеет большой ценности. Но стоит отметить, что уже появились наработки [11] по шифрованию информации, передаваемой при помощи AJAX. Кроме того, бездумное использование AJAX может привести к возрастанию нагрузки на сервер. Так, если раньше форма отсылалась на сервер всего один раз после заполнения всех параметров, то теперь запросы поступают постоянно. И если скрипт написан неправильно, с ошибками или пользователь повел себя не так, как задумывал разработчик (а они обычно почему-то так всегда и поступают), то сервер может быть завален запросами. Без тщательного планирования и тестирования написанных приложений здесь явно не обойтись.

Что имеем? Новая архитектура предполагает и доселе неизвестные проблемы. Особенное беспокойство вызывает возможность нападения на клиентские системы, пользователи которых, как правило, подготовлены хуже и защищенность систем ниже. Можно даже предположить появление в недалеком будущем дополнительных настроек в веббраузере, при помощи которых пользователь сможет контролировать AJAXзапросы, как это сегодня делается для cookies. Но как бы то ни было, не смотря на это, технология AJAX уже применяется на тысячах серверов и их количество постоянно растет. Отказаться от нее вероятно уже не нельзя, да и глупо. Один из соавторов книги «Ajax in Action» Эрик Паскарелло (Eric Pascarello) в интервью SearchWebServices.com дал следующие рекомендации для разработчиков AJAX которых и стоит придерживаться:  Если используется аутентификация пользователя, убедитесь в проверке на странице запроса.

 Проверьте возможность 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/securityin-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 – http://f tp. mozilla.org/pub/mozilla.org/extensions/ greasemonkey/greasemonkey- 0.6.4fx.xpi. 10. Плагин FireBug – http://releases.mozilla. org/pub/mozilla.org/extensions/firebug/ firebug-0.3.2-fx+fl.xpi. 11. Pro of of C o n c e pt : B rows e r- B as e d Field Encr yption With Blowfish Via Ajax – http://smokey.rhs.com/web/blog/ PowerOfTheSchwartz.nsf/plinks/RSCZ6CATX6. 12. Родионов В. AJAX: заработавший Javascript. – Журнал «Системный администратор», № 12, 2005 г. – 66-69 с. 13. Ч е р н о в о й в а р и а н т к л а с с а XMLHttpRequest, описывающий его интерфейс и поведение, – http://www. w3.org/TR/2006/WD-XMLHttpRequest20060405.



безопасность

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

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

Р

ечь пойдет о том, как увеличить полагаю, что компьютер имеет доступ безопасность FreeBSD, работаю- в Интернет с внешним IP-адресом. Говоря о безопасности в общем щей в качестве маршрутизатора между локальной сетью и Интернетом. (не только о компьютерной), мы неизТак как мы будем настраивать роутер, менно возвращаемся к одному очень то о большом количестве пользовате- простому и действенному правилу: все, лей на нем речи не идет. Также я пред- что человек создал, он может и унич-

50

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


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

Безопасность Безопасность системы в целом складывается из трех факторов:  Безопасность ядра.  Безопасность установленного в ней ПО.  Человеческий фактор. Рассмотрим каждый из этих факторов подробно.

Безопасность ядра Большинство взломов происходит из-за ошибок в ядре. Ядро для операционной системы – это основа: оно управляет всеми операциями, производимыми в компьютере, и, следовательно, без ядра работа системы невозможна, в частности, из-за отсутствия контроля за входными значениями функций. Функции работают на уровне ядра и как следствие имеют абсолютные привилегии, поэтому некоторые хакеры усердно ищут уязвимости для повышения привилегий в системе. Так как для семейства 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

Человеческий фактор

Конфигурируем ядро:

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

№6, июнь 2006

// Включаем поддержку firewall device pf device pflog device pfsync // Запрещает перезагрузку клавишами <ctrl+ alt +del> options SC_DISABLE_REBOOT // Включаем поддержку ALTQ для шейпинга пакетов options ALTQ

# config new Kernel build directory is ../compile/new Don’t forget to do ``make cleandepend; make depend’’

Компилируем и устанавливаем: # cd ../compile/new && make cleandepend && make depend ↵ && make && make install

Перезагружаемся:

51


безопасность # reboot

Должно быть загружено новое ядро, если этого не произошло, то старое лежит в /boot/kernel.old. У меня после удаления всех ненужных опция ядро уменьшилось более чем в два раза.

Для начала нужно отредактировать /etc/login.conf, в котором описываются классы пользователей, заменив: :passwd_format=md5:\

на :passwd_format=blf:\

Механизм sysctl

Это достаточно мощное средство управления системой: с помощью sysctl можно смотреть и изменять параметры Теперь можно создать базу: системы. Так как наша машина должна выполнять роль роу# cap_mkdb /etc/login.conf тера, то желательно изменить следующие значения: // Включаем проброс пакетов через интерфейсы # sysctl net.inet.ip.forwarding=1 // Генерируем случайный идентификатор IP-пакетов # sysctl net.inet.ip.random_id

Для того чтобы пароли пользователей теперь хешировались с помощью blowfish, нужно отредактировать /etc/auth.conf, заменив: crypt_default=md5

// Ограничиваем количество 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

Это минимум, который необходимо изменить. Чтобы после перезагрузки все настройки остались прежними, внесите изменения в /etc/sysctl.conf. Есть еще одна очень интересная переменная, которую я хотел бы описать, – это kern.securelevel. Securelevel может принимать значения от -1 до 3. Давайте рассмотрим последние три случая, так как -1 и 0 являются небезопасными режимами работы и ставятся по умолчанию:  1. Безопасный режим. В этом режиме вы не можете снимать модификационные флаги с файлов (даже от имени суперпользователя – root), смонтированные дисковые устройства, а также /dev/mem /dev/kmem не могут быть открыты для записи. Также нельзя подгружать/выгружать модули ядра.  2. Повышенная безопасность. В дополнение к предыдущим требованиям запрещена прямая запись на диски, независимо от того, смонтированы они или нет.  3. Режим безопасности сети. Режим повышенной безопасности плюс нельзя изменять правила firewall. Какой режим поставить – выбирать вам (у меня стоит второй). Вам не нужно перекомпилировать код ядра каждый раз для добавления новых функций, достаточно подгрузить необходимый модуль ядра. Например, для работы стека bluetooth используется модуль ng_ubt. При захвате системы хакер скорее всего попытается подгрузить новый модуль для того, чтобы скрыть свое нахождение в системе, но если устновить второй или третий режим безопасности, то для загрузки модуля придется перезагружать систему, что вряд ли не останется незамеченным.

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

52

на crypt_default=blf

После этого в /etc/master.passwd все пароли будут начинаться с $2, что указывает системе на использование хешей по алгоритму blf. Теперь пользователям, которым не разрешено иметь интерактивный шелл, в систему нужно поставить: shell: /sbin/nologin

Этот шелл дает два преимущества:

 При попытке регистрации пользователя в системе /sbin/nologin возращает ответ о том, что регистрация пользователя в системе невозможна.  Попытка входа записывается в логи. После этого нужно разобраться в правах к некоторым системным файлам и директориям: # chmod 0600 /etc/login.conf /etc/syslog.conf ↵ /etc/newsyslog.conf /etc/rc.conf /etc/hosts.allow # chmod 0700 /root/

Настройка программного обеспечения Для начала обновим систему. В первую очередь – исходники, потом – коллекцию портов. Для обновления системы будем использовать cvsup. Редактируем supfile: *default *default *default *default *default

host=cvsup5.ru.FreeBSD.org base=/usr prefix=/usr release=cvs tag=RELENG_6_0 delete use-rel-suffix

*default compress src-base src-bin src-contrib src-etc src-gnu src-include


безопаснсоть src-kerberos5 src-kerberosIV src-lib src-libexec src-release src-sbin src-share src-sys src-tools src-usrbin src-usrsbin src-crypto src-secure src-sys-crypto

Таг RELENG_6_0 используется для исправлений исходного кода системы для увеличения безопасности. Теперь непосредственно запускаем cvsup: # cvsup -g -L 2 /usr/local/etc/supfile

Обновления можно взять с cvsup5.ru.FreeBSD.org (параметр host в supfile), причем скачиваются только обновленные файлы, а не все целиком, отсюда такое маленькое потребление трафика. Точно сказать нельзя, сколько придется скачать, все зависит от количества исправлений, но точно менее 10 Mб. Теперь смотрим, если уязвимость обнаружена в ядре, то придется его пересобрать. Если в системной утилите, то пересобирать следует только программу. Обновление коллекции портов удобнее делать с помощью программы portsnap, которая теперь является частью системы. Пользоваться ей намного проще, чем cvsup: При первом запуске:

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 # Доступ к WWW pass 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 # Разрешаем обращаться на Web pass out on $prov_if inet proto tcp from ↵ $prov_if to any port www keep state # На ftp pass out on $prov_if inet proto tcp from ↵ $prov_if to any port ftp keep state # На ssh pass out on $prov_if inet proto tcp from ↵ $prov_if to any port ssh keep state # Разрешаем запросы к DNS pass out on $prov_if inet proto udp from ↵ $prov_if to any port 53 keep state

# portsnap fetch # portsnap extract # portsnap update

# in packs on int_if

При последующих запусках:

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

# portsnap fetch # portsnap update

Portsnap только в первый раз скачивает всю коллекцию портов(~38 Mб), потом же качаются только обновленные файлы.

Настройка pf На любом компьютере, подключенном к сети, обязательно должен стоять firewall. Причем он должен быть корректно настроен. Я приведу несколько простых правил, которые позволят фильтровать входящие соединения: 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-серверу в DMZ rdr on $prov_if proto tcp from any ↵

№6, июнь 2006

# Блокируем все входящие соединения block in on $int_if from $internal_net to $me

# 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

При составлении правил главная идея такова: запрещаем все, а потом разрешаем только то, что нужно. Теперь переходим к настройке безопасного доступа к серверу OpenSSH. Раньше терминальный доступ к серверу обычно был предоставлен только telnet-сервером, но его сменил безопасный ssh-сервер. Но при настройках по умолчанию – это хорошая мишень для хакера. Итак, при настройке ssh-сервера, мы поступим так: составим два конфигурационных файла специально для двух сетей:  локальная сеть;  Интернет. В локальной сети мы разрешим авторизацию по паролю, а из Интернета разрешим авторизацию только по ключам, что не позволит подобрать пароль.

53


безопасность # sshd_config_1 (Локальная сеть): Port 22 Protocol 2 ListenAddress 172.16.0.1 PermitRootLogin no PasswordAuthentication yes MaxStartups 2:90:5 AllowGroups ssh Banner /etc/motd Subsystem sftp /usr/libexec/sftp-server # sshd_config_2 (Интернет): AllowGroups ssh Banner /etc/motd ListenAddress 213.251.193.69 LogLevel VERBOSE MaxStartups 2:90:5 PasswordAuthentication no PermitRootLogin no Port 22 Protocol 2 Subsystem sftp /usr/libexec/sftp-server SyslogFacility AUTH

Это опять же минимальные настройки, об остальных можно прочитать, например, в руководстве (man sshd_config). Также изменим /etc/motd: ********************************************************* This is a private system!!! All connection attempts are logged and monitored. All unauthorized connection attempts will be investigated and handed over to the proper authorities. *********************************************************

Так как мы указали, что из Интернета можно аутентифицироваться только по ключам, то придется эти самые ключики сгенерировать: $ ssh-keygen -t rsa -b 4096 $ cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

Так как сервер выполняет роль шлюза, то на нем редко будут меняться системные файлы, следовательно, можно настроить аудит системных файлов. В данной области самой распространенной из бесплатных систем является tripwire: # cd /usr/ports/security/tripwire # make install clean

После установки база файлов начнет создаваться автоматически, желательно посмотреть, каких файлов она не нашел. После этого редактируем файл политик /usr/local/ etc/tripwire/twpol.txt. Изменять нужно две вещи:  Так как мы хотим получать отчеты по email, то после каждой строки severity нужно дописывать строку: emailto = qw@er.ty.  Нужно закомментировать строки с файлами, которых у вас в системе нет. После этого нужно создать файл политик: # twadmin --create-polfile twpol.txt

Теперь осталось инициализировать tripwire: # tripwire --init

Проверку файлов можно осуществлять следующим образом: # tripwire --check

Желательно прописать запуск tripwire в cron. Теперь установим еще одну полезную утилиту chkrootkit, которая будет проверять наличие известных ей rootkit в системе:

Теперь нужно «спрятать» id_rsa в надежное место и можно логиниться с помощью этого ключа, предупреждаю, что для putty придется генерировать ключи специальной утилитой – puttygen.

# cd /usr/ports/security/chkrootkit/ # make install clean

Отчеты системы

# chkrootkit | mail root

Последний фактор – человеческий. Сейчас мы постараемся сделать отчеты о работе системы как можно более подробными. Так как у нас в системе практически все ПО установлено из портов, то было бы неплохо проверять уязвимость портов. Для этого будем использовать специальную утилиту portaudit: # cd /usr/ports/security/portaudit # make install clean

Настраивать ее не нужно, для проверки установленных пакетов достаточно выполнить: # /usr/local/sbin/portaudit -Fda

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

54

Проверить систему можно так:

Таким образом, отчет о проверке по почте придет к администратору. Также советую прописать эту строку в cron. Единственная проблема, связанная с chkrootkit, заключается в том, что программа написана на sh и как следствие может быть «переписана» взломщиком, поэтому желательно добавить проверку chkrootkit в tripwire.

Заключение Таким способом мы улучшили безопасность системы в несколько раз:  Установлен и настроен firewall.  Настроен безопасный доступ к системе (OpenSSH).  Увеличено количество информации, поступаемой от системы. Остальное дело за вами: следить за уязвимостями, вовремя обновлять систему и софт, установленный в ней, следить за отчетами безопасности и всегда быть на страже.



безопасность

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

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

56


безопасность Что собираемся защищать

формирующих о попытках несанкционированного доступа Серверные журналы, проще говоря протоколы, содержат с определенного IP-адреса, по протоколу ssh в iptables дов себе информацию о различных событиях, происходящих бавляется строка, блокирующая получение пакетов с данв системе. Например, информацию об ошибках приложе- ного адреса. Список заблокированных IP-адресов автор ний или о попытках несанкционированного проникновения предлагает передавать в сообщениях syslog. в сеть. Автоматизация «реакции» на эти сообщения являетОбратите внимание на то, что перед запуском сценария ся важным элементом в обеспечении бесперебойного фун- необходимо создать iptables chain Block и поместить текукционирования всей сети. Конечно, каждый администратор, щую конфигурацию iptables в файл /etc/sysconfig/iptables. придя на работу, первым делом должен проверить прото- Тут следует сразу отметить, что пример сценария (см. лисколы своих серверов, не произошло ли что-нибудь в тече- тинг 1) ориентирован на использование в дистрибутивах ние ночи или за выходные, и в случае необходимости при- Fedora/Red Hat. Для применения с другими дистрибутинять соответствующие меры. вами Linux необходимо будет произвести небольшие изОднако иногда такая реакция может оказаться запозда- менения. лой, особенно это касается попыток осуществления несанЛистинг 1. Сценарий, блокирующий атаки на ssh кционированного входа в систему. Если какие-либо ресурсы вашей сети (например, электронная почта, веб-сервер #!/usr/bin/perl -w use Sys::Syslog; # модуль для работы с syslog или доступ по протоколу SSH) опубликованы в Интернете, $max=10; # максимально разрешенное число попыток то вам наверняка приходилось наблюдать записи в протоко# файл журнала, с которым мы и работаем лах, свидетельствующие о попытке осуществления несанк$watchfile= '/var/log/messages'; ционированного доступа к ресурсам сети. Конечно, это по# путь к iptables (для разных дистрибутивов Linux пытки взлома с помощью «грубой силы» (brute force, подбор # он может различаться) пароля по словарю), такой способ, как правило, не приносит $iptables= '/sbin/iptables'; результата. Хотя иногда начинающие хакеры с упорством, # тоже iptables, но после сохранения изменений достойным лучшего применения, «натравливают» слова$iptables_save= '/sbin/iptables-save'; ри на учетную запись root. # исходные значения iptables Но тут следует заметить, что зачастую наш потенциаль$iptables_restore= '/sbin/iptables-restore'; ный противник охотится вовсе не за паролем к учетной за# файл конфигураций iptables писи пользователя, а, к примеру, ему необходимо опреде$cfgfile= '/etc/sysconfig/iptables'; лить существует ли пользователь с таким именем на серopen(LFILE, "<$watchfile"); # открываем лог на чтение вере или нет. Такая информация будет весьма полезна %tries=(); # количество попыток для IP для спамеров. Ведь на очень многих почтовых серверах %blocked=(); # уже заблокированных IP имя пользователя совпадает с именем почтового ящика, # восстанавливаем конфигурацию, это нужно для того, точнее, с той его частью, которая идет до знака @ (напри# чтобы «устаревшие» IP-адреса не оставались запрещенными мер, user@mydomain.ru), а база корпоративных электрон`$iptables_restore < $cfgfile`; ных адресов стоит дороже чем база адресов с бесплатных # получаем уже заблокированные IP-адреса из iptables почтовых серверов. Для того чтобы избежать подобного роopen(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)); средство, которое могло бы обнаруживать и адекватно ре# отправляем сообщение syslog агировать на попытки подбора логинов/паролей к ресурsyslog('warning',"sshwatch.pl started. ↵ currently blocked ip's are: $blk_ips"); сам нашей сети. Существует масса решений, как программных, так и ап# просматриваем /var/log/messages while (1) { паратных, получивших название Intrusion Detection System, for ($curpos = tell(LFILE); $_ = <LFILE>; ↵ IDS, системы обнаружения вторжения, которые позволяют $curpos = tell(LFILE)) { # искомая строка выполнить данную задачу. Но зачастую они либо слишком if (/sshd\[\d+\]: Failed password for .+ ↵ громоздки в управлении, либо слишком дорого стоят. from \D+(\d+\.\d+\.\d+\.\d+)/) { $ip=$1; Попробуем самостоятельно разработать простейшую next if defined($blocked{$ip}); IDS. В качестве инструментов будем использовать сцена$tries{$ip}+=1; #увеличиваем счетчик if ($tries{$ip} eq $max){ рии Perl под ОС Linux.

Как собираемся защищать В качестве основы для реализации я использовал сценарий, находящийся на cpan.org [1]. Идея довольно проста: через определенные промежутки времени сканируется файл /var/log/messages. В случае обнаружения сообщений, ин-

№6, июнь 2006

}

# если превышено максимальное значение, # пакеты с данного адреса должны быть заблокированы `$iptables -I block -s $ip -j DROP ; ↵ $iptables_save > $cfgfile`; $blocked{$ip}=1; # снова сообщение syslog syslog('warning', "IP $ip has been blocked !"); }

57


безопасность

}

} sleep 1; seek(LFILE, $curpos, 0);

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

Расширяем функциональность Попробуем расширить функциональность сценария, написанного нашим коллегой. Во-первых, допустим, у нас открыты наружу не только ssh, но и, к примеру, POP3. И во-вторых, рассмотрим различные варианты построения сети: как с использованием демилитаризованной зоны (DMZ), так и без нее. Суть DMZ заключается в том, что она не входит непосредственно ни во внутреннюю, ни во внешнюю сеть и доступ к ней может осуществляться только по заранее заданным правилам межсетевого экрана. В DMZ нет пользователей – там располагаются только серверы. Демилитаризованная зона, как правило, служит для предотвращения доступа из внешней сети к хостам внутренней сети за счет выноса из локальной сети в особую зону всех сервисов, требующих доступа извне. Фактически получается, что эта зона будет являться отдельной подсетью с публичными адресами, защищенной (или отделенной) от публичных и корпоративных сетей межсетевыми экранами. При попытке получения доступа к почтовому ящику по протоколу POP3, в случае неверного указания логина/ пароля получаем сообщение: Apr 22 21:25:24 MexBSD qpopper[782]: [AUTH] Failed attempted login to admin from host (TestBSD) 172.29.1.19

Здесь в качестве POP3-демона использовался qpopper, но и для других серверов вид сообщения будет аналогичен. По поводу топологии сети будем предполагать, что у нас имеется единственный сервер и необходимо блокировать пакеты, непосредственно приходящие на него. Также сценарий, предназначенный для защиты от подбора протокола POP3, применялся на FreeBSD, поэтому вместо iptables воспользуемся утилитой ipfw, с помощью кото-

рой создаются правила фильтрации. Для запрета доступа у ipfw существуют директивы deny и reject. Директива deny сводит к минимуму риск определенных атак типа «отказ в обслуживании» и усложняет взломщику задачу сканирования системы. В то же время директива reject позволяет скрыть факт наличия брандмауэра, так как она заставляет систему вернуть отправителю сообщение о том, что хост или порт недоступен (как если бы маршрутизатор не смог найти хост или на нем отсутствует приложение, контролирующее заданный порт). В нашем случае предпочтительнее будет указать директиву deny, потому что она заставляет систему игнорировать пакет, чтобы отправитель думал, будто пакет потерялся или хост-адресат выключен. Я бы еще добавил, что такая реакция сильно замедляет автоматическое сканирование. Например, команда, добавляющая правило, которое запрещает доступ к нашему серверу 172.29.1.1 для атакующего хоста 172.29.1.19, будет выглядеть следующим образом: ipfw add deny ip from 172.29.1.19 to 172.29.1.1

В отсутствии явно указанного индекса (положения правила в списке), который присваивается каждому правилу, он будет присвоен автоматически, причем значение этого индекса будет на 100 больше чем номер самого последнего правила, за исключением правила по умолчанию (имеет номер 65535). Не забудьте проверить список настроек ipfw с помощью команды «ipfw list». Это необходимо для того, чтобы ваше запрещающее правило не лишилось смысла из-за стоящего перед ним уже есть разрешающего. В случае если у вас уже используются разрешающие правила для данного трафика, проследите за тем, чтобы запрет оказался выше по списку. Можно, конечно, ограничиться только запретом tcp, но лучше, чтобы все выглядело, как будто сервер не просто недоступен, а выключен. Такого результата легче добиться, запретив любой IP-трафик. Вообще утилита ipfw обладает довольно большими возможностями, подробно ознакомиться с которыми можно в справочнике [2]. Итак, мы определились с тем, какие записи в журнале событий нам необходимо просматривать и как на них реагировать. Для разнообразия будем список заблокированных IP-адресов с указанием времени блокирования отправлять на почту системному администратору. Хотелось бы сразу предупредить, что этих писем будет довольно много и поэтому необходимо заранее создать в почтовом клиенте соответствующую папку и правило для перенаправления писем. Листинг 2. Сценарий, блокирующий атаки на POP3 #!/usr/bin/perl -w use Mail::Sendmail; # максимально разрешенное число попыток $max=10;

Рисунок 1. Размещение серверов в DMZ

58

# файл журнала, с которым мы и работаем $watchfile= '/var/log/messages';


безопасность $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-адреса из iptables open(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/messages while (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 => 'admin@test.local', From => 'firewall@test.local', Message => "IP $ip has been blocked !", SMTP => 'smtp.mail.ru' ); sendmail(%mail) or die $Mail::Sendmail::error; }

}

}

} sleep 1; seek(LFILE, $curpos, 0);

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

Защита по периметру Мы рассмотрели упрощенный случай топологии сети, когда у нас имеется сервер, не защищенный какими-либо дополнительными аппаратными брандмауэрами, и единственной защитой для него являются те средства, которые на нем установлены. Но очень часто сеть имеет более сложную структуру. Ресурсы, доступ к которым необходим как из внутренней сети, так и из Интернета, помещают в демилитаризованную зону. Примерная топология сети на рис. 1. Рассмотрим случай, когда наш почтовый сервер находит-

№6, июнь 2006

ся в этой DMZ. Как уже упоминалось, к нему есть доступ из глобальной сети. При такой топологии лучше всего отсекать трафик атакующего еще на брандмауэре. Будем предполагать, что в качестве межсетевого экрана у нас используется оборудование Cisco, тогда для осуществления блокирования нам необходимо воспользоваться командами Cisco IOS. Приведем необходимый набор команд для доступа к консоли и изменения списка доступа. Приводить здесь команды для настройки NAT и связи с ACL я не буду, так как это не является темой статьи, и предполагаю, что у вас уже всё настроено и нормально функционирует. Приведу лишь те команды, которые необходимо будет передавать с помощью Perl-сценария. В моем примере использовался скромный PIX 501, однако для других моделей существенных различий не будет. login as: user Sent username "user" user@1.1.1.1's password: Secure Access Type help or '?' for a list of available commands.

ipfw add deny ip from 172.29.1.19 to 172.29.1.1

Password: ********

pixfirewall# configure terminal

Так как если в список доступа просто добавить запись, то она будет поставлена в конец, а в нашем случае это запрещающая запись, то соответственно ее добавление будет бессмысленно и не приведет к желаемому результату. Поэтому нам необходимо сначала убрать старый список доступа, а потом уже прописать новый. Естественно, что кроме наших записей, запрещающих трафик с определенных узлов там должны быть еще другие записи, обеспечивающие нормальный доступ к ресурсам сети. В нашем случае необходимо лишь заблокировать трафик с конкретного хоста (2.2.2.2). Запись, которая осуществляет данные действия, мы разместим в начале нашего нового ACL. Реализовать все эти действия можно следующим образом: pixfirewall(config)# no access-list 110 pixfirewall(config)# access-list 110 deny ip host 2.2.2.2 ↵ host 1.1.1.254 pixfirewall(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 mem pixfirewall# logout

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

59


безопасность use Net::Telnet (); use Mail::Sendmail; #!/usr/bin/perl -w use 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/messages while (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 => 'admin@test.local', From => 'firewall@test.local', 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):.*$/')

60

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;

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

Автоматизируем запуск После написания сценария нам необходимо автоматизировать его работу. Сделаем это с помощью cron. По поводу работы с данной утилитой и ее синтаксиса написано уже достаточно, поэтому приведу лишь несколько примеров. Прежде всего рекомендовую не запускать сценарий слишком часто, по крайней мере не каждые пять минут. Это связано с тем, что на активно работающем сервере, как правило, файл messages имеет весьма внушительный размер, и поиск текстовых вхождений может существенно нагрузить систему. К тому же слишком частые обращения к консоли сетевого оборудования тоже не очень желательны. Я бы рекомендовал запуск сценария каждый час. Задать выполнение сценария по такому расписанию можно следующим образом: @hourly /tmp/pop3watch.pl

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

Использованные источники: 1. http://cpan.org/authors/id/D/DR/DRAGOS/sshwatch-0.01.pl – исходный сценарий. 2. Родерик Смит. Полный справочник по FreeBSD. 3. Основы организации сетей Cisco. Справочное руководство.


bugtraq Переполнение буфера и раскрытие данных в 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) с сайта производителя.

SQL-инъекция в PostgreSQL Программа: PostgreSQL, ветки 7.3, 7.4, 8.0 и 8.1. Опасность: Средняя. Описание: Уязвимость существует при обработке SQLстрок, содержащих мультибайтные символы. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольные SQL-команды в базе данных приложения. URL производителя: www.postgresql.org. Решение: Установите исправление с сайта производителя.

Переполнение буфера в Novell eDirectory Программа: Novell eDirectory 8.8. Опасность: Средняя. Описание: Уязвимость существует из-за неизвестной ошибки в iMonitor. Подробности уязвимости неизвестны. URL производителя: www.novell.com/products/edirectory. Решение: Установите исправление с сайта производителя.

Целочисленное переполнение буфера в FreeType Программа: FreeType 2.2, возможно, более ранние версии. Опасность: Средняя. Описание: Целочисленное переполнение буфера существует из-за ошибки в функции read_lwfn() файла src/base/ ftmac.c. Удаленный пользователь может вызвать переполнение динамической памяти с помощью специально сформированного LWFN-файла и выполнить произвольный код на целевой системе. URL производителя: www.freetype.org. Решение: Установите последнюю версию (2.2.1) с сайта производителя.

Обход ограничений безопасности в IBM WebSphere Application Server

Программа: IBM WebSphere Application Server 6.0.2, версии до Fix Pack 3. Опасность: Средняя. Описание: Уязвимость существует из-за отсутствия необходимого ограничения на доступ к страницам приветствия. Удаленный пользователь может с помощью специально сформированного запроса получить доступ к защищенным страницам приветствия приложения. Пример: Отказ в обслуживании в SCTP Netfilter 1. http://ServerHost/webapp_context/homepage.jsp – будет в ядре Linux запрошен пароль на доступ к странице. Программа: Linux kernel, версии до 2.6.16.13. 2. http://ServerHost/webapp_context/ – удаленный польОпасность: Средняя. Описание: Уязвимость существует из-за отсутствия прозователь получит доступ к запрещенной странице homepage.jsp. верки размера SCTP в коде SCTP-netfilter. Удаленный пользователь может вызвать зацикливание приложения и пот- URL производителя: www-306.ibm.com/software/webservers/ appserv/was. ребить все доступные ресурсы на системе. Решение: Установите последнюю версию 6.0.2 Fix pack 3 URL производителя: www.kernel.org. Решение: Установите последнюю версию ядра (2.6.16.13) (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. Решение: Установите исправление с сайта производителя.

№6, июнь 2006

Обход аутентификации в Sun Java System Directory Server Программа: Sun Java System Directory Server 5.2. Опасность: Средняя. Описание: Уязвимость существует из-за неизвестной ошибки в процессе инсталляции. Удаленный пользователь может получить административный доступ к приложению. URL производителя: www.sun.com. Решение: Следуйте инструкциям производителя.

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

61


безопасность

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

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

П

ротекторы типа Themida (в «девичестве» eXtreme Protector) и Star-Force, которыми защищены многие популярные программы, очень глубоко «вгрызаются» в операционную систему, что снижает производительность и порождает частные BSOD. Их «коллеги» ведут себя не так агрессивно, но проблем с совместимостью все равно хватает, особенно при переходе на 64-разрядные операционные системы или многоядер-

62

ные процессоры, значительно отлича- чем. А ведь приходится! Как странно ющиеся от тех, под которые проекти- устроен мир. ровалась защита, активно использующая недокументированные возмож- Простые случаи дампинга ности. Уж сколько раз твердили миру – Представим себе, что распаковщик не используйте ничего недокументиро- уже отработал, программа остановлеванного в коммерческих приложени- на в оригинальной точке входа (OEP) ях, да только все не впрок! Вот и при- и мы готовы сохранить образ файла ходится браться за хакерский инстру- (file image) на диск, то есть сбросить ментарий и освобождаться от протек- дамп. Отладчик soft-ice не предоставторов, даже когда программа куплена ляет такой возможности, поэтому прилегальным путем и «ломать» ее неза- ходится действовать обходным путем..


безопасность Но для начала необходимо выяснить, какой именно регион памяти необходимо сохранять. При условии, что защита не предпринимает никаких враждебных действий, нужная информация может быть добыта командами MOD и MAP32 (см. рис. 1 и листинг 1). Листинг 1. Определение дислокации модуля в памяти. Здесь «test_dump» — имя процесса, с которого мы собираемся снять дамп (soft-ice отображает его в правом нижнем углу) # определяем базовый адрес загрузки модуля в память :MOD test_dump hMod Base 00400000

PEHeader 004000D0

Module Name test_dum

File Name \TEMP\test_dump.exe

# смотрим на карту модуля в памяти :MAP32 test_dump Owner test_dump test_dump test_dump

Obj Name text rdata .data

Obj# 0001 0002 0003

Address 001B:00401000 0023:00405000 0023:00406000

Size 00003B46 0000080E 00001DE8

Type CODE RO IDATA RO IDATA RW

Базовый адрес загрузки (hMod base) располагается по адресу 400000h. Последняя секция (.data) начинается с адреса 406000h и продолжается вплоть до адреса (406000h + 1DE8h) == 407DE8h. Таким образом, нам необходимо сохранить 7DE8h байт памяти, начиная с 400000h. Но в soft-ice такой команды нет! Зато есть «история команд». Даем команду «DB 400000 L 7DE8», выходим из отладчика, запускаем symbol loader и «говорим»: «file → save softice history as» (при этом размер самой истории должен быть предварительно увеличен хотя бы до 30 МБ: «edit → soft-ice initialization setting → history buffer size»). В результате образуется текстовый файл (см. листинг 2), который необходимо преобразовать в exe, для чего потребуется написать специальную утилиту или поискать уже готовую.

Рисунок 1. Определение региона памяти для снятия дампа

Листинг 2. Дамп памяти, снятый через history :db 400000 L 7DE8 010:00400000 010:00400010 010:00400040 010:00400050 010:00400060 010:00400070

4D B8 0E 69 74 6D

5A 00 1F 73 20 6F

90 00 BA 20 62 64

00 00 0E 70 65 65

03 00 00 72 20 2E

00 00 B4 6F 72 0D

00 00 09 67 75 0D

00-04 00-40 CD-21 72-61 6E-20 0A-24

00 00 B8 6D 69 00

00 00 01 20 6E 00

00 00 4C 63 20 00

FF 00 CD 61 44 00

FF 00 21 6E 4F 00

00 00 54 6E 53 00

00 00 68 6F 20 00

MZР............. ........@....... ........!..L.!Th is program canno t be run in DOS mode....$.......

Как вариант, можно воспользоваться бесплатным плагином IceExt (http://stenri.pisem.net), значительно расширяющим функциональные возможности soft-ice. Если IceExt откажется запускаться, увеличьте размер кучи и стека до 8000h байт, отредактировав следующую ветвь реестра HKLM\SYSTEM\CurrentControlSet\Services\NTice. Команда !DUMP (см. рис. 2 и листинг 3) позволяет сохранять блоки памяти на диск в двоичном виде, что очень удобно: Листинг 3. Дамп памяти, снятый командой !DUMP плагина IceExt :!DUMP

Dump memory to disk !dump FileName Addr Len Ex: !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

№6, июнь 2006

Рисунок 2. Снятие дампа в soft-ice с помощью плагина IceExt

Другой плагин — 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,

63


безопасность

Рисунок 3. Снятие дампа в OllyDbg с помощью плагина OllyDump

затем появился 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, снимать

64

дамп и восстанавливать оригинальные байты в любом hex-редакторе. Обыкновенные упаковщики (типа UPX) не сопротивляются снятию дампа, поскольку борьба с хакерами в их задачу не входит. Иное дело – протекторы. Фактически это те же самые упаковщики, но снабженные целым арсеналом систем, противодействующих взлому. Защитные методики можно разделить на активные и пассивные. К пассивным относятся все те, что работают только на стадии распаковки и не вмешиваются ни в саму программу, ни в операционную систему. Активные – перехватывают API-функции внутри адресного пространства защищаемого процесса или даже устанавливают специальный драйвер, модифицирующий ядро операционной системы таким образом, что прямое снятие дампа становится невозможным. Очевидным побочным эффектом активных защит ставится их неуживчивость с новыми версиями Windows, зачастую приводящая к краху операционной системы. Печальнее всего то, что, запуская setup.exe, мы даже и не подозреваем, что там может оказаться, да и далеко не все протекторы поддерживают корректурную деинсталляцию...

В поисках самого себя Снятие дампа начинается с определения региона памяти, принадлежащего исполняемому файлу (или динамической библиотеке). Приемы, описан-

ные выше, всецело опираются на PEзаголовок и таблицу секций, используемую операционной системой практически только на стадии загрузки файла. В частности, нас интересуют поля ImageBase (адрес базовой загрузки), SizeOfImage (размер образа) и содержимое таблицы секций. Протекторы любят затирать эти поля после завершения распаковки или подсовывать заведомо некорректные значения. Дамперы первого поколения от этого «сходили с ума», но PE-TOOLS в большинстве случаев восстанавливает недостающую информацию самостоятельно, но иногда он все-таки не срабатывает. И что тогда? Самое простое – исследовать карту памяти подопытного процесса, возвращаемую API-функциями VirtualQuery/ VirtualQueryEx. Регионы, помеченные как MEM_IMAGE, принадлежат исполняемому файлу или одной из используемых им DLL (в PE-TOOLS за построение карты отвечает команда «dump region» (см. рис. 5)). Активные защиты могут перехватывать эти функции, подсовывая подложные данные, и тогда приходится спускаться на один уровень вглубь, обращаясь к функции NtQueryVirtualMemory, которая, как и следует из ее названия, существует только в NT-подобных операционных системах и экспортируется библиотекой NTDLL.DLL, но в некоторых случаях перехватывается и она, вынуждая нас обращаться к функции NtQu erySystemInformation. Долгое время она оставалась совершенно недокументированной и многие протекторы о существовании подобной лазейки даже и не подозревали. Теперь же ее описание доступно на MSDN: http://msdn.microsoft. com/library/default.asp?url=/library/en-us/ sysinfo/base/ntquerysysteminformation. asp, c грозным предупреждением, что поведение функции может измениться в любой новой версии, а потому в долгосрочных продуктах на нее лучше не закладываться. В самом крайнем случае (когда перехвачена и NtQuerySystemInform ation) приходится прибегать к последовательному разбору структур данных, относящихся к памяти процесса (soft-ice именно так и поступает), однако гораздо проще и надежнее просто скопировать кусок адресного пространства. Если образ не был переме-


безопасность щен, базовый адрес загрузки тот же самый, что и в 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. Однако эти функ-

№6, июнь 2006

Рисунок 4. Внешний вид утилиты PE-TOOLS

Рисунок 5. Просмотр карты памяти в PE-TOOLS

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

65


безопасность емых Microsoft. Для работы с ними понадобится библио- Механизмы динамической расшифровки тека dbghelp.dll из комплекта Debugging Tools (http://www. Алгоритм динамической расшифровки, реализованный microsoft.com/whdc/devtools/debugging/default.mspx) и ути- в протекторе Armadillo и известный под именем CopyMem, в общих чертах выглядит так: защита порождает отлалита symchk.exe, взятая оттуда же. Функция KiSwapProcess – это одна из самых низкоуров- дочный процесс, передавая функции CreateProcess в каневых функций, напрямую работающих с регистром CR3, честве имени нулевой аргумент командной строки, «блав который заносится указатель на каталог страниц выбран- годаря» чему в диспетчере задач отображаются две коного процесса, после этого его адресное пространство пии запущенной программы. Одна из них – сервер (усможно читать как свое собственное машинной командой ловно), другая – клиент. Сервер посредством функции MOVSD, в грубом приближении представляющий собой VirtualProtectEx делает все страницы клиента недоступаналог memcpy. Предвидя такой исход событий, некоторые ными (атрибут PAGE_NOACCESS) и передает ему управзащиты пошли на отчаянный шаг: перехватив SwapContext ление, ожидая отладочных событий с помощью функции и ряд других функций, работающих с CR3, они стали раз- WaitForDebugEvent, а события долго ждать себя не заставрушать каталог страниц «своего» процесса на время пере- ляют и при первой же попытке выполнения кода в недоключения контекстов и вновь восстанавливать его, когда ступной странице возбуждается исключение, передающее в нем возникает необходимость. Настоящее варварство! серверу бразды правления. Сервер расшифровывает текуОбращение к каталогу страниц происходит из десятков не- щую страницу, взаимодействуя с клиентом посредством документированных функций, которые в каждой версии яд- API-функций ReadProcessMemory/WriteProcessMemory, усра реализованы по своему. А это значит, что такая агрес- танавливает необходимые атрибуты доступа и возвращасивная защитная политика рискует «свалиться» в сплош- ет клиенту управление. Остальные страницы остаются зашифрованными, и при ной BSOD, не оставляющий пользователю никаких шансов обращении к ним вновь возбуждается исключение, котодля нормальной работы! Но это еще не самое страшное. Все больше и больше рое передается серверу через WaitForDedugEvent. Сервер протекторов переходят на динамическую распаковку, рас- зашифровывает предыдущую страницу, отбирая все атришифровывая страницы по мере обращения к ним, а затем буты доступа, какие у нее только есть, и расшифровывает зашифровывая их вновь. Даже если мы пробьемся сквозь текущую страницу, возбудившую исключение (в действизащиту и дорвемся до процесса, дампить будет нечего... тельности для увеличения производительности защита подвернее, полученный дамп будет практически на 99% за- держивает примитивный кэш, позволяя клиенту иметь нешифрован. сколько расшифрованных страниц одновременно).

«Нечестные» защитные приемы Нормальные упаковщики (UPX, PKLITE, PECOMPACT) сжимают исполняемый файл без потерь, и после завершения распаковки он возвращается к своему первоначальному виду, что делает процесс снятия дампа тривиальной задачей. Протекторы в стремлении усилить защиту зачастую идут на довольно рискованный шаг – они слегка «корежат» обрабатываемый файл с таким расчетом, чтобы он мог работать только под протектором, а после освобождения от него становится нежизнеспособным. Наиболее популярные способы подобной «нечестной» защиты рассмотрены ниже. Кража байт с OEP. Самая простая и широко распространенная подлянка, используемая даже в таких безобидных протекторах как, например, ASProtect. Суть ее заключается в том, что упаковщик «крадет» несколько инструкций из оригинальной точки входа, сохраняет их в потайном месте (возможно, в замаскированном или зашифрованном виде), а после завершения распаковки эмулирует выполнение краденых байт. Чаще всего для этой цели используется стек (тогда краденые байты обычно становятся операндами инструкций PUSH),

66

реже – прямое воздействие на регистры и память (при этом краденые инструкции трансформируются в псевдокод и в явном виде нигде не сохраняются). Суть в том, что в точке входа распакованного образа оригинальных байт уже не оказывается и снятый дамп становится неработоспособным. К нашему счастью, подавляющее большинство программ начинается со стартового кода, который является частью библиотеки времени исполнения (RTL), поставляемой вместе с компиляторами. Используя оставшийся «хвост» стартового кода, мы легко отождествим компилятор и восстановим краденые байты из его библиотеки. Если же данного компилятора в нашем распоряжении не окажется, первые несколько байт стартового кода в 9 из 10 случаев вполне предсказуемы, и зачастую их удается восстановить самостоятельно (естественно, для этого необходимо иметь опыт работы с различными RTL). Кстати, IDA Pro распознает компилятор именно по первым байтам стартового кода, и, если они отсутствуют или искажены, механизм FLIRT работать не будет. Это значит, что мы останемся без имен библиотечных функций и процесс дизассемблирования займет намного больше времени.

Полиморфный мусор в OEP. Вместо того чтобы красть байты с OEP, некоторые протекторы предпочитают модифицировать стартовый код, разбавляя значимые инструкции бессмысленным полиморфным мусором. Это никак не влияет на работоспособность снятого дампа, но ослепляет «FLIRT», вынуждая нас либо вычищать полиморфный мусор, либо определять версию компилятора «на глазок», загружая сигнатуры вручную (IDA Pro это позволяет). Переходники в таблице импорта к куче. Протектор Themida использует следующий прием, серьезно затрудняющий восстановление таблицы импорта. Непосредственные адреса API-функций заменяются переходниками на область памяти, выделенную VirtualAlloc (т.е. кучу), которая по умолчанию в дамп не попадает, поэтому восстанавливать импорт приходится вручную. Это несложно, но утомительно – ищем вызовы APIфункций, ведущие к куче (то, что это именно куча, а не что-то другое, можно определить по карте), дампим соответствующий регион памяти на диск, удаляем переходники, заменяя их действительными адресами, после чего запускаем Import Reconstructor или другую утилиту аналогичного назначения и... нет, это еще не все! Это только начало!


безопасность Потребность в отладочном процессе-сервере объясня- однако написание драйверов – занятие утомительное и совется тем, что по другому ловить исключения на прикладном сем небезопасное в плане «голубых экранов смерти». К тоуровне просто не получается. А как же механизм структур- му же разработчику защиты придется либо наотрез отказыных исключений или, сокращенно, SEH? Регистрируем свой ваться от поддержки 9x (которая все еще жива!), либо реалисобственный обработчик и ловим исключения, что называ- зовывать сразу два драйвера! Тем не менее защиты такого ется по месту возникновения. Это избавляет нас от API-вы- типа все-таки встречаются. Независимо от того, как происзовов, обеспечивающих межпроцессорное взаимодействие, ходит обработка исключения, сломать такую защиту очень которые элементарно перехватываются хакером. Увы! Ес- просто! Читаем первую страницу, дожидаемся завершения ли защищаемое приложение использует SEH (а подавля- расшифровки, сохраняем ее на диск, обращаемся к следующее большинство приложений его используют), наш об- ющей странице и... действуем так до тех пор, пока в наших работчик окажется перекрыт другим. Столкнувшись с «на- руках не окажется весь образ целиком. Стоит только внедшим» исключением, он попросту не будет знать, что с ним рить код дампера в адресное пространство защищенного делать, и с вероятностью, близкой к единице, просто завер- процесса… и протектору будет очень сложно отличить обшит приложение в аварийном режиме. ращения самой программы от обращений дампера. Теоретически установку нового обработчика легко отслеПоследние версии протектора Armadillo, недавно передить, установив аппаратную точку останова по доступу к па- именованного в Software Passport, реализуют намного более мяти на адрес FS:[00000000h]. Операционные системы се- надежный, хотя и чрезвычайно низко производительный мемейства NT позволяют прикладным приложениям манипули- ханизм трассирующей расшифровки, при котором весь код ровать с отладочными регистрами через контекст, причем от- программы зашифрован целиком. Сервер трассирует клиладочный регистр действует лишь в рамках «своего» процес- ента, расшифровывая по одной инструкции за раз (предыса, не мешая работать всем остальным, но 9x «забывает» со- дущая инструкция при этом зашифровывается). Снять дамп хранять отладочные регистры в контексте «своего» процесса, тупым обращением к памяти уже не получается, поскольку и они приобретают глобальный характер, воздействующий защиту интересуют только исключения, возникающие при исполнении. Все, что мы можем, это «вклиниться» между на все процессы! Так что в ней этот трюк не проходит. А вот другой способ: устанавливаем драйвер, пере- зашифрованным приложением и расшифровщиком, «колхватывающий исключения на уровне IDT и взаимодейст- лекционируя» расшифрованные инструкции, образующие вующий со своим процессом либо через DeviceIoControl, трассу потока выполнения. Поскольку, достичь 100% поклибо через NtReadVirtualMemory/NtWriteVirtualMemory/ рытия кода практически невозможно, полученный дамп буKeDeattachProcess/KeAttachProcess. Это вполне надежно, дет неполноценным, но тут есть один маленький нюанс. ПоПомимо создания переходников некоторые функции копируются протектором целиком! Подробнее об этом приеме можно прочитать в статье «Точки останова на win32 API и противодействие им» – раздел «Копирование API – функций целиком», которая находится на http://kpnc.opennet.ru/adt.zip. Замена jx с последующей эмуляцией. При «отвязке» программ от протектора Armadillo самое сложное – это восстановление оригинального кода программы. Защита дизассемблирует обрабатываемый файл, находит в нем условные и безусловные переходы, записывает поверх них команду INT 03h, а сам переход сохраняется в своей внутренней таблице переходов. Процесссервер перехватывает исключение, возбуждаемое инструкцией INT 03, «смотрит», откуда оно пришло, извлекает из таблицы соответствующий этому адресу переход и эмулирует его выполнение с помощью арифметических манипуляций с регистром флагов (то есть в явном виде переходы нигде не хранятся!). Вот три главных минуса такого решения: во-первых, нет никакой гарантии, что защита правильно дизассемблирует обрабатываемую программу и не спутает переход с другой командой; во-вторых, эмуляция требует времени, существенно снижая

№6, июнь 2006

производительность и, наконец, в-третьих, от взлома это все равно не спасает! Дизассемблировав эмулятор переходов (а дизассемблировать его несложно) и обнаружив таблицу переходов, хакер в считанные минуты напишет скрипт для 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 или свой собственный дизассемблер. Это очень трудоемкое занятие, отнимающее у исследователя кучу сил и времени, а ведь байт-код виртуальной машины в следующих версиях протектора может быть изменен и ранее написанный процессорный модуль/дизассемблер окажется непригодным. Это наиболее стойкая защита из всех, существующих на сегодняшний день, однако не стоит забывать о двух вещах: во-первых, если протектор становится популярным, а его новые версии выходят редко, создание процессорных модулей становится экономически оправданным и защиту начинают ломать все желающие, если же новые версии выходят чуть ли не ежедневно, то навряд ли у разработчика протектора будет достаточно времени для радикальной перестройки виртуальной машины и ему приходится ограничиваться мелкими изменениями байт-кода, которые выливаются в мелкие изменения процессорного модуля, и протектор продолжат ломать. Во-вторых, хакер может «отодрать» виртуальную машину от протектора, совершенно не вникая в тонкости интерпретации байт-кода, лишний раз подтверждая известный тезис: сломать можно все… со временем.

67


безопасность командная расшифровка не может использовать ни блоч- потока, обращаясь к SetThreadContext (действует на всех ные, ни контекстно-зависимые криптоалгоритмы, посколь- системах). Естественно, предыдущий EIP должен быть соку трассирующий расшифровщик никогда не знает наперед, хранен, а сам поток – остановлен. какая инструкция будет выполнена следующей. Остаются Постойте! Но ведь это мало чем отличается от обычтолько потоковые алгоритмы типа XOR или RC4, которые ного межпроцессорного взаимодействия ! Функции очень легко расшифровать – стоит только найти гамму, кото- NtAllocateVirtualMemory/NtSetContextThread/NtCreateThread рую протектор, несмотря ни на какие усилия, слишком глубо- любая защита перехватит со смаком! (Никакой ошибки тут ко запрятать все равно не сможет! Естественно, полностью нет, API-функция CreateRemote Thread в действительносавтоматизировать процесс снятия дампа в этом случае уже ти представляет собой «обертку» вокруг ядерной функне удастся и придется прибегнуть к дизассемблированию, ции NtCreateThread.) а быть может, даже к отладке. К счастью, подобные схемы Хорошо, вот другой классический путь. Помещаем дамзащиты не получили широкого распространения и навряд пер в DLL и прописываем ее в HKLM\Software\Microsoft\ ли получат его в обозримом будущем. Трассировка замед- Windows NT\CurrentVersion\Windows\AppInit_DLLs, в реляет скорость работы приложения в десятки раз, в резуль- зультате чего она будет отображаться на все процессы, катате чего оно становится неконкурентоспособным. кие только есть в системе, и перед передачей управления на очередной запускаемый процесс первой получит управление наша DLL! К сожалению, об этой ветке знают не тольДамп изнутри Снятие дампа через механизмы межпроцессорного взаимо- ко протекторы, но и другие программы (антивирусы, персодействия – это вчерашний день. Для борьбы с активными нальные брандмауэры) и следят за ней. Наша запись мозащитами хакеры внедряют код дампера непосредствен- жет быть удалена еще до того, как дампер приступит к рано в «подопытный» процесс, что позволяет обойти как пе- боте! Если же ему все-таки удастся получить управление, рехват API-функций, так и победить динамическую шиф- первое, что он должен сделать, – выделить себе блок паровку типа CopyMem. мяти внутри процесса, скопировать туда весь необходиКлассический способ внедрения кода реализуется так: мый код и вернуть ветку AppInit_DLLs в исходное состояоткрываем процесс функцией OpenProcess, выделяем блок ние. Поскольку дампер получает управление еще до того, памяти вызовом VirtualAllocEx, копируем код дампера через как защита начнет работать, она никак не сможет обнаруWriteProcessMemory, а затем либо создаем удаленный по- жить, что здесь кто-то уже побывал. Исключение составляют активные защиты резидентток функцией CreateRemoteThread (только на NT-подобных системах), либо изменяем регистр EIP в контексте чужого ного типа, постоянно присутствующие в системе даже ес-

68


безопасность ли защищаемый файл не был запущен. Но в этом случае они сталкиваются со следующей проблемой – как отличить «свой» процесс от всех остальных? По имени файла? Это не слишком надежно… Лучше использовать «метку» – уникальное сочетание байт по определенному адресу. С такими защитами справиться очень сложно, но всетаки возможно. Перепробовав несколько вариантов, автор остановился на следующем алгоритме, который обходит все существующие на сегодняшний день активные и пассивные защиты:  Копируем оригинальный файл (с защитой) в tmp.tmp.  Открываем оригинальный файл в hiew, переходим в точку входа (EP) и ставим jmp на свободное место, где и размещаем код дампера, который при получении управления осуществляет следующие действия:  выделяет блок памяти и копирует туда свое тело, обычно подгружаемое с диска (динамическую библиотеку лучше не загружать, поскольку некоторые защиты контролируют список DLL и если вызов идет из неизвестной динамической библиотеки, расценивают это как вторжение);  устанавливает таймер через API-функцию SetTimer с таким расчетом, чтобы процедура дампера получила управление, когда весь код будет полностью распакован или, в случае с CopyMem, когда защита успеет установить отладочный процесс (конечно, снять дамп в OEP в этом случае уже не получится, но даже такой дамп лучше, чем совсем ничего);  переименовывает оригинальный файл (тот, что исполняется в данный момент!) в tmp.xxx, а файлу tmp. tmp возвращает оригинальное имя;  вычищает себя из памяти, восстанавливает EP и передает управление защищенной программе;  если активная защита охраняет свой файл, опознавая его по сигнатуре, используем какой-нибудь безобидный упаковщик с «нулевым побочным эффектом» типа UPX, при этом все вышеуказанные действия следует выполнять на отдельной заведомо «стерильной» машине;  Запускаем модифицированный файл на выполнение. Таким образом, защита не сможет обнаружить изменений ни в файле, ни в памяти (при попытке определения имени текущего файла операционная система будет возвращать то имя файла, какое он имел на момент запуска, игнорируя факт его «онлайнового» переименования). Но это слишком громоздкий и навороченный алгоритм, к тому же активной защите ничего не стоит перехватить SetTimer и запретить установку таймера внутри «своего» процесса до завершения распаковки/передачи управления на OEP. Забавно, но многие защиты забывают о функции SetWindowsHookEx, позволяющей внедрять свою DLL в адресное пространство чужого процесса. Впрочем, даже если бы они помнили о ней, осуществить корректный перехват весьма не просто. Многие легальные приложения (например, мультимедийные клавиатуры или мыши с дополнительными кнопками по бокам) используют SetWindowsHookEx для расширения функциональности системы. Не существует никакого способа отличить «честное» приложение

№6, июнь 2006

от дампера. Защита может распознать факт внедрения чужой 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 с.

69


образование

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

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

Л

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

70

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


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

Рисунок 1. Программа подготовки Сертифицированного технического специалиста Red Hat (RHCT)

тификат от компании Red Hat. Также тему X Window, познакомятся с осноу слушателя остается официальное вами написания скриптов. Достаточучебное пособие. К сожалению, поли- но много времени уделено текстовотика Red Hat такова, что получить учеб- му редактору vim, входящему в больник может только слушатель курсов. шинство дистрибутивов Linux. Каждая Впрочем, той же стратегии придержи- из рассматриваемых тем, как и на осваются и другие производители ПО, та- тальных курсах от Red Hat, завершакие как Oracle и Microsoft. С другой сто- ется лабораторной работой под рукороны, тот же Microsoft выпускает офи- водством преподавателя. Новичкам циальные курсы для самостоятельной в мире Linux и UNIX я бы не рекомендоподготовки, чего нет у Red Hat. вал приходить на более старшие курИдя на курсы Red Hat, желательно сы, не прослушав этот вводный курс иметь базовые навыки чтения техни- или не имея базовых навыков. Подробческой литературы на английском язы- нее с программой обучения как этого, ке для эффективной работы с учебным так и остальных курсов, можно познапособием. В настоящий момент на рус- комиться на специальном разделе сайском языке есть только официальная та компании Red Hat [2]. документация, которая свободно доКурс «Основы Red Hat Linux для профессионалов Windows» отличается ступна в Интернете [3]. Чтобы гарантировать качество обу- от вышеописанного лишь наличием дочения в России и странах СНГ курсы полнительного дня, в котором WindowsRed Hat имеют право проводить толь- специалисты знакомятся с графическо сертифицированные инструкторы кими инструментами system-config-*, Red Hat компаний-партнеров. позволяющими выполнить основные Самый младший из курсов назы- действия по управлению системой, исвается «Основы Red Hat Linux». Собс- пользуя графический пользовательтвенно говоря, практически все, о чем ский интерфейс. говорится в этом четырехдневном треНаиболее популярным можно нанинге, относится к любому из дист- звать базовый курс «Системное адрибутивов Linux. Ориентирован курс министрирование Red Hat Enterprise Курсы обучения Для начала несколько общих слов. на специалистов, ранее не работав- Linux», который является основой На момент написания статьи курсы ших ни с UNIX, ни с Linux. За время для сертификации RHCT. Курс дает и экзамены проводились на осно- обучения слушатели получат базовые слушателям навыки и знания на уровве Red Hat Enterprise Linux 4 update 2. сведения и познакомятся с принципа- не установки и настройки новой рабоБольшинство курсов продолжаются ми UNIX-way, научатся работать с ко- чей станции Red Hat Enterprise Linux четыре дня. По их окончании слуша- мандной строкой, ориентироваться и подключения к существующей сети. тель получает соответствующий сер- в файловой системе, настраивать сис- Рассматриваются установка опера-

№6, июнь 2006

71


образование

Рисунок 2. Программа подготовки Сертифицированного инженера Red Hat (RHCE)

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

72

сов. Он предназначен в первую очередь для опытных 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.


bugtraq Отказ в обслуживании в SCTP в ядре Linux

Отказ в обслуживании в Kerio WinRoute Firewall

Программа: 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 версии до 6.2.1. Опасность: Средняя. Описание: Уязвимость существует из-за ошибки в инспекторах протоколов SMTP и POP3. Удаленный пользователь может с помощью специально сформированного e-mail-сообщения вызвать отказ в обслуживании приложения. URL производителя: www.kerio.com. Решение: Установите последнюю версию (6.2.1) с сайта производителя.

SQL-инъекция в Invision Power Board Программа: Invision Power Board 2.1.5, возможно, более ранние версии. Опасность: Средняя. Описание: Уязвимость существует из-за недостаточной обработки входных данных в параметре selectedtids в функции post_delete() сценария func_mod.php при удалении нескольких тем в форуме. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольные SQL-команды в базе данных приложения. Пример: act=mod&auth_key=2b71da21cbacba35ccf6fc04fe807d9a&st= ↵ 0&selectedpids=-1) UNION SELECT 1,3/*&tact=delete

URL производителя: www.invisionboard.com. Решение: В настоящее время способов устранения уязвимости не существует.

Обход ограничений безопасности в 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) с сайта производителя.

Переполнение буфера в Argosoft FTP Server

Программа: Argosoft FTP Server 1.4.3.6, возможно, более ранние версии. Опасность: Средняя. Описание: Уязвимость существует из-за ошибки проверки Переполнение буфера в mpg123 границ данных при обработке параметров в команде RNTO. Программа: mpg123 0.x. Удаленный пользователь может вызвать переполнение диОпасность: Высокая. Описание: Уязвимость существует из-за ошибки провер- намической памяти и выполнить произвольный код на цеки границ данных в функции III_i_stereo() в layer3.c при об- левой системе. работке файлов MPEG 2.0 layer 3. Удаленный пользователь URL производителя: www.argosoft.com/applications/ftpserver. может вызвать переполнение буфера и выполнить произ- Решение: В настоящее время способов устранения уязвивольный код на целевой системе. мости не существует. URL производителя: www.mpg123.de. Составил Александр Антипов Решение: В настоящее время способов устранения уязвимости не существует.

№6, июнь 2006

73


образование

Linux в школе?

Сергей Яремчук Из всех сфер применения вычислительной техники один из самых горячо обсуждаемых вопросов – использование GNU/Linux в области образования. Споры спорами, но на сегодняшний день на большинстве компьютеров в учебных заведениях стоит Windows.

А зачем Linux в школе? Как вы думаете, почему компания Microsoft усиленно обращает внимание на вузы и школы, проводя различные акции, скидки на ПО. Да и во время кампании по борьбе с пиратским софтом учебные заведения были практически нетронуты, лишь немного «припугнули» и практически оставили в покое. Все просто до безобразия. Человек по природе своей существо ленивое, и, разобравшись с конкретным вопросом один раз, он не захочет ничего нового и будет в большинстве своем пользоваться старыми знаниями, переучиваться никто не любит. А ведь в учебных заведениях ежегодно проходят обучение тысячи человек,

74

которые затем станут потенциальны- сравнить деятельность по борьбе с пими пользователями системы. Попро- ратством звукозаписывающих компабуйте в офисе вместо MS Office пос- ний и Microsoft, то можно отметить оттавить OpenOffice.org. Внешне и фун- носительно ленивые потуги последней. кционально они очень похожи, но пси- Не в попытке ли приручить пользовахологически человек воспринимает теля здесь дело? А вот когда решат перемены тяжело, и поверьте, поль- все-таки гайки позакручивать, то как зователи будут искать разные причи- вы думаете, за какой системой будет ны, чтобы им поставили старый офис- стоять очередь? Linux же пришел на десктопы неный пакет. Да, пусть Microsoft при этом понесет некоторые убытки, но они бу- давно и в принципе несколько запоздут несравнимы с теми, которые она дало, так что пока не может похваспонесла бы, усилив борьбу с пиратс- таться большим количеством поклонтвом и доведя ее до победного кон- ников, не занимающихся информатица. Поэтому и пиратство на террито- кой профессионально. Основная же рии бывшего Союза вопреки подня- часть пользователей просто не видит тому шуму не только не уходит в под- смысла менять систему, отказыватьполье, а, наоборот, процветает. И если ся от любимых приложений, а неко-


образование торые, возможно, просто опасаются, что не смогут самостоятельно разобраться. В школах ситуация полностью совпадает с описанной. За несколько лет все программы обучения фактически были адаптированы только под Windows, учителя тоже привыкли к этой системе, потому что это единственное, что было доступно. С накатанного пути уходят только энтузиасты, которым надоели вечные перестановки системы, необходимость обновления версий системы и оборудования после выхода очередной версии Windows, а также постоянные шалости учеников, вирусы и пр. Кстати, парадоксы встречаются и здесь. Так, если почитать требования к статьям в научные журналы в различных вузах, то одним из пунктов обязательно стоит MS Word, и именно определенной версии (иногда вплоть до build). Об этом почему-то мало говорят, но ведь разные версии Microsoft Office тоже не всегда дружат друг с другом. Это, конечно, хорошо, когда диск со всеми версиями офиса стоит копейки и за его нелегальное использование никто ответственности не несет. А если бы пришлось каждый раз покупать нужную версию по рыночной цене, то мне трудно представить, как бы велась научная работа в этом случае. Запад эту проблему решил намного проще, там используются только открытые форматы.

Затараты на использование

страняются промоутинговые скидки, а стоят они на порядок дороже. В случае же со свободным ПО деньги вкладываются не в конкретную программу, а в подготовку человека. Системы и технологии меняются постоянно и будут требовать постоянных обновлений (капиталовложений), а знания остаются. В большинстве школ ситуация такова, что школьник, имеющий доступ к Интернету и не озабоченный кучей проблем, может дать фору учителю информатики по знаниям или взломать систему, потому что учителю не хватает квалификации все профессионально настроить. После переподготовки технический уровень преподавателя повысится, и он сам теперь сможет поддерживать ПО в современном состоянии, защитить сеть, объяснить не на пальцах, а на реальных примерах основы или принципы работы Интернета и пр. Причем это, можно сказать, единоразовое вложение, т.к. для работы с любым Linux достаточно понять базовый принцип и некоторые принципы работы, далее все идет более-менее по накатанной. Может, ситуация описана идеально, но, по-моему, именно учителя в силу специфики своей профессии склонны к самообразованию, повышению своей квалификации, обмену опытом. Хотя, по правде, потрясения последних лет породили и здесь массу проблем, в том числе лень, заключающуюся в нежелании изучать что-то новое. Вы скажите, что человек тоже весьма не надежен, он может заболеть, а то и вовсе перейти на другую работу. Так ведь и купленная система не всегда работает так, как требуется. Кроме того, здесь начинает срабатывать принцип, который биологи называют «коллективным иммунитетом», когда количество привитых от некоторой болезни не позволяет возникнуть эпидемии. Так вот, сейчас все привиты Windows, а Linux смогли заразиться только те, кто смог преодолеть этот барьер.

В Интернете периодически появляются цифры сравнения затрат при использовании Windows и Linux, при этом сходятся в том, что эта сумма примерно одинакова. Причина такова, что хотя софт и бесплатный, но все равно потребуется научить людей им пользоваться. То есть с точки зрения финансирования смысла использовать Linux вроде бы и нет. Но это только поверхностный взгляд. Достаточно вспомнить, что в случае с системой Microsoft мы платим за ПО, которое, кстати, через год-два будет устарев- По каким принципам шим и потребует дополнительных вло- ведется обучение? жений на обновление и времени на ос- Как пример, мне довелось пару раз повоение. Не говоря уже о том, что кро- бывать на курсах по изучению сетевых ме самой системы, еще нужны другие технологий, кроме того, видеть пропрограммы (антивирус, офис, компиля- граммы некоторых других курсов. Изутор, приложения для работы с графи- чение в некоторых ведется по такому кой и пр.), на которые уже не распро- принципу. Сначала новичкам расска-

№6, июнь 2006

зывают о непонятных протоколах, а затем на практических занятиях показывают, как настроить Windows для работы в сети. Учитывая, что особенности настроек в последней скрыты, получается, что теория и практика разделены, и пользователь просто заполняет поля, часто не понимая, зачем и что он делает. Хорошо это или плохо, однозначно трудно сказать. С одной стороны, большинству эти знания явно не нужны, но с другой – каждая нестандартная ситуация приводит такого пользователя в замешательство. На курсах по геоинформационным системам тоже произошла интересная ситуация. Преподаватель рассказывал о проблемах, возникающих при создании подобных систем. Они связаны с большим объемом работ, которые необходимы провести при создании подобных систем и соответственно с большими финансовыми затратами, что не всегда могут себе позволить некоммерческие проекты. И соответственно на поставленный вопрос «а есть ли бесплатные (свободные) альтернативы подобному коммерческому ПО», преподаватель, не задумываясь, ответил, что такого и не может быть. Как же он удивился, когда через некоторое время я принес ему свободную альтернативу и показал возможности ПО, входящего в комплект. Правда, на программу курсов это никак не повлияло, все осталось по-старому. Еще одно отличие состоит в том, что при изучении /использовании Windows от пользователя не требуется глубоких знаний и весь процесс (в том числе и справочная информация системы) подчас сводится к бессмысленному запоминанию и затем воспроизведению последовательности действий без понимания происходящего. Да и инструментов для тонкой настройки некоторых параметров в самой системе просто нет, если только самому не лезть в реестр, что уже требует определенных знаний. Как вы думаете, тяжело Microsoft создать встроенный графический инструмент для настройки реестра Windows? Нет. Нужен пользователь, бездумно тыкающий в кнопки, которому можно рассказывать сказки об удобных интерфейсах и новых возможностях. Это отчасти подтверждается и справочной сис-

75


образование темой, в которой даются ответы на то, зубного врача только теоретическим  SEUL (Simple End User Linux)/edu – что нужно нажать для выполнения кон- курсом. Я к такому не пойду), и если http://seul.org/edu; кретной операции, без пояснения того, есть желание, то и расширить функ-  Schoolforge – http://www.schoolforge. зачем и что делается. циональность тех или иных инструменnet; В Linux же от пользователя требует- тальных средств. Ученик не должен  K12OS – http://k12os.org; ся в первую очередь понимание самих быть ограничен в возможности изуче-  K12Linux – http://k12linux.org; механизмов работы, которые не толь- ния, учеба должна побуждать челове-  KDE Edutainment Project – http://edu. ко не скрываются, а скорее, наоборот, ка к дальнейшему развитию. Только kde.org; о них говорят постоянно и везде, оби- так появляются будущие Торвальдсы.  O FS E T ( O rganization for Free лие документации уже ставится в ви- Кстати, в его книге «JUST FOR FUN» Software in Education and Teaching) – http://www.ofset.org/freeduc; ну системе, и все потому, что ее объ- описана ситуация, как студенты соемы уже превосходят все мыслимые ревновались с преподавателем в изу-  O p e n S o u r c e S c h o o l s – h t t p : / / размеры, и в некоторых дистрибу- чении UNIX. А в Windows в чем соревopensourceschools.org; тивах ее выносят уже на отдельный новаться, кто быстрее кнопки нажмет?  портал свободного ПО UNESCO диск. Сами же параметры конфигу- Windows как система фактически под(United Nations Educational, Scientific and Cultural Organization) – http:// рационных файлов отходят на второй страивает под себя человека, который, www.unesco.org/webworld/portal_ план, и достаточно разобраться один не думая, будет чувствовать себя одиfreesoft/index.shtml; раз, чтобы чувствовать себя в любом наково во всех условиях, в Linux же, надистрибутиве Linux более-менее сво- оборот, позволено заставить систему  отдельного упоминания стоят сайбодно. При этом эксперименты толь- делать то, чего хочется мне, а не как ты проектов LinuxForKids – http:// www.linuxforkids.org; ко поощряются, и код не скрывается. задумал разработчик. Делайте все что хотите, а главное –  Tux4Kids, представляющие свободСистема сложна, так это даже лучше, ведь решение проблем заставляет че- думайте. Скажите, не лучший ли это ное образовательное ПО, ориентиинструмент для школы. Как бы то ни ловека думать. рованное на детей младше 10 лет В книгах бывшего разведчика Ре- было, но в некоторых странах сегодня (для этой категории труднее всезуна-Суворова описывается подготов- существует законодательный запрет го найти программы) – http://www. tux4kids.net. ка спортсменов и спецназа. Так вот, на использование коммерческого ПО только тот, кто может сделать сегод- в учебных заведениях во избежание К сожалению, несмотря на налиня чуть больше, чем вчера, добивает- скрытого промоутинга. Да и поговарися успеха, а изначально выбирающие вают, что пингвин Тукс может стать та- чие такого большого количества релегкий путь остаются далеко поза- лисманом общественной системы об- сурсов, большая часть из предлагаеди. Да, согласен, не все могут и, глав- разования Америки, т.к. позволяет пе- мого софта, вероятно, не найдет приное, хотят быть профи при обращении рестать тратить сотни тысяч долларов менения. Причина банальна – отсутсс компьютером, но тем, кому это нуж- на программное обеспечение. твие локализации. Хотя можно отмено, должны быть созданы максимальтить, что ситуация сдвинулась с мерные условия. твой точки и прогресс налицо. НекоЧто имеем сегодня? Далее. Стремительный прогресс Необходимо отметить, процесс раз- торые приложения уже локализовав науке, искусстве является в том чис- работки свободного ПО для образо- ны если не полностью, то в объеме доле и результатом совместного исполь- вательных целей шел непрерывно статочном, чтобы их можно было исзования накопленных знаний, идей, те- и целенаправленно, поэтому, хоро- пользовать, не говоря уже о том, что орий и исследований. И в то же время шо поискав в Интернете, можно най- за это время многие из них выросли в школах устанавливается закрытое ти большое количество приложений качественно. Я против идеологии запретов, ограпрограммное обеспечение с лицен- разного качества исполнения, рабозионными ограничениями, закрыты- тающих как в консоли, так и с графи- ничений, отсутствия альтернативы, коми форматами и технологиями, к тому ческой оболочкой, практически на все торые в случае с образованием тольже заставляющее постоянно устанав- случаи жизни. Некоторые из них уже ко идут во вред делу. Здесь Linux в силивать самую последнюю версию ПО упоминались на страницах журнала, лу своей открытости и демократичносвне зависимости, нужно ли это вообще. так как входят в большинство дистри- ти подходит все-таки больше. Конечно, При этом постоянно требующее фи- бутивов (OpenOffice, GIMP, Firefox, Dia и сегодняшняя ситуация с программами, нансирования, которое могло бы пойти пр.). Практически все возможные ком- ориентированными на сферу образона дальнейшее развитие системы об- бинации слов Linux, education, schools, вания, еще далека от идеальной, проразования вообще, а не только на об- если набрать их в строке веб-браузе- граммы локализованы не полностью, новление программного обеспечения. ра, то наверняка получите отклик сер- нет стандартного интерфейса, не хваУченикам (студентам) нужно по край- вера. Вот только несколько ссылок, где тает подготовленных специалистов ней мере дать возможность изучить, найдете информацию по применению и прочее. Но главное, что она общикак работают те или иные инструменты, свободного ПО и Linux в учебных за- ми усилиями сдвинулась с места. И подать понять, что происходит, им нужна ведениях: моему, не использовать заложенный возможность заглянуть вовнутрь, изу-  Open Source Education Foundation – в OpenSource потенциал – это просто преступление. чить (а попробуйте научить хорошего http://www.osef.org;

76



образование

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

Сергей Яремчук В учебных заведениях некоторых западных стран позиции UNIX настолько сильны, что производителям проприетарного софта остается только завидовать этому. Чтобы упростить процесс использования свободного ПО в сфере образования, организациями и энтузиастами были собраны специальные дистрибутивы.

78


образование

О

собенно этот процесс оживился в последнее время в связи с ростом популярности 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.

Список дистрибутивов из разных стран можно продолжать.

Дистрибутив Edubuntu Edubuntu представляет собой версию популярного дистрибутива Ubuntu, оптимизированную для применения в школах. В отличие от остальных дистрибутивов его с успехом можно применять и дома. Фактически Edubuntu это и есть, собственно, Ubuntu, но только с другой целевой аудиторией и другими приложениями. Создаетсяи поддерживается той же группой разработчиков, что и оригинальный дистрибутив. Централизованное управление конфигурацией, учетными записями пользователей и приложениями, плюс комплектование дистрибутива специальными программами для учебных заведений, – на это ориентирован Edubuntu. Edubuntu построен на идеях, записанных в манифесте Ubuntu, в котором, в частности, говорится, что программное обеспечение должно быть бесплатным, доступным на любом языке и использоваться всеми, в том числе и людьми с физическими недостатками. Пользователь всегда должен иметь возможность свободно модифицировать используемое программное обеспечение. Напомню, что Ubuntu построен на базе самого свободного дистрибутива GNU/Linux – Debian. Дружелюбность, присущая Ubuntu, позволяет работать с ним пользователям со средними техническими навыками. Linux принято ру-

№6, июнь 2006

Рисунок 1. Рабочий стол Edubuntu

гать за недружелюбность к обычным мер, в статье Владимира Якубовского пользователям и необходимость чте- «Ubuntu 5.10 – первый взгляд на «Линукс ния документации. Ничего подобного. для людей», в первом номере электНачинающие пользователи Windows ронного приложения к журналу «Open задают не меньше вопросов, чем поль- Source». Та же программа установки, зователи Linux и также сталкиваются которая спокойно, без лишних вопросов с проблемами. Поэтому в любом слу- проведет пользователя по всем этапам чае пользователям требуется помощь установки. Несколько непривычно, что консультантов или приходится разби- пароля root никто не спрашивает, а сисраться самостоятельно. Для повсед- тема просто просит создать учетную заневных задач пользователям не по- пись обычного пользователя, под конадобится особых знаний при работе торым и будет происходить дальнейс Edubuntu. шая работа. Созданный при установке пользователь автоматически заносится в группу admin, представителям коЧто внутри? Текущая стабильная верся на мо- торой разрешено использовать sudo. мент написания статьи – Edubuntu 5.10 Все системные настройки производят«Breezy Badger», о которой и пойдет ся исключительно через sudo (или «run речь далее. Уже имеется версия 6.06 as different user» в графической среде), beta, предназначенная для разработ- при этом вводится пароль текущего чиков. Учитывая 6-месячный цикл пользователя. Поначалу такая систеразработки Ubuntu, в ближайшее вре- ма безопасности кажется непривычной мя следует ожидать нового релиза, но и неудобной, но быстро осваиваешься, главное – познакомиться c подобным к тому же на некоторые повторяющиедистрибутивом в общем. Да и в новой ся операции (например, копирование) версии состав приложений тот же, что и пароль запрашивается только первый в «Breezy Badger», единственное отли- раз. Но зато забыть оставить активичие – это появление LiveCD-версии. рованным терминал с администраторНа странице закачки предлагает- скими привилегиями при таком подходе ся два образа. Один собран для i386 просто невозможно, особенно учитывая архитектуры (для всех систем), вто- специфику применения Edubuntu, когда рой – для 64-битных систем (Athlon64, преподаватель может часто отвлекатьOpteron, EM64T Xeon). Доступны и DVD- ся, для помощи ученикам. образы. Единственной рабочей средой явEdubuntu во многом напоминает ро- ляется Gnome (см. рис. 1). Возможно, дительский дистрибутив, о котором бо- кому-то покажется, что KDE лучше бы лее подробно можно почитать, напри- подошел на эту роль, но для неиску-

79


образование

Рисунок 2. Установка/удаление программ в Edubuntu

шенного пользователя, поверьте, этого будет достаточно. При желании любую другую среду можно установить через систему обновлений aptget или Synaptic в графическом варианте, где доступно более 16 тысяч приложений. Кроме того, в главном меню имеется пункт «Add/Remove Aplications» (/usr/bin/gnome-app-install) (см. рис. 2), являющийся также надстройкой к apt-get, но в нем собраны только ссылки на основные приложения. Рабочее окружение локализовано, как говорится, из коробки. Если при установке был выбран соответствующий язык, то большая часть сообщений, меню Gnome и некоторых приложений после регистрации в системе будут также на этом языке. Еще во время установки система «предупреждает пользователя», что текущий состав приложений не полностью соответствует требуемым локальным настройкам и рекомендуется скачать и установить необходимые версии самостоятельно. Поэтому о полной локализации говорить не приходится, к тому же и некоторые приложения, входящие в состав, не локализованы вообще, либо это сделано лишь частично. OpenOffice.org например, придется переустановить полностью, взяв локализованную копию с http://www.openoffice.ru. Раскладка клавиатуры переключается, как это привычно пользователям Windows, по <Alt+Shift>. Запятая и точка размещены нестандартно, по <Shift +

80

6, 7>. Поэтому в xorg.conf необходимо подправить параметр XkbLayout. Option "XkbLayout" "us,ru(winkeys)"

Да и в качестве локали используется 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:


образование

Рисунок 3. Gcompris поможет в изучении математики и не только

Рисунок 4. При помощи Kalzium можно изучать периодическую систему элементов

 в TuxMath («Tux, of Math Command»),

 KmessedWords – игра рассчитана

чтобы спасти планету, необходимо быстро производить математические вычисления;  TuxTyping научит быстро печать слова (правда, только английские);  веселая рисовалка TuxPaint, скорее всего, оставит вас без компьютера надолго.

на детей от 10 лет, в ней необходимо расставить правильно буквы в слове. Игра имеет три уровня сложности, можно создавать свои слова и правила. KmPlot – математический графопостроитель с мощным синтаксическим анализатором. KPercentage – небольшая математическая программка, которая поможет освоить вычисление процентов. Kstars – простой на вид имитатор ночного звездного неба, на самом деле использующий самые современные алгоритмы вычисления положения небесных тел и имеющий базу о тысячах небесных объектах и снимки, взятые с космического телескопа Hubble и некоторых обсерваторий. KTouch – еще один клавиатурный тренажер, правда, опять же английский. KTurtle – образовательная программная среда, использующая язык программирования Logo (первоначально, ответвление LISP). Легкость и доступность делает эту программу неплохим подспорьем при обучении (именно обучении, Kturtle не предназначен для программистов) программированию, математике и геометрии. Kverbos – программа для изучения испанских глаголов. KVocTrain – еще одна программа, цель которой помочь в изучении иностранного языка.

 

Кроме того, есть Atomix, который даст понятия о молекулах и атомах, и gLIfe, некий автомат искусственной жизни, и некоторые другие. Пункт «Образовательные» содержит еще 14 приложений, большая часть которых из KDE edutainment module [2]:  Kalzium – покажет всю информацию по периодической системе элементов, подробно по каждому элементу, по группам, по характеристикам, по времени открытия и пр. (рис. 4).  KBruch – поможет научиться обращаться с дробями, возможны четыре варианта – посчитать, сравнить, преобразовать и разложить на множители.  Keduca – представляет собой систему тестирования, в состав входит и редактор тестов.  KhangMan – компьютерный вариант известной игры виселица, имеет четыре уровня сложности, рассчитана на детей от 6 лет.  Kig (kde Interactive Geometry) – инструмент, позволяющий в диалоговом режиме изучать математические фигуры и понятия, кроме того, может использоваться для WYSIWYG создания математических фигур для включения в другие документы.

№6, июнь 2006

 

 

Кроме этого, если зайти по адресу 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.

81


hardware

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

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


hardware

П

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

Один LED на двоих При подключении дополнительных винчестеров на внешний контроллер (SCSI или IDE) возникают проблемы с индикацией. Светодиод – один, и он уже занят материнской платой с основными IDE-контроллерами. Можно, конечно, просверлить в корпусе дырку и вывести наружу столько светодиодов, сколько потребуется, но это может испортить внешний вид компьютера, к тому же большое количество моргающих светодиодов сильно раздражает. Воспользовавшись следующей схемой (см. рис. 1), мы сможем подключить к одному светодиоду практически неограниченное количество контроллеров. Для исключения «выгорания» цепей индикации контроллеров мы используем диоды Шотки типа BAT46 (см. рис. 2), которые можно взять практически с любой материнской платы, оставшейся от апгрейда, или купить в радиомагазине за «копейки». Проверяя их целостность омметром, не волнуйтесь, если стрелка не захочет отклоняться. Это свойство диода такое – открываться только при достижении определенного порогового напряжения. Все необходимые вольтамперные характеристики диода содержатся в бесплатно распространяемой документации: http://ronja.twibright.com/ datasheets/bat46.pdf.

№6, июнь 2006

LDE-моддинг Два светодиода на передней панели (один из которых – Power-LED– постоянно горит, а другой – HDD LED – оживленно мигает) – это традиция, сохранившаяся с древнейших времен, когда самым престижным компьютером был IBM XT, выполненный в «строгих Рисунок 1. Подключение нескольких серых тонах», но в наш век подобный контроллеров к одному светодиоду дизайнерский подход выглядит малопривлекательным и неоправданно аскетичным. Разве не интересно загляну ть во внутренний мир компьютера, прицепив индикацию буквально на каждую шину? Например, подключившись к выводу /RAS модуля памяти (115/154выводы DIMM-слота на SDR/DDR соРисунок 2. Внешний вид диодов Шотки ответственно), мы сможем наблюдать за переключениями DRAM-страниц оперативной памяти, а 27/63-контакты будут мигать светодиодом при переключении микросхемы из режима чтения в режим записи! Достаточно взять в руки схему материнской платы (схемы рефересных плат бесРисунок 3. Схема подключения платно раздаются с сайта Intel), и чедополнительного светодиода рез несколько минут наш PC превратится в рождественскую елку! Кстати, при выявлении причин сбоев это очень помогает. Вот только напрямую подсоединить светодиоды ни в коем случае нельзя! Ну уже хотя бы потому, что шины и так работают на пределе, и при попытке их удлинения все падает в тартарары. Приходится хитрить, воспользовавшись операционным усилителем, таким, например, как LM358, коРисунок 4. Пульсовый генератор торый легко выпаять с любой материнна LM358 ской платы, видеокарты или купить на рынке. Вот его техническая докумен- и подключенные к ним светодиоды бутация: http://www.ensc.sfu.ca/reference/ дут монотонно мигать, имитируя рабоdata-sheets/LM358.PDF, а типовая схе- ту сердца. На самом деле, схема, приведенма подключения на рис 3. Каждая микросхема LM358 вклю- ная в описании операционного усичает в себя целых два операцион- лителя, очень условна, и все «второных усилителя, а значит, что она мо- степенные» элементы типа фильтров жет обслуживать сразу два незави- в ней опущены. Во-первых, не всегда симых светодиода. Сама микросхе- на интересующем нас выводе будет пома монтируется прямо на материн- ложительный уровень, поэтому поряскую плату, непосредственно на ин- док подключения «+» и «–» приходиттересующий нас вывод, а светодиод ся определять либо «по науке» (свеможет быть выведен гибким шнуром рясь со схемой), либо «эксперименна переднюю панель или даже в со- тально» (если подсоединить неправильно, ничего не сгорит, просто свеседнюю комнату. Незадействованные усилители тодиод моргать не будет). Во-вторых, легким движением руки превращают- работа компьютера после такого варся в тактовые генераторы (см. рис. 4), варского вмешательства рискует стать

83


hardware

Рисунок 5. «Правильная» схема подключения контрольных светодиодов от Intel

Рисунок 6. HDD-индикатор на самом деле отражает активность всех ATA/ATAPI-устройств

нестабильной, так что на высоких час- смотрим типовую схему подключения тодиод другого цвета и другой поляртотах ее лучше не применять. ности (минус этого решения в том, POWER LED (см. рис. 7). Правильное решение (выдернуНа плате (ON-BOARD) расположен что придется «дырявить» лицевую патое из схемы на материнскую плату двухцветный (DUAL-COLOR) светоди- нель, что не есть хорошо, а впрочем... Intel 100 MHz Pentium(tm) II processor/ од. Это такой специальный светодиод, так даже красивее). 440BX) выглядит так (см. рис. 5). Про- содержащий два LED в одном флаконе. верено – оно работает и на более высо- Выбор нужного цвета осуществляется Когда индикатор лжет полярностью. Параллельно ON-BOARD Невероятно, но факт, HDD LED на саких частотах, вплоть до Pentium-4. Основной всего служит чип 74ALS08 LED расположен CHASSIS POWER LED, мом деле отображает активность ши(вот ссылка на документацию: http:// что в переводе на русский язык озна- ны IDE и подмигивает любому ATA/ www.standardics.philips.com/products/ чает «светодиод, выведенный на кор- ATAPI-устройству (например, DVDals/pdf/74als08.pdf). Это так называе- пус». Итак, все необходимые ингреди- приводу или CD-ROM), что вносит димый «Quad 2-input AND gate» (2-х вход- енты у нас уже есть! кую путаницу в процесс и нервируСпособ номер один – убираем ста- ет начинающих пользователей, иногной И-вентиль, в количестве 4-х штук в одном корпусе) со свитой резисто- рый светодиод с лицевой панели и ста- да даже сдающих компьютер в реров и конденсаторов, подавляющих вим на его место новый DUAL-COLOR, монт (см. рис. 6). Против схемотехпомехи. Как и следует из его назва- который можно взять со старой платы ники, конечно, не попрешь, но мы знания, он обслуживает две «контроль- или в магазине. Все! Теперь он будет ем как быть! Разносим HDD и CD-ROM/DVDных» точки, выводимые на один-единс- светиться двумя разными цветами! Способ номер два – подключаем ROM по разным шлейфам (если не сдетвенный светодиод. Все детали легко взять с любой платы, так что на рынок к старому светодиоду еще один све- лали этого сразу), берем в руки лупу и, идти совершенно необязательно. Главное – запастись светодиодами. Яркими и, желательно, разноцветными (для увеличения яркости в J28 можно «воткнуть» вышеописанный операционный усилитель).

Два цвета в одном На многих материнских платах расположен светодиод, горящий в рабочем режиме одним цветом, а в ждущем – другим. Светодиод, расположенный на лицевой панели некоторых системных блоков, обычно ведет себя точно так же, но... «обычно» это еще не всегда (у старых системных блоков вообще никогда). На самом деле этой беде легко помочь! В большинстве случаев даже не понадобится трогать паяльник! Рас-

84

Рисунок 7. Типовая схема подключения Power LED


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).

№6, июнь 2006

Рисунок 8. Предохранители, охраняющие USB-порты на плате F1 и F2

Рисунок 9. Предохранители, охраняющие клавиатуру и мышь

Как-то раз один мой знакомый включил старый-старый джойстик, оставшийся от компьютера ZX-Spectrum, в клавиатурный DIN-разъем. Думал поиграть! Поиграть не получилось, а клавиатура, увы, умерла. К счастью, предохранитель принял весь удар на себя (номинальный ток 1,35 A), после замены которого клавиатура ожила, и компьютер заработал, как новый!

Заключение Страх перед сложной техникой сдерживает порывы творчества, и боль-

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

85


ретроспектива

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

Дмитрий Мороз После череды неудач, постигших SGI в период с 1994 по 1999 годы, многие стали с надеждой смотреть на нового исполнительного директора. Но сможет ли один человек помочь «тонущему кораблю»?

«Мы сеяли семя инноваций, но потерпели неудачу в сборе урожая» (Боб Бишоп) До получения должности исполнительного директора SGI Боб Бишоп на протяжении девяти лет работал в этой компании, занимая пост главы отдела маркетинга, пока в 1995 году не покинул его, став членом наблюдательного совета акционеров. После предательского бегства его предшественника, Рика Белуццо, на предложение возглавить SGI Бишоп с радостью согласился. «Принимая непосредственное участие в формировании нашей новой стратегии, я окончательно завершу процесс трансформации компании для поддержания её роста и прибыльности, – говорил тогда Бишоп. – У меня огромная вера в талантливых людей, глубину технологий и лояльность клиентов SGI».

86

Однако компания, в которой он ра- сячелетие SGI вступала в весьма плаботал четыре года назад, в 1999 г. бы- чевном состоянии. Планы компании в скором времела уже совсем другой. «SGI продолжает наращивать скорость, но вмес- ни остановить разработку собственте с тем теряет высоту. Компания ра- ных графических систем для своих работает совсем не так, как должна, тем бочих станций и серверов визуализасамым «играя на руку» нам», – гово- ции стали более «осязаемыми» в серил тогда генеральный директор Sun редине 1999 года, когда специально по Microsystems Скот МакНили. этому поводу SGI подписала соглашеРеструктуризация, о которой как ние с компанией nVidia. Согласно нераз перед своим уходом заговорил Бе- му nVidia получила право лицензиролуццо, оставила неизгладимый отпеча- вать графические технологии SGI, коток не только на компании, но и на её торая, в свою очередь, имела доступ служащих. Агонизирующая SGI уже к самым новым чипам, произведённым к октябрю 1999 года вынуждена была nVidia. Кроме того, 50 инженеров SGI отрапортовать как о финансовых по- перешли к nVidia для работы над протерях, так и о массовых сокращениях ектом «Одиссей». Его результатом персонала. Финансисты «не досчита- стало появление последнего поколелись» 68 млн. долларов, а менеджеры ния собственных графических плат компании – 1100 человек кадрового SGI серии VPro (основная их «изюминсостава. При подведении финансовых ка» – 48-битное представление цвета итогов 1999 года стало известно о по- RGBA, позволяющее работать с патерях 213 млн. долларов. В новое ты- литрой, состоящей из 68 миллиардов


ретроспектива цветовых оттенков), устанавливав- чем особым от рабочих станций друшихся в более поздние модели Octane гих компаний, равно как и от обычных и новые Octane 2, выпущенные вмес- ПК, не отличались, разве что их грате с O2+ в августе 2001 года. К сожа- фический адаптер VR3, был постролению, кроме более быстрых процес- ен на базе профессионального чипа соров и новых графических опций эти nVidia Quadro, впрочем, являвшегося рабочие станции не предлагали ниче- «сынком» обычного GeForce 256. По типу «цепной реакции» вскоре го нового и при своей заоблачной стоимости практически не приобретались. после заявления SGI о желании «изЧто же касается линейки систем, ра- бавиться» от Visual Workstation послеботающих на процессорах Intel Pentium, довало сообщение и о продаже Cray жить ей оставалось недолго. В конце Research. Начиная с декабря 1999 гогода стало известно, что усилия SGI, да в Интернете стали появляться слухи направленные на поиски потенциаль- о том, что SGI ищет потенциального поного покупателя на подразделение, за- купателя на это подразделение. К тому нимающееся производством рабочих времени Cray Research представляла станций Visual Workstation, оказались собой довольно жалкое зрелище: 850 безуспешными. Линейка систем на ба- сотрудников (против 4500 в 1996 году) зе процессоров Intel «камнем» висела и 300 млн. долларов. годового дохода на «шее» компании, всё дальше затя- (900 млн. долларов. в 1996 году). 2 марта 2000 года слухи, наконецгивая её в пучину финансовых убытков. Потери от продаж рабочих стан- то, подтвердились, и SGI продала Cray ций 320 и 540 стоили SGI 45 млн. дол- Research со всеми «потрохами» комларов. «Урок, полученный нами в ре- пании Terra Computer за не оглашёнзультате запуска Visual Workstation, дал ную общественности сумму (по словам понять, что в мире быстро совершенс- Wall Street Journal, эта цифра составитвующихся систем на базе процессо- ла около 100 млн. долларов. Сравниров компании Intel попытка продвиже- те с суммой покупки в 1996 году, состания собственных разработок заранее вившей 764 млн. долларов). Новая рообречена на провал», – говорил тог- дительская компания, сама прибываюда главный бухгалтер компании Боб щая в не очень «радужном» состоянии Солтмарш. (потери Terra Computer во время покупНу а пока SGI искала пок упа- ки составляли 7,5 млн. долларов при теля, компания решила дать Visual прибыли в 850 тыс. долларов), не стаWorkstation последний шанс, благо не- ла диктовать новоиспечённой Cray Inc. обходимость в развитии линейки всё свои условия и дала «вольную». Однаещё сохранялась. Однако на этот раз ко, несмотря на выпуск ряда довольно разработкой продвинутой архитекту- удачных суперкомпьютеров типа SX-1, ры SGI особо не увлекалась. После X1 и XD1, дела у компании шли всё хупокупки части компании Integraph, SGI же и хуже. На сегодняшний день акв мае 2000 г. выпустила её графичес- ции Cray Inc. практически обесценикие рабочие станции под своим име- лись. К тому же в ноябре прошлого гонем. Новые модели 230, 330 и 550 ни- да один из основателей Terra Computer

Наследник проекта «Реальность» Одной из идей бывшего управляющего Silicon Graphics Джима Кларка являлся «перенос» разработок компании в области создания графических процессоров в новые сегменты рынка – мультимедийные приставки, игровые консоли, персональные компьютеры и т. д. Несмотря на то что акционерам эта затея не понравилась, часть инженеров тайком (необходимо вспомнить о негласном правиле: «либо в одной лодке со всеми, либо – за бортом») поддержала идею их «духовного лидера». Так, команда под руководством Веи Ена, работавшая над графическим

№6, июнь 2006

Рабочая станция SGI 230

Сервер SGI Origin 3400

и главный инженер Cray Бартон Смит ушёл в Microsoft. Аналогия с Белуццо напрашивается сама собой. В свете продажи подразделений SGI стоит упомянуть слова одного из посетителей сайта Osnews.com, высказанные по поводу финансовых осложнений компании: «Ничто не сможет спасти SGI от краха, поскольку компания до сих пор продолжает следовать давно устаревшей «университетской» модели бизнеса: в погоне за стабилизацией своего финансового состопроцессором RCP для Nintendo 64, реши- яния она отрезает, отрезает и будет ла воплотить мечты Кларка в реальность, дальше отрезать свои подразделедля чего в сентябре 1997 года ушла из ком- ния до тех пор, пока бизнесу не понапании и основала свою собственную, на- добится дальнейшее развитие. Одназванную ArtX. Первым клиентом новоис- ко к тому моменту от SGI больше нипечённого «стартапа», как не трудно дога- чего не останется». даться, стала компания Nintendo, по закаВ июле 2000 года состоялось обзу которой ArtX занялась разработкой гра- новление линейки Origin. Архитектуфического чипа для следующей консоли ра новых серверов Origin 3000 (поколеяпонского гиганта под кодовым названи- ние SN-1) под названием NUMAflex соем «Dolphin» (Nintendo GameCube). Позд- стояла из так называемых «модулей», нее, 1 марта 2000 года, ArtX была приоб- каждый из которых отвечал за свою ретена компанией ATI за 400 млн. долл., функцию. Так, процессорный модуль и продолжила свою работу уже под её содержал: процессоры, контроллер «крылом». ОЗУ и саму оперативную память. В

87


ретроспектива Проигранная процессорная гонка В 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, которая, ещё не выйдя, успела разочаровать весь мир.

системе также присутствовали моду- вице-президент по корпоративному ли шины NUMAlink, модули ввода/вы- маркетингу SGI Грэг Истис. «У нас бывода, модули шин PCI и XIO, диско- ли, и до сих пор есть, чудесные продуквые модули и т. д. Максимальное ко- ты, и мы это знали. К сожалению, рыличество процессоров в новых серве- нок, для которого мы производили нарах Origin на первых порах равнялось шу технику, был очень мал. Мы прос128 штукам. Вместе с Origin 3000 бы- то не могли быстро повернуть корабль ли анонсированы и сервера визуали- для того, чтобы соревноваться с новым зации Onyx3, отличавшиеся лишь на- поколением ПК». Постоянное снижение притока деличием графических модулей на базе плат InfiniteReality3. нежных средств вынудило компанию По словам Боба Бишопа, денеж- провести ряд «мероприятий» с целью ная сумма заказов на новые сервера финансовой стабилизации своего поза первые два месяца достигла отмет- ложения. В апреле 2001 года очередки в 100 млн. долл., которых, тем не менее, всё же не хватило для стабилизации финансового положения компании. К 2001 году стало окончательно ясно, что тягаться с компаниями Sun, Hewlett-Packard и начинавшей набирать в то время популярность Apple в секторе высокопроизводительных рабочих станций SGI уже не может. Конкурентоспособность её продуктов была очень низкой, к тому же, всемирная «миграция» на дешёвые ПК, а также кластерные системы свели все продажи компании практически к нулю. «Я не люблю использовать это слово, однако вынужден: наши амбиции сыгРабочая станция SGI 750 рали с нами злую шутку», – говорил

88

ной неудовлетворительный финансовый квартал стал причиной увольнения из 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 – «сетевая визуализация») обратимся к словам Эди-


ретроспектива сона Снила, менеджера по производс- теры, спрос на которые был более или твенному маркетингу SGI: «Вспом- менее стабильным. ним закон Мура: по прошествии опреВ июне 2001 года компания объделённого промежутка времени мощ- явила об окончательном прекращении ность компьютера увеличится в два производства Visual Workstation. Это раза. Вместе с тем, из-за увеличения не только ударило по имиджу компаколичества передаваемой информа- нии, но и вылилось в 60 млн. долларов ции возникает необходимость в соот- убытков, состоявших из отменённых ветствующем увеличении и пропуск- контрактов на производство и нереаной способности. 10 лет назад, если лизованного товара. Ко всему прочевы занимались производством авто- му SGI объявила об очередном увольмобилей, вам необходимо было про- нении 1500 человек. Спустя полгода после роспуска считать приблизительно 10 тысяч деталей, из которых она состояла. Сегод- подразделения, занимавшегося разня эта цифра возросла до 10 милли- работкой Visual Workstation, состояонов. Несмотря на возросшее за пос- лось долгожданное обновление раболедние 10 лет в десятки и сотни раз чих станций начального уровня, честь быстродействие компьютеров, экран- которых на протяжении шести лет «отное разрешение мониторов хоть и уве- стаивали» O2 и O2+. Данное событие личилось, однако не столь значитель- произошло в январе 2002 года, когда но. «Сетевая визуализация» позволя- миру была представлена модель Fuel. ет вам вместо передачи информации Основная её особенность, позднее пересылать лишь её изображения, тем ставшая стандартом для остальных носамым значительно эффективнее рас- винок SGI – архитектура, основанная ходуя пропускную способность канала на базе SN-1. В принципе Fuel предпередачи информации. Для примера: ставляла собой одномодульную и одгеолог в поле может получать данные нопроцессорную вариацию на тему с суперкомпьютера своей компании сервера начального уровня Origin 300, на ноутбук или даже карманный ком- дополнительно оснащённую графикой пьютер». Как и «центры реальности», VPro. Однако цена станции, стартовавсистемы «сетевой визуализации» ути- шая с 11,5 тыс. долларов, явно не сполизировали весь спектр аппаратного собствовала обретению Fuel статуса и программного обеспечения SGI. «начального уровня». Однако количество клиентов, нужАнонс новой рабочей станции подавшихся в системах подобного клас- мерк по сравнению с возникшими слуса и, главное, способных платить за хами о том, что SGI опять взялась соних баснословные суммы, было нич- трудничать со своим злейшим врагом – тожно мало, чтобы помочь компании Microsoft. В январских новостях, циркудержаться «на плаву». Единственное, лировавших в Интернете, говорилось что её спасало – традиционные высо- о продаже части патентов на графикопроизводительные сервера, систе- ческие технологии за 62,5 млн. долмы хранения данных и суперкомпью- ларов. Несмотря на то что представи-

Первая станция на базе Itanium Несмотря на то что о появлении первых систем семейства Altix на базе процессоров Itanium компания объявила лишь в 2003 году, попытка выпустить рабочую станцию на базе нового чипа от Intel была предпринята ещё раньше. В июне 2001 года вместе с анонсом о прекращении производства рабочих станций на базе процессоров Pentium SGI объявила о выпуске SGI 750 – единственной модели, построенной на базе Itanium первого поколения. Однако эта рабочая станция не являлась собственной разработкой компании, внутри неё использовались стандартные компоненты: материнская плата производства Intel, стандарт-

№6, июнь 2006

ная оперативная память типа SDRAM, а также графический адаптер ATI XPERT 2000 PRO на базе чипа Rage 1999 года выпуска. Последний «штрих» к «портрету» новинки – выпуск компанией Dell рабочей станции Precision Workstation 730, являющейся… точной копией SGI 750 как по внутреннему содержанию, так и по внешнему исполнению, однако, что интересно, анонсированной на месяц раньше. Из-за «сырости» первого поколения чипов Itanium, малого количества доступного для этой платформы ПО, а также неудачной комплектации SGI 750 и её работы исключительно под Linux, рабочая станция популярности не обрела и скоропостижно «канула в Лету».

Рабочая станция SGI Fuel

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

89


ретроспектива Проект «Колумбия» К 2004 году Национальное аэрокосмическое агентство для проведения своих дальнейших экспериментов заказало SGI новый суперкомпьютер, который бы увеличил компьютерные мощности NASA в десятки раз. В июле 2004 года был официально запущен проект под названием Project Columbia, результатом которого должна была стать система, состоящая из 20 серверов Altix 3700, каждый из которых нёс на борту 512 процессоров. На следующий день после запуска, состоявшегося 26 октября, новый суперкомпьютер стал первым в списке Top 500 наиболее производительных систем

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 уже располагали дист-

90

мира, достигнув показателя 42,7 Тфлоп/с, или 42,7 триллиона операций с плавающей запятой в секунду. Однако спустя короткий промежуток времени, Project Columbia был свергнут новым суперкомпьютером BlueGene/L корпорации IBM, обладающим производительностью 280,6 Тфлоп/с. На сегодняшний день первую тройку мест в списке занимают системы «голубого гиганта», тогда как суперкомпьютер SGI опустился на четвёртую позицию. Кстати, на данный момент SGI является чуть ли не единственным клиентом Intel, приобретающим процессоры Itanium в количествах больше десяти тысяч.

рибутивами Linux для новой платформы от Intel. По словам вице-президента по продажам компьютерных систем Биу Вролика: «Использование Linux в наших новых системах позволит вдвое увеличить производительность, в три раза снизив при этом стоимость». Август 2003 года ознаменовался долгожданным выходом первого сервера из нового семейства Altix на базе процессоров Itanium 2. Перед анонсом компания объявила об увольнении 600 человек, которое позволило «наскрести» ей дополнительные 20 млн. долларов на запуск новой линейки. Архитектурно сервер Altix является полной копией Origin 3000 с той лишь разницей, что в процессорных модулях вместо чипов MIPS стояли процессоры Intel. На момент выхода новые сервера являлись единственными системами, способными нести «на борту» 256 процессоров Itanium 2 и 24 Тб ОЗУ. Благодаря этому за первые пару месяцев

Сервер визуализации SGI Onyx4

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, согласив-


ретроспектива шейся каждый год выплачивать ей 17 млн. долларов. Вместе с этим заявлением SGI объявила о выпуске сервера Altix 4000, основное отличие которого от её предшественников заключается в поддержке 128 Тбайт оперативной памяти. На данный момент Altix 4000 является последним обновлением в линейке серверов компании.

Роковое 8 мая

Попытка реабилитации Последняя на данный момент новая разработка от SGI – «революционная» технология RASC (Reconfigurable Application-Specific Computing – вычисления, реконфигурируемые под конкретное приложение), реализация которой представляет собой bladeмодуль, предназначенный для установки в стандартную серверную стойку, и содержащий несколько программируемых вентиль-

1 февраля 2006 года, после объяв- чего на данный момент в компании раления результатов за очередной фи- ботают всего 1800 сотрудников. Кроме нансовый квартал, согласно кото- того, свои посты покинули: финансорым компания потеряла очередные вый директор Джеф Зельмер и испол79 млн. долларов, совет акционеров нительный директор Уоррен Пратт. ТуSGI не выдержал и принял решение чи над головой SGI сомкнулись, и гряснять Боба Бишопа с поста исполни- нул гром. Ещё в феврале представители комтельного директора. Его место занял Денис МакКинна, ранее исполнявший пании «в тихую» предрекали о том, аналогичные обязанности в компа- что вполне возможно, в течение года нии SCP Global Technologies. «Компа- SGI обанкротится. К сожалению, их ния столкнулась с проблемами, одна- слова стали правдой. Во время написания этой статьи ко мы о них знаем», – заявлял тогда МакКинна. «Мои методы правления 8 мая компания публично объявила SGI будут заключаться в продолжении о том, что была вынуждена подать затого, что мы делаем, более эффектив- явление о банкротстве. Теперь в люно и продуктивно, именно так мы смо- бой момент времени компания может жем расширяться и рапортовать о по- прекратить своё существование. Целый штат аналитиков и финансистов вышении доходов». Результат работы нового исполни- пытается хоть немного исправить фительного директора не заставил себя нансовое положение компании, котождать: через месяц, в марте этого го- рое иначе, как плачевным, назвать неда, компания объявила об очередном льзя: при 369,4 млн. долларов, которые увольнении 250 человек, в результате являются оценочной стоимостью имущества SGI, долг компании составляет 664,3 млн. долларов. Где взять деньги на его погашение, пока, к сожалению, не ясно.

Грустная лирическая нота

Сервер SGI Altix 3000

№6, июнь 2006

Что осталось от прежней SGI, компании, ещё 10 лет назад будоражившей ум каждого техника, художника либо учёного? Совсем немного: несколько первоклассных инженеров, пара-тройка технологических ноу-хау и патентов на технологии, созданные компанией за период её существования. Например, именно патенты на графические технологии, часть из которых ещё находится в закромах SGI, интересуют компанию nVidia, желающую, согласно циркулирующим в Интернете слухам, заполучить остатки этого бизнеса компании. Скорее всего, компания хочет заполучить в свои владения торговую марку OpenGL, всё ещё прина-

ных матриц (FPGA). Такой модуль, подключённый при помощи шины NUMAlink к серверу Altix, программируется под выполнение конкретной задачи и, по словам компании, ускоряет её выполнение на порядок. На данный момент наиболее производительная модель, RC100, содержит две FPGA-матрицы Xilinx Virtex 4 LX200, 80 Мб сверхбыстрой статичной памяти QDR SRAM, или же до 20 Гб оперативной памяти типа DDR2 SDRAM.

длежащую 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. 2. 3. 4. 5. 6. 7.

http://www.cnet.com http://www.eweek.com http://www.osnews.com http://www.sgi.com http://www.theregister.co.uk http://www.wikipedia.com http://www.wsj.com

91


книжная полка

Виртуальные машины: несколько компьютеров в одном Алексей Гультяев

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

ке, полностью посвященная виртуаль- сы сетевого взаимодействия с гостеным машинам. выми ОС. Весь материал книги посвящен Описание всех трех программ тройке наиболее популярных программ происходит по одной и той же схеме, в этой отрасли, а именно Microsoft что в конечном итоге поможет читатеVirtual PC 2004, VMWare Workstation лю выбрать для себя наиболее подхои Parallels Workstation. дящий вариант. Из первой главы вы узнаете, как раК книге прилагается CD, на котоботают виртуальные машины, основ- ром вы найдете trial-версии всех опиные способы их применения, а также санных в книге программ. Весь мабудут рассмотрены основные методы териал снабжен большим количестреализации технологий визуализации, вом иллюстраций и скриншотов. Книа именно – виртуальные машины с эму- га рассчитана на широкий круг читаляцией API гостевой ОС, полная эму- телей, в том числе и на тех, кто никогляция гостевой ОС, и машины с ква- да раньше не работал с виртуальнызиэмуляцией. ми машинами. Каждой из программ посвящена отдельная глава, в которой последо-  Издательство: «Питер» вательно рассказывается об общих  Год издания: 2006 характеристиках продукта, установ-  Количество страниц: 224 ке и первоначальной настройке, со-  ISBN: 5-469-01338-3 здании и управлении гостевой ОС.  Цена: ≈ 300 руб. Не оставлены без внимания и вопро- Книга предоставлена издательством «Питер».

Основы построения беспроводных локальных сетей стандарта 802.11 Педжман Рошан, Джонатан Лиэри

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

92

сетей, т.е. о сетях, построенных тради- диочастотный тракт» вы узнаете о том, ционным образом. как вышеописанные технологии рабоИз второй главы вы узнаете общие тают на более низком уровне (основы сведения о беспроводных сетях стан- ради- и антенной техники). Практические советы из главы дарта 802.11. Обзор топологий WLAN, механизмы доступа к среде стандар- «Развертывание беспроводных сетей» та 802.11, нестандартные устройства, помогут вам построить более эффекоперации, осуществляемые на уровне тивную сеть при меньших затратах. MAC-стандарта 802.11. Далее подробВ завершении авторы рассказывано описаны стандарты беспроводных ют о последних технологиях беспросетей, построенных с использованием водной передачи данных (bluetooth, 802.11 ; 802.11a ; 802.11b ; 802.11g. В гла- UWB, FSO). Хорошая и полезная книга, ве, посвященной безопасности, авторы с материалом которой должен быть озрассказывают о различных механиз- накомлен каждый сетевой инженер и мах аутентификации, известных сла- администратор. бых местах, и, что немаловажно, дают рекомендации по усилению защиты  Издательство: «Вильямс» (в частности, описаны алгоритмы ау-  Год издания: 2004 тентификации и защиты данных).  Количество страниц: 304 Достаточно подробно рассмотрен  ISBN: 5-8459-0701-2 материал, касающийся вопросов роу-  Цена: ≈ 325 руб. минга в беспроводных сетях, а также Книга предоставлена Издательским домом механизм QoS (802.11e). Из главы «Ра- «Вильямс».


книжная полка

Введение в IBM Rational Application Developer Джейн Фанг, Колин Йу, Кристина Лау и др.

Материал этой книги написан при участии 12 авторов, каждый из которых является специалистом в своей области. Rational Application Developer является одним из самых популярных средств разработки, тестирования и отладки приложений J2EE на платформе WebSphere. Книга построена таким образом, чтобы даже при наличии минимального опыта работы с IBM Rational

Application Developer вы могли сразу приступить к написанию какого-либо проекта. Также следует отметить, что каждая глава является самодостаточной частью материала, т.е. изложение ведется непоследовательно. Весь материал носит сугубо практический характер – каждый вопрос и тема объясняются на примере какого-либо упражнения. Спектр рассмотренных тем очень широк: разработка Java-приложений, Web-разработка, технологии работы с базами данных, XML, компоненты Enterprise JavaBeans, Java Messaging Service и компоненты управляемые сообщениями, Web-службы, дополнительные вопросы, связанные с J2EE (программирование на основе аннотаций, создание расширенных EAR-файлов для WebSphere, безопасность J2EE). Подробно рассмотрены вопросы создания Java приложений с графическим интерфейсом,

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

    

Издательство: «Кудиц-Образ» Год издания: 2006 Количество страниц: 592 ISBN: 5-91136-010-1 Цена: ≈ 511 руб. Книга предоставлена издательством «КудицОбраз».

Oracle 9i. Оптимизация производительности Ричард Дж. Нимик

Это издание является переводом официального авторизованного издания Oracle press. Сразу стоит отметить, что эта книга подготовлена профессионалами и для профессионалов. Традиционно для администраторов и разработчиков баз данных тема оптимизации является одной из основных сфер деятельности. Весь изложенный материал в книге относится к Oracle 9i/8i.

№6, июнь 2006

Несмотря на то что уже давно доступна версия 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. Отличное и в своем роде уникальное издание. Рекомендую!

    

Издательство: «Лори» Год издания: 2006 Количество страниц: 726 ISBN: 5-85582-250-8 Цена: ≈ 450 руб. Книга предоставлена Издательским домом «Вильямс».

Обзор книжных новинок подготовил Александр Байрак

93



подписка на 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 по каталогу агентства «Пресса России» * **

№6, июнь 2006

годовой полугодовой

95


СИСТЕМНЫЙ АДМИНИСТРАТОР №6(43), Июнь, 2006 год РЕДАКЦИЯ Исполнительный директор Владимир Положевец Ответственный секретарь Наталья Хвостова sekretar@samag.ru Технический редактор Владимир Лукин Редактор Алексей Коршунов Внештатные редакторы Алексей Барабанов Сергей Супрунов РЕКЛАМНАЯ СЛУЖБА тел./факс: (495) 628-8253 Евгения Тарабрина reсlama@samag.ru Верстка и оформление maker_up@samag.ru Дизайн обложки Николай Петрочук По вопросам распространения обращайтесь по телефону: (495) 628-8253 (доб. 120) 107045, г. Москва, Ананьевский переулок, дом 4/2, стр. 1 тел./факс: (495) 628-8253 Сайт журнала: www.samag.ru РУКОВОДИТЕЛЬ ПРОЕКТА Петр Положевец УЧРЕДИТЕЛИ Владимир Положевец Александр Михалев ИЗДАТЕЛЬ ЗАО «Издательский дом «Учительская газета» Отпечатано типографией ГП «Московская Типография №13» Тираж 11000 экз. Журнал зарегистрирован в Министерстве РФ по делам печати, телерадиовещания и средств массовых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.). За содержание статьи ответственность несет автор. За содержание рекламного объявления ответственность несет рекламодатель. Все права на опубликованные материалы защищены.

ЧИТАЙТЕ В СЛЕДУЮЩЕМ НОМЕРЕ: Возможности технологии MS Windows SharePoint Services WSS предоставляют удобный и простой интерфейс для создания и изменения веб-страниц. Однако, используя совместимый с данной технологией редактор, например Microsoft Office FrontPage 2003, можно очень просто повысить функциональность и улучшить внешний вид веб-узла.

Настраиваем Dr. Web Enterprise Suite

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

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

В следующем номере поговорим о соМало кто ставит под сомнение тот провождении работающего сервера факт, что на рабочем месте современ- Sendmail. Он должен не просто рабоного человека должен стоять антиви- тать, а работать эффективно, надёжно русный пакет. Сегодня вирусы берут не и безопасно. И для этого мы подробумением, а числом. В основном, они не нее остановимся на некоторых вопроразрушают информацию – они созда- сах мониторинга, оптимизации и повыют условия для «утечки» коммерчес- шении защищённости сервера. кой информации. Что именно выбрать в качестве основы, чтобы имелась воз- Устанавливаем Systems можность централизованного обнов- Management Server 2003 ления антивирусных агентов, имел- Установка программного обеспечеся единый центр управления и велась ния, обновлений, а также проведение оперативная статистика? Стоит обра- инвентаризации, по мере увеличения тить внимание на антивирусные реше- количества компьютеров в сети, стания масштаба предприятия (Enterprise новится постоянной головной болью Solutions). системного администратора. Мощным средством, способным превратить рутинную работу в удовольствие и сэБоремся со спамом Борьба с непрошенной коммерческой кономить массу времени, становится почтой – спамом, как и прочие задачи, Systems Management Server 2003.

Уважаемые читатели! Спешите оформить подписку на второе полугодие 2006 года! Приобрести новые и старые номера журнала вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

Доставка почтой в любую точку России.

96


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.