98
Роспечать – 81655 Пресса России – 87836 Интер-почта – тел. (095) 500-00-60 Так видит журнал читатель, который забыл оформить подписку: ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Так видит журнал читатель, оформивший подписку: НОВОГОДНИЕ КАНИКУЛЫ ЗАТЯНУЛИСЬ БЫСТРО РАСКУПИЛИ ТИРАЖ НЕОЖИДАННО ЗАКОНЧИЛИСЬ ДЕНЬГИ УЕХАЛ В ОТПУСК ПОСЛЕ ОТПУСКА АВРАЛ НА РАБОТЕ №10(35) октябрь 2005 №10(35) октябрь 2005 подписной индекс 81655 www.samag.ru Всё, что вы хотели узнать Всё, что вы хотели узнать о тонкостях настройки о тонкостях настройки Spamassassin Spamassassin Управляем серверами Управляем серверами в реальном времени в реальном времени с помощью WSH-сценариев с помощью WSH-сценариев ReactOS – свободная ReactOS – свободная альтернатива Windows альтернатива Windows Как управлять Как управлять индексированием сайта индексированием сайта В чем преимущества В чем преимущества HTTP digest-авторизации HTTP digest-авторизации Как посчитать трафик Как посчитать трафик в Linux в Linux Организуем прием Организуем прием спутникового вещания спутникового вещания Настраиваем автоответчик Настраиваем автоответчик на базе Linux на базе Linux

035 Системный Администратор 10 2005

Embed Size (px)

DESCRIPTION

№10(35) октябрь 2005 подписной индекс 81655 www.samag.ru Всё, что вы хотели узнать Всё, что вы хотели узнать о тонкостях настройки о тонкостях настройки Spamassassin Spamassassin Настраиваем автоответчик Настраиваем автоответчик на базе Linux на базе Linux Н Е О Ж И Д А Н Н О Н О В О Г О Д Н И Е

Citation preview

Page 1: 035 Системный Администратор 10 2005

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

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

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

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

НОВОГОДНИЕ

КАНИКУЛЫ

ЗАТЯ

НУЛИСЬ

БЫСТР

О РАСКУПИЛИ

ТИРА

Ж

НЕОЖ

ИДАННО

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

ЕНЬГИ

УЕХАЛ В

ОТП

УСК

ПОСЛЕ ОТП

УСКА

АВРАЛ Н

А РАБОТЕ

№10

(35)

окт

ябрь

200

5

№10(35) октябрь 2005подписной индекс 81655www.samag.ru

Всё, что вы хотели узнать Всё, что вы хотели узнать о тонкостях настройки о тонкостях настройки SpamassassinSpamassassin

Управляем серверами Управляем серверами в реальном времени в реальном времени с помощью WSH-сценариевс помощью WSH-сценариев

ReactOS – свободная ReactOS – свободная альтернатива Windowsальтернатива Windows

Как управлять Как управлять индексированием сайтаиндексированием сайта

В чем преимущества В чем преимущества HTTP digest-авторизацииHTTP digest-авторизации

Как посчитать трафикКак посчитать трафикв Linuxв Linux

Организуем прием Организуем прием спутникового вещанияспутникового вещания

Настраиваем автоответчикНастраиваем автоответчикна базе Linuxна базе Linux

Page 2: 035 Системный Администратор 10 2005
Page 3: 035 Системный Администратор 10 2005

1№10, октябрь 2005

оглавление

ТЕНДЕНЦИИ3

Agnitum – путь к признаниюМаленькая программа-антишпион положила начало известному персональному брандмауэру – Agnitum Outpost.

6

ИНТЕРВЬЮ

РЕПОРТАЖ

4

Роман Марков[email protected]

Как посчитать трафик в LinuxРешаем задачу с помощью ipcad.

18

Александр Кузнецов[email protected]

Scientific Linux – выбираем решение корпоративного уровня по цене носителяОбзор русифицированной версии дистрибутива.

22

ReactOS – свободная альтернатива Windows. Слухи и реальностьДелимся впечатлениями от знакомства с операцион-ной системой ReactOS.

24

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

В чем сильные и слабые стороны HTTP digest-авторизацииПринципы работы digest-авторизации: правда и вы-мысел.

44

Создаем загружаемый Flash-диск с FreeBSD и DOS. Часть IIСозданный диск – инструмент, которым нужно умело воспользоваться.

28

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

Linux/BSD как бастион на пути вирусовСхема построения защиты сети.

34

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

Управляем серверами в реальном времени с помощью WSH-сценариевПишем сценарий для автоматизированного управле-ния серверами Windows при работе с ИБП.

66

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

Как программы на Си взаимодействуют с сервером БД PostgreSQLДобьемся от приложения максимального быстродейс-твия.

60

Владимир Мешков[email protected]

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

Блокируем внешние устройства с помощью GFI LANguard P.S.C.Контролируем использование сменных носителей в се-ти вашей компании.

32

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

Цифровое небо, илиОрганизуем прием спутникового вещанияКак настроиться на спутниковый канал.

79

Антон Борисов [email protected]

Антиотладка: старые приемы на новый ладАнтиотладочные приемы вермен MS-DOS и debug.com возвращаются, чтобы снова работать в Windows 2000/XP/2003.

52

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

WEB

Как управлять индексированием своего сайтаЭффективное использование robots.txt.

40

Алексей Мичурин[email protected]

HARDWARE

Настраиваем автоответчик на базе LinuxРеализация решения на основе программы vgetty.

70

Павел Закляков[email protected]

История взлёта и падения OS/2 – одной из самых интересных операционных систем

82

Алексей Коршунов[email protected]

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

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

51, 59 BUGTRAQ

92

Профессия – убивать спамВсе, что вы хотели узнать о тонкостях настройки Spamassassin.

10

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

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

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

ПРОГРАММИРОВАНИЕ

Конференция CiscoExpo’2005Николай Никульшин

[email protected]

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

Как же я безлюбимого журнала?

И у менятакая же беда

Мужики,где журнал

взяли?

Почему я до сих порэтого не сделал?!

Оформилиподписку!

Принес номерна работу,

«увели» почитать

Лучше каждомуполучать отдельныйэкземпляр журнала

Я забылподписаться!

А можно ещёуспеть?

Информацияо подпискена 94 стр.

Летим скореена почту!

Page 4: 035 Системный Администратор 10 2005

2

электронное приложение

нимается редакция журнала «Систем-ный администратор». В качестве авто-ров выступают представители русско-говорящего сообщества Open Source. К публикации своих материалов при-глашаем всех желающих, обладающих определенными знаниями и навыками в рассматриваемой области и умени-ем в доступной форме подавать мыс-ли читателям. Уточнить информацию об авторстве вы можете по электрон-ному адресу [email protected].

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

Выпуски приложения распростра-няются бесплатно в электронном ви-де (в формате файлов PDF). Теку-щая периодичность издания – один раз в 3 недели. Для получения досту-па к файлам с «Open Source» необхо-димо пройти регистрацию на сайте http://osa.samag.ru. После регистрации каждый пользователь может скачать через браузер или получить на e-mail все вышедшие выпуски приложения, а также подписаться на анонсы новых или на автоматическое получение на e-mail файлов с ними.

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

Главный редактор приложения Дмитрий Шурупов

Редакция жур-нала «Систем-ный админист-ратор» спешит обрадовать всех п о ч и т а т е л е й п р о г р а м м н о -го обеспечения с открытым ко-дом – в ноябре

планируется выпуск первого номера электронного издания «Open Source».

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

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

Ключевая цель «Open Source» – стать профессиональным специали-зированным компьютерным издани-ем, производящим все стадии отбора и обработки попадающих в него ма-териалов редакторами и корректора-ми уже сформировавшегося печатно-го журнала. Тематика приложения ох-ватит Free and Open Source Software во всем многообразии, что подразу-мевает собой:

! теоретические сведения, лежащие в основе множества ПО с открытым кодом и образовавшегося вокруг него сообщества;

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

! обзоры новых и готовящихся к вы-ходу продуктов Open Source;

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

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

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

Поддержкой «Open Source» и ра-ботой над выпусками приложения за-

Спешите читать электронное приложение к нашему журналу – «Open Source»

Page 5: 035 Системный Администратор 10 2005

3№10, октябрь 2005

тенденции

OpenOffice.org представил финальную версию 2.0Успешно отметив 5-летний юбилей 13 октября, проект сво-бодного офиса через неделю выпустил и финальный релиз своего продукта версии 2.0. OpenOffice.org отныне по умол-чанию работает с основанным на открытых стандартах фор-матом OASIS OpenDocument. В релизе представлен фильтр для WordPerfect, улучшенная оболочка для работы с базами данных и функция подсчета слов, усовершенствованный эк-спорт в PDF. Кроме того, появился новый многопанельный вид, CustomShapes, совместимые с AutoShapes от Microsoft, анонсирована возможность создания форм на базе стан-дарта W3C XForms и задания таблиц внутри уже сущест-вующих (так называемые «вложенные таблицы»), подде-ржка цифровых подписей. Изменения в DataPilot (аналог MS Excel PivotTable) превратили OpenOffice.org Calc в мощ-ный инструмент анализа данных.

Взломаны сайты OpenSUSE и Spread FirefoxВ самом начале месяца атаке иранских хакеров из группы IHS подвергся ресурс openSUSE, а уже через несколько дней взлому был в очередной раз подвержен сайт Spread Firefox. В первом случае Open Source-инициатива Novell имеет отдаленное отношение к произошедшему: свой взлом авторы посвятили протесту против «Договора о не-распространении ядерного оружия», принятого иранским правительством. А вот Spread Firefox, занимающийся про-движением свободного браузера от Mozilla, вновь постра-дал из-за уязвимости, найденной в используемом на сер-вере программном обеспечении. На этот раз виновницей оказалась wiki-система с открытым кодом TWiki.

Nessus 3 уже не будет открытымИсходный код одной из наиболее популярных в мире ути-лит безопасности -- Nessus -- больше не будет доступен для всех. Автор программы объяснил это известие тем, что распространение продукта в рамках Open Source со-здавало конкуренцию его компании. Тем не менее изме-нение схемы лицензирования затронет только еще не вы-пущенный Nessus 3, а обновления к существующим ныне релизам Nessus 2.x останутся лицензированными под GNU GPL: «Nessus 3 будет бесплатным... Но не будет выпущен под GPL», сообщил автор Nessus в почтовой рассылке про-граммы. Стоит отметить, что уже вышедшие релизы Nessus не могут быть лишены лицензии GPL, поэтому можно ожи-дать поддержки и дальнейшего развития свободной вер-сии проекта сторонними энтузиастами.

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

твует POSIX, содержит более 300 UNIX-программ, функци-онирует на платформах 386, 486, Pentium и т. п., а распро-страняется по BSD-подобной лицензии.

Linux обретает трехмерный десктоп от SunНаглядная демонстрация трехмерных возможностей рабо-чего стола в Linux стала возможной благодаря первому ста-бильному релизу нового проекта – LG3D LiveCD 2.3. Систе-ма базируется на SLAX (Slackware на LiveCD), и в нее ин-тегрирована Java-технология Project Looking Glass компа-нии Sun Microsystems, которая и предоставляет пользова-телю 3D-вид окон и визуализации десктопа и приложений. В первую стабильную версию LG3D также вошли драйверы для видеокарт NVIDIA и некоторые дополнительные прило-жения (веб-браузер Firefox, IM-клиент Gaim и др.).

WINE перешел в статус бета12 долгих лет понадобилось разработчикам для того, что-бы добиться качественно нового уровня стабильности в ра-боте WINE. 25 октября состоялся выход WINE версии 0.9, что ознаменовало новую веху в развитии свободной реали-зации Windows API для UNIX/Linux-систем – официальный переход в статус «бета». Несмотря на это, авторы не уста-ют предупреждать, что и сейчас в их продукте могут обна-ружиться проблемы. Однако по крайней мере «ожидается, что большинство приложений хотя бы успешно пройдут ус-тановку и сделают что-нибудь полезное».

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

Page 6: 035 Системный Администратор 10 2005

4

репортаж

Конференция проводилась в два этапа – 14 октября в учебных центрах Cisco System состоя-

лись семинары, посвященные актуаль-ным темам современного мира сете-вых технологий; и основная часть про-шла 17-19 октября в гостинице Radisson Славянская.

Первые два дня основной части конференции начались с пленарных докладов. Первое пленарное заседа-ние было посвящено построению ин-теллектуальных информационных се-тей (IIN). С докладом выступил Алан Фиокко (Alain Fiocco), директор подраз-деления маркетинга продуктов и ре-шений Cisco Systems. Второе пленар-ное заседание, проходившее 18 октяб-ря, включало в себя выступления ру-ководителя IBM Global Services в Рос-сии Сергея Яксевича и президента по развивающимся рынкам Cisco Systems Пола Монтфорда (Paul Mountford) («Ос-новные тенденции и перспективы развития информационных техноло-гий» и «The Transformation of Emerging Markets» соответственно).

После пленарных докладов работа

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

Для слушателей технических пото-ков 17-18 октября по вечерам были ор-ганизованы открытые дискуссии на та-кие темы, как сети хранения данных, решения по безопасности и передачи голоса, оптические и городские сети, сервисные услуги и программы Cisco.

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

На текущий момент в России, по данным компании IDC, насчиты-вается порядка 1 000 000 предпри-ятий, относящихся к сегменту пред-приятий малого и среднего бизнеса (SMB). Естественно, такой сегмент

рынка нельзя оставлять без пристального вни-мания. Как раз для пред-приятий SMB, Cisco пред-ставило свое сетевое ре-шение – Cisco Busines Communacations Solution, призванное уменьшить расходы и улучшить про-изводственные показате-ли. В рамках этого реше-ния было анонсировано новое семейство коммута-торов SMB-класса Catalyst Express 500 Series, а так-же дополнение к портфе-лю продуктов IP-связи, включающее в себя но-вые приложения IPC и се-мейство IP-телефонов с поддержкой XML.

Так , д ля предпри -ятий с количеством со-

Конференция CiscoExpo’2005В середине октября в Москве прошла ежегодная конференция CiscoExpo. Это крупнейшее

в России мероприятие подобной тематики. Число участников конференции приблизилось

к 1500 человек.

трудников от 20 до 250, основой ре-шения является коммутатор Cisco Catalyst Express 500 и IP-решение Communication Express Solution, пред-ставляющее собой программное обес-печение Cisco CallManager Express + Cisco Unity Express, установленное на маршрутизатор Cisco Integrated Router (ISR).

Новые коммутаторы серии Catalyst Express 500 специально предназна-чены для предприятий, желающих эксплуатировать объединенные се-ти. Это семейство коммутаторов Layer 2-manager Fast Ethernet и Gigabit Ethernet, работающих на скорости сре-ды передачи, обеспечивают безопас-ную сетевую платформу, оптимизи-рованную для передачи данных, бес-проводного трафика и голоса. Новые коммутаторы легко конфигурируются с помощью приложения Cisco Network Assistant 3.0, позволяющего управлять устройствами через веб-браузер. Уст-ройства уже имеют предварительные настройки и после включения в сеть сразу готовы к работе. Все это поз-воляет быстро и легко конфигуриро-вать сети и использовать такие техно-логии, как беспроводные локальные сети и IP-связь.

Для компаний со штатом от 250 до 1500 человек был представлен мо-дельный ряд маршрутизаторов семейс-тва Cisco Catalyst 2960 Series в пяти ап-паратных конфигурациях, пришедших на смену коммутаторам Catalyst 2950 G/T и 2970. Данные коммутаторы под-держивают IPv6, Enhanced QoS, Power over Ethernet (передача электропита-ния через медные сетевые провода), аутентификацию 802.1х и контроль до-ступа NAC. Благодаря мастеру быст-рой установки и встроенной системе управления значительно упростилась задача конфигурирования устройства и его ввод в эксплуатацию.

Также много внимания на выставке было уделено защите от вирусов и спа-ма. Было представлено решение Cisco Clean Access, сканирующее хосты

Page 7: 035 Системный Администратор 10 2005

5№10, октябрь 2005

репортаж

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

В рамках конференции компания Cisco совместно с компанией «S-Terra» представили первое сертифицирован-ное в России VPN-решение. Для этого потребовалось включить в продукты Cisco российские алгоритмы шифро-вания и получить сертификаты.

Также на конференции присутс-твовали такие компании, как APC, IBM, Equant, Step Logic, EMC, CTI, I-Teco, Inline, Red Center, Technoserv IS, Diamond Communications Inc и мно-гие другие. Компания IBM привезла на выставку свое серверное реше-ние E-server BladeCenter, включаю-щий в себя серверы различных аппа-ратных платформ, совместно исполь-зующие единую интегрированную ин-фраструктуру IT. Данная платформа представляет собой шасси, в которое

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

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

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

организации мероприятия можно ожи-дать от лидера рынка сетевой безопас-ности? Cisco сейчас занимает четверть рынка информационной безопасности в России и сдавать свои позиции не на-мерена. Продукты пользуются стабиль-ным спросом. Решения активно прода-ются по лизингу (до 20% всех продаж – лизинг). В целом, можно сказать, что данная конференция была нацелена на популяризацию решений Cisco Systems в сегменте предприятий малого и сред-него бизнеса. Пока рано говорить о ка-ких-либо конкретных результатах кон-ференции CiscoExpo 2005. Но уже сей-час можно с уверенностью сказать, что популярность данного мероприя-тия растет из года в год. На CiscoExpo 2005 из-за огромного количества за-регистрировавшихся посетителей при-шлось раньше запланированного за-вершить регистрацию, а саму конфе-ренцию «растянуть» на несколько дней. 90% всех посетителей – представите-ли IT-индустрии (50% из этого коли-чества – системные администраторы, 25% – IT-менеджеры, 20% – руководи-тели IT-подразделений).

Николай Никульшин, фото автора

Page 8: 035 Системный Администратор 10 2005

6

интервью

Когда и кем была основана компа-

ния, с чего начинали?

Михаил Пеньковский, коммерчес-

кий директор: начало развития ком-пании Agnitum было положено на сты-ке 1998-99 годов двумя студентами Балтийского Государственного Техни-ческого Университета. Проводя поис-ки необходимой для обучения инфор-мации в сети Интернет, они пали жер-твами так называемых «троянских ко-ней». В результате у них были украде-ны пароли доступа в Интернет, компью-теры начали проявлять непонятную ак-тивность при подключении к сети, что, разумеется, не поднимало настроения владельцам. Изучив принципы работы и распространения таких программ, они предприняли первую попытку про-тивостояния этим вирусам. В результа-те появилась первая утилита, получив-шая название Jammer, которая вы-полняла задачу предотвращения распространения вредоносного ко-да на компьютерах пользователей. Она блокировала попытки вирусов типа «троянский конь» активизиро-вать какую-либо деятельность, оп-ределяла сетевую активность по оп-ределенным портам и блокировала ее. Сначала Jammer был бесплатен, его выложили на собственноруч-но сделанный сайт для свободно-го скачивания. К большому удивле-нию авторов программа стала поль-

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

Почему о ваших продуктах узнали

пользователи во всем мире?

М.П.: Глобальный толчок роста попу-лярности Jammer придала статья в ази-атской версии «Wall Street Journal», о том, что некая правительственная компания пыталась при помощи троя-нов следить за компьютерной деятель-ностью своих сотрудников. Это выяс-нилось после того, как один из них скачал и установил на своем компью-тере упомянутую утилиту Jammer, ко-торая и позволила увидеть направле-ние активности этого трояна. После

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

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

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

Agnitum –Agnitum –путь к признаниюпуть к признанию

Создавая 7 лет назад свою первую программу-антишпион для собственных нужд, Михаил

Захряпин и Алексей Елагин не подозревали, что положили начало самому известному сегодня

персональному брандмауэру – Agnitum Outpost.

Короткая справкаКомпания Agnitum была основана в конце 90-х го-дов – время, когда в России начался стремитель-ный рост использования интернет-технологий. Быстрому росту популярности компании способс-твовал резонанс, который вызвал в зарубежной прессе первый продукт ее основателей – утили-та для обнаружения хакерских атак Jammer. При-знание мировой IT-общественностью основного продукта – персонального брандмауэра Outpost Firewall Pro позволило компании Agnitum занять лидирующие позиции на рынке персональных брандмауэров.

Page 9: 035 Системный Администратор 10 2005

7№10, октябрь 2005

интервью

ло. Тогда же пришло понимание того, что рынок брандмауэров (Firewall) еще не развит и конкуренции на нем прак-тически нет, хотя с повсеместным раз-витием инфраструктуры подключе-ния к Интернету продукты такого типа должны становиться все более востре-бованными. На тот момент наиболее известными представителями данно-го рынка являлись AtGuard – локаль-ный Firewall, разработанный фирмой WRQ Inc и ConSeal PC Firewall от ком-пании Signal 9 Solutions. Такое малое количество популярных в тот момент персональных брандмауэров, а также их ориентация на IT-профессионалов подтолкнуло компанию Agnitum к при-нятию серьезного решения о разра-ботке нового продукта, не уступающе-го по надежности основным конкурен-там и при этом обладающего дружест-венным пользовательским интерфей-сом, – первой версии Agnitum Outpost Firewall. Создание нового продукта потребовало серьезных финансовых вложений. В общем то, это означало, что на карту была поставлена судь-ба всей компании. В итоге в 2001 году вышел первый релиз Agnitum Outpost Firewall. Удачным маркетинговым хо-дом оказался выпуск двух версий – бесплатной и платной, так как бес-платная версия не сильно отличалась от платной. Это позволило использо-вать хороший маркетинг «из уст в ус-та» (когда отзывы о достоинствах про-дукта передавались специалистами при обмене опытом и дружеских бе-седах), а также положительные откли-ки в прессе.

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

Сегодня основатели компании Agnitum – Михаил Захряпин и Алексей Елагин являются Управляющим и Гене-ральным директором соответственно и вместе принимают решения о даль-нейшем развитии и продвижении собс-твенных программных продуктов.

Коллектив компании Agnitum на се-годняшний день состоит из 31 челове-ка, в связи с расширением и выходом нового продукта Outpost Antispyware сегодня имеется около 5 вакансий. Организация работы – офисная. От-каз от аутсорсинга был обусловлен

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

Что означают названия – самой ком-

пании – Agnitum и главного програм-

много продукта – Outpost?

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

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

Расскажите подробнее о корпора-

тивной версии продукта – Agnitum

Office Firewall – как развивается,

что нового в проекте?

Алексей Белкин, постановщик за-

дач: В декабре 2005 года планирует-ся выпустить новую версию продук-та, в которой будут учтены все полу-ченные нами замечания и пожела-ния от пользователей первой версии. По многочисленным просьбам систем-ных администраторов, использующих Agnitum Office Firewall 1, в новой вер-сии будут реализованы новые функ-ции, значительно упрощающие адми-нистрирование продукта:! Интеграция Antispyware.! Политики для создания различных

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

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

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

смотр журналов! Удаленное развертывание при по-

мощи RPC. Удаленная установка через Group Policy не всегда явля-ется удобным и наглядным реше-нием.

Также по просьбам потенциаль-ных клиентов внесены изменения в лицензирование офисной версии Agnitum Outpost: минимальное коли-чество клиентских лицензий сниже-но до 5. Мы считаем, что это позволит более экономично использовать дан-ный продукт даже в самых малых се-тях. При необходимости увеличить ко-личество лицензий не придется уста-навливать новый дистрибутив – до-статочно будет просто ввести другой серийный номер. Стоимость офисной версии продукта составляет 40$ за од-ну клиентскую лицензию.

Я присутствовал в декабре 2004 го-

да на презентации «Agnitum Office

Firewall», которая сама по себе оказа-

лась очень оригинальной – она про-

ходила в Петербурге, на борту леген-

дарного крейсера «Аврора». А поче-

му именно в Питере? Ведь подобные

презентации, как правило, старают-

ся проводить в Москве.

М.П.: Ну, во-первых, мы именно пи-терская компания. Все основатели

Михаил Пеньковский: «Outpost -это укрепление государственных границна дальних подступах для предотвращенияи сдерживания внезапных нападенийврага»

Page 10: 035 Системный Администратор 10 2005

8

интервью

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

Какой политики распространения

своих продуктов придерживается

компания Agnitum?

М.П.: В данный момент продукт рас-пространяется двумя способами – ко-робочная версия и получение лицен-зии и дистрибутивов через Интернет. За рубежом количество лицензий, рас-пространяемых через Интернет, значи-тельно превышает объем продаж коро-бочных версий. В России из-за несо-вершенства развития on-line-платеж-ных систем и определенных предрас-судков пока различие не столь велико – 40% коробочных версий против 60% on-line. Кстати, цена коробочной и online-лицензий одинаковы, однако активиру-ется только последняя версия продук-та, поэтому если программа установ-ки на дистрибутивном диске устарела, придется скачать новую. Коробочные версии распространяются через реги-ональных реселлеров, а online-версия – напрямую через компанию Agnitum. По-мимо этого имеется вариант лицензи-рования для учебных и некоммерчес-ких организаций. Такие компании по-лучают 30% скидку на наши продукты. Данный тип лицензирования недосту-пен в коробочном варианте.

Вышел в свет ваш новый продукт –

Outpost Antispyware. Что это, собс-

твенно, такое?

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

могут существенно затруднить работу с компьютером, а зачастую и нанести материальный ущерб (например, не-санкционированные рассылки и на-крутки счетчиков создают паразитный трафик и т. д.). Поэтому мы включили защиту от spyware в последнюю вер-сию Outpost Firewall Pro 3.0, чтобы раз и навсегда оградить вас от таких угроз. Данный продукт – это интегрируемый с Outpost Firewall Pro плагин, который в режиме реального времени монито-рит поведение системы и ее приложе-ний и отслуживает несанкционирован-ные изменения. Продукт использует не только сигнатуры известных типов spyware-программ, но и эвристический контроль за поведением системы, что позволяет надежно противостоять да-же еще не включенным в базы сигна-тур угрозам. В данный момент доступ-на персональная версия Antispyware. Интеграция в офисную версию ожи-дается в конце 2005 года.

Чем Agnitum Outpost Antispyware от-

личается от известных продуктов

этого же направления?

А.Б.: Во-первых, это встроенное реше-ние, которое штатным образом присо-единяется в виде дополнительного мо-дуля к Outpost Firewall, тем самым ис-ключая возможные системные конф-ликты (например, когда активность фа-ерволла будет воспринята Antispyware другого производителя как опасная, и наоборот. В случае использования интегрированного решения такие си-туации исключены. Во-вторых, продукт бесплатен для пользователей Agnitum Outpost Firewall, так как не является самостоятельным продуктом, а пред-

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

Какие направления развития

компании Agnitum являются

приоритетными?

М.П.: В данный момент мы ра-ботаем над созданием Agnitum Antispyware для офисной версии Outpost Firewall, улучшением фун-кционала текущей версии. Как я упомянул ранее – продолжается активная работа над новой вер-сией Outpost Office Firewall.

Есть ли в планах компании создание

принципиально новых программных

продуктов?

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

Расскажите о международных про-

ектах и клиентах компании.

М.П.: В последнее время мы стараемся постоянно развивать свое присутствие на рынке. Для этого было открыто Тор-говое представительство Agnitum в Се-верной Америке. В Германии ребрен-дингом наших продуктов занимается компания Buhl Data Service, в Японии – компания Canon. Novell выбрала тех-нологии ядра Outpost Firewall Pro для использования в Novell Client Firewall, а английский лидер антивирусного ПО – Sophos включил исходный код Outpost Firewall Pro в свое новое интег-рированное решение по безопасности. Западные университеты предпочитают Outpost за соотношение цена/качест-во, так как выделение им средств на IT-решения жестко нормировано и посто-янно контролируется.

Роман Марков

Алексей Белкин: «Угрозой заражения spyware пренебрегатьнельзя � такие программы могут существенно затруднитьработу с компьютером, а зачастую и нанестиматериальный ущерб»

Page 11: 035 Системный Администратор 10 2005

9№10, октябрь 2005

итоги конкурса

практический опыт работы с сетевыми технологиями, а не-которые незадолго до участия в турнире прошли обучение в Учебном центре ВМК МГУ & SoftLine Academy по програм-ме «Администрирование сетей Microsoft» и уже получили статус сертифицированных специалистов MCSA.

По итогам акции был организован «круглый стол», на ко-тором состоялось награждение победителей призами – оборудованием от ZyXEL и Microsoft, годовой подпиской на журнал «Системный администратор», а также пригла-шением пройти бесплатное обучение в центре ВМК МГУ & SoftLine Academy. Перед участниками «круглого стола» вы-ступил руководитель команды H0lid@ys (студент МИЭМ), занявшей первое место в турнире. Он представил проект, схема которого приведена на рис. 1. Планируются публи-кации, посвященных описаниям проектов команд-победи-телей IT-турнира. Надеемся, технические описания реаль-ных выполненных проектов с комментариями профессио-налов помогут вам применить лучшие практики проекти-рования в своей ежедневной работе.

го офиса. Управление сетью также долж-но быть упрощено по сравнению с одно-ранговой сетью. Уровень поставленной за-дачи соответствовал уровню технической подготовки специалиста MCSA – Microsoft Certified Systems Administrator (http://www.it-university.ru/courses/itprog-msn.asp).

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

рое предлагало в жестких временных рамках реализовать все этапы стандартного сетевого проекта.

IT-турнир студенческих команд «Кубок сетевых проек-тов Microsoft» прошел с 4 апреля по 1 октября на базе Учеб-ного центра ВМК МГУ & SoftLine Academy (www.it-university.ru). Мероприятие было организовано компаниями Microsoft, SoftLine, ZyXEL и факультетом вычислительной математики и кибернетики МГУ им. М.В. Ломоносова. К участию пригла-шались студенты и аспиранты всех московских вузов. В хо-де турнира команды разработали проект компьютерной се-ти небольшого предприятия, реализовали его на реальном оборудовании, составили комплект документации и высту-пили с докладами перед экспертной комиссией.

В турнире приняли участие 290 человек, 28 команд про-шли предварительный отбор и получили техническое за-дание. 10 команд успешно справились с заданием, раз-работали собственные проекты, построили компьютер-ную сеть и показали ее работоспособность. Команды за-щищали свои проекты перед членами комиссии, в состав которой вошли представители компаний Microsoft, ZyXEL, Softline, преподаватели московских вузов (МИЭМ, МГАПИ, МИЭТ, МАИ) и технический специалист из журнала «Сис-темный администратор».

Несмотря на то, что все участники получили одинаковое техническое задание, каждая команда наделила свой про-ект индивидуальными чертами. Некоторые решения выгод-но отличались нестандартным подходом и оригинальным исполнением (ознакомиться с краткими описаниями проек-тов-победителей можно на сайте http://www.it-university.ru/center/it-project/windescr.asp). Многие участники уже имели

Растет новое поколение системщиков

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

Компания обновила все клиентские компьютеры до Microsoft Windows XP Professional, установила три сервера с OC Microsoft Windows Server 2003 Standard Edition в основном офисе и два серве-ра в дополнительном офисе. Приобрете-но также беспроводное и ADSL-оборудо-

вание компании ZyXEL и выполнено под-ключение офисов к Интернету на скорости 7,5 Мбит/с с выделением по одному стати-ческому IP-адресу на каждый офис. Для мобильных пользователей, приезжающих в офисы, нужно организовать беспровод-ной доступ к сети.

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

Рисунок 2. Существующая IT-инфра-структура

Рисунок 1. Схема сети, разработанной командой-призером

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

обучаться и легко справляться с чудовищной нехваткой времени. Завершившийся в октябре

студенческий IT-турнир «Кубок сетевых проектов Microsoft» в очередной раз это доказал.

Page 12: 035 Системный Администратор 10 2005

10

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

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

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

Тактика и используемые системы вооруженияВ основе Spamassassin лежит метод детектирования спа-ма по ряду характерных признаков. Некоторые из них пред-ставлены в таблице 1. Каждому признаку назначается оп-

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

Профессия – убивать спамПрофессия – убивать спамВсе, что вы хотели узнать о тонкостяхВсе, что вы хотели узнать о тонкостях

настройки Spamassassinнастройки Spamassassin

Спам, без преувеличения, одна из серьезнейших проблем современного Интернета. На борьбу

с этим явлением мобилизованы десятки программ. И наиболее успешным продуктом является,

пожалуй, Spamassassin.

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

Page 13: 035 Системный Администратор 10 2005

11№10, октябрь 2005

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

Spamassassin также может проверять принадлежность адреса отправителя одному или нескольким блок-листам реального времени (RBL). Опять-таки результат такой про-верки лишь добавит баллы в общую копилку.

Рассматриваемый фильтр умеет взаимодействовать и с системами, основанными на сигнатурном анализе (Razor, Pyzor, DCC). По умолчанию включен только Pyzor, поскольку DCC не является открытой системой, а сервис Razor полностью бесплатен только в случае персонально-го использования.

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

Развертывание комплекса на местностиУстановка выполняется традиционно: на FreeBSD лучше всего воспользоваться коллекцией портов; пользователи Linux могут установить Spamassassin из исходных кодов ли-бо поискать в сети готовый прекомпилированный пакет для своего дистрибутива. Более того, поскольку Spamassassin разработан на Perl, его можно установить непосредственно из коллекции CPAN, как и любой другой Perl-модуль:

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

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

Замечание: при первой установке из коллекции пор-тов вы получите представленное на рис. 1 диалоговое окно, где сможете отметить нужные параметры визуаль-но, без ввода дополнительных параметров в командной строке. Ваш выбор будет сохранен в /var/db/ports/p5-Mail-SpamAssassin/options, и при последующих установках (на-пример, при обновлении версии пакета) вы уже не будете получать этот диалог.

Поясню смысл приведенных выше опций.

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

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

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

Запросы SPF (Sender Policy Framework, см. http://spf.pobox.com) позволяют использовать систему DNS для про-верки того, является ли IP-адрес источника сообщения ле-гитимным SMTP-сервером. Для SMTP-серверов админист-ратор размещает в соответствующей зоне DNS запись типа TXT, информирующую о том, что с данного IP-адреса пре-дусмотрена отправка сообщений электронной почты. Если для адреса источника такая TXT-запись отсутствует, то по-лучатель вправе отклонить запрос на соединение.

Yahoo DomainKeys (см. http://antispam.yahoo.com/domainkeys) действует аналогично SPF, но вместо простой пометки хранит в соответствующей зоне публичный ключ SMTP-сервера, позволяющий верифицировать цифровые подписи получаемых электронных сообщений (которые под-писываются автоматически при отправке).

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

Таблица 1. Примеры характерных признаков спама

Таблица 2. Некоторые опции, полезные при инсталляции

root# perl -MCPAN -e shellcpan> o conf prerequisites _ policy askcpan> install Mail::SpamAssassincpan> quit

# cd /usr/ports/mail/p5-Mail-SpamAssassin# make# make install

СправкаПакет Spamassassin был разработан Джастином Мэйсоном (Justin Mason) на базе кода программы filter.plx. Весной 2001 го-да проект был выложен на сайте Sourceforge.net. В настоящее время Spamassassin разрабатывается силами Apache Software Foundation и начиная с версии 3.0 выпускается под лицензией Apache. Spamassassin лежит в основе ряда других антиспамовых решений, например McAfee SpamKiller.

Page 14: 035 Системный Администратор 10 2005

12

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

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

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

Также не забудьте добавить следующую строчку в /etc/rc.conf:

Это необходимо для того, чтобы демон Spamassassin мог запускаться из стартового сценария /usr/local/etc/rc.d/sa-spamd.sh.

Дислокация и приведение в полную боевую готовностьПо умолчанию (установка из портов, prefix не использует-ся) исполнимые файлы пакета размещаются в /usr/local/bin. Размещение и назначение основных конфигурацион-ных файлов разъясняется в таблице 3.

Обратите внимание, что настоятельно не рекомендуется вносить изменения в файлы, размещаемые в каталоге /usr/local/share/spamassassin, поскольку они будут перезаписа-ны при обновлении версии пакета, и вы потеряете все свои настройки. Если вам нужно что-то изменить, просто укажите строку с нужными параметрами в рабочем конфигурацион-ном файле в каталоге /usr/local/etc/mail/spamassassin.

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

Настройка набора тестов! required_score N: «Порог срабатывания» фильтра,

то есть количество баллов, при достижении которого сообщение признается спамом. N – число с плавающей запятой. Значение по умолчанию – 5.0.

! score <имя_теста> nL [nN nB nBN]: баллы, назначаемые тесту <имя_теста>. Может быть указано одно значение (общее) или четыре: nL – локальный балл, nN – при ра-ботающих сетевых тестах, nB – при включенном байе-совом анализаторе, nBN – при работающих сетевых тес-тах и статистическом анализаторе.

Имена тестов и значения по умолчанию можно узнать в файле /usr/local/share/spamassassin/50_scores.cf. Чтобы полностью отключить какой-либо тест, присвойте ему зна-чение 0.0.

Сами тесты (как правило – регулярные выражения) на-ходятся в этом же каталоге в других cf-файлах. При же-лании вы можете создавать и свои проверки по аналогии с имеющимися. Как вы можете увидеть, для этого сущес-твует несколько групп правил (header, body, rawbody, meta, uri и др.).

Подробно синтаксис правил описывается на странице справки perldoc Mail::SpamAssassin::Conf.

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

Для этого существует группа параметров, определяю-щих «белые» и «черные» списки:! whitelist_from <адрес_или_шаблон>: отправители, поч-

товый адрес которых соответствует шаблону, рассмат-риваются как доверенные, и почта от них не подверга-ется проверке на спам. Под шаблоном в данном слу-чае понимается запись в стиле командной строки, где символ «*» обозначает любое количество символов, «?» – любой один символ. Например, «*@contora.ru» занесет в «белый» список всех пользователей доме-на contora.ru.

! blacklist_from <адрес_или_шаблон>: аналогично «бе-лому» списку, но теперь отправитель априори рассмат-ривается как спамер, и все письма от него помечаются как спам без дальнейшего анализа.

! whitelist_to <адрес_или_шаблон>: все сообщения на указанный адрес будут передаваться без фильтра-ции. Можно использовать, если владелец адреса же-лает получать всю почту, адресованную ему. Также ре-комендуется устанавливать этот параметр для адреса abuse, чтобы даже в случае неправильной настройки фильтра с вами можно было связаться.

! blacklist_to <адрес_или_шаблон>: все сообщения на ука-занный адрес будут рассматриваться как спам. Напри-мер, таким образом можно организовать «прививки» для статистического анализатора, создав специальный адрес для спама и максимально «засветив» его на про-сторах Интернета (при этом должно быть включено ав-тообучение, см. ниже).

Таблица 3. Размещение конфигурационных файлов

Рисунок 1. Конфигурационный диалог

spamd _ enable="YES"

Page 15: 035 Системный Администратор 10 2005

13№10, октябрь 2005

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

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

Опции сетевых проверокФильтр Spamassassin умеет проводить ряд сетевых тестов, таких как проверка на принадлежность адреса отправителя доверенной сети, поиск IP-адреса в списках RBL, и т. п.

Некоторые параметры, которые вы можете исполь-зовать в своем конфигурационном файле, приведены ниже:! trusted_networks <список_сетей>: перечисленные здесь

сети (в формате CIDR, например: 12.34.56.78/24) будут рассматриваться как доверенные.

! skip_rbl_checks 1 | 0: этим правилом вы можете отклю-чить (значение 1) проверку на принадлежность адре-са отправителя спискам RBL. Это может быть полез-но, если такие проверки вы предпочитаете выполнять другими средствами (например, с помощью spamd или непосредственно правилами MTA), а также если риск потери легальных сообщений для вас неприем-лемо высок.

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

Некоторые параметры:! use_bayes 1 | 0: включает использование статистичес-

кого анализатора.! bayes_auto_learn 1 | 0: разрешает автообучение филь-

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

! bayes-ignore-header <тэг_заголовка>: не анализировать письма, содержащие указанный тэг в заголовке. Может оказаться полезным для отмены повторного анализа уже обработанных (например, вышестоящим провай-дером) сообщений.

! bayes_ignore_from <адрес>: не подвергать анализу пись-ма от указанного адресата.

! bayes_ignore_to <адрес>: не анализировать сообщения, предназначенные указанному пользователю.

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

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

Параметр report_safe указывает на то, что следует де-лать с оригинальным сообщением, если оно будет призна-но спамом: либо оставить как есть (значение 0), либо при-ложить к отчету как вложение (значение 1), либо добавить к отчету как текст (значение 2).

Настройки администратораПомимо описанных выше параметров, влияющих на про-цесс обработки входящих сообщений, существует ряд на-строек, с помощью которых администратор может управ-лять способом хранения данных или загрузкой подключа-емых модулей:! bayes_path <путь_к_базе>: указывает путь к каталогу,

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

! bayes_file_mode <права_доступа>: задаются права до-ступа для вновь создаваемых файлов данных анализа-тора.

! bayes_sql_*: группа правил для настройки доступа к вне-шней БД в случае, если она используется для хране-ния данных анализатора. Подробнее взаимодействие с СУБД будет рассмотрено в одном из следующих раз-делов.

! loadplugin <имя_модуля> [<путь_к_модулю>]: так мож-но подключить дополнительный модуль.

Вспомогательные скриптыЕсли вы устанавливали вспомогательные инструмен-ты, то найти их можно будет в каталоге /usr/local/share/spamassassin/tools. Все они снабжены подробными ком-ментариями или POD-документацией в самом тексте сце-нария. Здесь я приведу лишь краткое описание некото-рых скриптов:! sa-stats.pl – формирует статистику работы фильтра на

основе почтового лог-файла (по умолчанию /var/log/maillog). Пример вывода сценария:

ok _ locales ru en

# ./sa-stats.pl -s 20051013

Report Title : SpamAssassin - Spam StatisticsReport Date : 2005-10-13Period Beginning : четверг, 13 октября 2005 г. 00:00:00Period Ending : пятница, 14 октября 2005 г. 00:00:00

Reporting Period : 24.00 hrs--------------------------------------------------

Note: 'ham' = 'nonspam'

Total spam detected : 737 ( 54.51%)Total ham accepted : 615 ( 45.49%) -------------------Total emails processed : 1352 ( 56/hr)

Average spam threshold : 12.00Average spam score : 17.85Average ham score : 4.66

Spam kbytes processed : 5255 ( 219 kb/hr)Ham kbytes processed : 10632 ( 443 kb/hr)Total kbytes processed : 15887 ( 662 kb/hr)

Spam analysis time : 2057 s ( 86 s/hr)Ham analysis time : 1434 s ( 60 s/hr)Total analysis time : 3491 s ( 145 s/hr)

Page 16: 035 Системный Администратор 10 2005

14

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

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

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

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

списка в SQL-команды для заливки данных во внешнюю БД.

Подразделение AWLAWL (Auto White List) – система, используемая в Spamassassin по умолчанию, начиная с версии 3.0. Принцип работы AWL заключается в следующем: для всех отправителей ведет-ся база данных, в которой сохраняется число обработан-ных сообщений и набранный в сумме балл. При получе-нии письма с адреса, фигурирующего в базе AWL, рас-считывается его «чистый» балл (без учета AWL), а окон-чательный балл проставляется как производное значение от рассчитанного «чистого» и взятого из базы историчес-кого значения.

Например, если ранее с адреса [email protected] было по-лучено два сообщения, набравших в сумме 22.2 балла (см. листинг в предыдущем разделе, поясняющий работу утилиты check_whitelist), и приходит третье письмо с «чис-тым» баллом 1.8, то итоговый балл будет равняться:

где:! St – итоговый балл;! Th – суммарный «исторический» балл;! Ch – количество «исторических» писем;! Sc – «чистый» балл текущего письма (без учета AWL);! f – весовой коэффициент системы AWL.

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

Отключить использование AWL можно, указав в конфи-гурационном файле следующую строку:

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

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

Взаимодействие с MTASpamAssassin может быть подключен практически ко всем популярным почтовым серверам: Sendmail, Postfix, Qmail, Exim, Courier-MTA, Communigate Pro и некоторым другим. Подробные инструкции можно получить на странице http://wiki.apache.org/spamassassin/IntegratedInMta.

Для работы с Sendmail Spamassassin обычно подключа-ется через milter. В сети можно найти несколько «мильте-ров» для работы со Spamassassin.

Мы будем использовать имеющийся в коллекции пор-тов spamass-milter:

После установки нужно будет добавить в /etc/rc.conf строку для автоматического запуска spamass-milter при за-грузке системы:

Наконец, добавляем поддержку этой программы в кон-фигурационный mc-файл Sendmail (обычно соответству-ет доменному имени сервера, например /etc/mail/myserver.ru.mc):

Если вы используете и другие фильтры (например, clmilter из пакета ClamAV), то перечислите их в одной строке «confINPUT_MAIL_FILTERS», поскольку такая запись долж-на быть только одна.

Как вариант, вместо строк MAIL_FILTER можно исполь-зовать INPUT_MAIL_FILTER. В этом случае второе опреде-ление не потребуется.

Теперь осталось пересобрать cf-файл, запустить Spamassassin и spamass-milter и перезагрузить Sendmail:

use _ auto _ whitelist 0

auto _ whitelist _ factor 0.5

# cd /usr/ports/mail/spamass-milter-0.3.0# make install

spamass _ milter _ enable="YES"

MAIL _ FILTER( spamassassin�, ↵ S=local:/var/run/spamass-milter.sock, F=, ↵ T=C:15m;S:4m;R:4m;E:10m�)dnldeÞne( confINPUT _ MAIL _ FILTERS�, spamassassin�)dnl

# cd /etc/mail# make# make install

# ./check _ whitelist

-1.4 (-4.3/3) -- [email protected]|ip=none11.1 (22.2/2) -- [email protected]|ip=8x.2yy 0.0 (0.0/2) -- [email protected]|ip=216.136-2.3 (-394.9/171) -- [email protected]|ip=none.. .. .. ..

St = (Th / Ch - Sc) * f + Sc = (22.2 / 2 - 1.8) * 1 + 1.8 = 11.1

Statistics by Hour----------------------------------------------------Hour Spam Ham------------- ----------------- --------------2005-10-13 00 12 ( 27%) 32 ( 72%)2005-10-13 01 102 ( 75%) 33 ( 24%).. .. .. ..2005-10-13 23 0 ( 0%) 0 ( 0%)

Done. Report generated in 25 sec by sa-stats.pl, version 6256.

Page 17: 035 Системный Администратор 10 2005

15№10, октябрь 2005

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

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

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

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

Если у вас запущен демон spamd, то вместо вызова spamassassin лучше использовать клиент spamc, кото-рый будет обращаться к находящемуся в памяти серверу. Это позволит избежать запуска отдельного экземпляра скрипта для обработки каждого входящего сообщения.

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

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

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

На странице http://wiki.apache.org /spamassassin /SpamQuarantine предлагается два других решения: ис-пользование веб-интерфейса Maia Mailguard и програм-мы SpamAssassin Quarantine (SAQ). Чтобы не перегружать статью, оставлю их вам для самостоятельного изучения (возможно, об особенностях этих программ мы поговорим в другой раз).

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

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

Из этого заголовка видно следующее: сообщение бы-ло обработано фильтром Spamassassin, запущенным на ва-шем сервере (тэг X-Spam-Checker-Version). Письмо не было признано спамом (No), набрало -0.7 балла при необходи-мых 12.0, положительный результат был дан перечислен-ными после tests тестами. Автоматическое обучение ста-тистического фильтра было выполнено для этого письма в режиме ham (не спам).

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

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

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

# Отправляем все сообщения (до 256000 байт) на обработку:0fw: spamassassin.lock* < 256000| spamassassin

# Все сообщения с X-Spam-Status = Yes помещаем в карантин:0:* ^X-Spam-Status: Yescarantine

X-Spam-Status: No, score=-0.7 required=12.0 tests=ALL_TRUSTED,AWL, MAILTO_TO_SPAM_ADDR,NO_REAL_NAME autolearn=ham version=3.1.0X-Spam-Checker-Version: SpamAssassin 3.1.0 (2005-09-13) on myserver.ru

Рисунок 2. Так для пользователя выглядит спам

# /usr/local/etc/rc.d/sa-spamd.sh start# /usr/local/etc/rc.d/spamass-milter.sh start# make restart

Page 18: 035 Системный Администратор 10 2005

16

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

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

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

Как видите, для этого сообщения байесовый тест дал ре-зультат от 99 до 100% вероятности того, что письмо – спам. Совместно с другими тестами письмо набрало 14.9 баллов, что позволило отнести его к спаму, несмотря на достаточ-но высокий порог срабатывания.

Основываясь на личном опыте использования фильтра, могу сказать, что сразу после установки (поскольку дело было на работающем сервере, то необходимый порог сра-батывания был на период тестирования установлен на до-статочно высоком уровне – 12 баллов) Spamassassin стал отмечать примерно половину приходящего спама. Специ-ального обучения статистического анализатора я не про-водил, целиком полагаясь на самообучение. Спустя сутки фильтр накопил достаточную базу и стал учитывать резуль-таты байесовой классификации. При этом точность сраба-тывания возросла примерно до 91%. Ложных срабатыва-ний пока не наблюдалось.

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

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

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

После обучения вы можете просмотреть дамп базы:

К процессу обучения можно приобщить и пользова-телей. Создайте специальные почтовые ящики для спа-ма и не спама (например, [email protected] и [email protected]) и проинструктируйте своих пользова-телей на первый из них пересылать пропущенный спам (так называемый false negative), на второй – хорошие сооб-щения, ошибочно признанные спамом (false positive).

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

Второй путь – настроить procmail на обработку таких пи-сем, что называется, на лету (пример взят со страницы http://wiki.apache.org/spamassassin/ProcmailToForwardMail):

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

Подробнее о режимах обучения смотрите страницу справочного руководства man sa-learn и соответствующие Wiki-страницы.

Усиление за счет внешней СУБДПо умолчанию Spamassassin хранит данные (автоматичес-ки формируемый «белый» список, историю статистического анализатора) в отдельных файлах в формате DBM. Для по-вышения производительности можно перенести их во вне-шнюю базу данных. Spamassassin умеет работать с MySQL и PostgreSQL (поддержка СУБД должна быть включена на этапе установки пакета). Рассмотрим настройку для ра-боты с базой PostgreSQL.

Сначала вам нужно будет подготовить базу данных для работы. Саму БД придется создать вручную, а заодно и пользователя, который будет владельцем нашей базы. А поскольку Spamassassin использует хранимые процеду-ры на языке PL/pgSQL, то также потребуется подключить и язык программирования к вновь созданной базе:

# sa-learn --dump

0.000 0 3 0 non-token data: bayes db version0.000 0 2792 0 non-token data: nspam0.000 0 623 0 non-token data: nham0.000 0 131028 0 non-token data: ntokens0.000 0 1010692073 0 non-token data: oldest atime0.000 0 1129590682 0 non-token data: newest atime0.000 0 1129530349 0 non-token data: last journal sync atime0.000 0 0 0 non-token data: last expiry atime0.000 0 0 0 non-token data: last expire atime delta0.000 0 0 0 non-token data: last expire reduction count0.049 0 1 1129026204 91a35b559c0.958 1 0 1129026743 92485c309a0.049 0 1 1129028552 f92317eba2.. .. .. .. ..

:0* ^To:.*[email protected]

{ * < 256000 :0c: spamassassin.spamlock | sa-learn --spam

:0: spamassassin.Þlelock spam }

# createuser --no-adduser --no-createdb -U pgsql sauser# createdb --owner sauser -U pgsql sabase# createlang -U pgsql plpgsql sabase

X-Spam-Status: Yes, score=14.9 required=12.0 tests=BAYES_99,EXTRA_MPART_TYPE, FORGED_OUTLOOK_TAGS,FORGED_RCVD_HELO,HTML_IMAGE_ONLY_16,HTML_MESSAGE, RCVD_IN_NJABL_DUL,RCVD_IN_SORBS_DUL,RCVD_NUMERIC_HELO, SUBJECT_ENCODED_TWICE autolearn=no version=3.1.0X-Spam-Level: **************X-Spam-Checker-Version: SpamAssassin 3.1.0 (2005-09-13) on myserver.ru

# sa-learn --spam ~serg/sa/spams

Learned tokens from 20 message(s) (20 message(s) examined)

# sa-learn --ham ~serg/sa/hams

Learned tokens from 5 message(s) (5 message(s) examined)

Page 19: 035 Системный Администратор 10 2005

17№10, октябрь 2005

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

Замечание: pgsql – имя администратора PostgreSQL, который имеет право создавать базы и пользователей, sauser – вновь создаваемый пользователь-владелец БД Spamassassin, sabase – база данных Spamassassin.

Далее нужно сформировать правильную структуру БД, для чего воспользуемся готовыми SQL-сценариями, кото-рые можно будет найти в каталоге sql распакованного дис-трибутива (при установке из портов это будет каталог /usr/ports/mail/p5-Mail-SpamAssassin/work/Mail-SpamAssassin-3.1.0/sql):

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

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

После того как настройки будут изменены для работы с СУБД, восстановите данные из сформированной резер-вной копии:

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

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

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

Дополнительные сведения можно получить из файлов README.* в указанном выше каталоге sql.

Индивидуальный защитный комплектSpamassassin может быть установлен и для персонального использования без необходимости иметь права админист-ратора системы. Например, если у вас есть учетная запись на сервере, то сможете установить Spamassassin в своем до-машнем каталоге и настроить его на проверку почты с помо-щью procmail. В этом случае вы сможете настроить фильтр именно так, как хотите, не обращаясь к системному админис-тратору сервера. Прежде чем вы установите Spamassassin в свой домашний каталог, вам потребуется указать в ваших переменных окружения пути к модулям и библиотекам Perl, если это не было сделано ранее. Должны быть определены переменные PATH, MANPATH, PER5LIB и LANG.

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

Далее внесите в ваш файл .forward такую строчку:

Это приведет к перенаправлению всей вашей почты на procmail, который должен быть настроен на обработку спама (пример см. выше, использовать следует пользова-тельский конфигурационный файл .procmailrc). Пример кон-фигурационного файла для procmail можно найти в дистри-бутиве под именем procmailrc.example. Не забывайте теперь вызывать нужные программы, указывая путь к файлам, установленным в вашем домашнем каталоге (или укажи-те нужный каталог в вашей переменной окружения PATH). Подробности смотрите на странице http://wiki.apache.org/spamassassin/SingleUserUnixInstall.

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

# psql -d sabase -U sauser -e < bayes _ pg.sqlCREATE TABLE bayes _ expire ( id integer NOT NULL default '0', runtime integer NOT NULL default '0') WITHOUT OIDS;CREATE TABLECREATE INDEX bayes _ expire _ idx1 ON bayes _ expire (id);.. .. много команд .. ..CREATE FUNCTION

bayes _ store _ module Mail::SpamAssassin::BayesStore::PgSQL

bayes _ sql _ dsn DBI:Pg:dbname=sabase;host=localhostbayes _ sql _ username sauserbayes _ sql _ password ''

# sa-learn --backup > sabase.back

# sa-learn --restore sabase.back

# psql -d sabase -U sauser -e < userpref _ pg.sql# psql -d sabase -U sauser -e < awl _ pg.sq

user _ scores _ dsn DBI:Pg:dbname=sabase;host=localhostuser _ scores _ sql _ username sauseruser _ scores _ sql _ password ''

user _ awl _ dsn DBI:Pg:dbname=sabase;host=localhostuser _ awl _ sql _ username sauseruser _ awl _ sql _ password ''

# perl MakeÞle.PL PREFIX=$HOME && make && make install

"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #user"

Page 20: 035 Системный Администратор 10 2005

18

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

Учитывать трафик, проходящий через шлюз локальной сети в Интернет, мы будем с помощью ipcad (Cisco IP accounting simulator). Это программа, которая может

вести подсчёт несколькими механизмами, например, через интерфейсы BPF, libpcap и iptables ULOG. Материал пред-назначен для тех администраторов, в чьём ведении име-ется малая или средняя локальная сеть. Всё, что понадо-бится для работы, лишь сам ipcad, текстовый редактор для написания скриптов разбора статистики и огромное жела-ние наконец решить задачу подсчёта расходуемого трафи-ка в локальной сети.

Мы рассмотрим процессы установки, настройки и за-пуска ipcad, а также некоторые примеры написания скрип-тов разбора статистики.

Установка ipcadДля начала необходимо скачать последнюю версию ipcad (http://lionet.info/ipcad). На момент написания статьи тако-вой была 3.6.6. В самом процессе установки нет ничего нетривиального:

В RPM-based-дистрибутивах устанавливать ipcad луч-ше с помощью checkinstall (дабы следовать правилам па-кетной системы).

Настройка ipcadИз многочисленных способов ведения статистики самым простым является учёт трафика, прошедшего через физи-

ческие интерфейсы шлюза (в данной статье – два Ethernet-интерфейса). Для конкретизации описания настроек взята локальная сеть с одной подсетью 192.168.0.0/24.

По умолчанию единственный конфигурационный файл ipcad находится в директории /usr/local/etc. Под задачу учёта трафика через два сетевых интерфейса eth0 и eth1 ipcad.conf выглядит следующим образом:

Как посчитать трафик в LinuxКак посчитать трафик в Linux

Многие из вас в своей работе сталкиваются с необходимостью вести статистику расходуемого

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

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

Александр КузнецовАлександр Кузнецов

# tar -xvzf ipcad-3.6.6.tar.gz# cd ipcad-3.6.6# ./conÞgure# make# /bin/su -# make install

# /usr/local/etc/ipcad.conf

# GLOBAL OPTIONS# Опция capture-ports включает/отключает дополнительные# поля в статистике, такие как: TCP- и UDP-порты, а также# типы ICMP-пакетов. Однако включение данной опции# увеличивает потребление памяти, снижает скорость подсчёта# трафика и в ряде случаев искажает вывод через RSH,# поэтому она в данном примере отключена

capture-ports disable;

# Размер буферов, используемых для передачи статистики# ядром, по умолчанию равен 64 Кб, чего вполне достаточноbuffers = 64k

# INTERFACE OPTIONS# Интерфейсы, на которых считается проходящий трафик. # Рассматривается случай шлюза с двумя сетевыми интерфейсами:# внутренним (локальная сеть) и внешним (Интернет)

interface eth0; # Считать трафик на Ethernet-интерфейсе...interface eth1; # ...и ещё на одном

# Разделять статистику по каждому IP-адресу для подсети# 192.168.0.0/24. «aggregate 192.168.0.0/24» указывает# ipcad-диапазон адресов сети. «strip 32» означает,# что в статистику необходимо заносить все 32 бита# адреса, принадлежащего данному адресному диапазонуaggregate 192.168.0.0/24 strip 32;

# RSH SERVER OPTIONS# Настройки rsh-сервера, с помощью которого будет# просматриваться статистика.

rsh enable at 127.0.0.1;

Page 21: 035 Системный Администратор 10 2005

19№10, октябрь 2005

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

Все остальные опции, задаваемые ipcad.conf, в нашем случае можно смело удалить (или, как минимум, закоммен-тировать) за ненадобностью. Таким образом, они не будут задействованы вообще.

Примечание: директория /var/log/ipcad/ не создаётся при установке ipcad, поэтому её необходимо создать са-мостоятельно. Права на чтение, запись и просмотр содер-жимого директории с логами ipcad рекомендую дать лишь пользователю root. Всем остальным – запретить всё, что-бы избежать даже просмотр простыми пользователями ста-тистики расходуемого трафика в сети.

На этом процессы установки и настройки завершены, и можно переходить к запуску ipcad.

Запуск ipcadЗапускать ipcad имеет смысл таким образом, чтобы при за-грузке он восстанавливал данные о статистике из dumpfile, уходил в фон, а при выключении сбрасывал все данные в тот же dumpfile. Команда для запуска выглядит следую-щим образом:

где:! ключ r – импортирует данные из dumpfile;! ключ d – «демонизирует» ipcad;! ключ s – сбрасывает статистику в dumpfile при выклю-

чении ipcad.

Лучше всего разместить указанную команду в один из init-скриптов для запуска ipcad вместе с системой. В ка-кой именно init-скрипт, я не конкретизирую, т.к. это за-висит от каждого дистрибутива. Например, в SuSE Linux для подобных целей служит скрипт /etc/init.d/boot.local, а в RedHat – /etc/rc.d/rc.local.

Просмотр статистикиДля управления статистикой ipcad используется rsh, на-стройки которого [rsh] задаются в конфигурационном фай-ле ipcad.conf (о чём говорится в «Настройка ipcad»).

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

где host – это хост, на котором ведётся статистика, а comand – это сама команда. В рассматриваемом слу-чае значением host является localhost.

По команде:

доступен полный список команд.А именно:

! show ip accounting – показать статистику.! clear ip accounting – сбросить статистику до контрольной

точки. Если контрольная точка не задана, то статисти-ка сбрасывается в ноль.

! show ip accounting checkpoint – показать статистику, со-хранённую в контрольных точках.

! clear ip accounting checkpoint – сбросить все контроль-ные точки.

! show ip cache flow – показать кэш NetFlow.! show interface <iface> – показать счётчик интерфейса

<iface>.! dump [<path>] – сохранить текущую статистику в файл

<path>. Если <path> не указывать, то статистика сбро-сится в dumpfile, указанный в конфигурационном фай-ле ipcad.conf.

! restore [<path>] – восстановить статистику.! import [<path>] – импортировать (добавить) статистику.! stat – показать текущее состояние работы ipcad.! show version – показать версию и uptime ipcad.! shutdown – завершить работу ipcad.

Для просмотра статистики достаточно:

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

Получить нужные данные из вывода команды «show ip accounting» можно, например, с помощью скриптов. Кото-рые вы вполне можете написать сами для каждой конкрет-ной ситуации. Ниже приводится пример для просмотра ста-тистики по одному указанному IP-адресу и подсчёта сум-марного трафика для этого IP:

# Правила, указанные ниже, описывают политики доступа# к статистике ipcad. Root может полностью управлять# (делать backup, просматривать и изменять таблицы подсчёта).# Все остальные могут лишь просматривать статистикуrsh [email protected] admin; rsh [email protected] backup; rsh [email protected]; rsh 127.0.0.1 view-only;

# «Время жизни» и тайм-аут IP-пакета rsh ttl = 3;rsh timeout = 30;

# Опцией dumpÞle задаётся путь к файлу, в который# по умолчанию будут складываться данные статистикиdumpÞle = /var/log/ipcad/ipcad-curr.dump;

# OTHER OPTIONS

pidÞle = /var/run/ipcad.pid;

# Опция memory _ limit задаёт количество памяти# для хранения содержимого одного потока данных.# Синтаксис следующий:# memory _ limit = <количество>[{k|m|e}] ;# где k - Кб; m - Мб; e � количество строк таблицы данныхmemory _ limit = 10m;

/usr/local/bin/ipcad -rds

rsh host comand

rsh localhost help

rsh localhost show ip accounting

traff.acc

#!/bin/bash# name of script: traff.accHOST=localhostrsh $HOST dumprsh $HOST show ip accounting | grep -E ↵ '192\.168\.0\.'$1'([^0-9]|$)'echoecho "Summary trafÞc of 192.168.0.$1 (kbytes):"rsh $HOST show ip accounting | grep -E ↵ '192\.168\.0\.'$1'([^0-9]|$)' | awk '{s+=$4} ↵ END {print(s/1024)}'

Page 22: 035 Системный Администратор 10 2005

20

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

Используется просто:

где ip – это число от 1 до 254 (попросту последний октет из IP-адреса).

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

Приведённый простейший скрипт будет выводить всю суммарную статистику по указанному IP-адресу, собран-ную с момента первого запуска ipcad и до текущего мо-мента времени. Это не всегда удобно, поскольку нагляднее иметь данные за какой-то конкретный промежуток време-ни (день/неделя/месяц).

Мне достаточно вести статистику расходуемого тра-фика по месяцам. Схема такого учёта выглядит следую-щим образом: в 23 ч. 59 мин. «последнего» числа каждо-го месяца делается dump статистики в файл, к названию которого целесообразно добавить значения года и теку-щего месяца. Уже через минуту, в 0 ч. 00 мин. 1-го числа следующего месяца, счётчик трафика сбрасывается ко-мандой «clear ip accounting», статистика начинает вестись «с нуля». По достижении «последнего» дня месяца схема повторяется.

Для реализации этого механизма создан файл /etc/cron.d/ipcad с заданиями для cron:

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

Вторая строчка – это такой маленький «хак», который автор статьи вынужден был сделать в связи с трудностью указания в расписании «последнего дня месяца» при на-стройке заданий cron. Суть в том, что каждый день в файл /var/log/ipcad/ipcad.date сохраняется текущий месяц и год (в формате YYYYMM). Эта же процедура ведь произойдёт и в последний день месяца. Уже через минуту третье зада-ние сделает dump статистики в файл, к названию которого прикрепится содержимое файла ipcad.date (т.е. год и уже прошедший месяц в формате YYYYMM), и сбросит счётчик расходуемого трафика. В этот же день файл ipcad.date пе-резапишется новыми значениями текущих месяца и года. Не совсем красиво, но зато работает.

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

В приведённом скрипте traff.acc.2 в переменной $USERS определяется файл, в котором есть соответствия имён поль-зователей и их IP-адресов (в данном примере – это /etc/hosts на шлюзе). Эта переменная необязательна и вводит-ся в скрипт исключительно для наглядности просматрива-емой статистики.

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

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

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

Флаг <month> – это шестизначный номер месяца в фор-мате YYYYMM – такой формат хранения ежемесячных dump-файлов выбран в файле задач для cron (для вывода статистики за текущий месяц следует указать вместо но-мера месяца слово «curr»).

Флаг <IP> – это значение последнего октета IP-адреса пользователя, чью статистику надо просмотреть.

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

/etc/cron.d/ipcad

* * * * * root rsh localhost dump >/dev/null59 23 * * * root date "+\%Y\%m" > /var/log/ipcad/ipcad.date 0 0 1 * * root (rsh localhost dump ↵ /var/log/ipcad/ipcad-$(cat ↵ /var/log/ipcad/ipcad.date).dump && rsh localhost ↵ clear ip accounting) >/dev/null 2>&1

traff.acc.2

#!/bin/bash

HOST=localhostUSERS=/etc/hosts

case $1 in

M|m) echo "Summary LAN trafÞc of month $2 (Mbytes):" rsh $HOST dump awk '{s+=$4} END {print(s/1048576)}' ↵ < /var/log/ipcad/ipcad-$2.dump exit 0;;

U|u) grep -E '192\.168\.0\.'$3'([^0-9]|$)' $USERS ↵ | awk '{print($2)}' USER= grep -E '192\.168\.0\.'$3'([^0-9]|$)' ↵ $USERS | awk '{print($2)}' rsh $HOST dump cat /var/log/ipcad/ipcad-$2.dump ↵ | grep -E '192\.168\.0\.'$3'([^0-9]|$)' echo echo "Summary trafÞc of $USER in $2 ↵ month (kbytes):" cat /var/log/ipcad/ipcad-$2.dump ↵ | grep -E '192\.168\.0\.'$3'([^0-9]|$)' ↵ | awk '{s+=$4} END {print(s/1024)}' exit 0;;

*) echo "Usage: " echo "1) if only month stat:" echo " ./traff.acc.2 m <month>" echo " <number> - number of month" echo "2) if user�s stat for month" echo " ./traff.acc.2 u <month> <IP>" echo " <month> - stat for that month" echo " <IP> - last octet of user�s ↵ IP address" echo "note: for current month in ßag <month> ↵ just type 'curr'" exit 0;;

esac

./traff.acc.2 m <month>

./traff.acc.2 u <month> <IP>

./traff.acc ip

Page 23: 035 Системный Администратор 10 2005
Page 24: 035 Системный Администратор 10 2005

22

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

Издателем дистрибутива высту-пил небезызвестный LinuxCenter (http://www.linuxcenter.ru). К че-

тырем дискам оригинального Scientific Linux питерские разработчики доба-вили еще два – один с обновления-ми, а другой с пакетами русификации, шрифтами и мультимедиа. Итак, если читатель слышал о таких дистрибути-вах, как White Box Linux или CentOS, то после того, как я скажу, что при со-здании Scientific Linux была взята за ос-нову идеология, аналогичная исполь-зованной в этих двух дистрибутивах, то станет ясно, что это еще один клон Red Hat Enterprise Linux (RHEL). Поэто-му сравнивать Scientific Linux мы будем именно с корпоративным дистрибути-вом от лидера коммерческого Linux.

Как известно, Red Hat не распро-страняет бесплатно свой корпоратив-ный дистрибутив. Однако, следуя усло-виям лицензии GPL, выкладывает в от-крытый доступ исходные тексты в ви-де SRPM-пакетов. Создатели клонов просто перекомпилируют «исходники». Получившиеся «бинарники» упаковы-ваются в дистрибутив Linux, причем на-столько близко к тому, как это сдела-но в коммерческом дистрибутиве, на-сколько это удается. Целью, как напи-сано в FAQ на официальном сайте – http://www.scientificlinux.ru, является достижение гарантии того, что если

программа работает и сертифициро-вана в коммерческом дистрибутиве Enterprise Linux, то она будет работать аналогично и в соответствующем ре-лизе Scientific.

Для ответа на вопрос зачем по-надобилось создавать еще один клон и какова его ниша на рынке откры-тых операционных систем, мы свя-зались с техническим директором ОАО «Линукс Инк» Олегом Садовым. С его мнением вы можете ознакомить-ся во врезке. А для того чтобы поближе взглянуть на сам дистрибутив, перей-дем к практике. Начнем, как это при-нято, c установки. Встречает нас зна-комая пользователям RHEL и Fedora Core «анаконда». Данная программа достаточно удобна. Поддерживают-ся текстовый и графические режимы установки, а также инсталляционные скрипты Kickstart. Ставить «научный» Linux можно как с CD-диска или ло-кального раздела, так и по сети: че-рез NFS, HTTP или FTP.

В процессе установки вы можете создать разделы с использованием технологии LVM2, определить програм-мный RAID, а также задать режим ра-боты SELinux. Кроме того, можно про-извести начальное конфигурирование брандмауэра. Это все стандартные функции RHEL4 и Fedora Core, и здесь мы не встречаем никаких сюрпризов.

А вот уже на этапе выбора компонен-тов для установки нас ждет нечто но-вое. Здесь появляются две новые груп-пы, которые отсутствуют в оригинале. Это в дополнение к KDE и Gnome груп-па ICE Desktop Environment, и группа Scientific Linux Additional Choices.

Как вы видите на рис. 1, в группу Scientific Linux Additional Choices входят средства удобного обновления систе-мы – APT и YUM, а также программное обеспечение для организации клас-теров и распределенных вычислений. В «Packages added to Scientific Linux» помимо прочего присутствует интерес-ный пакет SL_sendmail_accept, единс-твенное предназначение которого – менять политику Red Hat по умолчанию для Sendmail. Как явствует из описа-ния, пакет включает опцию, позволяю-щую принимать почту извне. Еще один пример отступления от политики Red Hat – пакет xmms-mp3. Как, наверное, читателю известно, в случае с Fedora или RHEL, все, что не удовлетворяет условиям лицензии GPL, в дистрибу-тив не включается, к примеру, ту же поддержку формата MP3 пользовате-лю пришлось бы добавлять в свою сис-тему самостоятельно.

Достаточно забавен сам процесс установки пакетов. Он показан на рис. 2. В отличие от RHEL, где поль-зователю демонстрируются рекла-

Scientific Linux – выбираем решение Scientific Linux – выбираем решение корпоративного уровня по цене носителякорпоративного уровня по цене носителя

На проходившей в Москве выставке LinuxWorld Russia 2005 хорошо известная На проходившей в Москве выставке LinuxWorld Russia 2005 хорошо известная

на отечественном рынке открытого программного обеспечения компанияна отечественном рынке открытого программного обеспечения компания

из Санкт-Петербурга «Линукс Инк» представила общественности русифицированнуюиз Санкт-Петербурга «Линукс Инк» представила общественности русифицированную

версию дистрибутива Scientific Linux. версию дистрибутива Scientific Linux.

Андрей МаркеловАндрей Маркелов

Page 25: 035 Системный Администратор 10 2005

23№10, октябрь 2005

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

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

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

Итак, что же мы имеем по оконча-нии установки? Надежный дистрибу-тив корпоративного уровня с обновле-ниями, выходящими максимум через два дня, после того как они появятся на сайте Red Hat. Полный аналог дис-трибутива, сертифицированного в ка-честве платфомы, в частности, корпо-рацией Oracle. В поставку дистрибути-

ва входят удобные средства управле-ния system-config-*, а также при экс-плуатации можно воспользоваться, например, документацией, доступной по адресу http://www.redhat.com/docs/manuals/enterprise. Все, что написано в «букварях» от Red Hat, практически полностью (за исключением средств RHN) применимо и к Scientific Linux. Итого мы имеем корпоративный дист-рибутив по цене на порядок меньшей, чем у Red Hat. И хотя существуют об-ласти, где такая экономия окажется неоправданной (например, в случае взаимодействия с технической под-держкой Oracle, которую, при исполь-зовании Scientific Linux, вы не получи-те), для небольших организаций или частных пользователей рассматри-ваемый дистрибутив будет неплохим выбором. Кроме того, не нужно забы-вать, что у зарегистрированных поль-

зователей имеется возможность в те-чение 30 дней получать от компании «Линукс Инк» бесплатную поддержку по установке и начальной настройке системы. А если не нужно сопровож-дение, вы можете бесплатно скачать дистрибутив по ссылке с сайта http://www.scientificlinux.ru. С другой сто-роны, когда вам понадобится гаран-тированная техническая поддержка не только по вопросам инсталляции, но и по вопросам эксплуатации ОС в течение всего срока использования сервера, вам ничто не помешает пе-рейти на коммерческий корпоратив-ный Linux. И переход этот будет мак-симально безболезненным, посколь-ку, как мы уже заметили, одна из за-дач Scientific Linux – максимальная би-нарная совместимость со вполне кон-кретным коммерческим дистрибути-вом Linux.

Олег Садов, технический директор ОАО «Линукс Инк» о дистрибутиве Scientific Linux«На наш взгляд, использование дистрибу-тива Scientific Linux наиболее перспектив-но, по следующим причинам: во-первых, достаточно уникальный подход к форми-рованию ядра коллектива разработчиков – это и не коммерческая компания, и не чис-тое сообщество энтузиастов. В случае Scientific Linux, проект ведется на госу-дарственное финансирование – в Амери-ке это Fermi National Accelerator Laboratory, в Европе – CERN. И это дает некоторую га-рантию от метаний в области технологи-ческой политики и политики распростра-нения дистрибутива, и от опасности стаг-нации вследствие угасания интереса у чле-нов community. У нас великолепные кон-

Рисунок 1. Выбор пакетов Рисунок 2. Процесс установки начался

такты с этим коллективом разработчиков, и мы выполняем вполне конкретные рабо-ты, имеющие для нас обоюдный интерес, например, создание пакетов для GRID-вы-числений, CMS-системы Plone и т. д. Кроме того, данный проект имеет вполне четкую сферу применения – он очень широко ис-пользуется в научном сообществе, прежде всего в физике высоких энергий, где фак-тически становится стандартом де-факто. А как показывает практика, сообщество является как наиболее стабильным поль-зователем программных продуктов, сла-бо подверженным веяниям моды, так и на-иболее продуктивным генератором новых идей и технологий. Так, в настоящий мо-мент, именно в области физики высоких энергий уже реально работают GRID-тех-нологии в распределенной по всему миру

вычислительной среде проекта LCG с со-вокупной вычислительной мощностью в со-тню тысяч CPU, в то время как у коммер-ческих производителей эти технологии по-ка не выходят за рамки маркетинговых ак-ций. И базовой платформой для такой ин-фраструктуры является именно Scientific Linux. В этот механизм закладывались ши-рокие возможности по настройке – начиная от набора пакетов и состава их групп, кон-чая логотипом начального загрузчика ин-сталлятора. Для того круга задач, которым мы занимаемся, создание спец. дистрибу-тивов, оптимизированных под потребности клиента и базирующейся на кодовой базе мирового технологического лидера Linux-индустрии, крайне важно, и платформа Scientific Linux для этого подходит как не-льзя лучше!»

Page 26: 035 Системный Администратор 10 2005

24

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

Не сказал бы, что Windows исклю-чительно хороша – есть в ней и удачные решения, и зия-

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

ReactOS – свободная альтернатива Windows. Слухи и реальность

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

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

Андрей Бешков

Наверное каждый из нас хоть раз мечтал о том, как всем станет хорошо, если можно будет

использовать Windows бесплатно и при этом не нажить проблем с законом. А что, если у нас

появится альтернатива Windows, делающая все то же самое, что и оригинал?

Page 27: 035 Системный Администратор 10 2005

25№10, октябрь 2005

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

телям ПО потратить на перенос и тес-тирование своих продуктов. Остается лишь один выход – написать систему, которая будет вести себя в точности так же, как Windows.

Такие мысли с завидной периодич-ностью приходят в голову многим раз-работчикам свободного софта на про-тяжении достаточно долгого периода времени. Без сомнения, самым извес-тным проектом подобного толка явля-ется Wine. Стройными рядами за веч-но молодым патриархом идет череда его потомков разной степени близос-ти: Cedega (бывший Winex), сошедший с конвейера TransGaming Technologies, CrossOver Office от CodeWeavers, DAVID, разработанный загадочной Фи-липпинской фирмой SpecOpS Labs, LinSpire (во младенчестве Lindows). Все вышеперечисленные герои на-целены на запуск Windows-приложе-ний в среде UNIX-подобных систем. И только одна маленькая, но гордая система по имени ReactOS пошла сов-сем другим путем. Команда разра-ботчиков подумала: «Зачем нам ну-жен фундамент в виде UNIX, если мы, взяв все лучшее от Wine, сами можем стать полноценной операционной сис-темой, в точности повторяющей по-ведение Windows NT и его последу-ющей инкарнации Windows XP. Пол-ная мимикрия даст возможность ис-пользовать весь багаж ПО, разрабо-танный для Windows, причем это бу-дут не только вожделенные приложе-ния, но и драйвера для устройств под-держки, которых столь не хватает дру-гим ОС. Дело за малым, нужно лишь правильно реализовать API. На пер-вый взгляд, ничего сложного в этом нет, но это только кажущаяся просто-та. API от Microsoft документировано достаточно туманно, да и сам произ-водитель не особенно стремится де-литься своими секретами, несмотря на отсутствие принципиальных воз-ражений.

История развития проектаВпрочем, довольно лирики, обратимся же к нашей основной теме, т.е. к исто-рии возникновения и нынешнему со-стоянию ReactOS. В 1996 году сила-ми энтузиастов стартовали работы над прототипом системы FreeWin95, которая должна была стать кло-ном Windows 95. После двух лет бес-

плодных дискуссий о том, каков дол-жен быть дизайн системы, начина-ние тихо умерло. В конце 1997 го-да Джейсон Филби (Jason Filby) стано-вится координато-ром проекта и объ-являет о необходи-мости начать все заново. Решено – система будет на-зываться ReactOS и должна стать по-хожей уже на сле-дующую ступень эволюции продук-тов Microsoft, т.е. на Windows NT. С февраля 1998 года начинается собственно разра-ботка. Следующие несколько лет сис-тема потихоньку развивается, при-влекая к себе все новых и новых раз-работчиков. Нако-нец пришло время, когда ее уже мож-но попробовать на вкус. Сегодня мы посмотрим, гото-ва ли она для то-го, чтобы заменить ОС от Microsoft на наших рабочих мес-тах.

УстановкаИтак, берем дистрибутив – http://www.reactos.org/xhtml /ru /download.html. На момент написания статьи актуаль-на версия 0.2.7. Согласитесь, 11 Мб – удивительный размер для любой сов-ременной ОС. Распространяется она в виде нескольких независимых дист-рибутивов: загрузочный Live-CD-пакет для установки в qemu или iso-имидж для установки в реальную систему. Я опробовал все три варианта и могу сказать, что они практически не отли-чаются, по крайней мере набор недо-статков и достоинств везде примерно один и тот же. Для чистоты экспери-мента даже была произведена уста-новка ReactOS в VMWare. Стоит отме-

тить, что система пока что способна работать только в 32-битном режиме, впрочем, это не мешает ей также вы-полняться и на новых 64-битных про-цессорах.

Итак, приступим к осмотру. Встав-ляем в CD-ROM диск, перезагружаем-ся и видим следующую надпись:

Для того чтобы загрузка продол-жилась, нужно успеть нажать любую

Рисунок 1. Первый экран установки

Рисунок 7. Ошибка при работесо scsi-дисками

Рисунок 2. Создание разделов

Рисунок 3. Первичные настройки

Рисунок 4. Выбор языка

Рисунок 5. Выбор папки инсталляции

Рисунок 6. Копирование файлов

Рисунок 8. Установка загрузчика

Page 28: 035 Системный Администратор 10 2005

26

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

клавишу, пока по экрану бегут точки. Если не успеваем, система подвисает намертво, помогает только волшеб-ная кнопка «Reset». Странный подход к началу инсталляции. Если со ско-ростью реакции у вас все отлично, то на экране появится следующее ме-ню (см. рис. 1). (От ред.: видимо от-сюда произошло название системы React – от «реакция».)

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

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

Пока что кроме IDE нам ничего не светит. Пришлось поставить в тес-товый компьютер диск IDE и начать заново. Впрочем, стоит отметить, что полная переустановка системы длится всего 2 минуты, и это, знаете ли, впечатляет.

Меню разбивки диска на разде-лы выглядит довольно стандартно (см. рис. 2). Пока что можно работать только с FAT32. В рамках этой фай-ловой системы декларируется подде-ржка VFAT, в нашем случае это обозна-чает наличие Unicode и длинных имен. Так как взаимодействие ОС и файло-вой системы происходит через модуль IFS (Installable File System), разработчи-ки предполагают, что скоро в качест-ве основной ФС станет возможным ис-пользовать не только NTFS, Ext2, Ext3, JFS, SMB, но и многие другие.

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

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

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

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

Поэтому жмем <Enter> и попада-ем прямиком в лапы мастера настрой-ки системы после первого запуска (см. рис. 9).

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

Рисунок 9. Мастер настройки ОС

Рисунок 10. Экран персонализации

Рисунок 11. Повторная настройкарусской локализации

Рисунок 12. Ошибки при установкедрайверов VMWare

Рисунок 13. Процесс загрузки ReactOS

Рисунок 14. Результаты русификации

Рисунок 15. Ошибка при просмотренереализованных меню

Рисунок 16. Попытка настроитьсетевой интерфейс

Page 29: 035 Системный Администратор 10 2005

27№10, октябрь 2005

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

вим систему с английской локалью и продолжаем препарирование.

Интерфейс системы очень по-хож на что-то вроде Windows NT, хо-тя присутствует и некоторое количес-тво собственных элементов оформ-ления окон и меню. В основе графи-ческой подсистемы лежит DIB Engine и своя собственная версия Explorer, отвечающая за отрисовку рабочего стола. Технологически такое решение несильно отличается от того, что есть у Microsoft, то есть оно также встрое-но в ядро. Но в то же время различия в дизайне позволит в качестве оболоч-ки для пользователя при желании при-способить LiteStep, BlackBox, fwm или еще какой-либо популярный оконный менеджер из мира UNIX. Впрочем, та-кие разработки еще пока только пла-нируются. Настройка свойств рабоче-го стола, разрешения экрана и застав-ки практически не отличается от стан-дартных интерфейсов Windows.

Большинство подменю ветки «Start → Settings» либо пусты, либо вызывают показ вот таких окошек (см. рис. 15, 16).

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

Но вот ping все же сделать не уда-ется. Впрочем, есть надежда, что нор-

мальная поддержка сети по-явится в следующем релизе, т.к. на выставке LinuxWorld 2005 всем желающим был продемонстрирован вариант ReactOS, который доволь-но неплохо работал с сетью. По утверждению разработ-чиков сетевой стек уже сей-час представляет полную ана-логию стека Windows XP. В ка-честве основы для его реали-зации была выбрана библио-

тека oskiitcp. Также ведется активная работа над Winsock. Полностью ста-бильная версия сетевого стека будет представлена публике в версии 0.30. Со звуковой подсистемой дела обстоят гораздо хуже, ее разработка началась намного позже, да и сил на это тратит-ся пока существенно меньше. Поэтому надеяться, что ReactOS скоро запоет в полный голос, наверное, не стоит, а пока что любуемся на то, как она долж-на управляться. На данный момент де-кларируется поддержка драйверов звуковых карт от Windows NT 4.

Поговорив о недостатках, перей-дем к тому, что же на самом деле мо-жет система. Мне удалось совершен-но без проблем поработать под управ-лением ReactOS с Far, OpenOffice, не-сколькими приложениями вроде каль-куляторов IP-сетей и кучей прочего мелкого софта. Слегка прихрамывая, заработали Total Commander и несколь-ко других приложений после того, как нужные ключи реестра из Windows бы-ли импортированы с помощью regedit в ReactOS. К сожалению, заставить за-пуститься даже самый древний Internet Explorer или Microsoft Office не удалось, то же самое относится и к столько не-обходимой многим продукции фир-мы Adobe.

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

часовым поясом и расклад-кой клавиатуры (см. рис. 11).

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

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

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

Рисунок 17. Интерфейс загрузчика

Рисунок 18. Свойства сетевойподсистемы

Рисунок 19. Ошибка при попыткеуправлять громкостью звука

Page 30: 035 Системный Администратор 10 2005

28

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

Использование Flash-диска для установки FreeBSDУстановка FreeBSD на новый компьютер при загрузке с Flash имеет свои особенности, которые необходимо учи-тывать. При загрузке с дискеты программа sysinstall выпол-няется как процесс init, поэтому она делает поочередно все необходимое. При загрузке с Flash /stand/sysinstall запуска-ется как обычная программа и не производит некоторых действий, которые обычно выполняются, когда sysinstall работает в качестве init, например копирование катало-га /stand. Поэтому процедура установки FreeBSD на новый компьютер во многом аналогична процедуре создания са-мой Flash и может проводиться в том же порядке, что опи-сан в [1], за исключением того, что теперь нужно ставить большее количество базовых пакетов. Порядок действия в этом случае таков:! Создание разделов («слайсов») для установки FreeBSD

(через fdisk или /stand/sysinstall).! Создание BSD-разделов внутри слайса. Это можно сде-

лать только с помощью disklabel. Почему-то, если /stand/sysinstall работает не в качестве init, а в качестве рядовой задачи, он не в состоянии создать устройства в DEVFS. Описание того, как с помощью disklabel создать BSD-разделы, приведено ниже.

! Создание файловых систем в BSD-разделах. Это мож-но сделать как с помощью newfs (пример приведен в [1], в разделе «Создание»), так и с помощью /stand/sysinstall. При этом при форматировании через /stand/sysinstall все BSD-разделы будут отображены как уже отформатированные и без точек монтирования. Необхо-димо для каждого раздела вручную указать точку мон-тирования («М») и указать, что файловая система тре-бует создания («Т»). Не забудьте снять признак опере-жающего кэширования с раздела, который будет корне-вым в новой системе – /stand/sysinstall делает это толь-ко при задании точки монтирования «/».

! При задании точек монтирования, пожалуйста, будьте внимательны. Если предполагаемый корневой раздел монтируется для установки в /mnt/s1a и предполагается

еще создать разделы /usr и /var, то для них точки монти-рования нужно задавать соответственно как /mnt/s1a/usr и /mnt/s1a/var, но ни в коем случае не как /usr и /var.

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

Выделенная строка отображает состояние признака до-пустимости использования ACL – «disable» – запрещено, «enable» – разрешено. Для изменения состояния при-знака можно использовать ту же команду tunefs такого формата:

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

! Значение install root задается точно так же, как это де-лается в [1], в разделе «Создание». В качестве нового значения install root укажите точку монтирования разде-ла, который будет корневым в новой системе. И, пожа-луйста, не забудьте, что install root нужно задавать пос-ле форматирования BSD-разделов.

! Установка всех необходимых пакетов. Необходимым является только пакет base, остальные на ваше усмот-рение (хотя я всегда устанавливаю compat4x, man, src и ports).

! Шаг создания дополнительных пользователей лучше пропустить – /stand/sysinstall не умеет применять install root для этих целей, и вместо создания пользователя

Создаем загружаемый Flash-диск Создаем загружаемый Flash-диск с FreeBSD и DOSс FreeBSD и DOSЧасть Часть IIII

Из первой части статьи вы узнали о том, как создать загружаемый Flash-диск с FreeBSD и DOS.

Но создать его – не самоцель, созданный диск – просто инструмент, которым нужно умело

воспользоваться.

Рашид Ачилов

# tunefs -p /dev/ad0s2a

tunefs: ACLs: (-a) disabledtunefs: MAC multilabel: (-l) disabledtunefs: soft updates: (-n) enabledtunefs: maximum blocks per file in a cylinder group: (-e) 2048tunefs: average file size: (-f) 16384tunefs: average number of files in a directory: (-s) 64tunefs: minimum percentage of free space: (-m) 8%tunefs: optimization preference: (-o) time

# tunefs -a enable /dev/ad0s1a

Page 31: 035 Системный Администратор 10 2005

29№10, октябрь 2005

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

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

! После первой перезагрузки установленной системы обязательно задайте пароль пользователя root (сейчас он без пароля) и настройте часовой пояс.

Создание BSD-разделов вручнуюРанее, устанавливая FreeBSD, я был свято уверен в не-погрешимости sysinstall и в то, что она не может допускать ошибок. Это мнение переменилось, когда в одной из вер-сий /stand/sysinstall отказывался видеть жесткие диски, ес-ли их было больше одного.

Впоследствии нашлись и другие области, где /stand/sysinstall ведет себя не лучшим образом. Например, при со-здании BSD-разделов, когда он запущен не как init, а как обычный процесс, он не может создать устройства в DEVFS. Как следствие, создаваемый BSD-раздел не может быть смонтирован, и установка прерывается. При задании install root вспомогательные шаги типа задания пароля пользова-теля root всегда меняют его в /etc/master.passwd...

Мы уже использовали возможность создания BSD-раз-делов вручную при форматировании самой Flash. Но там создавался только один корневой раздел, поскольку не бы-ло никакой необходимости разбиения диска. Для дисков нормального объема этот путь неприемлем хотя бы пото-му, что в корневой файловой системе по умолчанию вы-ключено опережающее кэширование (softupdates). Поэто-му мы будем использовать возможность disklabel восста-навливать метки дисков из текстового файла. Формат фай-ла очень простой:

Откуда берется информация о диске? Первоначально файл можно создать, вызвав disklabel:

При этом будет запущен редактор, указанный в пере-менной окружения EDITOR, в котором можно сохранить файл начальных настроек. В данном файле, если в слайсе еще не было создано ни одного раздела, disklabel предпо-лагает создание одного раздела a: размером во весь слайс и описателя слайса. Описатель слайса (раздел c:) создает-ся всегда и помечается строкой «raw part, don’t edit». В при-веденном выше файле настроек мы имеем четыре файло-вые системы и раздел подкачки (swap), которые располо-жены так, как показано на рис. 1.

Если расположение разделов соответствует порядку букв (a, b, c ,d , etc...), где на a: всегда корневой раздел, на b: всегда раздел подкачки, на с: всегда описатель слайса, дальше расположение разделов произвольно – то можно доверить расчет границ раздела самому disklabel, соответс-твующий пример приведен ниже.

Поскольку в файле примера разделы не соответству-ют этому порядку (раздел подкачки идет первым), то рас-считаем границы разделов самостоятельно. Задаваемые в файле цифры – это размер и смещение раздела в секторах размером по 512 байт. 1 Гб – это 1024 * 1014 (1048576) Кб или 1024 * 1024 * 2 (2097152) секторов, 1 Mб – 1024 Кб или 2048 секторов. Эти цифры умножаются на размер разде-ла и складываются с начальным смещением. Отсчет сме-щения начинается с 0. Считаем:! Раздел a: (root) размером 200 Мб. Начальное смещение

4194304, размер 409600 (2048 * 200), тип раздела 4.2BSD (согласно man disklabel, тип раздела может иметь толь-ко значения swap, 4.2BSD и unused).

! Раздел b: (swap) размером 2 Гб. Начальное смещение 0, размер 4194304 (2097152 * 2), тип раздела swap.

! Раздел с: (описатель слайса) – не редактировать!! Раздел d: (/usr) размером 5 Гб. Начальное смещение

4603904 (4194304 (размер swap) + 409600 (размер root)), размер 10485760 (2097152 * 5), тип раздела 4.2BSD.

! Раздел e: (/var) размером 10 Гб. Начальное смещение 15089664 (размер d: + размер b: + размер a:), размер 20971520 (2097152 * 10), тип раздела 4.2BSD.

! Раздел f: (/usr/home) Начальное смещение 36061184 (размеры всех предыдущих разделов, кроме c:), раз-мер – «*». Знак «*» обозначает, что disklabel должен сам рассчитать требуемое значение, хотя, конечно, никто не мешает провести этот расчет самому. В данном случае будет занято все оставшееся свободное место.

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

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

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

(все то же самое, только ключ -n опущен). Если все прошло

# /dev/ad2s1:8 partitions:# size offset fstype [fsize bsize bps/cpg] a: 409600 4194304 4.2BSD b: 4194304 0 swap c: * * unused 0 0 # «raw» part, # don�t edit d: 10485760 4603904 4.2BSD e: 20971520 15089664 4.2BSD f: * 36061184 4.2BSD

# disklabel -e -n ad0s1

Рисунок 1. Разделы на диске, созданные по файлу примера

# disklabel -R -n ad0s1 ad0s1.disklabel

# disklabel -R ad0s1 ad0s1.disklabel

Page 32: 035 Системный Администратор 10 2005

30

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

успешно, то disklabel не скажет ничего. Иначе же выдаст со-общения об ошибке.

Все. Разделы созданы, можно переходить к их форма-тированию и установке программ. Рекомендую, кроме то-го, сохранить информацию по слайсам («разделам» с точ-ки зрения DOS) и разделам BSD, распечатать ее и хранить в непосредственной близости от сервера – это поможет восстановить случайно удаленные разделы. Сохранить ин-формацию можно следующими командами:

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

При этом можно использовать буквы M и G для зада-ния размера соответственно в мега и гигабайтах, а также символ «%» для задания размера в процентах от общего объема диска.

Использование Flash-диска для переноса данных на диск большего размераВсе мы рано или поздно сталкиваемся с проблемой разде-лов жесткого диска, заполненных нужной и ценной информа-цией и полным нежеланием переустанавливать систему, не-смотря на то что [2] рекомендует именно этот метод для пе-реноса данных на новый жесткий диск большего размера. Тем не менее, там же приводится небольшое описание то-го, как можно, не переустанавливая систему, перенести ее на новый жесткий диск большего размера. Но данная инс-трукция приведена в расчете на то, что загружена система со старого диска, а это не всегда желательно. Для этого мож-но воспользоваться Flash-диском, для чего достаточно:! Загрузиться с Flash. Допустим, /dev/ad0 – старый диск,

а /dev/ad4 – новый диск.! Прописать в /etc/fstab все разделы старого диска (на

всякий случай пометив их «noauto»).! Создать на новом диске раздел («слайс») типа FreeBSD

(через /stand/sysinstall, fdisk, любой менеджер разделов).! Создать разделы BSD внутри слайса так, как они долж-

ны быть расположены (через disklabel, так как описано выше) и отформатировать их (через newfs или /stand/sysinstall).

! Смонтировать корневой раздел старого диска, напри-мер:

! Смонтировать корневой раздел нового диска, напри-мер:

! Перейти в смонтированный раздел нового диска и вы-полнить команду переноса данных:

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

! Точно так же перенести все остальные разделы. При этом следует иметь в виду, что переносить дан-ные следует в порядке «углубления» точек монтирова-ния. Например, если на диске существуют разделы /, /usr, /var и /usr/home, то ./usr/home должен переносить-ся после /usr. Примерный расчет затрат времени таков: на компьютере Intel Celeron 2533/512 RAM на перенос данных с полностью забитого жесткого диска Seagate 60 Гб UATA100 на жесткий диск Seagate 80 Гб SATA уш-ло 3 часа (не считая времени на подготовку).

! Выключить компьютер, убрать Flash, отключить ста-рый диск и подключить новый так, чтобы при загрузке он получил то же самое имя устройства, что было у ста-рого (например, при замене обычного жесткого диска на диск Serial ATA в BIOS существует возможность на-строить отображение SATA на IDE).

Использование Flash-диска для контроля целостности файлов на жестком дискеВ [3] описан скрипт для проверки целостности файлов на за-раженных или поврежденных машинах. Несмотря на оче-видную параноидальность данного скрипта, в нем есть один недостаток – ядро пораженной системы все же ис-пользуется, то есть при большом желании можно повлиять на процесс проверки. Если же сначала загрузиться с Flash, а потом установить носитель с базами AIDE или даже поп-росту объединить их (при наличии достаточного места на Flash), то от этого недостатка можно избавиться. При этом можно вообще не использовать AIDEStart, основная зада-ча которого – функционирование на зараженной машине. Достаточно установить пакет aide на Flash, на ней же раз-местить базы с контрольными суммами с примонтирован-ных разделов дисков (при этом не забывайте, что монти-ровать их нужно будет постоянно в одно и то же место), и запускать операции проверки, обновления или сравне-ния как обычно.

По такому же принципу можно построить и антивирус-ную проверку дисков.

Для чего нам нужен DOS?Кратко перечислю возможные применения Flash-диска с за-груженным DOS:! О MHDD я уже упоминал. Лучшей программы для диа-

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

# fdisk /dev/ad0 > ad0.fdisk# disklabel ad0s1 > ad0s1.disklabel

# /dev/ad2s1:8 partitions:# size offset fstype [fsize bsize bps/cpg] a: 200M 0 4.2BSD b: 2G * swap c: * * unused 0 0 # «raw» part, # don�t edit d: 5G * 4.2BSD e: 10G * 4.2BSD f: * * 4.2BSD

# mount /dev/ad0s1a /mnt/s1a

# mount /dev/ad4s1a /mnt/s1e

# cd /mnt/s1e && dump -0af - /mnt/s1a | restore -xf -

Page 33: 035 Системный Администратор 10 2005

31№10, октябрь 2005

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

но устаревшая сейчас, с выходом версии 4.6). Скачать свежую версию можно на [4] и [5]. Находится в катало-ге C:\UTILS.

! Программа для настройки менеджера загрузок xFDisk. Как видно из названия, она предназначена для настрой-ки xFDisk, который используется в качестве менедже-ра загрузок. С ее помощью можно настраивать как ме-неджер загрузок xFDisk самой Flash, так и любого дру-гого диска. Находится в каталоге C:\UTILS\XFDISK.

! Ranish Partition manager. Упомянутый в первой части ста-тьи менеджер разделов. Простенький, но в то же время понятный интерфейс. Имеет собственный менеджер за-грузок, который тем не менее не работает. Находится в каталоге C:\UTILS\RANISH.

! Оригинальный менеджер разделов из поставки FreeBSD – BootEasy. Если не работает ничего – поп-робуйте BootEasy! Правда, он навевает воспоминания о терминалах СМ ЭВМ и их знаменитых меню... Нахо-дится в каталоге C:\UTILS\BTEASY.

! Norton Utilites 8.0. Здесь не нужно много слов, про это вы и так все знаете. Несмотря на то, что на Flash присутс-твует полный комплект утилит, вряд ли он вам полно-стью понадобится. Наиболее ценным является, конеч-но, Disk Editor, ну и, может быть, Norton Cache. Находит-ся в каталоге C:\NORTON8.

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

Возможные ошибкиПомните, что:! sysinstall, работающий в режиме обычной программы,

не создает устройства в /dev. Поэтому создавайте BSD-раз-делы только через disklabel, а не через /stand/sysinstall.

! При генерации пароля root, при создании дополнитель-ных пользователей и при настройке часового пояса sysinstall всегда изменяет конфигурационные файлы в /etc/master.passwd, а не в том месте, которое вы ука-зали на экране опций.

! Указывать Install Root следует после того, как были со-зданы файловые системы. Во время создания файло-вых систем они монтируются в те точки, которые зада-ются на экране FreeBSD Disklabel editor, так что если вы зададите Install Root в самом начале, то созданные фай-ловые системы будут смонтированы, например, в /mnt/tmp/mnt/tmp вместо /mnt/tmp.

! Если при запуске disklabel, он вдруг сообщает:

это всего лишь означает, что данный раздел (в терми-нологии DOS) создавался не через /stand/sysinstall, ко-торый при создании раздела FreeBSD («слайса») сразу создает в нем описатель слайса (раздел с:), а другими средствами. Достаточно просто записать в такой раз-дел «метку по умолчанию»:

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

! Если при запуске dump появляется сообщение о не-известном типе файловой системы, то, значит, точка монтирования, указанная в команде dump, не описа-на в /etc/fstab.

! Если при операции проверки по базе aide, размещен-ной на Flash, фиксируются значительные отличия в ви-де массовых удалений файлов в одном месте и добав-лений в другом – проверьте правильность точек монти-рования – вы могли случайно смонтировать, например, в /mnt вместо /mnt/disk1.

! Если при попытке задания ACL для файла на совершен-но правильную команду выдается такой ответ:

значит, у данной файловой системы отсутствует при-знак допустимости использования ACL. Следует раз-монтировать файловую систему и включить отсутству-ющую возможность: как показано в разделе «Исполь-зование Flash-диска для установки FreeBSD».

ЗаключениеТеперь, Flash-диск, созданный нами, занял свое место в сто-ле, сервер, на который с его помощью была установлена FreeBSD, перенесены данные со старых дисков, а также об-новлен BIOS, почему-то оказавшийся предпоследней вер-сии – законное место в стойке... Разумеется, круг задач, для решения которых можно было бы использовать Flash-диск, не исчерпывается теми, что были перечислены вы-ше – каждый, кому хоть раз доводилось создавать загру-зочные дискеты с DOS, наверняка сможет назвать как ми-нимум еще одну. Но теперь эти дискеты вместе с CD-ROM дисками и приводами для них можно разместить на почет-ной нижней полке сейфа, куда добираешься только в очень редких случаях. Загружаемый USB Flash диск – это простое решение проблем с «нечитающимися» дискетами, поцара-панными дисками, крайне малой емкости первых и невоз-можности модификации вторых.

Литература и ссылки:1. Ачилов Р. Создаем загружаемый Flash-диск с FreeBSD и DOS.

Часть I. – Журнал «Системный администратор», №9, сентябрь 2005 г. – 32-40 с.

2. http://www.freebsd.org/doc/ru_RU.KOI8-R/books/faq/disks.html#NEW-HUGE-DISK

3. Ачилов Р. Управляем удаленными базами AIDE. Часть II – AIDEStart. – Журнал «Системный администратор», №9, сен-тябрь 2005 г. – 28-30 с.

4. http://files.hddguru.com/index.php – архив программного обес-печения для низкоуровневой работы с жестким диском.

5. http://mhdd.com – сайт программы MHDD. К сожалению, пока не оправился после недавней гибели.

# disklabel ad0s1

disklabel: No valid label

# disklabel -w ad0s1

# setfacl -m u::rwx /tmp

setfacl: acl_get_file() failed: Operation not supported

Page 34: 035 Системный Администратор 10 2005

32

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

Несмотря на то что пользова-тель может выносить инфор-мацию и с благими намерения-

ми, например, чтобы доделать работу на дому, все равно такие случаи долж-ны полностью контролироваться. Ина-че важная информация может случай-но оказаться у конкурентов. События последних лет, когда проводки банков можно свободно приобрести в Интер-нете, подтверждают, что это не при-зрачная, а вполне реальная угроза. Поэтому наряду с организационными мероприятиями (в первую очередь это запрет использования таких устройств на рабочем месте) необходим полный контроль за работой таких устройств. В большинстве случаев их физичес-кое отключение не всегда приемлемо. Например, оборудование может требо-ваться при переносе подготовленных презентаций или системный блок на-ходится на гарантии. Некоторые спе-циалисты просто отключают серви-сы «Plug and Play», «Bluetooth Support Service», «Windows Installer», «Службу COM-записи компакт-диском IMAPI», «Смарт-карт» и «Съемные ЗУ» или ус-тройства через BIOS. Но такой подход все равно не будет оптимальным выхо-дом из положения и требует в том чис-ле физического присутствия админис-тратора. Поэтому более удобным явля-ется блокировка устройств при помо-щи специализированных утилит. По-иск в Интернете даст большое коли-

чество ссылок на такие программы, отличающиеся возможностями и ли-цензией. Сегодня пойдет речь о GFI LANguard Portable Storage Control, про-дукте компании GFI Software Ltd, из-вестной своими разнообразными ре-шениями, предназначенными для за-щиты информации.

Использование GFI LANguard P.S.C.Для управления доступом на ком-пьютере устанавливается автоном-ный агент. Он занимает в ОЗУ 1.2 Мб, и о его наличии пользователь, скорее всего, знать не будет. Для удобства развертывания в больших сетях в дист-рибутив включен специальный инстру-мент, позволяющий удаленно устано-вить агентов несколькими щелчками мыши. Во время установки выбира-ется вид управления доступом поль-

Блокируем внешние устройства Блокируем внешние устройства с помощью GFI LANguard P.S.C.с помощью GFI LANguard P.S.C.

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

использованы для хранения и переноса данных. Здесь и флэшки, MP3-плееры, КПК, цифровые

фотоаппараты и прочее. Если не принять никаких специальных мер, пользователь может

беспрепятственно записывать информацию на сменные носители или устанавливать

ненужные программы.

Сергей ЯремчукСергей Яремчук

зователя (user access control) локаль-ный или централизованный, в том чис-ле с использованием Active Directory (рис. 1). Дополнительно можно создать группы контроля, позволяющие более гибко определять доступ к различ-ным классам устройств (GFI_LPSC_REMOVABLE, GFI_LPSC_CDDVD, GFI_LPSC_FLOPPY). Интересно, что в зави-симости от настроек программы поль-зователям, входящим в эти группы, мо-жет как предоставляться, так и запре-щаться доступ. То есть если необхо-димо ограничить большинство поль-зователей, то указываются только те, которым он разрешен. Но если, напри-мер, в интернет-кафе необходимо за-крыть доступ только для учетной за-писи «Гость», то удобнее поступить наоборот.

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

Политика безопасности компании долж-на:! определить, кто из служащих будет до-

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

! какую информацию им разрешено со-хранять на этих устройствах;

! провести инвентаризацию всех исполь-зуемых переносных устройств;

! установить правила для посетителей, в том числе использующих свои ус-тройства при проведении презента-ций;

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

! установить стандарты парольной за-щиты и шифрования данных;

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

Page 35: 035 Системный Администратор 10 2005

33№10, октябрь 2005

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

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

На сайте проекта [1] доступна полнофункциональная версия GFI LANguard P.S.C., которая становит-ся freeware по истечении 30-дневно-го срока или если не введен 60-днев-ный тестовый ключ. Последний будет автоматически прислан на ваш почто-вый ящик. Свободная версия позволя-ет полноценно контролировать работу устройств только на 5 компьютерах. Учитывая, что большинство имеющих-ся свободных утилит работают только с одним компьютером, удаленное уп-равление является несомненным плю-сом GFI LANguard P.S.C. Для свободной версии не доступна официальная под-держка компании, только user-to-user на форуме http://forums.gfi.com.

Системные требования Windows 2000/2003 или XP. Естественно, поль-зователь не должен иметь на локаль-ном компьютере привилегий админис-тратора, иначе ему ничего не стоит убить процесс в списке задач.

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

! Выводимое имя – Иван Иванович.! Имя объекта – accounting_computer.! Имя пользователя – chief.! Имя объекта и имя домена – chief@su-

percompany.com или supercompa-ny.com\chief.

Если необходимо указать сра-зу несколько объектов, прописываем их через точку с запятой. Для удобс-тва во вкладке «Дополнительно» реа-лизована возможность поиска пользо-вателей в указанном месте. Для про-верки правильности ввода имен объ-ектов воспользуйтесь кнопкой «Про-верить имена». В последнем случае будут выведены неправильно введен-ные имена, и утилита предложит ис-править информацию либо удалить неправильный объект из списка. Пос-ле выбора всех объектов указываем, какое действие должен предпринять агент при попытке получения доступа к устройству. Установка флажка в пун-кте «Allow only the users and members of the groups below to access the device» позволит выбранным пользователям и группам получить доступ к устройс-тву. Если же, наоборот, требуется, что-бы перечисленные объекты не могли получить доступ к устройству, выбира-ем «Allow all users except the users and members of the groups below to access the device». Настройки сохраняются в зашифрованном файле, который те-перь необходимо передать на осталь-ные компьютеры.

Для этого переходим к пункту «Tools – Deploy GFI LANguard P.S.C. agents tool», указываем компьюте-ры, на которых будет устанавливать-ся агент. Здесь вводим либо IP-ад-

рес отдельного компьютера, либо це-лой сети, можно использовать и пред-варительно записанные в файл адре-са. Во время первой установки выби-раем «Deploy the GFI LANguard P.S.C. control access agent(s)». При работе с агентами по умолчанию использу-ются текущие регистрационные дан-ные пользователя, при необходимос-ти здесь же можно указать индивиду-альные логин и пароль. Для того что-бы изменения вступили в силу уда-ленный компьютер следует перезаг-рузить. В отдельном окне можно на-писать сообщение, которое будет вы-ведено на экран перед перезагрузкой. После нажатия кнопки Start запустится процесс установки агентов, по оконча-нии которого будет выведен их список. В дальнейшем при обновлении пара-метров агентов следует использовать пункт «Update configuration settings of the GFI LANguard P.S.C. control access agent(s)».

Как видите, GFI LANguard P.S.C. яв-ляется простой в настройке програм-мой с хорошей функциональностью. А возможность бесплатного примене-ния в маленьких (до 5 компьютеров) сетях делает ее ценным инструмен-том для небольших организаций или удаленных офисов.

Литература, ссылки:1. Сайт проекта GFI LANguard Portable

Storage Control – http://www.gfi.com/lanpsc.

2. Бешков А. DeviceLock. – Журнал «Сис-темный администратор», №3, 2004 г. – 38-41 с.

3. FreeWare утилита Lock and Go – http://www.lockngo.com/products/lockngo.

Рисунок 1. Программа может использовать Active DirectoryРисунок 2. GFI LANguard P.S.C. имеет простой и понятныйинтерфейс

Page 36: 035 Системный Администратор 10 2005

34

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

Linux/BSD как Linux/BSD как бастионбастионна пути вирусовна пути вирусов

Крис КасперскиКрис Касперски

Количество дыр, обнаруженных в Windows, уже давно перешагнуло через все мыслимые Количество дыр, обнаруженных в Windows, уже давно перешагнуло через все мыслимые

границы и неуклонно продолжает расти. Выходить в Интернет стало небезопасно. границы и неуклонно продолжает расти. Выходить в Интернет стало небезопасно.

Дальше так жить нельзя – надо защищаться. Для этого организуем защитный бастион, Дальше так жить нельзя – надо защищаться. Для этого организуем защитный бастион,

основанный на Linux/BSD, и пригодный как для офиса, так и для домашнего использования.основанный на Linux/BSD, и пригодный как для офиса, так и для домашнего использования.

Page 37: 035 Системный Администратор 10 2005

35№10, октябрь 2005

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

Почему Windows NT небезопас-на? Почему в ней обнаружи-ваются все новые и новые ды-

ры? Вопрос абстрактный, но мы все-таки постараемся дать на него от-вет. Начнем с того, что умных людей в Microsoft осталась не так уж и много, налицо явная текучка кадров. Опыт-ные специалисты покидают «империю зла» и уходят в другие компании. До-статочно вспомнить памятный скандал с менеджером, в которого Стив Балмер зашвырнул креслом (от такого руково-дителя я бы и сам ушел) – http://www.cnews.ru/news/line/index.shtml?2005/09/06/186136 и http://russian.joelonsoftware.com/Articles/HowMicrosoftLosttheWaronA.html – последний источник рассказы-вает о переменах, происходящих внут-ри Microsoft, и деградации операцион-ной системы.

Падение культуры программирова-ния легко проследить с помощью ди-зассемблера. Если MS-DOS 6.x еще со-держала огромное количество ассемб-лерного кода, а Windows 95 представ-ляет собой настоящий шедевр опти-мизации (без всякой иронии!), запрог-раммированный на смеси ассемблера с чистым Си, то в Windows 98 уже до-минирует Си++, «мастера» и прочие автоматические кодогенераторы, за-менившие живой ум. Windows NT 4.x (которая, как известно, создавалась приблизительно в то же самое время, что и Windows 95, только другим кол-лективом программистов) – это блес-тяще оптимизированная, хотя и слиш-ком навороченная система, запрог-раммированная руками и головой, но в Windows 2000 и тем более XP уже до-минирует Си++ и «мастера». Програм-мисты старого поколения так не посту-пают! Вывод – все это писали новички, со всеми вытекающими отсюда пос-ледствиями. В дизассемблере код вы-глядит просто ужасно. Поражает даже не тяжеловесность, а… «рассосредо-точенность» кода, тонким слоем раз-мазанного по куче функций. В част-ности, никакой единой функции пере-ключения контекста в Windows NT нет! SwitchContext – это только малая часть, весь остальной код размазан по все-му ядру, регистры многократно сохра-няются/восстанавливаются в разных местах, делается куча проверок на до-пустимость их значений и т. д. Сетевые компоненты выглядят еще хуже.

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

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

Служба поддержки Microsoft от-вечает – регулярно устанавливайте на компьютер свежие заплатки, кото-рые и так устанавливаются службой Windows Update. Предложение, конеч-но, заманчивое, но… заплатки выпус-каются не мгновенно и только для уже известных дыр. Для домашнего ком-пьютера такая степень защищеннос-ти вполне подходит, да и то… Только представьте, сколько электронных де-нег сможет утащить хакер, если он на-пишет вирус прежде чем будет выпу-щен «патч»? А для фирмы захват сер-вера вообще может стать фатальным. Причем заплатки выпускаются не бес-конечно, а только в течение так назы-ваемого «жизненного цикла продук-та», определяемого самой Microsoft. В практическом плане это означает, что даже если старая операционная система полностью удовлетворяет на-шим скромным потребностям, ее все

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

Про то, что заплатки занимают ог-ромный объем и для их перекачки не-обходимо иметь по меньшей мере DSL-модем, мы промолчим. К тому же реально воспользоваться Windows Update все равно не удастся. Заду-майтесь, что произойдет, если опера-ционная система упадет? Ведь пос-ле установки с дистрибутивного дис-ка выходить в Интернет и качать за-платки ни в коем случае нельзя, ведь в эти минуты наш узел совершенно беззащитен перед хакерами, а веро-ятность атаки не так уж и мала, осо-бенно если вспомнить про червей, ко-торые стучатся во все компьютеры подряд. Теоретически можно скачать заплатки в виде отдельных файлов, сохранив их на любом носителе, но… тогда придется разбираться в них са-мостоятельно, а это не так-то просто, поскольку заплатки содержат зависи-мости и абы как не встают или встают, но не работают.

Исчезает самое главное преиму-щество Windows – простота управле-ния. Воздвигнуть NT-сервер и оставить его без присмотра сегодня уже не по-лучится. Если только не нанять адми-нистратора, разбирающегося в безо-пасности, с высокой степенью вероят-ности сервер будет взломан. Тоже са-мое относится и к домашним машинам. Вирусы так и прут! Они создают излиш-ний трафик, воруют пароли и другую секретную информацию или просто нарушают нормальную работу опера-ционной системы, вызывая сбои и за-висания, убытки от которых зачастую весьма значительны. Давайте посмот-рим, что в этой ситуации можно пред-принять…

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

Linux/BSD как бастионна пути вирусов

Page 38: 035 Системный Администратор 10 2005

36

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

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

Другая популярная мишень – брау-зер. Слово «Интернет» уже давно ста-ло синонимом «IE», и атакуют преиму-щественно его. Несмотря на то что IE поддерживает целый комплекс мер безопасности, он ломается без осо-бых проблем. В лучшем случае атаку-ющий берет под контроль только сам IE, в худшем же – захватывает всю опе-рационную систему. Достаточно зайти на страницу, содержащую зловредный код и… Самое неприятное, что такой код может содержаться даже на «пре-стижных» сайтах, например, в госте-вой книге, в которую могут писать все желающие и которые далеко не всег-да выполняют качественную фильтра-цию HTML-содержимого. Жесткая на-стойка политик безопасности до неко-торой степени уменьшает вероятность успешной атаки, но не исключает ее полностью. Большинство дыр (таких, например, как переполнение буфера при обработке bmp-файлов) остаются открытыми и устраняются только за-платками, про проблемы которых мы уже говорили. Установив альтерна-тивный браузер (например, FireFox), мы будем практически полностью за-страхованы от подобных атак, одна-ко вместе с браузером еще потребу-ется другой почтовый клиент (напри-мер, Thunderbird), поскольку стандар-

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

Третья и последняя мишень – сам человек, клюнувший на предложение, «от которого нельзя отказаться», и за-пустивший исполняемый файл (за-частую замаскированный под графи-ческую картинку или что-то другое). Ну что тут можно сказать? Теорети-чески достаточно строго-настрого за-претить всем пользователям запускать что бы то ни было, скачанное из сети или полученное по электронной поч-те, только ведь все равно они будут ка-чать и запускать. За всеми не уследишь и не остановишь! Организационные меры уже доказали свою неэффек-тивность, и проблему можно решить только техническим путем. Самое про-стое – запускать FireFox и Thunderbird из-под специального пользователя, с минимальными правами, не имею-щего доступа ни к каким файлам, кро-ме файлов самой программы. И хотя в Windows уровень привилегий легко может быть повышен в обход всех за-щит, подавляющее большинство атаку-ющих программ до этого еще не дорос-ли, и такая мера достаточно эффектив-на. А вот пример неверного, но весьма популярного решения – ставим вирту-альную машину с Windows, устанавли-ваем на ней Лиса с Птицей и связываем виртуальной сетью с основной маши-ной. На первый взгляд – все прекрас-но. Атакующий может воздействовать на браузер, но из застенков виртуаль-ной машины он никуда не выберется, а там все равно нет ничего интересного, кроме кэша браузера, и еще, быть мо-жет, почтовой базы, которую в принци-пе можно расположить и на отдельной виртуальной машине, благо в VMWare между ними легко переключаться. Про-блема в том, что если основная машина доступна по виртуальной сети (а если она не будет доступна, то как прикаже-те выходить в Интернет?), атакующая программа сможет воздействовать на основную операционную систему, че-рез имеющиеся в ней дыры, так что та-кая схема все равно не очень надежна, хотя большинство распространенных вирусов она отсекает сразу, только не-обходимо следить, чтобы на виртуаль-ной машине не образовался «зоопарк»,

ведь вирусы имеют тенденцию зара-жать все, к чему прикасаются…

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

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

В Linux /BSD все не так, как в Windows, и пользователей приходит-ся переучивать, но кто их будет пере-учивать? И кто будет нести расходы? А если приходит новый сотрудник? К тому же Star Office – это все же сов-сем не Microsoft Office, и хотя он может открывать некоторые Office-докумен-ты, реально с ним работать невозмож-но (разве что из горячей любви к Linux или отсутствию альтернативы).

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

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

Рисунок 1. Локальная сеть небольшойорганизации с одним выделеннымкомпьютером-бастионом

Page 39: 035 Системный Администратор 10 2005

37№10, октябрь 2005

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

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

Схемы построения защитного бастионаРассмотрим для начала сеть неболь-шой организации с десятком кли-ентских машин и одним выделенным компьютером – сервером. На кли-ентские машины лучше всего пос-тавить Windows 2000/XP с FireFox и Thunderbird, запущенными из-под на-именее привилегированного пользова-теля без прав доступа ко всем файлам, кроме файлов программы (хотя лич-но я из браузеров предпочитаю кон-сольный links, который очень надежен в плане безопасности, но устанавли-вать его на компьютер секретарши мо-жет только администратор-садист). На сервере устанавливается любая UNIX-подобная операционная система (Linux или BSD), поднимается HTTP-proxy и либо собственный почтовый сервер, либо транслятор портов, либо бранд-мауэр уровня приложений, играющий роль POP3/SMTP-proxy. Впрочем, про-стейший proxy для почты можно напи-сать и самостоятельно – он не займет и сотни строк на C/Perl.

Полноценный выход в Интернет клиентским машинам лучше всего не давать, поскольку в этом случае они могут быть легко атакованы из-вне. А вот работа через Linux/BSD-бастион на основе proxy-сервера поз-воляет отказаться от установки за-платок на Windows-машины, посколь-ку теперь их можно атаковать только изнутри сети, а против внутрисегмен-тных атак даже залатанные системы все равно незащищены.

Как вариант можно установить SOCKS-proxy сервер (подобнее об этом можно прочитать в статье «Универ-сальный прокси-сервер» Валенти-на Синицына, опубликованной в фев-ральском номере «Системного Адми-нистратора» за 2005 год) и предоста-вить клиентам практически полноцен-ный доступ в Интернет. Взаимодейс-твие через SOCKS-proxy снимает мно-гие проблемы. Так, например, не тре-буется специальная настройка кли-ентского программного обеспечения

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

Предложенная схема (см. рис. 1) отличается высокой надежностью и простотой управления. Современ-ные дистрибутивы Linux/BSD ставят-ся из «коробки» не хуже, чем Windows, и с настройками по умолчанию работа-ют вполне достойно. Времена колдовс-тва и плясок с бубном уже прошли. Ко-нечно, гуру тут же скажут, что все это ерунда и настройки по умолчанию не-правильны/небезопасны/непроизво-дительны. На то они и гуру. Их хлеб – темные магические ритуалы, после которых система буквально преобра-жается, только вот… жизненно важ-ной необходимости в этом нет. Дыры в Linux/BSD практически отсутствуют (во всяком случае в новых сборках, скачанных с официального сервера, а не купленных в ближайшем ларьке) и настройки по умолчанию в послед-нее время стали вполне продуманны-ми. Во всяком случае BSD-сервер да-же в штатной конфигурации защищен намного лучше, чем Windows. Мно-гие организации именно так и посту-пают. На внешний сервер ставят BSD (или Linux), а на внутренние машины – Windows 98, Windows XP и т. д., так что в этом решении нет ничего нового или экзотического.

Кстати говоря, львиная доля дыр Linux/BSD-серверов приходится от-нюдь не на саму операционную сис-тему, а на установленное поверх нее программное обеспечение – Sendmail, Apache и т. д. Это сложные програм-мные комплексы, содержащие огром-ное количество строк исходного кода, в которых запутались даже сами разра-ботчики. Их очень сложно настраивать и еще сложнее отлаживать. Чем «лег-че» будет proxy-сервер, тем меньше ве-роятность, что в нем будут дыры.

В принципе можно установить и не-сколько серверов, соединив их после-довательно друг с другом. Внешний сервер «видит» только своего внут-реннего собрата, и локальная сеть ему недоступна (см. рис. 2). Если на од-ном из серверов будет стоять Linux, а на другом BSD, то хакеру, чтобы про-никнуть в локальную сеть, придется взломать сразу обе системы, что до-вольно затруднительно, если не ска-зать маловероятно. Proxy-сервер мож-но ставить как на внешнем сервере (а на внутреннем поднимать NAT), ли-бо, наоборот, прятать proxy за внешним сервером, на котором стоят NAT плюс брандмауэр.

Каждое решение имеет свои силь-ные и слабые стороны, но все-таки луч-ше размещать proxy на внешнем сер-вере и вот почему: если в нем вдруг окажется дыра (а она там окажет-ся) и хакер захватит контроль над уз-лом, его остановит внутренний сер-вер. Напротив, NAT сам по себе никак не защищает внутренний proxy от атак (ну, практически не защищает), и если хакер сумеет его взломать, он тут же получит доступ во внутреннюю сеть, в которой находятся слабо защищен-ные машины с Windows!

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

Домашние сети – проблемы и решенияДля дома или мелкого офиса выде-лять одну из машин в отдельное «де-

Рисунок 2. Локальная сеть небольшойорганизации с двумя выделеннымкомпьютерами-бастионами

Page 40: 035 Системный Администратор 10 2005

38

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

лопроизводство» чаще всего неприемлемо, хотя собрать сервер на основе устаревше-го оборудования, оставшего-ся от апгрейда, может прак-тически каждый. Linux/BSD-серверам не нужен монитор, а при желании можно обой-тись и без жесткого диска, в результате чего расходы на безопасность окажутся не так уж и велики, тем более что домашняя сеть из 2-3 машин уже не редкость, а норма, так почему бы не поставить еще одну машину, не установить на нее LINIX/BSD и не попро-бовать себя в роли администратора?

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

Возможных вариантов построе-ния сети всего два – установить на ос-новную машину Linux/BSD, запуская Windows под эмулятором или, наобо-рот, запихать Linux/BSD в эмулятор и предоставить ей прямой доступ в Ин-тернет в обход Windows. Тогда выход в сеть будет осуществляться по сле-дующей схеме: компьютер (железо) → Windows (несетевые компоненты) →

эмулятор (Linux/BSD) → Windows (се-тевые компоненты).

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

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

сем немного памяти, Windows работает на «живом» обору-довании с полной скоростью, самоотверженностью и отда-чей, а защищенность ничуть не хуже, чем в случае выде-ленного компьютера. Захва-тывающие перспективы, не правда ли? Но обо всем по порядку!

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

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

Классический выбор – это, ко-нечно же, VMWare, достойных конку-рентов которому пока не наблюдает-ся. Единственный недостаток – вир-туальная сеть достаточно сложно на-страивается, и неспециалистам при-ходится попотеть, прежде чем она за-работает. Остальное никаких проблем не вызывает. Устанавливаем эмуля-тор, создаем новую виртуальную ма-шину с настойками по умолчанию, вод-ружаем на нее Linux или BSD, а затем даем ей доступ к физическому обору-дованию.

Если выход в Интернет осущест-вляется через Dial-Up по COM-модему, заходим в настройки виртуальной ма-шины («VM → Setting») и открываем до-ступ к физическому порту, на котором «висит» модем («Hardware → Add → Serial Port → Use physical serial port on the host → COMx»). Причем VMWare ви-дит не только настоящие физические порты, но и порты, созданные драй-верами различных устройств, напри-мер, GPRS-драйвером сотового теле-фона или софт-модемом, что снимает проблему поиска драйверов под Linux/BSD. Ну а найти драйвер стандарт-ного модема – не проблема, тем бо-лее что для распространенных моде-лей существуют и «родные» драйве-ра. Остается только настроить выход из Linux в Интернет. Проще всего вос-пользоваться популярной програм-мой KPPP, которая по легкости управ-ления ничуть не отличается от своего Windows-аналога, если даже не пре-

Рисунок 3. Настройка PPP-соединения с помощью программы KPPP

QEMU как альтернатива VMWareVMWare – это замечательный эмулятор, главные и, пожалуй, единственные недо-статки которого – высокая стоимость ($200 по текущему прайсу) и отсутствие исход-ных текстов. За эти деньги можно свобод-но купить подержанный компьютер без мо-нитора, создать выделенный Linux-сервер и не мучиться. Исходные тексты нужны не только для удовлетворения любопытс-тва. Вот, например, если VMWare не видит виртуальную карту DSL-модема, то нам ос-тается только развести руками, а при их на-личии можно было бы разобраться почему так и устранить проблему. Даже если это не можем сделать мы, наверняка сможет кто-нибудь другой.

Поэтому имеет смысл рассмотреть и бесплатные эмуляторы, из которых нам больше всего подходит QEMU (http://fabrice.bellard.free.fr/qemu). Это динамический эму-лятор, основанный на BOCHS (http://bochs.

sourceforge.net), но работающий в десятки раз быстрее его и ничуть не уступающий VMWare по производительности (а на не-которых задачах даже обгоняющий ее), совершенно бесплатный, портированный под множество платформ (и Linux/BSD/Windows в том числе), имеющий кучу раз-ных расширений на все случаи жизни от не-зависимых разработчиков и т. д.

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

Page 41: 035 Системный Администратор 10 2005

39№10, октябрь 2005

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

восходит его (см. рис. 3). Теперь ин-сталлируем HTTP/POP3/SMTP-proxy и все! Выбор конкретных программ может быть любым. Тут все зависит от конкретных вкусов и предпочтений. В офисной сети, наверное, лучше бу-дет использовать знаменитый squid, но для дома это слишком уж тяжело-весное решение. Лично у меня при-жились small http-proxy (http://home.lanck.net/mf/srv/), pop3proxy (http://www.quietsche-entchen.de/download/pop3proxy-1.2.0.tar.gz) и smtpproxy (ht tp: / /www.quietsche-entchen.de /download/smtpproxy-1.1.3.tar.gz), хотя это далеко не самое лучшее реше-ние, и гурманы программного обеспе-чения наверняка подберут что-то свое. Из SOCKS-proxy я предпочитаю Dante (http://www.inet.no/dante). Не столько из-за его качеств, сколько из-за того, что он написан и распространяется на бесплатной основе горячими парнями из Норвегии – родины моей любимое группы Sirenia (такое мрачное оркест-ровое хоральное готическое пение).

С DSL-модемами в этом плане чуть-чуть труднее. В принципе VMWare поз-воляет эмулируемому приложению ви-деть физические USB-порты («VM → Setting → USB Controller → Automatically connect new USB devices to this virtual machine when it has focus») (см. рис. 4), но поиск подходящего драйвера для USB DLS-модема под Linux мо-жет стать непреодолимой проблемой, поскольку не для всех моделей та-кие драйверы есть. Правда, тут мож-но схитрить. Установить «родной» Windows драйвер – как пра-вило, он создает виртуальную сетевую карту и встраивает ее в TCP/IP-стек, благодаря чему мы можем выходить в Интернет. Если удалить TCP/IP протоколы, оставив вир-туальную карту одну-одине-шеньку, никакого Интернета у нас, разумеется, не будет, но тем не менее на физическом уровне пакеты могут беспре-пятственно приходить/ухо-дить с нашего узла. Идея со-стоит в том, чтобы дать Linux-машине «физический» доступ к виртуальной сетевой кар-те, связав их в сеть, и тогда Linux сможет выходить в Ин-тернет через Windows, но са-

Рисунок 4. Настройка доступа к USB-устройствамиз-под виртуальной машины в среде VMWare

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

Основная проблема состоит в том, что VMWare не позволяет выбирать к какой именно «физической» кар-те она подключается и по умолчанию выбирает первую обнаруженную кар-ту. Если компьютер не имеет никаких других сетевых карт, кроме той, что ус-тановлена DSL-модемом, все хорошо и мы можем не переживать, но сто-ит воткнуть одну или несколько «на-стоящих» Ethernet-карт (или задейс-твовать Ethernet-карту, интегрирован-ную в материнскую плату), как вир-туальная карта сойдет с пьедеста-ла, и все пойдет наперекосяк. Если так, говорим: «Edit → Virtual Network Setting → Automatic Bridging → Excluded Adapters → Add» и перечисляем сете-вые адаптеры, которые мы не хотим ис-пользовать в виртуальной сети.

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

Linux сейчас уже не проблема. Во всех или практически всех дистрибутивах на этот случай имеются удобные мас-тера. В частности в KNOPPIX доста-точно нажать «К → Интернет → ADSL\PPPOE Configuration» и ответить на не-сколько несложных вопросов.

ЗаключениеОтразить большинство атак вполне ре-ально, хотя за это приходится распла-чиваться множеством труднопреодо-лимых неудобств (покупка дополни-тельного оборудования или снижение производительности при работе че-рез эмулятор, неполноценный выход через proxy и т. д.). А может… ничего и не надо отражать? Стоит же XP, ав-томатически забирает свежие обнов-ления из Интернета, на электронном кошельке спокойно лежат деньги, все жужжит и не падает… Так ведь на жи-телей Помпеи долгое время тоже ни-чего не падало, а потом в один миг не-бо почернело, и на город обрушились камни и пепел. Беда никогда не пре-дупреждает о своем приходе, и воскли-цание «еще вчера все работало» слу-жит очень слабым утешением. Можно тысячу раз «смело» выходить в Интер-нет, не боясь ни вирусов, ни хакеров, но только хакерам все равно, боитесь вы их или нет. И если атака окажется успешной… впрочем, о последствиях успешной атаки лучше не говорить. За-частую они весьма плачевны.

Мы ни к чему не призываем, ни за что не агитируем и ни от чего не от-говариваем. Некоторые считают,

что Windows XP – это доста-точно защищенная система, и им ничего не грозит. Другие же не чувствуют себя в безо-пасности даже за каменной стенной proxy-сервера, окру-женного по периметру бран-дмауэром.

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

Page 42: 035 Системный Администратор 10 2005

40

web

Согласно статистике, как мини-мум половина пользователей каждый день пользуются услу-

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

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

кие страницы сайта не попадут под ин-дексацию. Если о первом начинающим веб-мастерам еще говорят на курсах и пишут в книгах, то наличие второ-го сохраняется в тайне. Поэтому уви-дев в журнале веб-сервера запись о том, что запрашивался отсутству-ющий файл robots.txt (“GET /robots.txt HTTP/1.0” 404), администратор в па-нике бросается за советом на форумы. Сегодня этот файл используют при-близительно 5-6% сайтов. В осталь-ных он либо совсем отсутствует, ли-бо имеется, но с пустыми параметра-ми. Хотя вполне вероятно, большинс-тву сайтов действительно нет нужды в ограничениии доступа, но на серь-езных проектах такой возможностью пренебрегать просто опасно. После

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

Я не желаю слышать от вас то, что знает каждый. Я не желаю слышать от вас то, что знает каждый. Ваша работа – сообщать мне то, что никто не знает,Ваша работа – сообщать мне то, что никто не знает,

то, что даже мне неизвестно. то, что даже мне неизвестно.– У меня такие сведения есть.– У меня такие сведения есть.

««Выбор»Выбор»Виктор СуворовВиктор Суворов

Современные поисковые машины являются мощным инструментом, но с их помощью можно

получить информацию, которую администратор предпочел бы не выставлять на всеобщее

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

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

Сергей ЯремчукСергей Яремчук

Page 43: 035 Системный Администратор 10 2005

41№10, октябрь 2005

web

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

Назначение Robots Exclusion ProtocolВпервые вопрос о разработке меха-низмов, позволяющих ограничить до-ступ роботам к различным страницам сайта, возник приблизительно в 1993-1994-м, когда появились первые сооб-щения об утечке информации. Robots Exclusion Protocol разработан в 1994-м Мартином Костером (Martijn Koster) и представляет собой стандартный протокол, который сегодня соблюда-ет большинство сканеров. Он содер-жит правила (Robot Rules) исключений для различных роботов индексации, поиска или зеркалирования веб-сер-веров. И как результат позволяет уда-лить из индекса весь сервер, каталог, отдельный документ, либо файлы с оп-ределенным расширением. Распола-гается такой файл в корне веб-серве-ра, т.е. набрав, например, адрес http://www.foo.com/robots.txt, вы должны его получить. Размещать же его в других каталогах бессмысленно, поскольку учитываться роботом он не будет, как, например, http://www.foo.com/admin/robots.txt. Но для каждого порта http/https должен быть создан отдельный файл. Робот, а также многие утилиты, позволяющие скачать весь сайт це-ликом, первым делом пытаются счи-тать этот файл. Получив положитель-ный ответ (2хх), производится грамма-тический разбор файла и в дальней-шем при работе применяются ограни-чения применительно к этому роботу. Если ответ сервера указывает, что ре-сурс не существует (код статуса 404), то робот продолжает работать без ка-ких-либо ограничений. Поведение ро-ботов при получении ответов, отлич-ных от описанных выше, рекомендо-вано в [2]. Если ответом сервера явля-ется код 401/403 (нет прав/доступ за-прещен), указывающий на ограниче-ние доступа, то робот должен считать, что пытается получить доступ к полно-стью закрытому сайту, и прекратить ра-боту. Когда приходит ответ, говорящий о недоступности ресурса, робот откла-дывает визит до восстановления рабо-тоспособности сайта. При получении ответа, указывающего на переадре-сацию (3хх), робот должен следовать

за ссылками до обнаружения ресур-са. Но этих рекомендаций роботы мо-гут не придерживаться. Так Google-бот не интерпретирует ответ 401/403 на об-ращение к файлу robots.txt, как запрет на сканирование страниц сайта. К со-жалению, на сегодня еще много до кон-ца так и не решено. Во-первых, робот его может просто проигнорировать. Не до конца ясен вопрос с кешировани-ем файла. Если веб-мастер часто изме-няет его содержание, робот может ис-пользовать раннюю версию. Пока ста-раются придерживаться 24-часового интервала кеширования, хотя некото-рые роботы проверяют дату или раз-мер и в случае несоответствия считы-вают файл заново. Кроме того, некото-рые веб-мастера увлекаются составле-нием параметров, пренебрегая общи-ми каталогами и регулярными выра-жениями, что приводит к увеличению размера файла. Как поведет себя ро-бот в этом случае, сказать трудно, в об-щем случае файл кешируется частич-но или не кешируется вообще.

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

Формат файла robots.txtСтандарт, в котором описано содержи-мое файла, можно найти в [1]. В дан-ном документе отмечено, что, исполь-зуя этот файл, можно также указывать для индексации конкретному роботу специально оптимизированные под не-го веб-страницы, а это может привес-ти к некоторому увеличению посещае-мости ресурса. Это обычный текстовый файл в LDIF-формате, состоит из пара-метров и значений, разделенных меж-ду собой двоеточием. Записи не чувс-твительны к регистру. По одному па-раметру в строке. Знак «#» означает комментарий и строка далее игнори-руется. Параметр User-agent указыва-ет на специфическое имя, которое име-ет любая программа-клиент, предна-значенная для доступа к веб-данным.

Возможна запись нескольких robot-id в одном поле, в качестве раздели-теля в этом случае используется про-бел или табуляция. Данный параметр будет учитываться только программа-ми роботами, для веб-браузеров ус-тановить таким образом ограничения не получится. Список всех robot-id мож-но получить в [5]. Например, правило для Google будет начинаться так:

(или Googlebot для лучшей читаемос-ти).

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

Но если поисковый робот обнару-жит в файле /robots.txt несколько за-писей, совпадающих с его значением robot-id, то робот может выбрать лю-бую из них. После прописываются ог-раничения с применением конструкций Disallow/Allow, пустой параметр означа-ет отсутствие ограничений. Возможно задание двух значений в поле Disallow/Allow, но это не рекомендуется, так как в будущих спецификациях это может быть изменено. Например:

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

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

А параметр /changelog/ затронет только подкаталог changelog. Отсюда если будет задана маска /t, то из поис-ка будет исключено все, что начинает-

User-agent: googlebot

User-agent: fastAllow: /info/

User-agent: googlebot aspiderDisallow: /images/Disallow: /cgi-bin/ /1251/ Disallow: /changelog.html

User-agent: *Disallow:

Page 44: 035 Системный Администратор 10 2005

42

web

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

Например, чтобы исключить из ин-дексации все рисунки, используем:

Динамически генерируемые стра-ницы убираются так:

Использование мета-теговДругим более удобным при рабо-те с отдельными страницами стан-дартом является использование тега <META>. С его помощью можно так-же указать роботам на то, что индек-сировать страницу не надо. Для это-го в раздел <HEAD> добавьте следу-ющую строку:

Если необходимо указать то же только роботу Google, можно напи-сать так:

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

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

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

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

му были разрабо-таны утилиты, поз-воляющие быстро и без усилий про-делать эту работу. Так, RoboGen [8] представляет со-бой визуальный редактор доступ-ный под все версии Windows, позволя-ющий управлять доступом к файлам и каталогам на не-скольких серверах. Поддерживает за-грузку по ftp, знает о 180 пользова-тельских агентах (user-agents) (рис. 1) и 10 основных типов поисковых движ-ков. При необходимости пользователь может самостоятельно добавлять но-вую информацию в базу данных поль-зовательских агентов и движков.

На сайте проекта доступны две вер-сии Standard и Limited Edition (последняя freeware), сравнение основных возмож-ностей которых приведено в RoboGen Comparison Chart http://www.rietta.com/robogen/comparison.shtml. Кроме того, отдельно доступна утилита RoboTag 1.5 (http://www.rietta.com/downloads/robogen/RoboTag.zip), входящая в поставку RoboGen SE и LE. При ее помощи мож-но создавать мета-теги для вставки в html-файлы (рис. 2).

Усиленная блокировка с RobotcopНе менее интересными возможностя-ми обладает Robotcop [9], представ-ляющий собой модуль к веб-серве-ру Apache, написанный на С и распро-страняемый в исходных кодах. Он от-слеживает правильность работы поис-ковых роботов, если робот не подчи-няется указанным для него правилам, то Robotcop принудительно его ограни-чивает, блокируя на некоторое время клиентский IP. Кроме того, веб-мастер

может создавать каталоги-ловушки. Если робот попытается прочитать та-кой каталог, то его запросы также будут перехватываться. Модуль также может среагировать и соответственно блоки-ровать роботов, охотящихся за почто-выми адресами. Имеет настраиваемый список известных спамерских роботов. К сожалению, последняя версия 0.6, датированная 3 ноября 2002 года, под-держивает только Apache 1.3. Порт для второй версии Apache и для IIS, к сожа-лению, так и не состоялся. Это, навер-ное, беда многих хороших OpenSource-проектов.

Остальную информацию вы можете найти в документации. Успехов.

Ссылки:1. Описание протокола robots.txt – http://

www.robotstxt.org/wc/robots.html, http://info.webcrawler.com/mak/projects/robots/norobots.html.

2. A Method for Robots Control – http://www.robotstxt.org/wc/norobots-rfc.html.

3. Robot Exclusion Standard Revisited – http://www.kollar.com/robots.html.

4. ЧАВО по веб-роботам – http:// info.webcrawler.com/mak/projects/robots/faq.html.

5. Расширенный список всех роботов – http://info.webcrawler.com/mak/projects/robots/active/all.txt.

6. Информация Google для веб-мастеров по удалению своего сайта из поиско-вой машины – http://www.google.com/webmasters/remove.html.

7. Who’s Knocking on the Door? – http://country-art.com/class/robotstxt.htm.

8. Сайт проекта RoboGen – http://www.rietta.com/robogen/index.shtml.

9. Сайт проекта Robotcop – http://www.robotcop.org.

<META NAME="URL" ↵ CONTENT="/help.html">

Рисунок 1. Утилита RoboGen «знает» о 180 пользовательскихагентах

Рисунок 2. Утилита RoboTag позволяетсгенерировать мета-теги для вставкив html-файл

Disallow: *.gif$

Disallow: /*?

Disallo<META NAME="ROBOTS" ↵ CONTENT="NOINDEX, ↵ NOFOLLOW">w: *.gif$

<META NAME="GOOGLEBOT" ↵ CONTENT="NONE">

<META NAME="DOCUMENT-STATE" ↵ CONTENT="DYNAMIC">

Page 45: 035 Системный Администратор 10 2005
Page 46: 035 Системный Администратор 10 2005

44

web

В протоколе HTTP предусмотрено два типа автори-зации. Basic-модификация получила весьма ши-рокое распространение. «Системный администра-

тор» уже писал о нём (№5, 2005 г., 88-92 с.). Тогда были де-тально рассмотрены связанные с авторизацией перемен-ные окружения (AUTH_TYPE, REMOTE_USER, REDIRECT_REQUEST_METHOD, REDIRECT_STATUS, REDIRECT_URL), особенности взаимодействия механизмов авторизации и переадресации (в том числе при обработке ошибок, воз-никающих в защищённых зонах). Эти детали одинаковы для basic- и digest-процедур идентификации пользовате-лей, и в настоящей статье мы уже не будем останавливать-ся на этих вопросах, а полностью сосредоточимся на спе-цифике digest-авторизации.

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

Кроме того, basic-авторизация не даёт возможнос-ти «разлогиниться» – прервать сессию. Это естествен-ное следствие того, что никакой сессии и нет – прерывать просто нечего.

Basic-процедура не позволяет контролировать коли-чество неудачных попыток регистрации. То есть позволяет «взламывать» защиту методом грубого подбора пароля.

Но существует и второй тип защиты – digest-авториза-ция. Давайте разберёмся, как она работает и какие пре-имущества даёт.

Digest-авторизация: диалог клиента и сервераВ общих чертах процедура digest-авторизации немного сложнее basic. Диалоги клиента и сервера весьма похо-жи. Однако при digest-авторизации пароль никогда не пе-редаётся по сети в открытом виде.

При первом обращении к защищённой области клиент, естественно, не передаёт никакой идентификационной ин-формации – он пока не знает, что её необходимо передать.

Среди всех средств, предоставляемых протоколом HTTP, digest-авторизация стоит особняком.

Почему? Чем она отличается от вездесущей basic-авторизации? Каковы её сильные и слабые

стороны? Насколько хорошо она поддержана различным ПО и когда уместно её использовать?

В чем сильные и слабые стороны HTTP digest-авторизации

АЛЕКСЕЙ МИЧУРИН

Page 47: 035 Системный Администратор 10 2005

45№10, октябрь 2005

web

Вот заголовки обычного HTTP-запроса:

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

На самом деле в протоколе HTTP не предусмотрено две разные ситуации: «требуется авторизация» и «пароль не-верен». Поэтому ответ с кодом 401 не означает «вы ввели неверный пароль» или «введите пароль»; один код исполь-зуется в обоих случаях.

Вот, как выглядят заголовки ответа сервера:

Как и в случае basic-авторизации, сервер добавил за-головок WWW-Authenticate, в котором сообщил клиенту тип авторизации (Digest), но на этот раз здесь присутству-ют два дополнительных параметра: realm и nonce. Realm передаётся и при basic-авторизации, но в digest-процеду-ре он играет более важную роль, к рассмотрению которой мы ещё вернёмся.

Получив такой ответ, клиент (браузер) запрашивает у пользователя имя и пароль для авторизации (рис. 1).

Так же, как и в случае basic-авторизации, в диалоговом окне отображается значение параметра realm.

Если пользователь откажется от ввода (нажмёт кнопку «Cancel»), то браузер покажет ему страницу, которая при-шла с кодом 401 (как и при Basic-авторизации, эта стра-ница загружается не в момент нажатия кнопки «Cancel»). Если же пользователь ввёл имя и пароль и нажал «OK», то на сервер отправляется запрос, снабжённый идентифи-кационной информацией:

Как видите, теперь в заголовке Authorization передаётся гораздо больше информации, чем при Basic-авторизации.

Кроме типа авторизации, мы видим здесь пять параметров. Следует заметить, что это один из самых простых случаев. Вообще digest-взаимодействие допускает добрый десяток уточняющих параметров, призванных усилить защиту. Не-которые из них мы ещё обсудим, а пока давайте рассмот-рим имеющиеся (все они являются обязательными).! Параметр username сообщает серверу имя, которое ввёл

пользователь.! Realm – имя засекреченной области. Digest-механизм

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

! Параметр nonce содержит ту же строку, которую пере-дал сервер в одноимённом параметре в ответе с кодом 401. Эта информация используется при вычислении па-раметра response (см. ниже).

! Uri – абсолютный путь к документу.! Response – контрольная сумма. Это результат вычис-

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

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

Здесь может присутствовать дополнительный заголовок Authentication-Info, но мы не будем его рассматривать. Пока Apache не имеет никаких возможностей настройки, позво-ляющих усилить защиту, используя возможности этого заго-ловка. Модуль digest_module не использует этот заголовок, а модуль mod_auth_digest эксплуатирует его «фиксирован-ным» образом, не допуская никакой ручной настройки.

GET /a-docs/ HTTP/1.1Host: 127.0.0.1:9090User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.7)Gecko/20050420 Firefox/1.0.3Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5Accept-Language: ru,en-us;q=0.7,en;q=0.3Accept-Encoding: gzip,deflateAccept-Charset: KOI8-R,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-alive

HTTP/1.1 401 Authorization RequiredDate: Tue, 18 Oct 2005 13:04:36 GMTServer: Apache/1.3.33 (Unix)WWW-Authenticate: Digest realm="Realm-A", nonce="3f19e93c8baf99b0fdb9f60d6a228bc61129640676"Keep-Alive: timeout=15, max=98Connection: Keep-AliveTransfer-Encoding: chunkedContent-Type: text/html; charset=iso-8859-1

Рисунок 1. Типичный диалог авторизации

GET /a-docs/ HTTP/1.1Host: 127.0.0.1:9090User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.7) Gecko/20050420 Firefox/1.0.3Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5Accept-Language: ru,en-us;q=0.7,en;q=0.3Accept-Encoding: gzip,deflateAccept-Charset: KOI8-R,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveAuthorization: Digest username="a", realm="Realm-A", nonce="3f19e93c8baf99b0fdb9f60d6a228bc61129640676", uri="/a-docs/", response="60046f788896b2f05dee72e0e9240c4d"

HTTP/1.1 200 OKDate: Tue, 18 Oct 2005 13:04:42 GMTServer: Apache/1.3.33 (Unix)Keep-Alive: timeout=15, max=98Connection: Keep-AliveTransfer-Encoding: chunkedContent-Type: text/html; charset=koi8-r

Page 48: 035 Системный Администратор 10 2005

46

web

К рассмотрению модулей Apache мы перейдём в следу-ющей части этой статьи. А здесь осталось сказать, что да-лее клиент (браузер) передаёт заголовок Authorization авто-матически при каждом обращении к защищённой области. Это очень похоже на basic-авторизацию, но теперь пароль не передаётся в открытом виде, и восстановить его, пере-хватив заголовок Authorization, практически невозможно.

Внимательный читатель наверное уже заметил уязви-мость протокола, связанную с тем, что злоумышленник мо-жет перехватить заголовок, а потом просто использовать легальные значения username, realm, nonce, uri и response. Это откроет ему доступ к ресурсу и без знания пароля. На самом деле мы рассмотрели самый простой сцена-рий digest-авторизации и только основные параметры. Ни-же мы увидим, средства, значительно снижающие возмож-ности того, кто перехватил ваш HTTP-заголовок.

Настройка сервераЗдесь речь пойдёт об HTTP-сервере Apache. Мы постара-емся ориентироваться на широкий круг читателей, многие из которых, возможно, не располагают собственным серве-ром (пользуются виртуальным хостингом) и не имеют воз-можности самостоятельно «пересобрать» серверное ПО из исходных кодов. Но совсем не затронуть этот вопрос не-льзя. С него-то мы и начнём.

Сборка сервераВ Apache 1.1 впервые появился модуль digest_module. Он был предельно прост и реализовывал минимум digest-возможностей. (Именно этим модулем были сгенерированы заголовки, которые мы видели выше как пример самого про-стого digest-диалога.) В версии 1.3.8 был добавлен модуль mod_auth_digest со статусом «экспериментальный». В нём были продублированы функции digest_module и добавле-но несколько новых возможностей. Естественно, использо-вать эти модули совместно нельзя, так как наборы их фун-кций частично перекрываются. В Apache 2.0 модуля digest_module уже нет. В документации на странице, посвящённой переходу на новую версию, сказано, что теперь mod_auth_digest не является экспериментальным. Однако на страни-це, описывающей сам модуль, чёрным по белому написано «Status: Experimental». Во всяком случае ни в одной из из-вестных мне версий Apache digest-авторизация не включа-ется при сборке с «умолчательными» параметрами.

Поэтому, если вы собираете сервер самостоятель-но, дайте утилите . /configure соответствующий ключ. Они различны для разных версий Apache. Например, что-бы статически вкомпиллировать модуль mod_auth_digest в Apache 2.0, необходимо дать ключ --enable-auth-digest. Подробную справку по системе сборки имеющейся у вас версии сервера можно получить, запустив ./configure с клю-чом --help. Как всегда, не помешает почитать INSTALL, хо-тя в Apache 2.0 (после перехода на autoconf) он стал весь-ма лаконичным.

Если вы пользуетесь уже собранным сервером, то, ско-рее всего, вам не придётся предпринимать никаких специ-альных действий. Все известные мне сборки сервера 1.3 включают модуль mod_digest, которого вам хватит (на пер-вое время). Сборки Apache 2.0 включают mod_auth_digest.

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

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

Настройка защищённых зонДля конфигурирования можно использовать файл гло-бальных настроек сервера, группируя директивы в бло-ки <Directory>, <DirectoryMatch>, <Files>, <FilesMatch>, <Location> или <LocationMatch> и защищая указанные фай-лы и директории. Можно использовать и локальные конфи-гурационные файлы .htaccess. В настоящей статье будем для определённости придерживаться второго пути. Но все приводимые конфигурационные директивы можно исполь-зовать и в любых других контекстах.

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

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

Сначала создадим файл с паролями. Для этого есть спе-циальная утилита htdigest. В целом она похожа на htpasswd, но требует больше параметров:

Ключ -c говорит о том, что файл с паролями надо со-здать. Если этот ключ отсутствует, то файл будет допол-нен.! passwdfile – имя файла с паролями.! realm – имя защищённой зоны.! username – имя пользователя.

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

То есть, чтобы создать файл passwd и пользователя a для зоны Realm-A, нам следует ввести следующую ко-манду:

При добавлении новых пользователей ключ -c указы-вать не надо.

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

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

Добавим в него следующие директивы:

LoadModule digest _ module libexec/apache/mod _ digest.soAddModule mod _ digest.c

htdigest -c passwd Realm-A a

htdigest [ -c ] passwdÞle realm username

Page 49: 035 Системный Администратор 10 2005

47№10, октябрь 2005

web

Первая из них объявляет тип авторизации.Вторая – имя защищённой зоны. Оно должно совпа-

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

Третья директива определяет местоположение фай-ла с паролями.

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

Подробнее о зонахВ отличие от basic-авторизации аппарат digest-авториза-ции различает закрытые зоны. Каждый пользователь имеет право авторизоваться только в одной зоне. Этим зоны от-личаются от групп. Если одному пользователю необходимо иметь доступ к нескольким зонам, то для него надо завес-ти соответствующее число учётных записей. Причём в раз-ных зонах один и тот же пользователь может иметь разные пароли.C точки зрения системы безопасности это разные пользователи с одинаковыми именами. Но даже если в раз-ных зонах имеются учётные записи с одинаковым именем пользователя и одинаковым паролем, то этому пользова-телю придётся вновь авторизоваться при входе в новую зо-ну, даже если ранее он уже прошёл процедуру авторизации (с теми же именем и паролем) в другой зоне.

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

Чтобы лучше понять, как пользоваться зонами, давайте рассмотрим дерево директорий, показанное на рис. 2.

Как видите, мы создали восемь директорий. Шесть из них защищены, на схеме они снабжены шапками, в кото-рых указано, к каким зонам они принадлежат. Чёрные шап-ки говорят о том, что в данной директории есть .htaccess, белые – о том, что зона унаследована от родительской ди-ректории. Незащищённые элементы показаны зелёным цветом, зона Realm-A – жёлтым, Realm-B – красным.

При такой организации защиты пользователю доста-точно один раз авторизоваться в зоне Realm-B, «войдя» в директорию /b-docs, и он может обращаться к скриптам из директории /cgi-bin/b-bin, не проходя процедуру иденти-фикации повторно.

После авторизации в /b-docs при первом обращении к /cgi-bin/b-bin браузер, который пока не «знает», что обра-щается к закрытой зоне, отправит обычный запрос. Даль-ше всё будет происходить по уже известному сценарию.

Сервер выдаст ответ об ошибке 401 с сообщением о том, что данная директория принадлежит к зоне Realm-B. Тог-да браузер автоматически сформирует новый запрос с за-головком Authorization. Для пользователя весь этот диалог останется не заметен, вводить имя и пароль повторно не потребуется – браузер уже располагает всей идентифика-ционной информацией для работы в зоне Realm-B.

Самая экзотическая ситуация создана в директории a-docs. В ней находится файл .htaccess, приписывающий её к закрытой зоне Realm-A. Если бы этим дело ограничива-лось, то и её поддиректории – sub-a и sub-b – принадлежа-ли бы к этой зоне. Так и происходит с директорией /a-docs/sub-a: она не содержит собственного .htaccess и просто на-следует все свойства директории a-docs. Однако в директо-рии /a-docs/sub-b имеется собственный .htaccess, согласно которому она принадлежит к зоне Realm-B. По каким пра-вилам взаимодействуют зоны в подобном случае, когда они перекрываются? Безусловно, доминировать будет зо-на Realm-B. То есть, чтобы получить доступ к директории/a-docs/sub-b, не надо быть авторизованным в зоне Realm-A, требуется только право доступа к зоне Realm-B.

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

Группы пользователейКак и basic-авторизация, аппарат digest-авторизации поз-воляет организовывать пользователей в группы. Для это-го существует директива:

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

AuthType DigestAuthName Realm-AAuthDigestFile /home/www/test/passwdRequire valid-user

Рисунок 2. Дерево директорий с двумя защищёнными зонами.Незащищённые директории отмечены зелёным, принадлежащиезоне Realm-A � жёлтым, Realm-B � красным

htdigest -c passwd Realm-A a

Page 50: 035 Системный Администратор 10 2005

48

web

После того как файл с группами создан и путь к нему указан, можно использовать директиву Require следую-щим образом:

Доступ будет разрешён только членам перечислен-ных групп.

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

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

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

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

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

Что будет, если в одном .htaccess разместить и эти три строки, и четыре директивы, требующие авторизации? Что-бы разрешить этот вопрос, существует инструкция Satisfy, допускающая два значения единственного аргумента – Any или All.

Если в этот же файл .htaccess добавить:

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

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

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

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

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

Прямым следствием этого становится невозможность разорвать сессию – «разлогиниться».

Этот недостаток роднит digest- и basic- механизмы. Он, очевидно, связан с самой природой протокола HTTP, для которого не существует понятия «сессия».

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

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

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

Но (и это в-третьих) самый интересный вопрос: а за-щищён ли на самом деле пароль? Ответ на него не так прост.

Казалось бы, что может быть надёжнее MD5-хэширо-вания? Но давайте приглядимся. Злоумышленник может перехватить заголовок – это факт. Нужен ли тогда ему па-роль? Очевидно – нет! Достаточно включить в запросы пе-рехваченный заголовок Authorization и – о чудо! – вы полу-чаете доступ к секретной информации и не зная пароля. Конечно, Internet Explorer не поможет произвести подоб-ный взлом, но тот, кто смог перехватить ваш трафик, су-меет найти подходящий инструмент.

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

Satisfy All

Order Deny,AllowDeny from allAllow from 192.168.1.104

имя _ группы: пользователь ещё _ пользователь ...

Require group имя _ группы ещё _ имя _ группы ...

Require user имя _ пользователя ещё и _ ещё ...

Page 51: 035 Системный Администратор 10 2005

49№10, октябрь 2005

web

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

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

Речь идёт о директиве AuthDigestNonceLifetime. Её единственный аргумент задаёт время, в течение ко-торого параметр nonce остаётся актуальным. По истече-нии этого времени информация, передаваемая в заголов-ке Authorization, «устаревает», и клиенту приходится авто-ризоваться снова. Это происходит автоматически по обыч-ному сценарию. Просто на очередной запрос браузер по-лучает ответ 401, в котором указан новый параметр nonce, но уже известная браузеру зона. Поэтому браузер вычис-ляет новый параметр response (по новому nonce и уже из-вестному паролю) и формирует новый запрос с «правиль-ным» заголовком Authorization, не причиняя пользователю никаких неудобств.

Дополнительное усиление защиты создаётся тем, что сервер и клиент ведут счёт соединениям и используют этот счётчик при вычислении хэш-суммы response. То есть значение параметра response при каждом новом соедине-нии оказывается новым. За более подробной информаци-ей вы можете обратиться к третьей главе RFC-2617, пара-метры nc, state и другие; здесь же мы не будем чрезмерно вдаваться в детали. Главный вывод таков: использование счётчиков делает перехват заголовков практически беспо-лезным; но используются счётчики только более современ-ным модулем mod_auth_digest, модуль digest_module не спо-собен работать с nc и сопутствующими параметрами.

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

Готовый рецепт взлома пароляВ рамках одной статьи трудно осветить все степени за-щиты, которые обеспечивает digest-авторизация (к сожа-лению, далеко не все из них реализованы на практике). Так мы даже не коснулись ещё одного HTTP-заголовка Authentical-Info, который не является обязательным (и ис-пользуется редко), но позволяет защититься от многих ти-пов атак. Мы не рассмотрели конфигурационную директи-ву AuthDigestRealmSeed, позволяющую немного усилить защиту при использовании mod_digest, но практически бесполезную для mod_auth_digest, который предоставля-ет гораздо более мощные средства. Эти и многие другие детали и тонкости, устаревшие или не имеющие принци-пиального значения, мы оставим специалистам. А здесь отметим, что если вы базируетесь только на материале

этой статьи, то не факт, что атака, придуманная вами, бу-дет успешной.

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

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

Возможность такой атаки, казалось бы, сводит на нет все преимущества digest-схемы, но на самом деле подоб-ным атакам в той или иной мере подвержены все систе-мы защиты. Злоумышленник может подменить программу login, может прослушивать клавиатуру и прочее. Этот сцена-рий атаки (MITM – man in the middle) – один из самых древ-них и универсальных. Он с успехом применялся задолго до появления вычислительной техники: от радиоперехвата до подделки берестяных грамот («и в суму его пустую су-ют грамоту другую» А.С. Пушкин). Совсем неудивительно, что этот тип атаки применим и в нашем случае.

Тем, кто хочет узнать ещё десяток способов «сломать» digest-защиту, я бы посоветовал ознакомиться с четвёртой главой RFC-2617.

Стандарты и реализацииДетали digest-авторизации исчерпывающе описаны в RFC-2069. Этот документ датирован 1997 годом. Уточнения бы-ли сделаны в RFC-2617 в 1999 году. Но, невзирая на то, что с тех пор сменилось тысячелетие, ни браузеры, ни сер-вера не выполняют всех требований и рекомендаций, из-ложенных в RFC.

В RFC описано множество возможностей digest-ав-торизации, управляемых добрым десятком параметров. Но Apache до сих пор не позволяет никаким образом вли-ять на большинство из них.

В модуле mod_auth_digest появилось множество на-строечных директив, но реальных возможностей на-стройки прибавилось гораздо меньше. Так, например, AuthDigestAlgorithm позволяет выбрать хэш-функцию. До-пустимы два значения параметра: MD5 и MD5-sess, но ис-пользовать можно только MD5. Появилась директива AuthDigestNcCheck, которая в будущем позволит работать с параметром nc (этот параметр содержит счётчик соеди-нений, о котором упоминалось выше), но сейчас она ниче-го не делает. Одними словом, большинство новых дирек-тив просто зарезервированы.

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

Page 52: 035 Системный Администратор 10 2005

50

web

вилам. То есть, согласно результатам этих тестов, можно ус-тановить переменную AuthDigestEnableQueryStringHack без-условно:

Но документация на Apache рекомендует первый спо-соб, не исключено, что на это есть какие-то причины.

Неразбериха же возникает от того, что большинство об-зоров пытаются ответить на вопрос: «имеет ли IE версии X возможность Y?» Но теперь вы видите, что в данном слу-чае результат тестирования определяется не версией кли-ента, а мельчайшими деталями настройки сервера. Поэтому и возникает тот разброс мнений, который легко наблюдать в Internet. Дело усугубляется ещё и тем, что, с точки зрения любого другого браузера, все три перечисленные конфигу-рации сервера одинаково работоспособны.

На мой взгляд, всё это ещё один пример того, как Microsoft открыто вытирает ноги о весь мир.

К сожалению, у меня не было возможности протести-ровать сервер IIS на предмет его совместимости с какими-либо браузерами, отличными от IE. Но лично у меня нет ос-нований не доверять eWeek.

Преимущества digest-авторизацииИтак, мы рассмотрели тонкости digest-схемы авторизации и обнаружили массу недостатков. Но надо ли после этого ставить на ней крест? Очевидно, нет. Наивно было бы ожи-дать, что какая-либо надстройка над HTTP сможет изме-нить его природу и сделает его надёжнее специализиро-ванных средств, таких как SHTTP и TLS. Но несмотря на то, что digest-процедура не исключает возможности многих ви-дов атак, она всё же оказывается более защищённой, чем basic. Digest-схема имеет некоторые преимущества и пе-ред SSL: она проще в настройке, работа по алгоритмам digest-авторизации не создаёт практически никакой вы-числительной нагрузки на систему, кроме того, не будем забывать, что SSL-сертификаты не бесплатны. Наконец, digest-схема превосходит по стойкости многие протоколы, распространённые не менее, чем протокол HTTP. Не сек-рет, что пароль передаётся в открытом виде в POP3, IMAP, FTP и многих других протоколах.

Конечно, пока трудно найти клиента или сервер, где бы-ли бы реализованы все возможности digest-авторизации, предусмотренные в RFC. (По крайней мере, лично мне не известна ни одна такая программа.) Но работа ведётся. Но-вовведения Apache 2.0 (директива AuthDigestNonceLifetime) уже делают digest-авторизацию весьма ценным – простым и эффективным – инструментом, при обеспечении безо-пасности быстро меняющейся информации.

Дополнительным преимуществом digest-аппарата яв-ляется гибкая работа с секретными зонами – ещё одним средством (наряду с группами) для регламентирования полномочий пользователей.

Таким образом, невзирая на все имеющиеся недостатки, уже сегодня digest-авторизация поднимает HTTP-протокол над многими не менее распространёнными в Сети протоко-лами. Она не делает HTTP самым защищённым, но и не ли-шает его простоты, лёгкости и открытости.

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

Большинство современных браузеров поддерживают digest-авторизацию. В их числе Internet Explorer (о нём требу-ется отдельный разговор), Fire Fox, Opera, Mozilla, Netscape, Amaya. Лично я сталкивался с отсутствием digest-автори-зации, только работая браузером lynx (версия 2.8.5) и... Internet Explorer.

Microsoft went one way; everyone else went the other wayВ подзаголовок вынесена цитата из статьи в eWeek (http://www.eweek.com/article2/0,1759,1500432,00.asp), в которой с должной долей драматизма описан очередной конфликт софтверного гиганта со всем миром; на этот раз – на почве разного понимания RFC-2617. Вследствие этого IE – единс-твенный браузер, не способный работать с Apache, когда де-ло касается digest-авторизации. Более того, IE – единствен-ный браузер, способный работать с IIS по «digest»-схеме, как её понимает Microsoft. Причём MS не считает это ошиб-кой и не собирается ничего менять.

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

Исторически, во времена версий 1.1 и 1.2, разработчики Apache заняли очень твёрдую позицию и не стали подде-рживать Microsoft-интерпретацию RFC. Поэтому, если сер-вер оснащён старым модулем digest_module, пользователи IE 6.0 вообще не смогут на нём авторизоваться.

Но Microsoft проявил не меньшую принципиальность и не стал ничего менять в своей реализации HTTP/1.1. По-этому в новом модуле mod_auth_digest протокол был «усо-вершенствован». Теперь IE мог авторизоваться и даже ра-ботать по Digest-сценарию за одним исключением: сервер не мог корректно обработать запрос GET, если строка за-проса была не пустой. Это связано с тем, что IE нарушает и другие стандарты, не связанные с digest-авторизацией. Microsoft имеет собственную точку зрения на то, что такое URI и другие фундаментальные понятия.

Некоторое время (от версии 1.3.8 до 2.0.51) разработчи-ки Apache ожидали изменений в IE, но шаг навстречу при-шлось делать снова им. В Apache 2.0.51 модуль mod_auth_digest стал обрабатывать переменную окружения AuthDigestEnableQueryStringHack. Если она установлена, то модуль «на лету» корректирует HTTP-заголовки, придавая им стан-дартный вид. То есть, чтобы общение с IE шло без сбоев, следует использовать директиву:

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

Мои личные тесты, проведённые на apache-2.0.55, по-казали, что если браузер «притворяется» Explorer (как это делает Opera), но соблюдает все нормы, то никакого кон-фликта не возникает. Видимо, это сделано в расчёте на то, что IE когда-нибудь начнёт работать по общепринятым пра-

BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

SetEnv AuthDigestEnableQueryStringHack On

Page 53: 035 Системный Администратор 10 2005

51№10, октябрь 2005

bugtraq

Переполнение буфера при обработке HTTP-запросов в Symantec AntiVirus Scan EngineПрограмма: Symantec AntiVirus Scan Engine (version 4.0 and 4.3), Symantec AntiVirus Scan Engine for ISA (version 4.0 and 4.3), Symantec AntiVirus Scan Engine for Netapp Filer (version 4.0), Symantec AntiVirus Scan Engine for Messaging (version 4.3), Symantec AntiVirus Scan Engine for Netapp NetCache (version 4.0), Symantec AntiVirus Scan Engine for Network Attached Storage (version 4.3), Symantec AntiVirus Scan Engine for Bluecoat (version 4.0), Symantec AntiVirus Scan Engine for Caching (version 4.3), Symantec AntiVirus Scan Engine for Microsoft SharePoint (version 4.3), Symantec AntiVirus Scan Engine for Clearswift (version 4.0 and 4.3).Опасность: Критическая.Описание: Уязвимость обнаружена в обработке HTTP-за-просов в административном веб-интерфейсе. Удаленный пользователь может сконструировать специально обрабо-танный HTTP-запрос, который содержит отрицательные значения в некоторых HTTP-заголовках, чтобы вызвать пе-реполнение динамической памяти и выполнить произволь-ный код с SYSTEM-привилегиями.URL производителя: www.symantec.com.Решение: Установите соответствующее обновление – http://securityresponse.symantec.com/avcenter/security/Content/2005.10.04.html#savse4-3-12.

Выполнение произвольного кода в Client Service for NetWareПрограмма: Microsoft Windows 2000 SP4, Microsoft Windows XP SP1, SP2, Microsoft Windows 2003 SP1.Опасность: Критическая.Описание: Уязвимость обнаружена в Client Service for NetWare (CSNW). Удаленный пользователь может выпол-нить произвольный код на целевой системе. В Microsoft Windows 2003 SP1 уязвимость может быть эксплуатирова-на только локальным авторизованным пользователем.URL производителя: www.microsoft.com.Решение: Установите исправление с сайта производите-ля.

Переполнение буфера в препроцессоре Back Orifice в SnortПрограмма: Snort 2.4.0-2.4.2.Опасность: Критическая.Описание: Переполнение буфера существует при обработ-ке Back Orifice-пакетов. Удаленный пользователь может пос-лать приложению специально сформированные UDP-паке-ты, вызвать переполнение буфера и выполнить произволь-ный код на целевой системе.URL производителя: www.snort.com.Решение: Установите последнюю версию (2.4.3) с сайта производителя.

Множественные переполнения буфера в SkypeПрограмма: Skype for Windows Release 1.4.*.83 и более ранние версии, Skype for Mac OS X Release 1.3.*.16 и более ранние версии, Skype for Linux Release 1.2.*.17 и более ран-ние версии, Skype for Pocket PC Release 1.1.*.6 и более ран-ние версии.Опасность: Критическая.Описание: Уязвимость существует при обработке URL (callto:// и skype://). Удаленный пользователь может с по-мощью специально сформированного URL вызвать пере-полнение буфера и выполнить произвольный код на целе-вой системе.

Переполнение буфера обнаружено при обработке VCARD-импортов. Удаленный пользователь может со-здать специально сформированную VCARD, вызвать пе-реполнение буфера и выполнить произвольный код на це-левой системе.

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

Выполнение произвольного кода в Mozilla Firefox при обработке параметров тега IFRAMEПрограмма: Mozilla Firefox 1.0.7 и более ранние версииОпасность: Высокая.Описание: Уязвимость существует при обработке пара-метра ширины HTML тега IFRAME. Удаленный пользова-тель может создать специально сформированную HTML-страницу, указав в параметре width тега IFRAME значение «33333333», вызвать переполнение стека и выполнить про-извольный код на целевой системе с привилегиями теку-щего пользователя или аварийно завершить работу брау-зера. Пример: IFRAME WIDTH=33333333URL производителя: www.mozilla.org/products/firefox.Решение: Установите последнюю версию с сайта произ-водителя.

Уязвимость форматной строки и переполнение буфера в WinRARПрограмма: WinRAR 3.50.Опасность: Высокая.Описание: Уязвимость форматной строки при отображе-нии диагностического сообщения об ошибке, информиру-ющего пользователя о некорректном имени файла в UUE/XXE-кодировке. Удаленный пользователь может создать специально сформированный архив и выполнить произ-вольный код на целевой системе. Переполнение стека об-наружено в библиотеке UNACEV2.DLL при обработке ACE-архивов. Удаленный пользователь может создать ACE-ар-хив, содержащий специально сформированный файл и вы-полнить произвольный код на целевой системе.URL производителя: www.rarlabs.com.Решение: Установите последнюю версию (3.51) с сайта производителя.

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

Page 54: 035 Системный Администратор 10 2005

52

программирование

Отладчики (а отладчик, как из-вестно, – основной инструмент хакера) прошли долгий эволю-

ционный путь – от debug.com до soft-ice. За это время было найдено мно-жество способов борьбы с ними, одна-

Антиотладка: старые приемыАнтиотладка: старые приемына новый ладна новый лад

Крис КасперскиКрис Касперски

Новое, как говорится, – это хорошо забытое старое. Антиотладочные приемы времен MS-DOS

и debug.com возвращаются, чтобы снова работать в Windows 2000/XP/2003. Статья не только

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

по борьбе с хакерами и отладчиками.

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

вается по спирали, и методы защиты, разработанные для MS-DOS и утратив-шие актуальность к концу ее сущест-вования, оказывают убийственное воз-действие на Windows-отладчики, кото-рые просто не предусматривали такого

Page 55: 035 Системный Администратор 10 2005

53№10, октябрь 2005

программирование

русописателем Inbar Raz (что? Ника-ких ассоциаций? Эх... молодежь!) да-тируемой 1993 годом, но сами описан-ные в ней приемы имеют намного бо-лее почетный возраст, и многие из них пришли в MS-DOS с еще более древ-них машин. Попытаемся перенести их на Windows?

Программа, которая трассирует себя самаОдин из древнейших приемов осно-ван на «поглощении» трассировочно-го прерывания отладчиком. Рассмот-рим его поподробнее. Как известно, x86-процессоры имеют специальный trap-флаг (сокращенно TF). Когда он взведен, после выполнения каждой инструкции генерируется специаль-ное отладочное прерывание, обраба-тываемое отладчиком (если, конечно, он установлен и действительно отла-живает программу). В противном слу-чае управление получает обработчик по умолчанию. В MS-DOS он представ-ляет собой «холостую» заглушку, со-стоящую из одного лишь IRET, и вы-полнение программы не прерывает-ся, а вот Windows возбуждает исклю-чение, приводящее к появлению хоро-шо всем известного диалогового окна «программа совершила недопустимую операцию и будет закрыта».

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

Рисунок 1. Древнейший отладчикdebug.com

признали тот факт, что научить про-граммистов программированию им так и не удалось, а теперь уже и не удас-тся. Операционные системы и прило-жения буквально нашпигованы ошиб-ками переполнения буфера, через ко-торых распространяются черви, тро-янские программы и другая зараза. Чтобы прикрыть лазейку, пришлось пойти на довольно жесткую, спорную и радикальную меру – неисполняемый стек. И хотя распространения червей он все равно не остановит, ведь су-ществуют и другие типы переполняю-щихся буферов (множество статей на эту тему лежит на ftp://nezumi.org.ru), для нас (пользователей и программис-тов) в практическом плане это означа-ет, что огромное количество программ перестанет работать, поскольку они защищены упаковщиками и протек-торами, использующими самомоди-фицирующийся код, исполняющийся в стеке. Поэтому Microsoft предусмот-рела возможность отключения защи-ты. При первой попытке исполнения ко-да на стеке Windows XP выбросит гроз-

Рисунок 2. Диалоговое окно, появля-ющееся при попытке выполнения кода в стеке

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

Разумеется, непосредственный перенос антиотладочных методик из MS-DOS в Windows невозможен хо-тя бы уже потому, что в Windows нет «прерываний» в том смысле, который в них вкладывает MS-DOS. В ней нет портов ввода/вывода, физической па-мяти и множества других привычных для MS-DOS-программистов концеп-ций и вещей. То есть они, разумеет-ся, есть (куда же без прерываний?!), но техника работы с ними радикаль-но отличается. Так что определенная адаптация все-таки необходима.

Основной упор мы сделаем на при-кладной уровень и программистов средней квалификации, которые, воз-можно, имеют представление о драй-верах, но разрабатывать их само-стоятельно не собираются. Некото-рые из описанных методик практи-чески полностью системно независи-мы и работают под любой 32-разряд-ной операционной системой семейс-тва Windows, частично поддержи-вая Windows 3.x и Windows XP 64-bit edition. Некоторые требуют только NT или производную от нее систему, при-чем никаких гарантий сохранения ра-ботоспособности в последующих вер-сиях Windows у нас нет. Даже если ис-пользовать только документирован-ные функции, Microsoft в любой момент может их изменить, как это она уже де-лала неоднократно, причем, в послед-нее время все чаще и чаще. Лучше во-обще не использовать никаких систем-но зависимых функций и писать все на ANSI Си/С++ или DELPHI (факти-чески DELPHI представляет собой са-мостоятельную «операционную систе-му», натянутую поверх Windows и абс-трагирующую программиста от прихо-тей Microsoft – вы просто перекомпили-руете код и все! Разумеется, речь идет только о прикладных задачах и на ан-тиотладочные приемы указанное пре-имущество DELHPI не распространя-ется). Тем не менее, бояться антиот-ладочных приемов не нужно. Их ис-пользование вполне допустимо, если не сказать – желательно.

Хороший сборник антиотладочных приемов глубокой древности можно найти в статье «Anti Debugging Tricks» (http://textfiles.group.lt /programming/antidbg.txt), написанной известным ви-

Page 56: 035 Системный Администратор 10 2005

54

программирование

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

Впрочем, отладчики типа Microsoft Visual C++ дурить не-обязательно и следующий бесхитростный код легко обна-руживает их присутствие. Попробуйте его выполнить в по-шаговом режиме и посмотрите, что произойдет!

Главный минус этого приема в том, что его очень лег-ко обойти. Достаточно, например, просто подогнать кур-сор к команде pushf, сказать отладчику «HERE» (т.е. выпол-няй программу до этого места без трассировки), затем по-догнать курсор к jnz и сказать «HERE» еще раз. Таким об-разом, защищенный фрагмент будет исполняться в обыч-ном режиме и присутствие отладчика окажется незамечен-ным, поэтому многие программисты предпочитают сохра-нять регистр флагов в одном месте программы, а прове-рять его в другом. Начинающих хакеров это сбивает с тол-ку, но опытных так не проведешь. На конструкцию pushf/pop reg/xxx reg,100h у них уже давно выработался безуслов-ный рефлекс, к тому же взломщику ничего не стоит заме-нить or eax,100h на and eax,0h, и тогда программа навсегда утратит способность распознавать отладчик. Можно (и нуж-но), конечно, добавить проверку собственной целостности, но только навряд ли она надолго остановит хакера.

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

Данный прием позволяет обнаруживать soft-ice и многие другие отладчики, причем на пассивную отладку он не ре-агирует (и это хорошо!). Пользователь нашей программы может запускать soft-ice и отлаживать остальные програм-мы, но... как только он попытается загрузить в отладчик на-шу, она тут же подаст сигнал. То же самое произойдет, ес-ли хакер присоединит отладчик к уже запущенному про-цессу или ворвется в середину программы путем установ-ки точек останова на API-функции. Естественно, антиотла-дочный код должен выполняться не до, а после загрузки от-ладчика. То есть размещать его в самом начале защища-емой программы не стоит. Лучше – многократно дублиро-вать в различных местах.

Прелесть данного приема в том, что его достаточно труд-но распознать при взломе. Явные проверки отсутствуют и команда jmp under_debugger выглядит невинной овечкой. При ее выполнении без отладчика возбуждается исключе-ние, перехватываемое обработчиком и выполнение про-граммы идет уже совсем по другому пути (обработчик под-меняет указатель команд, хотя, впрочем, он мог бы этого и не делать – в отличие от прерываний, из которых в MS-DOS нужно было выходить как можно скорее, чтобы не развалить систему, обработчик структурного исключения в принципе может вмещать в себя весь код программы целиком, и хи-мичить с контекстом совершенно необязательно – зачем лишний раз привлекать внимание хакера?). Под отладчи-ком же команда jmp under_debugger выполняется «как есть» и хакер может очень долго ковыряться в подложной ветке under_debugger, не понимая, что здесь вообще происходит и откуда это взялось?! Чтобы оттянуть взлом, лучше не го-ворить сразу, что отладчик обнаружен, а подсунуть какой-нибудь зашифрованный код или что-то еще.

Главное, чтобы команды popf и jmp under_debugger не были разделены никакими другими инструкциями! Ина-че защита не сработает! Трассировочное исключение ге-нерируется сразу же после выполнения первой команды, расположенной после popf, и если ею окажется, например, nop, то jmp никаких исключений уже не достанется. Так что замаскировать защитный код, рассредоточив его по все-

Листинг 2. Универсальный антиотладочный прием,распознающий трассировку под большинством отладчиков

; устанавливаем новый обработчик структурных ; исключений ; обнуляем регистр eax xor eax,eax ; кладем в стек указатель на новый обработчик push offset SEH _ handler ; кладем в стек указатель на старый обработчик push dword ptr fs:[eax] ; регистрируем новый SEH-обработчик mov fs:[eax],esp ; взводим флаг трассировки pushf ; заталкиваем в стек регистр флагов pop eax ; выталкиваем его содержимое в регистр eax or ah, 1 ; взводим флаг TF push eax ; кладем eax в стек popf ; выталкиваем его содержимое в регистр ; флагов ; теперь флаг трассировки взведен!

; после выполнения этой команды генерируется ; исключение, и если отладчик не установлен, ; его перехватывает SEH-обработчик, который ; корректирует EIP, и эта команда не выполняется ; под отладчиком происходит переход на ветку ; under _ debugger jmp under _ debugger

// ... ; основной код программы // ; SEH-обработчик может быть расположен в любом месте ; (лучше расположить его подальше от защитного кода, ; чтобы он не так бросался в глаза)SEH _ handler: ; указатель на контекст регистров mov esi, [esp+0ch] assume esi: PTR CONTEXT mov [esi].regEip, offset continue ; откуда продолжать выполнение ; в отсутствии отладчика xor eax, eax ret ; выход из SEH-обработчика

continue: ; // отсюда будет продолжено управление, ; если отладчик не установлен

Листинг 1. Простейший антиотладочный прием, распознающийтрассировку под некоторыми отладчиками

pushf ; сохраняем флаги в стеке, ; включая и TF pop eax ; выталкиваем сохраненные флаги ; в eax and eax, 100h ; выделяем флаг трассировки jnz under _ debugger ; если TF взведен, нас трассируют

Page 57: 035 Системный Администратор 10 2005

55№10, октябрь 2005

программирование

му оперативному периметру, уже не удастся. К тому же ха-кер может легко нейтрализовать защиту, просто заменив jmp under_debugger на jmp continue. Чтобы этому противо-стоять, необходимо взводить в SEH-обработчике специаль-ный флаг и проверять его по ходу выполнения программы – был ли он вызван или нет. А в самом SEH-обработчике еще контролировать и тип исключения, иначе хакер просто до-бавит xor eax,eax/mov [eax],eax (обращение по нулевому указателю, генерирующее исключение) и тогда SEH-об-работчик будет получать управление как под отладчиком, так и без него. Кстати говоря, защита данного типа была использована в программе ulink Юрия Харона, взлом кото-рой подробно описан в моих «Фундаментальных основах хакерства – записках мыщъх’а», которую можно бесплат-но скачать с моего ftp-сервера nezumi.org.ru.

Зададимся таким вопросом: может ли отладчик трас-сировать программу, которая уже находится под трасси-ровкой (например, отлаживается другим отладчиком или трассирует сама себя). Непосредственно – нет, поскольку флаг трассировки в x86 процессорах один и его вложен-ность не поддерживается. С другой стороны, если вышес-тоящий отладчик отслеживает обращение к флагу трасси-ровки и эмулирует возбуждение трассировочного преры-вания, передавая управление не на следующую команду, а на SEH-обработчик, такая схема может работать, прав-да, код отладчика существенно усложнится, а поскольку, коммерческие отладчики ориентированы исключительно на легальных программистов, которые взломом защит не занимаются (или, во всяком случае, предпочитают это не афишировать), то создавать идеальный отладчик произво-дителю просто не резон. Что же до некоммерческих отлад-чиков… При всем моем уважении к ним (я часто использую OllyDbg и люблю его), они еще не встали с горшка и для достижения совершенства им еще расти и расти. Впрочем, эмулирующие отладчики с такой защитой справляются на раз, но где вы видели эмулирующий отладчик под Windows? Можно, конечно, взять полноценный эмулятор PC с интег-рированным отладчиком типа BOCHS (под который, кста-ти говоря, существуют и дополнительные отладчики, вхо-дящие в исходные тексты, но отсутствующие в готовой би-нарной сборке), однако отлаживать на нем Windows-прило-жения практически нереально, поскольку нет никакой воз-можности отличить код одного процесса от другого.

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

Простейший пример такой защиты приведен ниже. Он «позаимствован» из моей книги «Техника и философия хакерских атак» (полную электронную версию которой мож-но бесплатно скачать с ftp://nezumi.org.ru) и работает только под MS-DOS, тем не менее легко переносится в Windows, просто обработчик прерывания заменяется на обработ-чик структурного исключения (как именно это делается,

показано в листинге 2) и перед расшифровкой вызывает-ся API-функция VirtualProtect для установки атрибута запи-си (по умолчанию секции .text/.code и .rodata имеют атри-бут read-only, и непосредственная расшифровка кода в них невозможна). Windows-вариант не сложен в реализации, но слишком громоздок и потому ненагляден.

Листинг 3. Пример простейшей самотрассирующейсяпрограммы под ms-dos

; // устанавливаем новый обработчик трассировочного ; прерывания int 01h ; функция 25h (установить прерывание), ; прерывание � 01h mov ax,2501h ; указатель на обработчик прерывания lea dx,newint01h ; сервисная функция ms-dos int 21h ; // взводим флаг трассировки pushf ; сохраняем регистр флагов в стеке pop ax ; выталкиваем его в регистр ax or ah,1 ; взводим бит TF ; сохраняем измененный регистр ax в стеке push ax ; выталкиваем модифицированное значение ; в регистр флагов popf // теперь после выполнения каждой команды // процессор будет генерировать int 01, // передавая управление его обработчику // подготавливаем параметры для расшифровки lea si, crypted _ begin mov cx, (offset crypted _ end - crypted _ begin) / 2 repeat: ; // основной цикл расшифровки ; читаем очередное слово по si в ax, увеличивая si на 2 lodsw ; записываем в ячейку [esi-2] содержимое bx mov [si-2],bx ; крутим цикл, пока cx не равен нулю loop repeat

; кажется, что это дурной цикл, работящий как memset; т.е. заполняющий область памяти содержимым bx; которое даже не было инициализировано!; однако все не так, и на каждом ходу генерируется; трассировочное прерывание, передающее управление; обработчику int 01h, который неявно модифицирует bx ; // сбрасываем флаг трассировки pushf ; сохраняем регистр флагов в стеке pop dx ; выталкиваем его в регистр dx ; (ax используется обработчиком int 01h) and dh,0FEh ; сбрасываем бит TF ; сохраняем измененный регистр dx в стеке push dx ; выталкиваем модифицированное значение ; в регистр флагов popf

; // еще одна ловушка для хакераjmp _ to _ dbg: jmps under _ debugger // ... ; «полезная нагрузка» (основной код программы) // new _ int _ 01h: ; зашифровываем содержимое регистра ax xor ax, 9fadh mov bx, ax ; помещаем его в регистр bx mov word ptr cs:[jmp _ to _ dbg],9090h

; «убиваем» условный переход, ведущий к подложной ветке; (под отладчиком обработчик int 01h не получит; управления и переход не будет убит) iret ; выходим из обработчика прерывания crypted _ begin:

Page 58: 035 Системный Администратор 10 2005

56

программирование

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

Главное достоинство описанного приема в том, что он хо-рошо чувствует себя под всей линейкой Windows (как 9x, так и NT) и маловероятно, чтобы в последующих версиях что-нибудь изменилось.

Доступ к физической памятиВ MS-DOS код отладчика и системные данные (например, таблица векторов прерываний) находились в одном адрес-ном пространстве с отлаживаемой программой, что откры-вало большой простор для методов борьбы. Можно было проскандировать память и убить отладчик или просто за-действовать отладочные вектора (int 01h и int 03h) под нуж-ды защитного механизма, положив туда что-то полезное (скажем, ключ расшифровки), а через некоторое время счи-тать его обратно. Если никакого отладчика нет или он не-активен, искажение отладочных векторов не нарушает ра-ботоспособности операционной системы, и мы читаем то, что положили. А вот под отладчиком все будет иначе. Ско-рее всего произойдет тотальный крах, поскольку при гене-рации трассировочного прерывания или достижении точ-ки останова управление будет передано в «космос» (век-тор ведь искажен!). Если же отладчик принудительно вос-становит вектора, тогда вместо сохраненных данных за-щищенная программа прочитает уже не ключ расшифров-ки, а нечто совершенно иное! Теоретически на 386+ про-цессорах отладчик может контролировать доступ к отла-дочным векторам и эмулировать операции чтения/записи, не производя их на самом деле. Но это потребует двух ап-паратных точек останова, которых в x86 процессорах все-го четыре, да и тех постоянно не хватает, так что разбра-сываться ими не резон.

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

В операционных системах семейства NT имеется спе-циальное псевдоустройство «PhysicalMemory», предостав-

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

При наличии прав администратора мы можем не толь-ко читать «PhysicalMemory», но и писать. Да-да! Вы не ос-лышались и это не опечатка! С прикладного уровня можно проникнуть в святая святых операционной системы, свобод-но модифицируя код, исполняющийся на привилегирован-ном уровне нулевого кольца (RING0), а это значит, что мы фактически имеем RING0 на прикладном кольце (RING3)! Любой отладчик может быть уничтожен без проблем, да-же если это отладчик-эмулятор. Исключение составляют лишь виртуальные машины типа BOCHS, но, как мы уже говорили, пытаться отладить Windows-приложение на них несерьезно. Хакер утонет в посторонних потоках и систем-ных вызовах!

Замечание: Эмуляторы типа VMWare или Virtual PC убить через PhysicalMemory так же нельзя, но что толку? Они не содержат интегрированного отладчика и не могут содер-жать его в принципе, поскольку используют динамичес-кую эмуляцию, при которой большая часть кода виртуаль-ных машин исполняется на живом процессоре, а это зна-чит, что проэмулировать TF-флаг без серьезной доработ-ки эмулятора (и потери колоссальной производительнос-ти) никому не удастся.

Некоторые считают PhysicalMemory ужасной дырой в безопасности. Дескать, как это так – с прикладного уров-ня и сразу в дамки! На самом деле здесь нет ничего не-нормального. Если у хакера есть права администратора, он может беспрепятственно загружать драйвера, из кото-рых можно делать все, что угодно, причем в NT загрузка драйвера не требует перезагрузки, а это значит, что нали-чие псевдоустройства «PhysicalMemory» никак, я повторяю, никак не отражается на безопасности, а всего лишь делает доступ к физической памяти более комфортным и удобным. В UNIX (модель безопасности которой вырабатывалась годами) издавна существуют псевдоустройства /dev/memи /dev/kmem, предоставляющие доступ к физической памя-ти до и после трансляции, но никто не собирается их кри-тиковать. Эта функция нужна достаточно многим систем-ным программам и самой операционной системе, если ее изъять, программисты начнут писать свои драйвера, предо-ставляющие доступ к физической памяти, и тогда начнет-ся полный разброд и распад, поскольку в них не исклю-чены всякого рода ошибки. Разработчик драйвера может забыть о проверке уровня привилегий и давать доступ не только администраторам, а всем пользователям системы, что будет нехорошо. Тем не менее Microsoft все-таки пош-ла на довольно-таки спорный шаг, и в Windows 2003 Server с установленным Service Pack 1 доступа к PhysicalMemory уже не имеет ни администратор, ни даже System. (см. статью «Changes to Functionality in Microsoft Windows Server 2003 Service Pack 1 Device\PhysicalMemory Object» на сайте Microsoft: www.microsoft.com/technet/prodtechnol/windowsserver2003/library/BookofSP1/e0f862a3-cf16-4a48-bea5-f2004d12ce35.mspx).

// ... ; зашифрованный код/данные // crypted _ end:

Page 59: 035 Системный Администратор 10 2005

57№10, октябрь 2005

программирование

Тем не менее на всех остальных системах данный при-ем работает вполне нормально, поэтому не стоит списывать его со счетов, а с Windows 2003 Sever SP1 мы еще разбе-ремся! (Не сейчас, в смысле еще не в этой статье, но как-нибудь потом.)

Давайте возьмем утилиту objdir из пакета NT DDK и за-пустим ее с параметром «\Device» (просмотр устройств и псевдоустройств, установленных в системе). Вот что она скажет:

Как видно, PhysicalMemory – это не совсем устройство, точнее, совсем не устройство (Device), а секция (Section), поэтому для работы с ней следует использовать функцию NtOpenSection. Пример простейшей реализации такого вы-зова приведен ниже:

Возможно, мы захотим предоставить доступ к псев-доустройству PhysicalMemory не только администратору, но и всем другим пользователям. Для этого необходимо изменить права. Естественно, делать это может только ад-министратор, зато потом физическую память будут трогать все кому не лень. Многие вирусы и root-kit именно так и пос-тупают. Они прописывают себя в автозагрузке (или любым другим путем закрепляются в системе) и ждут, пока пользо-ватель хотя бы разочек не зайдет в систему под админист-ратором. После этого они меняют права на PhysicalMemory и дальше работают уже из-под пользователя. Легальные программы, в частности защитные механизмы, зачастую поступают так же. Требуя администратора лишь на стадии установки, они тем не менее успевают за это время сущес-твенно ослабить безопасность системы. Ну что тут можно сказать? Никогда не устанавливайте на компьютер про-грамм, которым не вполне доверяете. То есть не устанав-ливайте никаких программ вообще. Шутка. Ладно, не будем отвлекаться, а лучше рассмотрим, какие шаги необходимо предпринять для изменения атрибутов доступа.

! открываем \ Device\ PhysicalMemory, используя NtOpenSection, получаем дескриптор;

! извлекаем из него дескриптор безопасности (security descriptor) через GetSecurityInfo;

! добавляем права на чтение/запись в текущий ACL с по-мощью функции SetEntriesInAcl;

! обновляем дескриптор безопасности посредством вы-зова SetSecurityInfo;

! закрываем дескриптор, возвращенный NtOpenSection.

Теперь физическую память можно читать и писать. Для этого секцию PhysicalMemory нужно спроецировать на виртуальное адресное пространство, вызвав NativeAPI-функцию NtMapViewOfSection. Ниже показано, как это сде-лать:

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

Для большинства задач искать соответствие между физическими и виртуальными адресами вообще не нуж-но! Ведь существуют же сигнатуры! Достаточно создать банк сигнатур всех популярных отладчиков, после чего их обнаружение не станет проблемой, а большинство слу-жебных структур типа таблицы дескрипторов прерываний (IDT) вообще работают с физическими адресами. Найти их путем сканирования PhysicalMemory – не проблема. Пос-ле чего останется только поиздеваться над прерывания-ми int 01h и int 03h (или над их обработчиками). Прием, ко-нечно, грубый и убивающий любые отладчики независимо от того, отлаживают ли они нашу программу или нет. Пра-вильные программисты так не поступают! Защитные ме-ханизмы не должны, просто не имеют морального (и от-

Листинг 4. Просмотр списка установленных (псевдо)устройствутилитой objdir

$objdir \Devic

…ParTechInc0 DeviceParTechInc1 DeviceParTechInc2 DevicePfModNT DevicePhysicalMemory SectionPointerClass0 DeviceProcessor DeviceRasAcd DeviceRawCdRom Device

Листинг 5. Открытие псевдоустройства PhysicalMemory

// разные переменныеNTSTATUS ntS; HANDLE Section; ↵ OBJECT _ ATTRIBUTES ObAttributes;INIT _ UNICODE(ObString,L"\\Device\\PhysicalMemory");

// инициализация атрибутовInitializeObjectAttributes(&ObAttributes, &ObString, ↵ OBJ _ CASE _ INSENSITIVE | OBJ _ KERNEL _ HANDLE, ↵ NULL, NULL);

// открываем секцию PhysicalMemoryntS = NtOpenSection(&Section, ↵ SECTION _ MAP _ READ|SECTION _ MAP _ WRITE, ↵

&ObAttributes);

Листинг 6. Проецирование физической памяти на виртуальноеадресное пространство

// переменные-аргументыHANDLE Section = xxx; // ← входной параметр дескриптор // секцииPVOID vAddress = xxx; // ← входной параметр виртуальный // адрес, куда проецироватьDWORD Size = xxx; // ← количество байт для // проецирования от начала секции

// прочие переменные, инициализированные программойPHYSICAL _ ADDRESS pAddress; NTSTATUS ntS; ↵ DWORD MappedSize; PVOID MappedAddress=NULL;

// Внимание! Функции _ _ GetPhysicalAddress не сущестует// в природе! Она дана условно. Ниже по тексту будет // объяснено почему

pAddress = _ _ GetPhysicalAddress((PVOID) vAddress);

// проецируем секцию PhysicalMemory на виртуальное// адресное пространствоntS = NtMapViewOfSection(Section, (HANDLE) -1, ↵ &MappedAddress, 0L, Size, &pAddress, &MappedSize, ↵ 1, 0, PAGE _ READONLY);

Page 60: 035 Системный Администратор 10 2005

58

программирование

части даже юридического) права мешать отладке посто-ронних программ, но... Зачастую они все-таки мешают. Так что сказанное надо воспринимать не как руководство к действию, а как пособие по ремонту чужих защит. О взло-ме в данном случае никто и не говорит. Почему я, легаль-ный пользователь защищенной программы, заплативший за нее деньги, не могу держать на компьютере soft-ice?! Почему я должен каждый раз перезагружаться для рабо-ты с программой?!

Впрочем, все это лирика. В некоторых случаях (напри-мер, для борьбы с отладчиками прикладного уровня) вы-полнять трансляцию все-таки необходимо. Это не так-то просто сделать! Статья «Playing with Windows /dev/(k)mem» из PHRACK (http://www.phrack.org/phrack/59/p59-0x10.txt) дает некоторые зацепки, частично решающие проблемы, но до полной победы еще далеко.

Проще всего транслируются адреса из диапазо-на 80000000h:A0000000h. Перевод виртуального ад-реса в физический осуществляется путем наложения маски 1FFFF000h, однако начиная с адреса 877EF000h это правило срабатывает не всегда. Адреса < 80000000h и > A0000000h уже не могут быть транслированы таким пу-тем, хотя с некоторой вероятностью маска FFFF000h все-таки срабатывает, и простейший вариант реализации фун-кции __GetPhysicalAddress выглядит так:

Его можно встретить в некоторых вирусах и root-kit (ког-да вы столкнетесь с ним при дизассемблировании, вы бу-дете знать, что это такое), однако в легальных программах (особенно коммерческих!) его использование категоричес-ки недопустимо, и потому необходимо либо все-таки писать свой драйвер, вызывающий MmGetPhysicalAddress из ре-жима ядра, либо, воспользовавшись тем фактом, что ад-реса из диапазона 80000000h:877EF000h транслируются однозначно, внедрить в операционную систему специаль-ный «жучок». То есть фактически создать в ней свой собс-твенный call-gate, позволяющий вызывать ядерные фун-кции с прикладного уровня. Один из вариантов его реа-лизации приведен в вышеупомянутой статье, однако он не свободен от ошибок, и на многопроцессорных маши-нах (которыми, в частности, являются все машины с ма-теринской платой и процессором Pentium-4 с технологией Hyper-Threading, не говоря уже о многоядерных AMD) воз-можны «синие экраны смерти», которые опять-таки недо-пустимы...

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

Если не трогать трансляцию, то никаких проблем вообще не возникает!

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

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

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

Как работает Win2K/XP SDT RestoreХорошим примером использования доступа к физической памя-ти «честными» программами является утилита SDT Restore, ко-пию которой можно бесплатно скачать с http://www.security.org.sg/code/sdtrestore.html. Как и следует из ее названия, она занимается тем, что восстанавливает SDT – Service Description Table, содер-жащую указатели на системные вызовы, которые могут быть пе-рехвачены злоумышленником для сокрытия своего присутствия в системе, то есть стелсирования. Многие root-kit так и делают. Они подменяют оригинальные вызовы на свои, и система теряет способность обнаруживать создаваемые ими файлы, процессы, сетевые соединения и т. д.

В MS-DOS для борьбы со Stealth-вирусами обычно прибега-ли к системной дискете, но те времена уже давно прошли и, хо-тя Windows в принципе можно загрузить и с лазерного диска (на-пример, Windows PE) или с дополнительного винчестера, такой подход не слишком-то удобен, хотя бы уже потому, что требует перезагрузки, а сервера лучше не перезагружать. Проще (хотя и не столь надежно) восставить SDT через PhysicalMemory. И хо-тя root-kit может легко отследить обращение к ней (для этого ему достаточно перехватить NtOpenSection), все известные мне зло-вредные программы этим еще не занимаются, и потому они мо-гут быть легко обезврежены. Во всяком случае пока.

Подробнее о методах маскировки и борьбы можно прочитать в статье «Hide’n’Seek – Anatomy of Stealth Malware» (http://www.blackhat.com/presentations/bh-europe-04/bh-eu-04-erdelyi/bh-eu-04-erdelyi-paper.pdf).

Листинг 7. Простейший (но ненадежный) алгоритм трансляцииадресов

PHYSICAL _ MEMORY MyGetPhysicalAddress(void *BaseAddress){ if (BaseAddress < 0x80000000 || BaseAddress >= ↵ 0xA0000000) { return(BaseAddress & 0xFFFF000); } return(BaseAddress & 0x1FFFF000);}

Page 61: 035 Системный Администратор 10 2005

59№10, октябрь 2005

bugtraq

Уязвимость форматной строки при обработке имени файла в различных антивирусах BitdefenderПрограмма: BitDefender Internet Security 9, BitDefender Professional Plus 9, BitDefender Standard 9, BitDefender Antivirus Professional Plus 8.x, BitDefender Antivirus Standard 8.x, BitDefender Professional Edition 7.x, BitDefender Standard Edition 7.x.Опасность: Критическая.Описание: Уязвимость форматной строки обнаружена при создании файла с результатами сканирования. Модуль не в состоянии корректно обработать специально сфор-мированный каталог или файл, содержащий специфика-ции формата в его имени (например, 8X%.8X). В результа-те удаленный атакующий может создать специально об-работанный файл чтобы скомпрометировать систему уда-ленного пользователя.URL производителя: www.bitdefender.com.Решение: Уязвимость устранена в BitDefender 7.x, BitDefender 8.x и BitDefender 9 Internet Security 26 сентября 2005 года и в BitDefender 9 Professional Plus и BitDefender 9 Standard 4 октября 2005 года.

Выполнение произвольного кода в Sun Directory ServerПрограмма: Sun Directory Server 5.2 Patch 3 и более ран-ние версии.Опасность: Критическая.Описание: Уязвимость позволяет удаленному пользовате-лю выполнить произвольный код на целевой системе. Под-робности уязвимости не сообщаются.URL производителя: www.sun.com.Решение: Установите исправление (5.2 Patch 4) с сайта производителя.

Уязвимость форматной строки в VERITAS NetBackup в службе bpjava-msvcПрограмма: VERITAS NetBackup Data and Business Center 4.5FP All All NB_45_9S1443_F, VERITAS NetBackup Data and Business Center 4.5MP All All NB_45_9S1729_M, VERITAS NetBackup Enterprise/Server/Client 5.0 All All NB_50_5S1320_M, VERITAS NetBackup Enterprise/Server/Client 5.1 All All NB_51_3AS0949_M, VERITAS NetBackup Enterprise/Server/Client 6.0 All All NB_60_3S0007_M.Опасность: Критическая.Описание: Уязвимость форматной строки обнаружена в службе bpjava-msvc, предназначенной для аутентифика-ции пользователей в пользовательском Java-интерфейсе. Удаленный пользователь может послать специально сфор-мированную команду COMMAND_LOGON_TO_MSERVER на TCP-порт приложения 13722 и выполнить произвольный код на целевой системе с привилегиями SYSTEM.URL производителя: www.symantec.com.Решение: Установите исправление с сайта производите-ля.

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

Множественные уязвимости в различных диссекторах в EtherealПрограмма: Ethereal 0.7.7-0.10.12.Опасность: Критическая.Описание: Обнаружены множественные уязвимости в об-работке различных диссекторов и PCRE в Ethereal. Удален-ный пользователь может с помощью специально сформи-рованных пакетов вызвать отказ в обслуживании или вы-полнить произвольный код на целевой системе.1. Потребление всех доступных ресурсов на системе в дис-

секторах ISAKMP, FC-FCS, RSVP, ONC RPC и ISIS LSP.2. Аварийное завершение работы в диссекторах IrDA,

SMB.3. Выполнение произвольного кода в диссекторах SLIMP3,

AgentX, SRVLOC4. Бесконечный цикл в диссекторах BER, SigComp

UDVM.5. Разыменование нулевого указателя в диссекторах SCSI,

sFlow, Rtnet6. Деление на ноль в диссекторе X117. Освобождение некорректного указателя в диссекторе

WSP

Установщик Windows использует уязвимую версию PCRE.URL производителя: www.ethereal.com.Решение: Установите последнюю версию (0.10.13) с сай-та производителя.

Переполнение буфера в ProZillaПрограмма: ProZilla 1.3.7.4.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки при обра-ботке результатов поиска в функции get_string_ahref() фай-ла ftpsearch.c. Удаленный пользователь может вызвать пе-реполнение стека и выполнить произвольный код на целе-вой системе с помощью злонамеренного сервера, который вернет на запрос специально сформированную строку в ат-рибуте HREF тега <A>. Удачная эксплуатация требует, что-бы ProZilla был запущен с атрибутом -ftpsearch и атакую-щий мог отравить DNS-кеш.URL производителя: http://prozilla.genesys.ro.Решение: Установите исправление с сайта производите-ля.

Переполнение буфера в компоненте W3C-логирования в MailEnableПрограмма: MailEnable Professional 1.6 и более ранние вер-сии; Enterprise 1.1 и более ранние версии.Опасность: Высокая.Описание: Уязвимость существует в службе IMAP в компо-ненте W3C-логирования. Удаленный пользователь может вызвать переполнение буфера и выполнить произвольный код на целевой системе.URL производителя: www.mailenable.com.Решение: Установите исправление с сайта производителя – http://www.mailenable.com/hotfix/MEIMAPS-UPD0508221400.zip.

Page 62: 035 Системный Администратор 10 2005

60

программирование

С егодня мы рассмотрим пример взаимодействия программы на языке Си и сервера баз данных PostgreSQL c использованием библиотеки libpq.

В случае отсутствия опыта работы с СУБД PostgreSQL ре-комендую начать изучение этой темы со статьи Сергея Супрунова [1].

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

Как программы на Си взаимодействуют Как программы на Си взаимодействуют с сервером БД PostgreSQLс сервером БД PostgreSQL

Владимир МешковВладимир Мешков

PostgreSQL является эффективным средством для хранения и обработки информации.

Разработчики этой СУБД предоставили интерфейсы для многих языков программирования.

Поддержка таких языков, как Perl, PHP, Python, обеспечивает широкое применение PostgreSQL

в области веб-программирования. Язык системного программирования Cи позволит использовать

эту СУБД, когда необходимо добиться от приложения максимального быстродействия.

Page 63: 035 Системный Администратор 10 2005

61№10, октябрь 2005

программирование

зой данных. Библиотека входит в состав дистрибутива СУБД PostgreSQL.

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

Для хранения адресной информации сокет домена AF_UNIX использует структурный тип sockaddr:

Поле sa_family определяет тип домена, к которому при-надлежит сокет (AF_UNIX в нашем случае), массив sa_data содержит путь к файлу, который описывает сокет.

Таким образом, сокет домена AF_UNIX представляет собой специальный файл. Сервер PostgreSQL после за-пуска по умолчанию создает в каталоге /tmp сокет домена AF_UNIX в виде файла .s.PGSQL.5432, посмотреть на кото-рый можно при помощи команды ls -la. Среди прочих фай-лов будет запись следующего вида:

Литера «s» перед правами доступа означает, что дан-ный файл является сокетом.

Команда netstat -a позволяет нам убедиться, что файл /tmp/.s.PGSQL.5432 входит в список активных сокетов до-мена AF_UNIX. Введем эту команду и увидим запись при-мерно такого вида:

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

Запустим процессы в разных терминалах. Сервер после запуска создаст в каталоге /tmp файл .sock.new. Через этот файл будет осуществляться взаимодействие между клиен-том и сервером: клиент будет отправлять серверу символы, вводимые пользователем, а сервер будет возвращать чис-ловые значения, каждый раз увеличивая их на 1. При этом на каждый введенный символ сервер отвечает двумя. Тут все правильно, т.к. серверу передается еще и символ перевода строки «\n», вот он на него и реагирует.

После остановки сервера сигналом SIGINT (комбина-ция клавиш <Ctrl+C>) файл .sock.new останется в катало-ге /tmp. Его необходимо удалить вручную, или переопреде-лить обработчик сигнала SIGINT для закрытия сокета и уда-ления файла .sock.new, иначе при повторном запуске сер-вера системный вызов bind не сможет привязать адресную структуру к сокету, сообщая нам, что «Address already in use (адрес уже используется)».

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

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

struct sockaddr { sa _ family _ t sa _ family; char sa _ data[14];}

srwxrwxrwt 1 pgsql users 0 Okt 4 10:37 .s.PGSQL.5432

unix 2 [ ACC ] STREAM LISTENING 20636071 /tmp/.s.PGSQL.5432

Листинг 1. Серверный процесс

#include <sys/types.h>#include <sys/socket.h>

int main(){ int sock, newsock; struct sockaddr saddr; char c; static char rc = 1;

/* Создаем сокет домена AF _ UNIX */ sock = socket(AF _ UNIX, SOCK _ STREAM, 0);

/* Заполняем адресную структуру saddr */ memset((void *)&saddr, 0, sizeof(saddr)); saddr.sa _ family = AF _ UNIX; /* тип домена */ /* путь к файлу */ memcpy(saddr.sa _ data, "/tmp/.sock.new", 14);

bind(sock, (struct sockaddr *)&saddr, ↵ sizeof(struct sockaddr)); listen(sock, 1);

for(;;) { newsock = accept(sock, NULL, NULL); if(fork() == 0) { while(recv(newsock, &c, 1, 0) > 0) { send(newsock, &i, 1, 0); i++; } close(newsock); exit(0); } close(newsock); } return 0;}

Листинг 2. Клиентский процесс

int main(){ int sock; struct sockaddr saddr; char c, rc;

sock = socket(AF _ UNIX, SOCK _ STREAM, 0);

memset((void *)&saddr, 0, sizeof(saddr)); saddr.sa _ family = AF _ UNIX; memcpy(saddr.sa _ data, "/tmp/.sock.new", 14);

connect(sock, (struct sockaddr *)&saddr, ↵ sizeof(struct sockaddr));

for(;;) { c = getchar(); send(sock, &c, 1, 0); if(recv(sock, &rc, 1, 0) > 0) ↵ printf("From server: %d\n", rc); else { close(sock); exit(0); } } return 0;}

PGconn *PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions, const char *pgtty, const char *dbName, const char *login, const char *pwd);

Page 64: 035 Системный Администратор 10 2005

62

программирование

! pghost – если сервер и клиент расположены на локаль-ном хосте, этот параметр принимает значение NULL, и взаимодействие с сервером осуществляется через сокет домена AF_UNIX, по умолчанию расположенный в каталоге /tmp. При работе через сеть это поле содер-жит имя или IP-адрес хоста, на котором находится сер-вер баз данных;

! pgport – номер порта (NULL для локального хоста);! pgoptions – дополнительные опции, посылаемые серве-

ру для трассировки/отладки соединения;! pgtty – терминал или файл для вывода отладочной ин-

формации;! dbName – имя базы данных;! login, pwd – имя пользователя и пароль доступа к базе

данных.

Функция PQsetdbLogin всегда возвращает указатель на объект типа PGconn, независимо от того, успешно бы-ло установлено соединение или нет. Проверку состоя-ния соединения выполняет функция PQstatus. Объект ти-па PGconn передается этой функции в качестве парамет-ра, возвращаемое функцией значение характеризует со-стояние соединения:! CONNECTION_BAD – не удалось установить соедине-

ние с базой данных;! CONNECTION_OK – соединение с базой данных успеш-

но установлено.

Эти значения определены в заголовочном файле libpq-fe.h.После установления соединения клиентская програм-

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

Параметрами функции PQexec являются указатель на объект типа PGconn (результат работы функции PQset-dbLogin) и строка, содержащая запрос к базе данных. От-правив запрос, функция ожидает ответ от базы и сохраня-ет в структуре типа Pgresult статус запроса и данные, по-лученные от базы. Для обработки статуса запроса к базе данных используется функция PGresultStatus.

Функция PQresultStatus может возвращать следующие значения, определенные в файле libpq-fe.h:! PGRES_EMPTY_QUERY – серверу отправлена пустая

строка запроса;! PGRES_COMMAND_OK – запрос, не требующий воз-

врата данных из базы, выполнен успешно;! PGRES_TUPLES_OK – успешное чтение данных из ба-

зы;! PGRES_FATAL_ERROR – при обращении к базе данных

произошла критическая ошибка.

Если статус запроса равен PGRES_TUPLES_OK, струк-тура PGresult будет содержать данные, полученные от базы.

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

Здесь tup_num – это номер строки таблицы, а field_num – номер ячейки в строке, из которой считываются данные. Для определения числа строк, считанных из таблицы, ис-пользуется функция PQntuples (tuple в переводе с англий-ского означает кортеж, последовательность):

Функция PQnfields вернет число ячеек в одной стро-ке таблицы:

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

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

Для выполнения этой задачи устанавливаем на локаль-ную машину СУБД PostgreSQL (см. [1]). После инициали-зации базы данных создаем нового пользователя my_user и новую базу my_database:

Для доступа к базе данных пользователь my_user дол-жен указать пароль. Сам пароль будет храниться в зашиф-рованном виде, в конфигурационном файле pg_hba.conf ме-няем значение поля METHOD c trust на md5.

Далее, подключаемся к базе данных my_database и со-здаем в ней таблицу, состоящую из двух полей: поля fname типа char(100) для хранения имен файлов и поля fsize типа int для хранения размеров файлов.

Заполнение базы данных информациейПервый этап разработки – программа для заполнения базы данных информацией. Назовем ее insert_data. Входные па-раметры – имя базы данных, имя таблицы в базе и имя ка-

char* PQgetvalue(const PGresult *res, int tup _ num, ↵ int Þeld _ num);

int PQntuples(const PGresult *res);

int PQnÞelds(const PGresult *res);

void PQclear(PQresult *res);void PQÞnish(PGconn *conn)

createuser -a -d my _ user -E -Pcreatedb -O my _ user my _ database

PGresult *PQexec(PGconn *conn, const char *query);

ExecStatusType PQresultStatus(const PGresult *res);

Page 65: 035 Системный Администратор 10 2005

63№10, октябрь 2005

программирование

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

Определим переменные для хранения имен базы дан-ных, таблицы и каталога для чтения:

Проверяем число переданных аргументов. Их долж-но быть 7:

Если количество переданных аргументов не соответс-твует указанному значению, при помощи функции usage() отобразим формат вызова нашей программы:

Считываем параметры командной строки. Разбор ко-мандной строки выполним при помощи функции getopt:

Считываем имя пользователя и пароль для доступа к базе данных:

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

Функция tcgetattr сохраняет текущее состояние тер-минала в структуре told типа termios. Параметр ttyfd дол-жен быть дескриптором файла, описывающего терминал. Для получения доступа к своему управляющему термина-лу процесс может использовать имя файла /dev/tty, кото-рое всегда интерпретируется как текущий управляющий терминал или стандартный вывод с дескриптором 0. Вы-зов функции tcsetattr установит новое состояние термина-ла, заданное структурой tnew, а параметр actions опреде-ляет, когда и как будут установлены новые атрибуты тер-минала:! TCSNOW – немедленное выполнение изменений;! TCSADRAIN – перед установкой новых параметров ожи-

дается опустошение очереди вывода;! TCSAFLUSH – ожидается опустошение очереди выво-

да, затем также очищается очередь ввода.

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

Далее считываем текущее состояние терминала в струк-туру struct termios t, снимаем флаг отображения символов ECHO в поле c_lflag и устанавливаем новое состояние тер-минала:

Наличие флага TCSANOW требует немедленного вы-полнения изменений. Подробности управления термина-лом смотрите в man termios.

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

Вернем настройки терминала в исходное состояние – включим отображение вводимых символов на экране:

Подключаемся к базе данных, вызвав функцию PQ-setdbLogin. Эта функция вернет указатель на объект типа PGconn, независимо от того, успешно было установлено соединение или нет:

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

# ./insert _ data -d [имя базы данных] -t [имя таблицы] ↵ -p [имя каталога]

unsigned char *dbname = NULL; /* имя базы данных */unsigned char *table = NULL; /* имя таблицы *//* каталог, из которого считываются данные */unsigned char *pathname = NULL;

if(argc != 7) usage();

void usage(){ fprintf(stderr, "Usage: insert _ data ↵ -d [имя базы данных] -t [имя таблицы] ↵ -p [исходный каталог]\n"); exit(0);}

while((int c = getopt(argc, argv, "d:t:p:")) != EOF) { switch(c) { case 'd': /* имя базы данных */ dbname = (unsigned char *)optarg; break; case 't': /* имя таблицы */ table = (unsigned char *)optarg; break; case 'p': /* имя каталога */ pathname = (unsigned char *)optarg; break; /* ошибка в параметрах */ case '?': default: usage(); }}

unsigned char user[80]; /* имя пользователя */unsigned char pwd[80]; /* пароль доступа к базе данных */

memset(user, 0, sizeof(user));printf("Login: ");scanf("%s", user);

memset(pwd, 0, 80);printf("Password: ");

#include <termios.h>int tcgetattr(int ttyfd, struct termios *told);int tcsetattr(int ttyfd, int actions, const struct ↵ termios *tnew);

int ttyfd = open("/dev/tty", O _ RDWR);

tcgetattr(ttyfd, &t); /* сохраняем настройки терминала */t.c _ lßag &= ~ECHO; /* сбрасываем флаг ECHO *//* устанавливаем новое состояние терминала */tcsetattr(ttyfd, TCSANOW, &t);

scanf("%s", pwd);

t.c _ lßag |= ECHO; /* устанавливаем флаг ECHO */tcsetattr(ttyfd, TCSANOW, &t);close(ttyfd);

PGconn *conn = PQsetdbLogin(NULL, NULL, NULL, NULL, ↵ dbname, user, pwd);

Page 66: 035 Системный Администратор 10 2005

64

программирование

не передаем. Если сервер расположен на удаленной ма-шине, то вызов функции PQsetdbLogin примет следую-щий вид:

где 192.168.1.1 – IP адрес хоста, на котором установлен сер-вер баз данных, 5432 – порт, который слушает база.

Анализируем состояние соединения и в случае ошибки завершаем выполнение программы:

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

После записи информации в базу данных отключаем-ся от нее:

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

Если вместо функции отключения от базы перед выхо-дом из программы организовать бесконечный цикл и ввес-ти в соседнем терминале команду netstat, то можно увидеть, что процесс установил соединение с базой данных через сокет домена AF_UNIX. При остановке процесса сигналом SIGINT (комбинация клавиш Ctrl-C) это соединение исче-зает, даже если мы не вызываем функцию PQfinish. Дру-гое дело, если процесс не закрыл соединение и продолжает функционировать (например, если это фоновый процесс). Тогда возможна ситуация несанкционированного исполь-зования уже установленного соединения (сокет не закрыт) для доступа к базе данных, и при этом необязательно знать пароль. Поэтому закрывать соединение надо явно.

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

Первый параметр path определяет имя каталога, с ко-торого должен начаться рекурсивный обход дерева. Пара-метр depth управляет числом используемых функцией ftw различных дескрипторов файлов. Чем больше значение depth, тем меньше будет случаев повторного открытия ка-талогов, что сократит общее время обработки вызова. Вто-рой параметр func – это определенная пользователем функ-ция, вызываемая для каждого файла или каталога, найден-ного в поддереве каталога path. При каждом вызове фун-кции func будут передаваться три аргумента: заканчиваю-щаяся нулевым символом строка с именем объекта, указа-тель на структуру stat с данными об объекте и целочислен-ный код. Функция func, следовательно, должна быть пост-роена следующим образом:

/* PGRES _ COMMAND _ OK, т.к. данных от базы мы не */ /* получаем */ if(PQresultStatus(res) != ↵ PGRES _ COMMAND _ OK) { fprintf(stderr, "INSERT ↵ query failed.\n"); break; } } closedir(dp); PQclear(res); return 0;}

PQÞnish(conn);

#include <ftw.h>int ftw(const char *path, int(* func)(), int depth);

PQsetdbLogin("192.168.1.1", "5432", NULL, NULL, dbname, ↵ user, pwd),

if(PQstatus(conn) == CONNECTION _ BAD) { fprintf(stderr, "Connection to database failed.\n"); fprintf(stderr, "%s", PQerrorMessage(conn)); exit(1);}

int list _ dir(PGconn *conn, unsigned char *table, ↵ unsigned char *pathname){ struct dirent *d; struct stat s; DIR *dp; /* результат обращения к базе данных */ PGresult *res; /* абсолютное путевое имя файла */ unsigned char full _ path[256]; /* строка запроса к базе данных */ unsigned char query[QUERY _ LEN]; /* данные, передаваемые базе */ unsigned char escape _ string[80];

/* Открываем каталог */ if((dp = opendir(pathname)) == NULL) { perror("opendir"); return -1; }

/* Пропускаем родительский и текущий каталоги */ d = readdir(dp); // "." d = readdir(dp); // ".."

/* Цикл чтения записей каталог */ while(d = readdir(dp)) {

/* Формируем абсолютное путевое имя файла */ /* и получаем информацию о нем */ memset(full _ path, 0, 256); sprintf(full _ path, "%s/%s", pathname, ↵ d->d _ name); stat(full _ path, &s);

/* Если это каталог � выполняем рекурсивный */ /* вызов функции */ if(S _ ISDIR(s.st _ mode)) list _ dir(conn, ↵ table, full _ path);

/* Добавляем в базу информацию о файле, при этом */ /* преобразуем путевое имя файла при помощи */ /* функции PQescapeString */ memset(escape _ string, 0, 80); PQescapeString(escape _ string, ↵ full _ path, 80);

/* Формируем запрос и отправляем его базе данных */ memset(query, 0, QUERY _ LEN); sprintf(query, "INSERT INTO %s ↵ values('%s','%u')", table, ↵ full _ path, s.st _ size); res = PQexec(conn, query);

/* Проверяем статус запроса. Он должен быть равен */

Page 67: 035 Системный Администратор 10 2005

65№10, октябрь 2005

программирование

Целочисленный аргумент type может принимать одно из нескольких возможных значений, определенных в за-головочном файле и описывающих тип встретившегося объекта:! FTW_F – объект является файлом;! FTW_D – объект является каталогом;! FTW_DNR – объект является каталогом, который нельзя

прочесть;! FTW_SL – объект является символьной ссылкой;! FTW_NS – объект не является символьной ссылкой,

для него нельзя успешно выполнить вызов stat.

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

Вызовем в нашей программе вместо рекурсивной фун-кции list_dir функцию ftw:

Функция list_dir1 передает базе данных информацию о каждом регулярном файле:

Для получения исполняемого модуля введем команду:

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

Формируем и отправляем запрос к базе для выборки всех полей из таблицы:

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

Отображаем результаты чтения:

Функция PQntuples вернет число прочитанных из таб-лицы строк, а функция PQnfields – число ячеек в одной строке.

Работоспособность программ была проверена для ОС Linux Slackware 10.2 и FreeBSD 5.2, использовался сервер баз данных PostgreSQL 8.0.3.

Литература:1. Супрунов С. PostgreSQL: первые шаги. – Журнал «Системный

администратор», №7, 2004 г. – 26-33 с.2. PostgreSQL 7.3.2 Programmer’s Guide by The PostgreSQL Global

Development Group.3. Кейт Хэвиленд, Дайна Грей, Бен Салама. Системное про-

граммирование в UNIX. Руководство программиста по раз-работке ПО = Unix System Programming. A programmer’s guide to software development: Пер. с англ. – М., ДМК Пресс, 2000 г. – 368 с., ил.

int func(const char *name, const struct stat *sptr, ↵ int type){

/* Тело функции */

}

ftw(pathname, list _ dir1, 1);

int list _ dir1(const char *name, const struct stat *s, ↵ int type){ PGresult *res;

/* строка запроса к базе данных */ unsigned char query[QUERY _ LEN]; unsigned char escape _ string[80];

/* Возвращаемся, если вызов stat завершился неудачно */ if(type == FTW _ NS) return 0;

/* Если объект является регулярным файлом, */ /* добавляем информацию о нем в базу */ if((type == FTW _ F) && S _ ISREG(s->st _ mode)) {

memset(escape _ string, 0, ↵ sizeof(escape _ string)); PQescapeString(escape _ string, ↵ name, sizeof(escape _ string));

memset(query, 0, QUERY _ LEN); sprintf(query, "INSERT INTO ↵ %s values('%s','%u')", table, ↵ name, s->st _ size);

res = PQexec(conn, query);

/* Проверяем статус запроса */ if(PQresultStatus(res) != ↵ PGRES _ COMMAND _ OK) { fprintf(stderr, "INSERT ↵ query failed.\n"); return -1; } PQclear(res);

} return 0;}

# gcc -o insert _ data insert _ data.c -lpq

conn = PQsetdbLogin(NULL, NULL, NULL, NULL, dbname, ↵ user, pwd);

if(PQstatus(conn) == CONNECTION _ BAD) { fprintf(stderr, "Connection to database failed.\n"); fprintf(stderr, "%s", PQerrorMessage(conn)); exit(1);}

memset(query, 0, QUERY _ LEN);sprintf(query, "SELECT * FROM %s", table);res = PQexec(conn, query);

if(PQresultStatus(res) != PGRES _ TUPLES _ OK) { fprintf(stderr, "SELECT query failed.\n"); goto out;}

for(i = 0; i < PQntuples(res); i++) { for(n = 0; n < PQnÞelds(res); n++) printf("%-20s", ↵ PQgetvalue(res, i, n)); printf("\n");}

Page 68: 035 Системный Администратор 10 2005

66

программирование

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

А что же Windows? В Windows име-ется WSH – Windows Script Host, это ос-новной инструмент для всех админис-тративных сценариев, поскольку все административные сценарии выпол-няются внутри WSH. Сценарии WSH можно писать на языках Jscript .NET, VBScript, Perl, Python и REXX. В данной статье все примеры сценариев приво-дятся на VBScript.

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

Постановка задачиПричина, по которой возникла не-обходимость в написании сценария

для автоматизированного управления Windows-серверами, довольно проста, особенно в свете недавних проблем с подачей электропитания. У заказчика имелось несколько серверов Windows 2003, и требовалось организовать бес-перебойное электропитание на основе APC UPS. В комплекте с UPS поставля-лось программное обеспечение, в со-став которого входил агент для взаимо-действия с UPS. Один из серверов под-ключался к источнику бесперебойно-го питания через COM-порт и на этом сервере был установлен агент, который в случае отключения питания должен был корректно завершить работу сер-вера. А вот на остальных серверах та-кой агент без подключения к источнику через СОМ-порт не работал, и следо-вательно, эти сервера в случае исчез-новения питания проработали бы ров-но столько, насколько хватило бы за-ряда аккумулятора, а потом просто от-ключатся, что, очевидно, совсем не хо-рошо. Компания-производитель пред-лагает в качестве решения проблемы приобрести специальное оборудова-ние, проще говоря, СОМ-свитч, одна-ко в силу ряда причин нас подобный вариант не устроил.

Тогда и был написан сценарий на VBScript, который отслеживал в жур-нале событий появление сообщения

Управляем серверами в реальном Управляем серверами в реальном времени с помощью времени с помощью WSHWSH--ссценариценариевев

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

болью для системных администраторов и специалистов по обслуживанию сети.

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

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

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

Андрей БирюковАндрей Бирюков

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

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

Читаем журнал событий (Event Log)Основой разрабатываемого сцена-рия является цикл, который осущест-вляет поиск в журнале событий вхож-дений искомого сообщения. Такие со-общения могут быть двух видов: сооб-щение об отключении питания и о его восстановлении.

Page 69: 035 Системный Администратор 10 2005

67№10, октябрь 2005

программирование

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

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

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

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

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

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

При отключении питания в журнале событий появляет-ся сообщение следующего вида (см. рис. 2).

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

При восстановлении питания агент создаст в журнале событий следующее сообщение (см. рис. 3).

Итак, мы определили, как выглядят сообщения, отправ-ляемые агентом источника бесперебойного питания. В жур-нале событий нам необходимо искать сообщения с по-лем Description вида: «UPS On Battery» или «Utility Power Restored», которые будут сигнализировать о потере пита-ния и его восстановлении соответственно.

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

Рисунок 1. Журнал событий Event Log, содержащий сообщенияот агента источника бесперебойного питания

Листинг 1. Поиск сообщений в журнале событий

Option ExplicitDim objWMI, objItem ' Objects // Объявляем переменныеDim strComputerDim intRecordNum, intRec, colLoggedEventsDim strAdmin, strAdmin2, i, intrecordNum2, iteration' WMI Core Section // Сервер, на котором выполняется сценарийstrComputer="127.0.0.1"Set objWMI = GetObject("winmgmts:" _& "{impersonationLevel=impersonate}!\\" _& strComputer & "\root\cimv2")iteration=2 // счетчик итераций// искомые строки � отключение питанияstrAdmin = "UPS On Battery"// искомые строки � восстановление питанияstrAdmin2 = "Utility Power Restored"Do While 1=1 // цикл бесконечный // запрос по журналу событий. Раздел Applications Set colLoggedEvents = objWMI.ExecQuery ↵ ("Select * from Win32 _ NTLogEvent Where ↵ LogÞle = 'Application'" ) // счетчики записей intRecordNum=0 // счетчик найденных записей intRec=0 // счетчик всех записей intRecordNum2=0 For Each objItem in colLoggedEvents // ищем первое вхождение записи // на отключение If intRecordNum=0 Then If InStr(1,objItem.message,strAdmin,1) ↵ Then intRecordNum = intRec+1 End If

// ищем первое вхождение записи // на восстановление If intRecordNum2=0 Then If InStr(1,objItem.message,strAdmin2,1) ↵ Then intRecordNum2 = intRec +1 End If intRec=intrec+1 // если все нашли, выходим из цикла If intRecordNum>0 AND intrecordNum2>0 ↵ Then Exit For Next / если не нашли записей об отключении, // то и записи о восстановлении не нужны If intrecordNum=0 Then intRecordNum2=0 If iteration=0 Then shutdown // а здесь будет находиться ссылка на процедуру // отключения питания на других серверах End If If intrecordNum<intrecordNum2 Then iteration=iteration-1 End If If intrecordNum2=0 Then If intRecordNum>0 Then iteration=iteration-1 End If loopWScript.Sleep 10000 // Задержка перед следующей итерацией

Page 70: 035 Системный Администратор 10 2005

68

программирование

необходимо завести на всех серверах (в случае, если в се-ти нет домена) или в домене учетную запись, наделенную соответствующими правами.

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

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

Также в тексте мы встречаем упоминание о процедуре отправки сообщений администратору или службе техни-

ческой поддержки. В качестве параметра данной процедуре передается имя отклю-ченного сервера.

Рассмотрим процесс отправки уведом-лений более подробно.

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

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

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

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

Раньше для отправки сообщений посредством сцена-риев Windows использовался почтовый клиент Outlook. При этом применялся сценарий следующего вида:

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

Листинг 2. Процедура отключения питания

Sub ShutdownOn Error Resume Next // если ошибка, переходим к следующемуDim arrComputers, objLocator Dim login, password, domain// Перечисляем имена серверов, которые должны быть выключены arrComputers = Array("Computer1","Computer2","Computer3")login="operator" // учетная запись с правом на shutdownpassword="password" // парольdomain="TEST" // доменFor Each strComputer In arrComputers Set objLocator = ↵ CreateObject("WbemScripting.SWbemLocator") Set objWMIService = ↵ objLocator.ConnectServer(strComputer, ↵ "root\cimv2", login, password, domain) Set colOperatingSystems = objWMIService.ExecQuery ↵ ("Select * from Win32 _ OperatingSystem") For Each objOperatingSystem in colOperatingSystems // непосредственно shutdown ObjOperatingSystem.Shutdown(1) Next // после отключения уведомим администратора sendmail(strComputer) NextWScript.Quit // сценарий завершает свою работуEnd Sub

Листинг 3. Отправка письма с помощью Outlook

Dim OutlookObject, OutMailSet OutlookObject = CreateObject("Outlook.Application")Set OutMail = OutlookObject.CreateItem(0)OutMail.to = "[email protected]"OutMail.Subject = "Тема сообщения"OutMail.Body = "Тело сообщения"OutMail.Send

Рисунок 2. Сообщение об отключенииосновного питания

Рисунок 3. Сообщение о восстановленииосновного питания

Page 71: 035 Системный Администратор 10 2005

69№10, октябрь 2005

программирование

нариях VBScript. В связи с этим теперь Outlook каждый раз спрашивает, перед тем как позволить сценарию отправить письмо (см. рис. 4).

К тому же практически любой антивирус заблокирует работу сценария.

По понятным причинам нас это совершенно не устра-ивает. Но существует другой способ отправки почтовых сообщений сценарием. Данная процедура была найдена мной в MSDN [1].

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

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

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

Также хотелось бы обратить ваше внимание еще на один щекотливый момент. В случае восстановления питания не-обходимо снова включить отключенные сервера. Для этого прежде всего надо в BIOS каждого из серверов установить свойство «Wake Up On LAN → ON». Я не думаю, что это мо-жет создать какие-то трудности в повседневной работе хо-тя бы потому, что сервера должны быть всегда включены,

их не выключают на ночь. Теперь нам необходимо создать какой-либо тра-фик с помощью наше-го сценария. Сделать это можно с помощью фраг-мента одной из процедур, описанной ранее. Далее приводится фрагмент Листинга 1, в котором при обнару-жении сообщения о восстановлении питания вызывается процедура WakeUp, осуществляющая пинг каждого из сер-веров (Листинг 6 соответственно). Обратите внимание на использованный в Листинге 6 метод Run. С помощью него можно выполнить любую команду, причем (как пока-зано в Листинге 6) это делается в режиме hide. Если в ва-шем случае необходимо видимое окно, просто в качестве второго параметра для метода Run укажите единицу. Бо-лее подробное описание данного метода и его параметров можно найти в [1].

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

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

Ссылка:1. http://msdn.microsoft.com – содержит много примеров с исход-

ными текстами сценариев.

Рисунок 4. Запрос на отправкусообщения

Листинг 4. Отправка письма

// Получаем в качестве параметра имя сервераSub sendmail(server)// Инициализируем переменныеDim iMsgDim iConfDim FldsDim strConst cdoSendUsingPickup = 1Set iMsg = CreateObject("CDO.Message")Set iConf = CreateObject("CDO.ConÞguration")// Подготавливаем поля для отправки по SMTPSet Flds = iConf.FieldsWith Flds .Item("http://schemas.microsoft.com/cdo/ ↵ conÞguration/sendusing") = ↵ cdoSendUsingPickup .Item("http://schemas.microsoft.com/cdo/ ↵ conÞguration/smtpserverpickupdirectory") = ↵ "c:\inetpub\mailroot\pickup" .UpdateEnd With// Непосредственно текст сообщенияstr= "Уважаемый администратор. Сервер " & server & " ↵ был отключен "& Now &" в связи с потерей ↵ электропитания. "

// заполоняем все поля сообщенияWith iMsg Set .ConÞguration = iConf .To = "[email protected]" // Поле «Кому» .From = "[email protected]" // Поле «От кого» // Тема письма .Subject = "Отключение питания на сервере " & server .HTMLBody = str .SendEnd With

// Очищаем переменныеSet iMsg = NothingSet iConf = NothingSet Flds = NothingEnd Sub

Уважаемый администратор. Сервер MyServer был отключен01.10.2005 23:03:31 в связи с потерей электропитания.

Листинг 5. Добавление вызова процедуры Wakeup в сценарий Листинга 1�����..// Ищем первое вхождение записи на восстановлениеIf intRecordNum2=0 ThenIf InStr(1,objItem.message,strAdmin2,1) Then ↵ intRecordNum2 = intRec +1WakeUpEnd If����..

Листинг 6. Процедура WakeUp

Sub WakeUpOn Error Resume Next // если ошибка, переходим к следующемуDim arrComputersDim WshShell, str// Перечисляем имена серверов, которые должны быть выключеныarrComputers = Array("Computer1","Computer2","Computer3")Set WshShell = CreateObject("WScript.Shell")For Each strComputer In arrComputers str="ping "& strComputer //запускаем в режиме hide Return = WshShell.Run(str, 0)NextEnd Sub

Page 72: 035 Системный Администратор 10 2005

70

hardware

зумности она стала входить в состав пакета программ mgetty + sendfax. При этом основная страница этой програм-мы (на которую есть ссылка в man и readme) давно не су-ществует (http://www-internal.alphanet.ch/~schaefer/vgetty.html). Но последнее обновление программы датируется всё же апрелем этого года.

Несмотря на то что в состав вашей операционной сис-темы mgetty+sendfax, скорее всего, уже входит в виде зара-нее скомпилированного пакета, и его использование на пер-вый взгляд может показаться более простым, мы от этого удобства откажемся. Если, например, у нас что-то не зара-ботает и дело дойдёт до правки исходных текстов, то нам их всё равно придётся установить. Также некоторые про-граммы, работающие с vgetty, например vocp, могут сразу же требовать установку из исходных кодов, а не из гото-вых пакетов. Поэтому, чтобы не усложнять себе жизнь в бу-дущем, убедимся что mgetty+sendfax как пакет не установ-лен, запустив команду:

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

или для Fedora Core 4:

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

ку, то автоответчик ожидает заданное число гудков. Далее поднимает трубку, проигрывает заготовленное сообщение и после переходит в режим записи. Через некоторое вре-мя появляетесь вы и прослушиваете поступившие сооб-щения. Насколько проста эта схема, настолько и проста её реализация с помощью vgetty. При желании схему можно усовершенствовать, добавив немного сервиса. Например, подключив автоответчик к сети Интернет или мобильному терминалу, можно научить его посылать вам уведомления по электронной почте или посредством SMS о том, что поя-вились новые сообщения. Можно даже организовать удоб-ный веб-интерфейс для просмотра/прослушивания приня-тых сообщений. Чем большим числом функций вы захоти-те пользоваться, тем больше настроек потребуется. Я ниг-де не видел грамотного howto или статьи с решением всех возникающих проблем по созданию автоответчика, поэто-му решил восполнить этот пробел.

В качестве программного обеспечения использует-ся vgetty, работающая под Linux (настройки проводились под двумя ОС: RedHat Linux v.7.3 и Fedora Core 4). Также мы рассмотрим пример создания примитивного веб-ин-терфейса. Если вы хотите расширить возможности ваше-го голосового модема под Linux и свой кругозор, – эта ста-тья для вас.

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

Настраиваем автоответчик на базе LinuxНастраиваем автоответчик на базе LinuxУ меня зазвонил телефон.

– Кто говорит?

– Слон.

– Откуда?

– От верблюда.

– Что вам надо?

– Шоколада.

К. Чуковский «Телефон»

На самом деле позвонил не слон,

а пользователь. И общаться ему пришлось

не со мной, а с моим автоответчиком...

Да и perl-связи ему не помогли... А вот как

работает автоответчик и как его настроить

на базе Linux?

# rpm -qa|grep mgetty

mgetty-1.1.30-0.7mgetty-sendfax-1.1.30-0.7mgetty-viewfax-1.1.30-0.7mgetty-voice-1.1.30-0.7

mgetty-1.1.33-1mgetty-sendfax-1.1.33-1mgetty-viewfax-1.1.33-1mgetty-voice-1.1.33-1

Павел ЗакляковПавел Закляков

Page 73: 035 Системный Администратор 10 2005

71№10, октябрь 2005

hardware

то их следует удалить командой:

Далее зайдём на страницу [3], в разделе «Download Section» найдём ссылки, из которых узнаем адрес FTP-ар-хива – ftp://alpha.greenie.net/pub/mgetty/source/1.1 и номер последней версии. Её и скачаем:

Далее распакуем архив, например, в директорию /progi командой:

или

Покопавшись в дереве файлов распакованного архива и найдя там текстовый файл /progi/mgetty-1.1.33/voice/doc/Readme.Beginners, мы можем узнать из него, что для уста-новки vgetty необходимо вначале установить mgetty.

Установка mgettyЧтобы упростить себе жизнь, меняем текущую директо-рию:

Привычного файла configure у mgetty нет, поэтому чита-ем файл README.1st или, не прочитав, запускаем make – получаем ошибку.

Понимаем, что нам надо создать файл policy.h. Для этого лучше воспользоваться шаблоном policy.h-dist. Копируем шаблон с новым именем policy.h командой:

Далее, просматриваем несложные комментарии перед каждым параметром внутри файла и правим их по необ-ходимости. Возможно, вам покажутся важными другие па-раметры, но я советую обратить внимание на следующие: DEFAULT_PORTSPEED, MODEM_INIT_STRING, MODEM_CMD_SUFFIX, FAX_IN_OWNER (если вы планируете рабо-тать с факсами).

Затем просматриваем Makefile, и если необходимо, вно-сим правку, например, в переменные путей, куда будет ус-танавливаться программа. Далее запускаем компиляцию командой make. После, если очень хочется, запустите се-рию тестов командами make test и make testdisk и посмот-рите на их результаты. Полезной функции у этих тестов я не увидел, поэтому советую сразу после компиляции за-пустить make -n install и по списку напечатанных команд понять, что планируется к выполнению во время установ-

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

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

Проверить, есть ли такой пользователь в системе, мож-но, например, командой:

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

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

Если вы планируете не только получать факсы, но и от-правлять их от имени какого-то конкретного пользовате-ля, то убедитесь, что у него достаточно прав на общение с факс-модемом, посмотрев на права доступа у соответс-твующего файла-устройства /dev/ttyS? (устройство, к кото-рому будет подключен модем, например /dev/ttyS0):

Если не критично, то проще поставить разрешающие права на чтение и запись для «всех остальных», но обыч-но так не делают. Когда надо управлять правами доступа к факс-модему нескольких пользователей, то их тогда вклю-чают в группу, например, fax (см /etc/group), а на файле ме-няют группу (см. chgrp) и ставят права для неё (см. chmod). При этом, меняя состав группы fax, можно легко управлять тем, кто может посылать факсы, а кто нет.

Также в целях безопасности я бы подправил запись в файле /etc/passwd, заменив командный интерпретатор для пользователя fax с /bin/bash на /bin/false или на /sbin/nologin. После проделанных действий можно смело запус-кать установку командой:

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

Установка vgettyЕсли на этапе выше всё прошло успешно, то после сме-ны директории компиляция vgetty должна запуститься без проблем.

# rpm -e mgetty mgetty-sendfax mgetty-viewfax mgetty-voice

# wget ftp://alpha.greenie.net/pub/mgetty/source/ ↵ 1.1/mgetty1.1.33-Apr10.tar.gz

# tar -zxvf mgetty1.1.33-Apr10.tar.gz -C /progi

# gunzip -cd mgetty1.1.33-Apr10.tar.gz|tar -xv -C /progi

# cd /progi/mgetty-1.1.33

You have to create your local policy.h first.Copy policy.h-dist and edit it.

# cp policy.h-dist policy.h

# chown fax /usr/local/lib/mgetty+sendfax/faxq-helper

# cat /etc/passwd|grep fax

# adduser fax

chown: `fax': неверный пользовательmake: *** [install.bin] Ошибка 1

# ls -l /dev/ttyS0

# make install

Page 74: 035 Системный Администратор 10 2005

72

hardware

Однако, если вы попытаетесь сразу начать компили-ровать vgetty командой make, пропустив все шаги выше, то вас ждёт сообщение об ошибке:

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

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

После этого считаем vgetty установленным.

Настройка vgettyСоздаём конфигурационный файл voice.conf в той же дирек-тории (/usr/local/etc/mgetty+sendfax), где лежат все настро-ечные файлы mgetty. Проще всего воспользоваться шаб-лоном voice.conf-dist, который поставляется вместе с дист-рибутивом, подправив его по необходимости. Для этого ко-пируем шаблон с новым именем:

и переходим к редактированию voice.conf. На время отлад-ки, то есть пока у вас всё не заработает, советую повысить уровень логирования до 6, указав:

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

а также кто окажется их владельцем и с какими правами будут создаваться файлы:

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

Это нам может понадобиться, если мы захотим написать какой-нибудь удобный интерфейс для просмотра файлов. Далее указывается имя поддиректории внутри «voice_dir», куда будут складываться файлы с новыми сообщениями:

Затем указывается имя поддиректории внутри «voice_dir», где будут храниться сообщения голосового приветс-твия нашего автоответчика:

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

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

Позже мы создадим этот файл. Если требуется, вы мо-жете заготовить несколько сообщений, а далее написать не-большую программку на bash, меняющую эти файлы, напри-мер, простым копированием. Если запускать её с помощью crontab (crond)( [2], стр.164-165, [11], стр 34-38), то без собых усилий можно сделать на утро одно сообщение, на время обеда другое, а на вечер третье. В параметре answer_mode оставляем только voice:

Небольшое отступление. Если написать:

или оставить как есть:

то во время воспроизведения голосового приветствия, ес-ли модем услышит «вызывающие попискивания» на другой стороне, то он тут же прервёт воспроизведение звука и пе-рейдёт в режим приёма факса. После чего если удалённая сторона будет посылать факс, то модем его примет, а vgetty запишет его в формате g3 в директорию /var/spool/fax/incoming под именем вроде ff359168dS0-7-095-1234567.01, где «7-095-1234567» есть fax-id, то есть то, как нам пред-ставился удалённый факс. Естественно, на другой сторо-не записать в fax-id могут что угодно, поэтому не удивляй-тесь если когда-нибудь увидите свой номер. Если же fax-id

# cd /progi/mgetty-1.1.33/voice# make

You didn't build mgetty first. Please read the documentation.

# make -n install

# make install

# cp /progi/mgetty-1.1.33/voice/voice.conf-dist ↵ /usr/local/etc/mgetty+sendfax/voice.conf

voice _ log _ level 6

voice _ dir /var/spool/voice

phone _ owner rootphone _ group phonephone _ mode 0660

message _ ßag _ Þle .ßag

receive _ dir incoming

message _ dir messages

message _ list Index

backup _ message standard.rmd

answer _ mode voice

answer _ mode voice:fax

answer _ mode voice:fax:data

Page 75: 035 Системный Администратор 10 2005

73№10, октябрь 2005

hardware

не передавался, то имя у файла будет без него, напри-мер, что-то вроде одного из следующих: ff353bb0eS2.01, ff353d713S2.01, fn353a4b5S2.01, fn353a4b5S2.02. Два пос-ледних факса, как легко догадаться, есть один факс, состо-ящий из двух страниц. О том, что делать дальше с файла-ми формата g3, как отправлять факсы, как настроить vgetty на совместную работу автоответчика, факса и dial-in-серве-ра и другие факсовые возможности, будет изложено в от-дельной статье, посвящённой факсовым или расширенным возможностям vgetty/mgetty.

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

Далее указывается скорость порта, к которому под-ключен модем:

Оставить 38400 или поставить 57600, или 115200 решать вам. У этого параметра есть особенность, на которую я хо-тел бы обратить внимание. Если вы будете менять значение, то необходимо аналогичную скорость прописать и в файле mgetty.config, и наоборот. То есть нужно проверить, чтобы значения были идентичны. Далее можно подправить зна-чение параметра rings, хотя я этого делать не стал, пото-му как задам количество звонков до поднятия трубки ниже (через ключи в /etc/inittab). Все остальные параметры я ос-тавил без изменения.

В завершение правки конфигурационного файла voice.conf хотел бы рассказать про «грабли» со скоростью пор-та и поддержку модема ZyXEL Omni 56k PRO, на которые я наступал в течение нескольких недель пока не разобрал-ся в чём дело. Если у вас такой же модем, прочитайте этот раздел обязательно! Итак...

«Грабли»После установки, изучая и корректируя voice.conf, я добрал-ся до параметра «скорость порта». Предполагая, что кон-фигурационные файлы обычно пишут не дураки, а установ-ки по умолчанию выбираются из разумных соображений, я оставил предлагаемое значение 38400 без изменений. Помня, что ZyXEL-1496B+ не работает на скорости 115200, и учитывая что Acorp-56EMS (на базе чипсета Rockwell) и ZyXEL U-1496B+ сразу после установки заработали как надо, повышать скорость необходимости не было.

Проблема была только в одном: модем ZyXEL Omni56K Pro, поддерживаемый vgetty (исходя из документации), не хотел быть автоответчиком, т.е. работать с голосовы-ми функциями. Через терминал и в других режимах модем работал. Другой такой же модем тоже отказался работать. Чтобы исключить мысль, что оба модема могут быть сло-манными, на отдельном компьютере я установил ZVoice и убедился, что в этой программе голосовые функции ра-ботают. Предположение, что проблема в кодеках, и попыт-ка использовать кодеки от U-1496B+ результата не принес-ли, потому как по документации кодеки этих двух модемов

не совместимы между собой. Так что работающий U-1496B+ ничем не смог помочь собрату. Пришлось разбираться в работе vgetty. Первое, что в этом случае делается – уро-вень логирования ставится на максимум (voice_log_level 6) и изучаются log-файлы. Я изучал /var/log/vgetty.ttyS0 и /var/log/vm.log, сравнивая выводимые данные от разных моде-мов. Было замечено, что различие в определении модемов Acorp-56EMS и ZyXEL U-1496B+ и изменение дальнейшего поведения vgetty происходит после команды «ATI». Связа-но это с тем, что модемы на неё отвечают по-разному, со-ответственно «56000» и «1496», а неработающий Omni56K Pro – «1507». Предполагая, что в зависимости от ответа мо-дема в программе должно быть ветвление, я запустил по-иск этих ответов в исходных кодах. Естественно «56000» и «1496» были найдены, а «1507» – нет. Далее, я перешёл к поиску по ключевым словам «ZyXEL» и «Omni» и можно сказать, что почти сразу нашёл решение проблемы. Напри-мер, были найдены две следующие строчки:

в то время как выдаваемое не работающим модемом значе-ние 1507 отсутствовало. Не долго думая, я нашёл все места где встречалось 1500 и 1501, но не было 1507, и, разобрав-шись в несложном коде на Cи, внёс правку. В результате у меня получилось два следующих патча которые я полу-чил после с помощью команды:

Файл faxlib.c можно было подправить, дописав ещё не-сколько строк, чтобы при обнаружении модема выдавалось не «ZyXEL Omni 56K (Plus) detected», а более правильное «ZyXEL Omni 56K (PRO) detected», но так как это на рабо-тоспособность влиять не должно, делать этого я не стал. Соответственно после внесения правки мне пришлось пе-рекомпилировать mgetty и vgetty и установить их заново. Казалось бы, всё теперь должно работать, но не тут-то бы-ло. Модем начал воспроизводить звуки, но делал это с за-медлением, а записывать вообще отказывался, записывая вместо звуков какой-то потрескивающий шум.

К решению проблемы даже была подключена техподде-ржка фирмы ZyXEL через закрытый форум. Помочь в явном виде специалисты не смогли. На всякий случай они перепи-сали несколько программок написанных Yuhang Wu на Cи, объёмом все вместе взятые не более 50 Кб, для работы

port _ speed 38400 {ati, "1500", NULL, &ZyXEL_Omni56K},{ati, "1501", NULL, &ZyXEL_Omni56K},

# diff -urN старый _ файл новый _ файл

--- /progi/mgetty-1.1.33/voice/libvoice/detect.c.old Mon Apr 11 01:24:30 2005+++ /progi/mgetty-1.1.33/voice/libvoice/detect.c Mon Sep 19 01:34:56 2005@@ -74,6 +74,7 @@ {ati, "1496", NULL, &ZyXEL_1496}, {ati, "1500", NULL, &ZyXEL_Omni56K}, {ati, "1501", NULL, &ZyXEL_Omni56K},+ {ati, "1507", NULL, &ZyXEL_Omni56K}, {ati, "247", NULL, &Multitech_2834ZDXv}, {ati, "248", NULL, &Sierra}, {ati, "249", NULL, &Rockwell},

--- /progi/mgetty-1.1.33/faxlib.c.old Sun Nov 14 01:14:31 2004+++ /progi/mgetty-1.1.33/faxlib.c Mon Sep 19 01:50:29 2005@@ -627,6 +627,7 @@ break; case 1500: case 1501:+ case 1507: lprintf( L_MESG, "ZyXEL Omni 56K (Plus) detected" ); modem_type=Mt_class2_0; mis = mdm_get_idstring( "ATI1", 2, fd );

Page 76: 035 Системный Администратор 10 2005

74

hardware

с голосовыми функциями модема, заверив, что программы рабочие. Я взял оттуда какой-то алгоритм или часть кода, но изучая заголовки файла decomp.c наткнулся на строчку: «Required DTE speed : Above 57600 bps.», которая меня и на-толкнула на мысль, что предложенные по умолчанию 38400 (то, с чего я, собственно, начал весь этот рассказ про «граб-ли») не совсем подходят и надо бы попробовать поставить 57600. Я попробовал и «О, чудо!», оно заработало!

Вывод: не всякое предложенное значение по умолча-нию подойдёт. На этом мои (и возможно чьи-то ещё) про-блемы с установкой решились. Мы подошли вплотную к за-пуску программы vgetty.

Запуск vgettyНе смотря на то что после компиляции vgetty представляет собой запускаемый ELF-файл, запускать его следует из /etc/inittab, прописав там примерно следующую строчку:

! S0– это уникальный идентификатор строки. Выбирает-ся произвольно [1], может иметь длину 2-4 символа [2]. Так как модем подключен к /dev/ttyS0(СОМ1), то удоб-нее выбрать в качестве идентификатора S0.

! 345 – уровни выполнения, на которых будет работать на-ша программа: 3, 4, 5. (Замечание: а вы знаете, что по-мимо привычных уровней 0-6 ещё существуют a,b,c и s или S уровни? Если нет – см. [2] и man init.).

! respawn – говорит init о необходимости перезапуска vgetty в случае его завершения.

! /usr/local/sbin/vgetty – полное имя программы vgetty. Об-ратите внимание: путь к файлу может отличаться, ско-рее так и будет, если вы поставили пакет из rpm.

! Ключ «-n 4» говорит снимать трубку после 4-го звонка. ! ttyS0 – порт, к которому подключен голосовой модем.

Количество гудков не обязательно указывать в качест-ве параметра в данной строке – его можно указать и внут-ри конфигурационного файла, но это не всегда удобно, особенно если модемов, как и строчек в /etc/inittab, в ва-шей системе несколько, а конфигурационный файл vgetty у них один. Поэтому выше, во время правки voice.conf, я не стал изменять значение параметра rings.

После внесения указанной строчки в /etc/inittab, что-бы vgetty стартовал, надо послать команду: «kill -1 1» или «init q». Можно также перезагрузить компьютер, хотя это бу-дет не очень хорошее решение. Если же у вас уже запуще-на копия vgetty, то есть строчка уже была, а вы просто вне-

S0:345:respawn:/usr/local/sbin/vgetty -n 4 ttyS0

Рисунок 1. Область слухового вос-приятия. Речевые сигналы и музыка занимают лишь часть этой области [15, стр. 63] (бетта индекс 0 � порог слышимости, гамма � порог осязания)

Как появился формат rmdК моменту массового появления персо-нальных компьютеров, а соответственно и первых модемов, теория цифровой об-работки сигналов уже насчитывала поряд-ка полвека, поэтому под действием поль-зовательского спроса реализация голосо-вых функций модемов не заставила себя долго ждать. Действительно, чего в этом сложного с современной электронной ба-зой. Берём любую книжку по телефонии того времени и узнаём, что для обеспече-ния высокой разборчивости речи вполне достаточно передавать сигналы в диапа-зоне частот 0,3-3,4 КГц (см. рис. 1, крас-ные границы), что чуть уже по спектру то-го, что может воспроизвести голосом сред-нестатистический человек. Если взять с за-пасом справа и слева, то получится поло-са аналогового сигнала шириной около 4000 Гц (0-4 КГц). Теперь, если восполь-зоваться теоремой В.А.Котельникова [9]

(Г. Найквиста) об отсчётах, мы можем за-ключить, что, если будем брать мгновен-ные значения уровня голосового сигнала с периодом 1/(2*4000), то есть 8000 раз в секунду (см. рис. 2), то по этим значениям при необходимости мы сможем без про-блем восстановить сигнал без потерь. Та-кое преобразование аналогового сигнала к его дискретным отсчётам называется ам-плитудно-импульсной модуляцией (АИМ). Так как уровень сигнала, взятый в точке от-счёта является аналоговым и фиксирован-ным, то для сохранения или передачи мы можем его квантовать, например, на 256 уровней с помощью аналого-цифрового преобразователя (АЦП) и использовать далее цифровое значение уровня. Опыт-ным путём было установлено, что 256 – есть наилучшее число уровней, так как при меньшем числе теряется качество, увели-чиваются шумы квантования, а при боль-шем качество радикально не улучшается. Для передачи одного из 256 значений пот-ребуется ровно 8 бит, так как 28=256. Та-ким образом, для успешного восстанов-ления сигнала длительностью в 1 секун-ду нам нужно иметь 8 бит для 8000 отсчё-тов, то есть всего 64000 бит (64 КБит/c). Ес-ли взять обычный моно wav-файл и отбро-сить у него заголовок, то сигнал, записан-ный внутри файла, получается примерно таким же способом. Данный способ пред-ставления данных называется импульсно кодовой модуляцией (ИКМ, PCM). То есть

если бы мы записывали данные из линии «как есть» путём вышеописанной «тупой» оцифровки или в формате wav, то на од-ну секунду записи потребовалось бы 8 Кб (64 Кбит/8). Нетрудно оценить, что на дис-кету 5,25” Double Sided/Double Density, ха-рактерную для того времени и отформати-рованную на 360 Кб, влезло бы всего лишь 45 секунд. А на винчестер объёмом 10 Мб влезла бы примерно 21 минута, если пред-положить, что ничего другого на нём не бы-ло записано. При тех безумных ценах хра-нения единицы информации автоответчик оказался бы золотым, если бы мы захотели сделать ёмкость, адекватную одной сторо-не 60 или 90 минутной аудиокассеты. Так-же скорость передачи данных от моде-ма к компьютеру в 64000 бит/c могла по-казаться очень большой. Каждый модем подключался к компьютеру через после-довательный порт, cердцем которого бы-ла, и по сей день является, микросхема UART (Universal Asynchronous Receiver/Transmitter) – универсальный асинхрон-ный приёмопередатчик. В IBM PC и PC/XT для этой цели использовалась микросхе-ма типа 8250, которая сама или её анало-ги рассчитаны на максимальную скорость 38400 бит/c ([14], стр 250-252). И только для IBM PC/AT было решено применить микро-схему 16450, которая превосходила 8250 по скорости. Возьмите для примера выше-упомянутый ZyXEL U-1496B+, который не использует 8250, но и не работает на ско-

Page 77: 035 Системный Администратор 10 2005

75№10, октябрь 2005

hardware

ющие с разными кодеками. Информация, записанная в формате кодека каждого кон-кретного модема как раз и есть формат raw modem data. Как легко догадаться, формат rmd для каждого модема свой и зависит от используемого в модеме кодека. Напри-мер, «Модемы серии Omni56K используют 4-битовый ADPCM-алгоритм преобразова-ния звука в цифровой вид с частотой дис-кретизации 9600 отсчётов в секунду» ([6], стр. 89), хотя команда «AT+VSM=?» выдаёт и другие значения возможной частоты дис-кретизации (4 ;ZyXEL ADPCM ;4Bit ;(7200,8000,9600,11025)). Благо модемы с голо-совыми функциями выпускали не все про-изводители, поэтому число используемых кодеков не превышает сорока, и почти все на сегодня используемые поддерживают-ся vgetty. Запустив команду:

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

Чтобы между файлами в форма-те rmd не было путаницы, в самом нача-ле перед данными указывается тип моде-ма, чьим кодеком закодировано осталь-ное содержимое. То есть если вы в каком-нибудь редакторе посмотрите rmd-фай-лы, то в самом начале вы увидите строчку «RMD1Rockwell», «RMD1ZyXEL Omni 56K» или аналогичную.

сли правку, то эффективнее будет запустить «killall vgetty», так как предыдущие две команды не сработают.

Теперь модем слушает линию, а vgetty слушает порт, на котором висит модем. В случае поступления звонка мо-дем должен сообщать vgetty о том, что звонят. После того как будет пропущено количество звонков, указанное с па-раметром -n (или записано в конфигурационном файле), vgetty даст команду на снятие трубки. Попутно с этим vgetty оценит, что за модем подключен, выберет нужную библи-отеку, поищет файл голосового приветствия или выберет один из нескольких и начнёт его воспроизведение в линию. Далее в зависимости от настройки пискнет в линию и пе-рейдёт в режим записи всего того, что говорит позвонив-ший абонент (динамик модема при этом молчит), записы-вая всё им сказанное, например, в файл /var/spool/voice/incoming/v-3631-1129050743.rmd. После того как время, от-ведённое для записи абоненту, истечёт или модем услышит сигнал отбоя, означающий, что на том конце положили труб-ку, запись будет прекращена и будет выставлен флаг с да-той и временем последнего звонка. Другими словами, бу-дет создан файл /var/spool/voice/.flag нулевой длины. Далее vgetty перейдёт опять в режим ожидания звонков.

Если всё проходит успешно, то уровень логирования в файле voice.conf можно уменьшить, а вот если у вас что-то не работает или работает не так, как хотелось бы, то смот-

рите лог-файлы /var/log/vgetty.ttyS?.log и /var/log/vm.log. Пос-ледний файл ведётся программой vm, входящей в комплект пакета vgetty, о ней сейчас пойдёт речь.

Формат raw modem data (или сокращённо rmd) не такой популярный, как, например, тот же mp3, поэтому большинс-тво из вас должно было уже давно озаботиться следующи-ми вопросами: а что это за формат rmd, в котором записы-ваются все сообщения? Что мне с ним делать? Как запи-сывать свои файлы, как прослушивать уже готовые фай-лы? Ответы на эти вопросы смотрите во врезке «Как поя-вился формат rmd».

Дополнительные утилитыДля того чтобы создавать файлы в том или ином rmd-форма-те, понимаемом только модемом, или, наоборот, переводить данные в привычные звуковые форматы, в комплекте с vgetty поставляется пакет программ pvftools. В него входят конвер-торы различных форматов, осуществляющих преобразо-вания между форматами. Из всего представленного спис-ка мне понадобились только четыре программы: wavtopvf и pvftormd для конвертирования «туда» и rmdtopvf и pvftowav – «обратно». Помимо конверторов вам ещё может понадобить-ся программа pvfspeed для изменения скорости, но мне она не понадобилась, потому как я свои wav-файлы записывал сразу с требуемой частотой дискретизации. Поскольку фор-

Рисунок 2. Отсчёты голосового сигнала

# pvftormd -L

рости 115200 [5]. А если взять модемы, ко-торые были раньше, то скорости, на кото-рых они соединялись, поначалу составля-ли 2400, 1200 и даже меньше бод, для пе-редачи которых совсем не требовалась по-вышенная скорость порта.

Получается, что либо скорость 64000 была высока для записи звуков из линии, либо скорость последовательных портов мала. Велись работы как в сторону повы-шения скорости работы микросхем UART и введения в них дополнительных буфе-ров ввода-вывода, так и в сторону сжатия потока данных, то есть уменьшения объё-ма. Сжатие даже опережало возможнос-ти компьютеров. Потому как ещё в 1947 г. учёные из телефонных лабораторий фир-мы «Белл» опубликовали первое сообще-ние о полностью работоспособной систе-ме ИКМ и примерно в то же время Дело-рен во Франции изобрёл дельта-модуля-цию [8]. После появления ИКМ было за-мечено, что при преобразовании речи со-седние отсчёты обычно сильно не отлича-ются друг от друга и потому вместо одного из 256 значений для отсчёта можно пере-давать его изменение относительно преды-дущего. При этом для передачи изменения при той же сетке квантования требуется меньшее число значений, например, если это будет всего 16 уровней, а не 256, как ра-нее, то надо передавать 4 бита (24=16). Пос-ле перемножения получим, что для пред-

ставления одной секунды звука необходи-мо уже 32 килобита, то есть в 2 раза мень-ше, чем было при ИКМ. Это самый прос-той способ уменьшения потока (объёма), так как при переходе от отсчёта к отсчё-ту передаётся их разница, которую обыч-но обозначают греческой буквой дельта, то данный способ кодирования и назва-ли дельта-модуляцией. Далее появилась адаптивная дельта-модуляция(ADPCM) и другие более хитрые способы кодирова-ния, позволяющие сжимать данные боль-ше и больше без значительного ухудше-ния качества. Для дальнейшего улучше-ния качества сжатия речи стали учитывать-ся особенности речеобразования (форман-тная структура, звонкие и шипящие звуки и пр.), после чего стали появляться раз-личные алгоритмы и основанные на них го-лосовые кодеки. Некоторые из них до сих пор используются в системах сотовой свя-зи. Как обычно, о едином и универсальном стандарте договориться не смогли, поэто-му каждая фирма стремилась реализовать своё «ноу-хау» в собственных устройствах, а мы на сегодняшний день получили моде-мы не совместимые между собой и работа-

Page 78: 035 Системный Администратор 10 2005

76

hardware

мат wav (Microsoft Waveform Audio, Windows PCM) не являет-ся стандартом в среде Linux, то и прямого конвертора из wav в rmd и обратно нет (в составе pvftools). В качестве проме-жуточного формата используется portable voice format (pvf). Если вам всё же не очень нравится набирать команду кон-вертирования дважды, то напишите маленький скрипт, ко-торый можно назвать wav2rmd или rmd2wav, а он уже будет внутри содержать последовательные вызовы двух конвер-торов. Почитав документацию (/progi/mgetty-1.1.33/voice/doc/Readme.pvftools) и help к конверторам, вы можете без труда самостоятельно освоить конвертирование. При этом може-те перенаправлять вывод одного конвертора на вход друго-го, что очень удобно. Например, если вы захотите создать файл гостевого приветствия standard.rmd из имеющегося у вас файла message.wav для модема ZyXEL Omni 56k PRO, то это можно сделать следующей командой:

В обратную сторону получится даже проще:

При этом если у вас на компьютере окажется настроен-ная и работающая звуковая карта, то можно проиграть фай-лы, перенаправив вывод конвертора не в файл, а напрямую на устройство /dev/dsp или /dev/audio, или /dev/mixer.

Ещё в комплект vgetty входит программа vm. Man к ней нет, поэтому информацию о том, как ею пользоваться, можно узнать путём запуска «vm -help» или из документа-ции. Для воспроизведения файлов на модеме использует-ся команда «play», а далее указывается, куда модему сле-дует выводить звук. В зависимости от модема и от зна-чения, указанного в параметре -d, звук может выводить-ся как в линию, так и на встроенный на модеме динамик. Модем U-1496B+ и Acorp56EMS смогли воспроизвести звук и в линию, и на динамик, а вот Omni 56K PRO на ди-намик играть отказался. Причём, как я понял, читая до-кументацию [6, стр. 100] параметр +VLS не подразумева-ет выбор встроенного динамика на Omni 56K, в то время как у U-1496B+ такая возможность в параметре +VLS бы-ла [5, стр 15-16]. Чтобы не гадать и не перепроверять рука-ми все параметры ключа -d, что я и делал поначалу, мож-но запустить команду:

которая выведет результат тестирования модема, а именно куда может быть осуществлён вывод звука при воспроиз-ведении файлов на модеме. Для ZyXEL Omni 56k PRO вы-вод программы оказался следующим:

Это как раз совпадает с тем, что я выяснил опытным путём, а именно – звук выводится только двумя командами:

Телефонный аппарат у меня был подключен через мо-дем. В первом случае (-d 2) подключение происходит к те-кущей линии, а телефонный аппарат от неё не отключает-ся. То есть, если у вас был гудок, то воспроизведение зву-ка будет поверх гудка. При этом оно почему-то завершает-ся раньше. Но вот, если в телефонной линии тишина, ска-жем если набрать «1», то тогда всё проигрывается от нача-ла и до конца. Во втором случае (-d 7) перед началом вос-произведения происходит отключение телефонного аппа-рата, подключенного через модем от телефонной линии. То есть если вы подняли трубку, у вас был гудок и вы за-пустили команду, то модем отключит вас от линии, проиг-рает сообщение и подключит обратно, при этом удержа-ния телефонной линии не происходит. Остальные пара-метры в командах:! -l ttyS0 – говорит vm к какому порту подключен интере-

сующий нас модем;! -v – говорит включить режим избыточного вывода раз-

личной информации;! file.rmd – воспроизводимый файл.

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

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

Что я наблюдал: поступает звонок, модем поднима-ет трубку, воспроизводит голосовое приветствие, а после вешает трубку не дав ничего сказать. Что же оказалось? Так как никакого звукового файла, который я мог бы ис-пользовать, под рукой не оказалось, то я решил просто поз-вонил сам себе с другого телефона. Так как ничего воспро-изводить не надо было (файла standard.rmd просто не бы-ло) модем сразу бикнул в линию перейдя в режим записи, а я записал своё приветствие. Далее я просто взял и пе-реписал появившийся после этого файл на место standard.rmd в директорию messages. Так получилось, что по окон-чании сообщения я положил трубку и модем записал вдо-бавок к моему сообщению ещё два гудка. Теперь, ког-да этот файл проигрывался в линию, модем воспроизво-дил и гудки отбоя. Как вы теперь догадываетесь, вторая часть модема в этот момент не дремала, а чётко отслежи-вала ситуацию в линии: «a не положил ли звонящий труб-ку?», естественно, услышав в линии гудки в хвосте мое-го приветствия, она решала, что коли абонент уже отклю-чился (раз пошли гудки), то и модему надо тоже повесить трубку, что он, собственно, и делал. Естественно, пробле-му решил удалением последних нескольких секунд с гуд-ками из записи голосового приветствия, после чего всё за-работало как надо.

# cat message.wav | wavtopvf | pvfspeed -s 9600 | ↵ pvftormd ZyXEL _ Omni56K 4 > standard.rmd

# cat v-1329-1127227035.rmd | rmdtopvf | pvftowav > Þle.wav

# vm devicetest -l ttyS0

Test Dialup Line, Int. Mic. and Int. Speaker: not supported by vm/vgetty-modemdriverTest Dialup Line, Ext. Mic. and Ext. Speaker: not supported by vm/vgetty-modemdriverTest Dialup Line and Local Handset: not supported by vm/vgetty-modemdriverTest Dialup Line and Int. Speaker: not supported by vm/vgetty-modemdriverTest Dialup Line and Ext. Speaker: not supported by vm/vgetty-modemdriverTest Local Handset: OKTest Int. Speaker: not supported by vm/vgetty-modemdriverTest Ext. Speaker: not supported by vm/vgetty-modemdriverTest Int. Microphone: not supported by vm/vgetty-modemdriverTest Ext. Microphone: not supported by vm/vgetty-modemdriverTest Dialup Line: OKTest No Device: OK

vm play -d 2 -v -l ttyS0 Þle.rmdvm play -d 7 -v -l ttyS0 Þle.rmd

Page 79: 035 Системный Администратор 10 2005

77№10, октябрь 2005

hardware

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

Веб-интерфейс автоответчикаПросматривать, появилось ли у вас новое сообщение на ав-тоответчике каждый раз с консоли сервера или заходя удалённо на него посредством ssh – не самое лучшее ре-шение. Если компьютер имеет подключение к сети, исполь-зующей IP-адреса, то лучше всего организовать взаимо-действие с сообщениями автоответчика посредством веб-интерфейса. Для этого лучше всего подойдёт небольшой CGI-скрипт [10], написанный на bash [11]. Предполагается, что у вас уже установлен и запущен веб-сервер apache [12] с поддержкой cgi-скриптов, и вы знаете в какую директорию их следует помещать (обычно /var/www/cgi-bin).

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

Поскольку наш cgi-скрипт будет запускаться и рабо-тать от имени веб-сервера, то есть под пользователем apache, нам следует проследить, чтобы скрипт имел пра-ва на чтение и удаление голосовых сообщений. Для это-го можно поступить двояко: либо добавить пользователя apache в группу phone в файле /etc/group, либо в /usr/local/etc/mgetty+sendfax/voice.conf указываем:

также следует убедиться, что права, установленные на ди-ректорию /var/spool/voice/incoming также позволяют удалять файлы. Например, можно в качестве группы файла указать apache и для группы установить атрибут «+w».

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

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

операции в файле /etc/passwd придётся временно прописать пользователю apache командный интерпретатор /bin/bash вместо привычных для него /bin/false или /sbin/nologin.

Те, кто хорошо знакомы с html, cgi и bash, могут сра-зу перескочить в конец статьи, а со всеми остальными на-чнём с простого – в директории для скриптов создадим файл spisok.sh:

присвоим ему атрибут выполняемости командой:

и убедимся, что он выводит список сообщений при обраще-нии к нему. То есть запустим браузер и обратимся по адре-су: http://192.168.0.1/cgi-bin/spisok.sh (вместо 192.168.0.1 сле-дует указать адрес вашего сервера).

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

Теперь, создадим ещё один вспомогательный скрипт play.wav, который при запуске будет получать имя rmd-фай-ла методом GET [10, стр. 100], далее будет его конвертиро-вать в wav (с помощью уже известных нам утилит rmdtopvf и pvftowav) и будет сам представляться браузеру этим wav-файлом, чтобы браузер мог вызывать какой-нибудь уста-новленный в системе проигрыватель звуковых файлов. Не-смотря на то что скрипт будет выполнять много действий, сам он состоит всего лишь из четырёх строчек.

phone _ group apache phone _ mode 0660

# chgrp apache incoming# chmod g+w incoming

# su --login apache

chmod +x spisok.sh

#!/bin/bash

message _ dir="/var/spool/voice/incoming"

echo "Content-type:text/html; charset=koi8-r"echoecho "<html><body>"

echo "Последнее сообщение: `date -R -r ↵ $message _ dir/../.ßag <br>"echo "У вас сообщения:<br>"for f in `ls $message _ dirdod=`date -R -r $message _ dir/$f`echo "$f &nbsp;&nbsp;&nbsp;&nbsp;"echo "$d<br>"done

echo "</body></html>"

#!/bin/bash

message _ dir="/var/spool/voice/incoming"

echo "Content-type:text/html; charset=koi8-r"echoecho "<html><body>"

for f in `ls $message _ dirdoecho "$f<br>"doneecho "</body></html>"

#!/bin/bash

echo "Content-type:audio/wav"echo

cat /var/spool/voice/incoming/$QUERY _ STRING|/usr/ ↵ local/bin/rmdtopvf|/usr/local/bin/pvftowav

Page 80: 035 Системный Администратор 10 2005

78

hardware

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

на:

Как удалять сообщения? Для этого нам понадобится со-здать ещё один скрипт delete.sh:

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

Собственно, и всё. по сути больше ничего и не нужно. При желании можно можно объединить файл для удаления и выводящий список в один, чтобы после удаления у поль-зователя в окне браузера висело не только сообщение о том, что файл был удалён, но и список оставшихся сооб-щений. А также для привычности восприятия можно вмес-то расширения rmd выводить расширение wav. В результа-те получится, что весь наш веб-интерфейс состоит из двух скриптов: play.wav и модифицированного файла списка – нижеследующего файла 1.sh:

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

Литература, ссылки:1. Стахнов А. Сетевое администрирование Linux. – СПб.: БХВ-Пе-

тербург, 2004 г. – 59 с.2. Мохаммед Дж. Кабир Red Hat Linux 6 Server: Пер. с англ. – Из-

дательство «Лори», 2001 г. – 44-45 с.3. Mgetty+Sendfax Archive/Documentation Centre – http://alpha.

greenie.net/mgetty/index.html.4. ZyXEL Omni 56K modem, mgetty/vgetty and GPL – http://www.

advogato.org/article/134.html.5. Руководство для пользователей. Универсальный модем

серии U-1496. Документ № 83011501, Версия 2.21 ZyXEL Communications Corporation и АО МКЦ «Вариант».

6. Omni 56K. Техническое руководство. Версия 2.01, файл o56k-tr.pdf.

7. Беллами Дж. Цифровая телефония: Пер. с англ. – М.: Радио и связь, 1986 г.

8. Былянски П., Ингрем Д. Цифровые системы передачи. Пер. с англ./Под ред. А.А.Визеля. – М.: Связь, 1980 г.

9. Гитлиц М.В., Лев А.Ю. Теоретические основы многоканальной связи. – М.: Радио и связь, 1985 г.

10. Павлов А. CGI-программирование: учебный курс – СПб: Пи-тер, 2000 г.

11. Тейнсли Д. Linux и UNIX: программирование в shell. Руководс-тво разработчика. Издательская группа BHV, 2001 г.

12. Уэйнрайт П. Apache для профессионалов. Пер. с англ. – М.: Из-дательство «Лори», 2001 г.

13. Браун М., Ханикатт Д. HTML 3.2 в подлиннике: Пер. с. англ. – СПб: BHV-Санкт-Петербург, 2000 г.

14. Борзенко А. IBM PC: устройство, ремонт, модернизация. – 2-е изд. М.: ТОО фирма «КомпьютерПресс», 1996 г.

15. Калинцев Ю. Разборчивость речи в цифровых вокодерах. – М.:Радио и связь, 1991 г.

echo "$f &nbsp;&nbsp;&nbsp;&nbsp;"

echo "<a href=\"play.wav?$f\">$f</a> ↵ &nbsp;&nbsp;&nbsp;&nbsp;"

#!/bin/bash

rm /var/spool/voice/incoming/$QUERY _ STRINGecho "Сообщение $QUERY _ STRING удалено.<br>"

echo "<a href=\"delete.sh?$f\">delete</a> ↵ &nbsp;&nbsp;&nbsp;&nbsp;"

#!/bin/bash

message _ dir="/var/spool/voice/incoming"

echo "Content-type:text/html; charset=koi8-r"echoecho "<html><body>"

Рисунок 3. Внешний вид браузера после запуска скрипта 1.sh

if [ "$QUERY _ STRING» != "" ]thenrm $message _ dir/$QUERY _ STRINGecho "Сообщение $QUERY _ STRING удалено.<br>"Þ

echo "Последнее сообщение: `date -R -r ↵ $message _ dir/../.ßag <br>"echo "У вас сообщения:<br>"

for f in `ls $message _ dirdod=`date -R -r $message _ dir/$f`fn= echo $f|cut -d"." -f1

echo "<a href=\"play.wav?$f\">$fn.wav</a> ↵ &nbsp;&nbsp;&nbsp;&nbsp;"echo "<a href=\" basename $0 ?$f\">delete</a> ↵ &nbsp;&nbsp;&nbsp;&nbsp;"echo " $d<br>"

done

echo "</body></html>"

Page 81: 035 Системный Администратор 10 2005

79№10, октябрь 2005

hardware

ля передачи информации в цифровом формате были придуманы стандарты DVB (Digital Video Broadcasting):

DVB-S, DVB-T, DVB-C. Первый приме-няется в спутниковых каналах, лите-ра S – от Satellite. Второй используется в наземных средствах приема/переда-чи (T – terrestrial). Последний использу-ется в компаниях, предлагающих услу-ги кабельного телевидения (C – cable). Стандарты DVB-S и DVB-C были рати-фицированы в 1994 году, а DVB-T тре-мя годами позднее. Первая коммер-ческая трансляция в новом формате DVB-T была произведена в Великобри-тании, в 1998 году. В Берлине решили также отойти от трансляции видеосиг-нала в аналоговой форме и вещание полностью переведено на новый фор-мат DVB-T начиная с 2003 года. Теле-станция MiTV в Малайзии с сентября 2005 г. также начала предоставлять свои услуги в формате DVB-T [1]. Са-мым распространенным стандартом на территории нашей страны, по всей видимости, является DVB-S, который используется для ретрансляции кана-лов телевидения и радио. Что же ка-сается DVB-T и DVB-C, то перспекти-вы их использования у нас достаточно туманны. Как бы там ни было, но по-ка существует возможность запускать телеметрическое оборудование в кос-мос, наиболее популярным направле-нием будет вещание с геостационар-ных спутников (рис. 1).

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

ние: параболическая антенна (блюдце в простонародье), конвертер, коакси-альный кабель, ресивер (DVB-карта). Чем слабее сигнал со спутника в ва-шей местности, тем большего диамет-ра блюдце нужно применять. Я не при-вожу здесь детальную методику монта-жа тарелки, т.к. написать, лучше Н. Ор-лова [2] я вряд ли смогу. Также отлич-ные материалы хранятся по адресам [3-5]. В любом случае, нелишним будет проконсультироваться у специалистов, которые смогут рассказать вам о тон-костях установки параболической ан-тенны, ее параметрах, наличии устой-чивого приема со спутника в вашем регионе и некоторым другим нюансам, которые смогут пригодиться в дальней-шем. Если же вы чувствуете в себе си-лы установить тарелку самостоятельно, то указанные выше источники будут как нельзя кстати. Будем считать, что ан-тенна уже откалибрована на какой-ли-бо спутник, в нашем случае на Eutelsat W4 – 36.0 градусов восточной долготы. На этом спутнике, в частности, трансли-руются видеоканалы «НТВ+», российс-кие радиостанции «Динамит FM», «Мон-те Карло», «Эхо Москвы» и некоторые другие. Полный список представлен на сайте организации LyngSat [6].

Выбираем DVB-картуЕсли с выбором тарелки всё более-менее ясно – чем больше диаметр, тем лучше (главное, чтобы крепление было достаточно надежным и блюдце не унесло ветерком), то выбор DVB-карты может принести головную боль. Прежде всего следует определиться, что именно вам требуется: смотреть или слушать видео-, аудиоканалы,

Цифровое небо, илиЦифровое небо, илиОрганизуем приемОрганизуем приемспутникового вещанияспутникового вещания

Великолепие звездного неба завораживает хотя бы одними названиями небесных тел – Сириус,

Тор, Астра, Жар-Птица. Как вы догадались, это названия спутников на геостационарных орбитах.

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

Антон БорисовАнтон Борисов

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

Существуют DVB-карты, которые ориентированы только для работы со спутниковым Интернетом, напри-

Page 82: 035 Системный Администратор 10 2005

80

hardware

ты. По MAC-адресу также можно поп-робовать определить, что же в дейс-твительности в ваших руках [9]. В лю-бом случае, если вы в дальнейшем не ориентируетесь на прием спутни-кового Интернета, то про MAC-адрес можно забыть.

Сборка и настройка DVB-приложенийЧтобы принимать видео- или радио-станции, нам потребуется следую-щее ПО: MPlayer[11], DVB-драйверы [12], DVB-Utils[13]. Работа проводится на Linux-дистрибутиве с ядром 2.4.

Сначала требуется собрать драй-вер для управления DVB-картой (в час-тности, если у вас антенна с мото-подвесом, то именно от драйвера бу-дет зависеть правильная передача DiSeqC-команд).

Драйверы подготовлены. Следую-щий шаг – сборка таких DVB-приложе-ний, как scan, szap, dvbdate, и некото-рых других. Например, нам очень при-годится szap, т.к. с помощью именно этого приложения можно в дальней-шем рассуждать о качестве принима-емого сигнала, количестве ошибок.

Нужные утилиты и драйверы гото-вы – можно приступать к следующе-му шагу.

мер, Pent@Net, Pent@Value (производитель Pentamedia). Поэтому если вы не хотите ог-раничивать себя только спут-никовым Интернетом, то возь-мите SkyStar2 [7] (производи-тель – компания TechniSat [8]). Помимо низкой цены, карта носит заслуженную репута-цию самого лучшего бюджет-ного решения. Сравнивайте сами (см. таблицу 1).

С программным обеспечением для этой карты проблем не должно воз-никнуть – драйвера есть для Linux, Windows, FreeBSD, OpenBSD, MacOS-платформ [10]. Карта является функци-ональным продолжением своей пред-шественницы – карты SkyStar1. Прав-да, в новом варианте отсутствует ап-паратный MPEG2-декодер и нет воз-можности подключить CI-модуль, с по-мощью которого можно смотреть «за-крытые» каналы. В целом данная кар-та предназначена для тех, кому требу-ется бюджетное решение с гарантиро-ванным качеством работы (рис. 2).

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

В первой строчке мы загру-жаем драйвер dvb-core. Пара-метр dvb_shutdown_timeout=0 означает, что карта SkyStar не должна снижать свою мощ-ность спустя 5 секунд после инициализации. Что кроется за этой фразой? Дело в том, что, как правило, ставятся жесткоориентированные ан-тенны на определенный спут-ник, но существует и опреде-

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

Осуществляется это достаточно просто – плата SkyStar генерирует сиг-нал в формате DiSeqC (управляющие команды для мотора), а также изме-няет напряжение в 13 до 18 вольт, что-бы мотоподвес смог повернуть блюдце влево или вправо. По умолчанию через 5 секунд плата выключает генериро-вание напряжения в 18 вольт, поэтому пользователи с фиксированным блюд-цем ничего не заметят, а пользовате-ли с мотоподвесом уже не смогут по-ворачивать антенну. Обладателям мо-топодвесов рекомендуется акцентиро-вать внимание на этом факте.

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

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

# wget linuxtv-dvb-1.1.1.tar.bz2# tar xjvf linuxtv-dvb-1.1.1.tar.bz2# cd linuxtv-dvb-1.1.1# make && make install# ./MAKEDEV-DVB.sh# /sbin/depmod -a

Рисунок 1. Распространенность стандарта DVB-S по всему миру

Таблица 1. Цены на DVB-оборудование

Рисунок 2. DVB-карта SkyStar2

# /sbin/insmod dvb-core ↵ dvb _ shutdown _ timeout=0# /sbin/insmod stv0299# /sbin/insmod skystar2

# wget linuxtv-dvb-apps-1.1.0.tar.bz2# tar xjvf ↵ linuxtv-dvb-apps-1.1.0.tar.bz2# cd linuxtv-dvb-apps-1.1.0# make

# dmesg

Page 83: 035 Системный Администратор 10 2005

81№10, октябрь 2005

hardware

Можно оформить загрузку либо в файле /etc/rc.d/rc.local (или аналогичном для вашей системы), либо как строчки в /etc/modules.conf.

После этого необходимо создать файл channels.conf, в котором содержатся сведения о характеристиках кана-лов, передаваемых со спутника (частота, символьный по-ток данных, поляризация и т. д.). Обратимся к информа-ции, размещенной на сайте LyngSat [6]. Для радиостан-ции «Dinamit FM»(луч охватывает территорию России) ви-дим следующее:

Составим из этих данных файл channels.conf, который в дальнейшем будет использоваться и MPlayer и DVB-ути-литами. Выглядит он следующим образом:

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

Вспомним, что помимо драйверов мы также собрали пакет dvb-utils. Воспользуемся утилитой szap из этого па-кета:

Для анализа необходимо обратить внимание на следу-ющие характеристики: уровень сигнала (signal), отношение сигнал/шум (snr) и ошибки (ber). Сигнал должен быть макси-мальным (в данном случае он колеблется на уровне 75%), отношение сигнал/шум также должно стремиться к макси-

муму. При этом битовые ошибки (ber), наоборот, должны быть «в идеале» 0 (как в данном случае). Флаг FE_HAS_LOCK означает, что сигнал от транспондера опознан на этой частоте с данными параметрами и можно приступать к про-смотру или прослушиванию теле/аудиоканала.

Однако если у вас MPlayer (или xine, или аналог) соб-ран без поддержки DVB, то до наслаждения остается бук-вально один шаг.

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

Запуская MPlayer следующим образом, вы сможете слу-шать радиостанции:

Ключ tsprobe необходим для быстрого определения MPEG-TS-потока. В случае, когда проигрывается видеока-нал, то значение следует увеличить до 120000.

А насколько интересно содержание спутниковых кана-лов решать, конечно же, вам. На вкус и цвет, как извест-но, товарищей мало. Надеюсь, что найдя что-то нужное, вы уже будете знать, как применить спутниковую ретранс-ляцию. Производить ли вещание в рамках LAN/WAN или за-думаться об эфирном вещании станций в вашем населен-ном пункте. Или превратить вашу домашнюю ПЭВМ в ана-лог видеомагнитофона с помощью программ VDR (Video Digital Recorder) [20] или MythTV [21]. На этом всё, приятно-го времяпровождения.

Ссылки:1. http://www.wikipedia.com/DVB.2. http://www.telesputnik.ru/equipment/antena1.html.3. http://tv.tut.by/tech/tune.shtml.4. http://satnn.ru/sat_tv/128/dish_setup.5. http://www.allsat.ru/tvsat.html.6. http://www.lyngsat.com/36east.html.7. http://www.gs.ru/info/si/skystar2.html.8. http://www.technisat.com/en/produkte/produkteview.php?kid=1,29.9. http://www.gs.ru/info/si/eq.html.

10. http://www.defyne.org/dvb.11. http://www4.mplayerhq.hu/MPlayer/releases/MPlayer-1.0pre7try2.

tar.bz2.12. http://www.linuxtv.org/download/dvb/linuxtv-dvb-1.1.1.tar.bz2.13. http://www.linuxtv.org/download/dvb/linuxtv-dvb-apps-1.1.0.tar.bz2.14. http://www.linuxdvb.tv/download/dvb-20050706.tar.bz2.15. http://www.technisat.com/datasheets/en/SkyStar2pci.pdf.16. http://www.skystar2.info.17. http://www.gs.ru/si/SS2graph.html.18. http://www.gs.ru/si/SS2soft.html.19. http://www.satworld.ru/int4-st5.html.20. http://www.cadsoft.de/vdr – Video Disk Recorder.21. http://www.mythtv.org.

skystar2.c: FlexCopIIB(rev.195) chip foundskystar2.c: the chip has 38 hardware filtersDVB: registering new adapter (Technisat SkyStar2 driver).probe_tuner: try to attach to Technisat SkyStar2 driverstv0299.c: setup for tuner Samsung TBMU24112IMBDVB: registering frontend 0:0 (STV0299/TSA5059/SL1935 based)...

Частота (freq.): 12073Поляризация (там же): L (левая, она же горизонтальная)Символьный поток (SR): 27500Аудиоканал (Audio): 4100Идентификатор (SID): 2

Dinamit FM:12073:h:0:27500:0:4100:1:2TV1:12173:h:0:2532:401:301:1:1 TNV:12214:h:0:4340:401:320:1:1

# cp channels.conf ~/.mplayer/

# cd linuxtv-dvb-apps-1.1.0/util/szap# ./szap "Dinamit FM" -c ~/.mplayer/channels.conf

reading channels from file '/home/anthony/.mplayer/channels.conf'zapping to 2 'Dinamit FM':sat 0, frequency = 12073 MHz H, symbolrate 27500000, vpid = 0x0000, apid = 0x1004using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'status 07 | signal c281 | snr a977 | ber 0000fff0 | unc 00000000 | status 1f | signal c306 | snr d686 | ber 00000019 | unc 00000000 | FE_HAS_LOCKstatus 1f | signal c10e | snr d680 | ber 00000000 | unc 00000000 | FE_HAS_LOCKstatus 1f | signal c240 | snr d680 | ber 00000000 | unc 00000000 | FE_HAS_LOCKstatus 1f | signal c0e4 | snr d68f | ber 00000000 | unc 00000000 | FE_HAS_LOCKstatus 1f | signal c29e | snr d680 | ber 00000000 | unc 00000000 | FE_HAS_LOCK

# cd MPlayer-1.0pre7try2# ./conÞgure --preÞx=/usr/local/mplayer ↵ --with-dvbincdir=../dvb/linuxtv-dvb-apps-1.1.0/include/# make# make install

# mplayer dvb://0@"Monte Carlo" -tsprobe 12000

Page 84: 035 Системный Администратор 10 2005

82

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

Краткая информацияOS/2 – операционная система фирмы IBM. Особой популярностью в качес-тве домашней ОС никогда не поль-зовалась, оставаясь в тени Windows. OS/2 представляет собой самосто-ятельную линию развития операци-онных систем, отличаясь от Windows NT существенно меньшей требова-тельностью к ресурсам компьютера, а от Linux/UNIX – принципиальной раз-ницей в подходе к разработке и боль-шей схожестью графического интер-фейса пользователя с Windows.

OS/2 1.0 – началоЭволюция OS/2 началась очень давно. Наиболее важным моментом предыс-тории OS/2 следует считать появление IBM Personal Computer или просто IBM PC (название отлично демонстрирует полное отсутствие изобретательности IBM в деле присвоения наименований выпускаемым продуктам).

MS(PC)-DOS, как и сам PC, была весьма открытой системой. Интерфей-сы DOS и BIOS были хорошо докумен-тированы, и сторонние производители могли легко использовать и расширять их – вот почему DOS и по сей день ис-пользуется в некоторых задачах.

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

Рассвет IBM PCНо невзирая на все свои недостатки в 1980 году IBM PC стал популярным инструментом. Аппаратный и програм-мный рынки росли с невиданной скоро-стью. Казалось бы все было прекрас-но – но пользователи PC были недо-вольны. Основные причины тому бы-ли следущие:

Различные программы либо никак не взаимодействовали друг с другом, либо взаимодействие происходило на примитивном уровне.

Пользователь не мог делать не-сколько задач одновременно. Как не-кое подобие многозадачности были придуманы резидентные программы.

Логическим итогом всего хаоса проблем было то, что окружение DOS было нестабильным. Не было никакой

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

Архитектура DOS имела серьезные ограничения при работе с памятью. «640 Кб будет достаточно для каждо-го» – выражение Билла Гейтса в 1981 году. Возможно, это и было правдой в 1981, но никак не в 1984. Естествен-но, как только нехватка памяти стала очевидной, были придуманы различ-ные способы обойти «проблему 640», но все они никак не могли считаться решением.

Некоторые из существовавших проблем могли быть решены програм-мно с помощью лучше спроектирован-ной операционной системы. Но дру-гие требовали аппаратной поддержки для того чтобы решение было эффек-тивным или в принципе реализуемым. И эта поддержка была реализова-на в 1984 году под названием IBM AT (Advanced Technology). Помимо огром-ной массы различных усовершенство-ваний самым заметным (и важным) бы-ло применение нового центрального процессора – Intel 80286. Хотя 80286 был 16-разрядным, как и его прароди-

История взлёта и падения OS/2 – История взлёта и падения OS/2 – одной из самых интересных одной из самых интересных операционных системоперационных систем

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

Ещё не так давно доминирование продукта Microsoft было не настолько очевидным, а на рынке

операционных систем имелся один весьма и весьма перспективный продукт компании IBM

под названием OS/2.

Алексей КоршуновАлексей Коршунов

Page 85: 035 Системный Администратор 10 2005

83№10, октябрь 2005

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

История1981. Microsoft покупает 86-DOS у компа-нии Seattle Computer Products. Удовлетво-рение запросов IBM к операционной сис-теме для PC привело к некоторым измене-ниям, после чего она и выпущена под тор-говой маркой MS-DOS.

1984. Появляется процессор Intel 80286. В IBM принимается решение, что опера-ционная система DOS морально устаре-ла, и совместно с Microsoft начинает раз-работку OS/2.

Декабрь 1987. Появилась OS/2 1.0 (ко-довое название CP/DOS). Эта версия не имела графической оболочки (работала только в текстовом режиме) и имела до-статочные улучшения относительно DOS, например, там была расширена поддержка оперативной памяти. Выводить информа-цию на экран могла только одна програм-ма, хотя другие программы могли выпол-няться в фоновом режиме.

Ноябрь 1988. OS/2 1.0 Extended Edition и OS/2 1.1 Standard Edition. Версия OS/2 1.1 SE (кодовое название Trimaran) обла-дает графической оболочкой Presentation Manager. Требования к оперативной памя-ти – минимум 3, а лучше 6 Мб. Версия под названием OS/2 1.10 Extended Edition (OS/2 1.10 EE), появившаяся позднее и стоящая

795 долларов, включала также Database Manager и Communications Manager.

Октябрь 1989. OS/2 1.20 SE и EE (кодо-вое название Sloop). Впервые предложена улучшенная файловая система HPFS. По-явилось средство двойной загрузки Dual Boot, а в расширенной версии 1.2 – мощ-ный язык REXX. Этот год является пере-ломным моментом в истории OS/2 – альянс начинает разваливаться (в основном из-за «подковерных игр» менеджеров Microsoft). Microsoft, обеспокоенная завоеванием рын-ка операционных систем, берет на себя раз-работку следующей, полностью 32-разряд-ной OS/2 3.0. IBM концентрируется на раз-работке OS/2 2.0. Это, по сути, «развод» – разрабатываемая фирмой Microsoft OS/2 3.0 даже не сохраняет своего названия и демонстрируется на выставке ComDex’91 под именем Windows NT – первая Windows с вытесняющей многозадачностью.

Декабрь 1990. OS/2 1.3 (кодовое назва-ние Cutter) – версия, работающая на про-цессоре 80286 и последняя, выходящая в двух вариантах стандартной и расши-ренной редакции (Язык REXX присутствует уже в обеих редакциях). Из новшеств – под-держка масштабируемых шрифтов Adobe Type Manager. Эта версия также в ряду пос-ледних, продаваемых фирмой Microsoft.

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

Апрель 1992. OS/2 2.0 (кодовое назва-ние Cruiser). Первая 32-разрядная версия OS/2. Минимальные требования – про-цессор 80386SX, 4 Мб оперативной па-мяти. Поддержка SAA (System Application Architecture) – унифицированной архитек-туры прикладных программ. OS/2 2.0 – первая версия, официально поддерживае-мая не только на компьютерах IBM, но и на компьютерах других фирм. Она претерпе-ла большие реконструкции после разрыва партнерских отношений с Microsoft по раз-работке. Появился удобный объектноори-ентированный интерфейс WorkPlaceShell («рабочий стол», рабочее место) базирую-щийся на архитектуре SOM (System Object Model), появилось гибкое средство загруз-ки Boot Manager, серьезно усовершенство-вана поддержка DOS и Windows приложе-ний (Windows приложения запускаются с ис-пользованием Win-OS/2), а также 32-раз-рядный программный интерфейс. Появи-лась и возможность использования более 16 Мб оперативной памяти. Отдельно выхо-дят обновления для средств мультимедиа.

тели, однако он имел одну очень важ-ную особенность: защищенный ре-жим работы (protected mode). В защи-щенном режиме 286-й мог адресовать 16 Мб памяти. Это было очень много, учитывая, что PC с 16 Мб памяти стали стандартом де-факто лишь более чем 10 лет спустя. Но еще большим плюсом было то, что защищенный режим был действительно защищенным. Это оз-начало, что доступ к памяти не был «свободным для всех» – вместо этого существовало 4 уровня (или кольца) защиты и менее привилегированный процесс не мог нанести повреждения блокам памяти, принадлежащим более привилегированным компонентам.

Как IBM, так и Microsoft полностью осознавали проблемы, вызываемые работой DOS в реальном режиме, и ра-ботали над их решением. Двумя наибо-лее заметными продуктами, которые в итоге появились, стали IBM TopView и Microsoft Windows. TopView была текстовой многозадачной оболочкой для DOS и в сущности идейным праро-дителем позднейшей намного более ус-

пешной оболочки DesqView производс-тва компании Quarterdeck. Microsoft Windows являлась графическим мно-гозадачным окружением, работавшим поверх DOS. Впервые анонсированная в 1983 версия 1.0 появилась в 1985. Она была более чем плохой и вполне заслуженно не приобрела сколько-ни-будь широкой популярности.

ВзрослениеВ это же время Microsoft работала над полностью новой операционной системой, рассчитанной заменить DOS. В январе 1983 года началась раз-работка новой многозадачной MS-DOS системы. Название проекта изменя-лось несчетное количество раз. В ав-густе 1985 IBM присоединяется к про-екту, и фирмы подписывают соглаше-ние о совместной разработке, которое дает обеим компаниям право на про-дажу конечного продукта. Немного по-годя проект переименовывается в CP/DOS – от Control Program/DOS. Но да-же это был не финал процесса выбора имени еще нерожденного ребенка. Не-

задолго до выпуска продукт переиме-новывается в OS/2 – видимо, для со-ответствия новой линейке персональ-ных компьютеров IBM под названием PS/2 (Personal System/2).

Интересно то, что OS/2 1.0 не бы-ли реализованы очень многие плани-руемые особенности и самым замет-ным было отсутствие графического интерфейса пользователя Presentation Manager (кодовое имя Winthorn).

И все же OS/2 1.0 являлась ради-кальным рывком в сторону от DOS и имела множество особенностей и возможностей, которые DOS никог-да не смогла бы иметь и которые бы-ли реализованы в других операцион-ных системах намного позже.! Вытесняющая многозадачность

(preemptive multitasking).! Многопоточность (multithreading).! Средства взаимодействия меж-

ду процессами ( Inter Process Communication – IPC) такие как разделяемая память (shared memory), каналы (pipes), семафоры (semaphores) и очереди (queues).

Page 86: 035 Системный Администратор 10 2005

84

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

! Поддержка виртуальной памяти (virtual memory, swapping) – теоре-тически до 1 Гб виртуальной па-мяти.

! Полностью защищенный режим ра-боты.

! Динамическое подключение биб-лиотек (dynamic linking, DLLs).

! Поддержка до 16 Мб оперативной памяти.

Одной из самых неприятных помех для разработчиков было то, что они столкнулись с необходимостью подде-ржки DOS. Ни одна из проблем не яв-лялась непреодолимой, но их комбина-ция была убийственной. IBM и Microsoft расплачивались за непродуманные ре-шения, принятые при разработке DOS в 1981 году. К тому же огромная попу-лярность DOS произвела эффект бу-меранга – разработчики вынуждены были поддерживать DOS приложения в OS/2, чтобы иметь хоть какие-то шан-сы на завоевание рынка.

В конце концов разработчики OS/2 нашли решение, как исполнять DOS

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

Код DOS, применяемый в OS/2, ба-зировался на коде MS-DOS/PC-DOS, но с многочисленными модификация-ми. Так, к примеру, код, обеспечивав-ший работу с файловой системой, ра-ботал только в защищенном режиме. Иными словами, при обращении к фай-лу вся операционная система переклю-чалась в защищенный режим. Впрочем, впоследствии такой подход оказал-ся большим плюсом – когда были реа-лизованы инсталлируемые файловые системы, оказалось, что DOS сессия OS/2 не имеет никаких проблем с до-ступом к (например) файловой систе-ме HPFS.

Весь же защищенный код был на-писан «с нуля» со всеми теми прият-ными особенностями, которые бы-ли описаны ранее. Ядро и системные библиотеки в основном были написа-ны на ассемблере по следующим двум причинам:! Производительность – OS/2 долж-

на была работать на IBM AT с 6 Мгц процессором.

! Ограничения по памяти – OS/2 должна была работать при нали-чии только 1 Мб ОЗУ.

В новой операционной системе бы-ло особенно не на что посмотреть – ин-терфейс был исключительно текстовым (обещанный Presentation Manager был все еще в стадии разработки) и внешний вид весьма походил на DOS. Но после нажатия <Ctrl+ESC> появлялся Program Selector – утилита, позволявшая запус-кать новые задачи и переключаться между существующими. Теоретически существовало 16 сессий, но поскольку сама OS/2 занимала часть из них, поль-зователь имел доступ к 12 сессиям.

Май 1993. OS/2 2.1 (кодовое назва-ние Borg). Добавлена поддержка прило-жений Windows 3.1 (до этого поддержива-лась Windows 3.0). В поставку включены средства мультимедиа и значительно об-новлен список поддерживаемых аппарат-ных устройств. Требования к оперативной памяти – минимум 8 Мб.

Ноябрь 1993. OS/2 for Windows (кодовое название Ferengi). Отсутствует Win-OS/2 – вместо нее используется уже ранее уста-новленная пользователем Windows 3.1, об-новлены драйвера.

Февраль 1994. OS/2 2.11. В основным исправлены различные ошибки. Также су-ществует отдельным набором исправлений FixPack XR 06200 для OS/2 2.1.

Июль 1994. OS/2 2.11 SMP. В этой вер-сии была добавлена поддержка многопро-цессорных (до 16 процессоров) систем.

Октябрь 1994. OS/2 Warp 3.0 (кодо-вое название Warp). Изменения коснулись лишь улучшения производительности сис-темы, понижения требования к оператив-ной памяти до 4 Мб. Расширен спектр под-держиваемых аппаратных устройств. В GUI появился новый элемент – LaunchPad (Па-нель инструментов, «стартовая площад-ка») – эффективное и гибкое средство, отлично вписавшееся в объектноориен-

тированную модель интерфейса. С OS/2 Warp 3.0 поставляется бесплатный пакет «BonusPak», включающий:! средства ревизии аппаратного обеспе-

чения;! расширенные средства просмотра

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

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

! средство проведения конференций в сетях;

! доступ к сетям CompuServe и Интер-нет.

Май 1995. OS/2 Warp Connect. В базо-вую систему включена полная поддержка сетевой функциональности, поддержка од-норанговых сетей.

Сентябрь 1996. OS/2 Warp 4.0 (кодо-вое название Merlin). В этой версии вклю-чено полное управление голосом, средс-тва голосового ввода текста, встроенные механизмы Java, OpenDoc, средства ра-боты в глобальной сети Интернет и дру-гие передовые технологии, разработан-

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

1999. OS/2 WarpServer for e-Business (кодовое название Aurora) – сокращенно OS/2 WSeB. Внешне OS/2 осталась прак-тически без изменений, однако внутрен-ние переработки носили весомый харак-тер. Появилась поддержка журналируемой файловой системы JFS, взятой из AIX (IBM версия UNIX), сняты ограничения на объ-ем виртуальной памяти, появилась мощная программа для управления томами под на-званием LVM (Logic Volume Manager).

Весной 2000-го американская компа-ния Serenity Systems объявляет о том, что ею достигнуто партнерское соглашение с IBM о выпуске новой клиентской версии OS/2. Правда, эта клиентская версия пол-ностью меняет свое название – новый кли-ент называется eComStation (сокращенно eCS). Официально продажи eCS 1.0 нача-лись в июле 2001 года. По сути, это новая модификация OS/2, в которой изменен ин-терфейс за счет включения в базовую сис-тему приложения Styler/2 а также процесс инсталляции. Добавлено новое средство распределенной инсталляции ПО под на-званием WiseMachine.

Page 87: 035 Системный Администратор 10 2005

85№10, октябрь 2005

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

С точки зрения пользователя OS/2 1.0 имела несколько существенных не-достатков. Некоторые были исправле-ны в более поздних версиях серии 1.x, на исправление других понадобилось куда больше времени:! Максимальный размер раздела

32Мб. Хотя возможно в 1987 году это было и не критично. OS/2 1.1 превысила это ограничение (хотя и базировалась на FAT), а OS/2 1.2 поставлялась уже с HPFS.

! Отсутствовала поддержка двойной загрузки (dual boot) или менеджера загрузки (Boot Manager). Dual Boot появился в версии 1.1, Boot Manager был реализован в версии 2.0.

! Не было возможности обойти обра-ботку файла CONFIG.SYS. Это бы-ло напастью всех версий серии 1.x. В сочетании с отсутствием Boot Manager это означало, что если система не могла загрузиться (на-пример, некорректный драйвер), то единственным шансом спасти ситуацию (и данные) была загру-зочная дискета. Окончательно про-блема была решена только в OS/2 Warp.

! Полное отсутствие механизма за-мены находящихся в использова-нии динамических библиотек (DLL). Это сделало установку исправле-ний системных DLL (таких как драй-вера Presentation Manager) более чем затруднительным занятием. В OS/2 2.x ситуация разрешилась с помощью недокументированных вызовов API.

На рынке операционных систем OS/2 пребывала в состоянии безна-дежной битвы за широкое распростра-нение. Ее признанию мешало несколь-ко факторов:! OS/2 считалась требовательной

к ресурсам (рекомендовалась AT с 2 Мб ОЗУ, хотя для работы было достаточно одного мегабайта).

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

! Непомерно высокие цены. Воз-можно, маркетологи IBM и Microsoft имели какие-то свои особые со-

ображения, но продажа набо-ра разработчика (SDK – software development kit) за тысячи долларов отнюдь не помогала росту популяр-ности операционной системы (пер-вая версия Microsoft SDK for OS/2, вышедшая в апреле 1987, стоила три тысячи долларов).

! Ложные представления о новом продукте. Возможно, самый боль-шой ложный миф заключался в том, что OS/2 могла работать только на оборудовании IBM. Де-ла обстояли абсолютно иначе – да-же версии OS/2, продаваемые са-мой IBM, поддерживали оборудо-вание сторонних производителей.

Резюмируя, можно сказать, что OS/2 1.0 не достигла абсолютного ус-пеха (иначе сегодня большинство ком-пьютеров работало бы под управлени-ем OS/2), но и не стала оглушитель-ным провалом. OS/2 внесла большое количество новых (и по большей час-ти хороших) концепций в мир PC. Так-же OS/2 1.x выстроила солидный фун-дамент для OS/2 2.x, которая в свою очередь была большим шагом в исто-рии PC. Большинство концепций, впер-вые появившихся в OS/2 1.x доказали свою обоснованность и не претерпе-ли существенных изменений в после-дующих релизах. Программисты IBM и Microsoft, без сомнения, не заслужи-вают ничего, кроме уважения за про-деланную работу.

OS/2 1.1 – ранние годыСледующим релизом OS/2 стала вер-сия 1.1. Единственной причиной, по ко-торой версию пронумеровали не 2.0, вероятно, было то, что графичес-кий интерфейс пользователя (GUI – Graphical User Interface) был обещан в версии 1.0, но не был закончен вов-ремя. Как забавный факт следует от-метить, что Windows 1.0 разрабатыва-лась как Interface Manager и приобре-ла новое имя благодаря менеджерам, игравшим с именами, невзирая на про-тесты программистов.

Presentation Manager имел кодо-вое имя Winthorn и практически пол-ностью был написан в отделении IBM Hursley Labs. Программирование для PM было весьма схоже с программи-рованием под Windows, однако име-лись и отличия:

! Прежде всего самое заметное бы-ло в различии координатных сис-тем. В то время как координаты 0,0 в Windows были привязаны к вер-хнему левому углу экрана (что ло-гично для знающего, как работает аппаратная реализация графики на архитектуре PC), в PM коорди-наты 0,0 были привязаны к нижне-му левому углу экрана (что логич-но для того, кто знает, как работа-ет координатная система в матема-тике или физике).

! В Windows все графические опе-рации передавались так называе-мому Device Context. PM также ис-пользовал DC, но дополнительно имел еще один уровень абстрак-ции, называвшийся Presentation Space, что предоставляло большую гибкость.

! OS/2 имела гораздо более мощные функции рисования в своем графи-ческом программном интерфей-се (Graphics Programming Interface, GPI) – наследие мейнфреймов. Не-которые из концепций GPI позднее были перенесены в Windows NT (но не в Windows 95).

! Общая программная модель в OS/2 была намного проще и не выгляде-ла как набор «быстрых и грязных исправлений» (quick and dirty hack), что справедливо по отношению к программной модели Windows.

Помимо появления GUI другие из-менения включали полную реализа-цию именованных каналов, которой не было в OS/2 1.0. Также была до-бавлена поддержка «больших» томов FAT (BigFAT). Теоретически поддержи-вались тома размерами до 2 Гб, хо-тя практический лимит был несколь-ко ниже.

После запуска OS/2 1.1 встреча-ла пользователя следующим экраном (см. рис. 2).

Достаточно странным фактом бы-ло то, что OS/2 1.1 не имела нормаль-ного текстового редактора с GUI ин-терфейсом – даже такого, как notepad в Windows. Вместо него было тексто-вое приложение E.exe, запускаемое из командной строки.

В любом случае OS/2 1.1 была тех-нически очень интересной и занима-тельной программой. Она облада-ла намного большими возможностя-

Page 88: 035 Системный Администратор 10 2005

86

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

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

Естественно, что системе были присущи и недостатки. Хотя и под-держивалось большинство тогдаш-них стандартов для вывода графики (CGA, EGA, VGA), но поддержка дру-гих была весьма слабая, если вообще существовала. Поддержка принтеров была чисто номинальная – несколько принтеров и плоттеров производства IBM и все.

Под OS/2 существовали различные приложения – в том числе такие, как Microsoft Word, Lotus 1-2-3 и QuattroPro. Однако все они были текстовыми, за исключением Microsoft Excel 2.2.

OS/2 1.2 – развитиеВ конце 1999 Microsoft и IBM выпуска-ют версию OS/2 1.2 – очень важное со-бытие во всей истории OS/2, посколь-ку именно в версии 1.2 были реализо-ваны практически все возможности, обещанные в OS/2 еще до ее появле-ния. В OS/2 1.2 разработчики наконец отказались от файловой системы FAT и реализовали инсталлируемые фай-ловые системы (Installable File System, IFS) и высокопроизводительную фай-ловую систему HPFS (High Perfomance File System).

HPFS была разработана «с ну-ля» Гордоном Литвином (Gordon Letwin) – ведущим разработчиком OS/2 в Microsoft. Новая файловая система весьма превосходила FAT, а также сни-мала множество ограничений:! Отсутствовал печально известный

лимит «8.3» на имена файлов – 8 символов на имя и 3 на расшире-

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

! Поддержка расширенных атрибу-тов (Extended Attributes, EA). Каж-дый файл или директория могли иметь до 64 Кб EA, связанных с ним там могла храниться любая инфор-мация – иконки, описания, инфор-мация для программы-каталогиза-тора и так далее.

! Поддержка больших дисков. FAT поддерживала разделы размером до 2 Гб. HPFS поддерживала тома до 64 Гб и была ограничена на то время лишь драйверами жестких дисков.

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

! Уменьшение потерь дискового про-странства. Наибольший FAT-диск, размером в 2 Гб, использовал для хранения данных элементы размером 64 Кб, чем вызывались большие потери дискового места (иногда до 50%). HPFS использо-вала сектора размером 512 байт, таким образом резко уменьшая по-тери.

! Высокая отказоустойчивость. Ес-ли таблица FAT на дисковом раз-деле разрушалась в результате ин-цидента, вся остальная информа-ция на диске превращалась в го-ру бесполезного мусора, посколь-ку вся информация о размещении файлов была сконцентрирована

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

Существовало две версии HPFS – «чистая» HPFS и HPFS386. Последняя, используемая в Microsoft LAN Manager (и IBM LAN Server), была более произ-водительной, допускала значитель-но увеличенные размеры кэша и име-ла несколько расширений необходи-мых для серверов – к примеру встро-енную систему разграничения доступа (Access Control List, ACL) и систему ог-раничения директорий. В общем, судь-ба HPFS оказалась весьма успешной – она практически в неизменном ви-де перешла в OS/2 2.0 и с некоторы-ми вариациями была использована в Windows NT под именем NTFS. По-добная история произошла с файло-вой системой UFS операционной сре-ды SunOS 4.x. После революционно-го перехода на полностью новую вет-ку UNIX фирма Sun, имея богатый по-ложительный опыт, без больших изме-нений оставила UFS в своей новой ОС. Это наглядный пример того, что удач-ные решения предшественников ос-таются в силе.

OS/2 GUI также получил новый вне-шний вид, весьма схожий с вышедшей через несколько месяцев Windows 3.0 (см. рис. 3).

Наиболее значимым различием между OS/2 1.2 и Windows 3.0 было то, что Windows не была операционной системой как таковой и исполнялась

Рисунок 2. Долгожданный GUIРисунок 1. Рабочее пространство пользователя OS/2 1.0

Page 89: 035 Системный Администратор 10 2005

87№10, октябрь 2005

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

поверх MS-DOS (и даже могла быть запущена в DOS сессии OS/2). Также Windows содержала больше различных приложений (по большей части беспо-лезных, ну может быть за исключением Solitaire). OS/2 была более бизнес-ори-ентированной и при сравнении имела несколько спартанский вид. Отчасти это послужило тому, что Windows полу-чила большее распространение среди конечных пользователей.

OS/2 1.3 – последняя из 16-битных ОСПосле исторического разрыва сов-местной разработки OS/2, вызванно-го нежеланием Microsoft делить при-быль от продаж операционной систе-мы с IBM, основной процесс по модер-низации OS/2 происходил в IBM (хо-тя Microsoft и полностью сконцентри-ровалась на Windows, некоторые вы-нужденные изменения в систему все же вносились). Версия 1.3 была прак-тически идентична 1.2 по предостав-ляемым возможностям, но включа-ла многочисленные улучшения про-изводительности и удобства исполь-зования.

Наконец во всех редакциях OS/2 присутствовал язык программирова-ния REXX, разработанный Майком Ко-улишоу (Mike Cowlishow) из IBM UK.

Язык изначально создавался для достижения четырех главных целей:! легкой понимаемости (читаемости)

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

! поддержки быстрого, эффектив-ного и аккуратного программиро-

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

! обеспечения надежной и эффек-тивной реализации языка на раз-нообразных платформах;

! высокой применимости языка в системном и прикладном ПО.

И все эти задачи были успешно ре-шены. Таким образом операционная система получила мощный и гибкий инструмент, сравнимый с различными языками написания скриптов в UNIX-подобных системах. Это несомненно являлось очень большим преимущес-твом, особенно в сравнении с более чем скромным набором возможнос-тей, которые предлагались при напи-сании пакетных файлов в DOS и ран-них версиях OS/2.

OS/2 2.0 – 32-битная революцияПока в 1988 году IBM и Microsoft усер-дно трудились над OS/2 1.2, в IBM на-чалась разработка кардинально пе-реработанной операционной систе-мы. Итак, хотя версию 1.3 IBM совер-шенствовала исключительно своими силами, в то же время под руководс-твом ведущего разработчика Майк-ла Когана (Michael S. Kogan) уже пол-ным ходом шли работы над версией 2.0. В марте 1992 операционная сис-тема была полностью готова и выпу-щена на рынок под названием OS/2 2.0 GA (General Availability – публично доступная). Приставка GA появилась не случайно. В это время шли ярос-тные «словесные войны» между IBM

и Microsoft и в одной из перепалок ви-це-президент Microsoft Стив Балмер пообещал публично съесть флоппи-диск, если IBM умудрится выпустить OS/2 2.0 до конца 1991 года. Посколь-ку зрелище обещало быть достаточно интересным, в ноябре 1991 была вы-пущена ограниченным тиражом OS/2 2.0 LA (Limited Availability – ограничен-но доступная). К сожалению, госпо-дин Балмер не сдержал своего слова, и OS/2 2.0 LA пришлось использовать как простую бета-версию, каковой она в сущности и являлась.

Самым большим плюсом в OS/2 2.0 была сама система. Переход на 32-раз-рядную архитектуру снял множество ограничений, существовавших в DOS и OS/2 1.x – в первую очередь по ра-боте с памятью. Вместе с тем система не была «полностью» 32-разрядной – многие части оставались 16-разрядны-ми – в первую очередь по соображени-ям совместимости и экономии време-ни. Для ускорения разработки, к при-меру, драйвера графической подсисте-мы (драйвера видеокарт и принтеров для Presentation Manager) в OS/2 2.0 были 16-разрядными и были замене-ны 32-битными версиями только в OS/2 2.1. Требованиями совместимости дик-товалось использование 16-разряд-ных драйверов физических устройств (Physical Device Driver, PDD) совмес-тимых с OS/2 1.3. Аналогичным обра-зом многие фрагменты ядра были 16-битными для обеспечения поддержки приложений, написанных для OS/2 1.x. Основные же элементы системы бы-ли полностью новыми и 32-разрядны-ми – к примеру поддержка множест-ва виртуальных DOS-машин (Multuply

Рисунок 3. Единообразие интерфейса OS/2 & Win3.0 Рисунок 4. Workplace Shell OS/2 2.0

Page 90: 035 Системный Администратор 10 2005

88

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

Virtual DOS Machine, MVDM) и менед-жер памяти с поддержкой пейджинга. Более того, основная часть кода бы-ла написана на C, а не на ассемблере, как в OS/2 1.x.

Вторым существенным момен-том стал новый интерфейс пользова-теля под названием Workplace Shell (или WPS для краткости), являвший-ся радикальным уходом от концепций, заложенных в GUI OS/1.x и Windows (см. рис. 4). Новый интерфейс был объектно-ориентированным и в нем все стало объектом – диск, принтер, программа и так далее. Манипуляции с объектами проводились с помощью drag-n-drop – перемещение, копиро-вание, печать и уничтожение. В WPS широко использовалась правая кноп-ка мыши – для открытия контекстных меню и выполнения операций по пере-таскиванию объектов.

Для операционной системы OS/2 2.0 была зарегистрирована торговая марка «Интегрирующая платформа» (The Integrating Platform). Это назва-ние напрямую намекало на уникаль-ную возможность OS/2 2.0 исполнять существующие DOS, Windows и OS/2 1.x приложения одновременно с но-выми 32-разрядными родными прило-жениями. В отличие от OS/2 1.x в вер-сии 2.0 поддержка DOS была превос-ходной. Система полностью использо-вала появившийся в 386 и последую-щих процессорах виртуальный 8086-режим (Virtual 8086 mode). Злые язы-ки компьютерного мира одно время утверждали, что этот режим был реа-лизован в 386-м процессоре шокиро-ванными инженерами Intel – слухи о мучениях при программировании под-держки в OS/2 1.x действительно рас-пространились весьма широко, и об-легчение страданий программистов на аппаратном уровне было поисти-не обычным состраданием. Кроме то-го, что пользователь теперь мог запус-кать не только несколько полноэкран-ных и оконных сессий DOS, появилась возможность создавать «специаль-ные» DOS-сессии, в которых исполь-зовалась не встроенная поддержка DOS, а предоставлялась возможность запустить DOS 4.0, DOS 5.0, DR-DOS и так далее.

Поддержка Windows-приложений логическим образом вытекала из под-держки DOS. Полноэкранная Win-OS/2

сессия просто исполняла Windows 3.0 в рамках виртуальной DOS-машины. Оконные сессии Win-OS/2 требовали более нетривиального подхода в свя-зи с тем, что им было необходимо вза-имодействовать с PM/WPS-приложе-ниями. Выход из ситуации был реали-зован написанием специальной вер-сии экранного драйвера для Win-OS/2. Такой подход, хотя и обеспечил хоро-шую производительность, но имел су-щественный недостаток – это сдела-ло процесс написания драйверов ви-деокарт для OS/2 намного более слож-ным и дорогим занятием и было одной из причин малого количества драйве-ров для OS/2. Производителю прихо-дилось помимо создания видеодрай-вера для OS/2 дополнительно предо-ставлять специфическую OS/2 версию драйвера для Windows. Более логич-ным было бы написание «транслирую-щего» драйвера, преобразовывавше-го вызовы функций Win-OS/2 в вызо-вы PM – тогда от производителя требо-валось бы написание только OS/2 вер-сии видеодрайвера.

На первых порах OS/2 2.0 столкну-лась с той же проблемой, что и OS/2 1.x до нее – недостатком родных приложе-ний. Система прекрасно справлялась с запуском DOS, Windows и OS/2 1.x-приложений, но на первых порах ощу-щалась нехватка родных 32-разряд-ных программ.

OS/2 2.1, 2.11, 2.11 SMP – надежная платформа, эпоха зрелостиВыпуск версии OS/2 2.1 в мае 1993 го-да явился следствием эволюционно-го развития версии 2.0. Внешний вид не претерпел существенных измене-ний, разработчики продолжали тру-диться над «внутренностями» систе-мы. Из видимых конечному пользова-телю изменений стоит отметить смену версии Win-OS/2 с 3.0 на 3.1 и появле-ние нового компонента под названи-ем Multimedia Presentation Manager/2 (MMPM/2), добавившего в графичес-кий интерфейс пользователя раз-личные мультимедийные возможнос-ти – звуковые схемы, воспроизведе-ние мультимедийных файлов и тому подобное.

В ноябре 1993 выходит специаль-ная версия OS/2 for Windows, не со-держащая кода Win-OS/2, а использу-

ющая уже установленную на компью-тере копию Windows 3.x. Таким обра-зом снижалась цена конечного продук-та (IBM платила лицензионные отчис-ления Microsoft за использование ко-да Windows в Win-OS/2). Вместе с тем эта версия продемонстрировала ситу-ацию на рынке. Используя свое моно-польное положение, Microsoft с помо-щью манипуляций в сфере ценовой по-литики держала производителей кло-нов PC под жестким контролем, запре-щая им предустанавливать на прода-ваемые компьютеры операционные системы, отличные от DOS/Windows собственного производства. Позже та-кая политика была признана незакон-ной, но OS/2 это уже не помогло. Вы-пустив OS/2 for Windows, фирма IBM пыталась разрешить проблему без на-рушения OEM-соглашений производи-телей компьютеров с Microsoft.

Несмотря на жесткий прессинг со стороны Microsoft времена OS/2 2.1 и 2.11 были отмечены ростом количест-ва приложений, написанных специаль-но для OS/2. IBM достигла соглаше-ния с несколькими крупными произво-дителями программного обеспечения о разработке OS/2 версий их приложе-ний. В число таких компаний входили Borland, Lotus, Novell и тогда еще са-мостоятельная WordPerfect. IBM в не-которых случаях даже субсидировала отдельные разработки. В то же время Microsoft проявляла не меньшую ак-тивность, однако не заключая догово-ра или оплачивая разработку, а, напро-тив, шантажируя разработчиков ПО уг-розами закрыть доступ к бета-версиям и информации о Windows, если они бу-дут разрабатывать свои продукты под отличные от Windows платформы.

OS/2 Warp – золотая эраВ октябре 1994 выходит OS/2 Warp – самая популярная и самая распро-страненная версия OS/2. Внутренне система незначительно отличалась от OS/2 2.11 за исключением расши-ренной поддержки оборудования и ис-правления ошибок – хороший пример того, что грамотно спроектированный и продуманный продукт не нуждается в лихорадочном переписывании мно-гих элементов кода. Наиболее серьез-ные изменения касались исключитель-но улучшения простоты использования конечным пользователем (рис. 5).

Page 91: 035 Системный Администратор 10 2005

89№10, октябрь 2005

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

Новые изменения и улучшения включали в себя:! OS/2 Warp поддерживала новый

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

! Улучшенную модель драйверов, де-лавшую их разработку более прос-тым делом.

! Улучшенные мультимедиа-средс-тва, поддержку плат с TV-выходом, плат видеозахвата и прочих подоб-ных устройств.

! Значительное расширение списка драйверов оборудования.

! Возможность манипулирования процессом загрузки с помощью комбинации клавиш <Alt+F1>. На-конец можно было отказаться от «спасательного» флоппи-диска.

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

! Основательно дополненную учеб-ную программу для новичков.

! Специальное средство быстрого запуска приложений LaunchPad.

! Весьма качественную поддержку протоколов и приложений для ра-боты в Интернете (см. рис. 6). За-долго до того, как в Microsoft уяс-нили важность «информационной супермагистрали», IBM предоста-вила в распоряжение пользовате-лей полный и мощный набор инс-трументов для работы во всемир-ной сети. Сперва отдельно, а с вер-сии OS/2 Warp Connect в комплек-те с операционной системой.

OS/2 Warp и OS/2 Warp Connect бы-ла самой серьезной и удачной попыт-кой IBM победить в битве за домина-цию на десктопе или по крайней ме-ре в завоевании существенной час-ти. По некоторым оценкам, OS/2 смог-ла захватить 10% десктоп рынка – это был фантастический результат в ус-ловиях тотальной “осады” со стороны Microsoft. Успех обусловился несколь-кими факторами:! OS/2 была устойчивой и эффек-

тивной 32-разрядной операцион-ной системой, а не помесью уста-ревшего фундамента с собранны-ми на каркасе заплаток красивы-ми плитами, каковой в то время бы-ла комбинация Windows 3.x + DOS и каковой позже фактически была Windows 95.

! Стандартом де-факто стали доста-точно мощные PC, и OS/2 не требо-вала специальных дорогостоящих конфигураций оборудования.

! С технической стороны не было реальных конкурентов, предла-гавших такой широкий набор воз-можностей, как OS/2. Windows 3.x не использовала многих ресур-сов предоставляемых аппаратной частью PC, появившаяся в 1993 г. Windows NT хотя и была многоза-дачной, но, во-первых, нацелива-лась на рынок серверов, а во-вто-рых, была сырым монстром, требо-вавшим занчительно больших ре-сурсов, чем OS/2. К тому же под-держка старых приложений нахо-дилась на уровне между отсутс-твием и несовершенством. Вышед-шая в 1994 Windows NT 3.5 (иссле-дование схемы нумерации продук-

тов Microsoft когда-нибудь прине-сет ее автору звание доктора мар-кетинговых исследований) незна-чительно улучшила ситуацию. Ры-нок UNIX-подобных операционных систем для PC в то время был раз-вит весьма незначительно. OS/2 предлагала отличную совмести-мость со старыми Windows и DOS-приложениями – слоган IBM «better DOS than DOS» (DOS лучше чем DOS) был далеко не голословным, а отображал реальное состояние дел с DOS-подсистемой в OS/2.

! OS/2 была отличным коммуника-ционным инструментом, что вызва-ло ее буквально взрывное распро-странение среди участников люби-тельской сети FIDOnet, – Windows физически не могла реализовать устойчивую, надежную и продол-жительную работу без перезагру-зок, так необходимую, к примеру, для функционирования BBS-сер-вера в фоновом режиме с одно-временным комфортным исполь-зованием компьютера как дескто-па для других целей.

! OS/2 была достаточно проста в ис-пользовании, одновременно соче-тая простоту, удобство и мощность пользовательского интерфейса в Workplace Shell.

Конечно, любая вещь имеет свои достоинства и недостатки, и OS/2 бы-ла не лишена минусов:! Отличная совместимость с DOS

и Windows 3.x, сыгравшая с IBM злую шутку. Многие производите-ли ПО аргументировали отсутствие версий своих продуктов для OS/2

Рисунок 5. Развитие GUI-интерфейса без отрыва от удобстваиспользования

Рисунок 6. Первые шаги к рабочей станции с доступомв Интернет

Page 92: 035 Системный Администратор 10 2005

90

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

тем, что написанные для DOS и Windows программы прекрасно чувствуют себя под OS/2.

! Я р о с т н о е п р о т и в о д е й с т в и е Microsoft, которое нанесло на-ибольший урон OS/2. Не стесняясь никого и ничего, Microsoft применя-ла любые способы торпедирова-ния OS/2, самыми эффективными из которых был шантаж OEM-про-изводителей и независимых разра-ботчиков ПО.

! Слабая и невнятная поддержка со стороны самой IBM. Компания даже поставляла собственные ком-пьютеры без предустановленной OS/2, что, конечно, никак не спо-собствовало росту доверия поль-зователей к системе.

! Бездарная маркетинговая политика IBM. Компания фактически не зна-ла, как продавать OS/2. Историчес-ки IBM прославилась (и весьма за-служенно) своей политикой при ра-боте с корпоративными заказчика-ми (знаменитая «мертвая хватка» IBM за клиента), но массовая про-дажа программного обеспечения требовала совершенно иного под-хода.

! OS/2 была однопользовательской системой с отсутствием сколь-ко-нибудь удовлетворительных средств разграничения прав поль-зователей. Отсутствие такого ме-ханизма сослужило далеко не са-мую хорошую службу.

OS/2 Warp 4.0 – пик развития, начало закатаСентябрь 1996 года ознаменовался выходом OS/2 Warp 4.0 (чаще других версий OS/2, именуемый сво-им кодовым именем Merlin). Новые изменения и улучше-ния превратили Merlin в само-го выдающегося представите-ля операционных систем се-мейства OS/2 (см. рис. 7).! Встроенные возможнос-

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

! Графический интерфейс пользо-вателя был кардинально перера-ботан и улучшен. В дополнение к LaunchPad появился новый эле-мент WarpCenter, еще более упро-щавший работу.

! Встроенные средства для работы в Интернете также значительно из-менены и улучшены.

! В Merlin появилась встроенная вир-туальная Java-машина. С учетом того, что реализация виртуальной Java-машины от IBM была самой лучшей на рынке, OS/2 приобре-ла важную способность запускать Java-приложения, обеспечивая от-личную производительность.

Дальнейшие версии OS/2 факти-чески отличались от Merlin лишь вклю-чением в поставку различных дополни-тельных продуктов, добавлением осо-бенностей наподобие новых файловых систем и исправлением ошибок.

OS/2 for PowerPC – фатальная цепь ошибокВ рамках истории OS/2 отдельного упо-минания, несомненно, заслуживает ис-тория OS/2 for PowerPC. Помимо пря-мого отношения к OS/2 она сама по се-бе достаточно поучительна.

У OS/2 была тяжелая жизнь, как вне, так даже и внутри IBM. Широ-ко известны события времен выхода Windows 95, когда Microsoft оказыва-ла невероятное давление на IBM PC Company (производившей компью-теры IBM PC), до последнего момен-та отказываясь подписывать договор по лицензированию на предустанов-ку Windows 95 и в последний момент

запросив за лицензию намного более высокую цену по сравнению с ценами для других производителей. Помимо неприятностей для IBM PC Company в сторону подразделения, работав-шего над OS/2, бросались достаточно двусмысленные взгляды.

Трудно сказать, когда начался про-ект OS/2 for PowerPC, однако извес-тно, что в самом начале девяностых IBM решила, что было бы очень непло-хо иметь собственную десктоп-ори-ентированную операционную систе-му. Ее планировали как базирующу-юся на микроядре объектно-ориен-тированную супер ОС, работающую на RISC-платформе (неплохая кол-лекция непонятных слов). Платфор-ма должна была позволять запускать сразу несколько операционных сис-тем одновременно. Сейчас уже ник-то не скажет, какие это должны были быть операционные системы, но в их число должны были входить OS/2, Windows NT, Solaris и MacOS. Зачем ко-му-либо могло понадобиться запускать весь этот зоопарк на одной машине в одно и то же время – один из вопро-сов, на который IBM так никогда внят-но и не дала ответа, и судя, по всему, никто в IBM даже не задумавался, за-чем это нужно. Очевидно, ответ «пото-му что мы можем!» не был самым кор-ректным вариантом.

В любом случае цели, задачи и названия проекта постоянно меня-лись, в итоге завершившись проектом OS/2 for PowerPC, назвавшимся в фи-нальной стадии OS/2 Warp Connect, PowerPC Edition. IBM активно рекла-мировала продукт все время на про-тяжении между 1993 и 1995 годами.

Было написано немыслимое количество статей и даже вы-пущены бета-версии набора разработчика под названием PowerPC SDK. Среди произ-водителей ПО распространя-лись средства для переноса приложений из обычной OS/2 на новую платформу (скорее всего, сам перенос не был трудоемким, поскольку OS/2 2.0 изначально разрабатыва-лась с оглядкой на переноси-мость). С приближением вы-хода OS/2 for PowerPC рек-ламный шум постепенно на-чал утихать. И в тот момент, Рисунок 7. Лучший и, увы, последний интерфейс OS/2

Page 93: 035 Системный Администратор 10 2005

91№10, октябрь 2005

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

когда новая инкарнация OS/2 должна была вот-вот появиться на прилавках, IBM внезапно умолкла. На самом де-ле продукт был выпущен, и отдельные счастливчики даже смогли не только подержать его в руках, но и установить. Однако только клиенты, имевшие спе-циальные контракты с IBM, могли ку-пить OS/2 for PowerPC.

Причин краха OS/2 for PowerPC бы-ло множество – одни лежали вне IBM, но другие были полностью внутрен-ними:! Не было никакой ясности, кому

на самом деле была нужна OS/2 for PowerPC.

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

! Успех проекта напрямую зависел от успеха архитектуры PowerPC, кото-рый не состоялся.

Итогом стала потеря миллионов долларов, вложенных в разработку (хотя некоторые технологии OS/2 for PowerPC впоследствии были внедре-ны в OS/2 Warp 4). Можно только пред-полагать, что бы произошло, если бы все усилия и деньги были направлены на поддержку Intel версии OS/2.

ЗаключениеЖизненный путь OS/2 является од-ной из самых ярких демонстраций того, как любая хорошо задуманная и реализованная с технической сторо-ны идея может быть загублена страс-тью к большим деньгам и плохим ме-неджментом. Проект, который очень часто находился на шаг, а то и два впереди своих конкурентов и анало-гов по нововведениям и архитектур-ным решениям, поглотивший огром-ное количество денег и человечес-кого труда, был фактически задушен в ходе конкуретной борьбы за боль-шую, чем просто огромная прибыль. В наше время история OS/2, видимо, подходит к концу на самом деле (хо-тя и раньше OS/2 «хоронили» несчет-ное число раз). IBM прекратила подде-ржку последних версий OS/2 в конце 2004 года, Serenity Systems, купившая права на OS/2, не обладает достаточ-ной «пробивной» мощью для хотя бы

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

в процессе создания OS/2 был на-коплен огромный опыт разработки современных многозадачных опе-рационных систем, были опробова-ны различные методы решения са-мых разных задач.

! Именно OS/2 первой позволила широким массам программистов из мира PC испытать все преиму-щества программирования 32-раз-рядных приложений. OS/2 и сре-да для разработки приложений для нее послужили хорошим фун-даментом здания школы по обуче-нию такому программированию.

! Сражение IBM с Microsoft, завязав-шееся вокруг OS/2, впоследствии явилось одним из камней в огород судебного разбирательства, при-ведшего к признанию софтверно-го гиганта монополистом.

Самый же неожиданный и непред-сказуемый эффект возник после по-явления на рынке абсолютно необыч-ного игрока, значительно отличавше-гося от всех ранее выходивших на сце-ну High-Tech театра актеров. Этим иг-роком оказалась UNIX-подобная опе-рационная система Linux, разработку которой в 1991 году в одиночку начал финский студент Линус Торвальдс. По-ка монополии тратили время и деньги в схватке за доминирование на рынке, один человек, на полную мощность ис-пользуя философию открытых исход-ных кодов сумел сплотить вокруг раз-работки Linux множество профессио-налов со всего мира.

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

И пока IBM находилась в состоя-нии неопределенности относительно судьбы OS/2 и исключительно по инер-ции продолжала ее разработку, Linux сперва медленно, а потом со все воз-растающими оборотами начал штур-мовать рынок, причем делая это без какой-либо координации сразу в не-скольких направлениях (сервера, встроенные системы, десктоп систе-мы, среды распределенных вычисле-ний, портативные устройства и т. д.), уверенно добиваясь успеха на каждом из них. В этой ситуации IBM, учиты-вая преподнесенные OS/2 уроки и по-ложительный опыт работы с Apache, столкнулась с фактом, что совсем ря-дом есть нечто, для чего создавалась OS/2 (и даже больше). Linux не тащи-ла за собой груза лицензионных и по-литических проблем – ее можно было просто взять и использовать. При этом совершенно спокойно адаптировать для любых требуемых целей. (Приме-нение OS/2 в банкоматах выглядело просто бледным подобием той широты и размаха, которые предоставлялись гибкой ОС с эмблемой в виде доволь-ного пингвина).

И в IBM приняли решение сделать Linux одной из «стратегических ракет-носителей» бизнеса IBM. Конечно, не последнюю роль сыграло то, что по-добный шаг лишал Microsoft значи-тельных средств в виде отчислений IBM в пользу Microsoft. Насолить быв-шему другу, который оказался не сов-сем честным человеком, – вполне че-ловеческая реакция, и было бы удиви-тельно, если бы в IBM не испытывали искушения отыграться за былые про-игрыши. Как бы то ни было, сослужив не последнюю службу в деле выбора Linux базой для решений IBM, приме-няемых в бизнесе, OS/2 тем самым невольно забила последний гвоздь в крышку собственного гроба – стало окончательно ясно, что конец жизни OS/2 близок. Новое решение предо-ставляло огромную гибкость, и в этой ситуации OS/2 оказалась «не удел» со-храняя за собой существующие узкие сферы применения и готовясь к окон-чательной сдаче позиций.

P.S. Эта статья, хотя и выходит от моего имени, на самом деле является давно подаренным мне материалом от персонажа, известного на русскоязыч-ных форумах как Soul Eraser.

Page 94: 035 Системный Администратор 10 2005

92

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

Из общей массы книг, посвященных Windows 2003, это издание выделяет-ся тем, что оно написано экспертами для экспертов. Тут вы не найдете объ-яснений для новичков, авторы с ходу предлагают сложные темы. Книга со-стоит из восьми частей, каждая из ко-торых посвящена отдельной теме, чи-тать их можно в произвольном поряд-ке. Итак, основные темы книги: мето-ды безопасности (состоит из 3 глав, в которых рассказано об организации

Книга является переводом официаль-ного пособия для самостоятельной подготовки к экзамену 70-297. Каж-дая глава разбита на занятия, что поз-волит вам заранее спланировать про-цесс ознакомления. В начале повест-вования вы узнаете общие сведения об AD, DNS, TCP/IP и получите базо-вую информацию об удаленном до-ступе. Далее последовательно приво-

защиты ОС, об обычных и беспровод-ных сетях, о применении смарт-карт). Методы управления и администри-рования (управление правами поль-зователей, групповые политики, кон-соль управления, централизованное администрирование ОС, задачи об-служивания). Из части, посвященной методам проектирования и разверты-вания системы, вы узнаете о втором поколении AD, использовании новых инструментов планирования, советы и рекомендации по развертыванию структуры ОС и AD. Также рассмот-рены вопросы внедрения DNS, DHCP, WINS и контроллера домена. Мето-ды миграции и интеграции представ-лены 4 главами, в которых расска-зано о миграции на Windows Server 2003 с Windows NT 4.0/2000 и интег-рацию с системами на основе UNIX/LDAP и решениями от Novell. Достаточ-но подробно раскрыта такая актуаль-

Учебный курс Microsoft. Проектирование инфраструктуры Active Directory и сети на основе Windows Server 2003 (экзамен 70-297)Уолтер Гленн, Майкл Симпсон

Microsoft Windows Server 2003. Решения экспертовРэнд Маримото, Эндрю Аббат, Эрик Ковач, Эд Робертс

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

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

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

! Издательство:

! Год издания:

! Количество страниц:

! ISBN:

! Цена:

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

«КУДИЦ-ОБРАЗ».

«КУДИЦ-ОБРАЗ»

2005

784

5-9579-0083-4

≈ 423 руб.

! Издательства:

! Год издания:

! Количество страниц:

! ISBN:

! Цена:

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

«Питер».

«Питер»

и «Русская редакция»

2006

364

5-7502-0031-0

≈ 420 руб.

Page 95: 035 Системный Администратор 10 2005

93№10, октябрь 2005

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

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

Рассматриваемая книга – пожалуй, са-мое подробное на сегодняшний день русскоязычное руководство для поль-зователей и администраторов, посвя-щенное корпоративному дистрибутиву Linux. Книга достаточно полно освеща-ет особенности как RHEL3 на ядре 2.4, так и Fedora Core, где уже используется ядро 2.6. На более чем тысяче страниц подробно рассмотрена настройка опе-

! Издательство:

! Год издания:

! Количество страниц:

! ISBN:

! Цена:

«Вильямс»

2005

1072

5-8459-0841-8

≈ 784 руб.

Практическое руководствопо Red Hat Linux: Fedora Coreи Red Hat Enterprise Linux (2-ое издание)Марк Собелл

рационной системы в качестве клиент-ского рабочего места и в качестве сер-вера. По отдельной главе уделено та-ким сетевым службам, как OpenSSH, vsftpd, sendmail, NIS, NFS, Samba, BIND, Apache. Рассмотрены средства безо-пасности, в частности, брандмауэр iptables и SELinux, появившийся в яд-ре ветки 2.6.

Данную книгу можно порекомендо-вать в качестве основы для подготовки к экзаменам RHCE/RHCT, отмечу, что практически всю информацию, почер-пнутую из книги, с успехом можно ис-пользовать для успешного админис-трирования как RHEL, так и для дру-гих дистрибутивов, построенных на его основе, например, Scientific Linux, обзор которого вы можете прочесть в

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

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

Lotus Notes и Domino 6. Сертификация для разработчиков приложенийТим Бэнкес, Дэвид Хэттер

ходимые для сдачи 610/611/612 экзаме-нов. Книга поделена на 3 части, каж-дая из которых соответствует одному из экзаменов. Все вопросы освящены достаточно подробно и с большим ко-личеством иллюстраций. Экзамен 610 (Notes Domino 6 application development foundation) – управление базами дан-ных, архитектура приложений, эле-менты дизайна, безопасность и про-граммирование формул. Экзамен 611 (Notes Domino 6 application development intermediate) – рассказывается об уже упомянутых темах, но, делается ак-цент на тонкости, которые вам приго-дятся при сдаче экзамена 611, а так-же о документообороте и програм-мировании. В материале для подго-товки к 612 экзамену (Notes Domino 6 application development web application) описываются вопросы архитектуры приложений, элементов дизайна, уп-равления и обслуживания, програм-

мирования и безопасности. В завер-шение каждой главы предлагается ответить на ряд вопросов по прочи-танному материалу. В конце книги вы найдете примеры всех вышеописан-ных экзаменов с правильными ответа-ми. Информацию о том, как использо-вать системы тестирования PrepLogic Practice Tests и Preview Edition, вы най-дете в приложении. Книга написана известными специалистами по Lotus Notes и Domino 6. Практические сове-ты и житейский опыт, описанный авто-рами, поможет подготовиться наилуч-шим образом.

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

! Издательство:

! Год издания:

! Количество страниц:

! ISBN:

! Цена:

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

«КУДИЦ-ОБРАЗ».

«КУДИЦ-ОБРАЗ»

2006

692

5-9579-0106-7

≈ 576 руб.

Page 96: 035 Системный Администратор 10 2005

94

подписка на 2006 год

Российская Федерация! Подписной индекс: годовой – 20780, полугодовой – 81655 Каталог агентства «Роспечать»! Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог»! Альтернативные подписные агентства: Агентство «Интер-Почта» (095) 500-00-60, курьерская

доставка по Москве Агентство «Вся Пресса» (095) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74! Подписка On-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru

СНГ В странах СНГ подписка принимается в почтовых отделе-ниях по национальным каталогам или по списку номен-клатуры АРЗИ: ! Азербайджан – по объединенному каталогу российских

изданий через предприятие по распространению печа-ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21)

! Казахстан – по каталогу «Российская Пресса» через ОАО «Казпочта» и ЗАО «Евразия пресс»

! Беларусь – по каталогу изданий стран СНГ через РГО «Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10)

! Узбекистан – по каталогу «Davriy nashrlar» российские издания через агентство по распространению печати «Davriy nashrlar» (7000029, г. Ташкент, пл. Мустакиллик, 5/3, офис 33)

! Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г. Ереван, пл. Сасунци Давида, д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Са-рьяна, 22)

! Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29) и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42)

! Молдавия – по каталогу через ГП «Пошта Молдавей» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134)

по списку через ГУП «Почта Приднестровья» (МD-3300, г. Тирасполь, ул. Ленина, 17)

по прайслисту через ООО Агентство «Editil Periodice» (2012, г. Кишинев, бул. Штефан чел Маре, 134)

! Подписка для Украины: Киевский главпочтамп Подписное агентство «KSS» Телефон/факс (044)464-0220

Подписные индексы:

20780*

81655**

по каталогу агентства «Роспечать»

87836

по каталогу агентства«ПрессаРоссии»

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

Page 97: 035 Системный Администратор 10 2005

95№10, октябрь 2005

подписка на 2006 год

Стоимость подписки через редакцию:

900* руб.за 6 номеров

1800* руб.за 12 номеров

При оформлении подписки до 1 января 2006 года – скидка 10%

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

Для юридических лиц:! Отправьте заявку по факсу (095) 928-82-53 или по e-mail:

[email protected].! Укажите наименование и банковские реквизиты своей

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

Для физических лиц:! Заполните нижеприведенную квитанцию, оплатите в лю-

бом банке и пришлите в редакцию копию с отметками банка.

! После поступления платежа редакция начнет отправ-лять вам номера.

* Включая НДС и почтовую доставку

№1(26) январь 2005

подписной индекс 81655

www.samag.ru

Обзор дистр

ибутива SuSE P

rofess

ional 9.2

Прокси-сервер oops: первы

е впечатления

Как защищают программное о

беспечение

Путешестви

е из Perl в

Excel

Нити в Perl

HOTSPOT – это просто!

Программное управление

файловой системой

с помощью VBScript

Восстановление NTFS

Организация общего доступ

а

в Интернет и

защиты от в

торжений

на основе Kerio W

inRoute Firewall 6

Обзор дистр

ибутива SuSE P

rofess

ional 9.2

Прокси-сервер oops: первы

е впечатления

Как защищают программное о

беспечение

Путешестви

е из Perl в

Excel

Нити в Perl

HOTSPOT – это просто!

Программное управление

файловой системой

с помощью VBScript

Восстановление NTFS

Организация общего доступ

а

в Интернет и

защиты от в

торжений

на основе Kerio W

inRoute Firewall 6

№2(27) февраль 2005

подписной индекс 81655

www.samag.ru

Системная интеграция –

общие концепции

Автоматическая установка

операционной системы

и программного обеспечения

SOCKS – универсальный прокси-сервер

Строим виртуальную

сеть с TINC

Создание релиза FreeBSD

IP-роуминг: вводный курс

Почтовый сервер на базе Postfix

Режем спам. Дополнительные методы

Техника оптимизации под Linux

Считаем трафик на FreeBSD:

ng_ipacct + Perl+ MySQL

Системная интеграция –

общие концепции

Автоматическая установка

операционной системы

и программного обеспечения

SOCKS – универсальный прокси-сервер

Строим виртуальную

сеть с TINC

Создание релиза FreeBSD

IP-роуминг: вводный курс

Почтовый сервер на базе Postfix

Режем спам. Дополнительные методы

Техника оптимизации под Linux

Считаем трафик на FreeBSD:

ng_ipacct + Perl+ MySQL

№5(30) май 2005

подписной индекс 81655

www.samag.ruПочему MS SQL медленно работает?

Ищем причины

Строим защищенную беспроводную сеть:

WPA-Enterprise, 802.1x EAP-TLS

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

Как восстановить

удаленные файлы под BSD

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

Устанавливаем Symantec Antivirus 9.0

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

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

полями пользователей в AD

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

с помощью OSSIM

Интервью с Ларри Уоллом –

создателем языка Perl

№4(29) апрель 2005

подписной индекс 81655

www.samag.ruПочтовая система

Alt-N MDaemonБазовая настройка

маршрутизатора Cisco

Windows Server Update Services

Apache как прокси-сервер

Виртуальная машина SVISTA

Архивируем данные

с помощью Bacula

Защита коммуникаций

Windows Mobile

Система создания

документации POD

Оптимизация циклов

под Linux

Почтовая система

Alt-N MDaemonБазовая настройка

маршрутизатора Cisco

Windows Server Update Services

Apache как прокси-сервер

Виртуальная машина SVISTA

Архивируем данные

с помощью Bacula

Защита коммуникаций

Windows Mobile

Система создания

документации POD

Оптимизация циклов

под Linux

№3(28) март 2005

подписной индекс 81655

www.samag.ru

Linux Xinerama: один монитор хорошо,

а много лучше

Knoppix – русская редакция

Восстановление удаленных файлов

под Linux

FreeBSD в домене Microsoft Windows

Практикум Python:

отправка файлов по электронной почте

Шифрование данных в Linux –

новый взгляд на аппаратные ключи

Автоматизация процесса

подключения баз 1С

Эмуляция при помощи QEMU

Программирование на shell

в экстремальных условиях

Linux Xinerama: один монитор хорошо,

а много лучше

Knoppix – русская редакция

Восстановление удаленных файлов

под Linux

FreeBSD в домене Microsoft Windows

Практикум Python:

отправка файлов по электронной почте

Шифрование данных в Linux –

новый взгляд на аппаратные ключи

Автоматизация процесса

подключения баз 1С

Эмуляция при помощи QEMU

Программирование на shell

в экстремальных условиях

№8(33) август 2005

подписной индекс 81655

www.samag.ru

Сможет ли PC-BSD

Сможет ли PC-BSD

конкурировать

конкурировать

с Linux-дистрибутивами?

с Linux-дистрибутивами?

Оцените WrSpy!

Оцените WrSpy!

Считаем трафик почтовых

Считаем трафик почтовых

и прокси-серверов

и прокси-серверов

Настраиваем DSPAM –

Настраиваем DSPAM –

ваш личный спам-фильтр

ваш личный спам-фильтр

Проводим аудит системы

Проводим аудит системы

с помощью SNARE

с помощью SNARE

Упрощаем

Упрощаем управление

управление

Asterisk

Asterisk-сервером

-сервером

OpenMosix – превратим сеть

OpenMosix – превратим сеть

в единый суперкомпьютер!

в единый суперкомпьютер!

CD, не подвластный

CD, не подвластный

копированию

копированию

Админские сказки

Админские сказки

16 bit edition

16 bit edition

№6(31) ИЮНЬ 2005

подписной индекс 81655

www.samag.ru

Postfix: диагностируем

и устраняем неисправности

Asterisk и Linux:

миссия IP-телефония

Насколько неуязвима

ваша беспроводная сеть?

Используем одноразовые пароли

для удаленного входа на сервер

Как защититься от fingerprinting?

Solaris 10 в качестве десктопа?

Пробуем!

Ускоряем MS SQL Server

Модифицируем BIOS

Ищем дополнительные

источники дохода

№7(32) ИЮЛЬ 2005подписной индекс 81655

www.samag.ru

Настраиваем Kerberos поверх LDAP

Настраиваем Kerberos поверх LDAP

Open-Xchange – свободу группам!

Open-Xchange – свободу группам!

Есть ли жизнь

Есть ли жизньбез антивируса?

без антивируса?Запускаем spamd

Запускаем spamdна FreeBSDна FreeBSDПроверяем

ПроверяемHTTP-трафик на лету

HTTP-трафик на летуНастраиваем WSUS

Настраиваем WSUS Устанавливаем связку

Устанавливаем связку

Postfix + Exchange

Postfix + ExchangeУдаленно управляем

Удаленно управляем

BIOS SetupBIOS Setup Автоматизируем подключение

Автоматизируем подключение

баз 1С новой версии 8.0

баз 1С новой версии 8.0

Page 98: 035 Системный Администратор 10 2005

96

СИСТЕМНЫЙ АДМИНИСТРАТОР

№10(35), Октябрь, 2005 год

РЕДАКЦИЯ

Исполнительный директор

Владимир ПоложевецОтветственный секретарь

Наталья Хвостова[email protected]Технический редактор

Владимир ЛукинРедакторы

Андрей БешковВалентин СиницынАлексей БарабановКирилл Тихонов

РЕКЛАМНАЯ СЛУЖБА

тел./факс: (095) 928-8253Дарья Хохловаreс[email protected]

Верстка и оформление

[email protected]Дизайн обложки

Николай Петрочук

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

обращайтесь по телефону:(095) 928-8253 (доб. 120)

107045, г. Москва,Ананьевский переулок, дом 4/2 стр. 1тел./факс: (095) 928-8253Сайт журнала: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТА

Петр ПоложевецУЧРЕДИТЕЛИ

Владимир ПоложевецАлександр МихалевИЗДАТЕЛЬ

ЗАО «Издательский дом«Учительская газета»

Отпечатано типографией

ГП «Московская Типография №13»Тираж 9000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати, телерадиовещания и средств массо-вых коммуникаций (свидетельствоПИ № 77-12542 от 24 апреля 2002 г.)

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

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Уважаемые читатели!

Спешите оформить подпискуна первое полугодие 2006 года!

Приобрести новые и старые номера журналавы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

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

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

Расширяем права с помощью ACL в LinuxОдноуровневой модели прав досту-па пользователей, которая применя-ется в Linux и во всех UNIX-подобных операционных системах, на сегодняш-ний день явно недостаточно. Админис-тратор должен очень постараться, что-бы правильно распределить права до-ступа к объекту. Списки контроля до-ступа позволяют более гибко решить эту задачу.

Редактор для создания скриптов: Primal Script 4.0Сегодня существует множество ре-дакторов, позволяющих создавать

скрипты. Как правило, они поддержи-вают один-два языка программирова-ния. Редактор PrimalScript 4.0 имеет встроенную поддержку более чем 30 языков программирования, начиная от HTML, XML и VBScript, и заканчи-вая узкоспециализированными, таки-ми как KIXTart. О том, как пользовать-ся этим редактором, читайте в офи-циальной документации. Мы же пого-ворим о недокументированных воз-можностях.

FreeBSD tips: возможности ftpdПротокол FTP предназначен для пере-дачи по сети файлов. Существует мно-жество очень функциональных сер-веров ftp, однако для использования в «личных» целях, как правило, впол-не достаточно возможностей входящей в состав FreeBSD программы ftpd.

Автоматическая установка драйверов в MS WindowsВ статье рассмотрены вопросы загруз-ки драйверов периферийных устройств и иного оборудования в процессе ав-томатической установки и настройки MS Windows XP. Статья будет полезна системным администраторам, обслу-живающим информационные системы в режиме аутсорсинга. Среда разработ-ки: сервер GNU Linux , рабочие станции MS Windows XP.