Вы находитесь на странице: 1из 98

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

СЬ

ЛИ
ЛИ
ТЯ Е

Ж ПИ
ЗА ДНИ
НУ

РА КУ
ЛЫ ГО

ТИ РАС
КУ ВО

О
НИ НО

ТР
№10(35) октябрь 2005

С
БЫ
подписной индекс 81655
КА

www.samag.ru

Всё, что вы хотели узнать

И
ЬГ
о тонкостях настройки

ЬД О
РА СКА
ТЕ
К

ИС НН
ЕН
УС

БО
НА ТПУ

ИЛ ДА
ТП

Spamassassin

НЧ ЖИ
ВО

РА Е О

КО НЕО
АВ СЛ
Л

Л
ХА

ПО
УЕ

ЗА
Управляем серверами
в реальном времени
Так видит журнал читатель, оформивший подписку:
с помощью WSH-сценариев
ReactOS – свободная
альтернатива Windows
Как управлять
индексированием сайта
В чем преимущества
HTTP digest-авторизации
Как посчитать трафик
в Linux
Организуем прием
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! спутникового вещания
№10(35) октябрь 2005

Роспечать – 81655 Настраиваем автоответчик


Пресса России – 87836 на базе Linux
Интер-почта – тел. (095) 500-00-60
оглавление
3 ТЕНДЕНЦИИ WEB
РЕПОРТАЖ 40 Как управлять индексированием
своего сайта
4 Конференция CiscoExpo’2005 Эффективное использование robots.txt.
Николай Никульшин Сергей Яремчук
nik.nikolson@gmail.com grinder@ua.fm

ИНТЕРВЬЮ 44 В чем сильные и слабые стороны


HTTP digest-авторизации
6 Agnitum – путь к признанию Принципы работы digest-авторизации: правда и вы-
Маленькая программа-антишпион положила начало мысел. Алексей Мичурин
известному персональному брандмауэру – Agnitum alexey@office-a.mtu-net.ru
Outpost. Роман Марков
stepan-razin@newmail.ru ПРОГРАММИРОВАНИЕ
АДМИНИСТРИРОВАНИЕ 52 Антиотладка: старые приемы
на новый лад
10 Профессия – убивать спам Антиотладочные приемы вермен MS-DOS и debug.com
Все, что вы хотели узнать о тонкостях настройки возвращаются, чтобы снова работать в Windows 2000/
Spamassassin. Сергей Супрунов XP/2003. Крис Касперски
amsand@rambler.ru kk@sendmail.ru

18 Как посчитать трафик в Linux 60 Как программы на Си взаимодействуют


Решаем задачу с помощью ipcad. с сервером БД PostgreSQL
Александр Кузнецов Добьемся от приложения максимального быстродейс-
fly4life@nixp.ru твия. Владимир Мешков
ubob@mail.ru
22 Scientific Linux – выбираем решение
корпоративного уровня по цене носителя 66 Управляем серверами в реальном
Обзор русифицированной версии дистрибутива. времени с помощью WSH-сценариев
Андрей Маркелов Пишем сценарий для автоматизированного управле-
andrew@markelov.net ния серверами Windows при работе с ИБП.
Андрей Бирюков
24 ReactOS – свободная альтернатива mex_inet@rambler.ru
Windows. Слухи и реальность
Делимся впечатлениями от знакомства с операцион- HARDWARE
ной системой ReactOS.
Андрей Бешков 70 Настраиваем автоответчик на базе Linux
tigrisha@sysadmins.ru Реализация решения на основе программы vgetty.
Павел Закляков
28 Создаем загружаемый Flash-диск amdk7@mail.ru
с FreeBSD и DOS. Часть II
Созданный диск – инструмент, которым нужно умело 79 Цифровое небо, или
воспользоваться. Рашид Ачилов Организуем прием спутникового вещания
shelton@granch.ru Как настроиться на спутниковый канал.
Антон Борисов
БЕЗОПАСНОСТЬ anton.borisov@gmail.com

32 Блокируем внешние устройства РЕТРОСПЕКТИВА


с помощью GFI LANguard P.S.C.
Контролируем использование сменных носителей в се- 82 История взлёта и падения OS/2 – одной
ти вашей компании. Сергей Яремчук из самых интересных операционных систем
grinder@ua.fm Алексей Коршунов
akeeper@akeeper.ru
34 Linux/BSD как бастион на пути вирусов
Схема построения защиты сети. 92 КНИЖНАЯ ПОЛКА
Крис Касперски
kk@sendmail.ru 51, 59 BUGTRAQ

Летим скорее
Лучше каждому Информация
Оформили на почту!
получать отдельный о подписке
подписку! экземпляр журнала на 94 стр.
Принес номер
Мужики, Почему я до сих пор на работу, И у меня А можно ещё Как же я без
Я забыл
где журнал этого не сделал?! «увели» почитать такая же беда успеть? любимого журнала?
подписаться!
взяли?

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


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

Спешите читать электронное приложение


к нашему журналу – «Open Source»
Редакция жур- ! теоретические сведения, лежащие нимается редакция журнала «Систем-
нала «Систем- в основе множества ПО с открытым ный администратор». В качестве авто-
ный админист- кодом и образовавшегося вокруг ров выступают представители русско-
ратор» спешит него сообщества; говорящего сообщества Open Source.
обрадовать всех ! практическое применение уже су- К публикации своих материалов при-
почитателей ществующих решений как по отде- глашаем всех желающих, обладающих
программно- льности, так и в связках, со взаим- определенными знаниями и навыками
го обеспечения ной интеграцией результатов работ в рассматриваемой области и умени-
с открытым ко- различных проектов для создания ем в доступной форме подавать мыс-
дом – в ноябре комплексных многофункциональ- ли читателям. Уточнить информацию
планируется выпуск первого номера ных систем; об авторстве вы можете по электрон-
электронного издания «Open Source». ! обзоры новых и готовящихся к вы- ному адресу osa@samag.ru.
«Open Source» – новое, создан- ходу продуктов Open Source; Наиболее приоритетными тема-
ное в рамках приложения к журналу ! анализ минувших и происходящих ми материалов на данный момент яв-
«Системный администратор» элект- событий, затрагивающих мир сво- ляются обзоры новых (или по другим
ронное издание, распространяемое бодного ПО, а также предвари- причинам малоизвестных, но интерес-
бесплатно в сети Интернет и освеща- тельное исследование ожидаемых ных, перспективных и/или уникальных)
ющее все вопросы, связанные со сво- в ближайшем и отдаленном буду- проектов программного обеспечения с
бодным софтом для различных опера- щем явлений, способных повли- открытым кодом, а также общие све-
ционных систем. ять на дальнейшее развитие FOSS, дения о Free Software, идеологии дви-
Технологии с открытым кодом дав- а значит, и информационных техно- жения за Open Source и примеры ис-
но перестали быть развлечением ком- логий вообще. торий успеха как внутри самого сооб-
пьютерных фанатов и какой-то отда- щества, так и в результате внедрения
ленной от реальности идеологией. С р е д и гл а в н ы х з а д ач « O p e n его разработок в давно оформившие-
Они уже не просто способны высту- Source» – организация полноценного ся структуры.
пать в качестве альтернативы при- журнала, объединяющего в себе раз- Выпуски приложения распростра-
вычным решениям, но и зачастую об- нообразную информацию, посвящен- няются бесплатно в электронном ви-
ладают уникальной функциональнос- ную свободному программному обес- де (в формате файлов PDF). Теку-
тью и не находят своего применения печению, в удобном для просмотра ви- щая периодичность издания – один
лишь в связи с тем, что о предоставля- де: электронном, доступном бесплат- раз в 3 недели. Для получения досту-
емых ими возможностях многие в не- но широким массам вне зависимос- па к файлам с «Open Source» необхо-
достаточной мере осведомлены. При- ти от их географического положения. димо пройти регистрацию на сайте
ложению «Open Source» предстоит за- Кроме того, благодаря возможности http://osa.samag.ru. После регистрации
полнить эту информационную брешь, быстрого распространения выпусков каждый пользователь может скачать
раздвинув рамки традиционных тех- это позволяет добиться большей ак- через браузер или получить на e-mail
нологий и открыв перед своими чита- туальности подаваемой информации. все вышедшие выпуски приложения,
телями инновационное и перспектив- Перед «Open Source» также ставит- а также подписаться на анонсы новых
ное будущее, развивающееся уже се- ся задача продвижения ПО с открытым или на автоматическое получение на
годня – благодаря усилиям тысяч не- кодом в общем потоке информацион- e-mail файлов с ними.
зависимых разработчиков со всего ми- ных технологий. Как следствие, ожида- Электронное приложение «Open
ра и присоединяющихся к ним гигантов ется создание обширного сообщества Source» всегда открыто для сотруд-
современной ИТ-индустрии. интересующихся вопросами техноло- ничества с вами, нашими читателя-
Ключевая цель «Open Source» – гий, рассматриваемых в приложении, ми, новыми авторами и вашими конс-
стать профессиональным специали- их применения в настоящем и разви- труктивными предложениями по улуч-
зированным компьютерным издани- тия в будущем. В новой среде каждый шению издания, конструктивной кри-
ем, производящим все стадии отбора получает возможность перенимать тикой и любыми отзывами, с компа-
и обработки попадающих в него ма- опыт других и делиться собственными ниями, занимающимися разработкой
териалов редакторами и корректора- идеями, благодаря чему становится по- и продвижением программного обес-
ми уже сформировавшегося печатно- лезным участником глобального дви- печения с открытым кодом.
го журнала. Тематика приложения ох- жения за Free Software и самосовер-
ватит Free and Open Source Software шенствуется в близкой ему области. Главный редактор приложения
во всем многообразии, что подразу- Поддержкой «Open Source» и ра- Дмитрий Шурупов
мевает собой: ботой над выпусками приложения за-

2
тенденции
OpenOffice.org представил твует POSIX, содержит более 300 UNIX-программ, функци-
финальную версию 2.0 онирует на платформах 386, 486, Pentium и т. п., а распро-
Успешно отметив 5-летний юбилей 13 октября, проект сво- страняется по BSD-подобной лицензии.
бодного офиса через неделю выпустил и финальный релиз
своего продукта версии 2.0. OpenOffice.org отныне по умол- Linux обретает трехмерный десктоп
чанию работает с основанным на открытых стандартах фор- от Sun
матом OASIS OpenDocument. В релизе представлен фильтр Наглядная демонстрация трехмерных возможностей рабо-
для WordPerfect, улучшенная оболочка для работы с базами чего стола в Linux стала возможной благодаря первому ста-
данных и функция подсчета слов, усовершенствованный эк- бильному релизу нового проекта – LG3D LiveCD 2.3. Систе-
спорт в PDF. Кроме того, появился новый многопанельный ма базируется на SLAX (Slackware на LiveCD), и в нее ин-
вид, CustomShapes, совместимые с AutoShapes от Microsoft, тегрирована Java-технология Project Looking Glass компа-
анонсирована возможность создания форм на базе стан- нии Sun Microsystems, которая и предоставляет пользова-
дарта W3C XForms и задания таблиц внутри уже сущест- телю 3D-вид окон и визуализации десктопа и приложений.
вующих (так называемые «вложенные таблицы»), подде- В первую стабильную версию LG3D также вошли драйверы
ржка цифровых подписей. Изменения в DataPilot (аналог для видеокарт NVIDIA и некоторые дополнительные прило-
MS Excel PivotTable) превратили OpenOffice.org Calc в мощ- жения (веб-браузер Firefox, IM-клиент Gaim и др.).
ный инструмент анализа данных.
WINE перешел в статус бета
Взломаны сайты OpenSUSE 12 долгих лет понадобилось разработчикам для того, что-
и Spread Firefox бы добиться качественно нового уровня стабильности в ра-
В самом начале месяца атаке иранских хакеров из группы боте WINE. 25 октября состоялся выход WINE версии 0.9,
IHS подвергся ресурс openSUSE, а уже через несколько что ознаменовало новую веху в развитии свободной реали-
дней взлому был в очередной раз подвержен сайт Spread зации Windows API для UNIX/Linux-систем – официальный
Firefox. В первом случае Open Source-инициатива Novell переход в статус «бета». Несмотря на это, авторы не уста-
имеет отдаленное отношение к произошедшему: свой ют предупреждать, что и сейчас в их продукте могут обна-
взлом авторы посвятили протесту против «Договора о не- ружиться проблемы. Однако по крайней мере «ожидается,
распространении ядерного оружия», принятого иранским что большинство приложений хотя бы успешно пройдут ус-
правительством. А вот Spread Firefox, занимающийся про- тановку и сделают что-нибудь полезное».
движением свободного браузера от Mozilla, вновь постра-
дал из-за уязвимости, найденной в используемом на сер- Составил Дмитрий Шурупов
вере программном обеспечении. На этот раз виновницей по материалам www.nixp.ru
оказалась 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 соответс-

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


репортаж

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

К
онференция проводилась в два конференции продолжилась на 4 тех- трудников от 20 до 250, основой ре-
этапа – 14 октября в учебных нических потоках, которые включали шения является коммутатор Cisco
центрах Cisco System состоя- в себя сессии с углубленным изучени- Catalyst Express 500 и IP-решение
лись семинары, посвященные актуаль- ем определенной темы, так называе- Communication Express Solution, пред-
ным темам современного мира сете- мые «power session». Как раз на «power ставляющее собой программное обес-
вых технологий; и основная часть про- session» Cisco и её партнеры предста- печение Cisco CallManager Express +
шла 17-19 октября в гостинице Radisson вили развернутые доклады по продук- Cisco Unity Express, установленное
Славянская. там, новым технологиям, актуальным на маршрутизатор Cisco Integrated
Первые два дня основной части рыночным тенденциям, рассказали Router (ISR).
конференции начались с пленарных о наиболее интересных проектах, ре- Новые коммутаторы серии Catalyst
докладов. Первое пленарное заседа- ализованных за прошедший год. Express 500 специально предназна-
ние было посвящено построению ин- Для слушателей технических пото- чены для предприятий, желающих
теллектуальных информационных се- ков 17-18 октября по вечерам были ор- эксплуатировать объединенные се-
тей (IIN). С докладом выступил Алан ганизованы открытые дискуссии на та- ти. Это семейство комму таторов
Фиокко (Alain Fiocco), директор подраз- кие темы, как сети хранения данных, Layer 2-manager Fast Ethernet и Gigabit
деления маркетинга продуктов и ре- решения по безопасности и передачи Ethernet, работающих на скорости сре-
шений Cisco Systems. Второе пленар- голоса, оптические и городские сети, ды передачи, обеспечивают безопас-
ное заседание, проходившее 18 октяб- сервисные услуги и программы Cisco. ную сетевую платформу, оптимизи-
ря, включало в себя выступления ру- В ходе конференции были пред- рованную для передачи данных, бес-
ководителя IBM Global Services в Рос- ставлены новые продукты, отрасле- проводного трафика и голоса. Новые
сии Сергея Яксевича и президента по вые решения и новейшие технологии коммутаторы легко конфигурируются
развивающимся рынкам Cisco Systems для предприятий любого уровня. с помощью приложения Cisco Network
Пола Монтфорда (Paul Mountford) («Ос- На текущий момент в России, Assistant 3.0, позволяющего управлять
новные тенденции и перспективы по данным компании IDC, насчиты- устройствами через веб-браузер. Уст-
развития информационных техноло- вается порядка 1 000 000 предпри- ройства уже имеют предварительные
гий» и «The Transformation of Emerging ятий, относящихся к сегменту пред- настройки и после включения в сеть
Markets» соответственно). приятий малого и среднего бизнеса сразу готовы к работе. Все это поз-
После пленарных докладов работа (SMB). Естественно, такой сегмент воляет быстро и легко конфигуриро-
рынка нельзя оставлять вать сети и использовать такие техно-
без пристального вни- логии, как беспроводные локальные
мания. Как раз для пред- сети и IP-связь.
приятий SMB, Cisco пред- Для компаний со штатом от 250
ставило свое сетевое ре- до 1500 человек был представлен мо-
шение – Cisco Busines дельный ряд маршрутизаторов семейс-
Communacations Solution, тва Cisco Catalyst 2960 Series в пяти ап-
призванное уменьшить паратных конфигурациях, пришедших
расходы и улучшить про- на смену коммутаторам Catalyst 2950
изводственные показате- G/T и 2970. Данные коммутаторы под-
ли. В рамках этого реше- держивают IPv6, Enhanced QoS, Power
ния было анонсировано over Ethernet (передача электропита-
новое семейство коммута- ния через медные сетевые провода),
торов SMB-класса Catalyst аутентификацию 802.1х и контроль до-
Express 500 Series, а так- ступа NAC. Благодаря мастеру быст-
же дополнение к портфе- рой установки и встроенной системе
лю продуктов IP-связи, управления значительно упростилась
включающее в себя но- задача конфигурирования устройства
вые приложения IPC и се- и его ввод в эксплуатацию.
мейство IP-телефонов Также много внимания на выставке
с поддержкой XML. было уделено защите от вирусов и спа-
Та к , д л я п р е д п р и - ма. Было представлено решение Cisco
ятий с количеством со- Clean Access, сканирующее хосты

4
репортаж
на наличие актуальных версий анти- можно устанавливать процессорные организации мероприятия можно ожи-
вирусного ПО, различных обновлений (серверы-лезвия) и инфраструктур- дать от лидера рынка сетевой безопас-
ПО или другим параметрам и отправ- ные модули с возможностью горячей ности? Cisco сейчас занимает четверть
ляющее в сетевой карантин те хосты, замены. Процессорный модуль пред- рынка информационной безопасности
которые не прошли проверку. В каран- ставляет собой независимый сервер, в России и сдавать свои позиции не на-
тине такие хосты находятся до того мо- состоящий из одного или нескольких мерена. Продукты пользуются стабиль-
мента, как состояние ПО не будет при- процессоров, оперативной памяти, ным спросом. Решения активно прода-
ведено к «общему знаменателю»: об- дисковой подсистемы, сетевых конт- ются по лизингу (до 20% всех продаж –
новление антивирусного ПО, установ- роллеров и подсистемы ввода-выво- лизинг). В целом, можно сказать, что
ка необходимых обновлений или пара- да с возможностью установки допол- данная конференция была нацелена на
метров безопасности. нительных адаптеров, на котором ра- популяризацию решений Cisco Systems
В рамках конференции компания ботают операционная система и при- в сегменте предприятий малого и сред-
Cisco совместно с компанией «S-Terra» ложения. Серверный модуль подклю- него бизнеса. Пока рано говорить о ка-
представили первое сертифицирован- чается к двойной объединительной ких-либо конкретных результатах кон-
ное в России VPN-решение. Для этого панели внутри шасси для совместно- ференции CiscoExpo 2005. Но уже сей-
потребовалось включить в продукты го использования компонентов инф- час можно с уверенностью сказать,
Cisco российские алгоритмы шифро- раструктуры (инфраструктурных мо- что популярность данного мероприя-
вания и получить сертификаты. дулей), таких как блоки питания, вен- тия растет из года в год. На CiscoExpo
Также на конференции присутс- тиляторы охлаждения, коммутаторы 2005 из-за огромного количества за-
твовали такие компании, как APC, локальной сети и системы хранения, регистрировавшихся посетителей при-
IBM, Equant, Step Logic, EMC, CTI, сеть системного управления и другое. шлось раньше запланированного за-
I-Teco, Inline, Red Center, Technoserv Очень интересное решение. вершить регистрацию, а саму конфе-
IS, Diamond Communications Inc и мно- Большинство участвовавших в хо- ренцию «растянуть» на несколько дней.
гие другие. Компания IBM привезла де конференции организаций пред- 90% всех посетителей – представите-
на выставку свое серверное реше- ставляли свои решения по обеспе- ли IT-индустрии (50% из этого коли-
ние E-server BladeCenter, включаю- чению информационной безопаснос- чества – системные администраторы,
щий в себя серверы различных аппа- ти предприятий, на основе решений 25% – IT-менеджеры, 20% – руководи-
ратных платформ, совместно исполь- от Cisco Systems. тели IT-подразделений).
зующие единую интегрированную ин- Прошедшая конференция была
фраструктуру IT. Данная платформа хорошо продумана и организована Николай Никульшин,
представляет собой шасси, в которое на очень высоком уровне. А какой иной фото автора

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


интервью

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

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

Когда и кем была основана компа- зоваться большим успехом, в связи большого скандала, который подняла
ния, с чего начинали? с чем в начале 1999 года было приня- на эту тему пресса, утилиту скачали
Михаил Пеньковский, коммерчес- то решение о выпуске коммерческой тысячи пользователей, благодаря че-
кий директор: начало развития ком- версии программы Jammer с дополни- му начался необычайный рост ее по-
пании Agnitum было положено на сты- тельными возможностями и улучшен- пулярности. Как логическое продолже-
ке 1998-99 годов двумя студентами ным функционалом. ние для поддержания интереса пользо-
Балтийского Государственного Техни- вателей был выпущен новый продукт –
ческого Университета. Проводя поис- Почему о ваших продуктах узнали Tauscan – утилита для поиска и унич-
ки необходимой для обучения инфор- пользователи во всем мире? тожения троянских программ, по су-
мации в сети Интернет, они пали жер- М.П.: Глобальный толчок роста попу- ти своей – антивирус, который специ-
твами так называемых «троянских ко- лярности Jammer придала статья в ази- ализировался на обнаружении имен-
ней». В результате у них были украде- атской версии «Wall Street Journal», но этого класса вредоносного кода.
ны пароли доступа в Интернет, компью- о том, что некая правительственная Для того времени это была довольно
теры начали проявлять непонятную ак- компания пыталась при помощи троя- серьезная разработка, ради созда-
тивность при подключении к сети, что, нов следить за компьютерной деятель- ния которой штат сотрудников ком-
разумеется, не поднимало настроения ностью своих сотрудников. Это выяс- пании был увеличен с 2 до 4 человек.
владельцам. Изучив принципы работы нилось после того, как один из них Увеличение штата произошло в связи
и распространения таких программ, скачал и установил на своем компью- с необходимостью привлечения отде-
они предприняли первую попытку про- тере упомянутую утилиту Jammer, ко- льного специалиста по троянским ви-
тивостояния этим вирусам. В результа- торая и позволила увидеть направле- русам, а также программиста, так как
те появилась первая утилита, получив- ние активности этого трояна. После пришла ясность, что собственных на-
шая название Jammer, которая вы- выков в программировании не хва-
полняла задачу предотвращения Короткая справка тит для реализации более серьез-
распространения вредоносного ко- Компания Agnitum была основана в конце 90-х го- ных решений.
да на компьютерах пользователей. дов – время, когда в России начался стремитель- Tauscan также был оценен IT-
Она блокировала попытки вирусов ный рост использования интернет-технологий. общественностью, журнал PC-
типа «троянский конь» активизиро- Быстрому росту популярности компании способс- Magazine присвоил ему лучший
вать какую-либо деятельность, оп- твовал резонанс, который вызвал в зарубежной рейтинг среди продуктов подобно-
ределяла сетевую активность по оп- прессе первый продукт ее основателей – утили- го класса, что снова помогло за-
ределенным портам и блокировала та для обнаружения хакерских атак Jammer. При- явить о себе и получить приток но-
ее. Сначала Jammer был бесплатен, знание мировой IT-общественностью основного вых клиентов. Первое время ути-
его выложили на собственноруч- продукта – персонального брандмауэра Outpost литы распространялись только че-
но сделанный сайт для свободно- Firewall Pro позволило компании Agnitum занять рез Интернет, так как стартово-
го скачивания. К большому удивле- лидирующие позиции на рынке персональных го капитала для развертки произ-
нию авторов программа стала поль- брандмауэров. водства коробочных версий не бы-

6
интервью
ло. Тогда же пришло понимание того, необходимостью постоянного лично-
что рынок брандмауэров (Firewall) еще го контакта разработчиков для до-
не развит и конкуренции на нем прак- стижения более высоких показателей
тически нет, хотя с повсеместным раз- производительности труда. Сегодня
витием инфраструктуры подключе- российский офис компании располо-
ния к Интернету продукты такого типа жен в здании первого завода компа-
должны становиться все более востре- нии Ericsson, построенном еще до ре-
бованными. На тот момент наиболее волюции в 1849 году и отреставриро-
известными представителями данно- ванном совсем недавно. (Кстати, внут-
го рынка являлись AtGuard – локаль- ри здания явно продолжаются тради-
ный Firewall, разработанный фирмой ции Agnitum по обеспечению безопас-
WRQ Inc и ConSeal PC Firewall от ком- ности – каждая дверь для перехода
пании Signal 9 Solutions. Такое малое между корпусами открывается элект-
количество популярных в тот момент ронным ключом – Прим. автора).
персональных брандмауэров, а также
их ориентация на IT-профессионалов Что означают названия – самой ком-
подтолкнуло компанию Agnitum к при- пании – Agnitum и главного програм- Михаил Пеньковский: «Outpost -
нятию серьезного решения о разра- много продукта – Outpost? это укрепление государственных границ
на дальних подступах для предотвращения
ботке нового продукта, не уступающе- М.П.: Если мне не изменяет память, Аг- и сдерживания внезапных нападений
го по надежности основным конкурен- нитум на латыни значит «запоминаю- врага»
там и при этом обладающего дружест- щийся». Мы хотели придумать имен- Примечание автора: К сожалению,
венным пользовательским интерфей- но запоминающееся название и в ито- в новой версии продукта не появится
сом, – первой версии Agnitum Outpost ге решили не ходить вокруг да около, столь ценных и удобных для системно-
Firewall. Создание нового продукта а взять «прямой» перевод. Хотя, я могу го администратора функций, как:
потребовало серьезных финансовых и ошибаться – очень давно это было. ! Централизованное хранение и про-
вложений. В общем то, это означало, Outpost – это укрепление государс- смотр журналов
что на карту была поставлена судь- твенных границ на дальних подступах ! Удаленное развертывание при по-
ба всей компании. В итоге в 2001 году для предотвращения и сдерживания мощи RPC. Удаленная установка
вышел первый релиз Agnitum Outpost внезапных нападений врага. Очень это через Group Policy не всегда явля-
Firewall. Удачным маркетинговым хо- слово нам понравилось, когда выбира- ется удобным и наглядным реше-
дом оказался выпуск двух версий – ли имя бренда для фаерволла. нием.
бесплатной и платной, так как бес-
платная версия не сильно отличалась Расскажите подробнее о корпора- Также по просьбам потенциаль-
от платной. Это позволило использо- тивной версии продукта – Agnitum ных клиентов внесены изменения
вать хороший маркетинг «из уст в ус- Office Firewall – как развивается, в лицензирование офисной версии
та» (когда отзывы о достоинствах про- что нового в проекте? Agnitum Outpost: минимальное коли-
дукта передавались специалистами Алексей Белкин, постановщик за- чество клиентских лицензий сниже-
при обмене опытом и дружеских бе- дач: В декабре 2005 года планирует- но до 5. Мы считаем, что это позволит
седах), а также положительные откли- ся выпустить новую версию продук- более экономично использовать дан-
ки в прессе. та, в которой будут учтены все полу- ный продукт даже в самых малых се-
Так начиналась деятельность ком- ченные нами замечания и пожела- тях. При необходимости увеличить ко-
пании Agnitum, которую сегодня мож- ния от пользователей первой версии. личество лицензий не придется уста-
но назвать одной из самых популярных По многочисленным просьбам систем- навливать новый дистрибутив – до-
среди производителей доступных пер- ных администраторов, использующих статочно будет просто ввести другой
сональных брандмауэров. Agnitum Office Firewall 1, в новой вер- серийный номер. Стоимость офисной
Сегодня основатели компании сии будут реализованы новые функ- версии продукта составляет 40$ за од-
Agnitum – Михаил Захряпин и Алексей ции, значительно упрощающие адми- ну клиентскую лицензию.
Елагин являются Управляющим и Гене- нистрирование продукта:
ральным директором соответственно ! Интеграция Antispyware. Я присутствовал в декабре 2004 го-
и вместе принимают решения о даль- ! Политики для создания различных да на презентации «Agnitum Office
нейшем развитии и продвижении собс- клиентских настроек, в зависимос- Firewall», которая сама по себе оказа-
твенных программных продуктов. ти от принадлежности к определен- лась очень оригинальной – она про-
Коллектив компании Agnitum на се- ным группам. ходила в Петербурге, на борту леген-
годняшний день состоит из 31 челове- ! Автоматическая установка при по- дарного крейсера «Аврора». А поче-
ка, в связи с расширением и выходом мощи дистрибутивного файла, му именно в Питере? Ведь подобные
нового продукта Outpost Antispyware ссылку на который (либо сам файл) презентации, как правило, старают-
сегодня имеется около 5 вакансий. пользователю или подчиненному ся проводить в Москве.
Организация работы – офисная. От- администратору можно послать М.П.: Ну, во-первых, мы именно пи-
каз от аутсорсинга был обусловлен по почте. терская компания. Все основатели

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


интервью
Agnitum – петербуржцы, и глав- ставляет собой именно очеред-
ный офис расположен именно ной плагин, как фильтр содер-
в Петербурге. Возможно, с точки жания и т. д.
зрения прессы было бы удобнее
проводить презентацию в Моск- Какие направления развития
ве, учитывая, что большинство IT- компании Agnitum являются
изданий располагаются именно приоритетными?
там. Но тогда мы бы ничем, кро- М.П.: В данный момент мы ра-
ме своего имени, не выделились ботаем над созданием Agnitum
из похожих мероприятий, кото- Antispyware для офисной версии
рые проходят довольно часто. Outpost Firewall, улучшением фун-
То есть это не было бы запоми- кционала текущей версии. Как
нающимся, а нам хотелось оста- я упомянул ранее – продолжается
вить именно необычное, запоми- активная работа над новой вер-
нающееся впечатление и заодно Алексей Белкин: «Угрозой заражения spyware пренебрегать
сией Outpost Office Firewall.
нельзя – такие программы могут существенно затруднить
дать возможность культурно от- работу с компьютером, а зачастую и нанести
дохнуть нашим гостям. материальный ущерб» Есть ли в планах компании создание
могут существенно затруднить работу принципиально новых программных
Какой политики распространения с компьютером, а зачастую и нанести продуктов?
своих продуктов придерживается материальный ущерб (например, не- А.Б.: В данный момент мы стараемся на-
компания Agnitum? санкционированные рассылки и на- иболее плотно работать над улучшением
М.П.: В данный момент продукт рас- крутки счетчиков создают паразитный существующих продуктов, выпускать их
пространяется двумя способами – ко- трафик и т. д.). Поэтому мы включили новые версии и следовать пожеланиям
робочная версия и получение лицен- защиту от spyware в последнюю вер- пользователей. В этом году мы уже пред-
зии и дистрибутивов через Интернет. сию Outpost Firewall Pro 3.0, чтобы раз ставили два новых продукта – офисную
За рубежом количество лицензий, рас- и навсегда оградить вас от таких угроз. версию Outpost Firewall и Antispyware –
пространяемых через Интернет, значи- Данный продукт – это интегрируемый поэтому все силы сейчас брошены имен-
тельно превышает объем продаж коро- с Outpost Firewall Pro плагин, который но на улучшение этих продуктов. Персо-
бочных версий. В России из-за несо- в режиме реального времени монито- нальный Outpost Firewall также обзавел-
вершенства развития on-line-платеж- рит поведение системы и ее приложе- ся новой версией и улученным функцио-
ных систем и определенных предрас- ний и отслуживает несанкционирован- налом. Мы считаем, что не стоит гнать-
судков пока различие не столь велико – ные изменения. Продукт использует ся за созданием большого ассортимен-
40% коробочных версий против 60% on- не только сигнатуры известных типов та «средненькой» продукции и предпо-
line. Кстати, цена коробочной и online- spyware-программ, но и эвристический читаем выпускать качественные и про-
лицензий одинаковы, однако активиру- контроль за поведением системы, что веренные продукты.
ется только последняя версия продук- позволяет надежно противостоять да-
та, поэтому если программа установ- же еще не включенным в базы сигна- Расскажите о международных про-
ки на дистрибутивном диске устарела, тур угрозам. В данный момент доступ- ектах и клиентах компании.
придется скачать новую. Коробочные на персональная версия Antispyware. М.П.: В последнее время мы стараемся
версии распространяются через реги- Интеграция в офисную версию ожи- постоянно развивать свое присутствие
ональных реселлеров, а online-версия – дается в конце 2005 года. на рынке. Для этого было открыто Тор-
напрямую через компанию Agnitum. По- говое представительство Agnitum в Се-
мимо этого имеется вариант лицензи- Чем Agnitum Outpost Antispyware от- верной Америке. В Германии ребрен-
рования для учебных и некоммерчес- личается от известных продуктов дингом наших продуктов занимается
ких организаций. Такие компании по- этого же направления? компания Buhl Data Service, в Японии –
лучают 30% скидку на наши продукты. А.Б.: Во-первых, это встроенное реше- компания Canon. Novell выбрала тех-
Данный тип лицензирования недосту- ние, которое штатным образом присо- нологии ядра Outpost Firewall Pro для
пен в коробочном варианте. единяется в виде дополнительного мо- использования в Novell Client Firewall,
дуля к Outpost Firewall, тем самым ис- а английский лидер антивирусного
Вышел в свет ваш новый продукт – ключая возможные системные конф- ПО – Sophos включил исходный код
Outpost Antispyware. Что это, собс- ликты (например, когда активность фа- Outpost Firewall Pro в свое новое интег-
твенно, такое? ерволла будет воспринята Antispyware рированное решение по безопасности.
А.Б.: Сегодня проблема распростране- другого производителя как опасная, Западные университеты предпочитают
ния spyware становится с каждым днем и наоборот. В случае использования Outpost за соотношение цена/качест-
все более актуальной, поэтому каж- интегрированного решения такие си- во, так как выделение им средств на IT-
дый пользователь нуждается в надеж- туации исключены. Во-вторых, продукт решения жестко нормировано и посто-
ной защите, причем как можно скорее. бесплатен для пользователей Agnitum янно контролируется.
Угрозой заражения spyware пренебре- Outpost Firewall, так как не является
гать нельзя, так как такие программы самостоятельным продуктом, а пред- Роман Марков

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

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


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

З
а шесть месяцев участники успели не только сдать практический опыт работы с сетевыми технологиями, а не-
весеннюю сессию в вузах и хорошенько отдохнуть ле- которые незадолго до участия в турнире прошли обучение
том, но и успешно выполнить задание турнира, кото- в Учебном центре ВМК МГУ & SoftLine Academy по програм-
рое предлагало в жестких временных рамках реализовать ме «Администрирование сетей Microsoft» и уже получили
все этапы стандартного сетевого проекта. статус сертифицированных специалистов MCSA.
IT-турнир студенческих команд «Кубок сетевых проек- По итогам акции был организован «круглый стол», на ко-
тов Microsoft» прошел с 4 апреля по 1 октября на базе Учеб- тором состоялось награждение победителей призами –
ного центра ВМК МГУ & SoftLine Academy (www.it-university. оборудованием от ZyXEL и Microsoft, годовой подпиской
ru). Мероприятие было организовано компаниями Microsoft, на журнал «Системный администратор», а также пригла-
SoftLine, ZyXEL и факультетом вычислительной математики шением пройти бесплатное обучение в центре ВМК МГУ &
и кибернетики МГУ им. М.В. Ломоносова. К участию пригла- SoftLine Academy. Перед участниками «круглого стола» вы-
шались студенты и аспиранты всех московских вузов. В хо- ступил руководитель команды H0lid@ys (студент МИЭМ),
де турнира команды разработали проект компьютерной се- занявшей первое место в турнире. Он представил проект,
ти небольшого предприятия, реализовали его на реальном схема которого приведена на рис. 1. Планируются публи-
оборудовании, составили комплект документации и высту- кации, посвященных описаниям проектов команд-победи-
пили с докладами перед экспертной комиссией. телей IT-турнира. Надеемся, технические описания реаль-
В турнире приняли участие 290 человек, 28 команд про- ных выполненных проектов с комментариями профессио-
шли предварительный отбор и получили техническое за- налов помогут вам применить лучшие практики проекти-
дание. 10 команд успешно справились с заданием, раз- рования в своей ежедневной работе.
работали собственные проекты, построили компьютер-
ную сеть и показали ее работоспособность. Команды за-
щищали свои проекты перед членами комиссии, в состав
которой вошли представители компаний Microsoft, ZyXEL,
Softline, преподаватели московских вузов (МИЭМ, МГАПИ,
МИЭТ, МАИ) и технический специалист из журнала «Сис-
темный администратор».
Несмотря на то, что все участники получили одинаковое
техническое задание, каждая команда наделила свой про-
ект индивидуальными чертами. Некоторые решения выгод-
но отличались нестандартным подходом и оригинальным
исполнением (ознакомиться с краткими описаниями проек-
тов-победителей можно на сайте http://www.it-university.ru/
center/it-project/windescr.asp). Многие участники уже имели Рисунок 1. Схема сети, разработанной командой-призером

Задача проекта вание компании ZyXEL и выполнено под- го офиса. Управление сетью также долж-
Участникам необходимо было создать ключение офисов к Интернету на скорости но быть упрощено по сравнению с одно-
функционирующую сеть некой виртуаль- 7,5 Мбит/с с выделением по одному стати- ранговой сетью. Уровень поставленной за-
ной компании. Компания расширяет штат ческому IP-адресу на каждый офис. Для дачи соответствовал уровню технической
сотрудников и обновляет свою IT-инфра- мобильных пользователей, приезжающих подготовки специалиста MCSA – Microsoft
структуру. Недавно был арендован новый в офисы, нужно организовать беспровод- Certified Systems Administrator (http://www.it-
офис, планируется подключить оба офиса ной доступ к сети. university.ru/courses/itprog-msn.asp).
к Интернету с помощью высокоскоростно- Перед участниками турнира стояла за-
го ADSL-соединения, а в основном офисе дача планирования и создания работоспо-
разместить веб-сайт. собной сети этого предприятия. Необхо-
Компания обновила все клиентские димо было обеспечить безопасное соеди-
компьютеры до Microsoft Windows XP нение между двумя офисами, обеспечить
Professional, установила три сервера с OC безопасный беспроводной доступ в обоих
Microsoft Windows Server 2003 Standard офисах компании, а также предложить ре-
Edition в основном офисе и два серве- шение, позволяющее пользователям полу-
ра в дополнительном офисе. Приобрете- чать «прозрачный» доступ к сетевым ре-
Рисунок 2. Существующая IT-инфра-
но также беспроводное и ADSL-оборудо- сурсам (общим папкам и принтерам) любо- структура

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


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

Профессия – убивать спам


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

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

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


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

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

10
администрирование
Spamassassin также может проверять принадлежность Таблица 1. Примеры характерных признаков спама
адреса отправителя одному или нескольким блок-листам
реального времени (RBL). Опять-таки результат такой про-
верки лишь добавит баллы в общую копилку.
Рассматриваемый фильтр умеет взаимодействовать
и с системами, основанными на сигнатурном анализе
(Razor, Pyzor, DCC). По умолчанию включен только Pyzor,
поскольку DCC не является открытой системой, а сервис
Razor полностью бесплатен только в случае персонально- Таблица 2. Некоторые опции, полезные при инсталляции
го использования.
Благодаря такому интегральному подходу вы получаете
возможность очень гибко настраивать методы детектиро-
вания спама в зависимости от конкретных задач, которые
вы ставите перед фильтром. При этом ни один из методов
(если, конечно, ему не присвоить балл, заведомо превы-
шающий порог срабатывания) не выносит окончательного
решения о признании сообщения спамом, что при грамот-
ной настройке способствует снижению числа ложных сра-
батываний.

Развертывание комплекса на местности


Установка выполняется традиционно: на FreeBSD лучше Поддержка SSL позволяет клиенту и серверу Spamassassin
всего воспользоваться коллекцией портов; пользователи взаимодействовать друг с другом по защищенному каналу.
Linux могут установить Spamassassin из исходных кодов ли- Если и клиентское, и серверное ПО предполагается исполь-
бо поискать в сети готовый прекомпилированный пакет для зовать только в пределах одной и той же машины, эту оп-
своего дистрибутива. Более того, поскольку Spamassassin цию можно отключить.
разработан на Perl, его можно установить непосредственно Если вы планируете использовать байесовый анали-
из коллекции CPAN, как и любой другой Perl-модуль: затор, то поддержка MySQL или PostgreSQL позволит вам
хранить статистические данные, накапливаемые анализа-
root# perl -MCPAN -e shell тором, в базе данных. Кроме того, в БД могут храниться
cpan> o conf prerequisites _ policy ask
cpan> install Mail::SpamAssassin настройки пользователей и автоматически формируемый
cpan> quit «белый» список. Если ни одна из СУБД не поддерживает-
ся, будут использоваться «плоские» файлы.
Далее мы будем предполагать, что пакет устанавлива- Включение поддержки Razor позволит вам стать актив-
ется из коллекции портов: ным участником этой системы. То есть Spamassassin смо-
жет не только проверять принадлежность сигнатуры сооб-
# cd /usr/ports/mail/p5-Mail-SpamAssassin щения к базе спама, но и отправлять извещения (рапорты)
# make
# make install об обнаруженном спаме или ложных срабатываниях.
Запросы SPF (Sender Policy Framework, см. http://spf.
Вместе с командами make и make install вы можете ука- pobox.com) позволяют использовать систему DNS для про-
зать ряд дополнительных параметров (см. таблицу 2). верки того, является ли IP-адрес источника сообщения ле-
Замечание: при первой установке из коллекции пор- гитимным SMTP-сервером. Для SMTP-серверов админист-
тов вы получите представленное на рис. 1 диалоговое ратор размещает в соответствующей зоне DNS запись типа
окно, где сможете отметить нужные параметры визуаль- TXT, информирующую о том, что с данного IP-адреса пре-
но, без ввода дополнительных параметров в командной дусмотрена отправка сообщений электронной почты. Если
строке. Ваш выбор будет сохранен в /var/db/ports/p5-Mail- для адреса источника такая TXT-запись отсутствует, то по-
SpamAssassin/options, и при последующих установках (на- лучатель вправе отклонить запрос на соединение.
пример, при обновлении версии пакета) вы уже не будете Yahoo DomainKeys (см. http://antispam.yahoo.com/
получать этот диалог. domainkeys) действует аналогично SPF, но вместо простой
Поясню смысл приведенных выше опций. пометки хранит в соответствующей зоне публичный ключ
SMTP-сервера, позволяющий верифицировать цифровые
Справка подписи получаемых электронных сообщений (которые под-
Пакет Spamassassin был разработан Джастином Мэйсоном писываются автоматически при отправке).
(Justin Mason) на базе кода программы filter.plx. Весной 2001 го- Поддержка базы IP-адресов, сопоставленных со стра-
да проект был выложен на сайте Sourceforge.net. В настоящее нами, позволит вам использовать фильтрацию по геогра-
время Spamassassin разрабатывается силами Apache Software фическому признаку. Однако нельзя забывать, что неко-
Foundation и начиная с версии 3.0 выпускается под лицензией торые компании могут использовать зарубежный хостинг.
Apache. Spamassassin лежит в основе ряда других антиспамовых Поэтому не следует придавать подобным проверкам слиш-
решений, например McAfee SpamKiller. ком большой вес.

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


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

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


Имена тестов и значения по умолчанию можно узнать
Наконец, установка дополнительного инструментария в файле /usr/local/share/spamassassin/50_scores.cf. Чтобы
позволит вам получить ряд вспомогательных программ полностью отключить какой-либо тест, присвойте ему зна-
(подробнее о них будет рассказано в следующем разде- чение 0.0.
ле). Сами тесты (как правило – регулярные выражения) на-
Если вы выполняете установку вручную, будьте гото- ходятся в этом же каталоге в других cf-файлах. При же-
вы к тому, что в процессе инсталляции придется удовлет- лании вы можете создавать и свои проверки по аналогии
ворить большое число зависимостей (различные модули с имеющимися. Как вы можете увидеть, для этого сущес-
Perl). Список необходимых модулей можно найти в файле твует несколько групп правил (header, body, rawbody, meta,
INSTALL дистрибутива. uri и др.).
Также не забудьте добавить следующую строчку в /etc/ Подробно синтаксис правил описывается на странице
rc.conf: справки perldoc Mail::SpamAssassin::Conf.

spamd _ enable="YES" Белые и черные списки


Spamassassin можно настроить для особой обработки со-
Это необходимо для того, чтобы демон Spamassassin общений от конкретного отправителя или адресованных
мог запускаться из стартового сценария /usr/local/etc/rc.d/ конкретному получателю.
sa-spamd.sh. Для этого существует группа параметров, определяю-
щих «белые» и «черные» списки:
Дислокация и приведение в полную ! whitelist_from <адрес_или_шаблон>: отправители, поч-
боевую готовность товый адрес которых соответствует шаблону, рассмат-
По умолчанию (установка из портов, prefix не использует- риваются как доверенные, и почта от них не подверга-
ся) исполнимые файлы пакета размещаются в /usr/local/ ется проверке на спам. Под шаблоном в данном слу-
bin. Размещение и назначение основных конфигурацион- чае понимается запись в стиле командной строки, где
ных файлов разъясняется в таблице 3. символ «*» обозначает любое количество символов,
Обратите внимание, что настоятельно не рекомендуется «?» – любой один символ. Например, «*@contora.ru»
вносить изменения в файлы, размещаемые в каталоге /usr/ занесет в «белый» список всех пользователей доме-
local/share/spamassassin, поскольку они будут перезаписа- на contora.ru.
ны при обновлении версии пакета, и вы потеряете все свои ! blacklist_from <адрес_или_шаблон>: аналогично «бе-
настройки. Если вам нужно что-то изменить, просто укажите лому» списку, но теперь отправитель априори рассмат-
строку с нужными параметрами в рабочем конфигурацион- ривается как спамер, и все письма от него помечаются
ном файле в каталоге /usr/local/etc/mail/spamassassin. как спам без дальнейшего анализа.
Следующие подразделы описывают некоторые наибо- ! whitelist_to <адрес_или_шаблон>: все сообщения
лее полезные параметры конфигурации. на указанный адрес будут передаваться без фильтра-
ции. Можно использовать, если владелец адреса же-
Настройка набора тестов лает получать всю почту, адресованную ему. Также ре-
! required_score N: «Порог срабатывания» фильтра, комендуется устанавливать этот параметр для адреса
то есть количество баллов, при достижении которого abuse, чтобы даже в случае неправильной настройки
сообщение признается спамом. N – число с плавающей фильтра с вами можно было связаться.
запятой. Значение по умолчанию – 5.0. ! blacklist_to <адрес_или_шаблон>: все сообщения на ука-
! score <имя_теста> nL [nN nB nBN]: баллы, назначаемые занный адрес будут рассматриваться как спам. Напри-
тесту <имя_теста>. Может быть указано одно значение мер, таким образом можно организовать «прививки»
(общее) или четыре: nL – локальный балл, nN – при ра- для статистического анализатора, создав специальный
ботающих сетевых тестах, nB – при включенном байе- адрес для спама и максимально «засветив» его на про-
совом анализаторе, nBN – при работающих сетевых тес- сторах Интернета (при этом должно быть включено ав-
тах и статистическом анализаторе. тообучение, см. ниже).

12
администрирование
Существуют и другие параметры, позволяющие более Параметр report_safe указывает на то, что следует де-
гибко работать со списками пользователей. Подробности лать с оригинальным сообщением, если оно будет призна-
смотрите в документации. но спамом: либо оставить как есть (значение 0), либо при-
ложить к отчету как вложение (значение 1), либо добавить
Опции сетевых проверок к отчету как текст (значение 2).
Фильтр Spamassassin умеет проводить ряд сетевых тестов,
таких как проверка на принадлежность адреса отправителя Настройки администратора
доверенной сети, поиск IP-адреса в списках RBL, и т. п. Помимо описанных выше параметров, влияющих на про-
Некоторые параметры, которые вы можете исполь- цесс обработки входящих сообщений, существует ряд на-
зовать в своем конфигурационном файле, приведены строек, с помощью которых администратор может управ-
ниже: лять способом хранения данных или загрузкой подключа-
! trusted_networks <список_сетей>: перечисленные здесь емых модулей:
сети (в формате CIDR, например: 12.34.56.78/24) будут ! bayes_path <путь_к_базе>: указывает путь к каталогу,
рассматриваться как доверенные. в котором будут храниться данные, накапливаемые ста-
! skip_rbl_checks 1 | 0: этим правилом вы можете отклю- тистическим анализатором.
чить (значение 1) проверку на принадлежность адре- ! bayes_file_mode <права_доступа>: задаются права до-
са отправителя спискам RBL. Это может быть полез- ступа для вновь создаваемых файлов данных анализа-
но, если такие проверки вы предпочитаете выполнять тора.
другими средствами (например, с помощью spamd ! bayes_sql_*: группа правил для настройки доступа к вне-
или непосредственно правилами MTA), а также если шней БД в случае, если она используется для хране-
риск потери легальных сообщений для вас неприем- ния данных анализатора. Подробнее взаимодействие
лемо высок. с СУБД будет рассмотрено в одном из следующих раз-
делов.
Параметры обучения статистического анализа ! loadplugin <имя_модуля> [<путь_к_модулю>]: так мож-
Статистическому анализатору в Spamassassin отводит- но подключить дополнительный модуль.
ся весьма важная роль, поскольку только благодаря ему
удается достичь непревзойденной точности срабатыва- Вспомогательные скрипты
ния. Так как этот инструмент довольно сильно нагружает Если вы устанавливали вспомогательные инструмен-
систему, то его тонкая подстройка может иметь решаю- ты, то найти их можно будет в каталоге /usr/local/share/
щее значение. spamassassin/tools. Все они снабжены подробными ком-
Некоторые параметры: ментариями или POD-документацией в самом тексте сце-
! use_bayes 1 | 0: включает использование статистичес- нария. Здесь я приведу лишь краткое описание некото-
кого анализатора. рых скриптов:
! bayes_auto_learn 1 | 0: разрешает автообучение филь- ! sa-stats.pl – формирует статистику работы фильтра на
тра, в ходе которого письма, признанные спамом либо основе почтового лог-файла (по умолчанию /var/log/
набравшие минимальный балл, автоматически обра- maillog). Пример вывода сценария:
батываются для обучения анализатора как спам (spam)
или не спам (ham) соответственно. # ./sa-stats.pl -s 20051013
! bayes-ignore-header <тэг_заголовка>: не анализировать Report Title : SpamAssassin - Spam Statistics
письма, содержащие указанный тэг в заголовке. Может Report Date : 2005-10-13
оказаться полезным для отмены повторного анализа Period Beginning : четверг, 13 октября 2005 г. 00:00:00
Period Ending : пятница, 14 октября 2005 г. 00:00:00
уже обработанных (например, вышестоящим провай-
дером) сообщений. Reporting Period : 24.00 hrs
! bayes_ignore_from <адрес>: не подвергать анализу пись- --------------------------------------------------
ма от указанного адресата. Note: 'ham' = 'nonspam'
! bayes_ignore_to <адрес>: не анализировать сообщения,
предназначенные указанному пользователю. Total spam detected : 737 ( 54.51%)
Total ham accepted : 615 ( 45.49%)
-------------------
Прочие параметры Total emails processed : 1352 ( 56/hr)
Если вы получаете письма преимущественно на одном (или
нескольких) конкретном языке (например, русском), то мо- Average spam threshold : 12.00
Average spam score : 17.85
жет быть полезным указать такой параметр: Average ham score : 4.66

ok _ locales ru en 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)
попадать под действие ряда правил (например, CHARSET_ Total analysis time : 3491 s ( 145 s/hr)
FARAWAY) и получать соответствующий балл.

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


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

Statistics by Hour
Таким образом, система AWL учитывает «кредитную
---------------------------------------------------- историю» отправителя, доверяя в большей степени тем,
Hour Spam Ham кто в прошлом вел себя хорошо.
------------- ----------------- --------------
Отключить использование AWL можно, указав в конфи-
2005-10-13 00 12 ( 27%) 32 ( 72%)
2005-10-13 01 102 ( 75%) 33 ( 24%) гурационном файле следующую строку:
.. .. .. ..
2005-10-13 23 0 ( 0%) 0 ( 0%) use _ auto _ whitelist 0

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


Кроме того, вы можете подстраивать работу системы,
Этот отчет позволяет оценить долю спама в общем объ- указывая весовой коэффициент для расчета итогового бал-
еме электронной почты, нагрузку на систему и канал связи, ла, отличный от 1:
а также распределение нагрузки по времени суток.
! check_whitelist – проверяет или очищает автоматически auto _ whitelist _ factor 0.5
сформированный «белый» список, позволяя удалить из
него редко используемые адреса. Теперь итоговый балл для приведенного выше приме-
ра будет равен 6.45, то есть находиться ближе к «чисто-
# ./check _ whitelist му» значению.
-1.4 (-4.3/3) -- user@myserver.ru|ip=none
11.1
0.0
(22.2/2)
(0.0/2)
--
--
rrryyy@mail.ru|ip=8x.2yy
security-advisories@freebsd.org|ip=216.136
Взаимодействие с MTA
-2.3 (-394.9/171) -- mailer-daemon@myserver.ru|ip=none SpamAssassin может быть подключен практически ко всем
.. .. .. .. популярным почтовым серверам: Sendmail, Postfix, Qmail,
Exim, Courier-MTA, Communigate Pro и некоторым другим.
Первый столбец показывает средний балл писем от ука- Подробные инструкции можно получить на странице http://
занного адресата, во втором столбце выводится расшиф- wiki.apache.org/spamassassin/IntegratedInMta.
ровка того, как именно этот балл был получен. Обратите Для работы с Sendmail Spamassassin обычно подключа-
внимание, что в качестве IP-адреса используются лишь ется через milter. В сети можно найти несколько «мильте-
первые два октета, то есть оценивается только принадлеж- ров» для работы со Spamassassin.
ность отправителя к некоторой сети. Подробнее про ав- Мы будем использовать имеющийся в коллекции пор-
томатический «белый» список рассказано в следующем тов spamass-milter:
разделе.
! convert_awl_dbm_to_sql – преобразует базу «белого» # cd /usr/ports/mail/spamass-milter-0.3.0
# make install
списка в SQL-команды для заливки данных во внешнюю
БД. После установки нужно будет добавить в /etc/rc.conf
строку для автоматического запуска spamass-milter при за-
Подразделение AWL грузке системы:
AWL (Auto White List) – система, используемая в Spamassassin
по умолчанию, начиная с версии 3.0. Принцип работы AWL spamass _ milter _ enable="YES"
заключается в следующем: для всех отправителей ведет-
ся база данных, в которой сохраняется число обработан- Наконец, добавляем поддержку этой программы в кон-
ных сообщений и набранный в сумме балл. При получе- фигурационный mc-файл Sendmail (обычно соответству-
нии письма с адреса, фигурирующего в базе AWL, рас- ет доменному имени сервера, например /etc/mail/myserver.
считывается его «чистый» балл (без учета AWL), а окон- ru.mc):
чательный балл проставляется как производное значение
от рассчитанного «чистого» и взятого из базы историчес- MAIL _ FILTER(`spamassassin’, ↵
`S=local:/var/run/spamass-milter.sock, F=, ↵
кого значения. T=C:15m;S:4m;R:4m;E:10m’)dnl
Например, если ранее с адреса rrryyy@mail.ru было по- deÞne(`confINPUT _ MAIL _ FILTERS’, `spamassassin’)dnl
лучено два сообщения, набравших в сумме 22.2 балла
(см. листинг в предыдущем разделе, поясняющий работу Если вы используете и другие фильтры (например,
утилиты check_whitelist), и приходит третье письмо с «чис- clmilter из пакета ClamAV), то перечислите их в одной строке
тым» баллом 1.8, то итоговый балл будет равняться: «confINPUT_MAIL_FILTERS», поскольку такая запись долж-
на быть только одна.
St = (Th / Ch - Sc) * f + Sc = (22.2 / 2 - 1.8) * 1 + 1.8 = 11.1 Как вариант, вместо строк MAIL_FILTER можно исполь-
зовать INPUT_MAIL_FILTER. В этом случае второе опреде-
где: ление не потребуется.
! St – итоговый балл; Теперь осталось пересобрать cf-файл, запустить
! Th – суммарный «исторический» балл; Spamassassin и spamass-milter и перезагрузить Sendmail:
! Ch – количество «исторических» писем;
! Sc – «чистый» балл текущего письма (без учета AWL); # cd /etc/mail
# make
! f – весовой коэффициент системы AWL. # make install

14
администрирование
# /usr/local/etc/rc.d/sa-spamd.sh start
# /usr/local/etc/rc.d/spamass-milter.sh start
# make restart

Последние три команды можно заменить полной пе-


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

# Отправляем все сообщения (до 256000 байт) на обработку


:0fw: spamassassin.lock Рисунок 2. Так для пользователя выглядит спам
* < 256000
| spamassassin На своем сервере я ограничился только пометкой спа-
# Все сообщения с X-Spam-Status = Yes помещаем в карантин ма, предоставив пользователям возможность самостоя-
:0: тельно решать, что делать с ним дальше.
* ^X-Spam-Status: Yes
carantine
Проверка боеготовности и обучение
Если у вас запущен демон spamd, то вместо вызова личного состава
spamassassin лучше использовать клиент spamc, кото- После того как Spamassassin будет установлен и настро-
рый будет обращаться к находящемуся в памяти серверу. ен, убедиться в его работоспособности можно, просмот-
Это позволит избежать запуска отдельного экземпляра рев заголовки приходящих сообщений. Для писем, про-
скрипта для обработки каждого входящего сообщения. шедших обработку, в заголовке должно присутствовать
Помимо возможности индивидуальной настройки для что-то похожее:
каждого пользователя, вы можете здесь же организовать
обработку сообщений, о чем мы сейчас и поговорим. 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.0
X-Spam-Checker-Version: SpamAssassin 3.1.0 (2005-09-13) on myserver.ru
Дальнейшая участь спама
Пакет Spamassassin предназначен только лишь для помет- Из этого заголовка видно следующее: сообщение бы-
ки анализируемых сообщений (в заголовке или модифици- ло обработано фильтром Spamassassin, запущенным на ва-
руя тему письма). Дальнейшие действия, такие как удале- шем сервере (тэг X-Spam-Checker-Version). Письмо не было
ние спама или перемещение его в карантин, требуют под- признано спамом (No), набрало -0.7 балла при необходи-
ключения внешних программ, умеющих это делать. мых 12.0, положительный результат был дан перечислен-
Наиболее популярным решением является уже упо- ными после tests тестами. Автоматическое обучение ста-
минавшийся в предыдущем разделе procmail (там же при- тистического фильтра было выполнено для этого письма
веден пример занесения спама в отдельный почтовый в режиме ham (не спам).
ящик). Этот способ можно использовать как глобально Таким образом, можно считать, что фильтр работает.
(для всех пользователей сервера организовать один ка- Для писем, признанных спамом, будет формироваться
рантин), что может быть удобно в пределах одной органи- отчет (пример приведен на рис. 2). Текст сообщения мож-
зации, так и индивидуально, настроив каждому пользова- но изменять в настройках фильтра (используются стро-
телю свой карантин (эту возможность по достоинству оце- ки report в конфигурационном файле). Помимо текста, из-
нят провайдеры). Недостатком такого подхода является от- вещающего пользователя, что сообщение было признано
сутствие удобного инструмента для работы с карантином, спамом, ниже дается подробная расшифровка того, какой
так как если периодически закачивать содержимое каран- тест сколько баллов внес в итоговый результат. Подобная
тина с помощью почтового клиента и обрабатывать его та- детализация очень полезна для анализа причин ложного
ким образом, то это сводит на нет все преимущества ис- срабатывания, если оно произойдет. Оригинальное сооб-
пользования фильтра. щение по умолчанию прикладывается к отчету как вложе-
На странице http://wiki.apache.org /spamassassin / ние (это поведение можно настроить с помощью парамет-
SpamQuarantine предлагается два других решения: ис- ра конфигурации report_safe).
пользование веб-интерфейса Maia Mailguard и програм- Несколько слов нужно сказать о работе байесового
мы SpamAssassin Quarantine (SAQ). Чтобы не перегружать анализатора. Если его работа разрешена и включено ав-
статью, оставлю их вам для самостоятельного изучения тообучение, то он будет анализировать каждое сообще-
(возможно, об особенностях этих программ мы поговорим ние и инициировать обучение для писем, признанных спа-
в другой раз). мом или набравших минимальный балл. Однако заметьте,

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


администрирование
что результаты статистического анализа станут учитывать- # sa-learn --dump
ся фильтром только после того, как будет набрана достаточ- 0.000 0 3 0 non-token data: bayes db version
ная учебная база (по умолчанию, по 200 экземпляров спа- 0.000 0 2792 0 non-token data: nspam

ма и не спама). Тренировать фильтр вы можете как вруч-


0.000 0 623 0 non-token data: nham
0.000 0 131028 0 non-token data: ntokens
ную, так и положившись на автообучение (что потребует 0.000 0 1010692073 0 non-token data: oldest atime
0.000 0 1129590682 0 non-token data: newest atime
некоторого времени). 0.000 0 1129530349 0 non-token data: last journal sync atime
После того как будет накоплена достаточная база, в за- 0.000 0
0.000 0
0
0
0 non-token data:
0 non-token data:
last expiry atime
last expire atime delta
головках обработанных писем будет появляться и инфор- 0.000 0 0 0 non-token data: last expire reduction count
мация о выполнении тестов BAYES_xx:
0.049 0 1 1129026204 91a35b559c
0.958 1 0 1129026743 92485c309a
0.049 0 1 1129028552 f92317eba2
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.0
К процессу обучения можно приобщить и пользова-
X-Spam-Level: ************** телей. Создайте специальные почтовые ящики для спа-
X-Spam-Checker-Version: SpamAssassin 3.1.0 (2005-09-13) on myserver.ru
ма и не спама (например, sa-spam@myserver.ru и sa-
Как видите, для этого сообщения байесовый тест дал ре- ham@myserver.ru) и проинструктируйте своих пользова-
зультат от 99 до 100% вероятности того, что письмо – спам. телей на первый из них пересылать пропущенный спам
Совместно с другими тестами письмо набрало 14.9 баллов, (так называемый false negative), на второй – хорошие сооб-
что позволило отнести его к спаму, несмотря на достаточ- щения, ошибочно признанные спамом (false positive).
но высокий порог срабатывания. Далее настройте cron на периодическую загрузку пи-
Основываясь на личном опыте использования фильтра, сем из соответствующих почтовых ящиков в режиме обу-
могу сказать, что сразу после установки (поскольку дело чения.
было на работающем сервере, то необходимый порог сра- Второй путь – настроить procmail на обработку таких пи-
батывания был на период тестирования установлен на до- сем, что называется, на лету (пример взят со страницы http://
статочно высоком уровне – 12 баллов) Spamassassin стал wiki.apache.org/spamassassin/ProcmailToForwardMail):
отмечать примерно половину приходящего спама. Специ-
ального обучения статистического анализатора я не про- :0
* ^To:.*spam@example.com
водил, целиком полагаясь на самообучение. Спустя сутки
фильтр накопил достаточную базу и стал учитывать резуль- {
* < 256000
таты байесовой классификации. При этом точность сраба- :0c: spamassassin.spamlock
тывания возросла примерно до 91%. Ложных срабатыва- | sa-learn --spam
ний пока не наблюдалось. :0: spamassassin.Þlelock
Предварительное обучение фильтра наборами зара- spam
}
нее отсортированных на спам и легальную почту сообще-
ний позволит задействовать байесовый анализатор зна- Здесь помимо инициализации обучения для поступаю-
чительно раньше, а также еще больше повысить точность щих писем их копии также сохраняются в папке spam, ко-
срабатывания. Команды, «скармливающие» фильтру такие торая может пригодиться в будущем для ручного обуче-
сообщения, представлены ниже: ния фильтра.
Подробнее о режимах обучения смотрите страницу
# sa-learn --spam ~serg/sa/spams справочного руководства man sa-learn и соответствующие
Learned tokens from 20 message(s) (20 message(s) examined) Wiki-страницы.

# sa-learn --ham ~serg/sa/hams Усиление за счет внешней СУБД


Learned tokens from 5 message(s) (5 message(s) examined) По умолчанию Spamassassin хранит данные (автоматичес-
ки формируемый «белый» список, историю статистического
Последним параметром указывается либо файл (в фор- анализатора) в отдельных файлах в формате DBM. Для по-
мате mailbox), либо каталог, содержащий примеры писем вышения производительности можно перенести их во вне-
(например, в формате msg). Нужно заметить, что обучение шнюю базу данных. Spamassassin умеет работать с MySQL
может выполняться довольно долго (у меня обработка 25 и PostgreSQL (поддержка СУБД должна быть включена
сообщений заняла почти минуту). на этапе установки пакета). Рассмотрим настройку для ра-
Вполне естественно, что Spamassassin, как и любой дру- боты с базой PostgreSQL.
гой антиспамовый фильтр, будет пропускать часть спама Сначала вам нужно будет подготовить базу данных
(всегда найдутся грамотно составленные сообщения, ус- для работы. Саму БД придется создать вручную, а заодно
пешно проходящие через большинство правил). Сбор та- и пользователя, который будет владельцем нашей базы.
ких писем в отдельную папку и периодическая передача А поскольку Spamassassin использует хранимые процеду-
их Spamassassin в режиме обучения позволят в будущем ры на языке PL/pgSQL, то также потребуется подключить
повысить точность срабатывания за счет более высоко- и язык программирования к вновь созданной базе:
го балла, присваиваемого письму статистическим анали-
затором. # createuser --no-adduser --no-createdb -U pgsql sauser
# createdb --owner sauser -U pgsql sabase
После обучения вы можете просмотреть дамп базы: # createlang -U pgsql plpgsql sabase

16
администрирование
Замечание: pgsql – имя администратора PostgreSQL, Дополнительные сведения можно получить из файлов
который имеет право создавать базы и пользователей, README.* в указанном выше каталоге sql.
sauser – вновь создаваемый пользователь-владелец БД
Spamassassin, sabase – база данных Spamassassin. Индивидуальный защитный комплект
Далее нужно сформировать правильную структуру БД, Spamassassin может быть установлен и для персонального
для чего воспользуемся готовыми SQL-сценариями, кото- использования без необходимости иметь права админист-
рые можно будет найти в каталоге sql распакованного дис- ратора системы. Например, если у вас есть учетная запись
трибутива (при установке из портов это будет каталог /usr/ на сервере, то сможете установить Spamassassin в своем до-
ports/mail/p5-Mail-SpamAssassin/work/Mail-SpamAssassin- машнем каталоге и настроить его на проверку почты с помо-
3.1.0/sql): щью procmail. В этом случае вы сможете настроить фильтр
именно так, как хотите, не обращаясь к системному админис-
# psql -d sabase -U sauser -e < bayes _ pg.sql тратору сервера. Прежде чем вы установите Spamassassin
CREATE TABLE bayes _ expire (
id integer NOT NULL default '0', в свой домашний каталог, вам потребуется указать в ваших
runtime integer NOT NULL default '0' переменных окружения пути к модулям и библиотекам Perl,
) WITHOUT OIDS;
CREATE TABLE если это не было сделано ранее. Должны быть определены
CREATE INDEX bayes _ expire _ idx1 ON bayes _ expire (id); переменные PATH, MANPATH, PER5LIB и LANG.
.. .. много команд .. ..
CREATE FUNCTION Прежде чем собрать пакет из исходников, сконфигури-
руйте его на установку в свой домашний каталог:
Этой командой мы создали нужные таблицы, индексы
и функции в базе sabase для хранения данных статистичес- # perl MakeÞle.PL PREFIX=$HOME && make && make install
кого анализатора. Теперь осталось указать в конфигура-
ционном файле local.cf соответствующие настройки и пе- Далее внесите в ваш файл .forward такую строчку:
резапустить фильтр:
"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #user"
bayes _ store _ module Mail::SpamAssassin::BayesStore::PgSQL

bayes _ sql _ dsn DBI:Pg:dbname=sabase;host=localhost Это приведет к перенаправлению всей вашей почты
bayes _ sql _ username sauser на procmail, который должен быть настроен на обработку
bayes _ sql _ password ''
спама (пример см. выше, использовать следует пользова-
Если у вас уже накоплена статистическая база в фор- тельский конфигурационный файл .procmailrc). Пример кон-
мате DBM, то перенести их в СУБД можно следующим об- фигурационного файла для procmail можно найти в дистри-
разом. Перед тем как менять настройки в конфигурацион- бутиве под именем procmailrc.example. Не забывайте теперь
ном файле, сделайте резервную копию базы: вызывать нужные программы, указывая путь к файлам,
установленным в вашем домашнем каталоге (или укажи-
# sa-learn --backup > sabase.back те нужный каталог в вашей переменной окружения PATH).
Подробности смотрите на странице http://wiki.apache.org/
После того как настройки будут изменены для работы spamassassin/SingleUserUnixInstall.
с СУБД, восстановите данные из сформированной резер-
вной копии: Враг будет разбит!
Как видите, фильтр Spamassassin может быть предельно гиб-
# sa-learn --restore sabase.back ко настроен для борьбы со спамом. Он предоставляет адми-
нистратору возможность как глобально определять прави-
Поскольку формат резервной копии не зависит от ис- ла фильтрации всей почты, так и переложить часть настро-
пользуемого модуля базы данных, то sa-learn самостоятель- ек на пользователей, которые смогут подстраивать работу
но выполнит конвертирование данных в соответствии с ис- Spamassassin под свои предпочтения. В то же время дан-
пользуемой базой данных. ному фильтру присущи и традиционные проблемы, сопро-
Также поддерживается хранение во внешней БД поль- вождающие различные анализаторы. Так, прием сообщения
зовательских настроек и «белых» списков. Для подготовки осуществляется полностью, то есть снижения почтового тра-
таблиц нужно выполнить следующие команды: фика не будет. Высокая нагрузка на сервер, особенно в слу-
чае включенного синтаксического анализа, требует более
# 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=localhost риодический контроль помещенных туда писем. Тем не ме-
user _ scores _ sql _ username sauser
user _ scores _ sql _ password '' нее использование Spamassassin позволит упростить жизнь
пользователям электронной почты, а при достаточно вни-
user _ awl _ dsn DBI:Pg:dbname=sabase;host=localhost
user _ awl _ sql _ username sauser мательной настройке – даже добиться весьма хороших ре-
user _ awl _ sql _ password '' зультатов при минимуме ложных срабатываний.

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


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

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

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

У
читывать трафик, проходящий через шлюз локальной ческие интерфейсы шлюза (в данной статье – два Ethernet-
сети в Интернет, мы будем с помощью ipcad (Cisco IP интерфейса). Для конкретизации описания настроек взята
accounting simulator). Это программа, которая может локальная сеть с одной подсетью 192.168.0.0/24.
вести подсчёт несколькими механизмами, например, через По умолчанию единственный конфигурационный файл
интерфейсы BPF, libpcap и iptables ULOG. Материал пред- ipcad находится в директории /usr/local/etc. Под задачу
назначен для тех администраторов, в чьём ведении име- учёта трафика через два сетевых интерфейса eth0 и eth1
ется малая или средняя локальная сеть. Всё, что понадо- ipcad.conf выглядит следующим образом:
бится для работы, лишь сам ipcad, текстовый редактор для
написания скриптов разбора статистики и огромное жела- # /usr/local/etc/ipcad.conf
ние наконец решить задачу подсчёта расходуемого трафи- # GLOBAL OPTIONS
ка в локальной сети. # Опция capture-ports включает/отключает дополнительные
# поля в статистике, такие как: TCP- и UDP-порты, а также
Мы рассмотрим процессы установки, настройки и за- # типы ICMP-пакетов. Однако включение данной опции
пуска ipcad, а также некоторые примеры написания скрип- # увеличивает потребление памяти, снижает скорость подсчёта
# трафика и в ряде случаев искажает вывод через RSH,
тов разбора статистики. # поэтому она в данном примере отключена

capture-ports disable;
Установка ipcad
Для начала необходимо скачать последнюю версию ipcad # Размер буферов, используемых для передачи статистики
# ядром, по умолчанию равен 64 Кб, чего вполне достаточно
(http://lionet.info/ipcad). На момент написания статьи тако- buffers = 64k
вой была 3.6.6. В самом процессе установки нет ничего
# INTERFACE OPTIONS
нетривиального: # Интерфейсы, на которых считается проходящий трафик.
# Рассматривается случай шлюза с двумя сетевыми интерфейсами:
# tar -xvzf ipcad-3.6.6.tar.gz # внутренним (локальная сеть) и внешним (Интернет)
# cd ipcad-3.6.6
# ./conÞgure interface eth0; # Считать трафик на Ethernet-интерфейсе...
# make interface eth1; # ...и ещё на одном
# /bin/su -
# make install # Разделять статистику по каждому IP-адресу для подсети
# 192.168.0.0/24. «aggregate 192.168.0.0/24» указывает
# ipcad-диапазон адресов сети. «strip 32» означает,
В RPM-based-дистрибутивах устанавливать ipcad луч- # что в статистику необходимо заносить все 32 бита
# адреса, принадлежащего данному адресному диапазону
ше с помощью checkinstall (дабы следовать правилам па- aggregate 192.168.0.0/24 strip 32;
кетной системы).
# RSH SERVER OPTIONS
# Настройки rsh-сервера, с помощью которого будет
Настройка ipcad # просматриваться статистика.
Из многочисленных способов ведения статистики самым rsh enable at 127.0.0.1;
простым является учёт трафика, прошедшего через физи-

18
администрирование
# Правила, указанные ниже, описывают политики доступа Общий синтаксис команд для ipcad выглядит следую-
# к статистике ipcad. Root может полностью управлять
# (делать backup, просматривать и изменять таблицы подсчёта). щим образом:
# Все остальные могут лишь просматривать статистику
rsh root@127.0.0.1 admin; rsh host comand
rsh root@127.0.0.1 backup;
rsh root@127.0.0.1;
rsh 127.0.0.1 view-only;
где host – это хост, на котором ведётся статистика,
# «Время жизни» и тайм-аут IP-пакета а comand – это сама команда. В рассматриваемом слу-
rsh ttl = 3;
rsh timeout = 30; чае значением host является localhost.
По команде:
# Опцией dumpÞle задаётся путь к файлу, в который
# по умолчанию будут складываться данные статистики
dumpÞle = /var/log/ipcad/ipcad-curr.dump; rsh localhost help

# OTHER OPTIONS
доступен полный список команд.
pidÞle = /var/run/ipcad.pid;
А именно:
# Опция memory _ limit задаёт количество памяти ! show ip accounting – показать статистику.
# для хранения содержимого одного потока данных.
# Синтаксис следующий: ! clear ip accounting – сбросить статистику до контрольной
# memory _ limit = <количество>[{k|m|e}] ; точки. Если контрольная точка не задана, то статисти-
# где k - Кб; m - Мб; e – количество строк таблицы данных
memory _ limit = 10m; ка сбрасывается в ноль.
! show ip accounting checkpoint – показать статистику, со-
Все остальные опции, задаваемые ipcad.conf, в нашем хранённую в контрольных точках.
случае можно смело удалить (или, как минимум, закоммен- ! clear ip accounting checkpoint – сбросить все контроль-
тировать) за ненадобностью. Таким образом, они не будут ные точки.
задействованы вообще. ! show ip cache flow – показать кэш NetFlow.
Примечание: директория /var/log/ipcad/ не создаётся ! show interface <iface> – показать счётчик интерфейса
при установке ipcad, поэтому её необходимо создать са- <iface>.
мостоятельно. Права на чтение, запись и просмотр содер- ! dump [<path>] – сохранить текущую статистику в файл
жимого директории с логами ipcad рекомендую дать лишь <path>. Если <path> не указывать, то статистика сбро-
пользователю root. Всем остальным – запретить всё, что- сится в dumpfile, указанный в конфигурационном фай-
бы избежать даже просмотр простыми пользователями ста- ле ipcad.conf.
тистики расходуемого трафика в сети. ! restore [<path>] – восстановить статистику.
На этом процессы установки и настройки завершены, ! import [<path>] – импортировать (добавить) статистику.
и можно переходить к запуску ipcad. ! stat – показать текущее состояние работы ipcad.
! show version – показать версию и uptime ipcad.
Запуск ipcad ! shutdown – завершить работу ipcad.
Запускать ipcad имеет смысл таким образом, чтобы при за-
грузке он восстанавливал данные о статистике из dumpfile, Для просмотра статистики достаточно:
уходил в фон, а при выключении сбрасывал все данные
в тот же dumpfile. Команда для запуска выглядит следую- rsh localhost show ip accounting
щим образом:
Однако таким образом на экран выведется информация
/usr/local/bin/ipcad -rds обо всём трафике, прошедшем через шлюз. То есть в од-
ной таблице будет статистика по всему входящему и исхо-
где: дящему трафику из локальной сети.
! ключ r – импортирует данные из dumpfile; Получить нужные данные из вывода команды «show ip
! ключ d – «демонизирует» ipcad; accounting» можно, например, с помощью скриптов. Кото-
! ключ s – сбрасывает статистику в dumpfile при выклю- рые вы вполне можете написать сами для каждой конкрет-
чении ipcad. ной ситуации. Ниже приводится пример для просмотра ста-
тистики по одному указанному IP-адресу и подсчёта сум-
Лучше всего разместить указанную команду в один марного трафика для этого IP:
из init-скриптов для запуска ipcad вместе с системой. В ка-
кой именно init-скрипт, я не конкретизирую, т.к. это за- traff.acc
висит от каждого дистрибутива. Например, в SuSE Linux #!/bin/bash
для подобных целей служит скрипт /etc/init.d/boot.local, # name of script: traff.acc
HOST=localhost
а в RedHat – /etc/rc.d/rc.local. rsh $HOST dump
rsh $HOST show ip accounting | grep -E ↵
'192\.168\.0\.'$1'([^0-9]|$)'
Просмотр статистики echo
Для управления статистикой ipcad используется rsh, на- echo "Summary trafÞc of 192.168.0.$1 (kbytes):"
rsh $HOST show ip accounting | grep -E ↵
стройки которого [rsh] задаются в конфигурационном фай- '192\.168\.0\.'$1'([^0-9]|$)' | awk '{s+=$4} ↵
ле ipcad.conf (о чём говорится в «Настройка ipcad»). END {print(s/1024)}'

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


администрирование
Используется просто: HOST=localhost
USERS=/etc/hosts
./traff.acc ip case $1 in

M|m) echo "Summary LAN trafÞc of month $2 (Mbytes):"


где ip – это число от 1 до 254 (попросту последний октет rsh $HOST dump
awk '{s+=$4} END {print(s/1048576)}' ↵
из IP-адреса). < /var/log/ipcad/ipcad-$2.dump
Результатом работы этого скрипта будет вывод на экран exit 0;;
количества (в мегабайтах) входящего трафика для введён- U|u) grep -E '192\.168\.0\.'$3'([^0-9]|$)' $USERS ↵
ного IP-адреса. | awk '{print($2)}'
USER=`grep -E '192\.168\.0\.'$3'([^0-9]|$)' ↵
Приведённый простейший скрипт будет выводить всю $USERS | awk '{print($2)}'`
суммарную статистику по указанному IP-адресу, собран- rsh $HOST dump
cat /var/log/ipcad/ipcad-$2.dump ↵
ную с момента первого запуска ipcad и до текущего мо- | 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;;
щим образом: в 23 ч. 59 мин. «последнего» числа каждо- *) echo "Usage: "
го месяца делается dump статистики в файл, к названию echo "1) if only month stat:"
echo " ./traff.acc.2 m <month>"
которого целесообразно добавить значения года и теку- echo " <number> - number of month"
щего месяца. Уже через минуту, в 0 ч. 00 мин. 1-го числа echo "2) if user’s stat for month"
echo " ./traff.acc.2 u <month> <IP>"
следующего месяца, счётчик трафика сбрасывается ко- echo " <month> - stat for that month"
мандой «clear ip accounting», статистика начинает вестись echo " <IP> - last octet of user’s ↵
IP address"
«с нуля». По достижении «последнего» дня месяца схема echo "note: for current month in ßag <month> ↵
повторяется. just type 'curr'"
exit 0;;
Для реализации этого механизма создан файл /etc/cron.
d/ipcad с заданиями для cron: esac

/etc/cron.d/ipcad В приведённом скрипте traff.acc.2 в переменной $USERS


* * * * * root rsh localhost dump >/dev/null определяется файл, в котором есть соответствия имён поль-
59 23 * * * root date "+\%Y\%m" > /var/log/ipcad/ipcad.date зователей и их IP-адресов (в данном примере – это /etc/
0 0 1 * * root (rsh localhost dump ↵
/var/log/ipcad/ipcad-$(cat ↵ hosts на шлюзе). Эта переменная необязательна и вводит-
/var/log/ipcad/ipcad.date).dump && rsh localhost ↵ ся в скрипт исключительно для наглядности просматрива-
clear ip accounting) >/dev/null 2>&1
емой статистики.
Первая задача из приведённого файла выполняет dump Использовать приведённый скрипт можно двумя спо-
статистики каждую минуту. Делается это для защиты от не- собами:
предусмотренных выключений и зависаний шлюза, на ко-
тором ведётся учёт проходящего трафика. ./traff.acc.2 m <month>
Вторая строчка – это такой маленький «хак», который
автор статьи вынужден был сделать в связи с трудностью где семафор m обозначает то, что на экран необходимо вы-
указания в расписании «последнего дня месяца» при на- вести общую статистику за указанный месяц.
стройке заданий cron. Суть в том, что каждый день в файл
/var/log/ipcad/ipcad.date сохраняется текущий месяц и год ./traff.acc.2 u <month> <IP>
(в формате YYYYMM). Эта же процедура ведь произойдёт
и в последний день месяца. Уже через минуту третье зада- семафор u обозначает, что на экран необходимо вывес-
ние сделает dump статистики в файл, к названию которого ти статистику указанного пользователя за определённый
прикрепится содержимое файла ipcad.date (т.е. год и уже месяц.
прошедший месяц в формате YYYYMM), и сбросит счётчик Флаг <month> – это шестизначный номер месяца в фор-
расходуемого трафика. В этот же день файл ipcad.date пе- мате YYYYMM – такой формат хранения ежемесячных
резапишется новыми значениями текущих месяца и года. dump-файлов выбран в файле задач для cron (для вывода
Не совсем красиво, но зато работает. статистики за текущий месяц следует указать вместо но-
Теперь, когда есть данные о трафике по каждому ме- мера месяца слово «curr»).
сяцу, расположенные в разных dump-файлах, можно изме- Флаг <IP> – это значение последнего октета IP-адреса
нить скрипт, добавив к нему возможность просмотра общей пользователя, чью статистику надо просмотреть.
и частной по каждому IP-адресу статистики израсходован- В заключение статьи хочу отметить, что вместо shell-
ного трафика за какой-то определённый месяц: скрипта можно написать скрипт на perl и, добавив элемен-
ты навигации, прикрутить страницу с этим скриптом к httpd-
traff.acc.2 серверу. Тогда статистика будет доступна для просмотра
#!/bin/bash через браузер.

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

Scientific Linux – выбираем решение


корпоративного уровня по цене носителя

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


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

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

И
здателем дистрибутива высту- программа работает и сертифициро- А вот уже на этапе выбора компонен-
пил небезызвестный LinuxCenter вана в коммерческом дистрибутиве тов для установки нас ждет нечто но-
(http://www.linuxcenter.ru). К че- Enterprise Linux, то она будет работать вое. Здесь появляются две новые груп-
тырем дискам оригинального Scientific аналогично и в соответствующем ре- пы, которые отсутствуют в оригинале.
Linux питерские разработчики доба- лизе Scientific. Это в дополнение к KDE и Gnome груп-
вили еще два – один с обновления- Для ответа на вопрос зачем по- па ICE Desktop Environment, и группа
ми, а другой с пакетами русификации, надобилось создавать еще один клон Scientific Linux Additional Choices.
шрифтами и мультимедиа. Итак, если и какова его ниша на рынке откры- Как вы видите на рис. 1, в группу
читатель слышал о таких дистрибути- тых операционных систем, мы свя- Scientific Linux Additional Choices входят
вах, как White Box Linux или CentOS, зались с техническим директором средства удобного обновления систе-
то после того, как я скажу, что при со- ОАО «Линукс Инк» Олегом Садовым. мы – APT и YUM, а также программное
здании Scientific Linux была взята за ос- С его мнением вы можете ознакомить- обеспечение для организации клас-
нову идеология, аналогичная исполь- ся во врезке. А для того чтобы поближе теров и распределенных вычислений.
зованной в этих двух дистрибутивах, взглянуть на сам дистрибутив, перей- В «Packages added to Scientific Linux»
то станет ясно, что это еще один клон дем к практике. Начнем, как это при- помимо прочего присутствует интерес-
Red Hat Enterprise Linux (RHEL). Поэто- нято, c установки. Встречает нас зна- ный пакет SL_sendmail_accept, единс-
му сравнивать Scientific Linux мы будем комая пользователям RHEL и Fedora твенное предназначение которого –
именно с корпоративным дистрибути- Core «анаконда». Данная программа менять политику Red Hat по умолчанию
вом от лидера коммерческого Linux. достаточно удобна. Поддерживают- для Sendmail. Как явствует из описа-
Как известно, Red Hat не распро- ся текстовый и графические режимы ния, пакет включает опцию, позволяю-
страняет бесплатно свой корпоратив- установки, а также инсталляционные щую принимать почту извне. Еще один
ный дистрибутив. Однако, следуя усло- скрипты Kickstart. Ставить «научный» пример отступления от политики Red
виям лицензии GPL, выкладывает в от- Linux можно как с CD-диска или ло- Hat – пакет xmms-mp3. Как, наверное,
крытый доступ исходные тексты в ви- кального раздела, так и по сети: че- читателю известно, в случае с Fedora
де SRPM-пакетов. Создатели клонов рез NFS, HTTP или FTP. или RHEL, все, что не удовлетворяет
просто перекомпилируют «исходники». В процессе установки вы можете условиям лицензии GPL, в дистрибу-
Получившиеся «бинарники» упаковы- создать разделы с использованием тив не включается, к примеру, ту же
ваются в дистрибутив Linux, причем на- технологии LVM2, определить програм- поддержку формата MP3 пользовате-
столько близко к тому, как это сдела- мный RAID, а также задать режим ра- лю пришлось бы добавлять в свою сис-
но в коммерческом дистрибутиве, на- боты SELinux. Кроме того, можно про- тему самостоятельно.
сколько это удается. Целью, как напи- извести начальное конфигурирование Достаточно забавен сам процесс
сано в FAQ на официальном сайте – брандмауэра. Это все стандартные установки пакетов. Он показан на
http://www.scientificlinux.ru, является функции RHEL4 и Fedora Core, и здесь рис. 2. В отличие от RHEL, где поль-
достижение гарантии того, что если мы не встречаем никаких сюрпризов. зователю демонстрируются рекла-

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

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


ма компании и самого дистрибути- ва входят удобные средства управле- зователей имеется возможность в те-
ва, во время установки Scientific Linux ния system-config-*, а также при экс- чение 30 дней получать от компании
можно полюбоваться цветочками, ко- плуатации можно воспользоваться, «Линукс Инк» бесплатную поддержку
тятами и прочими «веселостями». например, документацией, доступной по установке и начальной настройке
По окончании установки, которая по адресу http://www.redhat.com/docs/ системы. А если не нужно сопровож-
производится с первых четырех дис- manuals/enterprise. Все, что написано дение, вы можете бесплатно скачать
ков, в точности соответствующих ори- в «букварях» от Red Hat, практически дистрибутив по ссылке с сайта http://
гинальному Scientific Linux, у пользо- полностью (за исключением средств www.scientificlinux.ru. С другой сто-
вателя есть возможность установить RHN) применимо и к Scientific Linux. роны, когда вам понадобится гаран-
с двух дополнительных CD обновле- Итого мы имеем корпоративный дист- тированная техническая поддержка
ния и пакеты русификации, мультиме- рибутив по цене на порядок меньшей, не только по вопросам инсталляции,
диа, документацию, а также драйверы чем у Red Hat. И хотя существуют об- но и по вопросам эксплуатации ОС
для видеокарт от NVIDA и ATI. ласти, где такая экономия окажется в течение всего срока использования
Итак, что же мы имеем по оконча- неоправданной (например, в случае сервера, вам ничто не помешает пе-
нии установки? Надежный дистрибу- взаимодействия с технической под- рейти на коммерческий корпоратив-
тив корпоративного уровня с обновле- держкой Oracle, которую, при исполь- ный Linux. И переход этот будет мак-
ниями, выходящими максимум через зовании Scientific Linux, вы не получи- симально безболезненным, посколь-
два дня, после того как они появятся те), для небольших организаций или ку, как мы уже заметили, одна из за-
на сайте Red Hat. Полный аналог дис- частных пользователей рассматри- дач Scientific Linux – максимальная би-
трибутива, сертифицированного в ка- ваемый дистрибутив будет неплохим нарная совместимость со вполне кон-
честве платфомы, в частности, корпо- выбором. Кроме того, не нужно забы- кретным коммерческим дистрибути-
рацией Oracle. В поставку дистрибути- вать, что у зарегистрированных поль- вом Linux.

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

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


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

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


Слухи и реальность

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

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

24
администрирование
телям ПО потратить на перенос и тес- плодных дискуссий
тирование своих продуктов. Остается о том, каков дол-
лишь один выход – написать систему, жен быть дизайн
которая будет вести себя в точности системы, начина-
так же, как Windows. ние тихо умерло. Рисунок 1. Первый экран установки
Такие мысли с завидной периодич- В конце 1997 го-
ностью приходят в голову многим раз- да Джейсон Филби
работчикам свободного софта на про- (Jason Filby) стано-
тяжении достаточно долгого периода вится координато-
времени. Без сомнения, самым извес- ром проекта и объ-
тным проектом подобного толка явля- являет о необходи-
ется Wine. Стройными рядами за веч- мости начать все Рисунок 2. Создание разделов
но молодым патриархом идет череда заново. Решено –
его потомков разной степени близос- система будет на-
ти: Cedega (бывший Winex), сошедший зываться ReactOS
с конвейера TransGaming Technologies, и должна стать по-
CrossOver Office от CodeWeavers, хожей уже на сле-
DAVID, разработанный загадочной Фи- дующую ст упень Рисунок 3. Первичные настройки
липпинской фирмой SpecOpS Labs, эволюции продук-
LinSpire (во младенчестве Lindows). тов Microsoft, т.е.
Все вышеперечисленные герои на- н а W i n d o w s N T.
целены на запуск Windows-приложе- С февра ля 1998
ний в среде UNIX-подобных систем. года начинается
И только одна маленькая, но гордая собственно разра-
система по имени ReactOS пошла сов- ботка. Следующие
сем другим путем. Команда разра- несколько лет сис-
Рисунок 4. Выбор языка
ботчиков подумала: «Зачем нам ну- тема потихоньк у
жен фундамент в виде UNIX, если мы, развивается, при-
взяв все лучшее от Wine, сами можем влекая к себе все
стать полноценной операционной сис- новых и новых раз-
темой, в точности повторяющей по- работчиков. Нако- Рисунок 5. Выбор папки инсталляции
ведение Windows NT и его последу- нец пришло время,
ющей инкарнации Windows XP. Пол- когда ее уже мож-
ная мимикрия даст возможность ис- но попробовать на
пользовать весь багаж ПО, разрабо- вкус. Сегодня мы
танный для Windows, причем это бу- посмотрим, гото-
дут не только вожделенные приложе- ва ли она для то-
ния, но и драйвера для устройств под- го, чтобы заменить Рисунок 6. Копирование файлов
держки, которых столь не хватает дру- ОС от Microsoft на наших рабочих мес- тить, что система пока что способна
гим ОС. Дело за малым, нужно лишь тах. работать только в 32-битном режиме,
правильно реализовать API. На пер- впрочем, это не мешает ей также вы-
вый взгляд, ничего сложного в этом Установка полняться и на новых 64-битных про-
нет, но это только кажущаяся просто- Итак, берем дистрибутив – http://www. цессорах.
та. API от Microsoft документировано reactos.org/xhtml/ru/download.html. Итак, приступим к осмотру. Встав-
достаточно туманно, да и сам произ- На момент написания статьи актуаль- ляем в CD-ROM диск, перезагружаем-
водитель не особенно стремится де- на версия 0.2.7. Согласитесь, 11 Мб – ся и видим следующую надпись:
литься своими секретами, несмотря удивительный размер для любой сов-
на отсутствие принципиальных воз- ременной ОС. Распространяется она
ражений. в виде нескольких независимых дист- Для того чтобы загрузка продол-
рибутивов: загрузочный Live-CD-пакет жилась, нужно успеть нажать любую
История развития проекта для установки в qemu или iso-имидж
Впрочем, довольно лирики, обратимся для установки в реальную систему.
же к нашей основной теме, т.е. к исто- Я опробовал все три варианта и могу
рии возникновения и нынешнему со- сказать, что они практически не отли-
стоянию ReactOS. В 1996 году сила- чаются, по крайней мере набор недо- Рисунок 7. Ошибка при работе
со scsi-дисками
ми энтузиастов стартовали работы статков и достоинств везде примерно
над прототипом системы FreeWin95, один и тот же. Для чистоты экспери-
которая должна была стать к ло- мента даже была произведена уста-
ном Windows 95. После двух лет бес- новка ReactOS в VMWare. Стоит отме- Рисунок 8. Установка загрузчика

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


администрирование
клавишу, пока по экрану бегут точки. ги во время инсталляции идут все рав-
Если не успеваем, система подвисает но на английском (см. рис. 3, 4). Впро-
намертво, помогает только волшеб- чем, нам не привыкать, лишь бы потом
ная кнопка «Reset». Странный подход все работало нормально. После выбо-
к началу инсталляции. Если со ско- ра папки, в которой будет жить опера-
ростью реакции у вас все отлично, ционная система, начинается копиро-
то на экране появится следующее ме- вание файлов, затем происходит уста-
Рисунок 9. Мастер настройки ОС ню (см. рис. 1). (От ред.: видимо от- новка менеджера загрузки. На все про
сюда произошло название системы все даже на самой медленной машине
React – от «реакция».) уходит пара минут (см. рис. 5,6,8).
Все предлагаемые варианты при-
вычны глазу любого Windows-админа. Первый запуск
Единственный пункт, который вызыва- и начальная настройка
ет любопытство, – «repair ReactOS». И вот после перезагрузки наконец-то
В процессе экспериментальных уста- видно, как выглядит первая встреча
Рисунок 10. Экран персонализации
новок мне, к сожалению, пришлось с новой системой. Пока что на экране
к нему однажды прибегнуть, и он в об- ничего особо впечатляющего не видно
щем-то довольно неплохо сработал. (см. рис. 17). То ли еще будет?
Пытаться инсталлировать систе- Поэтому жмем <Enter> и попада-
му на scsi-диски не стоит, все равно ем прямиком в лапы мастера настрой-
ничего хорошего из этого не выйдет, ки системы после первого запуска
в ответ будем получать лишь картин- (см. рис. 9).
ку, после которой инсталляция будет Вид странных квадратиков вмес-
завершаться с кучей жалобных сооб- то обещанных кириллических симво-
щений (см. рис. 7). лов начинает раздражать, но все еще
Рисунок 11. Повторная настройка Пока что кроме IDE нам ничего есть надежда, что потом с помощью
русской локализации не светит. Пришлось поставить в тес- волшебного шаманского бубна жизнь
товый компьютер диск IDE и начать наладится (см. рис. 10). В дальнейшем
заново. Впрочем, стоит отметить, нас спросят об имени компьютера и па-
что полная переустановка системы роле администратора, заодно покажут
длится всего 2 минуты, и это, знаете список свободных проектов на парочку
ли, впечатляет. экранов, из которых был позаимство-
Меню разбивки диска на разде- ван код для решения тех или иных за-
лы выглядит довольно стандартно дач. Стоит отметить, что снимки экра-
(см. рис. 2). Пока что можно работать на, приведенные в статье, были специ-
Рисунок 12. Ошибки при установке только с FAT32. В рамках этой фай- ально уменьшены для экономии мес-
драйверов VMWare
ловой системы декларируется подде- та, а на самом деле они довольно час-
ржка VFAT, в нашем случае это обозна- то полностью не помещаются на экра-
чает наличие Unicode и длинных имен. не во время настройки системы. Поэ-
Так как взаимодействие ОС и файло- тому для того, чтобы нажать, к приме-
вой системы происходит через модуль ру, кнопку «ОК», приходится сдвигать
IFS (Installable File System), разработчи- диалоговое окно далеко за край эк-
ки предполагают, что скоро в качест- рана. В процессе настройки нам еще
ве основной ФС станет возможным ис- раз предложат определиться с так на-
пользовать не только NTFS, Ext2, Ext3, зываемыми региональными настрой-
JFS, SMB, но и многие другие. ками или, попросту говоря, локалью,
Ставить систему лучше всего
Рисунок 13. Процесс загрузки ReactOS на пустой диск, т.к мне ни разу не уда-
лось нормально разметить и отформа-
тировать целевой раздел, если на дис-
ке присутствовали разделы других
систем. Либо они портились, либо фор- Рисунок 15. Ошибка при просмотре
нереализованных меню
матирование не срабатывало. Так или
иначе, раздел создан и отформатиро-
ван, осталось проверить и изменить
в случае надобности некоторые на-
стройки.
Несмотря на возможность выбора
Рисунок 16. Попытка настроить
Рисунок 14. Результаты русификации русского языка и многих других, диало- сетевой интерфейс

26
администрирование
часовым поясом и расклад- мальная поддержка сети по-
кой клавиатуры (см. рис. 11). явится в следующем релизе,
Впрочем, радоваться ра- т.к. на выставке LinuxWorld
но, манипуляции с языками 2005 всем желающим был
все равно бесполезны, квад- продемонстрирован вариант
ратики вместо русских букв ReactOS, который доволь-
никуда от этого не денутся. но неплохо работал с сетью.
В случае если установка про- По утверждению разработ-
ходит под VMWare, систе- чиков сетевой стек уже сей-
ма обнаружит это и попыта- час представляет полную ана-
ется поставить VMWare tools логию стека Windows XP. В ка-
автоматически. Но и здесь честве основы для его реали-
нас ж дет разочарование. Рисунок 17. Интерфейс загрузчика зации была выбрана библио-
ReactOS, некоторое время помучив вим систему с английской локалью тека oskiitcp. Также ведется активная
виртуальный CD-ROM, покажет нам и продолжаем препарирование. работа над Winsock. Полностью ста-
следующее (см. рис. 12). Интерфейс системы очень по- бильная версия сетевого стека будет
хож на что-то вроде Windows NT, хо- представлена публике в версии 0.30.
Что имеем в результате тя присутствует и некоторое количес- Со звуковой подсистемой дела обстоят
После перезагрузки мы, наконец-то, тво собственных элементов оформ- гораздо хуже, ее разработка началась
увидим систему в действии. Переход ления окон и меню. В основе графи- намного позже, да и сил на это тратит-
в рабочее состояние даже на медлен- ческой подсистемы лежит DIB Engine ся пока существенно меньше. Поэтому
ных машинах выполняется примерно и своя собственная версия Explorer, надеяться, что ReactOS скоро запоет
в течение 30 секунд. отвечающая за отрисовку рабочего в полный голос, наверное, не стоит, а
Как и следовало ожидать, с руси- стола. Технологически такое решение пока что любуемся на то, как она долж-
фикацией беда (см. рис. 14). Шаман- несильно отличается от того, что есть на управляться. На данный момент де-
ские танцы с переключением лока- у Microsoft, то есть оно также встрое- кларируется поддержка драйверов
ли и раскладки клавиатуры результа- но в ядро. Но в то же время различия звуковых карт от Windows NT 4.
та не дают. По крайней мере, англий- в дизайне позволит в качестве оболоч- Поговорив о недостатках, перей-
ский язык взамен русского вернуть ки для пользователя при желании при- дем к тому, что же на самом деле мо-
тоже не удается. А дело-то все в том, способить LiteStep, BlackBox, fwm или жет система. Мне удалось совершен-
что в системе и в помине нет никаких еще какой-либо популярный оконный но без проблем поработать под управ-
шрифтов, кроме латиницы. По крайней менеджер из мира UNIX. Впрочем, та- лением ReactOS с Far, OpenOffice, не-
мере, английский язык взамен русско- кие разработки еще пока только пла- сколькими приложениями вроде каль-
го вернуть тоже не удается. Лечение, нируются. Настройка свойств рабоче- куляторов IP-сетей и кучей прочего
как всегда, происходит с помощью пе- го стола, разрешения экрана и застав- мелкого софта. Слегка прихрамывая,
реустановки системы. Итак, заново вы- ки практически не отличается от стан- заработали Total Commander и несколь-
полнив это нехитрое упражнение, ста- дартных интерфейсов Windows. ко других приложений после того, как
Б ол ьш и н с т в о п од м е н ю в е т к и нужные ключи реестра из Windows бы-
«Start → Settings» либо пусты, либо ли импортированы с помощью regedit
вызывают показ вот таких окошек в ReactOS. К сожалению, заставить за-
(см. рис. 15, 16). пуститься даже самый древний Internet
Соответственно изменение пара- Explorer или Microsoft Office не удалось,
метров звука, принтеров, сетевого под- то же самое относится и к столько не-
ключения напрямую не поддерживает- обходимой многим продукции фир-
ся. К примеру, для изменения настро- мы Adobe.
ек сетевых устройств приходится зале-
зать в реестр. Впрочем, и сами пере- Окончательный диагноз
численные подсистемы еще не до кон- и пути дальнейшего
ца реализованы. В процессе загруз- развития
Рисунок 18. Свойства сетевой ки ОС видно, что драйвера для сете- В целом система показалась доволь-
подсистемы вых устройств в память загружаются, но перспективной, но, к сожалению,
но мне так и не удалось оживить сете- на данный момент ни для домашнего,
вую карту. Так что единственным при- ни уж тем более для промышленного
знаком наличия сетевого стека можно применения не пригодной. Есть надеж-
считать тот факт, что сетевое устройс- да, что с течением времени скелет, ко-
тво локальной петли при загрузке по- торый мы видели, будет обрастать мя-
лучает IP-адрес. сом полезных функций, и, возможно,
Но вот ping все же сделать не уда- однажды ReactOS займет достойное
Рисунок 19. Ошибка при попытке
управлять громкостью звука ется. Впрочем, есть надежда, что нор- место на наших жестких дисках.

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


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

Создаем загружаемый Flash-диск


с FreeBSD и DOS
Часть II

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

Использование Flash-диска еще создать разделы /usr и /var, то для них точки монти-
для установки FreeBSD рования нужно задавать соответственно как /mnt/s1a/
Установка FreeBSD на новый компьютер при загрузке usr и /mnt/s1a/var, но ни в коем случае не как /usr и /var.
с Flash имеет свои особенности, которые необходимо учи- ! Дополнительная настройка файловых систем. Если
тывать. При загрузке с дискеты программа sysinstall выпол- предполагается использовать ACL, то файловая сис-
няется как процесс init, поэтому она делает поочередно все тема должна быть помечена, как допускающая их ис-
необходимое. При загрузке с Flash /stand/sysinstall запуска- пользование. Данная отметка не ставится по умолча-
ется как обычная программа и не производит некоторых нию. Проверить это вы можете командой tunefs:
действий, которые обычно выполняются, когда sysinstall
работает в качестве init, например копирование катало- # tunefs -p /dev/ad0s2a
га /stand. Поэтому процедура установки FreeBSD на новый tunefs: ACLs: (-a) disabled
компьютер во многом аналогична процедуре создания са- tunefs: MAC multilabel: (-l) disabled
tunefs: soft updates: (-n) enabled
мой Flash и может проводиться в том же порядке, что опи- tunefs: maximum blocks per file in a cylinder group: (-e) 2048
сан в [1], за исключением того, что теперь нужно ставить tunefs: average file size: (-f) 16384
tunefs: average number of files in a directory: (-s) 64
большее количество базовых пакетов. Порядок действия tunefs: minimum percentage of free space: (-m) 8%
в этом случае таков: tunefs: optimization preference: (-o) time

! Создание разделов («слайсов») для установки FreeBSD Выделенная строка отображает состояние признака до-
(через fdisk или /stand/sysinstall). пустимости использования ACL – «disable» – запрещено,
! Создание BSD-разделов внутри слайса. Это можно сде- «enable» – разрешено. Для изменения состояния при-
лать только с помощью disklabel. Почему-то, если /stand/ знака можно использовать ту же команду tunefs такого
sysinstall работает не в качестве init, а в качестве рядовой формата:
задачи, он не в состоянии создать устройства в DEVFS.
Описание того, как с помощью disklabel создать BSD- # tunefs -a enable /dev/ad0s1a
разделы, приведено ниже.
! Создание файловых систем в BSD-разделах. Это мож- Отмечу, что команда tunefs может использоваться толь-
но сделать как с помощью newfs (пример приведен ко на размонтированных файловых системах.
в [1], в разделе «Создание»), так и с помощью /stand/ ! Значение install root задается точно так же, как это де-
sysinstall. При этом при форматировании через /stand/ лается в [1], в разделе «Создание». В качестве нового
sysinstall все BSD-разделы будут отображены как уже значения install root укажите точку монтирования разде-
отформатированные и без точек монтирования. Необхо- ла, который будет корневым в новой системе. И, пожа-
димо для каждого раздела вручную указать точку мон- луйста, не забудьте, что install root нужно задавать пос-
тирования («М») и указать, что файловая система тре- ле форматирования BSD-разделов.
бует создания («Т»). Не забудьте снять признак опере- ! Установка всех необходимых пакетов. Необходимым
жающего кэширования с раздела, который будет корне- является только пакет base, остальные на ваше усмот-
вым в новой системе – /stand/sysinstall делает это толь- рение (хотя я всегда устанавливаю compat4x, man, src
ко при задании точки монтирования «/». и ports).
! При задании точек монтирования, пожалуйста, будьте ! Шаг создания дополнительных пользователей лучше
внимательны. Если предполагаемый корневой раздел пропустить – /stand/sysinstall не умеет применять install
монтируется для установки в /mnt/s1a и предполагается root для этих целей, и вместо создания пользователя

28
администрирование
в установленной системе он будет создан на Flash. Точ-
но по такой же причине лучше пропустить шаг настрой-
ки сетевых сервисов – это все можно (и нужно) сделать
после перезагрузки уже с установленной системы. Пос- Рисунок 1. Разделы на диске, созданные по файлу примера
кольку шаг задания пароля root пропустить нельзя, за-
дайте любой пароль – этот пароль будет установлен для Если расположение разделов соответствует порядку
пользователя root на Flash. букв (a, b, c ,d , etc...), где на a: всегда корневой раздел, на
! После первой перезагрузки установленной системы b: всегда раздел подкачки, на с: всегда описатель слайса,
обязательно задайте пароль пользователя root (сейчас дальше расположение разделов произвольно – то можно
он без пароля) и настройте часовой пояс. доверить расчет границ раздела самому disklabel, соответс-
твующий пример приведен ниже.
Создание BSD-разделов вручную Поскольку в файле примера разделы не соответству-
Ранее, устанавливая FreeBSD, я был свято уверен в не- ют этому порядку (раздел подкачки идет первым), то рас-
погрешимости sysinstall и в то, что она не может допускать считаем границы разделов самостоятельно. Задаваемые в
ошибок. Это мнение переменилось, когда в одной из вер- файле цифры – это размер и смещение раздела в секторах
сий /stand/sysinstall отказывался видеть жесткие диски, ес- размером по 512 байт. 1 Гб – это 1024 * 1014 (1048576) Кб
ли их было больше одного. или 1024 * 1024 * 2 (2097152) секторов, 1 Mб – 1024 Кб или
Впоследствии нашлись и другие области, где /stand/ 2048 секторов. Эти цифры умножаются на размер разде-
sysinstall ведет себя не лучшим образом. Например, при со- ла и складываются с начальным смещением. Отсчет сме-
здании BSD-разделов, когда он запущен не как init, а как щения начинается с 0. Считаем:
обычный процесс, он не может создать устройства в DEVFS. ! Раздел a: (root) размером 200 Мб. Начальное смещение
Как следствие, создаваемый BSD-раздел не может быть 4194304, размер 409600 (2048 * 200), тип раздела 4.2BSD
смонтирован, и установка прерывается. При задании install (согласно man disklabel, тип раздела может иметь толь-
root вспомогательные шаги типа задания пароля пользова- ко значения swap, 4.2BSD и unused).
теля root всегда меняют его в /etc/master.passwd... ! Раздел b: (swap) размером 2 Гб. Начальное смещение
Мы уже использовали возможность создания BSD-раз- 0, размер 4194304 (2097152 * 2), тип раздела swap.
делов вручную при форматировании самой Flash. Но там ! Раздел с: (описатель слайса) – не редактировать!
создавался только один корневой раздел, поскольку не бы- ! Раздел d: (/usr) размером 5 Гб. Начальное смещение
ло никакой необходимости разбиения диска. Для дисков 4603904 (4194304 (размер swap) + 409600 (размер root)),
нормального объема этот путь неприемлем хотя бы пото- размер 10485760 (2097152 * 5), тип раздела 4.2BSD.
му, что в корневой файловой системе по умолчанию вы- ! Раздел e: (/var) размером 10 Гб. Начальное смещение
ключено опережающее кэширование (softupdates). Поэто- 15089664 (размер d: + размер b: + размер a:), размер
му мы будем использовать возможность disklabel восста- 20971520 (2097152 * 10), тип раздела 4.2BSD.
навливать метки дисков из текстового файла. Формат фай- ! Раздел f: (/usr/home) Начальное смещение 36061184
ла очень простой: (размеры всех предыдущих разделов, кроме c:), раз-
мер – «*». Знак «*» обозначает, что disklabel должен сам
# /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 -R -n ad0s1 ad0s1.disklabel


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

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


администрирование
успешно, то disklabel не скажет ничего. Иначе же выдаст со- ! Смонтировать корневой раздел нового диска, напри-
общения об ошибке. мер:
Все. Разделы созданы, можно переходить к их форма-
тированию и установке программ. Рекомендую, кроме то- # mount /dev/ad4s1a /mnt/s1e
го, сохранить информацию по слайсам («разделам» с точ-
ки зрения DOS) и разделам BSD, распечатать ее и хранить ! Перейти в смонтированный раздел нового диска и вы-
в непосредственной близости от сервера – это поможет полнить команду переноса данных:
восстановить случайно удаленные разделы. Сохранить ин-
формацию можно следующими командами: # cd /mnt/s1e && dump -0af - /mnt/s1a | restore -xf -

# fdisk /dev/ad0 > ad0.fdisk на единственный вопрос, который будет задан после
# disklabel ad0s1 > ad0s1.disklabel
восстановления данных, ответить «y».
Ниже приводится пример файла настроек, в котором ! Точно так же перенести все остальные разделы.
все расчеты размеров и смещений выполняются самим При этом следует иметь в виду, что переносить дан-
disklabel. Напоминаю, что такое возможно только, если раз- ные следует в порядке «углубления» точек монтирова-
делы идут в стандартном порядке: root, swap, описатель ния. Например, если на диске существуют разделы /,
слайса, прочие разделы. /usr, /var и /usr/home, то ./usr/home должен переносить-
ся после /usr. Примерный расчет затрат времени таков:
# /dev/ad2s1: на компьютере Intel Celeron 2533/512 RAM на перенос
8 partitions:
# size offset fstype [fsize bsize bps/cpg] данных с полностью забитого жесткого диска Seagate
a: 200M 0 4.2BSD 60 Гб UATA100 на жесткий диск Seagate 80 Гб SATA уш-
b: 2G * swap
c: * * unused 0 0 # «raw» part, ло 3 часа (не считая времени на подготовку).
d: 5G * 4.2BSD
# don’t edit ! Выключить компьютер, убрать Flash, отключить ста-
e: 10G * 4.2BSD рый диск и подключить новый так, чтобы при загрузке
f: * * 4.2BSD он получил то же самое имя устройства, что было у ста-
рого (например, при замене обычного жесткого диска
При этом можно использовать буквы M и G для зада- на диск Serial ATA в BIOS существует возможность на-
ния размера соответственно в мега и гигабайтах, а также строить отображение SATA на IDE).
символ «%» для задания размера в процентах от общего
объема диска. Использование Flash-диска
для контроля целостности файлов
Использование Flash-диска на жестком диске
для переноса данных на диск В [3] описан скрипт для проверки целостности файлов на за-
большего размера раженных или поврежденных машинах. Несмотря на оче-
Все мы рано или поздно сталкиваемся с проблемой разде- видную параноидальность данного скрипта, в нем есть
лов жесткого диска, заполненных нужной и ценной информа- один недостаток – ядро пораженной системы все же ис-
цией и полным нежеланием переустанавливать систему, не- пользуется, то есть при большом желании можно повлиять
смотря на то что [2] рекомендует именно этот метод для пе- на процесс проверки. Если же сначала загрузиться с Flash,
реноса данных на новый жесткий диск большего размера. а потом установить носитель с базами AIDE или даже поп-
Тем не менее, там же приводится небольшое описание то- росту объединить их (при наличии достаточного места на
го, как можно, не переустанавливая систему, перенести ее Flash), то от этого недостатка можно избавиться. При этом
на новый жесткий диск большего размера. Но данная инс- можно вообще не использовать AIDEStart, основная зада-
трукция приведена в расчете на то, что загружена система ча которого – функционирование на зараженной машине.
со старого диска, а это не всегда желательно. Для этого мож- Достаточно установить пакет aide на Flash, на ней же раз-
но воспользоваться Flash-диском, для чего достаточно: местить базы с контрольными суммами с примонтирован-
! Загрузиться с Flash. Допустим, /dev/ad0 – старый диск, ных разделов дисков (при этом не забывайте, что монти-
а /dev/ad4 – новый диск. ровать их нужно будет постоянно в одно и то же место),
! Прописать в /etc/fstab все разделы старого диска (на и запускать операции проверки, обновления или сравне-
всякий случай пометив их «noauto»). ния как обычно.
! Создать на новом диске раздел («слайс») типа FreeBSD По такому же принципу можно построить и антивирус-
(через /stand/sysinstall, fdisk, любой менеджер разделов). ную проверку дисков.
! Создать разделы BSD внутри слайса так, как они долж-
ны быть расположены (через disklabel, так как описано Для чего нам нужен DOS?
выше) и отформатировать их (через newfs или /stand/ Кратко перечислю возможные применения Flash-диска с за-
sysinstall). груженным DOS:
! Смонтировать корневой раздел старого диска, напри- ! О MHDD я уже упоминал. Лучшей программы для диа-
мер: гностики и восстановления (программного, разумеется)
дисков я еще не встречал. На диске установлена пос-
# mount /dev/ad0s1a /mnt/s1a ледняя на тот момент версия программы 3.0 (безнадеж-

30
администрирование
но устаревшая сейчас, с выходом версии 4.6). Скачать # disklabel -w ad0s1
свежую версию можно на [4] и [5]. Находится в катало-
ге C:\UTILS. при этом будет создан описатель слайса и один раздел
! Программа для настройки менеджера загрузок xFDisk. а: размером во весь слайс, после чего можно перераз-
Как видно из названия, она предназначена для настрой- бить слайс по своему усмотрению. Никакого формати-
ки xFDisk, который используется в качестве менедже- рования при этом не выполняется.
ра загрузок. С ее помощью можно настраивать как ме- ! Если при запуске dump появляется сообщение о не-
неджер загрузок xFDisk самой Flash, так и любого дру- известном типе файловой системы, то, значит, точка
гого диска. Находится в каталоге C:\UTILS\XFDISK. монтирования, указанная в команде dump, не описа-
! Ranish Partition manager. Упомянутый в первой части ста- на в /etc/fstab.
тьи менеджер разделов. Простенький, но в то же время ! Если при операции проверки по базе aide, размещен-
понятный интерфейс. Имеет собственный менеджер за- ной на Flash, фиксируются значительные отличия в ви-
грузок, который тем не менее не работает. Находится де массовых удалений файлов в одном месте и добав-
в каталоге C:\UTILS\RANISH. лений в другом – проверьте правильность точек монти-
! Оригинальный менед жер разделов из поставки рования – вы могли случайно смонтировать, например,
FreeBSD – BootEasy. Если не работает ничего – поп- в /mnt вместо /mnt/disk1.
робуйте BootEasy! Правда, он навевает воспоминания ! Если при попытке задания ACL для файла на совершен-
о терминалах СМ ЭВМ и их знаменитых меню... Нахо- но правильную команду выдается такой ответ:
дится в каталоге C:\UTILS\BTEASY.
! Norton Utilites 8.0. Здесь не нужно много слов, про это вы # setfacl -m u::rwx /tmp
и так все знаете. Несмотря на то, что на Flash присутс- setfacl: acl_get_file() failed: Operation not supported
твует полный комплект утилит, вряд ли он вам полно-
стью понадобится. Наиболее ценным является, конеч- значит, у данной файловой системы отсутствует при-
но, Disk Editor, ну и, может быть, Norton Cache. Находит- знак допустимости использования ACL. Следует раз-
ся в каталоге C:\NORTON8. монтировать файловую систему и включить отсутству-
! На диске еще достаточно места, чтобы поместить туда ющую возможность: как показано в разделе «Исполь-
любую программу для конфигурации любого оборудо- зование Flash-диска для установки FreeBSD».
вания, для перешивки BIOS и тому подобных «тонких»
операций, не переносящих никаких препятствий меж- Заключение
ду программой и оборудованием. Теперь, Flash-диск, созданный нами, занял свое место в сто-
ле, сервер, на который с его помощью была установлена
Возможные ошибки FreeBSD, перенесены данные со старых дисков, а также об-
Помните, что: новлен BIOS, почему-то оказавшийся предпоследней вер-
! sysinstall, работающий в режиме обычной программы, сии – законное место в стойке... Разумеется, круг задач,
не создает устройства в /dev. Поэтому создавайте BSD-раз- для решения которых можно было бы использовать Flash-
делы только через disklabel, а не через /stand/sysinstall. диск, не исчерпывается теми, что были перечислены вы-
! При генерации пароля root, при создании дополнитель- ше – каждый, кому хоть раз доводилось создавать загру-
ных пользователей и при настройке часового пояса зочные дискеты с DOS, наверняка сможет назвать как ми-
sysinstall всегда изменяет конфигурационные файлы нимум еще одну. Но теперь эти дискеты вместе с CD-ROM
в /etc/master.passwd, а не в том месте, которое вы ука- дисками и приводами для них можно разместить на почет-
зали на экране опций. ной нижней полке сейфа, куда добираешься только в очень
! Указывать Install Root следует после того, как были со- редких случаях. Загружаемый USB Flash диск – это простое
зданы файловые системы. Во время создания файло- решение проблем с «нечитающимися» дискетами, поцара-
вых систем они монтируются в те точки, которые зада- панными дисками, крайне малой емкости первых и невоз-
ются на экране FreeBSD Disklabel editor, так что если вы можности модификации вторых.
зададите Install Root в самом начале, то созданные фай-
ловые системы будут смонтированы, например, в /mnt/ Литература и ссылки:
tmp/mnt/tmp вместо /mnt/tmp. 1. Ачилов Р. Создаем загружаемый Flash-диск с FreeBSD и DOS.
! Если при запуске disklabel, он вдруг сообщает: Часть I. – Журнал «Системный администратор», №9, сентябрь
2005 г. – 32-40 с.
# disklabel ad0s1 2. http://www.freebsd.org/doc/ru_RU.KOI8-R/books/faq/disks.
disklabel: No valid label html#NEW-HUGE-DISK
3. Ачилов Р. Управляем удаленными базами AIDE. Часть II –
это всего лишь означает, что данный раздел (в терми- AIDEStart. – Журнал «Системный администратор», №9, сен-
нологии DOS) создавался не через /stand/sysinstall, ко- тябрь 2005 г. – 28-30 с.
торый при создании раздела FreeBSD («слайса») сразу 4. http://files.hddguru.com/index.php – архив программного обес-
создает в нем описатель слайса (раздел с:), а другими печения для низкоуровневой работы с жестким диском.
средствами. Достаточно просто записать в такой раз- 5. http://mhdd.com – сайт программы MHDD. К сожалению, пока
дел «метку по умолчанию»: не оправился после недавней гибели.

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


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

Блокируем внешние устройства


с помощью GFI LANguard P.S.C.

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

Н
есмотря на то что пользова- чество ссылок на такие программы, зователя (user access control) локаль-
тель может выносить инфор- отличающиеся возможностями и ли- ный или централизованный, в том чис-
мацию и с благими намерения- цензией. Сегодня пойдет речь о GFI ле с использованием Active Directory
ми, например, чтобы доделать работу LANguard Portable Storage Control, про- (рис. 1). Дополнительно можно создать
на дому, все равно такие случаи долж- дукте компании GFI Software Ltd, из- группы контроля, позволяющие более
ны полностью контролироваться. Ина- вестной своими разнообразными ре- гибко определять доступ к различ-
че важная информация может случай- шениями, предназначенными для за- ным классам устройств (GFI_LPSC_
но оказаться у конкурентов. События щиты информации. REMOVABLE, GFI_LPSC_CDDVD, GFI_
последних лет, когда проводки банков LPSC_FLOPPY). Интересно, что в зави-
можно свободно приобрести в Интер- Использование симости от настроек программы поль-
нете, подтверждают, что это не при- GFI LANguard P.S.C. зователям, входящим в эти группы, мо-
зрачная, а вполне реальная угроза. Для управления доступом на ком- жет как предоставляться, так и запре-
Поэтому наряду с организационными пьютере устанавливается автоном- щаться доступ. То есть если необхо-
мероприятиями (в первую очередь это ный агент. Он занимает в ОЗУ 1.2 Мб, димо ограничить большинство поль-
запрет использования таких устройств и о его наличии пользователь, скорее зователей, то указываются только те,
на рабочем месте) необходим полный всего, знать не будет. Для удобства которым он разрешен. Но если, напри-
контроль за работой таких устройств. развертывания в больших сетях в дист- мер, в интернет-кафе необходимо за-
В большинстве случаев их физичес- рибутив включен специальный инстру- крыть доступ только для учетной за-
кое отключение не всегда приемлемо. мент, позволяющий удаленно устано- писи «Гость», то удобнее поступить
Например, оборудование может требо- вить агентов несколькими щелчками наоборот.
ваться при переносе подготовленных мыши. Во время установки выбира- Теперь, когда пользователь регист-
презентаций или системный блок на- ется вид управления доступом поль- рируется в системе, агент производит
ходится на гарантии. Некоторые спе-
циалисты просто отключают серви- Политика безопасности компании долж- ! установить стандарты антивирусной
сы «Plug and Play», «Bluetooth Support на: защиты и защиты от шпионских про-
Service», «Windows Installer», «Службу ! определить, кто из служащих будет до- грамм для сотрудников, использую-
COM-записи компакт-диском IMAPI», пущен к использованию переносных щих домашние или любые другие вне-
«Смарт-карт» и «Съемные ЗУ» или ус- устройств хранения информации; шние компьютеры;
тройства через BIOS. Но такой подход ! какую информацию им разрешено со- ! установить стандарты парольной за-
все равно не будет оптимальным выхо- хранять на этих устройствах; щиты и шифрования данных;
дом из положения и требует в том чис- ! провести инвентаризацию всех исполь- ! установить процедуру уведомления
ле физического присутствия админис- зуемых переносных устройств; обо всех незаконных использованиях
тратора. Поэтому более удобным явля- ! установить правила для посетителей, таких устройств, а также в случае по-
ется блокировка устройств при помо- в том числе использующих свои ус- тери или кражи устройства, в том чис-
щи специализированных утилит. По- тройства при проведении презента- ле предусмотрев возможное сокрытие
иск в Интернете даст большое коли- ций; этой информации.

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

Рисунок 2. GFI LANguard P.S.C. имеет простой и понятный


Рисунок 1. Программа может использовать Active Directory интерфейс

опрос Active Directory или локальных ! Выводимое имя – Иван Иванович. рес отдельного компьютера, либо це-
настроек на предмет наличия у него ! Имя объекта – accounting_computer. лой сети, можно использовать и пред-
разрешений, позволяющих работать ! Имя пользователя – chief. варительно записанные в файл адре-
с устройствами. Если пользователь ! Имя объекта и имя домена – chief@su- са. Во время первой установки выби-
не является членом соответствующей percompany.com или supercompa- раем «Deploy the GFI LANguard P.S.C.
группы, доступ будет блокирован. ny.com\chief. control access agent(s)». При работе
На сайте проекта [1] доступна с агентами по умолчанию использу-
полнофункциональная версия GFI Если необходимо указать сра- ются текущие регистрационные дан-
LANguard P.S.C., которая становит- зу несколько объектов, прописываем ные пользователя, при необходимос-
ся freeware по истечении 30-дневно- их через точку с запятой. Для удобс- ти здесь же можно указать индивиду-
го срока или если не введен 60-днев- тва во вкладке «Дополнительно» реа- альные логин и пароль. Для того что-
ный тестовый ключ. Последний будет лизована возможность поиска пользо- бы изменения вступили в силу уда-
автоматически прислан на ваш почто- вателей в указанном месте. Для про- ленный компьютер следует перезаг-
вый ящик. Свободная версия позволя- верки правильности ввода имен объ- рузить. В отдельном окне можно на-
ет полноценно контролировать работу ектов воспользуйтесь кнопкой «Про- писать сообщение, которое будет вы-
устройств только на 5 компьютерах. верить имена». В последнем случае ведено на экран перед перезагрузкой.
Учитывая, что большинство имеющих- будут выведены неправильно введен- После нажатия кнопки Start запустится
ся свободных утилит работают только ные имена, и утилита предложит ис- процесс установки агентов, по оконча-
с одним компьютером, удаленное уп- править информацию либо удалить нии которого будет выведен их список.
равление является несомненным плю- неправильный объект из списка. Пос- В дальнейшем при обновлении пара-
сом GFI LANguard P.S.C. Для свободной ле выбора всех объектов указываем, метров агентов следует использовать
версии не доступна официальная под- какое действие должен предпринять пункт «Update configuration settings of
держка компании, только user-to-user агент при попытке получения доступа the GFI LANguard P.S.C. control access
на форуме http://forums.gfi.com. к устройству. Установка флажка в пун- agent(s)».
Системные требования Windows кте «Allow only the users and members Как видите, GFI LANguard P.S.C. яв-
2000/2003 или XP. Естественно, поль- of the groups below to access the device» ляется простой в настройке програм-
зователь не должен иметь на локаль- позволит выбранным пользователям мой с хорошей функциональностью.
ном компьютере привилегий админис- и группам получить доступ к устройс- А возможность бесплатного примене-
тратора, иначе ему ничего не стоит тву. Если же, наоборот, требуется, что- ния в маленьких (до 5 компьютеров)
убить процесс в списке задач. бы перечисленные объекты не могли сетях делает ее ценным инструмен-
Программа имеет простой и по- получить доступ к устройству, выбира- том для небольших организаций или
нятный интерфейс (рис. 2). Слева на- ем «Allow all users except the users and удаленных офисов.
ходится «Tools Explorer», при помо- members of the groups below to access
щи которого выбираются устройства, the device». Настройки сохраняются Литература, ссылки:
справа выводятся доступные опции. в зашифрованном файле, который те- 1. Сайт проекта GFI LANguard Portable
Для того чтобы настроить доступ к ус- перь необходимо передать на осталь- Storage Control – http://www.gfi.com/
тройству, находим его в списке и вни- ные компьютеры. lanpsc.
зу появившегося окна нажимаем кноп- Для этого переходим к пункту 2. Бешков А. DeviceLock. – Журнал «Сис-
ку Add. Теперь выбираем тип объекта, «Tools – Deploy GFI LANguard P.S.C. темный администратор», №3, 2004 г. –
его местонахождение и имена объек- agents tool», указываем компьюте- 38-41 с.
тов. В качестве последнего можно ис- ры, на которых будет устанавливать- 3. FreeWare утилита Lock and Go – http://
пользовать: ся агент. Здесь вводим либо IP-ад- www.lockngo.com/products/lockngo.

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


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

Linux/BSD как бастион


на пути вирусов

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

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

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

П
очему Windows NT небезопас- К тому же Windows очень стреми- равно придется менять, попутно об-
на? Почему в ней обнаружи- тельно развивается и содержит массу новляя «железо», что выливается в со-
ваются все новые и новые ды- избыточного, никому не нужного ко- лидные расходы и вызывает множес-
ры? Вопрос абстрактный, но мы все- да, который не так-то просто удалить тво проблем от необходимости обуче-
таки постараемся дать на него от- из системы или хотя бы просто отклю- ния персонала до «старые программы
вет. Начнем с того, что умных людей чить. Причем развитие идет по при- не запускаются».
в Microsoft осталась не так уж и много, нципу «не трогаем того, что написали, Про то, что заплатки занимают ог-
налицо явная текучка кадров. Опыт- а набрасываем сверху еще и еще». Как ромный объем и для их перекачки не-
ные специалисты покидают «империю следствие, количество связей меж- обходимо иметь по меньшей мере
зла» и уходят в другие компании. До- ду отдельными компонентами систе- DSL-модем, мы промолчим. К тому же
статочно вспомнить памятный скандал мы лавинообразно нарастает, а вре- реально воспользоваться Windows
с менеджером, в которого Стив Балмер мени на тестирование нет, и продукт Update все равно не удастся. Заду-
зашвырнул креслом (от такого руково- выбрасывается на рынок таким как майтесь, что произойдет, если опера-
дителя я бы и сам ушел) – http://www. есть. Кража исходных текстов Windows ционная система упадет? Ведь пос-
cnews.ru/news/line/index.shtml?2005/09/ 2000 только подлила масла в огонь. ле установки с дистрибутивного дис-
06/186136 и http://russian.joelonsoftware. Они есть практически у каждого хаке- ка выходить в Интернет и качать за-
com/Articles/HowMicrosoftLosttheWaron ра, но отсутствуют у легальных специ- платки ни в коем случае нельзя, ведь
A.html – последний источник рассказы- алистов по безопасности, а это, значит, в эти минуты наш узел совершенно
вает о переменах, происходящих внут- что игра идет в одни ворота. Хакеры беззащитен перед хакерами, а веро-
ри Microsoft, и деградации операцион- ищут дыры, а специалисты вынуждены ятность атаки не так уж и мала, осо-
ной системы. лишь признавать их постфактум. бенно если вспомнить про червей, ко-
Падение культуры программирова- Вместо того чтобы вылизывать сис- торые стучатся во все компьютеры
ния легко проследить с помощью ди- тему и работать над ее улучшением, подряд. Теоретически можно скачать
зассемблера. Если MS-DOS 6.x еще со- Microsoft несется вперед, предлагая заплатки в виде отдельных файлов,
держала огромное количество ассемб- новые революционные решения, ко- сохранив их на любом носителе, но…
лерного кода, а Windows 95 представ- торые даже она при своих миллиард- тогда придется разбираться в них са-
ляет собой настоящий шедевр опти- ных доходах просто физически не в со- мостоятельно, а это не так-то просто,
мизации (без всякой иронии!), запрог- стоянии отладить. Так что количество поскольку заплатки содержат зависи-
раммированный на смеси ассемблера дыр в последующих версиях Windows мости и абы как не встают или встают,
с чистым Си, то в Windows 98 уже до- сокращаться не собирается, и хакерс- но не работают.
минирует Си++, «мастера» и прочие тво будет только процветать. Как в этих Исчезает самое главное преиму-
автоматические кодогенераторы, за- условиях хранить и обрабатывать кон- щество Windows – простота управле-
менившие живой ум. Windows NT 4.x фиденциальные данные, не говоря уже ния. Воздвигнуть NT-сервер и оставить
(которая, как известно, создавалась про «электронные кошельки», кража его без присмотра сегодня уже не по-
приблизительно в то же самое время, которых в последнее время принима- лучится. Если только не нанять адми-
что и Windows 95, только другим кол- ет массовый характер? нистратора, разбирающегося в безо-
лективом программистов) – это блес- Служба поддержки Microsoft от- пасности, с высокой степенью вероят-
тяще оптимизированная, хотя и слиш- вечает – регулярно устанавливайте ности сервер будет взломан. Тоже са-
ком навороченная система, запрог- на компьютер свежие заплатки, кото- мое относится и к домашним машинам.
раммированная руками и головой, но рые и так устанавливаются службой Вирусы так и прут! Они создают излиш-
в Windows 2000 и тем более XP уже до- Windows Update. Предложение, конеч- ний трафик, воруют пароли и другую
минирует Си++ и «мастера». Програм- но, заманчивое, но… заплатки выпус- секретную информацию или просто
мисты старого поколения так не посту- каются не мгновенно и только для уже нарушают нормальную работу опера-
пают! Вывод – все это писали новички, известных дыр. Для домашнего ком- ционной системы, вызывая сбои и за-
со всеми вытекающими отсюда пос- пьютера такая степень защищеннос- висания, убытки от которых зачастую
ледствиями. В дизассемблере код вы- ти вполне подходит, да и то… Только весьма значительны. Давайте посмот-
глядит просто ужасно. Поражает даже представьте, сколько электронных де- рим, что в этой ситуации можно пред-
не тяжеловесность, а… «рассосредо- нег сможет утащить хакер, если он на- принять…
точенность» кода, тонким слоем раз- пишет вирус прежде чем будет выпу-
мазанного по куче функций. В част- щен «патч»? А для фирмы захват сер- По ту сторону барьера
ности, никакой единой функции пере- вера вообще может стать фатальным. Анализ ситуации позволяет выявить
ключения контекста в Windows NT нет! Причем заплатки выпускаются не бес- три основных объекта атаки. Первый
SwitchContext – это только малая часть, конечно, а только в течение так назы- и наиболее коварный – это атака на са-
весь остальной код размазан по все- ваемого «жизненного цикла продук- му операционную систему или ее ба-
му ядру, регистры многократно сохра- та», определяемого самой Microsoft. зовые службы, которые в большинстве
няются/восстанавливаются в разных В практическом плане это означает, случаев реализуются через перепол-
местах, делается куча проверок на до- что даже если старая операционная нение буферов. Ошибки были обнару-
пустимость их значений и т. д. Сетевые система полностью удовлетворяет на- жены как в фундаментальных драйве-
компоненты выглядят еще хуже. шим скромным потребностям, ее все рах (например, TCPIP.SYS), так и в при-

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


безопасность
кладных службах (например, DCOM), тный Outlook Express негласно исполь-
без которых в принципе можно и обой- зует IE для отображения HTML-писем,
тись, но не всегда легко отключить которые являются идеальным средс-
через пользовательский интерфейс. твом атаки, и множество червей рас-
Причем, если дыры в прикладных пространяются именно так.
службах элементарно закрываются Третья и последняя мишень – сам
брандмауэром (конечно, при условии, человек, клюнувший на предложение,
что без этой службы действительно «от которого нельзя отказаться», и за-
можно обойтись), то атакам на драйве- пустивший исполняемый файл (за-
ра брандмауэры противостоять прак- частую замаскированный под графи-
тически не в силах (ну разве что это ческую картинку или что-то другое). Рисунок 1. Локальная сеть небольшой
будет специальным образом спроек- Ну что тут можно сказать? Теорети- организации с одним выделенным
тированный брандмауэр, которых нет чески достаточно строго-настрого за- компьютером-бастионом
и навряд ли когда будут). Антивирусы претить всем пользователям запускать ведь вирусы имеют тенденцию зара-
и прочие защитные системы подобного что бы то ни было, скачанное из сети жать все, к чему прикасаются…
типа здесь также бессильны. Да, они или полученное по электронной поч- Хорошо, цели атаки определены.
ловят вирусы, но только если знают те, только ведь все равно они будут ка- Будем строить оборонительные со-
о них. Нашумевших вирусов не так уж чать и запускать. За всеми не уследишь оружения!
и много, и все чаще и чаще приходит- и не остановишь! Организационные
ся сталкиваться с локальной заразой, меры уже доказали свою неэффек- Среди пингвинов
обитающей в ограниченном ареале тивность, и проблему можно решить Некоторые организации предпринима-
и исчезающей, прежде чем разработ- только техническим путем. Самое про- ют попытки полного перехода на Linux/
чики антивирусов узнают о ней. Единс- стое – запускать FireFox и Thunderbird BSD, однако при этом возникает боль-
твенным способом обороны остаются из-под специального пользователя, шое количество труднопреодолимых
заплатки, но они недостаточно эффек- с минимальными правами, не имею- проблем. Далеко не для всего обору-
тивны в силу уже упомянутых причин. щего доступа ни к каким файлам, кро- дования можно найти драйвера. Даже
Другая популярная мишень – брау- ме файлов самой программы. И хотя если данная видеокарта или другое ус-
зер. Слово «Интернет» уже давно ста- в Windows уровень привилегий легко тройство входит в список поддержива-
ло синонимом «IE», и атакуют преиму- может быть повышен в обход всех за- емого железа, далеко не факт, что со-
щественно его. Несмотря на то что IE щит, подавляющее большинство атаку- ставитель дистрибутива действитель-
поддерживает целый комплекс мер ющих программ до этого еще не дорос- но протестировал ее и она согласит-
безопасности, он ломается без осо- ли, и такая мера достаточно эффектив- ся работать как надо. На многие ска-
бых проблем. В лучшем случае атаку- на. А вот пример неверного, но весьма неры и другую периферию драйверов
ющий берет под контроль только сам популярного решения – ставим вирту- вообще нет.
IE, в худшем же – захватывает всю опе- альную машину с Windows, устанавли- В Linux / BSD все не так, как в
рационную систему. Достаточно зайти ваем на ней Лиса с Птицей и связываем Windows, и пользователей приходит-
на страницу, содержащую зловредный виртуальной сетью с основной маши- ся переучивать, но кто их будет пере-
код и… Самое неприятное, что такой ной. На первый взгляд – все прекрас- учивать? И кто будет нести расходы?
код может содержаться даже на «пре- но. Атакующий может воздействовать А если приходит новый сотрудник?
стижных» сайтах, например, в госте- на браузер, но из застенков виртуаль- К тому же Star Office – это все же сов-
вой книге, в которую могут писать все ной машины он никуда не выберется, а сем не Microsoft Office, и хотя он может
желающие и которые далеко не всег- там все равно нет ничего интересного, открывать некоторые Office-докумен-
да выполняют качественную фильтра- кроме кэша браузера, и еще, быть мо- ты, реально с ним работать невозмож-
цию HTML-содержимого. Жесткая на- жет, почтовой базы, которую в принци- но (разве что из горячей любви к Linux
стойка политик безопасности до неко- пе можно расположить и на отдельной или отсутствию альтернативы).
торой степени уменьшает вероятность виртуальной машине, благо в VMWare Наконец практически на любом
успешной атаки, но не исключает ее между ними легко переключаться. Про- предприятии так или иначе использу-
полностью. Большинство дыр (таких, блема в том, что если основная машина ются специализированные программы,
например, как переполнение буфера доступна по виртуальной сети (а если как правило написанные на DELPHI
при обработке bmp-файлов) остаются она не будет доступна, то как прикаже- и не имеющие прямых аналогов в ми-
открытыми и устраняются только за- те выходить в Интернет?), атакующая ре Linux. Теоретически их можно пере-
платками, про проблемы которых мы программа сможет воздействовать на нести и на другие платформы, но фир-
уже говорили. Установив альтерна- основную операционную систему, че- мы-разработчики пока не видят в этом
тивный браузер (например, FireFox), рез имеющиеся в ней дыры, так что та- никакого смысла, поскольку Linux-ры-
мы будем практически полностью за- кая схема все равно не очень надежна, нок еще не сложился.
страхованы от подобных атак, одна- хотя большинство распространенных Хотим ли мы того или нет, но от-
ко вместе с браузером еще потребу- вирусов она отсекает сразу, только не- казаться от использования Windows
ется другой почтовый клиент (напри- обходимо следить, чтобы на виртуаль- на рабочих станциях пока невозмож-
мер, Thunderbird), поскольку стандар- ной машине не образовался «зоопарк», но. Примем это как факт и подума-

36
безопасность
ем, как все-таки ее защитить. Серве- (достаточно просто установить proxy-
ра в этом плане чувствуют себя намно- клиента), и программы, не умеющие
го лучше, и Linux-сервер – вполне нор- работать через HTTP-proxy, скорее
мальное решение, хотя BSD все-таки всего заработают через SOCKS, од-
более предпочтительна, хотя на этот нако не все. Ведь proxy – это все-таки
счет имеются разные мнения. proxy, со всеми вытекающими досто-
инствами и ограничениями. Внешние
Схемы построения подключения запрещены (точнее – не-
защитного бастиона возможны), и если только не устроить
Рассмотрим для начала сеть неболь- трансляцию портов специально, ата-
шой организации с десятком кли- кующий не сможет увидеть ни одно-
ентских машин и одним выделенным го клиентского узла! (Однако необ- Рисунок 2. Локальная сеть небольшой
компьютером – сервером. На кли- ходимо помнить, что от атак на при- организации с двумя выделенным
компьютерами-бастионами
ентские машины лучше всего пос- ложения, например, на браузер, proxy
тавить Windows 2000/XP с FireFox не защищает.) В принципе можно установить и не-
и Thunderbird, запущенными из-под на- Предложенная схема (см. рис. 1) сколько серверов, соединив их после-
именее привилегированного пользова- отличается высокой надежностью довательно друг с другом. Внешний
теля без прав доступа ко всем файлам, и простотой управления. Современ- сервер «видит» только своего внут-
кроме файлов программы (хотя лич- ные дистрибутивы Linux/BSD ставят- реннего собрата, и локальная сеть ему
но я из браузеров предпочитаю кон- ся из «коробки» не хуже, чем Windows, недоступна (см. рис. 2). Если на од-
сольный links, который очень надежен и с настройками по умолчанию работа- ном из серверов будет стоять Linux,
в плане безопасности, но устанавли- ют вполне достойно. Времена колдовс- а на другом BSD, то хакеру, чтобы про-
вать его на компьютер секретарши мо- тва и плясок с бубном уже прошли. Ко- никнуть в локальную сеть, придется
жет только администратор-садист). На нечно, гуру тут же скажут, что все это взломать сразу обе системы, что до-
сервере устанавливается любая UNIX- ерунда и настройки по умолчанию не- вольно затруднительно, если не ска-
подобная операционная система (Linux правильны/небезопасны/непроизво- зать маловероятно. Proxy-сервер мож-
или BSD), поднимается HTTP-proxy и дительны. На то они и гуру. Их хлеб – но ставить как на внешнем сервере
либо собственный почтовый сервер, темные магические ритуалы, после (а на внутреннем поднимать NAT), ли-
либо транслятор портов, либо бранд- которых система буквально преобра- бо, наоборот, прятать proxy за внешним
мауэр уровня приложений, играющий жается, только вот… жизненно важ- сервером, на котором стоят NAT плюс
роль POP3/SMTP-proxy. Впрочем, про- ной необходимости в этом нет. Дыры брандмауэр.
стейший proxy для почты можно напи- в Linux/BSD практически отсутствуют Каждое решение имеет свои силь-
сать и самостоятельно – он не займет (во всяком случае в новых сборках, ные и слабые стороны, но все-таки луч-
и сотни строк на C/Perl. скачанных с официального сервера, ше размещать proxy на внешнем сер-
Полноценный выход в Интернет а не купленных в ближайшем ларьке) вере и вот почему: если в нем вдруг
клиентским машинам лучше всего и настройки по умолчанию в послед- окажется дыра (а она там окажет-
не давать, поскольку в этом случае нее время стали вполне продуманны- ся) и хакер захватит контроль над уз-
они могут быть легко атакованы из- ми. Во всяком случае BSD-сервер да- лом, его остановит внутренний сер-
вне. А вот работа через Linux/BSD- же в штатной конфигурации защищен вер. Напротив, NAT сам по себе никак
бастион на основе proxy-сервера поз- намного лучше, чем Windows. Мно- не защищает внутренний proxy от атак
воляет отказаться от установки за- гие организации именно так и посту- (ну, практически не защищает), и если
платок на Windows-машины, посколь- пают. На внешний сервер ставят BSD хакер сумеет его взломать, он тут же
ку теперь их можно атаковать только (или Linux), а на внутренние машины – получит доступ во внутреннюю сеть,
изнутри сети, а против внутрисегмен- Windows 98, Windows XP и т. д., так что в которой находятся слабо защищен-
тных атак даже залатанные системы в этом решении нет ничего нового или ные машины с Windows!
все равно незащищены. экзотического. А вот веб-сервер (если он только
Как вариант можно установить Кстати говоря, львиная доля дыр есть) лучше всего разместить на вне-
SOCKS-proxy сервер (подобнее об этом Linux/BSD-серверов приходится от- шнем сервере, ни в коем случае не сов-
можно прочитать в статье «Универ- нюдь не на саму операционную сис- мещая его с тем узлом, который име-
сальный прокси-сервер» Валенти- тему, а на установленное поверх нее ет доступ во внутреннюю сеть. Веб-
на Синицына, опубликованной в фев- программное обеспечение – Sendmail, сервер – это очень-очень сложный аг-
ральском номере «Системного Адми- Apache и т. д. Это сложные програм- регат, в нем неизбежно присутствуют
нистратора» за 2005 год) и предоста- мные комплексы, содержащие огром- ошибки, и потому веб-сервера лома-
вить клиентам практически полноцен- ное количество строк исходного кода, ют чаще всего!
ный доступ в Интернет. Взаимодейс- в которых запутались даже сами разра-
твие через SOCKS-proxy снимает мно- ботчики. Их очень сложно настраивать Домашние сети –
гие проблемы. Так, например, не тре- и еще сложнее отлаживать. Чем «лег- проблемы и решения
буется специальная настройка кли- че» будет proxy-сервер, тем меньше ве- Для дома или мелкого офиса выде-
ентского программного обеспечения роятность, что в нем будут дыры. лять одну из машин в отдельное «де-

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


безопасность
лопроизводство» чаще всего сем немного памяти, Windows
неприемлемо, хотя собрать работает на «живом» обору-
сервер на основе устаревше- довании с полной скоростью,
го оборудования, оставшего- самоотверженностью и отда-
ся от апгрейда, может прак- чей, а защищенность ничуть
тически каждый. Linux/BSD- не хуже, чем в случае выде-
серверам не нужен монитор, ленного компьютера. Захва-
а при желании можно обой- тывающие перспективы, не
тись и без жесткого диска, правда ли? Но обо всем по
в результате чего расходы порядку!
на безопасность окажутся не Для начала нам потре-
так уж и велики, тем более что буется выбрать эмулятор.
домашняя сеть из 2-3 машин Это должен быть очень быст-
уже не редкость, а норма, так рый эмулятор, к тому же под-
почему бы не поставить еще держивающий виртуальную
одну машину, не установить Рисунок 3. Настройка PPP-соединения с помощью программы KPPP
сеть, достаточно надежный в
на нее LINIX/BSD и не попро- работе и по возможности де-
бовать себя в роли администратора? эмулятор (Linux/BSD) → Windows (се- шевый, впрочем, учитывая специфику
Но давайте все-таки исходить тевые компоненты). российского рынка, цена продукта не
из того, что компьютер у нас один, Первый способ наиболее очевиден, является решающим фактором, осо-
причем это далеко не самый мощный но он не обходится без проблем. Во- бенно для домашних сетей.
компьютер (например, P-III), и поку- первых, для достижения приемлемой Классический выбор – это, ко-
пать еще один мы не можем/не хотим, производительности мы должны иметь нечно же, VMWare, достойных конку-
предпочитая использовать виртуаль- довольно мощный компьютер и много рентов которому пока не наблюдает-
ные машины. оперативной памяти, что противоречит ся. Единственный недостаток – вир-
Возможных вариантов построе- условиям задачи, во-вторых, Windows, туальная сеть достаточно сложно на-
ния сети всего два – установить на ос- запущенная из-под эмулятора, не име- страивается, и неспециалистам при-
новную машину Linux/BSD, запуская ет прямого доступа к оборудованию ходится попотеть, прежде чем она за-
Windows под эмулятором или, наобо- и это оборудование не может реали- работает. Остальное никаких проблем
рот, запихать Linux/BSD в эмулятор зовать свой функционал, а зачастую не вызывает. Устанавливаем эмуля-
и предоставить ей прямой доступ в Ин- отказывается работать вообще! тор, создаем новую виртуальную ма-
тернет в обход Windows. Тогда выход Второй способ всех этих недостат- шину с настойками по умолчанию, вод-
в сеть будет осуществляться по сле- ков лишен. Ему не нужен высокопроиз- ружаем на нее Linux или BSD, а затем
дующей схеме: компьютер (железо) → водительный (а, значит, весьма доро- даем ей доступ к физическому обору-
Windows (несетевые компоненты) → гостоящий) процессор и требуется сов- дованию.
Если выход в Интернет осущест-
QEMU как альтернатива sourceforge.net), но работающий в десятки вляется через Dial-Up по COM-модему,
VMWare раз быстрее его и ничуть не уступающий заходим в настройки виртуальной ма-
VMWare – это замечательный эмулятор, VMWare по производительности (а на не- шины («VM → Setting») и открываем до-
главные и, пожалуй, единственные недо- которых задачах даже обгоняющий ее), ступ к физическому порту, на котором
статки которого – высокая стоимость ($200 совершенно бесплатный, портированный «висит» модем («Hardware → Add →
по текущему прайсу) и отсутствие исход- под множество платформ (и Linux/BSD/ Serial Port → Use physical serial port on
ных текстов. За эти деньги можно свобод- Windows в том числе), имеющий кучу раз- the host → COMx»). Причем VMWare ви-
но купить подержанный компьютер без мо- ных расширений на все случаи жизни от не- дит не только настоящие физические
нитора, создать выделенный Linux-сервер зависимых разработчиков и т. д. порты, но и порты, созданные драй-
и не мучиться. Исходные тексты нужны Виртуальная сеть, в отличие от VMWare, верами различных устройств, напри-
не только для удовлетворения любопытс- встает сама, не требуя никакой настройки, мер, GPRS-драйвером сотового теле-
тва. Вот, например, если VMWare не видит что и плохо, и хорошо одновременно. С од- фона или софт-модемом, что снимает
виртуальную карту DSL-модема, то нам ос- ной стороны, мы можем организовать вы- проблему поиска драйверов под Linux/
тается только развести руками, а при их на- ход в Интернет через модем без плясок BSD. Ну а найти драйвер стандарт-
личии можно было бы разобраться почему с бубном, с другой стороны, обеспечить ного модема – не проблема, тем бо-
так и устранить проблему. Даже если это «физический» доступ к сетевой карте уже лее что для распространенных моде-
не можем сделать мы, наверняка сможет не получится и придется либо ковырять ис- лей существуют и «родные» драйве-
кто-нибудь другой. ходные тексты, либо искать дополнитель- ра. Остается только настроить выход
Поэтому имеет смысл рассмотреть ные расширения, которые не всегда рабо- из Linux в Интернет. Проще всего вос-
и бесплатные эмуляторы, из которых нам тают стабильно и к тому же требуют обя- пользоваться популярной програм-
больше всего подходит QEMU (http://fabrice. зательной перекомпиляции QEMU, поэто- мой KPPP, которая по легкости управ-
bellard.free.fr/qemu). Это динамический эму- му выбор конкретного эмулятора остает- ления ничуть не отличается от своего
лятор, основанный на BOCHS (http://bochs. ся за вами. Windows-аналога, если даже не пре-

38
безопасность
восходит его (см. рис. 3). Теперь ин- ма Windows при этом будет «засвече- Linux сейчас уже не проблема. Во всех
сталлируем HTTP/POP3/SMTP-proxy на» в Интернете лишь частично, что за- или практически всех дистрибутивах
и все! Выбор конкретных программ щитит ее от подавляющего большинс- на этот случай имеются удобные мас-
может быть любым. Тут все зависит тва атак. Тем не менее поскольку се- тера. В частности в KNOPPIX доста-
от конкретных вкусов и предпочтений. тевые пакеты проходят через многие точно нажать «К → Интернет → ADSL\
В офисной сети, наверное, лучше бу- Windows-компоненты, потенциаль- PPPOE Configuration» и ответить на не-
дет использовать знаменитый squid, но не свободные от дыр, в принципе сколько несложных вопросов.
но для дома это слишком уж тяжело- атака все-таки возможна, но это уже
весное решение. Лично у меня при- из области паранойи и теоретических Заключение
жились small http-proxy (http://home. абстракций. Отразить большинство атак вполне ре-
lanck.net/mf/srv/), pop3proxy (http:// Основная проблема состоит в том, ально, хотя за это приходится распла-
www.quietsche-entchen.de/download/ что VMWare не позволяет выбирать чиваться множеством труднопреодо-
pop3proxy-1.2.0.tar.gz) и smtpproxy к какой именно «физической» кар- лимых неудобств (покупка дополни-
(ht tp://w w w.quietsche - entchen.de / те она подключается и по умолчанию тельного оборудования или снижение
download/smtpproxy-1.1.3.tar.gz), хотя выбирает первую обнаруженную кар- производительности при работе че-
это далеко не самое лучшее реше- ту. Если компьютер не имеет никаких рез эмулятор, неполноценный выход
ние, и гурманы программного обеспе- других сетевых карт, кроме той, что ус- через proxy и т. д.). А может… ничего
чения наверняка подберут что-то свое. тановлена DSL-модемом, все хорошо и не надо отражать? Стоит же XP, ав-
Из SOCKS-proxy я предпочитаю Dante и мы можем не переживать, но сто- томатически забирает свежие обнов-
(http://www.inet.no/dante). Не столько ит воткнуть одну или несколько «на- ления из Интернета, на электронном
из-за его качеств, сколько из-за того, стоящих» Ethernet-карт (или задейс- кошельке спокойно лежат деньги, все
что он написан и распространяется на твовать Ethernet-карту, интегрирован- жужжит и не падает… Так ведь на жи-
бесплатной основе горячими парнями ную в материнскую плату), как вир- телей Помпеи долгое время тоже ни-
из Норвегии – родины моей любимое туальная карта сойдет с пьедеста- чего не падало, а потом в один миг не-
группы Sirenia (такое мрачное оркест- ла, и все пойдет наперекосяк. Если бо почернело, и на город обрушились
ровое хоральное готическое пение). так, говорим: «Edit → Virtual Network камни и пепел. Беда никогда не пре-
С DSL-модемами в этом плане чуть- Setting → Automatic Bridging → Excluded дупреждает о своем приходе, и воскли-
чуть труднее. В принципе VMWare поз- Adapters → Add» и перечисляем сете- цание «еще вчера все работало» слу-
воляет эмулируемому приложению ви- вые адаптеры, которые мы не хотим ис- жит очень слабым утешением. Можно
деть физические USB-порты («VM → пользовать в виртуальной сети. тысячу раз «смело» выходить в Интер-
Setting → USB Controller → Automatically Другая проблема состоит в том, нет, не боясь ни вирусов, ни хакеров,
connect new USB devices to this virtual что VMWare может не «увидеть» вир- но только хакерам все равно, боитесь
machine when it has focus») (см. рис. 4), туальную сетевую карту, и тогда свя- вы их или нет. И если атака окажется
но поиск под ходящего драйвера зать ее с Linux не получится. Надеж- успешной… впрочем, о последствиях
для USB DLS-модема под Linux мо- нее всего использовать DSL-моде- успешной атаки лучше не говорить. За-
жет стать непреодолимой проблемой, мы с Ethernet-портом, подключаемые частую они весьма плачевны.
поскольку не для всех моделей та- к физической сетевой карте, кото- Мы ни к чему не призываем, ни за
кие драйверы есть. Правда, тут мож- рую VMWare увидеть просто обяза- что не агитируем и ни от чего не от-
но схитрить. Установить «родной» на. Ну а настроить DSL-модем из-под говариваем. Некоторые считают,
Windows драйвер – как пра- что Windows XP – это доста-
вило, он создает виртуальную точно защищенная система,
сетевую карту и встраивает и им ничего не грозит. Другие
ее в TCP/IP-стек, благодаря же не чувствуют себя в безо-
чему мы можем выходить в пасности даже за каменной
Интернет. Если удалить TCP/ стенной proxy-сервера, окру-
IP протоколы, оставив вир- женного по периметру бран-
туальную карту одну-одине- дмауэром.
шеньку, никакого Интернета у Воздвигнуть защищенную
нас, разумеется, не будет, но систему легко, сложнее по-
тем не менее на физическом добрать оптимальную полити-
уровне пакеты могут беспре- ку безопасности, сочетающую
пятственно приходить/ухо- комфорт и надежность. Опи-
дить с нашего узла. Идея со- санная схема на эту роль сов-
стоит в том, чтобы дать Linux- сем не претендует. Это кре-
машине «физический» доступ пость параноика, который за-
к виртуальной сетевой кар- щищается от всего мира, по-
те, связав их в сеть, и тогда тому что боится, что именно
Linux сможет выходить в Ин- в этот момент кто-то смотрит
Рисунок 4. Настройка доступа к USB-устройствам
тернет через Windows, но са- из-под виртуальной машины в среде VMWare в него через прицел.

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


web

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


своего сайта – Это я знаю, а кроме меня это знает каждый.
Я не желаю слышать от вас то, что знает каждый.
Ваша работа – сообщать мне то, что никто не знает,
то, что даже мне неизвестно.
– У меня такие сведения есть.

«Выбор»
Виктор Суворов

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

С
огласно статистике, как мини- к конфиденциальным данным и про- кие страницы сайта не попадут под ин-
мум половина пользователей граммам, а также к различным уст- дексацию. Если о первом начинающим
каждый день пользуются услу- ройствам (принтерам, веб-камерам веб-мастерам еще говорят на курсах
гами поисковиков. И вполне естествен- и пр.). Взлом при помощи поисковых и пишут в книгах, то наличие второ-
но, что, желая с максимальной точнос- сервисов давно пользуется большой го сохраняется в тайне. Поэтому уви-
тью удовлетворить запрос пользова- популярностью и к тому же не требу- дев в журнале веб-сервера запись
теля, разработчики постоянно совер- ет серьезной подготовки нападающе- о том, что запрашивался отсутству-
шенствуют алгоритмы работы своих го. Конечно, он имеет определенный ющий файл robots.txt (“GET /robots.txt
поисковых роботов. Это привело к то- элемент вероятности, но кто знает, HTTP/1.0” 404), администратор в па-
му, что сегодня при помощи опреде- вполне возможно, что вскоре именно нике бросается за советом на форумы.
ленных запросов можно получить ин- ваш сайт окажется в выданном спис- Сегодня этот файл используют при-
формацию, которую веб-мастер пред- ке под номером один. Но самое ин- близительно 5-6% сайтов. В осталь-
почел бы скрыть. Здесь и страницы тересное, что уже давно разработа- ных он либо совсем отсутствует, ли-
сайта, позволяющие обойти обяза- ны методы, которые позволяют ука- бо имеется, но с пустыми параметра-
тельный вход по паролю или позво- зать поисковым машинам на страницы ми. Хотя вполне вероятно, большинс-
ляющие любому пользователю бес- или места сайта, которые не нуждают- тву сайтов действительно нет нужды
препятственно создать свой почто- ся в индексации. Это мета-теги и файл в ограничениии доступа, но на серь-
вый ящик на закрытом корпоратив- robots.txt, и если робот или сканер ра- езных проектах такой возможностью
ном сервере. Не говоря уже о доступе ботает по правилам, то технологичес- пренебрегать просто опасно. После

40
web
того как робот пройдется по катало- за ссылками до обнаружения ресур- Возможна запись нескольких robot-
гу cgi-bin, точно можно ждать гостей. са. Но этих рекомендаций роботы мо- id в одном поле, в качестве раздели-
Но обо всем по порядку. гут не придерживаться. Так Google-бот теля в этом случае используется про-
не интерпретирует ответ 401/403 на об- бел или табуляция. Данный параметр
Назначение Robots ращение к файлу robots.txt, как запрет будет учитываться только программа-
Exclusion Protocol на сканирование страниц сайта. К со- ми роботами, для веб-браузеров ус-
Впервые вопрос о разработке меха- жалению, на сегодня еще много до кон- тановить таким образом ограничения
низмов, позволяющих ограничить до- ца так и не решено. Во-первых, робот не получится. Список всех robot-id мож-
ступ роботам к различным страницам его может просто проигнорировать. но получить в [5]. Например, правило
сайта, возник приблизительно в 1993- Не до конца ясен вопрос с кешировани- для Google будет начинаться так:
1994-м, когда появились первые сооб- ем файла. Если веб-мастер часто изме-
щения об утечке информации. Robots няет его содержание, робот может ис- User-agent: googlebot
Exclusion Protocol разработан в 1994-м пользовать раннюю версию. Пока ста-
Мартином Костером (Martijn Koster) раются придерживаться 24-часового (или Googlebot для лучшей читаемос-
и представляет собой стандартный интервала кеширования, хотя некото- ти).
протокол, который сегодня соблюда- рые роботы проверяют дату или раз- Робот, найдя правило, совпадаю-
ет большинство сканеров. Он содер- мер и в случае несоответствия считы- щее с его именем, будет действовать
жит правила (Robot Rules) исключений вают файл заново. Кроме того, некото- согласно установленным специально
для различных роботов индексации, рые веб-мастера увлекаются составле- для него ограничениям, если таковые
поиска или зеркалирования веб-сер- нием параметров, пренебрегая общи- имеются. Не найдя индивидуально-
веров. И как результат позволяет уда- ми каталогами и регулярными выра- го правила, робот решит, что для него
лить из индекса весь сервер, каталог, жениями, что приводит к увеличению ограничения не установлены. Если не-
отдельный документ, либо файлы с оп- размера файла. Как поведет себя ро- обходимо указать правила, действую-
ределенным расширением. Распола- бот в этом случае, сказать трудно, в об- щие для всех роботов, используется
гается такой файл в корне веб-серве- щем случае файл кешируется частич- знак звездочка – «*».
ра, т.е. набрав, например, адрес http:// но или не кешируется вообще. Но если поисковый робот обнару-
www.foo.com/robots.txt, вы должны его Также стоит помнить, что файл жит в файле /robots.txt несколько за-
получить. Размещать же его в других robots.txt не гарантирует абсолютной писей, совпадающих с его значением
каталогах бессмысленно, поскольку безопасности веб-сайта. Злоумышлен- robot-id, то робот может выбрать лю-
учитываться роботом он не будет, как, ник с его помощью может получить ин- бую из них. После прописываются ог-
например, http://www.foo.com/admin/ формацию об областях сайта, которые раничения с применением конструкций
robots.txt. Но для каждого порта http/ веб-мастер пытается скрыть, а спамер- Disallow/Allow, пустой параметр означа-
https должен быть создан отдельный ский робот может просто его проигно- ет отсутствие ограничений. Возможно
файл. Робот, а также многие утилиты, рировать. Но в случае «персонального» задание двух значений в поле Disallow/
позволяющие скачать весь сайт це- интереса к определенному сайту будут Allow, но это не рекомендуется, так как
ликом, первым делом пытаются счи- перебираться все варианты, а примене- в будущих спецификациях это может
тать этот файл. Получив положитель- ние robots.txt по крайней мере не приве- быть изменено. Например:
ный ответ (2хх), производится грамма- дет на ваш сайт случайных гостей.
тический разбор файла и в дальней- User-agent: fast
Allow: /info/
шем при работе применяются ограни- Формат файла robots.txt
чения применительно к этому роботу. Стандарт, в котором описано содержи- User-agent: googlebot aspider
Disallow: /images/
Если ответ сервера указывает, что ре- мое файла, можно найти в [1]. В дан- Disallow: /cgi-bin/ /1251/
сурс не существует (код статуса 404), ном документе отмечено, что, исполь- Disallow: /changelog.html
то робот продолжает работать без ка- зуя этот файл, можно также указывать User-agent: *
ких-либо ограничений. Поведение ро- для индексации конкретному роботу Disallow:
ботов при получении ответов, отлич- специально оптимизированные под не-
ных от описанных выше, рекомендо- го веб-страницы, а это может привес- При задании имени необходимо
вано в [2]. Если ответом сервера явля- ти к некоторому увеличению посещае- учитывать, что можно использовать
ется код 401/403 (нет прав/доступ за- мости ресурса. Это обычный текстовый как частичную, так и полную ссылку.
прещен), указывающий на ограниче- файл в LDIF-формате, состоит из пара- Например, /changelog позволит ис-
ние доступа, то робот должен считать, метров и значений, разделенных меж- ключить из индексации не только файл
что пытается получить доступ к полно- ду собой двоеточием. Записи не чувс- changelog.html и подкаталог changelog
стью закрытому сайту, и прекратить ра- твительны к регистру. По одному па- со всем содержимым, но все файлы
боту. Когда приходит ответ, говорящий раметру в строке. Знак «#» означает и каталоги, имена которых начинают-
о недоступности ресурса, робот откла- комментарий и строка далее игнори- ся с changelog.
дывает визит до восстановления рабо- руется. Параметр User-agent указыва- А параметр /changelog/ затронет
тоспособности сайта. При получении ет на специфическое имя, которое име- только подкаталог changelog. Отсюда
ответа, указывающего на переадре- ет любая программа-клиент, предна- если будет задана маска /t, то из поис-
сацию (3хх), робот должен следовать значенная для доступа к веб-данным. ка будет исключено все, что начинает-

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


web
ся с буквы t. Для удобства можно ис- му были разрабо-
пользовать регулярные выражения. таны утилиты, поз-
Например, чтобы исключить из ин- воляющие быстро
дексации все рисунки, используем: и без усилий про-
делать эту работу.
Disallow: *.gif$ Так, RoboGen [8]
представляет со-
Динамически генерируемые стра- б о й в и зуа л ьн ы й
ницы убираются так: редактор доступ-
ный под все версии
Disallow: /*? Windows, позволя-
ющий управлять
доступом к файлам
Использование мета-тегов и каталогам на не-
Другим более удобным при рабо- скольких серверах. Рисунок 1. Утилита RoboGen «знает» о 180 пользовательских
агентах
те с отдельными страницами стан- Поддерживает за-
дартом является использование тега грузку по ftp, знает о 180 пользова- может создавать каталоги-ловушки.
<META>. С его помощью можно так- тельских агентах (user-agents) (рис. 1) Если робот попытается прочитать та-
же указать роботам на то, что индек- и 10 основных типов поисковых движ- кой каталог, то его запросы также будут
сировать страницу не надо. Для это- ков. При необходимости пользователь перехватываться. Модуль также может
го в раздел <HEAD> добавьте следу- может самостоятельно добавлять но- среагировать и соответственно блоки-
ющую строку: вую информацию в базу данных поль- ровать роботов, охотящихся за почто-
зовательских агентов и движков. выми адресами. Имеет настраиваемый
Disallo<META NAME="ROBOTS" ↵ На сайте проекта доступны две вер- список известных спамерских роботов.
CONTENT="NOINDEX, ↵
NOFOLLOW">w: *.gif$ сии Standard и Limited Edition (последняя К сожалению, последняя версия 0.6,
freeware), сравнение основных возмож- датированная 3 ноября 2002 года, под-
Если необходимо указать то же ностей которых приведено в RoboGen держивает только Apache 1.3. Порт для
только роботу Google, можно напи- Comparison Chart http://www.rietta.com/ второй версии Apache и для IIS, к сожа-
сать так: robogen/comparison.shtml. Кроме того, лению, так и не состоялся. Это, навер-
отдельно доступна утилита RoboTag 1.5 ное, беда многих хороших OpenSource-
<META NAME="GOOGLEBOT" ↵ (http://www.rietta.com/downloads/robogen/ проектов.
CONTENT="NONE">
RoboTag.zip), входящая в поставку Остальную информацию вы можете
Работающие по стандарту поиско- RoboGen SE и LE. При ее помощи мож- найти в документации. Успехов.
вые сервера, должны исключить дан- но создавать мета-теги для вставки
ную страницу из своих баз, кроме то- в html-файлы (рис. 2). Ссылки:
го, робот не будет следовать за вне- 1. Описание протокола robots.txt – http://
шними ссылками. Усиленная блокировка www.robotstxt.org/wc/robots.html, http://
Можно также указать роботу, что с Robotcop info.webcrawler.com/mak/projects/robots/
документ генерируется динамически. Не менее интересными возможностя- norobots.html.
В этом случае он не будет его индек- ми обладает Robotcop [9], представ- 2. A Method for Robots Control – http://www.
сировать. ляющий собой модуль к веб-серве- robotstxt.org/wc/norobots-rfc.html.
ру Apache, написанный на С и распро- 3. Robot Exclusion Standard Revisited –
<META NAME="DOCUMENT-STATE" ↵ страняемый в исходных кодах. Он от- http://www.kollar.com/robots.html.
CONTENT="DYNAMIC">
слеживает правильность работы поис- 4. ЧАВО по веб-роботам – http://info.
В этом случае бывает полезно ука- ковых роботов, если робот не подчи- webcrawler.com/mak/projects/robots/faq.
зать, что индексировать необходимо няется указанным для него правилам, html.
другой документ. то Robotcop принудительно его ограни- 5. Расширенный список всех роботов –
чивает, блокируя на некоторое время http://info.webcrawler.com/mak/projects/
<META NAME="URL" ↵ клиентский IP. Кроме того, веб-мастер robots/active/all.txt.
CONTENT="/help.html">
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.
ко запутаться, особенно если у веб- Рисунок 2. Утилита RoboTag позволяет 9. Сайт проекта Robotcop – http://www.
сгенерировать мета-теги для вставки
мастера таких сайтов много. Поэто- в html-файл robotcop.org.

42
web

В чем сильные и слабые стороны


HTTP digest-авторизации

АЛЕКСЕЙ МИЧУРИН
Среди всех средств, предоставляемых протоколом HTTP, digest-авторизация стоит особняком.
Почему? Чем она отличается от вездесущей basic-авторизации? Каковы её сильные и слабые
стороны? Насколько хорошо она поддержана различным ПО и когда уместно её использовать?

В
протоколе HTTP предусмотрено два типа автори- Кроме того, basic-авторизация не даёт возможнос-
зации. Basic-модификация получила весьма ши- ти «разлогиниться» – прервать сессию. Это естествен-
рокое распространение. «Системный администра- ное следствие того, что никакой сессии и нет – прерывать
тор» уже писал о нём (№5, 2005 г., 88-92 с.). Тогда были де- просто нечего.
тально рассмотрены связанные с авторизацией перемен- Basic-процедура не позволяет контролировать коли-
ные окружения (AUTH_TYPE, REMOTE_USER, REDIRECT_ чество неудачных попыток регистрации. То есть позволяет
REQUEST_METHOD, REDIRECT_STATUS, REDIRECT_URL), «взламывать» защиту методом грубого подбора пароля.
особенности взаимодействия механизмов авторизации Но существует и второй тип защиты – digest-авториза-
и переадресации (в том числе при обработке ошибок, воз- ция. Давайте разберёмся, как она работает и какие пре-
никающих в защищённых зонах). Эти детали одинаковы имущества даёт.
для basic- и digest-процедур идентификации пользовате-
лей, и в настоящей статье мы уже не будем останавливать- Digest-авторизация: диалог клиента
ся на этих вопросах, а полностью сосредоточимся на спе- и сервера
цифике digest-авторизации. В общих чертах процедура digest-авторизации немного
Напомним только, что основным недостатком basic-про- сложнее basic. Диалоги клиента и сервера весьма похо-
цедуры является передача пароля в открытом виде. При- жи. Однако при digest-авторизации пароль никогда не пе-
чём пароль передаётся вновь и вновь при любом обраще- редаётся по сети в открытом виде.
нии к любому документу, находящемуся в защищённой об- При первом обращении к защищённой области клиент,
ласти. Это обстоятельство облегчает перехват пароля и де- естественно, не передаёт никакой идентификационной ин-
лает протокол ещё более уязвимым. формации – он пока не знает, что её необходимо передать.

44
web
Вот заголовки обычного HTTP-запроса:
GET /a-docs/ HTTP/1.1
Host: 127.0.0.1:9090
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.7)
Gecko/20050420 Firefox/1.0.3
Accept: text/xml,application/xml,application/xhtml+xml,text/html;
q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: KOI8-R,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive Рисунок 1. Типичный диалог авторизации
Сервер рассматривает этот запрос и обнаруживает, Кроме типа авторизации, мы видим здесь пять параметров.
что требуемый документ защищён, но запрос не содержит Следует заметить, что это один из самых простых случаев.
данных для авторизации. Тогда клиенту выдаётся сообще- Вообще digest-взаимодействие допускает добрый десяток
ние об ошибке 401. уточняющих параметров, призванных усилить защиту. Не-
На самом деле в протоколе HTTP не предусмотрено две которые из них мы ещё обсудим, а пока давайте рассмот-
разные ситуации: «требуется авторизация» и «пароль не- рим имеющиеся (все они являются обязательными).
верен». Поэтому ответ с кодом 401 не означает «вы ввели ! Параметр username сообщает серверу имя, которое ввёл
неверный пароль» или «введите пароль»; один код исполь- пользователь.
зуется в обоих случаях. ! Realm – имя засекреченной области. Digest-механизм
Вот, как выглядят заголовки ответа сервера: использует эту информацию для идентификации за-
щищённой зоны. Поэтому этот параметр должен обяза-
HTTP/1.1 401 Authorization Required
Date: Tue, 18 Oct 2005 13:04:36 GMT
тельно присутствовать в заголовке Authorization и сов-
Server: Apache/1.3.33 (Unix) падать со значением realm, переданным сервером в за-
WWW-Authenticate: Digest realm="Realm-A", головке WWW-Authenticate. Концепцию зон мы рассмот-
nonce="3f19e93c8baf99b0fdb9f60d6a228bc61129640676"
Keep-Alive: timeout=15, max=98 рим чуть ниже.
Connection: Keep-Alive ! Параметр nonce содержит ту же строку, которую пере-
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
дал сервер в одноимённом параметре в ответе с кодом
401. Эта информация используется при вычислении па-
Как и в случае basic-авторизации, сервер добавил за- раметра response (см. ниже).
головок WWW-Authenticate, в котором сообщил клиенту ! Uri – абсолютный путь к документу.
тип авторизации (Digest), но на этот раз здесь присутству- ! Response – контрольная сумма. Это результат вычис-
ют два дополнительных параметра: realm и nonce. Realm ления хэш-функции от комбинации вышеперечислен-
передаётся и при basic-авторизации, но в digest-процеду- ных параметров и пароля. Обычно вычисляется функ-
ре он играет более важную роль, к рассмотрению которой ция MD5 от строки, состоящей из перечисленных пара-
мы ещё вернёмся. метров, разделённых двоеточием. Но детали процеду-
Получив такой ответ, клиент (браузер) запрашивает ры хэширования зависят от множества обстоятельств,
у пользователя имя и пароль для авторизации (рис. 1). некоторые из которых мы затронем ниже.
Так же, как и в случае basic-авторизации, в диалоговом
окне отображается значение параметра realm. Получив идентификационную информацию в заголов-
Если пользователь откажется от ввода (нажмёт кнопку ке Authorization, сервер вычисляет хэш-функцию по тому
«Cancel»), то браузер покажет ему страницу, которая при- же алгоритму, что и клиент, и сравнивает с response. Если
шла с кодом 401 (как и при Basic-авторизации, эта стра- совпадения не произошло, значит пароль или имя не вер-
ница загружается не в момент нажатия кнопки «Cancel»). ны, сервер снова выдаёт ошибку 401, и попытка авториза-
Если же пользователь ввёл имя и пароль и нажал «OK», ции повторяется. Если пользователь успешно идентифи-
то на сервер отправляется запрос, снабжённый идентифи- цирован, то клиенту выдаются обычный заголовок и тре-
кационной информацией: буемый документ:
GET /a-docs/ HTTP/1.1 HTTP/1.1 200 OK
Host: 127.0.0.1:9090 Date: Tue, 18 Oct 2005 13:04:42 GMT
User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.7.7) Server: Apache/1.3.33 (Unix)
Gecko/20050420 Firefox/1.0.3 Keep-Alive: timeout=15, max=98
Accept: text/xml,application/xml,application/xhtml+xml,text/html; Connection: Keep-Alive
q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Transfer-Encoding: chunked
Accept-Language: ru,en-us;q=0.7,en;q=0.3 Content-Type: text/html; charset=koi8-r
Accept-Encoding: gzip,deflate
Accept-Charset: KOI8-R,utf-8;q=0.7,*;q=0.7 Здесь может присутствовать дополнительный заголовок
Keep-Alive: 300 Authentication-Info, но мы не будем его рассматривать. Пока
Connection: keep-alive
Authorization: Digest username="a", realm="Realm-A", Apache не имеет никаких возможностей настройки, позво-
nonce="3f19e93c8baf99b0fdb9f60d6a228bc61129640676", ляющих усилить защиту, используя возможности этого заго-
uri="/a-docs/", response="60046f788896b2f05dee72e0e9240c4d"
ловка. Модуль digest_module не использует этот заголовок,
Как видите, теперь в заголовке Authorization передаётся а модуль mod_auth_digest эксплуатирует его «фиксирован-
гораздо больше информации, чем при Basic-авторизации. ным» образом, не допуская никакой ручной настройки.

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


web
К рассмотрению модулей Apache мы перейдём в следу- Максимум, что может потребоваться от вас – это «раском-
ющей части этой статьи. А здесь осталось сказать, что да- ментировать» в файле httpd.conf инструкции, подключаю-
лее клиент (браузер) передаёт заголовок Authorization авто- щие соответствующий модуль. Выглядеть это будет при-
матически при каждом обращении к защищённой области. близительно так:
Это очень похоже на basic-авторизацию, но теперь пароль
не передаётся в открытом виде, и восстановить его, пере- LoadModule digest _ module libexec/apache/mod _ digest.so
AddModule mod _ digest.c
хватив заголовок Authorization, практически невозможно.
Внимательный читатель наверное уже заметил уязви- После того как Apache научился digest-языку, можно
мость протокола, связанную с тем, что злоумышленник мо- приступить к настройке.
жет перехватить заголовок, а потом просто использовать
легальные значения username, realm, nonce, uri и response. Настройка защищённых зон
Это откроет ему доступ к ресурсу и без знания пароля. Для конфигурирования можно использовать файл гло-
На самом деле мы рассмотрели самый простой сцена- бальных настроек сервера, группируя директивы в бло-
рий digest-авторизации и только основные параметры. Ни- ки <Directory>, <DirectoryMatch>, <Files>, <FilesMatch>,
же мы увидим, средства, значительно снижающие возмож- <Location> или <LocationMatch> и защищая указанные фай-
ности того, кто перехватил ваш HTTP-заголовок. лы и директории. Можно использовать и локальные конфи-
гурационные файлы .htaccess. В настоящей статье будем
Настройка сервера для определённости придерживаться второго пути. Но все
Здесь речь пойдёт об HTTP-сервере Apache. Мы постара- приводимые конфигурационные директивы можно исполь-
емся ориентироваться на широкий круг читателей, многие зовать и в любых других контекстах.
из которых, возможно, не располагают собственным серве- Следует также заметить, что все обсуждаемые в ста-
ром (пользуются виртуальным хостингом) и не имеют воз- тье директивы принадлежат к группе AuthConfig. То есть,
можности самостоятельно «пересобрать» серверное ПО чтобы использовать их в .htaccess, у вас должны быть со-
из исходных кодов. Но совсем не затронуть этот вопрос не- ответствующие права.
льзя. С него-то мы и начнём.
Самый простой пример
Сборка сервера Давайте рассмотрим самый простой случай. Пусть нам не-
В Apache 1.1 впервые появился модуль digest_module. обходимо защитить документы, находящиеся в некоторой
Он был предельно прост и реализовывал минимум digest- директории (и всех вложенных в неё поддиректориях).
возможностей. (Именно этим модулем были сгенерированы Сначала создадим файл с паролями. Для этого есть спе-
заголовки, которые мы видели выше как пример самого про- циальная утилита htdigest. В целом она похожа на htpasswd,
стого digest-диалога.) В версии 1.3.8 был добавлен модуль но требует больше параметров:
mod_auth_digest со статусом «экспериментальный». В нём
были продублированы функции digest_module и добавле- htdigest [ -c ] passwdÞle realm username
но несколько новых возможностей. Естественно, использо-
вать эти модули совместно нельзя, так как наборы их фун- Ключ -c говорит о том, что файл с паролями надо со-
кций частично перекрываются. В Apache 2.0 модуля digest_ здать. Если этот ключ отсутствует, то файл будет допол-
module уже нет. В документации на странице, посвящённой нен.
переходу на новую версию, сказано, что теперь mod_auth_ ! passwdfile – имя файла с паролями.
digest не является экспериментальным. Однако на страни- ! realm – имя защищённой зоны.
це, описывающей сам модуль, чёрным по белому написано ! username – имя пользователя.
«Status: Experimental». Во всяком случае ни в одной из из- Пароль по понятным причинам не указывается в ко-
вестных мне версий Apache digest-авторизация не включа- мандной строке, htdigest «попросит» ввести и подтвер-
ется при сборке с «умолчательными» параметрами. дить его.
Поэтому, если вы собираете сервер самостоятель- То есть, чтобы создать файл passwd и пользователя
но, дайте утилите ./configure соответствующий ключ. a для зоны Realm-A, нам следует ввести следующую ко-
Они различны для разных версий Apache. Например, что- манду:
бы статически вкомпиллировать модуль mod_auth_digest
в Apache 2.0, необходимо дать ключ --enable-auth-digest. htdigest -c passwd Realm-A a
Подробную справку по системе сборки имеющейся у вас
версии сервера можно получить, запустив ./configure с клю- При добавлении новых пользователей ключ -c указы-
чом --help. Как всегда, не помешает почитать INSTALL, хо- вать не надо.
тя в Apache 2.0 (после перехода на autoconf) он стал весь- Чтобы снизить риск хищения секретной информации,
ма лаконичным. файл с паролями лучше разместить где-нибудь вне дере-
Если вы пользуетесь уже собранным сервером, то, ско- ва каталогов, доступных по HTTP.
рее всего, вам не придётся предпринимать никаких специ- Вернёмся теперь к директории, которую мы хотим за-
альных действий. Все известные мне сборки сервера 1.3 щитить. Если в ней ещё нет файла .htaccess, то его следу-
включают модуль mod_digest, которого вам хватит (на пер- ет создать.
вое время). Сборки Apache 2.0 включают mod_auth_digest. Добавим в него следующие директивы:

46
web
AuthType Digest
AuthName Realm-A
AuthDigestFile /home/www/test/passwd
Require valid-user

Первая из них объявляет тип авторизации.


Вторая – имя защищённой зоны. Оно должно совпа-
дать с именем, которое мы указали при создании файла
passwd (регистр символов важен). Это имя будет отобра-
жаться в диалоге браузера с пользователем. Подробнее
о зонах мы поговорим ниже.
Третья директива определяет местоположение фай-
ла с паролями.
Последняя конфигурационная инструкция в данном слу-
чае указывает на то, что доступ к директории разрешён
только авторизованным пользователям. Она может зада-
вать и более сложные условия. К этому вопросу мы тоже
вернёмся.
Рисунок 2. Дерево директорий с двумя защищёнными зонами.
Подробнее о зонах Незащищённые директории отмечены зелёным, принадлежащие
зоне Realm-A – жёлтым, Realm-B – красным
В отличие от basic-авторизации аппарат digest-авториза-
ции различает закрытые зоны. Каждый пользователь имеет Сервер выдаст ответ об ошибке 401 с сообщением о том,
право авторизоваться только в одной зоне. Этим зоны от- что данная директория принадлежит к зоне Realm-B. Тог-
личаются от групп. Если одному пользователю необходимо да браузер автоматически сформирует новый запрос с за-
иметь доступ к нескольким зонам, то для него надо завес- головком Authorization. Для пользователя весь этот диалог
ти соответствующее число учётных записей. Причём в раз- останется не заметен, вводить имя и пароль повторно не
ных зонах один и тот же пользователь может иметь разные потребуется – браузер уже располагает всей идентифика-
пароли.C точки зрения системы безопасности это разные ционной информацией для работы в зоне 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-авторизация тоже
рассмотрим дерево директорий, показанное на рис. 2. допускает использование зон, но в этом случае клиент не
Как видите, мы создали восемь директорий. Шесть сообщает серверу имя зоны и привязка пользователя к зо-
из них защищены, на схеме они снабжены шапками, в кото- не не производится. Фактически информацию о зоне мо-
рых указано, к каким зонам они принадлежат. Чёрные шап- жет использовать только клиент.
ки говорят о том, что в данной директории есть .htaccess,
белые – о том, что зона унаследована от родительской ди- Группы пользователей
ректории. Незащищённые элементы показаны зелёным Как и basic-авторизация, аппарат digest-авторизации поз-
цветом, зона Realm-A – жёлтым, Realm-B – красным. воляет организовывать пользователей в группы. Для это-
При такой организации защиты пользователю доста- го существует директива:
точно один раз авторизоваться в зоне Realm-B, «войдя»
в директорию /b-docs, и он может обращаться к скриптам htdigest -c passwd Realm-A a
из директории /cgi-bin/b-bin, не проходя процедуру иденти-
фикации повторно. Она задаёт путь к файлу, описывающему группы.
После авторизации в /b-docs при первом обращении Его структура очень проста, и никаких специальных инстру-
к /cgi-bin/b-bin браузер, который пока не «знает», что обра- ментов для его создания не существует. Это просто тексто-
щается к закрытой зоне, отправит обычный запрос. Даль- вый файл, каждая строка которого описывает одну группу
ше всё будет происходить по уже известному сценарию. и имеет следующую структуру:

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


web
имя _ группы: пользователь ещё _ пользователь ... Любой из этих вариантов может оказаться полезен, в за-
висимости от конкретной задачи.
После того как файл с группами создан и путь к нему
указан, можно использовать директиву Require следую- Иллюзии и реальность: digest vs basic
щим образом: Теперь, когда мы познакомились с устройством и возмож-
ностями digest-аппарата, можно обсудить его преимущес-
Require group имя _ группы ещё _ имя _ группы ... тва и недостатки. Подытожим сначала, какие проблемы
basic-авторизации так и остались не решены.
Доступ будет разрешён только членам перечислен- Во-первых, при digest-авторизации не создаётся сес-
ных групп. сии. На первый взгляд идентификатором сессии может по-
Однако следует помнить, что просмотр текстового файла казаться параметр nonce, передаваемый при каждом обра-
с описанием групп – достаточно непроизводительная опера- щении к серверу в заголовке Authorization, но это впечат-
ция. Возможно, лучшим решением будет прямое указание ление обманчиво. Nonce позволяет не передавать пароль
списка пользователей, имеющих доступ к ресурсу, непос- в открытом виде, и только. Сервер не запоминает все вы-
редственно в директиве Require. Делается это аналогично: данные nonce и не следит за ними.
Прямым следствием этого становится невозможность
Require user имя _ пользователя ещё и _ ещё ... разорвать сессию – «разлогиниться».
Этот недостаток роднит digest- и basic- механизмы.
Тогда авторизоваться смогут только перечисленные Он, очевидно, связан с самой природой протокола HTTP,
пользователи. для которого не существует понятия «сессия».
Информация о принадлежности пользователя к той Теперь понятно, что digest-авторизация, как и basic-
или иной группе используется только директивой Require авторизация, не в состоянии создать ощутимые препятс-
и недоступна ни клиенту, ни даже приложениям, работаю- твия для грубого перебора паролей. Справедливости ра-
щим на сервере. ди следует отметить, что в полном описании digest-проце-
дуры предусмотрены средства (дополнительные перемен-
Взаимодействие авторизации ные и алгоритмы работы с ними), позволяющие детекти-
и других механизмов ограничения доступа ровать подобную атаку и создать ощутимые препятствия
Вы видите, что digest-аппарат предлагает очень гибкую сис- для её осуществления. Но мне не известно ни одной про-
тему настройки с зонами и группами пользователей. Но ме- граммы, в которой эти средства были бы реализованы
ханизм авторизации – не единственное средство ограни- в полной мере. (Обсуждению реализаций посвящена сле-
чения доступа. Давайте, не уходя далеко от темы статьи, дующая часть статьи.)
рассмотрим, как механизм авторизации взаимодействует Вторым важным недостатком digest-защиты является
с другими средствами. то, что при усиленной охране пароля информация остаёт-
Для примера в качестве конкурента авторизации рас- ся не зашифрованной и передаётся в открытом виде. Зло-
смотрим ограничение, позволяющее обращаться к ресурсу умышленник не может перехватить пароль, но он может
только с определённого хоста. Это ограничение реализует- перехватить информацию. Вы сохраните ключи от сейфа,
ся следующими конфигурационными директивами: но потеряете его содержимое.
Корни этой проблемы тоже кроются в протоколе HTTP,
Order Deny,Allow и, конечно, проблема пропадёт автоматически, если вос-
Deny from all
Allow from 192.168.1.104 пользоваться протоколом SHTTP, защищающим все пе-
редаваемые данные. Но это уже, согласитесь, несколько
Что будет, если в одном .htaccess разместить и эти три другой протокол.
строки, и четыре директивы, требующие авторизации? Что- Но (и это в-третьих) самый интересный вопрос: а за-
бы разрешить этот вопрос, существует инструкция Satisfy, щищён ли на самом деле пароль? Ответ на него не так
допускающая два значения единственного аргумента – прост.
Any или All. Казалось бы, что может быть надёжнее MD5-хэширо-
Если в этот же файл .htaccess добавить: вания? Но давайте приглядимся. Злоумышленник может
перехватить заголовок – это факт. Нужен ли тогда ему па-
Satisfy All роль? Очевидно – нет! Достаточно включить в запросы пе-
рехваченный заголовок Authorization и – о чудо! – вы полу-
то для доступа к документам потребуется выполнение обо- чаете доступ к секретной информации и не зная пароля.
их условий: клиент должен обратиться к серверу с указан- Конечно, Internet Explorer не поможет произвести подоб-
ного хоста и предъявить надлежащую идентификацион- ный взлом, но тот, кто смог перехватить ваш трафик, су-
ную информацию. меет найти подходящий инструмент.
Если заменить All на Any, то для доступа потребуется Безусловно, большой ложкой дёгтя для злоумышлен-
выполнение хотя бы одного из требований. То есть если ника будет то, что при хешировании пароля использует-
пользователь «пришёл» с указанного адреса, то авториза- ся и URI документа. То есть для разных документов пе-
ция ему не потребуется, а если он пришёл с любого другого ременная response должна иметь разные значения, и вы-
хоста, то ему достаточно просто авторизоваться. числить их можно, только зная пароль. Так что один заго-

48
web
ловок может открыть доступ только к одному документу. этой статьи, то не факт, что атака, придуманная вами, бу-
(Напомню, что при basic-авторизации один перехвачен- дет успешной.
ный заголовок открывает полный доступ ко всей закры- Однако чтобы охладить преждевременное ликование
той области.) Но один документ – тоже очень немало, ес- оптимистов, полагающих, что digest-схема надёжно за-
ли это лента новостей или нечто в этом роде. Кроме того, щищает пароль, я приведу ещё один пример организа-
можно собрать коллекцию заголовков – по одному на каж- ции атаки.
дый документ. Она базируется на перехвате и подмене трафика. Опыт-
Так что же получается, что защита пароля на самом ному программисту, имеющему под рукой исходный код
деле – фикция? Не совсем. Модуль mod_auth_digest пре- Apache, потребуется несколько часов, чтобы написать спе-
доставляет множество новых конфигурационных дирек- циальный прокси-сервер, который будет делать следую-
тив (мы ещё вернёмся к некоторым из них), среди кото- щее: получив от сервера ответ 401 с требованием автори-
рых есть одна, способная помочь в решении обозначен- зоваться по digest-схеме, прокси отправляет клиенту из-
ной проблемы. менённый ответ 401, требующий basic-авторизации; кли-
Речь идёт о дирек тиве AuthDigestNonceLifetime. ент авторизуется по basic-схеме и отправляет хозяину прок-
Её единственный аргумент задаёт время, в течение ко- си-сервера имя и пароль в открытом виде (как того требу-
торого параметр nonce остаётся актуальным. По истече- ет basic-процедура); всё – злоумышленник получил, что хо-
нии этого времени информация, передаваемая в заголов- тел. В принципе, зная имя и пароль, прокси-сервер может
ке Authorization, «устаревает», и клиенту приходится авто- создать легальный digest-запрос для сервера и далее под-
ризоваться снова. Это происходит автоматически по обыч- держивать общение клиента и сервера, оставаясь полно-
ному сценарию. Просто на очередной запрос браузер по- стью прозрачным.
лучает ответ 401, в котором указан новый параметр nonce, Возможность такой атаки, казалось бы, сводит на нет
но уже известная браузеру зона. Поэтому браузер вычис- все преимущества digest-схемы, но на самом деле подоб-
ляет новый параметр response (по новому nonce и уже из- ным атакам в той или иной мере подвержены все систе-
вестному паролю) и формирует новый запрос с «правиль- мы защиты. Злоумышленник может подменить программу
ным» заголовком Authorization, не причиняя пользователю login, может прослушивать клавиатуру и прочее. Этот сцена-
никаких неудобств. рий атаки (MITM – man in the middle) – один из самых древ-
Дополнительное усиление защиты создаётся тем, них и универсальных. Он с успехом применялся задолго
что сервер и клиент ведут счёт соединениям и используют до появления вычислительной техники: от радиоперехвата
этот счётчик при вычислении хэш-суммы response. То есть до подделки берестяных грамот («и в суму его пустую су-
значение параметра response при каждом новом соедине- ют грамоту другую» А.С. Пушкин). Совсем неудивительно,
нии оказывается новым. За более подробной информаци- что этот тип атаки применим и в нашем случае.
ей вы можете обратиться к третьей главе RFC-2617, пара- Тем, кто хочет узнать ещё десяток способов «сломать»
метры nc, state и другие; здесь же мы не будем чрезмерно digest-защиту, я бы посоветовал ознакомиться с четвёртой
вдаваться в детали. Главный вывод таков: использование главой RFC-2617.
счётчиков делает перехват заголовков практически беспо-
лезным; но используются счётчики только более современ- Стандарты и реализации
ным модулем mod_auth_digest, модуль digest_module не спо- Детали digest-авторизации исчерпывающе описаны в RFC-
собен работать с nc и сопутствующими параметрами. 2069. Этот документ датирован 1997 годом. Уточнения бы-
Этот комплекс мер значительно снижает целесообраз- ли сделаны в RFC-2617 в 1999 году. Но, невзирая на то,
ность перехвата Authorization-заголовков. Хотя указывать что с тех пор сменилось тысячелетие, ни браузеры, ни сер-
слишком малые времена актуальности не стоит. Так вы вера не выполняют всех требований и рекомендаций, из-
можете создать практически непреодолимые трудности ложенных в RFC.
для пользователей, работающих по медленным каналам. В RFC описано множество возможностей digest-ав-
торизации, управляемых добрым десятком параметров.
Готовый рецепт взлома пароля Но Apache до сих пор не позволяет никаким образом вли-
В рамках одной статьи трудно осветить все степени за- ять на большинство из них.
щиты, которые обеспечивает digest-авторизация (к сожа- В модуле mod_auth_digest появилось множество на-
лению, далеко не все из них реализованы на практике). строечных директив, но реальных возможностей на-
Так мы даже не коснулись ещё одного HTTP-заголовка стройки прибавилось гораздо меньше. Так, например,
Authentical-Info, который не является обязательным (и ис- AuthDigestAlgorithm позволяет выбрать хэш-функцию. До-
пользуется редко), но позволяет защититься от многих ти- пустимы два значения параметра: MD5 и MD5-sess, но ис-
пов атак. Мы не рассмотрели конфигурационную директи- пользовать можно только MD5. Появилась директива
ву AuthDigestRealmSeed, позволяющую немного усилить AuthDigestNcCheck, которая в будущем позволит работать
защиту при использовании mod_digest, но практически с параметром nc (этот параметр содержит счётчик соеди-
бесполезную для mod_auth_digest, который предоставля- нений, о котором упоминалось выше), но сейчас она ниче-
ет гораздо более мощные средства. Эти и многие другие го не делает. Одними словом, большинство новых дирек-
детали и тонкости, устаревшие или не имеющие принци- тив просто зарезервированы.
пиального значения, мы оставим специалистам. А здесь Таким образом, относительно сервера Apache можно
отметим, что если вы базируетесь только на материале констатировать два факта: первый – реализованы далеко

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


web
не все возможности, заявленные в RFC, и второй – рабо- вилам. То есть, согласно результатам этих тестов, можно ус-
ты ведутся весьма активно, причём план работ (RFC) име- тановить переменную AuthDigestEnableQueryStringHack без-
ется, что особенно обнадёживает. условно:
Большинство современных браузеров поддерживают
digest-авторизацию. В их числе Internet Explorer (о нём требу- SetEnv AuthDigestEnableQueryStringHack On
ется отдельный разговор), Fire Fox, Opera, Mozilla, Netscape,
Amaya. Лично я сталкивался с отсутствием digest-автори- Но документация на Apache рекомендует первый спо-
зации, только работая браузером lynx (версия 2.8.5) и... соб, не исключено, что на это есть какие-то причины.
Internet Explorer. Неразбериха же возникает от того, что большинство об-
зоров пытаются ответить на вопрос: «имеет ли IE версии X
Microsoft went one way; everyone else went возможность Y?» Но теперь вы видите, что в данном слу-
the other way чае результат тестирования определяется не версией кли-
В подзаголовок вынесена цитата из статьи в eWeek (http:// ента, а мельчайшими деталями настройки сервера. Поэтому
www.eweek.com/article2/0,1759,1500432,00.asp), в которой и возникает тот разброс мнений, который легко наблюдать
с должной долей драматизма описан очередной конфликт в Internet. Дело усугубляется ещё и тем, что, с точки зрения
софтверного гиганта со всем миром; на этот раз – на почве любого другого браузера, все три перечисленные конфигу-
разного понимания RFC-2617. Вследствие этого IE – единс- рации сервера одинаково работоспособны.
твенный браузер, не способный работать с Apache, когда де- На мой взгляд, всё это ещё один пример того,
ло касается digest-авторизации. Более того, IE – единствен- как Microsoft открыто вытирает ноги о весь мир.
ный браузер, способный работать с IIS по «digest»-схеме, К сожалению, у меня не было возможности протести-
как её понимает Microsoft. Причём MS не считает это ошиб- ровать сервер IIS на предмет его совместимости с какими-
кой и не собирается ничего менять. либо браузерами, отличными от IE. Но лично у меня нет ос-
Информации по этой проблеме очень мало, и она очень нований не доверять eWeek.
противоречива. Чтобы понять, почему так происходит, да-
вайте рассмотрим поведение IE 6.0 (с другими версиями Преимущества digest-авторизации
дела обстоят или так же или хуже). Итак, мы рассмотрели тонкости digest-схемы авторизации
Исторически, во времена версий 1.1 и 1.2, разработчики и обнаружили массу недостатков. Но надо ли после этого
Apache заняли очень твёрдую позицию и не стали подде- ставить на ней крест? Очевидно, нет. Наивно было бы ожи-
рживать Microsoft-интерпретацию RFC. Поэтому, если сер- дать, что какая-либо надстройка над HTTP сможет изме-
вер оснащён старым модулем digest_module, пользователи нить его природу и сделает его надёжнее специализиро-
IE 6.0 вообще не смогут на нём авторизоваться. ванных средств, таких как SHTTP и TLS. Но несмотря на то,
Но Microsoft проявил не меньшую принципиальность что digest-процедура не исключает возможности многих ви-
и не стал ничего менять в своей реализации HTTP/1.1. По- дов атак, она всё же оказывается более защищённой, чем
этому в новом модуле mod_auth_digest протокол был «усо- basic. Digest-схема имеет некоторые преимущества и пе-
вершенствован». Теперь IE мог авторизоваться и даже ра- ред SSL: она проще в настройке, работа по алгоритмам
ботать по Digest-сценарию за одним исключением: сервер digest-авторизации не создаёт практически никакой вы-
не мог корректно обработать запрос GET, если строка за- числительной нагрузки на систему, кроме того, не будем
проса была не пустой. Это связано с тем, что IE нарушает забывать, что SSL-сертификаты не бесплатны. Наконец,
и другие стандарты, не связанные с digest-авторизацией. digest-схема превосходит по стойкости многие протоколы,
Microsoft имеет собственную точку зрения на то, что такое распространённые не менее, чем протокол HTTP. Не сек-
URI и другие фундаментальные понятия. рет, что пароль передаётся в открытом виде в POP3, IMAP,
Некоторое время (от версии 1.3.8 до 2.0.51) разработчи- FTP и многих других протоколах.
ки Apache ожидали изменений в IE, но шаг навстречу при- Конечно, пока трудно найти клиента или сервер, где бы-
шлось делать снова им. В Apache 2.0.51 модуль mod_auth_ ли бы реализованы все возможности digest-авторизации,
digest стал обрабатывать переменную окружения AuthDige предусмотренные в RFC. (По крайней мере, лично мне не
stEnableQueryStringHack. Если она установлена, то модуль известна ни одна такая программа.) Но работа ведётся. Но-
«на лету» корректирует HTTP-заголовки, придавая им стан- вовведения Apache 2.0 (директива AuthDigestNonceLifetime)
дартный вид. То есть, чтобы общение с IE шло без сбоев, уже делают digest-авторизацию весьма ценным – простым
следует использовать директиву: и эффективным – инструментом, при обеспечении безо-
пасности быстро меняющейся информации.
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On Дополнительным преимуществом digest-аппарата яв-
ляется гибкая работа с секретными зонами – ещё одним
Тогда сервер будет распознавать самый великий брау- средством (наряду с группами) для регламентирования
зер и на лету подставлять ему костыли. полномочий пользователей.
Мои личные тесты, проведённые на apache-2.0.55, по- Таким образом, невзирая на все имеющиеся недостатки,
казали, что если браузер «притворяется» Explorer (как это уже сегодня digest-авторизация поднимает HTTP-протокол
делает Opera), но соблюдает все нормы, то никакого кон- над многими не менее распространёнными в Сети протоко-
фликта не возникает. Видимо, это сделано в расчёте на то, лами. Она не делает HTTP самым защищённым, но и не ли-
что IE когда-нибудь начнёт работать по общепринятым пра- шает его простоты, лёгкости и открытости.

50
bugtraq

Переполнение буфера при обработке Переполнение буфера в препроцессоре


HTTP-запросов в Symantec AntiVirus Back Orifice в Snort
Scan Engine Программа: Snort 2.4.0-2.4.2.
Программа: 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 ке Back Orifice-пакетов. Удаленный пользователь может пос-
(version 4.0), Symantec AntiVirus Scan Engine for Messaging лать приложению специально сформированные UDP-паке-
(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 URL производителя: www.snort.com.
Scan Engine for Bluecoat (version 4.0), Symantec AntiVirus Решение: Установите последнюю версию (2.4.3) с сайта
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). Множественные переполнения буфера
Опасность: Критическая. в Skype
Описание: Уязвимость обнаружена в обработке HTTP-за- Программа: Skype for Windows Release 1.4.*.83 и более
просов в административном веб-интерфейсе. Удаленный ранние версии, Skype for Mac OS X Release 1.3.*.16 и более
пользователь может сконструировать специально обрабо- ранние версии, Skype for Linux Release 1.2.*.17 и более ран-
танный HTTP-запрос, который содержит отрицательные ние версии, Skype for Pocket PC Release 1.1.*.6 и более ран-
значения в некоторых HTTP-заголовках, чтобы вызвать пе- ние версии.
реполнение динамической памяти и выполнить произволь- Опасность: Критическая.
ный код с SYSTEM-привилегиями. Описание: Уязвимость существует при обработке URL
URL производителя: www.symantec.com. (callto:// и skype://). Удаленный пользователь может с по-
Решение: Установите соответствующее обновление – http:// мощью специально сформированного URL вызвать пере-
securityresponse.symantec.com/avcenter/security/Content/ полнение буфера и выполнить произвольный код на целе-
2005.10.04.html#savse4-3-12. вой системе.
Переполнение буфера обнаружено при обработке
Выполнение произвольного кода VCARD-импортов. Удаленный пользователь может со-
в Client Service for NetWare здать специально сформированную VCARD, вызвать пе-
Программа: Microsoft Windows 2000 SP4, Microsoft Windows реполнение буфера и выполнить произвольный код на це-
XP SP1, SP2, Microsoft Windows 2003 SP1. левой системе.
Опасность: Критическая. Уязвимость обнаружена при обработке некоторых паке-
Описание: Уязвимость обнаружена в Client Service for тов. Удаленный пользователь может послать приложению
NetWare (CSNW). Удаленный пользователь может выпол- специально сформированный пакет, вызвать переполнение
нить произвольный код на целевой системе. В Microsoft кучи и выполнить произвольный код на целевой системе.
Windows 2003 SP1 уязвимость может быть эксплуатирова- URL производителя: www.skype.com.
на только локальным авторизованным пользователем. Решение: Установите последнюю версию с сайта произ-
URL производителя: www.microsoft.com. водителя.
Решение: Установите исправление с сайта производите-
ля. Уязвимость форматной строки
и переполнение буфера в WinRAR
Выполнение произвольного кода Программа: WinRAR 3.50.
в Mozilla Firefox при обработке Опасность: Высокая.
параметров тега IFRAME Описание: Уязвимость форматной строки при отображе-
Программа: Mozilla Firefox 1.0.7 и более ранние версии нии диагностического сообщения об ошибке, информиру-
Опасность: Высокая. ющего пользователя о некорректном имени файла в UUE/
Описание: Уязвимость существует при обработке пара- XXE-кодировке. Удаленный пользователь может создать
метра ширины HTML тега IFRAME. Удаленный пользова- специально сформированный архив и выполнить произ-
тель может создать специально сформированную HTML- вольный код на целевой системе. Переполнение стека об-
страницу, указав в параметре width тега IFRAME значение наружено в библиотеке UNACEV2.DLL при обработке ACE-
«33333333», вызвать переполнение стека и выполнить про- архивов. Удаленный пользователь может создать ACE-ар-
извольный код на целевой системе с привилегиями теку- хив, содержащий специально сформированный файл и вы-
щего пользователя или аварийно завершить работу брау- полнить произвольный код на целевой системе.
зера. Пример: IFRAME WIDTH=33333333 URL производителя: www.rarlabs.com.
URL производителя: www.mozilla.org/products/firefox. Решение: Установите последнюю версию (3.51) с сайта
Решение: Установите последнюю версию с сайта произ- производителя.
водителя.
Составил Александр Антипов

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


программирование

Антиотладка: старые приемы


на новый лад

Крис Касперски
Новое, как говорится, – это хорошо забытое старое. Антиотладочные приемы времен MS-DOS
и debug.com возвращаются, чтобы снова работать в Windows 2000/XP/2003. Статья не только
вызовет у вас ритуально-ностальгический интерес, но и послужит практическим пособием
по борьбе с хакерами и отладчиками.

О
тладчики (а отладчик, как из- ко не все они оказались удачны. В пос- вается по спирали, и методы защиты,
вестно, – основной инструмент леднее время наблюдается острый де- разработанные для MS-DOS и утратив-
хакера) прошли долгий эволю- фицит хороших антиотладочных при- шие актуальность к концу ее сущест-
ционный путь – от debug.com до soft- емов. Так не пора ли вернуться к исто- вования, оказывают убийственное воз-
ice. За это время было найдено мно- кам – древним приемам, проверенным действие на Windows-отладчики, кото-
жество способов борьбы с ними, одна- годами? Технический прогресс разви- рые просто не предусматривали такого

52
программирование
поворота событий и капитулируют сра- русописателем Inbar Raz (что? Ника-
зу, даже не пытаясь бороться. ких ассоциаций? Эх... молодежь!) да-
Разумеется, непосредственный тируемой 1993 годом, но сами описан-
перенос антиотладочных методик ные в ней приемы имеют намного бо-
из MS-DOS в Windows невозможен хо- лее почетный возраст, и многие из них
тя бы уже потому, что в Windows нет пришли в MS-DOS с еще более древ-
«прерываний» в том смысле, который них машин. Попытаемся перенести
в них вкладывает MS-DOS. В ней нет их на Windows?
портов ввода/вывода, физической па-
мяти и множества других привычных Программа, которая Рисунок 1. Древнейший отладчик
для MS-DOS-программистов концеп- трассирует себя сама debug.com
ций и вещей. То есть они, разумеет- Один из древнейших приемов осно-
ся, есть (куда же без прерываний?!), ван на «поглощении» трассировочно-
но техника работы с ними радикаль- го прерывания отладчиком. Рассмот-
но отличается. Так что определенная рим его поподробнее. Как известно,
адаптация все-таки необходима. x86-процессоры имеют специальный
Основной упор мы сделаем на при- trap-флаг (сокращенно TF). Когда он
кладной уровень и программистов взведен, после выполнения каждой
средней квалификации, которые, воз- инструкции генерируется специаль-
можно, имеют представление о драй- ное отладочное прерывание, обраба-
верах, но разрабатывать их само- тываемое отладчиком (если, конечно,
стоятельно не собираются. Некото- он установлен и действительно отла-
рые из описанных методик практи- живает программу). В противном слу-
чески полностью системно независи- чае управление получает обработчик
мы и работают под любой 32-разряд- по умолчанию. В MS-DOS он представ-
ной операционной системой семейс- ляет собой «холостую» заглушку, со-
тва Windows, частично поддержи- стоящую из одного лишь IRET, и вы-
вая Windows 3.x и Windows XP 64-bit полнение программы не прерывает-
edition. Некоторые требуют только NT ся, а вот Windows возбуждает исклю-
или производную от нее систему, при- чение, приводящее к появлению хоро- Рисунок 2. Диалоговое окно, появля-
чем никаких гарантий сохранения ра- шо всем известного диалогового окна ющееся при попытке выполнения кода
в стеке
ботоспособности в последующих вер- «программа совершила недопустимую
сиях Windows у нас нет. Даже если ис- операцию и будет закрыта». признали тот факт, что научить про-
пользовать только документирован- Формально флаг трассировки яв- граммистов программированию им так
ные функции, Microsoft в любой момент ляется частью регистра флагов и по- и не удалось, а теперь уже и не удас-
может их изменить, как это она уже де- тому может быть сохранен в стеке ко- тся. Операционные системы и прило-
лала неоднократно, причем, в послед- мандой pushf/pushfd, однако распоз- жения буквально нашпигованы ошиб-
нее время все чаще и чаще. Лучше во- нать факт трассировки таким спосо- ками переполнения буфера, через ко-
обще не использовать никаких систем- бом скорее всего не удастся, посколь- торых распространяются черви, тро-
но зависимых функций и писать все ку многие отладчики маскируют свое янские программы и другая зараза.
на ANSI Си/С++ или DELPHI (факти- присутствие. При пошаговом выполне- Чтобы прикрыть лазейку, пришлось
чески DELPHI представляет собой са- нии программы они осуществляют до- пойти на довольно жесткую, спорную
мостоятельную «операционную систе- полнительную проверку – а не являет- и радикальную меру – неисполняемый
му», натянутую поверх Windows и абс- ся ли только что выполненная команда стек. И хотя распространения червей
трагирующую программиста от прихо- инструкций pushf, и если это так – ле- он все равно не остановит, ведь су-
тей Microsoft – вы просто перекомпили- зут в стек и корректируют сохраненное ществуют и другие типы переполняю-
руете код и все! Разумеется, речь идет значение регистра флагов, сбрасывая щихся буферов (множество статей на
только о прикладных задачах и на ан- TF в ноль. Правда, тут можно схитрить. эту тему лежит на ftp://nezumi.org.ru),
тиотладочные приемы указанное пре- Например, добавить несколько лиш- для нас (пользователей и программис-
имущество DELHPI не распространя- них префиксов перед командой pushf – тов) в практическом плане это означа-
ется). Тем не менее, бояться антиот- есть шанс, что отладчик не сможет их ет, что огромное количество программ
ладочных приемов не нужно. Их ис- распознать. Еще можно использовать перестанет работать, поскольку они
пользование вполне допустимо, если самомодифицирующийся код, распо- защищены упаковщиками и протек-
не сказать – желательно. ложив команду pushf в стеке с таким торами, использующими самомоди-
Хороший сборник антиотладочных расчетом, чтобы сохраненное значе- фицирующийся код, исполняющийся
приемов глубокой древности можно ние регистра флагов затирало ее на- в стеке. Поэтому Microsoft предусмот-
найти в статье «Anti Debugging Tricks» прочь, правда тут есть одна маленькая рела возможность отключения защи-
(http://textfiles.group.lt/programming/ проблема. Производители аппаратно- ты. При первой попытке исполнения ко-
antidbg.txt), написанной известным ви- программного обеспечения наконец-то да на стеке Windows XP выбросит гроз-

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


программирование
ное диалоговое окно (см. рис. 2) и при утвердительном от- ; после выполнения этой команды генерируется
; исключение, и если отладчик не установлен,
вете пользователя выполнение защищенной программы бу- ; его перехватывает SEH-обработчик, который
дет продолжено, так все не так уж и плохо. ; корректирует EIP, и эта команда не выполняется
; под отладчиком происходит переход на ветку
Впрочем, отладчики типа Microsoft Visual C++ дурить не- ; under _ debugger
обязательно и следующий бесхитростный код легко обна- jmp under _ debugger
руживает их присутствие. Попробуйте его выполнить в по- //
шаговом режиме и посмотрите, что произойдет! ... ; основной код программы
//
Листинг 1. Простейший антиотладочный прием, распознающий ; SEH-обработчик может быть расположен в любом месте
трассировку под некоторыми отладчиками ; (лучше расположить его подальше от защитного кода,
; чтобы он не так бросался в глаза)
pushf ; сохраняем флаги в стеке, SEH _ handler:
; включая и TF ; указатель на контекст регистров
pop eax ; выталкиваем сохраненные флаги mov esi, [esp+0ch]
; в eax assume esi: PTR CONTEXT
and eax, 100h ; выделяем флаг трассировки mov [esi].regEip, offset continue
jnz under _ debugger ; если TF взведен, нас трассируют ; откуда продолжать выполнение
; в отсутствии отладчика
xor eax, eax
Главный минус этого приема в том, что его очень лег- ret ; выход из SEH-обработчика
ко обойти. Достаточно, например, просто подогнать кур-
continue:
сор к команде pushf, сказать отладчику «HERE» (т.е. выпол- ; // отсюда будет продолжено управление,
няй программу до этого места без трассировки), затем по- ; если отладчик не установлен
догнать курсор к jnz и сказать «HERE» еще раз. Таким об-
разом, защищенный фрагмент будет исполняться в обыч- Данный прием позволяет обнаруживать soft-ice и многие
ном режиме и присутствие отладчика окажется незамечен- другие отладчики, причем на пассивную отладку он не ре-
ным, поэтому многие программисты предпочитают сохра- агирует (и это хорошо!). Пользователь нашей программы
нять регистр флагов в одном месте программы, а прове- может запускать soft-ice и отлаживать остальные програм-
рять его в другом. Начинающих хакеров это сбивает с тол- мы, но... как только он попытается загрузить в отладчик на-
ку, но опытных так не проведешь. На конструкцию pushf/ шу, она тут же подаст сигнал. То же самое произойдет, ес-
pop reg/xxx reg,100h у них уже давно выработался безуслов- ли хакер присоединит отладчик к уже запущенному про-
ный рефлекс, к тому же взломщику ничего не стоит заме- цессу или ворвется в середину программы путем установ-
нить or eax,100h на and eax,0h, и тогда программа навсегда ки точек останова на API-функции. Естественно, антиотла-
утратит способность распознавать отладчик. Можно (и нуж- дочный код должен выполняться не до, а после загрузки от-
но), конечно, добавить проверку собственной целостности, ладчика. То есть размещать его в самом начале защища-
но только навряд ли она надолго остановит хакера. емой программы не стоит. Лучше – многократно дублиро-
А вот слегка модифицированный вариант той же са- вать в различных местах.
мой защиты, который распознает присутствие отладчика Прелесть данного приема в том, что его достаточно труд-
независимо от того, исполняется ли программа в пошаго- но распознать при взломе. Явные проверки отсутствуют
вом режиме или нет. Алгоритм работы в общих чертах вы- и команда jmp under_debugger выглядит невинной овечкой.
глядит так: мы самостоятельно взводим флаг трассиров- При ее выполнении без отладчика возбуждается исключе-
ки и выполняем следующую команду. Процессор послушно ние, перехватываемое обработчиком и выполнение про-
генерирует исключение, которое мы перехватываем пред- граммы идет уже совсем по другому пути (обработчик под-
варительно установленным SEH-обработчиком, передаю- меняет указатель команд, хотя, впрочем, он мог бы этого и
щим управление нашему коду. Но при наличии отладчика, не делать – в отличие от прерываний, из которых в MS-DOS
исключение «поглощается», и SEH-обработчик уже не по- нужно было выходить как можно скорее, чтобы не развалить
лучает управления! систему, обработчик структурного исключения в принципе
может вмещать в себя весь код программы целиком, и хи-
Листинг 2. Универсальный антиотладочный прием, мичить с контекстом совершенно необязательно – зачем
распознающий трассировку под большинством отладчиков
лишний раз привлекать внимание хакера?). Под отладчи-
; устанавливаем новый обработчик структурных ком же команда jmp under_debugger выполняется «как есть»
; исключений
; обнуляем регистр eax и хакер может очень долго ковыряться в подложной ветке
xor eax,eax under_debugger, не понимая, что здесь вообще происходит
; кладем в стек указатель на новый обработчик
push offset SEH _ handler и откуда это взялось?! Чтобы оттянуть взлом, лучше не го-
; кладем в стек указатель на старый обработчик ворить сразу, что отладчик обнаружен, а подсунуть какой-
push dword ptr fs:[eax]
; регистрируем новый SEH-обработчик нибудь зашифрованный код или что-то еще.
mov fs:[eax],esp Главное, чтобы команды popf и jmp under_debugger
; взводим флаг трассировки не были разделены никакими другими инструкциями! Ина-
pushf ; заталкиваем в стек регистр флагов че защита не сработает! Трассировочное исключение ге-
pop eax ; выталкиваем его содержимое в регистр eax
or ah, 1 ; взводим флаг TF нерируется сразу же после выполнения первой команды,
push eax ; кладем eax в стек расположенной после popf, и если ею окажется, например,
popf ; выталкиваем его содержимое в регистр
; флагов nop, то jmp никаких исключений уже не достанется. Так что
; теперь флаг трассировки взведен! замаскировать защитный код, рассредоточив его по все-

54
программирование
му оперативному периметру, уже не удастся. К тому же ха- показано в листинге 2) и перед расшифровкой вызывает-
кер может легко нейтрализовать защиту, просто заменив ся API-функция VirtualProtect для установки атрибута запи-
jmp under_debugger на jmp continue. Чтобы этому противо- си (по умолчанию секции .text/.code и .rodata имеют атри-
стоять, необходимо взводить в SEH-обработчике специаль- бут read-only, и непосредственная расшифровка кода в них
ный флаг и проверять его по ходу выполнения программы – невозможна). Windows-вариант не сложен в реализации,
был ли он вызван или нет. А в самом SEH-обработчике еще но слишком громоздок и потому ненагляден.
контролировать и тип исключения, иначе хакер просто до-
бавит xor eax,eax/mov [eax],eax (обращение по нулевому Листинг 3. Пример простейшей самотрассирующейся
программы под ms-dos
указателю, генерирующее исключение) и тогда SEH-об-
работчик будет получать управление как под отладчиком,
; // устанавливаем новый обработчик трассировочного
так и без него. Кстати говоря, защита данного типа была ; прерывания int 01h
использована в программе ulink Юрия Харона, взлом кото- ; функция 25h (установить прерывание),
; прерывание — 01h
рой подробно описан в моих «Фундаментальных основах mov ax,2501h
хакерства – записках мыщъх’а», которую можно бесплат- ; указатель на обработчик прерывания
lea dx,newint01h
но скачать с моего ftp-сервера nezumi.org.ru. ; сервисная функция ms-dos
Зададимся таким вопросом: может ли отладчик трас- int 21h
сировать программу, которая уже находится под трасси- ; // взводим флаг трассировки
ровкой (например, отлаживается другим отладчиком или pushf ; сохраняем регистр флагов в стеке
pop ax ; выталкиваем его в регистр ax
трассирует сама себя). Непосредственно – нет, поскольку or ah,1 ; взводим бит TF
флаг трассировки в x86 процессорах один и его вложен- ; сохраняем измененный регистр ax в стеке
push ax
ность не поддерживается. С другой стороны, если вышес- ; выталкиваем модифицированное значение
тоящий отладчик отслеживает обращение к флагу трасси- ; в регистр флагов
popf
ровки и эмулирует возбуждение трассировочного преры-
вания, передавая управление не на следующую команду, // теперь после выполнения каждой команды
// процессор будет генерировать int 01,
а на SEH-обработчик, такая схема может работать, прав- // передавая управление его обработчику
да, код отладчика существенно усложнится, а поскольку,
// подготавливаем параметры для расшифровки
коммерческие отладчики ориентированы исключительно 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 не равен нулю
OllyDbg и люблю его), они еще не встали с горшка и для loop repeat
достижения совершенства им еще расти и расти. Впрочем,
; кажется, что это дурной цикл, работящий как memset
эмулирующие отладчики с такой защитой справляются на ; т.е. заполняющий область памяти содержимым bx
раз, но где вы видели эмулирующий отладчик под Windows? ; которое даже не было инициализировано!
; однако все не так, и на каждом ходу генерируется
Можно, конечно, взять полноценный эмулятор PC с интег- ; трассировочное прерывание, передающее управление
рированным отладчиком типа BOCHS (под который, кста- ; обработчику int 01h, который неявно модифицирует bx
ти говоря, существуют и дополнительные отладчики, вхо- ; // сбрасываем флаг трассировки
дящие в исходные тексты, но отсутствующие в готовой би- pushf ; сохраняем регистр флагов в стеке
pop dx ; выталкиваем его в регистр dx
нарной сборке), однако отлаживать на нем Windows-прило- ; (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
хакерских атак» (полную электронную версию которой мож-
но бесплатно скачать с ftp://nezumi.org.ru) и работает только ; «убиваем» условный переход, ведущий к подложной ветке
; (под отладчиком обработчик int 01h не получит
под MS-DOS, тем не менее легко переносится в Windows, ; управления и переход не будет убит)
просто обработчик прерывания заменяется на обработ- iret ; выходим из обработчика прерывания
чик структурного исключения (как именно это делается, crypted _ begin:

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


программирование
ляющее доступ к физической памяти на чтение/запись.
// Это действительно физическая память, причем еще до вир-
... ; зашифрованный код/данные
// туальной трансляции, и в ней есть все то, что находится в па-
crypted _ end:
мяти компьютера в данный момент. Страниц, выгруженных
на диск в файл подкачки, там нет, но нам они и не требуют-
Можно ли это взломать? Если честно, то данный при- ся. Нам нужен код и данные операционной системы.
мер ломается без особого напряжения и с минимумом те- При наличии прав администратора мы можем не толь-
лодвижений. Просто устанавливаем аппаратную точку ос- ко читать «PhysicalMemory», но и писать. Да-да! Вы не ос-
танова на crypted_begin и дожидаемся завершения распа- лышались и это не опечатка! С прикладного уровня можно
ковки, после чего снимаем дамп, превращаем его в exe- проникнуть в святая святых операционной системы, свобод-
файл, который уже можно отлаживать обычным путем. Что- но модифицируя код, исполняющийся на привилегирован-
бы не дать себя обмануть, защита должна использовать ном уровне нулевого кольца (RING0), а это значит, что мы
множество вложенных расшифровщиков или бороться с от- фактически имеем RING0 на прикладном кольце (RING3)!
ладчиком иным путем (например, убивать его через доступ Любой отладчик может быть уничтожен без проблем, да-
к физической памяти, о чем мы поговорим чуть ниже). же если это отладчик-эмулятор. Исключение составляют
Главное достоинство описанного приема в том, что он хо- лишь виртуальные машины типа BOCHS, но, как мы уже
рошо чувствует себя под всей линейкой Windows (как 9x, говорили, пытаться отладить Windows-приложение на них
так и NT) и маловероятно, чтобы в последующих версиях несерьезно. Хакер утонет в посторонних потоках и систем-
что-нибудь изменилось. ных вызовах!
Замечание: Эмуляторы типа VMWare или Virtual PC убить
Доступ к физической памяти через PhysicalMemory так же нельзя, но что толку? Они не
В MS-DOS код отладчика и системные данные (например, содержат интегрированного отладчика и не могут содер-
таблица векторов прерываний) находились в одном адрес- жать его в принципе, поскольку используют динамичес-
ном пространстве с отлаживаемой программой, что откры- кую эмуляцию, при которой большая часть кода виртуаль-
вало большой простор для методов борьбы. Можно было ных машин исполняется на живом процессоре, а это зна-
проскандировать память и убить отладчик или просто за- чит, что проэмулировать TF-флаг без серьезной доработ-
действовать отладочные вектора (int 01h и int 03h) под нуж- ки эмулятора (и потери колоссальной производительнос-
ды защитного механизма, положив туда что-то полезное ти) никому не удастся.
(скажем, ключ расшифровки), а через некоторое время счи- Некоторые считают PhysicalMemory ужасной дырой
тать его обратно. Если никакого отладчика нет или он не- в безопасности. Дескать, как это так – с прикладного уров-
активен, искажение отладочных векторов не нарушает ра- ня и сразу в дамки! На самом деле здесь нет ничего не-
ботоспособности операционной системы, и мы читаем то, нормального. Если у хакера есть права администратора,
что положили. А вот под отладчиком все будет иначе. Ско- он может беспрепятственно загружать драйвера, из кото-
рее всего произойдет тотальный крах, поскольку при гене- рых можно делать все, что угодно, причем в NT загрузка
рации трассировочного прерывания или достижении точ- драйвера не требует перезагрузки, а это значит, что нали-
ки останова управление будет передано в «космос» (век- чие псевдоустройства «PhysicalMemory» никак, я повторяю,
тор ведь искажен!). Если же отладчик принудительно вос- никак не отражается на безопасности, а всего лишь делает
становит вектора, тогда вместо сохраненных данных за- доступ к физической памяти более комфортным и удобным.
щищенная программа прочитает уже не ключ расшифров- В UNIX (модель безопасности которой вырабатывалась
ки, а нечто совершенно иное! Теоретически на 386+ про- годами) издавна существуют псевдоустройства /dev/mem
цессорах отладчик может контролировать доступ к отла- и /dev/kmem, предоставляющие доступ к физической памя-
дочным векторам и эмулировать операции чтения/записи, ти до и после трансляции, но никто не собирается их кри-
не производя их на самом деле. Но это потребует двух ап- тиковать. Эта функция нужна достаточно многим систем-
паратных точек останова, которых в x86 процессорах все- ным программам и самой операционной системе, если ее
го четыре, да и тех постоянно не хватает, так что разбра- изъять, программисты начнут писать свои драйвера, предо-
сываться ими не резон. ставляющие доступ к физической памяти, и тогда начнет-
Операционная система Windows использует раздельные ся полный разброд и распад, поскольку в них не исклю-
адресные пространства и виртуальную память, а это зна- чены всякого рода ошибки. Разработчик драйвера может
чит, что отлаживаемое приложение не может «дотянуть- забыть о проверке уровня привилегий и давать доступ не
ся» ни до отладчика, ни до векторов прерываний. Можно, только администраторам, а всем пользователям системы,
конечно, написать драйвер (как известно, драйвер может что будет нехорошо. Тем не менее 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/
В операционных системах семейства NT имеется спе- windowsserver2003/library/BookofSP1/e0f862a3-cf16-4a48-
циальное псевдоустройство «PhysicalMemory», предостав- bea5-f2004d12ce35.mspx).

56
программирование
Тем не менее на всех остальных системах данный при- ! от к р ы в ае м \ Devic e\ Physic alM emor y, и с п ол ь зуя
ем работает вполне нормально, поэтому не стоит списывать NtOpenSection, получаем дескриптор;
его со счетов, а с Windows 2003 Sever SP1 мы еще разбе- ! извлекаем из него дескриптор безопасности (security
ремся! (Не сейчас, в смысле еще не в этой статье, но как- descriptor) через GetSecurityInfo;
нибудь потом.) ! добавляем права на чтение/запись в текущий ACL с по-
Давайте возьмем утилиту objdir из пакета NT DDK и за- мощью функции SetEntriesInAcl;
пустим ее с параметром «\Device» (просмотр устройств ! обновляем дескриптор безопасности посредством вы-
и псевдоустройств, установленных в системе). Вот что зова SetSecurityInfo;
она скажет: ! закрываем дескриптор, возвращенный NtOpenSection.
Листинг 4. Просмотр списка установленных (псевдо)устройств Теперь физическую память можно читать и писать.
утилитой objdir
Для этого секцию PhysicalMemory нужно спроецировать
$objdir \Devic на виртуальное адресное пространство, вызвав NativeAPI-
… функцию NtMapViewOfSection. Ниже показано, как это сде-
ParTechInc0 Device лать:
ParTechInc1 Device
ParTechInc2 Device
PfModNT Device Листинг 6. Проецирование физической памяти на виртуальное
PhysicalMemory Section
адресное пространство
PointerClass0 Device // переменные-аргументы
Processor Device HANDLE Section = xxx; // ← входной параметр дескриптор
RasAcd Device // секции
RawCdRom Device PVOID vAddress = xxx; // ← входной параметр виртуальный
// адрес, куда проецировать
Как видно, PhysicalMemory – это не совсем устройство, DWORD Size = xxx; // ← количество байт для
точнее, совсем не устройство (Device), а секция (Section), // проецирования от начала секции
поэтому для работы с ней следует использовать функцию // прочие переменные, инициализированные программой
NtOpenSection. Пример простейшей реализации такого вы- PHYSICAL _ ADDRESS pAddress; NTSTATUS ntS; ↵
DWORD MappedSize; PVOID MappedAddress=NULL;
зова приведен ниже:
// Внимание! Функции _ _ GetPhysicalAddress не сущестует
// в природе! Она дана условно. Ниже по тексту будет
Листинг 5. Открытие псевдоустройства PhysicalMemory // объяснено почему
// разные переменные pAddress = _ _ GetPhysicalAddress((PVOID) vAddress);
NTSTATUS ntS; HANDLE Section; ↵
OBJECT _ ATTRIBUTES ObAttributes; // проецируем секцию PhysicalMemory на виртуальное
INIT _ UNICODE(ObString,L"\\Device\\PhysicalMemory"); // адресное пространство
ntS = NtMapViewOfSection(Section, (HANDLE) -1, ↵
// инициализация атрибутов &MappedAddress, 0L, Size, &pAddress, &MappedSize, ↵
InitializeObjectAttributes(&ObAttributes, &ObString, ↵ 1, 0, PAGE _ READONLY);
OBJ _ CASE _ INSENSITIVE | OBJ _ KERNEL _ HANDLE, ↵
NULL, NULL);
Единственная проблема – это трансляция адресов (пе-
// открываем секцию PhysicalMemory ревод физических адресов в виртуальные и наоборот).
ntS = NtOpenSection(&Section, ↵
SECTION _ MAP _ READ|SECTION _ MAP _ WRITE, ↵ NT предоставляет доступ только к физической памяти
&ObAttributes); до трансляции, а поскольку физическая память использует-
ся как кэш, то одни и те же физические страницы в разное
Возможно, мы захотим предоставить доступ к псев- время могут отображаться на различные виртуальные адре-
доустройству PhysicalMemory не только администратору, са многих адресных пространств. «Официально» трансля-
но и всем другим пользователям. Для этого необходимо цией занимается функция MmGetPhysicalAddress, доступная
изменить права. Естественно, делать это может только ад- только на уровне ядра, что нас, прикладников, естествен-
министратор, зато потом физическую память будут трогать но, не устраивает. Тем не менее ситуация вовсе не так без-
все кому не лень. Многие вирусы и root-kit именно так и пос- надежна, как это кажется на первый взгляд.
тупают. Они прописывают себя в автозагрузке (или любым Для большинства задач искать соответствие между
другим путем закрепляются в системе) и ждут, пока пользо- физическими и виртуальными адресами вообще не нуж-
ватель хотя бы разочек не зайдет в систему под админист- но! Ведь существуют же сигнатуры! Достаточно создать
ратором. После этого они меняют права на PhysicalMemory банк сигнатур всех популярных отладчиков, после чего
и дальше работают уже из-под пользователя. Легальные их обнаружение не станет проблемой, а большинство слу-
программы, в частности защитные механизмы, зачастую жебных структур типа таблицы дескрипторов прерываний
поступают так же. Требуя администратора лишь на стадии (IDT) вообще работают с физическими адресами. Найти их
установки, они тем не менее успевают за это время сущес- путем сканирования PhysicalMemory – не проблема. Пос-
твенно ослабить безопасность системы. Ну что тут можно ле чего останется только поиздеваться над прерывания-
сказать? Никогда не устанавливайте на компьютер про- ми int 01h и int 03h (или над их обработчиками). Прием, ко-
грамм, которым не вполне доверяете. То есть не устанав- нечно, грубый и убивающий любые отладчики независимо
ливайте никаких программ вообще. Шутка. Ладно, не будем от того, отлаживают ли они нашу программу или нет. Пра-
отвлекаться, а лучше рассмотрим, какие шаги необходимо вильные программисты так не поступают! Защитные ме-
предпринять для изменения атрибутов доступа. ханизмы не должны, просто не имеют морального (и от-

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


программирование
части даже юридического) права мешать отладке посто-
ронних программ, но... Зачастую они все-таки мешают. Как работает Win2K/XP SDT Restore
Так что сказанное надо воспринимать не как руководство Хорошим примером использования доступа к физической памя-
к действию, а как пособие по ремонту чужих защит. О взло- ти «честными» программами является утилита SDT Restore, ко-
ме в данном случае никто и не говорит. Почему я, легаль- пию которой можно бесплатно скачать с http://www.security.org.sg/
ный пользователь защищенной программы, заплативший code/sdtrestore.html. Как и следует из ее названия, она занимается
за нее деньги, не могу держать на компьютере soft-ice?! тем, что восстанавливает SDT – Service Description Table, содер-
Почему я должен каждый раз перезагружаться для рабо- жащую указатели на системные вызовы, которые могут быть пе-
ты с программой?! рехвачены злоумышленником для сокрытия своего присутствия
Впрочем, все это лирика. В некоторых случаях (напри- в системе, то есть стелсирования. Многие root-kit так и делают.
мер, для борьбы с отладчиками прикладного уровня) вы- Они подменяют оригинальные вызовы на свои, и система теряет
полнять трансляцию все-таки необходимо. Это не так-то способность обнаруживать создаваемые ими файлы, процессы,
просто сделать! Статья «Playing with Windows /dev/(k)mem» сетевые соединения и т. д.
из PHRACK (http://www.phrack.org/phrack/59/p59-0x10.txt) В MS-DOS для борьбы со Stealth-вирусами обычно прибега-
дает некоторые зацепки, частично решающие проблемы, ли к системной дискете, но те времена уже давно прошли и, хо-
но до полной победы еще далеко. тя Windows в принципе можно загрузить и с лазерного диска (на-
Проще всего транслируются адреса из диапазо- пример, Windows PE) или с дополнительного винчестера, такой
на 80000000h:A0000000h. Перевод виртуального ад- подход не слишком-то удобен, хотя бы уже потому, что требует
реса в физический осуществляется путем наложения перезагрузки, а сервера лучше не перезагружать. Проще (хотя
маски 1FFFF000h, однако начиная с адреса 877EF000h и не столь надежно) восставить SDT через PhysicalMemory. И хо-
это правило срабатывает не всегда. Адреса < 80000000h тя root-kit может легко отследить обращение к ней (для этого ему
и > A0000000h уже не могут быть транслированы таким пу- достаточно перехватить NtOpenSection), все известные мне зло-
тем, хотя с некоторой вероятностью маска FFFF000h все- вредные программы этим еще не занимаются, и потому они мо-
таки срабатывает, и простейший вариант реализации фун- гут быть легко обезврежены. Во всяком случае пока.
кции __GetPhysicalAddress выглядит так: Подробнее о методах маскировки и борьбы можно прочитать
в статье «Hide’n’Seek – Anatomy of Stealth Malware» (http://www.
Листинг 7. Простейший (но ненадежный) алгоритм трансляции blackhat.com/presentations/bh-europe-04/bh-eu-04-erdelyi/bh-eu-
адресов
04-erdelyi-paper.pdf).
PHYSICAL _ MEMORY MyGetPhysicalAddress(void *BaseAddress)
{
if (BaseAddress < 0x80000000 || BaseAddress >= ↵ Если не трогать трансляцию, то никаких проблем вообще
0xA0000000) не возникает!
{
return(BaseAddress & 0xFFFF000);
} Заключение
return(BaseAddress & 0x1FFFF000); Мы «воскресили» только два типа антиотладочных приемов,
} а всего их... Подробное описание займет целую книгу, если
не больше. Но дело даже не в этом. Основная сила защит-
Его можно встретить в некоторых вирусах и root-kit (ког- ных механизмов в засекреченности (или малоизвестности)
да вы столкнетесь с ним при дизассемблировании, вы бу- алгоритмов их работы. В отличие от криптографии, где стой-
дете знать, что это такое), однако в легальных программах кость шифра в основном определяется стойкостью ключа,
(особенно коммерческих!) его использование категоричес- защитить программный код таким методом невозможно. Же-
ки недопустимо, и потому необходимо либо все-таки писать лезо не позволяет! Тут действует такое правило: коль скоро
свой драйвер, вызывающий MmGetPhysicalAddress из ре- программу можно запустить, можно ее и взломать.
жима ядра, либо, воспользовавшись тем фактом, что ад- Антиотладочные приемы, описанные в доступной лите-
реса из диапазона 80000000h:877EF000h транслируются ратуре, с которой может ознакомиться всякий хакер, луч-
однозначно, внедрить в операционную систему специаль- ше не применять. Да, они по-прежнему затрудняют взлом,
ный «жучок». То есть фактически создать в ней свой собс- и знание факта, что программа занимается самотрасси-
твенный call-gate, позволяющий вызывать ядерные фун- ровкой, еще не позволяет эту трассировку обойти. Скорее
кции с прикладного уровня. Один из вариантов его реа- всего взломщику потребуется написать собственный от-
лизации приведен в вышеупомянутой статье, однако он ладчик, а на это требуется время. Тем не менее, если даже
не свободен от ошибок, и на многопроцессорных маши- самый стойкий антиотладочный прием получает широкое
нах (которыми, в частности, являются все машины с ма- распространение и встречается во множестве программ,
теринской платой и процессором Pentium-4 с технологией разработка взламывающего инструментария становится
Hyper-Threading, не говоря уже о многоядерных AMD) воз- психологически и экономически оправданной. Хакеры са-
можны «синие экраны смерти», которые опять-таки недо- дятся за клавиатуры и начинают его писать.
пустимы... Согласен, информация должна быть открыта. В засек-
Означает ли это, что данный антиотладочный прием речивании антиотладочных приемов нет никакой необхо-
полностью бесполезен? Вовсе нет! Трудности создания димости, тем не менее заниматься их поиском каждый дол-
устойчивой и надежно работающей программы на его ос- жен самостоятельно, тем более, что в современных процес-
нове носят технический характер и вполне преодолимы. сорах и операционных системах есть что искать!

58
bugtraq

Множественные уязвимости Уязвимость форматной строки


в различных диссекторах в Ethereal при обработке имени файла
Программа: Ethereal 0.7.7-0.10.12. в различных антивирусах Bitdefender
Опасность: Критическая. Программа: BitDefender Internet Security 9, BitDefender
Описание: Обнаружены множественные уязвимости в об- Professional Plus 9, BitDefender Standard 9, BitDefender
работке различных диссекторов и PCRE в Ethereal. Удален- Antivirus Professional Plus 8.x, BitDefender Antivirus Standard
ный пользователь может с помощью специально сформи- 8.x, BitDefender Professional Edition 7.x, BitDefender Standard
рованных пакетов вызвать отказ в обслуживании или вы- Edition 7.x.
полнить произвольный код на целевой системе. Опасность: Критическая.
1. Потребление всех доступных ресурсов на системе в дис- Описание: Уязвимость форматной строки обнаружена при
секторах ISAKMP, FC-FCS, RSVP, ONC RPC и ISIS LSP. создании файла с результатами сканирования. Модуль
2. Аварийное завершение работы в диссекторах IrDA, не в состоянии корректно обработать специально сфор-
SMB. мированный каталог или файл, содержащий специфика-
3. Выполнение произвольного кода в диссекторах SLIMP3, ции формата в его имени (например, 8X%.8X). В результа-
AgentX, SRVLOC те удаленный атакующий может создать специально об-
4. Бесконечный цикл в диссекторах BER, SigComp работанный файл чтобы скомпрометировать систему уда-
UDVM. ленного пользователя.
5. Разыменование нулевого указателя в диссекторах SCSI, URL производителя: www.bitdefender.com.
sFlow, Rtnet Решение: Уязвимость устранена в BitDefender 7.x,
6. Деление на ноль в диссекторе X11 BitDefender 8.x и BitDefender 9 Internet Security 26 сентября
7. Освобождение некорректного указателя в диссекторе 2005 года и в BitDefender 9 Professional Plus и BitDefender 9
WSP Standard 4 октября 2005 года.

Установщик Windows использует уязвимую версию Выполнение произвольного кода


PCRE. в Sun Directory Server
URL производителя: www.ethereal.com. Программа: Sun Directory Server 5.2 Patch 3 и более ран-
Решение: Установите последнюю версию (0.10.13) с сай- ние версии.
та производителя. Опасность: Критическая.
Описание: Уязвимость позволяет удаленному пользовате-
Переполнение буфера в ProZilla лю выполнить произвольный код на целевой системе. Под-
Программа: ProZilla 1.3.7.4. робности уязвимости не сообщаются.
Опасность: Высокая. URL производителя: www.sun.com.
Описание: Уязвимость существует из-за ошибки при обра- Решение: Установите исправление (5.2 Patch 4) с сайта
ботке результатов поиска в функции get_string_ahref() фай- производителя.
ла ftpsearch.c. Удаленный пользователь может вызвать пе-
реполнение стека и выполнить произвольный код на целе- Уязвимость форматной строки
вой системе с помощью злонамеренного сервера, который в VERITAS NetBackup в службе
вернет на запрос специально сформированную строку в ат- bpjava-msvc
рибуте HREF тега <A>. Удачная эксплуатация требует, что- Программа: VERITAS NetBackup Data and Business Center
бы ProZilla был запущен с атрибутом -ftpsearch и атакую- 4.5FP All All NB_45_9S1443_F, VERITAS NetBackup Data and
щий мог отравить DNS-кеш. Business Center 4.5MP All All NB_45_9S1729_M, VERITAS
URL производителя: http://prozilla.genesys.ro. 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.
Переполнение буфера в компоненте Опасность: Критическая.
W3C-логирования в MailEnable Описание: Уязвимость форматной строки обнаружена
Программа: MailEnable Professional 1.6 и более ранние вер- в службе bpjava-msvc, предназначенной для аутентифика-
сии; Enterprise 1.1 и более ранние версии. ции пользователей в пользовательском Java-интерфейсе.
Опасность: Высокая. Удаленный пользователь может послать специально сфор-
Описание: Уязвимость существует в службе IMAP в компо- мированную команду COMMAND_LOGON_TO_MSERVER
ненте W3C-логирования. Удаленный пользователь может на TCP-порт приложения 13722 и выполнить произвольный
вызвать переполнение буфера и выполнить произвольный код на целевой системе с привилегиями SYSTEM.
код на целевой системе. URL производителя: www.symantec.com.
URL производителя: www.mailenable.com. Решение: Установите исправление с сайта производите-
Решение: Установите исправление с сайта производителя – ля.
http://www.mailenable.com/hotfix/MEIMAPS-UPD0508221400.zip.
Составил Александр Антипов

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


программирование

Как программы на Си взаимодействуют


с сервером БД PostgreSQL

Владимир Мешков
PostgreSQL является эффективным средством для хранения и обработки информации.
Разработчики этой СУБД предоставили интерфейсы для многих языков программирования.
Поддержка таких языков, как Perl, PHP, Python, обеспечивает широкое применение PostgreSQL
в области веб-программирования. Язык системного программирования Cи позволит использовать
эту СУБД, когда необходимо добиться от приложения максимального быстродействия.

С
егодня мы рассмотрим пример взаимодействия Обзор библиотеки libpq
программы на языке Си и сервера баз данных Библиотека libpq является программным интерфейсом,
PostgreSQL c использованием библиотеки libpq. обеспечивающим взаимодействие программы, состав-
В случае отсутствия опыта работы с СУБД PostgreSQL ре- ленной на языке Си, с сервером баз данных PostgreSQL.
комендую начать изучение этой темы со статьи Сергея Эта библиотека содержит набор функций, позволяющих
Супрунова [1]. клиентской программе обмениваться информацией с ба-

60
программирование
зой данных. Библиотека входит в состав дистрибутива for(;;) {
newsock = accept(sock, NULL, NULL);
СУБД PostgreSQL. if(fork() == 0) {
Для выполнения информационного обмена клиентская while(recv(newsock, &c, 1, 0) > 0) {
send(newsock, &i, 1, 0);
программа вначале должна подключиться к базе данных. i++;
Для связи с сервером баз данных используется механизм }
close(newsock);
сокетов, при этом если клиент и сервер расположены на од- exit(0);
ной локальной машине, используется сокет домена AF_ }
close(newsock);
UNIX, в случае расположения на удаленных машинах – со- }
кет домена AF_INET. Тип домена указывается в парамет- return 0;
}
рах системного вызова socket.
Для хранения адресной информации сокет домена AF_ Листинг 2. Клиентский процесс
UNIX использует структурный тип sockaddr: int main()
{
struct sockaddr { int sock;
sa _ family _ t sa _ family; struct sockaddr saddr;
char sa _ data[14]; char c, rc;
}
sock = socket(AF _ UNIX, SOCK _ STREAM, 0);

memset((void *)&saddr, 0, sizeof(saddr));


Поле sa_family определяет тип домена, к которому при- saddr.sa _ family = AF _ UNIX;
надлежит сокет (AF_UNIX в нашем случае), массив sa_data memcpy(saddr.sa _ data, "/tmp/.sock.new", 14);
содержит путь к файлу, который описывает сокет. connect(sock, (struct sockaddr *)&saddr, ↵
Таким образом, сокет домена AF_UNIX представляет sizeof(struct sockaddr));
собой специальный файл. Сервер PostgreSQL после за- for(;;) {
пуска по умолчанию создает в каталоге /tmp сокет домена c = getchar();
send(sock, &c, 1, 0);
AF_UNIX в виде файла .s.PGSQL.5432, посмотреть на кото- if(recv(sock, &rc, 1, 0) > 0) ↵
рый можно при помощи команды ls -la. Среди прочих фай- printf("From server: %d\n", rc);
else {
лов будет запись следующего вида: close(sock);
exit(0);
srwxrwxrwt 1 pgsql users 0 Okt 4 10:37 .s.PGSQL.5432 }
}
Литера «s» перед правами доступа означает, что дан- return 0;
}
ный файл является сокетом.
Команда netstat -a позволяет нам убедиться, что файл Запустим процессы в разных терминалах. Сервер после
/tmp/.s.PGSQL.5432 входит в список активных сокетов до- запуска создаст в каталоге /tmp файл .sock.new. Через этот
мена AF_UNIX. Введем эту команду и увидим запись при- файл будет осуществляться взаимодействие между клиен-
мерно такого вида: том и сервером: клиент будет отправлять серверу символы,
вводимые пользователем, а сервер будет возвращать чис-
unix 2 [ ACC ] STREAM LISTENING 20636071 /tmp/.s.PGSQL.5432
ловые значения, каждый раз увеличивая их на 1. При этом
Для лучшего понимания рассмотрим тестовый пример на каждый введенный символ сервер отвечает двумя.
взаимодействия процессов через сокет домена AF_UNIX. Тут все правильно, т.к. серверу передается еще и символ
Ниже представлены два листинга – серверного и клиент- перевода строки «\n», вот он на него и реагирует.
ского процесса. В целях экономии места обработка оши- После остановки сервера сигналом SIGINT (комбина-
бок пропущена. ция клавиш <Ctrl+C>) файл .sock.new останется в катало-
ге /tmp. Его необходимо удалить вручную, или переопреде-
Листинг 1. Серверный процесс лить обработчик сигнала SIGINT для закрытия сокета и уда-
#include <sys/types.h> ления файла .sock.new, иначе при повторном запуске сер-
#include <sys/socket.h> вера системный вызов bind не сможет привязать адресную
int main() структуру к сокету, сообщая нам, что «Address already in use
{ (адрес уже используется)».
int sock, newsock;
struct sockaddr saddr; Вернемся к рассмотрению темы статьи. Итак, для под-
char c; ключения к серверу баз данных библиотека предоставляет
static char rc = 1;
несколько функций, но мы рассмотрим одну – PQsetdbLogin.
/* Создаем сокет домена AF _ UNIX */ Прототип этой функции имеет следующий вид:
sock = socket(AF _ UNIX, SOCK _ STREAM, 0);

/* Заполняем адресную структуру saddr */ PGconn *PQsetdbLogin(const char *pghost,


memset((void *)&saddr, 0, sizeof(saddr)); const char *pgport, const char *pgoptions,
saddr.sa _ family = AF _ UNIX; /* тип домена */ const char *pgtty, const char *dbName,
/* путь к файлу */ const char *login, const char *pwd);
memcpy(saddr.sa _ data, "/tmp/.sock.new", 14);

bind(sock, (struct sockaddr *)&saddr, ↵ Эта функция устанавливает новое соединение с ба-
sizeof(struct sockaddr));
listen(sock, 1); зой данных, которое описывается при помощи объекта ти-
па PGconn. Параметрами функции являются:

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


программирование
! pghost – если сервер и клиент расположены на локаль- Данные представляют собой последовательность (кортеж)
ном хосте, этот параметр принимает значение NULL, строк таблицы, и каждая строка состоит из нескольких яче-
и взаимодействие с сервером осуществляется через ек. Выполнить выборку содержимого определенной ячей-
сокет домена AF_UNIX, по умолчанию расположенный ки можно при помощи функции PQgetvalue:
в каталоге /tmp. При работе через сеть это поле содер-
жит имя или IP-адрес хоста, на котором находится сер- char* PQgetvalue(const PGresult *res, int tup _ num, ↵
int Þeld _ num);
вер баз данных;
! pgport – номер порта (NULL для локального хоста); Здесь tup_num – это номер строки таблицы, а field_num –
! pgoptions – дополнительные опции, посылаемые серве- номер ячейки в строке, из которой считываются данные.
ру для трассировки/отладки соединения; Для определения числа строк, считанных из таблицы, ис-
! pgtty – терминал или файл для вывода отладочной ин- пользуется функция PQntuples (tuple в переводе с англий-
формации; ского означает кортеж, последовательность):
! dbName – имя базы данных;
! login, pwd – имя пользователя и пароль доступа к базе int PQntuples(const PGresult *res);
данных.
Функция PQnfields вернет число ячеек в одной стро-
Функция PQsetdbLogin всегда возвращает указатель ке таблицы:
на объект типа PGconn, независимо от того, успешно бы-
ло установлено соединение или нет. Проверку состоя- int PQnÞelds(const PGresult *res);
ния соединения выполняет функция PQstatus. Объект ти-
па PGconn передается этой функции в качестве парамет- По окончании информационного обмена с базой дан-
ра, возвращаемое функцией значение характеризует со- ных клиентская программа должна при помощи функции
стояние соединения: PQclear освободить структуру PGresult, содержащую ре-
! CONNECTION_BAD – не удалось установить соедине- зультаты запроса, и отключиться от базы, вызвав функ-
ние с базой данных; цию PQfinish:
! CONNECTION_OK – соединение с базой данных успеш-
но установлено. void PQclear(PQresult *res);
void PQÞnish(PGconn *conn)

Эти значения определены в заголовочном файле libpq-fe.h.


После установления соединения клиентская програм- Пример использования библиотеки libpq
ма может приступить к обмену информацией с базой дан- Рассмотрим простой пример использования библиотеки.
ных. Для этой цели библиотека libpq предоставляет функ- Предположим, что у нас имеется каталог, содержащий фай-
цию PQexec, прототип которой имеет следующий вид: лы различных типов (в том числе и специальные). Мы со-
ставим две программы на языке Си: первая программа бу-
PGresult *PQexec(PGconn *conn, const char *query); дет выполнять обход указанного ей каталога, считывать
и заносить в базу данных имена и размеры всех регуляр-
Параметрами функции PQexec являются указатель ных файлов из этого каталога и всех вложенных каталогов.
на объект типа PGconn (результат работы функции PQset- Вторая программа будет считывать информацию об этих
dbLogin) и строка, содержащая запрос к базе данных. От- файлах из базы данных и выводить ее на экран.
правив запрос, функция ожидает ответ от базы и сохраня- Для выполнения этой задачи устанавливаем на локаль-
ет в структуре типа Pgresult статус запроса и данные, по- ную машину СУБД PostgreSQL (см. [1]). После инициали-
лученные от базы. Для обработки статуса запроса к базе зации базы данных создаем нового пользователя my_user
данных используется функция PGresultStatus. и новую базу my_database:

ExecStatusType PQresultStatus(const PGresult *res); createuser -a -d my _ user -E -P


createdb -O my _ user my _ database

Функция PQresultStatus может возвращать следующие Для доступа к базе данных пользователь my_user дол-
значения, определенные в файле libpq-fe.h: жен указать пароль. Сам пароль будет храниться в зашиф-
! PGRES_EMPTY_QUERY – серверу отправлена пустая рованном виде, в конфигурационном файле pg_hba.conf ме-
строка запроса; няем значение поля METHOD c trust на md5.
! PGRES_COMMAND_OK – запрос, не требующий воз- Далее, подключаемся к базе данных my_database и со-
врата данных из базы, выполнен успешно; здаем в ней таблицу, состоящую из двух полей: поля fname
! PGRES_TUPLES_OK – успешное чтение данных из ба- типа char(100) для хранения имен файлов и поля fsize типа
зы; int для хранения размеров файлов.
! PGRES_FATAL_ERROR – при обращении к базе данных
произошла критическая ошибка. Заполнение базы данных информацией
Первый этап разработки – программа для заполнения базы
Если статус запроса равен PGRES_TUPLES_OK, струк- данных информацией. Назовем ее insert_data. Входные па-
тура PGresult будет содержать данные, полученные от базы. раметры – имя базы данных, имя таблицы в базе и имя ка-

62
программирование
талога, из которого будут считываться данные о файлах – #include <termios.h>
int tcgetattr(int ttyfd, struct termios *told);
передаются в параметрах командной строки: int tcsetattr(int ttyfd, int actions, const struct ↵
termios *tnew);
# ./insert _ data -d [имя базы данных] -t [имя таблицы] ↵
-p [имя каталога]
Функция tcgetattr сохраняет текущее состояние тер-
Определим переменные для хранения имен базы дан- минала в структуре told типа termios. Параметр ttyfd дол-
ных, таблицы и каталога для чтения: жен быть дескриптором файла, описывающего терминал.
Для получения доступа к своему управляющему термина-
unsigned char *dbname = NULL; /* имя базы данных */ лу процесс может использовать имя файла /dev/tty, кото-
unsigned char *table = NULL; /* имя таблицы */
/* каталог, из которого считываются данные */ рое всегда интерпретируется как текущий управляющий
unsigned char *pathname = NULL; терминал или стандартный вывод с дескриптором 0. Вы-
зов функции tcsetattr установит новое состояние термина-
Проверяем число переданных аргументов. Их долж- ла, заданное структурой tnew, а параметр actions опреде-
но быть 7: ляет, когда и как будут установлены новые атрибуты тер-
минала:
if(argc != 7) usage(); ! TCSNOW – немедленное выполнение изменений;
! TCSADRAIN – перед установкой новых параметров ожи-
Если количество переданных аргументов не соответс- дается опустошение очереди вывода;
твует указанному значению, при помощи функции usage() ! TCSAFLUSH – ожидается опустошение очереди выво-
отобразим формат вызова нашей программы: да, затем также очищается очередь ввода.

void usage() Для доступа к управляющему терминалу открываем со-


{
fprintf(stderr, "Usage: insert _ data ↵ ответствующий файл устройства:
-d [имя базы данных] -t [имя таблицы] ↵
-p [исходный каталог]\n"); int ttyfd = open("/dev/tty", O _ RDWR);
exit(0);
}
Далее считываем текущее состояние терминала в струк-
Считываем параметры командной строки. Разбор ко- туру struct termios t, снимаем флаг отображения символов
мандной строки выполним при помощи функции getopt: ECHO в поле c_lflag и устанавливаем новое состояние тер-
минала:
while((int c = getopt(argc, argv, "d:t:p:")) != EOF) {
switch(c) { tcgetattr(ttyfd, &t); /* сохраняем настройки терминала */
case 'd': t.c _ lßag &= ~ECHO; /* сбрасываем флаг ECHO */
/* имя базы данных */ /* устанавливаем новое состояние терминала */
dbname = (unsigned char *)optarg; tcsetattr(ttyfd, TCSANOW, &t);
break;
case 't':
/* имя таблицы */
table = (unsigned char *)optarg; Наличие флага TCSANOW требует немедленного вы-
break; полнения изменений. Подробности управления термина-
case 'p':
/* имя каталога */ лом смотрите в man termios.
pathname = (unsigned char *)optarg; После этих действий вводим пароль для доступа к ба-
break;
/* ошибка в параметрах */ зе данных:
case '?':
default: scanf("%s", pwd);
usage();
}
}
Вернем настройки терминала в исходное состояние –
Считываем имя пользователя и пароль для доступа включим отображение вводимых символов на экране:
к базе данных:
t.c _ lßag |= ECHO; /* устанавливаем флаг ECHO */
tcsetattr(ttyfd, TCSANOW, &t);
unsigned char user[80]; /* имя пользователя */ close(ttyfd);
unsigned char pwd[80]; /* пароль доступа к базе данных */

memset(user, 0, sizeof(user)); Подключаемся к базе данных, вызвав функцию PQ-


printf("Login: ");
scanf("%s", user); setdbLogin. Эта функция вернет указатель на объект типа
PGconn, независимо от того, успешно было установлено
memset(pwd, 0, 80);
printf("Password: "); соединение или нет:

Перед тем как ввести пароль, из соображений безопас- PGconn *conn = PQsetdbLogin(NULL, NULL, NULL, NULL, ↵
dbname, user, pwd);
ности отключим отображение вводимых символов на экра-
не, изменив настройки управляющего терминала. Для уп- Первые четыре параметра функции PQsetdbLogin ус-
равления свойствами терминала используются функции тановлены в NULL, так как сервер баз данных находится
tcgetattr и tcsetattr: на локальной машине, и дополнительных опций мы ему

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


программирование
не передаем. Если сервер расположен на удаленной ма- /* PGRES _ COMMAND _ OK, т.к. данных от базы мы не */
/* получаем */
шине, то вызов функции PQsetdbLogin примет следую- if(PQresultStatus(res) != ↵
щий вид: PGRES _ COMMAND _ OK) {
fprintf(stderr, "INSERT ↵
query failed.\n");
PQsetdbLogin("192.168.1.1", "5432", NULL, NULL, dbname, ↵ break;
user, pwd), }
}
где 192.168.1.1 – IP адрес хоста, на котором установлен сер- closedir(dp);
PQclear(res);
вер баз данных, 5432 – порт, который слушает база. return 0;
Анализируем состояние соединения и в случае ошибки }
завершаем выполнение программы:
После записи информации в базу данных отключаем-
if(PQstatus(conn) == CONNECTION _ BAD) { ся от нее:
fprintf(stderr, "Connection to database failed.\n");
fprintf(stderr, "%s", PQerrorMessage(conn));
exit(1); PQÞnish(conn);
}

При успешном установлении соединения с базой дан- Если функцию PQfinish не вызвать, то в данном случае
ных считываем необходимую нам информацию из указан- ничего страшного не произойдет, потому что процесс завер-
ного каталога. Считывание выполняет рекурсивная фун- шает выполнение. Ядро удаляет процесс из общего списка,
кция list_dir(), в параметрах которой мы передаем указа- уничтожая все служебные структуры, описывающие фай-
тель на объект типа PGconn, имя таблицы в базе данных лы и сокеты, с которыми процесс работал, а значение де-
и имя каталога: скриптора сокета (так же как и файла) имеет смысл толь-
ко в контексте процесса, так как по сути это индекс в мас-
int list _ dir(PGconn *conn, unsigned char *table, ↵ сиве структур.
unsigned char *pathname)
{ Если вместо функции отключения от базы перед выхо-
struct dirent *d; дом из программы организовать бесконечный цикл и ввес-
struct stat s;
DIR *dp; ти в соседнем терминале команду netstat, то можно увидеть,
/* результат обращения к базе данных */ что процесс установил соединение с базой данных через
PGresult *res;
/* абсолютное путевое имя файла */ сокет домена AF_UNIX. При остановке процесса сигналом
unsigned char full _ path[256]; SIGINT (комбинация клавиш Ctrl-C) это соединение исче-
/* строка запроса к базе данных */
unsigned char query[QUERY _ LEN]; зает, даже если мы не вызываем функцию PQfinish. Дру-
/* данные, передаваемые базе */ гое дело, если процесс не закрыл соединение и продолжает
unsigned char escape _ string[80];
функционировать (например, если это фоновый процесс).
/* Открываем каталог */ Тогда возможна ситуация несанкционированного исполь-
if((dp = opendir(pathname)) == NULL) {
perror("opendir"); зования уже установленного соединения (сокет не закрыт)
return -1; для доступа к базе данных, и при этом необязательно знать
}
пароль. Поэтому закрывать соединение надо явно.
/* Пропускаем родительский и текущий каталоги */ Вместо рассмотренной рекурсивной функции list_dir
d = readdir(dp); // "."
d = readdir(dp); // ".." в нашем примере удобнее использовать функцию ftw, ко-
торая выполняет обход дерева каталогов, начиная с задан-
/* Цикл чтения записей каталог */
while(d = readdir(dp)) { ного, и вызывающая процедуру, определенную пользова-
телем для каждой встретившейся записи каталога. Функ-
/* Формируем абсолютное путевое имя файла */
/* и получаем информацию о нем */ ция ftw имеет следующий вид:
memset(full _ path, 0, 256);
sprintf(full _ path, "%s/%s", pathname, ↵
d->d _ name); #include <ftw.h>
stat(full _ path, &s); int ftw(const char *path, int(* func)(), int depth);

/* Если это каталог – выполняем рекурсивный */ Первый параметр path определяет имя каталога, с ко-
/* вызов функции */ торого должен начаться рекурсивный обход дерева. Пара-
if(S _ ISDIR(s.st _ mode)) list _ dir(conn, ↵
table, full _ path); метр depth управляет числом используемых функцией ftw
различных дескрипторов файлов. Чем больше значение
/* Добавляем в базу информацию о файле, при этом */
/* преобразуем путевое имя файла при помощи */ depth, тем меньше будет случаев повторного открытия ка-
/* функции PQescapeString */ талогов, что сократит общее время обработки вызова. Вто-
memset(escape _ string, 0, 80);
PQescapeString(escape _ string, ↵ рой параметр func – это определенная пользователем функ-
full _ path, 80); ция, вызываемая для каждого файла или каталога, найден-
/* Формируем запрос и отправляем его базе данных */ ного в поддереве каталога path. При каждом вызове фун-
memset(query, 0, QUERY _ LEN); кции func будут передаваться три аргумента: заканчиваю-
sprintf(query, "INSERT INTO %s ↵
values('%s','%u')", table, ↵ щаяся нулевым символом строка с именем объекта, указа-
full _ path, s.st _ size); тель на структуру stat с данными об объекте и целочислен-
res = PQexec(conn, query);
ный код. Функция func, следовательно, должна быть пост-
/* Проверяем статус запроса. Он должен быть равен */ роена следующим образом:

64
программирование
int func(const char *name, const struct stat *sptr, ↵ }
int type) return 0;
{ }
/* Тело функции */
Для получения исполняемого модуля введем команду:
}
# gcc -o insert _ data insert _ data.c -lpq
Целочисленный аргумент type может принимать одно
из нескольких возможных значений, определенных в за-
головочном файле и описывающих тип встретившегося Чтение информации из базы данных
объекта: Второй этап разработки – программа для чтения информа-
! FTW_F – объект является файлом; ции из базы данных. Строится она по такому же принципу,
! FTW_D – объект является каталогом; как и предыдущая: в параметрах командной строки переда-
! FTW_DNR – объект является каталогом, который нельзя ются имя базы данных и таблицы, выполняется ввод имени
прочесть; и пароля, при этом отображение вводимых символов отклю-
! FTW_SL – объект является символьной ссылкой; чается. После этого подключаемся к базе данных:
! FTW_NS – объект не является символьной ссылкой,
для него нельзя успешно выполнить вызов stat. 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));
ка внутри функции ftw. Обход также закончится, если оп- exit(1);
}
ределенная пользователем функция возвратит ненулевое
значение. Тогда функция ftw прекратит работу и вернет Формируем и отправляем запрос к базе для выборки
значение, возвращенное функцией пользователя. Ошиб- всех полей из таблицы:
ки внутри функции ftw приведут к возврату значения -1,
тогда в переменной errno будет выставлен соответствую- memset(query, 0, QUERY _ LEN);
sprintf(query, "SELECT * FROM %s", table);
щий код ошибки. res = PQexec(conn, query);
Вызовем в нашей программе вместо рекурсивной фун-
кции list_dir функцию ftw: В случае успешного чтения данных из базы статус за-
проса должен быть равен PGRES_TUPLES_OK. Проверя-
ftw(pathname, list _ dir1, 1); ем это:

Функция list_dir1 передает базе данных информацию if(PQresultStatus(res) != PGRES _ TUPLES _ OK) {
fprintf(stderr, "SELECT query failed.\n");
о каждом регулярном файле: goto out;
}
int list _ dir1(const char *name, const struct stat *s, ↵
int type)
{ Отображаем результаты чтения:
PGresult *res;

/* строка запроса к базе данных */ for(i = 0; i < PQntuples(res); i++) {


unsigned char query[QUERY _ LEN]; for(n = 0; n < PQnÞelds(res); n++) printf("%-20s", ↵
unsigned char escape _ string[80]; PQgetvalue(res, i, n));
printf("\n");
/* Возвращаемся, если вызов stat завершился неудачно */ }
if(type == FTW _ NS) return 0;
Функция PQntuples вернет число прочитанных из таб-
/* Если объект является регулярным файлом, */ лицы строк, а функция PQnfields – число ячеек в одной
/* добавляем информацию о нем в базу */
if((type == FTW _ F) && S _ ISREG(s->st _ mode)) { строке.
Работоспособность программ была проверена для ОС
memset(escape _ string, 0, ↵
sizeof(escape _ string)); Linux Slackware 10.2 и FreeBSD 5.2, использовался сервер
PQescapeString(escape _ string, ↵ баз данных PostgreSQL 8.0.3.
name, sizeof(escape _ string));

memset(query, 0, QUERY _ LEN); Литература:


sprintf(query, "INSERT INTO ↵
%s values('%s','%u')", table, ↵ 1. Супрунов С. PostgreSQL: первые шаги. – Журнал «Системный
name, s->st _ size); администратор», №7, 2004 г. – 26-33 с.
res = PQexec(conn, query); 2. PostgreSQL 7.3.2 Programmer’s Guide by The PostgreSQL Global
Development Group.
/* Проверяем статус запроса */
if(PQresultStatus(res) != ↵ 3. Кейт Хэвиленд, Дайна Грей, Бен Салама. Системное про-
PGRES _ COMMAND _ OK) { граммирование в UNIX. Руководство программиста по раз-
fprintf(stderr, "INSERT ↵
query failed.\n"); работке ПО = Unix System Programming. A programmer’s guide
return -1; to software development: Пер. с англ. – М., ДМК Пресс, 2000 г. –
}
PQclear(res); 368 с., ил.

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


программирование

Управляем серверами в реальном


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

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

Вместо предисловия для автоматизированного управления об отключении питания на том серве-


На тему использования различных сце- Windows-серверами, довольно проста, ре, где установлен агент, и затем, ес-
нариев в задачах системного админис- особенно в свете недавних проблем ли по прошествии некоторого перио-
трирования уже написана масса все- с подачей электропитания. У заказчика да времени питание не восстанавли-
возможных статей. Особенно это каса- имелось несколько серверов Windows валось, начинал корректно выключать
ется Linux/UNIX-операционных систем, 2003, и требовалось организовать бес- сервера, при этом отправляя админис-
обладающих мощными языками сце- перебойное электропитание на основе тратору письмо по электронной почте
нариев, которые позволяют выполнять APC UPS. В комплекте с UPS поставля- с уведомлением об отключении.
большое количество различных адми- лось программное обеспечение, в со- На примере такого сценария мы
нистративных задач. став которого входил агент для взаимо- и рассмотрим реализацию задачи
А что же Windows? В Windows име- действия с UPS. Один из серверов под- управления серверами с помощью
ется WSH – Windows Script Host, это ос- ключался к источнику бесперебойно- VBScript. Думаю, примеры программ
новной инструмент для всех админис- го питания через COM-порт и на этом и методы работы, изложенные в ста-
тративных сценариев, поскольку все сервере был установлен агент, который тье, могут быть полезны не только
административные сценарии выпол- в случае отключения питания должен при решении описанной проблемы,
няются внутри WSH. Сценарии WSH был корректно завершить работу сер- но также и для других задач автома-
можно писать на языках Jscript .NET, вера. А вот на остальных серверах та- тизации системного администрирова-
VBScript, Perl, Python и REXX. В данной кой агент без подключения к источнику ния в реальном времени. Итак, присту-
статье все примеры сценариев приво- через СОМ-порт не работал, и следо- пим к реализации. Прежде всего со-
дятся на VBScript. вательно, эти сервера в случае исчез- здадим текстовый файл с расшире-
Документация по WSH предлагает новения питания проработали бы ров- нием vbs. Для выполнения сценария
использовать сценарии преимущест- но столько, насколько хватило бы за- достаточно будет лишь запустить со-
венно для сбора информации о сис- ряда аккумулятора, а потом просто от- зданный vbs-файл.
теме, работы с файловой системой ключатся, что, очевидно, совсем не хо-
или изменении различных системных рошо. Компания-производитель пред- Читаем журнал событий
настроек. Однако сегодня мы погово- лагает в качестве решения проблемы (Event Log)
рим об использовании сценариев для приобрести специальное оборудова- Основой разрабатываемого сцена-
автоматизированного мониторинга ние, проще говоря, СОМ-свитч, одна- рия является цикл, который осущест-
и управления Windows-серверами. ко в силу ряда причин нас подобный вляет поиск в журнале событий вхож-
вариант не устроил. дений искомого сообщения. Такие со-
Постановка задачи Тогда и был написан сценарий общения могут быть двух видов: сооб-
Причина, по которой возникла не- на VBScript, который отслеживал в жур- щение об отключении питания и о его
обходимость в написании сценария нале событий появление сообщения восстановлении.

66
программирование
При отключении питания в журнале событий появляет-
ся сообщение следующего вида (см. рис. 2).
Забегая вперед, замечу, что нас будет особо интересо-
вать именно поле Description, то есть тот текст, который со-
храняется в журнале в качестве описания.
При восстановлении питания агент создаст в журнале
событий следующее сообщение (см. рис. 3).
Итак, мы определили, как выглядят сообщения, отправ-
ляемые агентом источника бесперебойного питания. В жур-
нале событий нам необходимо искать сообщения с по-
лем Description вида: «UPS On Battery» или «Utility Power
Restored», которые будут сигнализировать о потере пита-
ния и его восстановлении соответственно.
Реализация поиска данных сообщений в журнале со- Рисунок 1. Журнал событий Event Log, содержащий сообщения
бытий может выглядеть, например, вот так: от агента источника бесперебойного питания
Следует немного пояснить принцип работы данного
Листинг 1. Поиск сообщений в журнале событий сценария, а также смысл некоторых переменных. Одной
Option Explicit из ключевых переменных, используемых в работе сцена-
Dim objWMI, objItem ' Objects // Объявляем переменные рия, является переменная iteration.
Dim strComputer
Dim intRecordNum, intRec, colLoggedEvents Данная переменная определяет количество итераций,
Dim 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 ↵ щения об отключении питания, счетчик iteration уменьшает-
LogÞle = 'Application'" )
ся на единицу, при достижении нулевого значения мы вызы-
// счетчики записей ваем процедуру shutdown, о которой речь пойдет ниже.
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 алгоритм, приведенный в Листинге 1, может показать-
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

End If
If intRecordNum>0 Then iteration=iteration-1 Отключаем сервера
loop Итак, перед нами стоит задача программно отключить пи-
WScript.Sleep 10000 // Задержка перед следующей итерацией тание на всех серверах нашей сети. Для этого прежде всего

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


программирование
ческой поддержки. В качестве параметра
данной процедуре передается имя отклю-
ченного сервера.
Рассмотрим процесс отправки уведом-
лений более подробно.

Отправляем уведомления
На самом деле вполне логично отправить
уведомление всем заинтересованным ли-
цам о том, что тот или иной сервер был от-
ключен в связи с потерей питания. В част-
ности, мы сбережем нервную систему сис-
темного администратора, который, не зная
причины, почему посреди ночи его серве-
ра не пингуются, в ужасе помчится из дома
Рисунок 2. Сообщение об отключении Рисунок 3. Сообщение о восстановлении на работу. А так наш сисадмин будет уже за-
основного питания основного питания
ранее знать причину отключения и по край-
необходимо завести на всех серверах (в случае, если в се- ней мере не будет излишне переживать по поводу возмож-
ти нет домена) или в домене учетную запись, наделенную ной потери данных. Также подобное уведомление будет
соответствующими правами. весьма полезно, если сервера находятся на аутсорсинге,
Я бы очень не рекомендовал использовать для этих либо в компании приходящий администратор.
целей учетную запись администратора, так как в исход- Конечно, кто-то может возразить, что у агента, который
ном тексте необходимо указать пароль учетной записи, взаимодействует с источником бесперебойного питания,
которая используется для выполнения отключения. Так- уже есть возможность отправки уведомления админист-
же из соображений безопасности необходимо ограничить ратору об отключении питания. Однако этот агент отпра-
доступ к данному сценарию так, чтобы его могли читать/ вит уведомление об отключении питания, а нас интересу-
запускать только администраторы. Подобная настройка ет информация об отключении каждого сервера, а не толь-
выходит за рамки данной статьи, однако я думаю, что лю- ко того, на котором установлен агент.
бой системный администратор без труда справится с этой Итак, обосновав необходимость отправки уведомления,
задачей. приступим к описанию практической реализации. Совре-
менные технологии связи позволяют различные способы
Листинг 2. Процедура отключения питания уведомления администратора о различных событиях в се-
Sub Shutdown ти. Например, мне приходилось слышать о системе, кото-
On Error Resume Next // если ошибка, переходим к следующему рая в случае возникновения внештатной ситуации звони-
Dim arrComputers, objLocator
Dim login, password, domain ла админу по заранее заданному телефону и проигрывала
// Перечисляем имена серверов, которые должны быть выключены mp3-файл, содержавший голосовую информацию. Но в та-
arrComputers = Array("Computer1","Computer2","Computer3")
login="operator" // учетная запись с правом на shutdown кие крайности мы вдаваться не будем – отправим уведом-
password="password" // пароль ление при помощи электронной почты. В принципе, с помо-
domain="TEST" // домен
For Each strComputer In arrComputers щью того метода, который будет описан далее, наверняка
Set objLocator = ↵ можно отправлять и ICQ-сообщения и даже SMS (хотя из-
CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = ↵ за различных ограничений, введенных операторами сото-
objLocator.ConnectServer(strComputer, ↵ вой связи, это сделать будет крайне затруднительно).
"root\cimv2", login, password, domain)
Set colOperatingSystems = objWMIService.ExecQuery ↵ Раньше для отправки сообщений посредством сцена-
("Select * from Win32 _ OperatingSystem") риев Windows использовался почтовый клиент Outlook.
For Each objOperatingSystem in colOperatingSystems
// непосредственно shutdown При этом применялся сценарий следующего вида:
ObjOperatingSystem.Shutdown(1)
Next Листинг 3. Отправка письма с помощью Outlook
// после отключения уведомим администратора
sendmail(strComputer) Dim OutlookObject, OutMail
Next Set OutlookObject = CreateObject("Outlook.Application")
WScript.Quit // сценарий завершает свою работу Set OutMail = OutlookObject.CreateItem(0)
End Sub OutMail.to = "test@test.ru"
OutMail.Subject = "Тема сообщения"
OutMail.Body = "Тело сообщения"
В данной процедуре прежде всего необходимо указать OutMail.Send
имена серверов и доменную учетную запись обладающей
правами на отключение системы. В примере приведена до- Однако для нашей задачи данной способ отправки со-
менная учетная запись, однако, думаю, не составит боль- общений совершенно не пригоден. Подобный метод от-
шого труда внести изменения в текст программы, указав правки почты активно использовался почтовыми вируса-
учетные записи для конкретных серверов. ми для рассылки самих себя на другие машины. В Интер-
Также в тексте мы встречаем упоминание о процедуре нете до сих пор можно встретить статьи, посвященные на-
отправки сообщений администратору или службе техни- писанию почтовых вирусов, основанных на подобных сце-

68
программирование
нариях VBScript. В связи с этим теперь Outlook каждый раз их не выключают на ночь.
спрашивает, перед тем как позволить сценарию отправить Теперь нам необходимо
письмо (см. рис. 4). создать какой-либо тра-
К тому же практически любой антивирус заблокирует фик с помощью наше -
работу сценария. го сценария. Сделать это
По понятным причинам нас это совершенно не устра- можно с помощью фраг-
ивает. Но существует другой способ отправки почтовых мента одной из процедур, Рисунок 4. Запрос на отправку
сообщения
сообщений сценарием. Данная процедура была найдена описанной ранее. Далее
мной в MSDN [1]. приводится фрагмент Листинга 1, в котором при обнару-
жении сообщения о восстановлении питания вызывается
Листинг 4. Отправка письма процедура WakeUp, осуществляющая пинг каждого из сер-
// Получаем в качестве параметра имя сервера веров (Листинг 6 соответственно). Обратите внимание
Sub sendmail(server) на использованный в Листинге 6 метод Run. С помощью
// Инициализируем переменные
Dim iMsg него можно выполнить любую команду, причем (как пока-
Dim iConf зано в Листинге 6) это делается в режиме hide. Если в ва-
Dim Flds
Dim str шем случае необходимо видимое окно, просто в качестве
Const cdoSendUsingPickup = 1 второго параметра для метода Run укажите единицу. Бо-
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.ConÞguration") лее подробное описание данного метода и его параметров
// Подготавливаем поля для отправки по SMTP можно найти в [1].
Set Flds = iConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/ ↵ Листинг 5. Добавление вызова процедуры Wakeup в сценарий
conÞguration/sendusing") = ↵ Листинга 1
cdoSendUsingPickup ……………..
.Item("http://schemas.microsoft.com/cdo/ ↵ // Ищем первое вхождение записи на восстановление
conÞguration/smtpserverpickupdirectory") = ↵ If intRecordNum2=0 Then
"c:\inetpub\mailroot\pickup" If InStr(1,objItem.message,strAdmin2,1) Then ↵
.Update intRecordNum2 = intRec +1
End With WakeUp
// Непосредственно текст сообщения End If
str= "Уважаемый администратор. Сервер " & server & " ↵ …………..
был отключен "& Now &" в связи с потерей ↵
электропитания. " Листинг 6. Процедура WakeUp

// заполоняем все поля сообщения Sub WakeUp


With iMsg On Error Resume Next // если ошибка, переходим к следующему
Set .ConÞguration = iConf Dim arrComputers
.To = "admin@server.com" // Поле «Кому» Dim WshShell, str
.From = "ups@example.com" // Поле «От кого» // Перечисляем имена серверов, которые должны быть выключены
// Тема письма arrComputers = Array("Computer1","Computer2","Computer3")
.Subject = "Отключение питания на сервере " & server Set WshShell = CreateObject("WScript.Shell")
.HTMLBody = str For Each strComputer In arrComputers
.Send str="ping "& strComputer
End With //запускаем в режиме hide
Return = WshShell.Run(str, 0)
// Очищаем переменные Next
Set iMsg = Nothing End Sub
Set iConf = Nothing
Set Flds = Nothing
End Sub
Заключение
Данная процедура отправит письмо по указанному ад- Итак, мы рассмотрели основные аспекты написания сце-
ресу. В результате получателю придет сообщение пример- нария для автоматизированного управления серверами
но следующего содержания: Windows при работе с источником бесперебойного пита-
ния. Теперь в случае отключения электропитания все на-
Уважаемый администратор. Сервер MyServer был отключен
ши сервера не окажутся предоставлены сами себе в ожи-
01.10.2005 23:03:31 в связи с потерей электропитания.
дании полной разрядки аккумулятора, а будут корректно
При необходимости процедуру можно легко подправить, выключены без потери данных.
для того чтобы отправлялось сразу несколько писем раз- Очевидно, что алгоритмы и процедуры, изложенные
личным адресатам. в данной статье, можно с тем же успехом использовать
Таким образом, мы решили третью и последнюю зада- и для решения других задач автоматизации управления
чу, которая ставилась перед нашим сценарием WSH. Ис- серверами и аудита журнала событий с отправкой уведом-
ходный код всего сценария прилагается к статье. лений администратору. Например, для наблюдения за кор-
Также хотелось бы обратить ваше внимание еще на один ректностью работы тех или иных сервисов и приложений,
щекотливый момент. В случае восстановления питания не- результатов проведения резервного копирования и других
обходимо снова включить отключенные сервера. Для этого административных действий.
прежде всего надо в BIOS каждого из серверов установить
свойство «Wake Up On LAN → ON». Я не думаю, что это мо- Ссылка:
жет создать какие-то трудности в повседневной работе хо- 1. http://msdn.microsoft.com – содержит много примеров с исход-
тя бы потому, что сервера должны быть всегда включены, ными текстами сценариев.

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


hardware

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


У меня зазвонил телефон.
– Кто говорит? На самом деле позвонил не слон,
– Слон. а пользователь. И общаться ему пришлось
– Откуда? не со мной, а с моим автоответчиком...
– От верблюда. Да и perl-связи ему не помогли... А вот как
– Что вам надо? работает автоответчик и как его настроить
– Шоколада. на базе Linux?

К. Чуковский «Телефон»

Павел Закляков

Т
елефонный автоответчик вещь по своей сути очень зумности она стала входить в состав пакета программ
простая. Обычно, когда к вам поступает входящий mgetty + sendfax. При этом основная страница этой програм-
звонок, а вас нет или вы не хотите поднимать труб- мы (на которую есть ссылка в man и readme) давно не су-
ку, то автоответчик ожидает заданное число гудков. Далее ществует (http://www-internal.alphanet.ch/~schaefer/vgetty.
поднимает трубку, проигрывает заготовленное сообщение html). Но последнее обновление программы датируется всё
и после переходит в режим записи. Через некоторое вре- же апрелем этого года.
мя появляетесь вы и прослушиваете поступившие сооб- Несмотря на то что в состав вашей операционной сис-
щения. Насколько проста эта схема, настолько и проста её темы mgetty+sendfax, скорее всего, уже входит в виде зара-
реализация с помощью vgetty. При желании схему можно нее скомпилированного пакета, и его использование на пер-
усовершенствовать, добавив немного сервиса. Например, вый взгляд может показаться более простым, мы от этого
подключив автоответчик к сети Интернет или мобильному удобства откажемся. Если, например, у нас что-то не зара-
терминалу, можно научить его посылать вам уведомления ботает и дело дойдёт до правки исходных текстов, то нам
по электронной почте или посредством SMS о том, что поя- их всё равно придётся установить. Также некоторые про-
вились новые сообщения. Можно даже организовать удоб- граммы, работающие с vgetty, например vocp, могут сразу
ный веб-интерфейс для просмотра/прослушивания приня- же требовать установку из исходных кодов, а не из гото-
тых сообщений. Чем большим числом функций вы захоти- вых пакетов. Поэтому, чтобы не усложнять себе жизнь в бу-
те пользоваться, тем больше настроек потребуется. Я ниг- дущем, убедимся что mgetty+sendfax как пакет не установ-
де не видел грамотного howto или статьи с решением всех лен, запустив команду:
возникающих проблем по созданию автоответчика, поэто-
му решил восполнить этот пробел. # rpm -qa|grep mgetty
В качестве программного обеспечения использует-
ся vgetty, работающая под Linux (настройки проводились Если в результате нам будут выданы имена установлен-
под двумя ОС: RedHat Linux v.7.3 и Fedora Core 4). Также ных пакетов, например, для RedHat 7.3 это могут быть:
мы рассмотрим пример создания примитивного веб-ин-
mgetty-1.1.30-0.7
терфейса. Если вы хотите расширить возможности ваше- mgetty-sendfax-1.1.30-0.7
го голосового модема под Linux и свой кругозор, – эта ста- mgetty-viewfax-1.1.30-0.7
mgetty-voice-1.1.30-0.7
тья для вас.
или для Fedora Core 4:
vgetty (voice getty)
Изначально vgetty разрабатывалась как отдельная про- mgetty-1.1.33-1
mgetty-sendfax-1.1.33-1
грамма, работающая с голосовыми функциями модемов. mgetty-viewfax-1.1.33-1
Однако в последнее время, видимо, из соображений ра- mgetty-voice-1.1.33-1

70
hardware
то их следует удалить командой: ки, а именно, что и куда будет копироваться, какие дирек-
тории будут создаваться и пр. Увидев среди всех осталь-
# rpm -e mgetty mgetty-sendfax mgetty-viewfax mgetty-voice ных строчку:

Далее зайдём на страницу [3], в разделе «Download # chown fax /usr/local/lib/mgetty+sendfax/faxq-helper


Section» найдём ссылки, из которых узнаем адрес FTP-ар-
хива – ftp://alpha.greenie.net/pub/mgetty/source/1.1 и номер мы можем сделать вывод, что нам надо проверить, и если
последней версии. Её и скачаем: необходимо – создать учётную запись пользователя, ука-
занного в переменной FAX_OUT_USER в файле Makefile,
# wget ftp://alpha.greenie.net/pub/mgetty/source/ ↵ так как она не создаётся автоматически.
1.1/mgetty1.1.33-Apr10.tar.gz
Проверить, есть ли такой пользователь в системе, мож-
Далее распакуем архив, например, в директорию /progi но, например, командой:
командой:
# cat /etc/passwd|grep fax
# tar -zxvf mgetty1.1.33-Apr10.tar.gz -C /progi
Если в результате ничего не выводится, значит, такого
или пользователя нет, поэтому добавляем его командой:

# gunzip -cd mgetty1.1.33-Apr10.tar.gz|tar -xv -C /progi # adduser fax

Покопавшись в дереве файлов распакованного архива Если пользователя в системе не будет, то в процессе ус-
и найдя там текстовый файл /progi/mgetty-1.1.33/voice/doc/ тановки вы можете получить следующую ошибку:
Readme.Beginners, мы можем узнать из него, что для уста-
новки vgetty необходимо вначале установить mgetty. chown: `fax': неверный пользователь
make: *** [install.bin] Ошибка 1

Установка mgetty Если вы планируете не только получать факсы, но и от-


Чтобы упростить себе жизнь, меняем текущую директо- правлять их от имени какого-то конкретного пользовате-
рию: ля, то убедитесь, что у него достаточно прав на общение
с факс-модемом, посмотрев на права доступа у соответс-
# cd /progi/mgetty-1.1.33 твующего файла-устройства /dev/ttyS? (устройство, к кото-
рому будет подключен модем, например /dev/ttyS0):
Привычного файла configure у mgetty нет, поэтому чита-
ем файл README.1st или, не прочитав, запускаем make – # ls -l /dev/ttyS0
получаем ошибку.
Если не критично, то проще поставить разрешающие
You have to create your local policy.h first.
Copy policy.h-dist and edit it.
права на чтение и запись для «всех остальных», но обыч-
но так не делают. Когда надо управлять правами доступа
Понимаем, что нам надо создать файл policy.h. Для этого к факс-модему нескольких пользователей, то их тогда вклю-
лучше воспользоваться шаблоном policy.h-dist. Копируем чают в группу, например, fax (см /etc/group), а на файле ме-
шаблон с новым именем policy.h командой: няют группу (см. chgrp) и ставят права для неё (см. chmod).
При этом, меняя состав группы fax, можно легко управлять
# cp policy.h-dist policy.h тем, кто может посылать факсы, а кто нет.
Также в целях безопасности я бы подправил запись
Далее, просматриваем несложные комментарии перед в файле /etc/passwd, заменив командный интерпретатор
каждым параметром внутри файла и правим их по необ- для пользователя fax с /bin/bash на /bin/false или на /sbin/
ходимости. Возможно, вам покажутся важными другие па- nologin. После проделанных действий можно смело запус-
раметры, но я советую обратить внимание на следующие: кать установку командой:
DEFAULT_PORTSPEED, MODEM_INIT_STRING, MODEM_
CMD_SUFFIX, FAX_IN_OWNER (если вы планируете рабо- # make install
тать с факсами).
Затем просматриваем Makefile, и если необходимо, вно- Других ошибок быть не должно. Однако, если они бу-
сим правку, например, в переменные путей, куда будет ус- дут, можно вернуться назад и внести необходимую прав-
танавливаться программа. Далее запускаем компиляцию ку. Mgetty установлен, переходим к компиляции и установ-
командой make. После, если очень хочется, запустите се- ке vgetty.
рию тестов командами make test и make testdisk и посмот-
рите на их результаты. Полезной функции у этих тестов Установка vgetty
я не увидел, поэтому советую сразу после компиляции за- Если на этапе выше всё прошло успешно, то после сме-
пустить make -n install и по списку напечатанных команд ны директории компиляция vgetty должна запуститься
понять, что планируется к выполнению во время установ- без проблем.

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


hardware
# cd /progi/mgetty-1.1.33/voice message _ ßag _ Þle .ßag
# make

Однако, если вы попытаетесь сразу начать компили- Это нам может понадобиться, если мы захотим написать
ровать vgetty командой make, пропустив все шаги выше, какой-нибудь удобный интерфейс для просмотра файлов.
то вас ждёт сообщение об ошибке: Далее указывается имя поддиректории внутри «voice_dir»,
куда будут складываться файлы с новыми сообщениями:
You didn't build mgetty first. Please read the documentation.

Она может также возникнуть, если что-то ранее с mgetty receive _ dir incoming
прошло неудачно. В этом случае надо возвращаться назад
и внимательно читать все выводимые в процессе сообще- Затем указывается имя поддиректории внутри «voice_
ния. После завершения компиляции запускаем: dir», где будут храниться сообщения голосового приветс-
твия нашего автоответчика:
# make -n install
message _ dir messages
чтобы посмотреть, что куда будет ставиться. Далее, после
одобрения выданного, запускаем установку командой: Таких сообщений может быть много, и система может
выбирать их случайным образом из списка в файлов, ко-
# make install торый указывается в параметре:

После этого считаем vgetty установленным. message _ list Index

Настройка vgetty Если случайный поиск по каким-то причинам не сраба-


Создаём конфигурационный файл voice.conf в той же дирек- тывает, например, если мы не будем создавать этого фай-
тории (/usr/local/etc/mgetty+sendfax), где лежат все настро- ла и у нас приветственное сообщение будет одно, то следу-
ечные файлы mgetty. Проще всего воспользоваться шаб- ющий параметр определяет конкретное имя файла с при-
лоном voice.conf-dist, который поставляется вместе с дист- ветственным сообщением:
рибутивом, подправив его по необходимости. Для этого ко-
пируем шаблон с новым именем: backup _ message standard.rmd

# cp /progi/mgetty-1.1.33/voice/voice.conf-dist ↵ Позже мы создадим этот файл. Если требуется, вы мо-


/usr/local/etc/mgetty+sendfax/voice.conf
жете заготовить несколько сообщений, а далее написать не-
и переходим к редактированию voice.conf. На время отлад- большую программку на bash, меняющую эти файлы, напри-
ки, то есть пока у вас всё не заработает, советую повысить мер, простым копированием. Если запускать её с помощью
уровень логирования до 6, указав: crontab (crond)( [2], стр.164-165, [11], стр 34-38), то без собых
усилий можно сделать на утро одно сообщение, на время
voice _ log _ level 6 обеда другое, а на вечер третье. В параметре answer_mode
оставляем только voice:
Далее обратите внимание на то, где будут храниться го-
лосовые сообщения в поддиректориях: answer _ mode voice

voice _ dir /var/spool/voice Небольшое отступление. Если написать:

а также кто окажется их владельцем и с какими правами answer _ mode voice:fax


будут создаваться файлы:
или оставить как есть:
phone _ owner root
phone _ group phone answer _ mode voice:fax:data
phone _ mode 0660

Как видим, будет использоваться группа phone. Как ва- то во время воспроизведения голосового приветствия, ес-
риант её можно сменить на fax, так как такого пользователя ли модем услышит «вызывающие попискивания» на другой
мы уже добавили, а можно добавить нового пользователя стороне, то он тут же прервёт воспроизведение звука и пе-
phone, аналогично тому, как это было сделано выше. При рейдёт в режим приёма факса. После чего если удалённая
этом при создании учётной записи пользователя будет со- сторона будет посылать факс, то модем его примет, а vgetty
здана и одноимённая группа. Если в файле группа указа- запишет его в формате g3 в директорию /var/spool/fax/
на, а реально её не существует, то при создании файла с incoming под именем вроде ff359168dS0-7-095-1234567.01,
пришедшим сообщением его группой по умолчанию будет где «7-095-1234567» есть fax-id, то есть то, как нам пред-
root. В следующей строчке указывается имя файла, кото- ставился удалённый факс. Естественно, на другой сторо-
рый будет создаваться в директории «voice_dir», когда бу- не записать в fax-id могут что угодно, поэтому не удивляй-
дут появляться новые сообщения. тесь если когда-нибудь увидите свой номер. Если же fax-id

72
hardware
не передавался, то имя у файла будет без него, напри- не совместимы между собой. Так что работающий U-1496B+
мер, что-то вроде одного из следующих: ff353bb0eS2.01, ничем не смог помочь собрату. Пришлось разбираться
ff353d713S2.01, fn353a4b5S2.01, fn353a4b5S2.02. Два пос- в работе vgetty. Первое, что в этом случае делается – уро-
ледних факса, как легко догадаться, есть один факс, состо- вень логирования ставится на максимум (voice_log_level 6)
ящий из двух страниц. О том, что делать дальше с файла- и изучаются log-файлы. Я изучал /var/log/vgetty.ttyS0 и /var/
ми формата g3, как отправлять факсы, как настроить vgetty log/vm.log, сравнивая выводимые данные от разных моде-
на совместную работу автоответчика, факса и dial-in-серве- мов. Было замечено, что различие в определении модемов
ра и другие факсовые возможности, будет изложено в от- Acorp-56EMS и ZyXEL U-1496B+ и изменение дальнейшего
дельной статье, посвящённой факсовым или расширенным поведения vgetty происходит после команды «ATI». Связа-
возможностям vgetty/mgetty. но это с тем, что модемы на неё отвечают по-разному, со-
Замечание. Если во время воспроизведения голосового ответственно «56000» и «1496», а неработающий Omni56K
приветствия модем услышит вызывающий сигнал факса, Pro – «1507». Предполагая, что в зависимости от ответа мо-
а режим работы у него выбран только как voice, то он пре- дема в программе должно быть ветвление, я запустил по-
рвёт воспроизведение, а отвечать и принимать факс не бу- иск этих ответов в исходных кодах. Естественно «56000»
дет. Как сделать, чтобы воспроизведение не прерывалось, и «1496» были найдены, а «1507» – нет. Далее, я перешёл
пока мне не известно. к поиску по ключевым словам «ZyXEL» и «Omni» и можно
Далее указывается скорость порта, к которому под- сказать, что почти сразу нашёл решение проблемы. Напри-
ключен модем: мер, были найдены две следующие строчки:

port _ speed 38400 {ati, "1500", NULL, &ZyXEL_Omni56K},


{ati, "1501", NULL, &ZyXEL_Omni56K},

Оставить 38400 или поставить 57600, или 115200 решать в то время как выдаваемое не работающим модемом значе-
вам. У этого параметра есть особенность, на которую я хо- ние 1507 отсутствовало. Не долго думая, я нашёл все места
тел бы обратить внимание. Если вы будете менять значение, где встречалось 1500 и 1501, но не было 1507, и, разобрав-
то необходимо аналогичную скорость прописать и в файле шись в несложном коде на Cи, внёс правку. В результате
mgetty.config, и наоборот. То есть нужно проверить, чтобы у меня получилось два следующих патча которые я полу-
значения были идентичны. Далее можно подправить зна- чил после с помощью команды:
чение параметра rings, хотя я этого делать не стал, пото-
му как задам количество звонков до поднятия трубки ниже # diff -urN старый _ файл новый _ файл
(через ключи в /etc/inittab). Все остальные параметры я ос- --- /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 @@
В завершение правки конфигурационного файла voice. {ati, "1496",
{ati, "1500",
NULL, &ZyXEL_1496},
NULL, &ZyXEL_Omni56K},
conf хотел бы рассказать про «грабли» со скоростью пор- {ati, "1501", NULL, &ZyXEL_Omni56K},
+ {ati, "1507", NULL, &ZyXEL_Omni56K},
та и поддержку модема ZyXEL Omni 56k PRO, на которые {ati, "247", NULL, &Multitech_2834ZDXv},
я наступал в течение нескольких недель пока не разобрал- {ati, "248",
{ati, "249",
NULL, &Sierra},
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:
После установки, изучая и корректируя voice.conf, я добрал- case 1501:

ся до параметра «скорость порта». Предполагая, что кон- + case 1507:


lprintf( L_MESG, "ZyXEL Omni 56K (Plus) detected" );
фигурационные файлы обычно пишут не дураки, а установ- modem_type=Mt_class2_0;
mis = mdm_get_idstring( "ATI1", 2, fd );
ки по умолчанию выбираются из разумных соображений,
я оставил предлагаемое значение 38400 без изменений. Файл faxlib.c можно было подправить, дописав ещё не-
Помня, что ZyXEL-1496B+ не работает на скорости 115200, сколько строк, чтобы при обнаружении модема выдавалось
и учитывая что Acorp-56EMS (на базе чипсета Rockwell) не «ZyXEL Omni 56K (Plus) detected», а более правильное
и ZyXEL U-1496B+ сразу после установки заработали «ZyXEL Omni 56K (PRO) detected», но так как это на рабо-
как надо, повышать скорость необходимости не было. тоспособность влиять не должно, делать этого я не стал.
Проблема была только в одном: модем ZyXEL Omni56K Соответственно после внесения правки мне пришлось пе-
Pro, поддерживаемый vgetty (исходя из документации), рекомпилировать mgetty и vgetty и установить их заново.
не хотел быть автоответчиком, т.е. работать с голосовы- Казалось бы, всё теперь должно работать, но не тут-то бы-
ми функциями. Через терминал и в других режимах модем ло. Модем начал воспроизводить звуки, но делал это с за-
работал. Другой такой же модем тоже отказался работать. медлением, а записывать вообще отказывался, записывая
Чтобы исключить мысль, что оба модема могут быть сло- вместо звуков какой-то потрескивающий шум.
манными, на отдельном компьютере я установил ZVoice К решению проблемы даже была подключена техподде-
и убедился, что в этой программе голосовые функции ра- ржка фирмы ZyXEL через закрытый форум. Помочь в явном
ботают. Предположение, что проблема в кодеках, и попыт- виде специалисты не смогли. На всякий случай они перепи-
ка использовать кодеки от U-1496B+ результата не принес- сали несколько программок написанных Yuhang Wu на Cи,
ли, потому как по документации кодеки этих двух модемов объёмом все вместе взятые не более 50 Кб, для работы

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


hardware
с голосовыми функциями модема, заверив, что программы ! 345 – уровни выполнения, на которых будет работать на-
рабочие. Я взял оттуда какой-то алгоритм или часть кода, ша программа: 3, 4, 5. (Замечание: а вы знаете, что по-
но изучая заголовки файла decomp.c наткнулся на строчку: мимо привычных уровней 0-6 ещё существуют a,b,c и s
«Required DTE speed : Above 57600 bps.», которая меня и на- или S уровни? Если нет – см. [2] и man init.).
толкнула на мысль, что предложенные по умолчанию 38400 ! respawn – говорит init о необходимости перезапуска
(то, с чего я, собственно, начал весь этот рассказ про «граб- vgetty в случае его завершения.
ли») не совсем подходят и надо бы попробовать поставить ! /usr/local/sbin/vgetty – полное имя программы vgetty. Об-
57600. Я попробовал и «О, чудо!», оно заработало! ратите внимание: путь к файлу может отличаться, ско-
Вывод: не всякое предложенное значение по умолча- рее так и будет, если вы поставили пакет из rpm.
нию подойдёт. На этом мои (и возможно чьи-то ещё) про- ! Ключ «-n 4» говорит снимать трубку после 4-го звонка.
блемы с установкой решились. Мы подошли вплотную к за- ! ttyS0 – порт, к которому подключен голосовой модем.
пуску программы vgetty.
Количество гудков не обязательно указывать в качест-
Запуск vgetty ве параметра в данной строке – его можно указать и внут-
Не смотря на то что после компиляции vgetty представляет ри конфигурационного файла, но это не всегда удобно,
собой запускаемый ELF-файл, запускать его следует из /etc/ особенно если модемов, как и строчек в /etc/inittab, в ва-
inittab, прописав там примерно следующую строчку: шей системе несколько, а конфигурационный файл vgetty
у них один. Поэтому выше, во время правки voice.conf, я не
S0:345:respawn:/usr/local/sbin/vgetty -n 4 ttyS0 стал изменять значение параметра rings.
После внесения указанной строчки в /etc/inittab, что-
! S0– это уникальный идентификатор строки. Выбирает- бы vgetty стартовал, надо послать команду: «kill -1 1» или
ся произвольно [1], может иметь длину 2-4 символа [2]. «init q». Можно также перезагрузить компьютер, хотя это бу-
Так как модем подключен к /dev/ttyS0(СОМ1), то удоб- дет не очень хорошее решение. Если же у вас уже запуще-
нее выбрать в качестве идентификатора S0. на копия vgetty, то есть строчка уже была, а вы просто вне-

Как появился формат rmd (Г. Найквиста) об отсчётах, мы можем за- если бы мы записывали данные из линии
К моменту массового появления персо- ключить, что, если будем брать мгновен- «как есть» путём вышеописанной «тупой»
нальных компьютеров, а соответственно ные значения уровня голосового сигнала оцифровки или в формате wav, то на од-
и первых модемов, теория цифровой об- с периодом 1/(2*4000), то есть 8000 раз в ну секунду записи потребовалось бы 8 Кб
работки сигналов уже насчитывала поряд- секунду (см. рис. 2), то по этим значениям (64 Кбит/8). Нетрудно оценить, что на дис-
ка полвека, поэтому под действием поль- при необходимости мы сможем без про- кету 5,25” Double Sided/Double Density, ха-
зовательского спроса реализация голосо- блем восстановить сигнал без потерь. Та- рактерную для того времени и отформати-
вых функций модемов не заставила себя кое преобразование аналогового сигнала рованную на 360 Кб, влезло бы всего лишь
долго ждать. Действительно, чего в этом к его дискретным отсчётам называется ам- 45 секунд. А на винчестер объёмом 10 Мб
сложного с современной электронной ба- плитудно-импульсной модуляцией (АИМ). влезла бы примерно 21 минута, если пред-
зой. Берём любую книжку по телефонии Так как уровень сигнала, взятый в точке от- положить, что ничего другого на нём не бы-
того времени и узнаём, что для обеспече- счёта является аналоговым и фиксирован- ло записано. При тех безумных ценах хра-
ния высокой разборчивости речи вполне ным, то для сохранения или передачи мы нения единицы информации автоответчик
достаточно передавать сигналы в диапа- можем его квантовать, например, на 256 оказался бы золотым, если бы мы захотели
зоне частот 0,3-3,4 КГц (см. рис. 1, крас- уровней с помощью аналого-цифрового сделать ёмкость, адекватную одной сторо-
ные границы), что чуть уже по спектру то- преобразователя (АЦП) и использовать не 60 или 90 минутной аудиокассеты. Так-
го, что может воспроизвести голосом сред- далее цифровое значение уровня. Опыт- же скорость передачи данных от моде-
нестатистический человек. Если взять с за- ным путём было установлено, что 256 – ма к компьютеру в 64000 бит/c могла по-
пасом справа и слева, то получится поло- есть наилучшее число уровней, так как при казаться очень большой. Каждый модем
са аналогового сигнала шириной около меньшем числе теряется качество, увели- подключался к компьютеру через после-
4000 Гц (0-4 КГц). Теперь, если восполь- чиваются шумы квантования, а при боль- довательный порт, cердцем которого бы-
зоваться теоремой В.А.Котельникова [9] шем качество радикально не улучшается. ла, и по сей день является, микросхема
Для передачи одного из 256 значений пот- UART (Universal Asynchronous Receiver/
ребуется ровно 8 бит, так как 28 =256. Та- Transmitter) – универсальный асинхрон-
ким образом, для успешного восстанов- ный приёмопередатчик. В IBM PC и PC/XT
ления сигнала длительностью в 1 секун- для этой цели использовалась микросхе-
ду нам нужно иметь 8 бит для 8000 отсчё- ма типа 8250, которая сама или её анало-
тов, то есть всего 64000 бит (64 КБит/c). Ес- ги рассчитаны на максимальную скорость
ли взять обычный моно wav-файл и отбро- 38400 бит/c ([14], стр 250-252). И только для
сить у него заголовок, то сигнал, записан- IBM PC/AT было решено применить микро-
ный внутри файла, получается примерно схему 16450, которая превосходила 8250
Рисунок 1. Область слухового вос-
приятия. Речевые сигналы и музыка таким же способом. Данный способ пред- по скорости. Возьмите для примера выше-
занимают лишь часть этой области ставления данных называется импульсно упомянутый ZyXEL U-1496B+, который не
[15, стр. 63] (бетта индекс 0 – порог
слышимости, гамма – порог осязания) кодовой модуляцией (ИКМ, PCM). То есть использует 8250, но и не работает на ско-

74
hardware
сли правку, то эффективнее будет запустить «killall vgetty», рите лог-файлы /var/log/vgetty.ttyS?.log и /var/log/vm.log. Пос-
так как предыдущие две команды не сработают. ледний файл ведётся программой vm, входящей в комплект
Теперь модем слушает линию, а vgetty слушает порт, пакета vgetty, о ней сейчас пойдёт речь.
на котором висит модем. В случае поступления звонка мо- Формат raw modem data (или сокращённо rmd) не такой
дем должен сообщать vgetty о том, что звонят. После того популярный, как, например, тот же mp3, поэтому большинс-
как будет пропущено количество звонков, указанное с па- тво из вас должно было уже давно озаботиться следующи-
раметром -n (или записано в конфигурационном файле), ми вопросами: а что это за формат rmd, в котором записы-
vgetty даст команду на снятие трубки. Попутно с этим vgetty ваются все сообщения? Что мне с ним делать? Как запи-
оценит, что за модем подключен, выберет нужную библи- сывать свои файлы, как прослушивать уже готовые фай-
отеку, поищет файл голосового приветствия или выберет лы? Ответы на эти вопросы смотрите во врезке «Как поя-
один из нескольких и начнёт его воспроизведение в линию. вился формат rmd».
Далее в зависимости от настройки пискнет в линию и пе-
рейдёт в режим записи всего того, что говорит позвонив- Дополнительные утилиты
ший абонент (динамик модема при этом молчит), записы- Для того чтобы создавать файлы в том или ином rmd-форма-
вая всё им сказанное, например, в файл /var/spool/voice/ те, понимаемом только модемом, или, наоборот, переводить
incoming/v-3631-1129050743.rmd. После того как время, от- данные в привычные звуковые форматы, в комплекте с vgetty
ведённое для записи абоненту, истечёт или модем услышит поставляется пакет программ pvftools. В него входят конвер-
сигнал отбоя, означающий, что на том конце положили труб- торы различных форматов, осуществляющих преобразо-
ку, запись будет прекращена и будет выставлен флаг с да- вания между форматами. Из всего представленного спис-
той и временем последнего звонка. Другими словами, бу- ка мне понадобились только четыре программы: wavtopvf и
дет создан файл /var/spool/voice/.flag нулевой длины. Далее pvftormd для конвертирования «туда» и rmdtopvf и pvftowav –
vgetty перейдёт опять в режим ожидания звонков. «обратно». Помимо конверторов вам ещё может понадобить-
Если всё проходит успешно, то уровень логирования ся программа pvfspeed для изменения скорости, но мне она
в файле voice.conf можно уменьшить, а вот если у вас что-то не понадобилась, потому как я свои wav-файлы записывал
не работает или работает не так, как хотелось бы, то смот- сразу с требуемой частотой дискретизации. Поскольку фор-

рости 115200 [5]. А если взять модемы, ко- ставления одной секунды звука необходи- ющие с разными кодеками. Информация,
торые были раньше, то скорости, на кото- мо уже 32 килобита, то есть в 2 раза мень- записанная в формате кодека каждого кон-
рых они соединялись, поначалу составля- ше, чем было при ИКМ. Это самый прос- кретного модема как раз и есть формат raw
ли 2400, 1200 и даже меньше бод, для пе- той способ уменьшения потока (объёма), modem data. Как легко догадаться, формат
редачи которых совсем не требовалась по- так как при переходе от отсчёта к отсчё- rmd для каждого модема свой и зависит
вышенная скорость порта. ту передаётся их разница, которую обыч- от используемого в модеме кодека. Напри-
Получается, что либо скорость 64000 но обозначают греческой буквой дельта, мер, «Модемы серии Omni56K используют
была высока для записи звуков из линии, то данный способ кодирования и назва- 4-битовый ADPCM-алгоритм преобразова-
либо скорость последовательных портов ли дельта-модуляцией. Далее появилась ния звука в цифровой вид с частотой дис-
мала. Велись работы как в сторону повы- адаптивная дельта-модуляция(ADPCM) кретизации 9600 отсчётов в секунду» ([6],
шения скорости работы микросхем UART и другие более хитрые способы кодирова- стр. 89), хотя команда «AT+VSM=?» выдаёт
и введения в них дополнительных буфе- ния, позволяющие сжимать данные боль- и другие значения возможной частоты дис-
ров ввода-вывода, так и в сторону сжатия ше и больше без значительного ухудше- кретизации (4 ;ZyXEL ADPCM ;4Bit ;(7200,
потока данных, то есть уменьшения объё- ния качества. Для дальнейшего улучше- 8000,9600,11025)). Благо модемы с голо-
ма. Сжатие даже опережало возможнос- ния качества сжатия речи стали учитывать- совыми функциями выпускали не все про-
ти компьютеров. Потому как ещё в 1947 г. ся особенности речеобразования (форман- изводители, поэтому число используемых
учёные из телефонных лабораторий фир- тная структура, звонкие и шипящие звуки кодеков не превышает сорока, и почти все
мы «Белл» опубликовали первое сообще- и пр.), после чего стали появляться раз- на сегодня используемые поддерживают-
ние о полностью работоспособной систе- личные алгоритмы и основанные на них го- ся vgetty. Запустив команду:
ме ИКМ и примерно в то же время Дело- лосовые кодеки. Некоторые из них до сих
# pvftormd -L
рен во Франции изобрёл дельта-модуля- пор используются в системах сотовой свя-
цию [8]. После появления ИКМ было за- зи. Как обычно, о едином и универсальном можно увидеть все поддерживаемые алго-
мечено, что при преобразовании речи со- стандарте договориться не смогли, поэто- ритмы, а также названия модемов, в кото-
седние отсчёты обычно сильно не отлича- му каждая фирма стремилась реализовать рых они обычно используются.
ются друг от друга и потому вместо одного своё «ноу-хау» в собственных устройствах, Чтобы меж ду файлами в форма-
из 256 значений для отсчёта можно пере- а мы на сегодняшний день получили моде- те rmd не было путаницы, в самом нача-
давать его изменение относительно преды- мы не совместимые между собой и работа- ле перед данными указывается тип моде-
дущего. При этом для передачи изменения ма, чьим кодеком закодировано осталь-
при той же сетке квантования требуется ное содержимое. То есть если вы в каком-
меньшее число значений, например, если нибудь редакторе посмотрите rmd-фай-
это будет всего 16 уровней, а не 256, как ра- лы, то в самом начале вы увидите строчку
нее, то надо передавать 4 бита (24 =16). Пос- «RMD1Rockwell», «RMD1ZyXEL Omni 56K»
ле перемножения получим, что для пред- Рисунок 2. Отсчёты голосового сигнала или аналогичную.

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


hardware
мат wav (Microsoft Waveform Audio, Windows PCM) не являет- Это как раз совпадает с тем, что я выяснил опытным путём,
ся стандартом в среде Linux, то и прямого конвертора из wav а именно – звук выводится только двумя командами:
в rmd и обратно нет (в составе pvftools). В качестве проме-
жуточного формата используется portable voice format (pvf). vm play -d 2 -v -l ttyS0 Þle.rmd
vm play -d 7 -v -l ttyS0 Þle.rmd
Если вам всё же не очень нравится набирать команду кон-
вертирования дважды, то напишите маленький скрипт, ко- Телефонный аппарат у меня был подключен через мо-
торый можно назвать wav2rmd или rmd2wav, а он уже будет дем. В первом случае (-d 2) подключение происходит к те-
внутри содержать последовательные вызовы двух конвер- кущей линии, а телефонный аппарат от неё не отключает-
торов. Почитав документацию (/progi/mgetty-1.1.33/voice/doc/ ся. То есть, если у вас был гудок, то воспроизведение зву-
Readme.pvftools) и help к конверторам, вы можете без труда ка будет поверх гудка. При этом оно почему-то завершает-
самостоятельно освоить конвертирование. При этом може- ся раньше. Но вот, если в телефонной линии тишина, ска-
те перенаправлять вывод одного конвертора на вход друго- жем если набрать «1», то тогда всё проигрывается от нача-
го, что очень удобно. Например, если вы захотите создать ла и до конца. Во втором случае (-d 7) перед началом вос-
файл гостевого приветствия standard.rmd из имеющегося у произведения происходит отключение телефонного аппа-
вас файла message.wav для модема ZyXEL Omni 56k PRO, рата, подключенного через модем от телефонной линии.
то это можно сделать следующей командой: То есть если вы подняли трубку, у вас был гудок и вы за-
пустили команду, то модем отключит вас от линии, проиг-
# cat message.wav | wavtopvf | pvfspeed -s 9600 | ↵ рает сообщение и подключит обратно, при этом удержа-
pvftormd ZyXEL _ Omni56K 4 > standard.rmd
ния телефонной линии не происходит. Остальные пара-
В обратную сторону получится даже проще: метры в командах:
! -l ttyS0 – говорит vm к какому порту подключен интере-
# cat v-1329-1127227035.rmd | rmdtopvf | pvftowav > Þle.wav сующий нас модем;
! -v – говорит включить режим избыточного вывода раз-
При этом если у вас на компьютере окажется настроен- личной информации;
ная и работающая звуковая карта, то можно проиграть фай- ! file.rmd – воспроизводимый файл.
лы, перенаправив вывод конвертора не в файл, а напрямую
на устройство /dev/dsp или /dev/audio, или /dev/mixer. Помимо воспроизведения у vm есть ещё функция за-
Ещё в комплект vgetty входит программа vm. Man к ней писи и другие.
нет, поэтому информацию о том, как ею пользоваться,
можно узнать путём запуска «vm -help» или из документа- Грабли с отбоем
ции. Для воспроизведения файлов на модеме использует- В процессе настройки автоответчика я столкнулся с до-
ся команда «play», а далее указывается, куда модему сле- вольно забавной ситуацией: исходники vgetty подправил,
дует выводить звук. В зависимости от модема и от зна- модем настроил, проверил, что он проигрывает файлы, всё
чения, указанного в параметре -d, звук может выводить- как положено, но входящие звонки модем или vgetty запи-
ся как в линию, так и на встроенный на модеме динамик. сывать отказывались.
Модем U-1496B+ и Acorp56EMS смогли воспроизвести Что я наблюдал: поступает звонок, модем поднима-
звук и в линию, и на динамик, а вот Omni 56K PRO на ди- ет трубку, воспроизводит голосовое приветствие, а после
намик играть отказался. Причём, как я понял, читая до- вешает трубку не дав ничего сказать. Что же оказалось?
кументацию [6, стр. 100] параметр +VLS не подразумева- Так как никакого звукового файла, который я мог бы ис-
ет выбор встроенного динамика на Omni 56K, в то время пользовать, под рукой не оказалось, то я решил просто поз-
как у U-1496B+ такая возможность в параметре +VLS бы- вонил сам себе с другого телефона. Так как ничего воспро-
ла [5, стр 15-16]. Чтобы не гадать и не перепроверять рука- изводить не надо было (файла standard.rmd просто не бы-
ми все параметры ключа -d, что я и делал поначалу, мож- ло) модем сразу бикнул в линию перейдя в режим записи,
но запустить команду: а я записал своё приветствие. Далее я просто взял и пе-
реписал появившийся после этого файл на место standard.
# vm devicetest -l ttyS0 rmd в директорию messages. Так получилось, что по окон-
чании сообщения я положил трубку и модем записал вдо-
которая выведет результат тестирования модема, а именно бавок к моему сообщению ещё два гудка. Теперь, ког-
куда может быть осуществлён вывод звука при воспроиз- да этот файл проигрывался в линию, модем воспроизво-
ведении файлов на модеме. Для ZyXEL Omni 56k PRO вы- дил и гудки отбоя. Как вы теперь догадываетесь, вторая
вод программы оказался следующим: часть модема в этот момент не дремала, а чётко отслежи-
вала ситуацию в линии: «a не положил ли звонящий труб-
Test
Test
Dialup Line, Int. Mic. and Int. Speaker: not supported by vm/vgetty-modemdriver
Dialup Line, Ext. Mic. and Ext. Speaker: not supported by vm/vgetty-modemdriver
ку?», естественно, услышав в линии гудки в хвосте мое-
Test Dialup Line and Local Handset: not supported by vm/vgetty-modemdriver го приветствия, она решала, что коли абонент уже отклю-
Test Dialup Line and Int. Speaker: not supported by vm/vgetty-modemdriver
Test Dialup Line and Ext. Speaker: not supported by vm/vgetty-modemdriver чился (раз пошли гудки), то и модему надо тоже повесить
трубку, что он, собственно, и делал. Естественно, пробле-
Test Local Handset: OK
Test Int. Speaker: not supported by vm/vgetty-modemdriver
Test
Test
Ext. Speaker: not supported by vm/vgetty-modemdriver
Int. Microphone: not supported by vm/vgetty-modemdriver
му решил удалением последних нескольких секунд с гуд-
Test
Test
Ext. Microphone: not supported by vm/vgetty-modemdriver
Dialup Line: OK
ками из записи голосового приветствия, после чего всё за-
Test No Device: OK работало как надо.

76
hardware
Замечание. Не всегда, но пару раз заметил, что сразу операции в файле /etc/passwd придётся временно прописать
после включения компьютера и модема при поступлении пользователю apache командный интерпретатор /bin/bash
звонка модем может поднять трубку и не воспроизвести вместо привычных для него /bin/false или /sbin/nologin.
голосовое сообщение и не перейти в режим записи. Зави- Те, кто хорошо знакомы с html, cgi и bash, могут сра-
сание длится, пока не закончится тайм-аут, либо не будет зу перескочить в конец статьи, а со всеми остальными на-
положена трубка. Видимо, это какой-то инициализацион- чнём с простого – в директории для скриптов создадим
ный глюк, потому как после данного сбоя (при последую- файл spisok.sh:
щих звонках) всё работает и ни разу не сбоило.
#!/bin/bash
Веб-интерфейс автоответчика message _ dir="/var/spool/voice/incoming"
Просматривать, появилось ли у вас новое сообщение на ав-
echo "Content-type:text/html; charset=koi8-r"
тоответчике каждый раз с консоли сервера или заходя echo
удалённо на него посредством ssh – не самое лучшее ре- echo "<html><body>"
шение. Если компьютер имеет подключение к сети, исполь- for f in `ls $message _ dir`
зующей IP-адреса, то лучше всего организовать взаимо- do
echo "$f<br>"
действие с сообщениями автоответчика посредством веб- done
интерфейса. Для этого лучше всего подойдёт небольшой echo "</body></html>"
CGI-скрипт [10], написанный на bash [11]. Предполагается,
что у вас уже установлен и запущен веб-сервер apache [12] присвоим ему атрибут выполняемости командой:
с поддержкой cgi-скриптов, и вы знаете в какую директорию
их следует помещать (обычно /var/www/cgi-bin). chmod +x spisok.sh
Предупреждение! Все скрипты ниже написаны исклю-
чительно в демонстративных целях, чтобы показать вам, и убедимся, что он выводит список сообщений при обраще-
насколько просто сделать всё самому и побудить вас на- нии к нему. То есть запустим браузер и обратимся по адре-
писать свою оболочку для работы с голосовыми сообще- су: http://192.168.0.1/cgi-bin/spisok.sh (вместо 192.168.0.1 сле-
ниями. Защита «от дурака» намеренно не делалась, что- дует указать адрес вашего сервера).
бы не терялась наглядность. С точки зрения безопаснос- После того как мы убедились, что скрипт работает, ус-
ти недопустимо использование этих скриптов в открытой ложним его, добавив к сообщениям дату и вывод даты пос-
сети без дополнительной доработки и защиты! Например, леднего сообщения.
скрипт, удаляющий файлы, может удалять любые файлы
в системе, если это позволяют права файлов, то есть мож- #!/bin/bash
но удалять не только голосовые сообщения. Есть и другие message _ dir="/var/spool/voice/incoming"
потенциально опасные возможности.
echo "Content-type:text/html; charset=koi8-r"
Поскольку наш cgi-скрипт будет запускаться и рабо- echo
тать от имени веб-сервера, то есть под пользователем echo "<html><body>"
apache, нам следует проследить, чтобы скрипт имел пра- echo "Последнее сообщение: `date -R -r ↵
ва на чтение и удаление голосовых сообщений. Для это- $message _ dir/../.ßag`<br>"
echo "У вас сообщения:<br>"
го можно поступить двояко: либо добавить пользователя for f in `ls $message _ dir`
apache в группу phone в файле /etc/group, либо в /usr/local/ do
d=`date -R -r $message _ dir/$f`
etc/mgetty+sendfax/voice.conf указываем: echo "$f &nbsp;&nbsp;&nbsp;&nbsp;"
echo "$d<br>"
phone _ group apache done
phone _ mode 0660
echo "</body></html>"
также следует убедиться, что права, установленные на ди-
ректорию /var/spool/voice/incoming также позволяют удалять Теперь, создадим ещё один вспомогательный скрипт
файлы. Например, можно в качестве группы файла указать play.wav, который при запуске будет получать имя rmd-фай-
apache и для группы установить атрибут «+w». ла методом GET [10, стр. 100], далее будет его конвертиро-
вать в wav (с помощью уже известных нам утилит rmdtopvf
# chgrp apache incoming и pvftowav) и будет сам представляться браузеру этим wav-
# chmod g+w incoming
файлом, чтобы браузер мог вызывать какой-нибудь уста-
Если скрипты, будучи запущенными через веб-интер- новленный в системе проигрыватель звуковых файлов. Не-
фейс, не работают, а вам кажется, что вы всё настроили смотря на то что скрипт будет выполнять много действий,
правильно, то лучше всего изменить временно свой иден- сам он состоит всего лишь из четырёх строчек.
тификатор на apache с помощью команды:
#!/bin/bash
# su --login apache echo "Content-type:audio/wav"
echo
и уже от имени пользователя apache запустить и посмот- cat /var/spool/voice/incoming/$QUERY _ STRING|/usr/ ↵
реть, что не работает. Единственное замечание, для такой local/bin/rmdtopvf|/usr/local/bin/pvftowav

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


hardware
Присвоим скрипту атрибут выполняемости, а также со- if [ "$QUERY _ STRING» != "" ]
здадим внутри нашего списка ссылки, которые будут запус- then
rm $message _ dir/$QUERY _ STRING
кать этот скрипт, заменив всего лишь одну строчку: echo "Сообщение $QUERY _ STRING удалено.<br>"
Þ
echo "$f &nbsp;&nbsp;&nbsp;&nbsp;" echo "Последнее сообщение: `date -R -r ↵
$message _ dir/../.ßag`<br>"
echo "У вас сообщения:<br>"
на:
for f in `ls $message _ dir`
do
echo "<a href=\"play.wav?$f\">$f</a> ↵ d=`date -R -r $message _ dir/$f`
&nbsp;&nbsp;&nbsp;&nbsp;" fn=`echo $f|cut -d"." -f1`
Как удалять сообщения? Для этого нам понадобится со- echo "<a href=\"play.wav?$f\">$fn.wav</a> ↵
здать ещё один скрипт delete.sh: &nbsp;&nbsp;&nbsp;&nbsp;"
echo "<a href=\"`basename $0`?$f\">delete</a> ↵
&nbsp;&nbsp;&nbsp;&nbsp;"
#!/bin/bash echo " $d<br>"

rm /var/spool/voice/incoming/$QUERY _ STRING done


echo "Сообщение $QUERY _ STRING удалено.<br>"
echo "</body></html>"

Также надо будет сделать ссылку, при щелчке на кото- Рассказать о всех возможных нюансах настройки мо-
рую этот файл запускался бы. Для этого в скрипте, выво- демов на нескольких листах статьи явно невозможно, поэ-
дящем список файлов, после последней изменённой нами тому я постарался изложить от начала и до конца, как сде-
строки, добавим ещё одну: лать базовые функции автоответчика. Мне хочется ве-
рить, что каждый из вас, дочитавший эту статью до конца,
echo "<a href=\"delete.sh?$f\">delete</a> ↵ не только сможет настроить свой автоответчик, но и не-
&nbsp;&nbsp;&nbsp;&nbsp;"
много пофантазировав над не хватающей функциональ-
Собственно, и всё. по сути больше ничего и не нужно. ностью и дизайном, сможет сам создать что-то более кра-
При желании можно можно объединить файл для удаления сивое и удобное!
и выводящий список в один, чтобы после удаления у поль-
зователя в окне браузера висело не только сообщение Литература, ссылки:
о том, что файл был удалён, но и список оставшихся сооб- 1. Стахнов А. Сетевое администрирование Linux. – СПб.: БХВ-Пе-
щений. А также для привычности восприятия можно вмес- тербург, 2004 г. – 59 с.
то расширения rmd выводить расширение wav. В результа- 2. Мохаммед Дж. Кабир Red Hat Linux 6 Server: Пер. с англ. – Из-
те получится, что весь наш веб-интерфейс состоит из двух дательство «Лори», 2001 г. – 44-45 с.
скриптов: play.wav и модифицированного файла списка – 3. Mgetty+Sendfax Archive/Documentation Centre – http://alpha.
нижеследующего файла 1.sh: greenie.net/mgetty/index.html.
4. ZyXEL Omni 56K modem, mgetty/vgetty and GPL – http://www.
#!/bin/bash advogato.org/article/134.html.
message _ dir="/var/spool/voice/incoming" 5. Руководство для пользователей. Универсальный модем
серии U-1496. Документ № 83011501, Версия 2.21 ZyXEL
echo "Content-type:text/html; charset=koi8-r"
echo Communications Corporation и АО МКЦ «Вариант».
echo "<html><body>" 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. Калинцев Ю. Разборчивость речи в цифровых вокодерах. –
Рисунок 3. Внешний вид браузера после запуска скрипта 1.sh М.:Радио и связь, 1991 г.

78
hardware

Цифровое небо, или


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

Антон Борисов
Великолепие звездного неба завораживает хотя бы одними названиями небесных тел – Сириус,
Тор, Астра, Жар-Птица. Как вы догадались, это названия спутников на геостационарных орбитах.
А ведь можно настроиться на спутниковый канал и принимать теле- или радиопередачи.
л я п е р е д ач и и н ф о р м а ц и и ние: параболическая антенна (блюдце либо принимать спутниковый Интер-
в цифровом формате были в простонародье), конвертер, коакси- нет. В случае, если нужно «все и сра-
придуманы стандарты DVB альный кабель, ресивер (DVB-карта). зу» огорчу – такой вариант одним кон-
(Digital Video Broadcasting): Чем слабее сигнал со спутника в ва- вертером реализовать не получит-
DVB-S, DVB-T, DVB-C. Первый приме- шей местности, тем большего диамет- ся. Так как в любой момент времени
няется в спутниковых каналах, лите- ра блюдце нужно применять. Я не при- мы настроены только на один опре-
ра S – от Satellite. Второй используется вожу здесь детальную методику монта- деленный транспондер (для простоты
в наземных средствах приема/переда- жа тарелки, т.к. написать, лучше Н. Ор- считайте, что принимаем определен-
чи (T – terrestrial). Последний использу- лова [2] я вряд ли смогу. Также отлич- ную частоту со спутника), то переклю-
ется в компаниях, предлагающих услу- ные материалы хранятся по адресам чение на другой транспондер автома-
ги кабельного телевидения (C – cable). [3-5]. В любом случае, нелишним будет тически разорвет текущее соедине-
Стандарты DVB-S и DVB-C были рати- проконсультироваться у специалистов, ние. Это условие касается как видео-,
фицированы в 1994 году, а DVB-T тре- которые смогут рассказать вам о тон- так и интернет-соединения. Во-вто-
мя годами позднее. Первая коммер- костях установки параболической ан- рых, чтобы одновременно принимать 2
ческая трансляция в новом формате тенны, ее параметрах, наличии устой- (или более) канала с одного спутника,
DVB-T была произведена в Великобри- чивого приема со спутника в вашем потребуется мультифид – использо-
тании, в 1998 году. В Берлине решили регионе и некоторым другим нюансам, вание двух (или более) конвертеров,
также отойти от трансляции видеосиг- которые смогут пригодиться в дальней- а также две DVB-карты. В более слож-
нала в аналоговой форме и вещание шем. Если же вы чувствуете в себе си- ном случае, когда вы до сих пор пребы-
полностью переведено на новый фор- лы установить тарелку самостоятельно, ваете на месте обезьяны из анекдота,
мат DVB-T начиная с 2003 года. Теле- то указанные выше источники будут как которая никак не могла решить, какую
станция MiTV в Малайзии с сентября нельзя кстати. Будем считать, что ан- же сторону выбрать, могу посоветовать
2005 г. также начала предоставлять тенна уже откалибрована на какой-ли- попробовать установить антенну с мо-
свои услуги в формате DVB-T [1]. Са- бо спутник, в нашем случае на Eutelsat топодвесом (поворотным мотором).
мым распространенным стандартом W4 – 36.0 градусов восточной долготы. В этом случае, когда надоест вещание
на территории нашей страны, по всей На этом спутнике, в частности, трансли- на одном спутнике, сможете переори-
видимости, является DVB-S, который руются видеоканалы «НТВ+», российс- ентировать блюдце на другой спутник.
используется для ретрансляции кана- кие радиостанции «Динамит FM», «Мон- Внимание! Этот вариант представляет-
лов телевидения и радио. Что же ка- те Карло», «Эхо Москвы» и некоторые ся не таким уж и гладким, как кажется
сается DVB-T и DVB-C, то перспекти- другие. Полный список представлен на первый взгляд. Первое – вы должны
вы их использования у нас достаточно на сайте организации LyngSat [6]. отдавать себе отчет в том, что постоян-
туманны. Как бы там ни было, но по- ное переориентирование влечет за со-
ка существует возможность запускать Выбираем DVB-карту бой «плавание» координат спутников.
телеметрическое оборудование в кос- Если с выбором тарелки всё более- Второе, и самое главное – достаточно
мос, наиболее популярным направле- менее ясно – чем больше диаметр, трудно первоначально настроить мо-
нием будет вещание с геостационар- тем лучше (главное, чтобы крепление топодвес на все желаемые орбиталь-
ных спутников (рис. 1). было достаточно надежным и блюдце ные спутники. Поэтому в этом случае
не унесло ветерком), то выбор DVB- следует рассмотреть вариант установ-
Что необходимо знать карты может принести головную боль. ки нескольких антенн.
для монтажа тарелки Прежде всего следует определиться, Существуют DVB-карты, которые
Чтобы принимать вещание со спутни- что именно вам требуется: смотреть ориентированы только для работы
ка потребуется следующее оборудова- или слушать видео-, аудиоканалы, со спутниковым Интернетом, напри-

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


hardware
мер, Pent@Net, Pent@Value В первой строчке мы загру-
(производитель Pentamedia). жаем драйвер dvb-core. Пара-
Поэтому если вы не хотите ог- метр dvb_shutdown_timeout=0
раничивать себя только спут- означает, что карта SkyStar не
никовым Интернетом, то возь- должна снижать свою мощ-
мите SkyStar2 [7] (производи- ность спустя 5 секунд после
тель – компания TechniSat [8]). инициализации. Что кроется
Помимо низкой цены, карта за этой фразой? Дело в том,
носит заслуженную репута- что, как правило, ставятся
цию самого лучшего бюджет- жесткоориентированные ан-
ного решения. Сравнивайте тенны на определенный спут-
сами (см. таблицу 1). Рисунок 1. Распространенность стандарта DVB-S по всему миру ник, но существует и опреде-
С программным обеспечением для ты. По MAC-адресу также можно поп- ленное количество инсталляций, когда
этой карты проблем не должно воз- робовать определить, что же в дейс- требуется периодически менять ори-
никнуть – драйвера есть для Linux, твительности в ваших руках [9]. В лю- ентацию с одного спутника на другой.
Windows, FreeBSD, OpenBSD, MacOS- бом случае, если вы в дальнейшем В последнем случае можно установить
платформ [10]. Карта является функци- не ориентируетесь на прием спутни- несколько антенн, по антенне на каж-
ональным продолжением своей пред- кового Интернета, то про MAC-адрес дый спутник, а можно установить толь-
шественницы – карты SkyStar1. Прав- можно забыть. ко одно блюдце на моторизованном
да, в новом варианте отсутствует ап- подвесе. Мотоподвес в свою очередь
паратный MPEG2-декодер и нет воз- Сборка и настройка управляется по тому же кабелю, по ко-
можности подключить CI-модуль, с по- DVB-приложений торому идет цифровой поток.
мощью которого можно смотреть «за- Чтобы принимать видео- или радио- Осуществляется это достаточно
крытые» каналы. В целом данная кар- станции, нам потребуется следую- просто – плата SkyStar генерирует сиг-
та предназначена для тех, кому требу- щее ПО: MPlayer[11], DVB-драйверы нал в формате DiSeqC (управляющие
ется бюджетное решение с гарантиро- [12], DVB-Utils[13]. Работа проводится команды для мотора), а также изме-
ванным качеством работы (рис. 2). на Linux-дистрибутиве с ядром 2.4. няет напряжение в 13 до 18 вольт, что-
Обращаю ваше внимание на то, Сначала требуется собрать драй- бы мотоподвес смог повернуть блюдце
что SkyStar2-карты бывают как под- вер для управления DVB-картой (в час- влево или вправо. По умолчанию через
дельные, так и настоящие. Последние тности, если у вас антенна с мото- 5 секунд плата выключает генериро-
производятся немецким концерном подвесом, то именно от драйвера бу- вание напряжения в 18 вольт, поэтому
TechniSat. Стоимость настоящей кар- дет зависеть правильная передача пользователи с фиксированным блюд-
ты колеблется в пределах 75-83 у.е., DiSeqC-команд). цем ничего не заметят, а пользовате-
в то время как стоимость «аналога» ли с мотоподвесом уже не смогут по-
может быть и ниже. Гарантий, что на # wget linuxtv-dvb-1.1.1.tar.bz2 ворачивать антенну. Обладателям мо-
# tar xjvf linuxtv-dvb-1.1.1.tar.bz2
элементной базе «аналога» не сэконо- # cd linuxtv-dvb-1.1.1 топодвесов рекомендуется акцентиро-
мили, никто дать не сможет. DVB-карты # make && make install вать внимание на этом факте.
# ./MAKEDEV-DVB.sh
обладают внутренним MAC-адресом, # /sbin/depmod -a Во второй строчке загружаем драй-
в частности, на SkyStar2 он напечатан вер тюнера, который используется
на лейбле, приклеенном к планке кар- Драйверы подготовлены. Следую- в плате SkyStar2 моделей 2.3 и 2.6.
Таблица 1. Цены на DVB-оборудование щий шаг – сборка таких DVB-приложе- В прежних модификациях платы ис-
ний, как scan, szap, dvbdate, и некото- пользовался драйвер тюнера mt312.
рых других. Например, нам очень при- И в последней строчке загружает-
годится szap, т.к. с помощью именно ся непосредственно драйвер самой
этого приложения можно в дальней- платы. После этого в syslog появля-
шем рассуждать о качестве принима- ются сообщения о регистрации ново-
емого сигнала, количестве ошибок. го устройства.

# wget linuxtv-dvb-apps-1.1.0.tar.bz2 # dmesg


# tar xjvf ↵
linuxtv-dvb-apps-1.1.0.tar.bz2
# cd linuxtv-dvb-apps-1.1.0
# make

Нужные утилиты и драйверы гото-


вы – можно приступать к следующе-
му шагу.

# /sbin/insmod dvb-core ↵
dvb _ shutdown _ timeout=0
# /sbin/insmod stv0299
# /sbin/insmod skystar2 Рисунок 2. DVB-карта SkyStar2

80
hardware
skystar2.c: FlexCopIIB(rev.195) chip found муму. При этом битовые ошибки (ber), наоборот, должны
skystar2.c: the chip has 38 hardware filters быть «в идеале» 0 (как в данном случае). Флаг FE_HAS_
DVB: registering new adapter (Technisat SkyStar2 driver).
probe_tuner: try to attach to Technisat SkyStar2 driver
LOCK означает, что сигнал от транспондера опознан на этой
stv0299.c: setup for tuner Samsung TBMU24112IMB частоте с данными параметрами и можно приступать к про-
DVB: registering frontend 0:0 (STV0299/TSA5059/SL1935 based)... смотру или прослушиванию теле/аудиоканала.
Можно оформить загрузку либо в файле /etc/rc.d/rc.local Однако если у вас MPlayer (или xine, или аналог) соб-
(или аналогичном для вашей системы), либо как строчки ран без поддержки DVB, то до наслаждения остается бук-
в /etc/modules.conf. вально один шаг.
После этого необходимо создать файл channels.conf,
в котором содержатся сведения о характеристиках кана- # cd MPlayer-1.0pre7try2
# ./conÞgure --preÞx=/usr/local/mplayer ↵
лов, передаваемых со спутника (частота, символьный по- --with-dvbincdir=../dvb/linuxtv-dvb-apps-1.1.0/include/
ток данных, поляризация и т. д.). Обратимся к информа- # make
# make install
ции, размещенной на сайте LyngSat [6]. Для радиостан-
ции «Dinamit FM»(луч охватывает территорию России) ви- Обращаю ваше внимание на то, что в моем примере па-
дим следующее: кет linuxtv-dvb-apps находится в каталоге dvb. У вас может
быть немного по-другому, поэтому следите за корректнос-
Частота (freq.): 12073 тью пути к данным утилитам.
Поляризация (там же): L (левая, она же горизонтальная)
Символьный поток (SR): 27500 Запуская MPlayer следующим образом, вы сможете слу-
Аудиоканал (Audio): 4100 шать радиостанции:
Идентификатор (SID): 2

Составим из этих данных файл channels.conf, который # mplayer dvb://0@"Monte Carlo" -tsprobe 12000
в дальнейшем будет использоваться и MPlayer и DVB-ути-
литами. Выглядит он следующим образом: Ключ tsprobe необходим для быстрого определения
MPEG-TS-потока. В случае, когда проигрывается видеока-
Dinamit FM:12073:h:0:27500:0:4100:1:2 нал, то значение следует увеличить до 120000.
TV1:12173:h:0:2532:401:301:1:1
TNV:12214:h:0:4340:401:320:1:1 А насколько интересно содержание спутниковых кана-
лов решать, конечно же, вам. На вкус и цвет, как извест-
Первое поле – название канала, второе – используе- но, товарищей мало. Надеюсь, что найдя что-то нужное,
мая частота. Затем следует поляризация (горизонтальная вы уже будете знать, как применить спутниковую ретранс-
или вертикальная), четвертое поле зарезервировано. Пя- ляцию. Производить ли вещание в рамках LAN/WAN или за-
тая позиция отвечает за символьный поток (Мбит/с). Затем думаться об эфирном вещании станций в вашем населен-
пара – идентификаторы видео- и аудиопотоков. Восьмое ном пункте. Или превратить вашу домашнюю ПЭВМ в ана-
поле опять резервируется. И последняя позиция – иденти- лог видеомагнитофона с помощью программ VDR (Video
фикатор SID. Составив таким образом файл каналов, мож- Digital Recorder) [20] или MythTV [21]. На этом всё, приятно-
но приступать к тестированию каждого конкретного транс- го времяпровождения.
пондера. Предположим, что пакет MPlayer в базовом вари-
анте у вас уже установлен. Запишем только что созданный Ссылки:
файл в домашнюю директорию MPlayer. 1. http://www.wikipedia.com/DVB.
2. http://www.telesputnik.ru/equipment/antena1.html.
# cp channels.conf ~/.mplayer/ 3. http://tv.tut.by/tech/tune.shtml.
4. http://satnn.ru/sat_tv/128/dish_setup.
Вспомним, что помимо драйверов мы также собрали 5. http://www.allsat.ru/tvsat.html.
пакет dvb-utils. Воспользуемся утилитой szap из этого па- 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.
# cd linuxtv-dvb-apps-1.1.0/util/szap 9. http://www.gs.ru/info/si/eq.html.
# ./szap "Dinamit FM" -c ~/.mplayer/channels.conf
10. http://www.defyne.org/dvb.
reading channels from file '/home/anthony/.mplayer/channels.conf'
zapping to 2 'Dinamit FM':
11. http://www4.mplayerhq.hu/MPlayer/releases/MPlayer-1.0pre7try2.
sat 0, frequency = 12073 MHz H, symbolrate 27500000, vpid = 0x0000, apid = 0x1004 tar.bz2.
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
status 07 | signal c281 | snr a977 | ber 0000fff0 | unc 00000000 | 12. http://www.linuxtv.org/download/dvb/linuxtv-dvb-1.1.1.tar.bz2.
status 1f | signal c306 | snr d686 | ber 00000019 | unc 00000000 | FE_HAS_LOCK
status 1f | signal c10e | snr d680 | ber 00000000 | unc 00000000 | FE_HAS_LOCK 13. http://www.linuxtv.org/download/dvb/linuxtv-dvb-apps-1.1.0.tar.bz2.
status 1f | signal c240 | snr d680 | ber 00000000 | unc 00000000 | FE_HAS_LOCK 14. http://www.linuxdvb.tv/download/dvb-20050706.tar.bz2.
status 1f | signal c0e4 | snr d68f | ber 00000000 | unc 00000000 | FE_HAS_LOCK
status 1f | signal c29e | snr d680 | ber 00000000 | unc 00000000 | FE_HAS_LOCK 15. http://www.technisat.com/datasheets/en/SkyStar2pci.pdf.
16. http://www.skystar2.info.
Для анализа необходимо обратить внимание на следу- 17. http://www.gs.ru/si/SS2graph.html.
ющие характеристики: уровень сигнала (signal), отношение 18. http://www.gs.ru/si/SS2soft.html.
сигнал/шум (snr) и ошибки (ber). Сигнал должен быть макси- 19. http://www.satworld.ru/int4-st5.html.
мальным (в данном случае он колеблется на уровне 75%), 20. http://www.cadsoft.de/vdr – Video Disk Recorder.
отношение сигнал/шум также должно стремиться к макси- 21. http://www.mythtv.org.

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


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

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


одной из самых интересных
операционных систем

Алексей Коршунов
Сейчас это может показаться кому-то странным, но Windows-системы существовали не всегда.
Ещё не так давно доминирование продукта Microsoft было не настолько очевидным, а на рынке
операционных систем имелся один весьма и весьма перспективный продукт компании IBM
под названием OS/2.

Краткая информация Вместе с тем DOS и BIOS име- защиты ни памяти, ни других ресурсов,
OS/2 – операционная система фирмы ли один очень большой недостаток. и любой процесс мог делать что угодно
IBM. Особой популярностью в качес- Они отнюдь не были «звездной коман- с любым куском памяти или манипули-
тве домашней ОС никогда не поль- дой» и, что еще хуже, – не использо- ровать с оборудованием – элементар-
зовалась, оставаясь в тени Windows. вали аппаратную часть PC на полную ный рецепт катастрофы.
OS/2 представляет собой самосто- мощность. Это означало, что многие Архитектура DOS имела серьезные
ятельную линию развития операци- программы для полного использова- ограничения при работе с памятью.
онных систем, отличаясь от Windows ния аппаратных возможностей обра- «640 Кб будет достаточно для каждо-
NT существенно меньшей требова- щались к устройствам напрямую, ми- го» – выражение Билла Гейтса в 1981
тельностью к ресурсам компьютера, нуя DOS. году. Возможно, это и было правдой
а от Linux/UNIX – принципиальной раз- в 1981, но никак не в 1984. Естествен-
ницей в подходе к разработке и боль- Рассвет IBM PC но, как только нехватка памяти стала
шей схожестью графического интер- Но невзирая на все свои недостатки очевидной, были придуманы различ-
фейса пользователя с Windows. в 1980 году IBM PC стал популярным ные способы обойти «проблему 640»,
инструментом. Аппаратный и програм- но все они никак не могли считаться
OS/2 1.0 – начало мный рынки росли с невиданной скоро- решением.
Эволюция OS/2 началась очень давно. стью. Казалось бы все было прекрас- Некоторые из существовавших
Наиболее важным моментом предыс- но – но пользователи PC были недо- проблем могли быть решены програм-
тории OS/2 следует считать появление вольны. Основные причины тому бы- мно с помощью лучше спроектирован-
IBM Personal Computer или просто IBM ли следущие: ной операционной системы. Но дру-
PC (название отлично демонстрирует Различные программы либо никак гие требовали аппаратной поддержки
полное отсутствие изобретательности не взаимодействовали друг с другом, для того чтобы решение было эффек-
IBM в деле присвоения наименований либо взаимодействие происходило тивным или в принципе реализуемым.
выпускаемым продуктам). на примитивном уровне. И эта поддержка была реализова-
MS(PC)-DOS, как и сам PC, была Пользователь не мог делать не- на в 1984 году под названием IBM AT
весьма открытой системой. Интерфей- сколько задач одновременно. Как не- (Advanced Technology). Помимо огром-
сы DOS и BIOS были хорошо докумен- кое подобие многозадачности были ной массы различных усовершенство-
тированы, и сторонние производители придуманы резидентные программы. ваний самым заметным (и важным) бы-
могли легко использовать и расширять Логическим итогом всего хаоса ло применение нового центрального
их – вот почему DOS и по сей день ис- проблем было то, что окружение DOS процессора – Intel 80286. Хотя 80286
пользуется в некоторых задачах. было нестабильным. Не было никакой был 16-разрядным, как и его прароди-

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

История 795 долларов, включала также Database Все новые изменения внесены в подавля-
1981. Microsoft покупает 86-DOS у компа- Manager и Communications Manager. ющем большинстве программистами IBM,
нии Seattle Computer Products. Удовлетво- Октябрь 1989. OS/2 1.20 SE и EE (кодо- система претерпела существенную пере-
рение запросов IBM к операционной сис- вое название Sloop). Впервые предложена работку и ощутимо улучшилась ее произ-
теме для PC привело к некоторым измене- улучшенная файловая система HPFS. По- водительность.
ниям, после чего она и выпущена под тор- явилось средство двойной загрузки Dual Апрель 1992. OS/2 2.0 (кодовое назва-
говой маркой MS-DOS. Boot, а в расширенной версии 1.2 – мощ- ние Cruiser). Первая 32-разрядная версия
1984. Появляется процессор Intel 80286. ный язык REXX. Этот год является пере- OS/2. Минимальные требования – про-
В IBM принимается решение, что опера- ломным моментом в истории OS/2 – альянс цессор 80386SX, 4 Мб оперативной па-
ционная система DOS морально устаре- начинает разваливаться (в основном из-за мяти. Поддержка SAA (System Application
ла, и совместно с Microsoft начинает раз- «подковерных игр» менеджеров Microsoft). Architecture) – унифицированной архитек-
работку OS/2. Microsoft, обеспокоенная завоеванием рын- туры прикладных программ. OS/2 2.0 –
Декабрь 1987. Появилась OS/2 1.0 (ко- ка операционных систем, берет на себя раз- первая версия, официально поддерживае-
довое название CP/DOS). Эта версия не работку следующей, полностью 32-разряд- мая не только на компьютерах IBM, но и на
имела графической оболочки (работала ной OS/2 3.0. IBM концентрируется на раз- компьютерах других фирм. Она претерпе-
только в текстовом режиме) и имела до- работке OS/2 2.0. Это, по сути, «развод» – ла большие реконструкции после разрыва
статочные улучшения относительно DOS, разрабатываемая фирмой Microsoft OS/2 партнерских отношений с Microsoft по раз-
например, там была расширена поддержка 3.0 даже не сохраняет своего названия и работке. Появился удобный объектноори-
оперативной памяти. Выводить информа- демонстрируется на выставке ComDex’91 ентированный интерфейс WorkPlaceShell
цию на экран могла только одна програм- под именем Windows NT – первая Windows («рабочий стол», рабочее место) базирую-
ма, хотя другие программы могли выпол- с вытесняющей многозадачностью. щийся на архитектуре SOM (System Object
няться в фоновом режиме. Декабрь 1990. OS/2 1.3 (кодовое назва- Model), появилось гибкое средство загруз-
Ноябрь 1988. OS/2 1.0 Extended Edition ние Cutter) – версия, работающая на про- ки Boot Manager, серьезно усовершенство-
и OS/2 1.1 Standard Edition. Версия OS/2 цессоре 80286 и последняя, выходящая вана поддержка DOS и Windows приложе-
1.1 SE (кодовое название Trimaran) обла- в двух вариантах стандартной и расши- ний (Windows приложения запускаются с ис-
дает графической оболочкой Presentation ренной редакции (Язык REXX присутствует пользованием Win-OS/2), а также 32-раз-
Manager. Требования к оперативной памя- уже в обеих редакциях). Из новшеств – под- рядный программный интерфейс. Появи-
ти – минимум 3, а лучше 6 Мб. Версия под держка масштабируемых шрифтов Adobe лась и возможность использования более
названием OS/2 1.10 Extended Edition (OS/2 Type Manager. Эта версия также в ряду пос- 16 Мб оперативной памяти. Отдельно выхо-
1.10 EE), появившаяся позднее и стоящая ледних, продаваемых фирмой Microsoft. дят обновления для средств мультимедиа.

тели, однако он имел одну очень важ- пешной оболочки DesqView производс- задолго до выпуска продукт переиме-
ную особенность: защищенный ре- тва компании Quarterdeck. Microsoft новывается в OS/2 – видимо, для со-
жим работы (protected mode). В защи- Windows являлась графическим мно- ответствия новой линейке персональ-
щенном режиме 286-й мог адресовать гозадачным окружением, работавшим ных компьютеров IBM под названием
16 Мб памяти. Это было очень много, поверх DOS. Впервые анонсированная PS/2 (Personal System/2).
учитывая, что PC с 16 Мб памяти стали в 1983 версия 1.0 появилась в 1985. Интересно то, что OS/2 1.0 не бы-
стандартом де-факто лишь более чем Она была более чем плохой и вполне ли реализованы очень многие плани-
10 лет спустя. Но еще большим плюсом заслуженно не приобрела сколько-ни- руемые особенности и самым замет-
было то, что защищенный режим был будь широкой популярности. ным было отсутствие графического
действительно защищенным. Это оз- интерфейса пользователя Presentation
начало, что доступ к памяти не был Взросление Manager (кодовое имя Winthorn).
«свободным для всех» – вместо этого В это же время Microsoft работала И все же OS/2 1.0 являлась ради-
существовало 4 уровня (или кольца) над полностью новой операционной кальным рывком в сторону от DOS
защиты и менее привилегированный системой, рассчитанной заменить и имела множество особенностей
процесс не мог нанести повреждения DOS. В январе 1983 года началась раз- и возможностей, которые DOS никог-
блокам памяти, принадлежащим более работка новой многозадачной MS-DOS да не смогла бы иметь и которые бы-
привилегированным компонентам. системы. Название проекта изменя- ли реализованы в других операцион-
Как IBM, так и Microsoft полностью лось несчетное количество раз. В ав- ных системах намного позже.
осознавали проблемы, вызываемые густе 1985 IBM присоединяется к про- ! Вытесняющая многозадачность
работой DOS в реальном режиме, и ра- екту, и фирмы подписывают соглаше- (preemptive multitasking).
ботали над их решением. Двумя наибо- ние о совместной разработке, которое ! Многопоточность (multithreading).
лее заметными продуктами, которые дает обеим компаниям право на про- ! Средства взаимодействия меж-
в итоге появились, стали IBM TopView дажу конечного продукта. Немного по- ду процес с ами (Inter Process
и Microsoft Windows. TopView была годя проект переименовывается в CP/ Communication – IPC) такие как
текстовой многозадачной оболочкой DOS – от Control Program/DOS. Но да- р а з д е л я е м а я п а м я т ь ( s h a re d
для DOS и в сущности идейным праро- же это был не финал процесса выбора memory), каналы (pipes), семафоры
дителем позднейшей намного более ус- имени еще нерожденного ребенка. Не- (semaphores) и очереди (queues).

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


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

Май 1993. OS/2 2.1 (кодовое назва- тированную модель интерфейса. С OS/2 ные корпорацией IBM. Сильно изменен ди-
ние Borg). Добавлена поддержка прило- Warp 3.0 поставляется бесплатный пакет зайн системы и более удачно (относитель-
жений Windows 3.1 (до этого поддержива- «BonusPak», включающий: но предыдущих версий) проработана сете-
лась Windows 3.0). В поставку включены ! средства ревизии аппаратного обеспе- вая подсистема.
средства мультимедиа и значительно об- чения; 1999. OS/2 WarpServer for e-Business
новлен список поддерживаемых аппарат- ! расширенные средства просмотра (кодовое название Aurora) – сокращенно
ных устройств. Требования к оперативной мультимедиа, обработки движущегося OS/2 WSeB. Внешне OS/2 осталась прак-
памяти – минимум 8 Мб. видео, полнофункциональную работу тически без изменений, однако внутрен-
Ноябрь 1993. OS/2 for Windows (кодовое с факсом (при наличии факс-модема); ние переработки носили весомый харак-
название Ferengi). Отсутствует Win-OS/2 – ! достаточно мощный пакет офисных тер. Появилась поддержка журналируемой
вместо нее используется уже ранее уста- приложений (включая текстовый про- файловой системы JFS, взятой из AIX (IBM
новленная пользователем Windows 3.1, об- цессор, электронные таблицы, базу версия UNIX), сняты ограничения на объ-
новлены драйвера. данных, построения графиков) и пер- ем виртуальной памяти, появилась мощная
Февраль 1994. OS/2 2.11. В основным сонального органайзера; программа для управления томами под на-
исправлены различные ошибки. Также су- ! средство проведения конференций званием LVM (Logic Volume Manager).
ществует отдельным набором исправлений в сетях; Весной 2000-го американская компа-
FixPack XR 06200 для OS/2 2.1. ! доступ к сетям CompuServe и Интер- ния Serenity Systems объявляет о том, что
Июль 1994. OS/2 2.11 SMP. В этой вер- нет. ею достигнуто партнерское соглашение
сии была добавлена поддержка многопро- с IBM о выпуске новой клиентской версии
цессорных (до 16 процессоров) систем. Май 1995. OS/2 Warp Connect. В базо- OS/2. Правда, эта клиентская версия пол-
Октябрь 1994. OS/2 Warp 3.0 (кодо- вую систему включена полная поддержка ностью меняет свое название – новый кли-
вое название Warp). Изменения коснулись сетевой функциональности, поддержка од- ент называется eComStation (сокращенно
лишь улучшения производительности сис- норанговых сетей. eCS). Официально продажи eCS 1.0 нача-
темы, понижения требования к оператив- Сентябрь 1996. OS/2 Warp 4.0 (кодо- лись в июле 2001 года. По сути, это новая
ной памяти до 4 Мб. Расширен спектр под- вое название Merlin). В этой версии вклю- модификация OS/2, в которой изменен ин-
держиваемых аппаратных устройств. В GUI чено полное управление голосом, средс- терфейс за счет включения в базовую сис-
появился новый элемент – LaunchPad (Па- тва голосового ввода текста, встроенные тему приложения Styler/2 а также процесс
нель инструментов, «стартовая площад- механизмы Java, OpenDoc, средства ра- инсталляции. Добавлено новое средство
ка») – эффективное и гибкое средство, боты в глобальной сети Интернет и дру- распределенной инсталляции ПО под на-
отлично вписавшееся в объектноориен- гие передовые технологии, разработан- званием WiseMachine.

! Поддержка виртуальной памяти в защищенном режиме, хотя в процес- Весь же защищенный код был на-
(virtual memory, swapping) – теоре- се поиска решения и столкнулись с ог- писан «с нуля» со всеми теми прият-
тически до 1 Гб виртуальной па- ромным количеством проблем. Окон- ными особенностями, которые бы-
мяти. чательный выход выглядел следующим ли описаны ранее. Ядро и системные
! Полностью защищенный режим ра- образом: имелась одна-единственная библиотеки в основном были написа-
боты. полноэкранная сессия DOS, которая ны на ассемблере по следующим двум
! Динамическое подключение биб- не могла выполняться в фоновом ре- причинам:
лиотек (dynamic linking, DLLs). жиме. Реализация подобного подхода ! Производительность – OS/2 долж-
! Поддержка до 16 Мб оперативной требовала частого переключения меж- на была работать на IBM AT с 6 Мгц
памяти. ду защищенным и реальным режима- процессором.
ми (при активной DOS задаче). ! Ограничения по памяти – OS/2
Одной из самых неприятных помех Код DOS, применяемый в OS/2, ба- должна была работать при нали-
для разработчиков было то, что они зировался на коде MS-DOS/PC-DOS, чии только 1 Мб ОЗУ.
столкнулись с необходимостью подде- но с многочисленными модификация-
ржки DOS. Ни одна из проблем не яв- ми. Так, к примеру, код, обеспечивав- В новой операционной системе бы-
лялась непреодолимой, но их комбина- ший работу с файловой системой, ра- ло особенно не на что посмотреть – ин-
ция была убийственной. IBM и Microsoft ботал только в защищенном режиме. терфейс был исключительно текстовым
расплачивались за непродуманные ре- Иными словами, при обращении к фай- (обещанный Presentation Manager был
шения, принятые при разработке DOS лу вся операционная система переклю- все еще в стадии разработки) и внешний
в 1981 году. К тому же огромная попу- чалась в защищенный режим. Впрочем, вид весьма походил на DOS. Но после
лярность DOS произвела эффект бу- впоследствии такой подход оказал- нажатия <Ctrl+ESC> появлялся Program
меранга – разработчики вынуждены ся большим плюсом – когда были реа- Selector – утилита, позволявшая запус-
были поддерживать DOS приложения лизованы инсталлируемые файловые кать новые задачи и переключаться
в OS/2, чтобы иметь хоть какие-то шан- системы, оказалось, что DOS сессия между существующими. Теоретически
сы на завоевание рынка. OS/2 не имеет никаких проблем с до- существовало 16 сессий, но поскольку
В конце концов разработчики OS/2 ступом к (например) файловой систе- сама OS/2 занимала часть из них, поль-
нашли решение, как исполнять DOS ме HPFS. зователь имел доступ к 12 сессиям.

84
ретроспектива
С точки зрения пользователя OS/2 ображения, но продажа набо- ! Прежде всего самое заметное бы-
1.0 имела несколько существенных не- ра разработчика (SDK – software ло в различии координатных сис-
достатков. Некоторые были исправле- development kit) за тысячи долларов тем. В то время как координаты 0,0
ны в более поздних версиях серии 1.x, отнюдь не помогала росту популяр- в Windows были привязаны к вер-
на исправление других понадобилось ности операционной системы (пер- хнему левому углу экрана (что ло-
куда больше времени: вая версия Microsoft SDK for OS/2, гично для знающего, как работает
! Максимальный размер раздела вышедшая в апреле 1987, стоила аппаратная реализация графики
32Мб. Хотя возможно в 1987 году три тысячи долларов). на архитектуре PC), в PM коорди-
это было и не критично. OS/2 1.1 ! Ложные представления о новом наты 0,0 были привязаны к нижне-
превысила это ограничение (хотя продукте. Возможно, самый боль- му левому углу экрана (что логич-
и базировалась на FAT), а OS/2 1.2 шой ложный миф зак лючался но для того, кто знает, как работа-
поставлялась уже с HPFS. в том, что OS/2 могла работать ет координатная система в матема-
! Отсутствовала поддержка двойной только на оборудовании IBM. Де- тике или физике).
загрузки (dual boot) или менеджера ла обстояли абсолютно иначе – да- ! В Windows все графические опе-
загрузки (Boot Manager). Dual Boot же версии OS/2, продаваемые са- рации передавались так называе-
появился в версии 1.1, Boot Manager мой IBM, поддерживали оборудо- мому Device Context. PM также ис-
был реализован в версии 2.0. вание сторонних производителей. пользовал DC, но дополнительно
! Не было возможности обойти обра- имел еще один уровень абстрак-
ботку файла CONFIG.SYS. Это бы- Резюмируя, можно сказать, что ции, называвшийся Presentation
ло напастью всех версий серии 1.x. OS/2 1.0 не достигла абсолютного ус- Space, что предоставляло большую
В сочетании с отсутствием Boot пеха (иначе сегодня большинство ком- гибкость.
Manager это означало, что если пьютеров работало бы под управлени- ! OS/2 имела гораздо более мощные
система не могла загрузиться (на- ем OS/2), но и не стала оглушитель- функции рисования в своем графи-
пример, некорректный драйвер), ным провалом. OS/2 внесла большое ческом программном интерфей-
то единственным шансом спасти количество новых (и по большей час- се (Graphics Programming Interface,
ситуацию (и данные) была загру- ти хороших) концепций в мир PC. Так- GPI) – наследие мейнфреймов. Не-
зочная дискета. Окончательно про- же OS/2 1.x выстроила солидный фун- которые из концепций GPI позднее
блема была решена только в OS/2 дамент для OS/2 2.x, которая в свою были перенесены в Windows NT
Warp. очередь была большим шагом в исто- (но не в Windows 95).
! Полное отсутствие механизма за- рии PC. Большинство концепций, впер- ! Общая программная модель в OS/2
мены находящихся в использова- вые появившихся в OS/2 1.x доказали была намного проще и не выгляде-
нии динамических библиотек (DLL). свою обоснованность и не претерпе- ла как набор «быстрых и грязных
Это сделало установку исправле- ли существенных изменений в после- исправлений» (quick and dirty hack),
ний системных DLL (таких как драй- дующих релизах. Программисты IBM что справедливо по отношению
вера Presentation Manager) более и Microsoft, без сомнения, не заслужи- к программной модели Windows.
чем затруднительным занятием. вают ничего, кроме уважения за про-
В OS/2 2.x ситуация разрешилась деланную работу. Помимо появления GUI другие из-
с помощью недокументированных менения включали полную реализа-
вызовов API. OS/2 1.1 – ранние годы цию именованных каналов, которой
Следующим релизом OS/2 стала вер- не было в OS/2 1.0. Также была до-
На рынке операционных систем сия 1.1. Единственной причиной, по ко- бавлена поддержка «больших» томов
OS/2 пребывала в состоянии безна- торой версию пронумеровали не 2.0, FAT (BigFAT). Теоретически поддержи-
дежной битвы за широкое распростра- вероятно, было то, что графичес- вались тома размерами до 2 Гб, хо-
нение. Ее признанию мешало несколь- кий интерфейс пользователя (GUI – тя практический лимит был несколь-
ко факторов: Graphical User Interface) был обещан ко ниже.
! OS/2 считалась требовательной в версии 1.0, но не был закончен вов- После запуска OS/2 1.1 встреча-
к ресурсам (рекомендовалась AT ремя. Как забавный факт следует от- ла пользователя следующим экраном
с 2 Мб ОЗУ, хотя для работы было метить, что Windows 1.0 разрабатыва- (см. рис. 2).
достаточно одного мегабайта). лась как Interface Manager и приобре- Достаточно странным фактом бы-
! Совместимость с DOS на самом ла новое имя благодаря менеджерам, ло то, что OS/2 1.1 не имела нормаль-
деле была далеко не на высоком игравшим с именами, невзирая на про- ного текстового редактора с GUI ин-
уровне. С другой стороны, само тесты программистов. терфейсом – даже такого, как notepad
наличие поддержки DOS было ма- Presentation Manager имел кодо- в Windows. Вместо него было тексто-
леньким чудом, поскольку препятс- вое имя Winthorn и практически пол- вое приложение E.exe, запускаемое
твий этому было неисчислимое ностью был написан в отделении IBM из командной строки.
множество. Hursley Labs. Программирование для В любом случае OS/2 1.1 была тех-
! Непомерно высокие цены. Воз- PM было весьма схоже с программи- нически очень интересной и занима-
можно, маркетологи IBM и Microsoft рованием под Windows, однако име- тельной программой. Она облада-
имели какие-то свои особые со- лись и отличия: ла намного большими возможностя-

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


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

Рисунок 1. Рабочее пространство пользователя OS/2 1.0 Рисунок 2. Долгожданный GUI

ми, чем любая операционная систе- ние. Имена файлов могли быть дли- в FAT. HPFS дублировала часть
ма для персональных компьютеров ной до 255 символов и допускали информации и хранила структу-
в то время. Windows и MacOS даже значительно больший диапазон до- ру диска связно в обоих направ-
в перспективе не имели того, что было пустимых к использованию симво- лениях (от каталога к подкаталогу
в OS/2 – ни вытесняющей многозадач- лов – в частности пробел. или файлу и наоборот). В резуль-
ности, ни многопотоковости, ни вирту- ! Поддержка расширенных атрибу- тате, повреждения одной области
альной памяти. тов (Extended Attributes, EA). Каж- не оказывали никакого влияния на
Естественно, что системе были дый файл или директория могли весь остальной раздел. К примеру,
присущи и недостатки. Хотя и под- иметь до 64 Кб EA, связанных с ним несмотря на повреждение сектора
держивалось большинство тогдаш- там могла храниться любая инфор- с директорией – все файлы в ней
них стандартов для вывода графики мация – иконки, описания, инфор- оставались доступны.
(CGA, EGA, VGA), но поддержка дру- мация для программы-каталогиза-
гих была весьма слабая, если вообще тора и так далее. Существовало две версии HPFS –
существовала. Поддержка принтеров ! Поддержка больших дисков. FAT «чистая» HPFS и HPFS386. Последняя,
была чисто номинальная – несколько поддерживала разделы размером используемая в Microsoft LAN Manager
принтеров и плоттеров производства до 2 Гб. HPFS поддерживала тома (и IBM LAN Server), была более произ-
IBM и все. до 64 Гб и была ограничена на то водительной, допускала значитель-
Под OS/2 существовали различные время лишь драйверами жестких но увеличенные размеры кэша и име-
приложения – в том числе такие, как дисков. ла несколько расширений необходи-
Microsoft Word, Lotus 1-2-3 и QuattroPro. ! Устойчивость к фрагментации. мых для серверов – к примеру встро-
Однако все они были текстовыми, В то время как разделы FAT тре- енную систему разграничения доступа
за исключением Microsoft Excel 2.2. бовали регулярной дефрагмен- (Access Control List, ACL) и систему ог-
тации для предотвращения иног- раничения директорий. В общем, судь-
OS/2 1.2 – развитие да ощутимых потерь в производи- ба HPFS оказалась весьма успешной
В конце 1999 Microsoft и IBM выпуска- тельности, HPFS пыталась исполь- – она практически в неизменном ви-
ют версию OS/2 1.2 – очень важное со- зовать для файлов непрерывные де перешла в OS/2 2.0 и с некоторы-
бытие во всей истории OS/2, посколь- фрагменты, сохраняя фрагмента- ми вариациями была использована
ку именно в версии 1.2 были реализо- цию на минимальном уровне. в Windows NT под именем NTFS. По-
ваны практически все возможности, ! Уменьшение потерь дискового про- добная история произошла с файло-
обещанные в OS/2 еще до ее появле- странства. Наибольший FAT-диск, вой системой UFS операционной сре-
ния. В OS/2 1.2 разработчики наконец размером в 2 Гб, использовал ды SunOS 4.x. После революционно-
отказались от файловой системы FAT для хранения данных элементы го перехода на полностью новую вет-
и реализовали инсталлируемые фай- размером 64 Кб, чем вызывались ку UNIX фирма Sun, имея богатый по-
ловые системы (Installable File System, большие потери дискового места ложительный опыт, без больших изме-
IFS) и высокопроизводительную фай- (иногда до 50%). HPFS использо- нений оставила UFS в своей новой ОС.
ловую систему HPFS (High Perfomance вала сектора размером 512 байт, Это наглядный пример того, что удач-
File System). таким образом резко уменьшая по- ные решения предшественников ос-
HPFS была разработана «с ну- тери. таются в силе.
ля» Гордоном Литвином (Gordon ! Высокая отказоустойчивость. Ес- OS/2 GUI также получил новый вне-
Letwin) – ведущим разработчиком OS/2 ли таблица FAT на дисковом раз- шний вид, весьма схожий с вышедшей
в Microsoft. Новая файловая система деле разрушалась в результате ин- через несколько месяцев Windows 3.0
весьма превосходила FAT, а также сни- цидента, вся остальная информа- (см. рис. 3).
мала множество ограничений: ция на диске превращалась в го- Наиболее значимым различием
! Отсутствовал печально известный ру бесполезного мусора, посколь- между OS/2 1.2 и Windows 3.0 было
лимит «8.3» на имена файлов – 8 ку вся информация о размещении то, что Windows не была операционной
символов на имя и 3 на расшире- файлов была сконцентрирована системой как таковой и исполнялась

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

Рисунок 3. Единообразие интерфейса OS/2 & Win3.0 Рисунок 4. Workplace Shell OS/2 2.0

поверх MS-DOS (и даже могла быть вания за счет обеспечения макси- и Microsoft и в одной из перепалок ви-
запущена в DOS сессии OS/2). Также мально естественной формы пред- це-президент Microsoft Стив Балмер
Windows содержала больше различных ставления данных и управляющих пообещал публично съесть флоппи-
приложений (по большей части беспо- структур языка; диск, если IBM умудрится выпустить
лезных, ну может быть за исключением ! обеспечения надежной и эффек- OS/2 2.0 до конца 1991 года. Посколь-
Solitaire). OS/2 была более бизнес-ори- тивной реализации языка на раз- ку зрелище обещало быть достаточно
ентированной и при сравнении имела нообразных платформах; интересным, в ноябре 1991 была вы-
несколько спартанский вид. Отчасти ! высокой применимости языка пущена ограниченным тиражом OS/2
это послужило тому, что Windows полу- в системном и прикладном ПО. 2.0 LA (Limited Availability – ограничен-
чила большее распространение среди но доступная). К сожалению, госпо-
конечных пользователей. И все эти задачи были успешно ре- дин Балмер не сдержал своего слова,
шены. Таким образом операционная и OS/2 2.0 LA пришлось использовать
OS/2 1.3 – последняя система получила мощный и гибкий как простую бета-версию, каковой она
из 16-битных ОС инструмент, сравнимый с различными в сущности и являлась.
После исторического разрыва сов- языками написания скриптов в UNIX- Самым большим плюсом в OS/2 2.0
местной разработки OS/2, вызванно- подобных системах. Это несомненно была сама система. Переход на 32-раз-
го нежеланием Microsoft делить при- являлось очень большим преимущес- рядную архитектуру снял множество
быль от продаж операционной систе- твом, особенно в сравнении с более ограничений, существовавших в DOS
мы с IBM, основной процесс по модер- чем скромным набором возможнос- и OS/2 1.x – в первую очередь по ра-
низации OS/2 происходил в IBM (хо- тей, которые предлагались при напи- боте с памятью. Вместе с тем система
тя Microsoft и полностью сконцентри- сании пакетных файлов в DOS и ран- не была «полностью» 32-разрядной –
ровалась на Windows, некоторые вы- них версиях OS/2. многие части оставались 16-разрядны-
нужденные изменения в систему все ми – в первую очередь по соображени-
же вносились). Версия 1.3 была прак- OS/2 2.0 – 32-битная ям совместимости и экономии време-
тически идентична 1.2 по предостав- революция ни. Для ускорения разработки, к при-
ляемым возможностям, но включа- Пока в 1988 году IBM и Microsoft усер- меру, драйвера графической подсисте-
ла многочисленные улучшения про- дно трудились над OS/2 1.2, в IBM на- мы (драйвера видеокарт и принтеров
изводительности и удобства исполь- чалась разработка кардинально пе- для Presentation Manager) в OS/2 2.0
зования. реработанной операционной систе- были 16-разрядными и были замене-
Наконец во всех редакциях OS/2 мы. Итак, хотя версию 1.3 IBM совер- ны 32-битными версиями только в OS/2
присутствовал язык программирова- шенствовала исключительно своими 2.1. Требованиями совместимости дик-
ния REXX, разработанный Майком Ко- силами, в то же время под руководс- товалось использование 16-разряд-
улишоу (Mike Cowlishow) из IBM UK. твом ведущего разработчика Майк- ных драйверов физических устройств
Язык изначально создавался для ла Когана (Michael S. Kogan) уже пол- (Physical Device Driver, PDD) совмес-
достижения четырех главных целей: ным ходом шли работы над версией тимых с OS/2 1.3. Аналогичным обра-
! легкой понимаемости (читаемости) 2.0. В марте 1992 операционная сис- зом многие фрагменты ядра были 16-
написанных на нем программ, что тема была полностью готова и выпу- битными для обеспечения поддержки
облегчает работу программистам, щена на рынок под названием OS/2 приложений, написанных для OS/2 1.x.
пользователям и сопровождающе- 2.0 GA (General Availability – публично Основные же элементы системы бы-
му персоналу; доступная). Приставка GA появилась ли полностью новыми и 32-разрядны-
! поддержки быстрого, эффектив- не случайно. В это время шли ярос- ми – к примеру поддержка множест-
ного и аккуратного программиро- тные «словесные войны» между IBM ва виртуальных DOS-машин (Multuply

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


ретроспектива
Virtual DOS Machine, MVDM) и менед- сессия просто исполняла Windows 3.0 ющая уже установленную на компью-
жер памяти с поддержкой пейджинга. в рамках виртуальной DOS-машины. тере копию Windows 3.x. Таким обра-
Более того, основная часть кода бы- Оконные сессии Win-OS/2 требовали зом снижалась цена конечного продук-
ла написана на C, а не на ассемблере, более нетривиального подхода в свя- та (IBM платила лицензионные отчис-
как в OS/2 1.x. зи с тем, что им было необходимо вза- ления Microsoft за использование ко-
Вторым существенным момен- имодействовать с PM/WPS-приложе- да Windows в Win-OS/2). Вместе с тем
том стал новый интерфейс пользова- ниями. Выход из ситуации был реали- эта версия продемонстрировала ситу-
теля под названием Workplace Shell зован написанием специальной вер- ацию на рынке. Используя свое моно-
(или WPS для краткости), являвший- сии экранного драйвера для Win-OS/2. польное положение, Microsoft с помо-
ся радикальным уходом от концепций, Такой подход, хотя и обеспечил хоро- щью манипуляций в сфере ценовой по-
заложенных в GUI OS/1.x и Windows шую производительность, но имел су- литики держала производителей кло-
(см. рис. 4). Новый интерфейс был щественный недостаток – это сдела- нов PC под жестким контролем, запре-
объектно-ориентированным и в нем ло процесс написания драйверов ви- щая им предустанавливать на прода-
все стало объектом – диск, принтер, деокарт для OS/2 намного более слож- ваемые компьютеры операционные
программа и так далее. Манипуляции ным и дорогим занятием и было одной системы, отличные от DOS/Windows
с объектами проводились с помощью из причин малого количества драйве- собственного производства. Позже та-
drag-n-drop – перемещение, копиро- ров для OS/2. Производителю прихо- кая политика была признана незакон-
вание, печать и уничтожение. В WPS дилось помимо создания видеодрай- ной, но OS/2 это уже не помогло. Вы-
широко использовалась правая кноп- вера для OS/2 дополнительно предо- пустив OS/2 for Windows, фирма IBM
ка мыши – для открытия контекстных ставлять специфическую OS/2 версию пыталась разрешить проблему без на-
меню и выполнения операций по пере- драйвера для Windows. Более логич- рушения OEM-соглашений производи-
таскиванию объектов. ным было бы написание «транслирую- телей компьютеров с Microsoft.
Для операционной системы OS/2 щего» драйвера, преобразовывавше- Несмотря на жесткий прессинг
2.0 была зарегистрирована торговая го вызовы функций Win-OS/2 в вызо- со стороны Microsoft времена OS/2 2.1
марка «Интегрирующая платформа» вы PM – тогда от производителя требо- и 2.11 были отмечены ростом количест-
(The Integrating Platform). Это назва- валось бы написание только OS/2 вер- ва приложений, написанных специаль-
ние напрямую намекало на уникаль- сии видеодрайвера. но для OS/2. IBM достигла соглаше-
ную возможность OS/2 2.0 исполнять На первых порах OS/2 2.0 столкну- ния с несколькими крупными произво-
существующие DOS, Windows и OS/2 лась с той же проблемой, что и OS/2 1.x дителями программного обеспечения
1.x приложения одновременно с но- до нее – недостатком родных приложе- о разработке OS/2 версий их приложе-
выми 32-разрядными родными прило- ний. Система прекрасно справлялась ний. В число таких компаний входили
жениями. В отличие от OS/2 1.x в вер- с запуском DOS, Windows и OS/2 1.x- Borland, Lotus, Novell и тогда еще са-
сии 2.0 поддержка DOS была превос- приложений, но на первых порах ощу- мостоятельная WordPerfect. IBM в не-
ходной. Система полностью использо- щалась нехватка родных 32-разряд- которых случаях даже субсидировала
вала появившийся в 386 и последую- ных программ. отдельные разработки. В то же время
щих процессорах виртуальный 8086- Microsoft проявляла не меньшую ак-
режим (Virtual 8086 mode). Злые язы- OS/2 2.1, 2.11, 2.11 SMP – тивность, однако не заключая догово-
ки компьютерного мира одно время надежная платформа, ра или оплачивая разработку, а, напро-
утверждали, что этот режим был реа- эпоха зрелости тив, шантажируя разработчиков ПО уг-
лизован в 386-м процессоре шокиро- Выпуск версии OS/2 2.1 в мае 1993 го- розами закрыть доступ к бета-версиям
ванными инженерами Intel – слухи о да явился следствием эволюционно- и информации о Windows, если о